1 /* 2 * Copyright (c) 1997, 2013, 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 */ 25 26 package com.sun.tools.internal.ws.processor.model.java; 27 28 import com.sun.tools.internal.ws.processor.model.ModelException; 29 30 import java.util.*; 31 32 /** 33 * 34 * @author WS Development Team 35 */ 36 public class JavaStructureType extends JavaType { 37 38 public JavaStructureType() {} 39 40 public JavaStructureType(String name, boolean present, Object owner) { 41 super(name, present, "null"); 42 this.owner = owner; 43 } 44 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 } 53 54 55 public JavaStructureMember getMemberByName(String name) { 56 if (membersByName.size() != members.size()) { 57 initializeMembersByName(); 58 } 59 return membersByName.get(name); 60 } 61 62 public Iterator getMembers() { 63 return members.iterator(); 64 } 65 66 public int getMembersCount() { 67 return members.size(); 68 } 69 70 /* serialization */ 71 public List<JavaStructureMember> getMembersList() { 72 return members; 73 } 74 75 /* serialization */ 76 public void setMembersList(List<JavaStructureMember> l) { 77 members = l; 78 } 79 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())) { 86 87 throw new ModelException("model.uniqueness"); 88 } 89 membersByName.put(m.getName(), m); 90 } 91 } 92 } 93 94 public boolean isAbstract() { 95 return isAbstract; 96 } 97 98 public void setAbstract(boolean isAbstract) { 99 this.isAbstract = isAbstract; 100 } 101 102 public JavaStructureType getSuperclass() { 103 return superclass; 104 } 105 106 public void setSuperclass(JavaStructureType superclassType) { 107 superclass = superclassType; 108 } 109 110 public void addSubclass(JavaStructureType subclassType) { 111 subclasses.add(subclassType); 112 subclassType.setSuperclass(this); 113 } 114 115 public Iterator getSubclasses() { 116 if (subclasses == null || subclasses.size() == 0) { 117 return null; 118 } 119 return subclasses.iterator(); 120 } 121 122 public Set getSubclassesSet() { 123 return subclasses; 124 } 125 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 } 133 134 public Iterator getAllSubclasses() { 135 Set subs = getAllSubclassesSet(); 136 if (subs.size() == 0) { 137 return null; 138 } 139 return subs.iterator(); 140 } 141 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 } 152 153 public Object getOwner() { 154 155 // usually a SOAPStructureType 156 return owner; 157 } 158 159 public void setOwner(Object owner) { 160 161 // usually a SOAPStructureType 162 this.owner = owner; 163 } 164 165 private List<JavaStructureMember> members = new ArrayList(); 166 private Map<String, JavaStructureMember> membersByName = new HashMap(); 167 168 // known subclasses of this type 169 private Set subclasses = new HashSet(); 170 private JavaStructureType superclass; 171 172 // usually a SOAPStructureType 173 private Object owner; 174 private boolean isAbstract = false; 175 }