001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.naming.deployment.jsr88;
018
019 import javax.xml.namespace.QName;
020 import org.apache.geronimo.deployment.plugin.XmlBeanSupport;
021 import org.apache.geronimo.xbeans.geronimo.naming.GerPatternType;
022 import org.apache.xmlbeans.XmlObject;
023 import org.apache.xmlbeans.impl.values.XmlObjectBase;
024
025 /**
026 * Represents an element in a Geronimo dployment plan that has a child
027 * of type Pattern. This handles patterns that are a member of a choice as
028 * well as singleton patterns.
029 * <p>
030 * Has 1 JavaBean Properties <br />
031 * - pattern (type Pattern) </p>
032 *
033 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
034 */
035 public class HasPattern extends XmlBeanSupport {
036 public HasPattern() {
037 super(null);
038 }
039
040 public HasPattern(XmlObject xmlObject) {
041 super(xmlObject);
042 }
043
044 /**
045 * JavaBean getter for the Pattern property. Gets a JavaBean of type
046 * Pattern for the pattern child of this element, or null if there is no
047 * pattern child.
048 */
049 public Pattern getPattern() {
050 GerPatternType patternType = findPattern();
051 if(patternType == null) return null;
052 Pattern group = new Pattern();
053 group.setGroupId(patternType.getGroupId());
054 group.setArtifactId(patternType.getArtifactId());
055 group.setVersion(patternType.getVersion());
056 group.setModule(patternType.getModule());
057 group.setName(patternType.getName());
058 return group.empty() ? null : group;
059 }
060
061 /**
062 * JavaBean setter for the Pattern property. Calls the helper
063 * clearNonPatternFromChoice if a non-null Pattern is set.
064 */
065 public void setPattern(Pattern group) {
066 Pattern old = getPattern();
067 if(group != null) {
068 GerPatternType patternType;
069 if(old == null) {
070 patternType = (GerPatternType) ((XmlObjectBase)getXmlObject()).get_store().add_element_user(new QName("http://geronimo.apache.org/xml/ns/naming-1.2", "pattern"));
071 } else {
072 patternType = findPattern();
073 }
074 if(!isEmpty(group.getGroupId())) {
075 patternType.setGroupId(group.getGroupId());
076 } else {
077 if(patternType.isSetGroupId()) patternType.unsetGroupId();
078 }
079 if(!isEmpty(group.getArtifactId())) {
080 patternType.setArtifactId(group.getArtifactId());
081 } else {
082 if(patternType.isSetArtifactId()) patternType.unsetArtifactId();
083 }
084 if(!isEmpty(group.getModule())) {
085 patternType.setModule(group.getModule());
086 } else {
087 if(patternType.isSetModule()) patternType.unsetModule();
088 }
089 patternType.setName(group.getName());
090 if(!isEmpty(group.getVersion())) {
091 patternType.setVersion(group.getVersion());
092 } else {
093 if(patternType.isSetVersion()) patternType.unsetVersion();
094 }
095 clearNonPatternFromChoice();
096 } else {
097 if(old != null) {
098 ((XmlObjectBase)getXmlObject()).get_store().remove_element(new QName("http://geronimo.apache.org/xml/ns/naming-1.2", "pattern"), 0);
099 }
100 }
101 pcs.firePropertyChange("objectNameComponents", old, group);
102 }
103
104 /**
105 * Should be overridden to remove any non-pattern elements if this
106 * element has a pattern that's part of a choice. If this is called, it
107 * means a non-null Pattern is in the process of being set. This method
108 * should fire property change events on any elements it removes.
109 */
110 protected void clearNonPatternFromChoice() {}
111
112 /**
113 * Should be called to remove any pattern child element if the pattern is
114 * part of a choice and some other element in the choice was set to a
115 * non-null value. This will clear the pattern and send a property change
116 * event on the "pattern" property if the pattern was set.
117 */
118 protected void clearPatternFromChoice() {
119 Pattern pattern = getPattern();
120 if(pattern != null) {
121 ((XmlObjectBase)getXmlObject()).get_store().remove_element(new QName("http://geronimo.apache.org/xml/ns/naming-1.2", "pattern"), 0);
122 pcs.firePropertyChange("pattern", pattern, null);
123 }
124 }
125
126 /**
127 * Gets the pattern child of this element, or null if there is none.
128 */
129 protected GerPatternType findPattern() {
130 XmlObject[] patterns = getXmlObject().selectChildren(new QName(GerPatternType.type.getName().getNamespaceURI(), "pattern"));
131 if(patterns.length == 0) {
132 return null;
133 }
134 return (GerPatternType)patterns[0];
135 }
136 }