Thu, 31 Aug 2017 15:18:52 +0800
merge
1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.tools.internal.ws.processor.model.java;
28 import com.sun.tools.internal.ws.processor.model.ModelException;
30 import java.util.*;
32 /**
33 *
34 * @author WS Development Team
35 */
36 public class JavaStructureType extends JavaType {
38 public JavaStructureType() {}
40 public JavaStructureType(String name, boolean present, Object owner) {
41 super(name, present, "null");
42 this.owner = owner;
43 }
45 public void add(JavaStructureMember m) {
46 if (membersByName.containsKey(m.getName())) {
47 throw new ModelException("model.uniqueness.javastructuretype",
48 new Object[] {m.getName(), getRealName()});
49 }
50 members.add(m);
51 membersByName.put(m.getName(), m);
52 }
55 public JavaStructureMember getMemberByName(String name) {
56 if (membersByName.size() != members.size()) {
57 initializeMembersByName();
58 }
59 return membersByName.get(name);
60 }
62 public Iterator getMembers() {
63 return members.iterator();
64 }
66 public int getMembersCount() {
67 return members.size();
68 }
70 /* serialization */
71 public List<JavaStructureMember> getMembersList() {
72 return members;
73 }
75 /* serialization */
76 public void setMembersList(List<JavaStructureMember> l) {
77 members = l;
78 }
80 private void initializeMembersByName() {
81 membersByName = new HashMap<String, JavaStructureMember>();
82 if (members != null) {
83 for (JavaStructureMember m : members) {
84 if (m.getName() != null &&
85 membersByName.containsKey(m.getName())) {
87 throw new ModelException("model.uniqueness");
88 }
89 membersByName.put(m.getName(), m);
90 }
91 }
92 }
94 public boolean isAbstract() {
95 return isAbstract;
96 }
98 public void setAbstract(boolean isAbstract) {
99 this.isAbstract = isAbstract;
100 }
102 public JavaStructureType getSuperclass() {
103 return superclass;
104 }
106 public void setSuperclass(JavaStructureType superclassType) {
107 superclass = superclassType;
108 }
110 public void addSubclass(JavaStructureType subclassType) {
111 subclasses.add(subclassType);
112 subclassType.setSuperclass(this);
113 }
115 public Iterator getSubclasses() {
116 if (subclasses == null || subclasses.size() == 0) {
117 return null;
118 }
119 return subclasses.iterator();
120 }
122 public Set getSubclassesSet() {
123 return subclasses;
124 }
126 /* serialization */
127 public void setSubclassesSet(Set s) {
128 subclasses = s;
129 for (Iterator iter = s.iterator(); iter.hasNext();) {
130 ((JavaStructureType) iter.next()).setSuperclass(this);
131 }
132 }
134 public Iterator getAllSubclasses() {
135 Set subs = getAllSubclassesSet();
136 if (subs.size() == 0) {
137 return null;
138 }
139 return subs.iterator();
140 }
142 public Set getAllSubclassesSet() {
143 Set transitiveSet = new HashSet();
144 Iterator subs = subclasses.iterator();
145 while (subs.hasNext()) {
146 transitiveSet.addAll(
147 ((JavaStructureType)subs.next()).getAllSubclassesSet());
148 }
149 transitiveSet.addAll(subclasses);
150 return transitiveSet;
151 }
153 public Object getOwner() {
155 // usually a SOAPStructureType
156 return owner;
157 }
159 public void setOwner(Object owner) {
161 // usually a SOAPStructureType
162 this.owner = owner;
163 }
165 private List<JavaStructureMember> members = new ArrayList();
166 private Map<String, JavaStructureMember> membersByName = new HashMap();
168 // known subclasses of this type
169 private Set subclasses = new HashSet();
170 private JavaStructureType superclass;
172 // usually a SOAPStructureType
173 private Object owner;
174 private boolean isAbstract = false;
175 }