aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/sun/gluegen/UnifiedName.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/com/sun/gluegen/UnifiedName.java')
-rw-r--r--src/java/com/sun/gluegen/UnifiedName.java216
1 files changed, 216 insertions, 0 deletions
diff --git a/src/java/com/sun/gluegen/UnifiedName.java b/src/java/com/sun/gluegen/UnifiedName.java
new file mode 100644
index 0000000..ec1cdb3
--- /dev/null
+++ b/src/java/com/sun/gluegen/UnifiedName.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (c) 2003-2005 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any kind. ALL
+ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
+ * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
+ * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
+ * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
+ * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
+ * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
+ * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
+ * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
+ * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
+ * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
+ * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed or intended for use
+ * in the design, construction, operation or maintenance of any nuclear
+ * facility.
+ *
+ */
+
+package com.sun.gluegen;
+
+import java.util.*;
+
+public class UnifiedName implements Cloneable {
+
+ public UnifiedName(String name) {
+ nameUni=name;
+ nameList=new ArrayList();
+ nameSet=new HashSet();
+ add(name);
+ }
+
+ protected UnifiedName(UnifiedName un) {
+ nameUni=un.nameUni;
+ nameList=new ArrayList(un.nameList);
+ nameSet=new HashSet(un.nameSet);
+ }
+
+ public void reset() {
+ resetUni();
+ resetOriginal();
+ }
+
+ public void resetUni() {
+ nameSet.remove(nameUni);
+ nameUni=(String)nameList.get(0);
+ }
+
+ public void resetOriginal() {
+ nameList.clear();
+ nameSet.clear();
+ add(nameUni);
+ }
+
+ public void setUni(String name) {
+ if(!nameUni.equals(name)) {
+ nameUni=name;
+ add(name);
+ }
+ }
+
+ /**
+ * unique in case this name reflects only one
+ * original entry (no extension unification)
+ */
+ public boolean isUnique() {
+ return nameSet.size()==1;
+ }
+
+ public void add(String name) {
+ if (nameSet.add(name)) {
+ nameList.add(name);
+ }
+ }
+ public void addAll(Collection col) {
+ for (Iterator iter = col.iterator(); iter.hasNext(); ) {
+ Object obj = iter.next();
+ if( obj instanceof String ) {
+ add((String)obj);
+ } else {
+ throw new ClassCastException("not a String: "+obj);
+ }
+ }
+
+ }
+
+ public boolean contains(UnifiedName un) {
+ boolean res = contains(un.nameUni);
+ for (Iterator iter = un.nameList.iterator(); !res && iter.hasNext(); ) {
+ res = contains((String)iter.next());
+ }
+ return res;
+ }
+
+ public boolean contains(String name) {
+ return nameSet.contains(name);
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if(obj instanceof UnifiedName) {
+ UnifiedName un = (UnifiedName)obj;
+ return nameUni.equals(un.nameUni) && nameSet.equals(un.nameSet);
+ }
+ return false;
+ }
+
+ public Object clone() {
+ return new UnifiedName(this);
+ }
+
+ public int hashCode() {
+ return nameSet.hashCode();
+ }
+
+ public String getUni() { return nameUni; }
+ public List getNameList() { return nameList; }
+ public Set getNameSet() { return nameSet; }
+
+ public int size() { return nameList.size(); }
+ public String get(int i) { return (String)nameList.get(i); }
+
+ public void remapAllNames(Map map) {
+ List allNames = new ArrayList();
+ // 1st pass: collect all other x-mappings to this one
+ for (Iterator iter = nameList.iterator(); iter.hasNext(); ) {
+ UnifiedName un = (UnifiedName) map.get((String)iter.next());
+ if(null!=un && this!=un) {
+ allNames.addAll(un.getNameList());
+ }
+ }
+ addAll(allNames);
+
+ // 2nd pass: map all containing names
+ for (Iterator iter = nameList.iterator(); iter.hasNext(); ) {
+ map.put((String)iter.next(), this);
+ }
+ }
+
+ public static UnifiedName getOrPut(Map map, String name) {
+ UnifiedName un = (UnifiedName)map.get(name);
+ if(null==un) {
+ un = new UnifiedName(name);
+ un.remapAllNames(map);
+ }
+ return un;
+ }
+
+ public String getCommentString() {
+ return getCommentString(true, " ");
+ }
+ public String getCommentString(boolean encloseCommentStartEnd, String seperator) {
+ if(nameList.size()==1 && ((String)nameList.get(0)).equals(nameUni)) {
+ return new String();
+ }
+ String res = new String();
+ if(encloseCommentStartEnd) {
+ res = res.concat(" /** ");
+ }
+ res = res.concat("Alias for: <code>");
+ res = res.concat(getOrigStringList(seperator));
+ res = res.concat("</code> ");
+ if(encloseCommentStartEnd) {
+ res = res.concat("*/");
+ }
+ return res;
+ }
+ public String getOrigStringList(String seperator) {
+ String res = new String();
+ for (Iterator iter = nameList.iterator(); iter.hasNext(); ) {
+ res = res.concat((String)iter.next());
+ if(iter.hasNext()) {
+ res = res.concat(seperator);
+ }
+ }
+ return res;
+ }
+
+ public String toString() {
+ if(nameList.size()==1 && ((String)nameList.get(0)).equals(nameUni)) {
+ return nameUni;
+ }
+ String res = nameUni + " /* " ;
+ for (Iterator iter = nameList.iterator(); iter.hasNext(); ) {
+ res = res.concat((String)iter.next()+", ");
+ }
+ res = res.concat(" */");
+ return res;
+ }
+
+ protected String nameUni;
+ protected List nameList;
+ protected HashSet nameSet;
+
+}
+