001: /*
002: * Portions Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.tools.internal.ws.processor.model.java;
027:
028: import java.util.ArrayList;
029: import java.util.HashMap;
030: import java.util.HashSet;
031: import java.util.Iterator;
032: import java.util.List;
033: import java.util.Map;
034: import java.util.Set;
035:
036: import com.sun.tools.internal.ws.processor.model.ModelException;
037:
038: /**
039: *
040: * @author WS Development Team
041: */
042: public class JavaStructureType extends JavaType {
043:
044: public JavaStructureType() {
045: }
046:
047: public JavaStructureType(String name, boolean present, Object owner) {
048: super (name, present, "null");
049: this .owner = owner;
050: }
051:
052: public void add(JavaStructureMember m) {
053: if (membersByName.containsKey(m.getName())) {
054: throw new ModelException(
055: "model.uniqueness.javastructuretype", new Object[] {
056: m.getName(), getRealName() });
057: }
058: members.add(m);
059: membersByName.put(m.getName(), m);
060: }
061:
062: public JavaStructureMember getMemberByName(String name) {
063: if (membersByName.size() != members.size()) {
064: initializeMembersByName();
065: }
066: return membersByName.get(name);
067: }
068:
069: public Iterator getMembers() {
070: return members.iterator();
071: }
072:
073: public int getMembersCount() {
074: return members.size();
075: }
076:
077: /* serialization */
078: public List<JavaStructureMember> getMembersList() {
079: return members;
080: }
081:
082: /* serialization */
083: public void setMembersList(List<JavaStructureMember> l) {
084: members = l;
085: }
086:
087: private void initializeMembersByName() {
088: membersByName = new HashMap<String, JavaStructureMember>();
089: if (members != null) {
090: for (JavaStructureMember m : members) {
091: if (m.getName() != null
092: && membersByName.containsKey(m.getName())) {
093:
094: throw new ModelException("model.uniqueness");
095: }
096: membersByName.put(m.getName(), m);
097: }
098: }
099: }
100:
101: public boolean isAbstract() {
102: return isAbstract;
103: }
104:
105: public void setAbstract(boolean isAbstract) {
106: this .isAbstract = isAbstract;
107: }
108:
109: public JavaStructureType getSuperclass() {
110: return super class;
111: }
112:
113: public void setSuperclass(JavaStructureType super classType) {
114: super class = super classType;
115: }
116:
117: public void addSubclass(JavaStructureType subclassType) {
118: subclasses.add(subclassType);
119: subclassType.setSuperclass(this );
120: }
121:
122: public Iterator getSubclasses() {
123: if (subclasses == null || subclasses.size() == 0) {
124: return null;
125: }
126: return subclasses.iterator();
127: }
128:
129: public Set getSubclassesSet() {
130: return subclasses;
131: }
132:
133: /* serialization */
134: public void setSubclassesSet(Set s) {
135: subclasses = s;
136: for (Iterator iter = s.iterator(); iter.hasNext();) {
137: ((JavaStructureType) iter.next()).setSuperclass(this );
138: }
139: }
140:
141: public Iterator getAllSubclasses() {
142: Set subs = getAllSubclassesSet();
143: if (subs.size() == 0) {
144: return null;
145: }
146: return subs.iterator();
147: }
148:
149: public Set getAllSubclassesSet() {
150: Set transitiveSet = new HashSet();
151: Iterator subs = subclasses.iterator();
152: while (subs.hasNext()) {
153: transitiveSet.addAll(((JavaStructureType) subs.next())
154: .getAllSubclassesSet());
155: }
156: transitiveSet.addAll(subclasses);
157: return transitiveSet;
158: }
159:
160: public Object getOwner() {
161:
162: // usually a SOAPStructureType
163: return owner;
164: }
165:
166: public void setOwner(Object owner) {
167:
168: // usually a SOAPStructureType
169: this .owner = owner;
170: }
171:
172: private List<JavaStructureMember> members = new ArrayList();
173: private Map<String, JavaStructureMember> membersByName = new HashMap();
174:
175: // known subclasses of this type
176: private Set subclasses = new HashSet();
177: private JavaStructureType super class;
178:
179: // usually a SOAPStructureType
180: private Object owner;
181: private boolean isAbstract = false;
182: }
|