From b086f57f56bf0eb9dab9cf321a0f69aaaae84347 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 30 May 2012 08:37:45 +0200 Subject: Initial Maven Conversion --- src/main/java/com/c2kernel/lookup/Path.java | 303 ++++++++++++++++++++++++++++ 1 file changed, 303 insertions(+) create mode 100644 src/main/java/com/c2kernel/lookup/Path.java (limited to 'src/main/java/com/c2kernel/lookup/Path.java') diff --git a/src/main/java/com/c2kernel/lookup/Path.java b/src/main/java/com/c2kernel/lookup/Path.java new file mode 100644 index 0000000..16d4f07 --- /dev/null +++ b/src/main/java/com/c2kernel/lookup/Path.java @@ -0,0 +1,303 @@ +/************************************************************************** + * Path.java + * + * $Revision: 1.27 $ + * $Date: 2006/01/17 07:49:58 $ + * + * Copyright (C) 2001 CERN - European Organization for Nuclear Research + * All rights reserved. + **************************************************************************/ + +package com.c2kernel.lookup; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.StringTokenizer; + +import com.c2kernel.common.ObjectCannotBeUpdated; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.process.Gateway; +import com.novell.ldap.LDAPAttributeSet; +import com.novell.ldap.LDAPConnection; +import com.novell.ldap.LDAPSearchConstraints; + + +/** +* @version $Revision: 1.27 $ $Date: 2006/01/17 07:49:58 $ +* @author $Author: abranson $ +**/ +public abstract class Path implements Serializable +{ + public static final String delim = "/"; + + // types + public static final short UNKNOWN = 0; + public static final short CONTEXT = 1; + public static final short ENTITY = 2; + + // invalid int key + public static final int INVALID = -1; + + protected String[] mPath = new String[0]; + + // slash delimited path + protected String mStringPath = null; + // entity or context + protected short mType = CONTEXT; + // LDAP dn + protected String mDN = null; + // int syskey (only valid for entity SystemPaths) + protected int mSysKey = INVALID; + + // ior is stored in here when it is resolved + protected org.omg.CORBA.Object mIOR = null; + // + // needed for unusual subclass constructors + + protected static String mGlobalPath; //cern.ch + protected static String mRootPath; //cristal2 + protected static String mLocalPath; //lab27 + + public Path() { + } + + /* + * Creates an empty path + */ + public Path(short type) + { + mType = type; + } + + /* + * Creates a path with an arraylist of the path (big endian) + */ + public Path(String[] path, short type) { + setPath(path); + mType = type; + } + + /* + * Creates a path from a slash separated string (big endian) + */ + public Path(String path, short type) { + setPath(path); + mType = type; + } + + /* + * Create a path by appending a child string to an existing path + */ + public Path(Path parent, String child, short type) { + String[] oldPath = parent.getPath(); + mPath = new String[oldPath.length+1]; + for (int i=0; i newPath = new ArrayList(); + StringTokenizer tok = new StringTokenizer(path, delim); + if (tok.hasMoreTokens()) { + String first = tok.nextToken(); + if (!first.equals(getRoot())) + newPath.add(first); + while (tok.hasMoreTokens()) + newPath.add(tok.nextToken()); + } + + mPath = (newPath.toArray(mPath)); + mStringPath = null; + mDN = null; + mSysKey = INVALID; + } + + // lookup sets the IOR + public void setIOR(org.omg.CORBA.Object IOR) { + mIOR = IOR; + if (IOR == null) mType = Path.CONTEXT; + else mType = Path.ENTITY; + } + + /* clone another path object + */ + public void setPath(Path path) + { + mStringPath = null; + mDN = null; + mPath = (path.getPath().clone()); + mSysKey = INVALID; + } + + /* LDAP dn e.g. cn=6L,cn=Barrel,cn=Crystal,cn=Product,cn=domain, + * system/domain node PRESENT + * trailing comma + */ + public void setDN(String dn) + { + // strip off root path components + String root = "cn="+getRoot()+","; + if (dn.endsWith(mLocalPath)) + dn = dn.substring(0, dn.lastIndexOf(mLocalPath)); + + if (dn.endsWith(root)) + dn = dn.substring(0, dn.lastIndexOf(root)); + + ArrayList newPath = new ArrayList(); + StringTokenizer tok = new StringTokenizer(dn, ","); + while (tok.hasMoreTokens()) { + String nextPath = tok.nextToken(); + if (nextPath.indexOf("cn=") == 0) + newPath.add(0, nextPath.substring(3)); + else + break; + } + mPath = (newPath.toArray(mPath)); + mSysKey = INVALID; + mStringPath = null; + mDN = dn+root; + } + + /*************************************************************************/ + + /* + * Getter Methods + */ + + // root is defined as 'domain', 'entity' or 'system' in subclasses + public abstract String getRoot(); + + public String[] getPath() + { + return mPath; + } + + public String getString() + { + if (mStringPath == null) { + StringBuffer stringPathBuffer = new StringBuffer("/").append(getRoot()); + for (String element : mPath) + stringPathBuffer.append(delim).append(element); + mStringPath = stringPathBuffer.toString(); + } + return mStringPath; + } + + public String getDN() { + if (mDN == null) { + StringBuffer dnBuffer = new StringBuffer(); + for (int i=mPath.length-1; i>=0; i--) + dnBuffer.append("cn=").append(mPath[i]).append(","); + dnBuffer.append("cn="+getRoot()+","); + mDN = dnBuffer.toString(); + } + return mDN; + } + + public String getFullDN() { + return getDN()+mLocalPath; + } + + public boolean exists() { + return Gateway.getLDAPLookup().exists(this); + } + + /** Queries the lookup for the IOR + */ + + public org.omg.CORBA.Object getIOR() { + org.omg.CORBA.Object newIOR = null; + if (mIOR==null) { // if not cached try to resolve + LDAPLookup myLookup = Gateway.getLDAPLookup(); + try { + newIOR = myLookup.getIOR(this); + } catch (ObjectNotFoundException ex) { + } + setIOR(newIOR); + } + return mIOR; + } + + @Override + public String toString() { + return getString(); + } + + public short getType() { + return mType; + } + + public int getSysKey() { + return mSysKey; + } + + public Enumeration getChildren() { + String filter = "objectclass=*"; + LDAPSearchConstraints searchCons = new LDAPSearchConstraints(); + searchCons.setBatchSize(10); + searchCons.setDereference(LDAPSearchConstraints.DEREF_FINDING ); + return Gateway.getLDAPLookup().search(getFullDN(), LDAPConnection.SCOPE_ONE,filter,searchCons); + } + + public Path find(String name) throws ObjectNotFoundException { + Enumeration e = Gateway.getLDAPLookup().search(this, name); + if (e.hasMoreElements()) { + Path thisPath = e.nextElement(); + if (e.hasMoreElements()) + throw new ObjectNotFoundException("More than one match for "+name, ""); + return thisPath; + } + throw new ObjectNotFoundException("No match for "+name, ""); + } + + public abstract EntityPath getEntity() throws ObjectNotFoundException; + + public abstract LDAPAttributeSet createAttributeSet() throws ObjectCannotBeUpdated; + + @Override + public boolean equals( Object path ) + { + return toString().equals(path.toString()); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } + + public String dump() { + StringBuffer comp = new StringBuffer("Components: { "); + for (String element : mPath) + comp.append("'").append(element).append("' "); + return "Path - dump(): "+comp.toString()+"}\n dn="+getDN()+"\n string="+toString()+"\n int="+getSysKey()+"\n type="+mType; + } +} + -- cgit v1.2.3