summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/lookup/DomainPath.java
diff options
context:
space:
mode:
Diffstat (limited to 'source/com/c2kernel/lookup/DomainPath.java')
-rwxr-xr-xsource/com/c2kernel/lookup/DomainPath.java153
1 files changed, 153 insertions, 0 deletions
diff --git a/source/com/c2kernel/lookup/DomainPath.java b/source/com/c2kernel/lookup/DomainPath.java
new file mode 100755
index 0000000..ad314ee
--- /dev/null
+++ b/source/com/c2kernel/lookup/DomainPath.java
@@ -0,0 +1,153 @@
+/**************************************************************************
+ * DomainPath.java
+ *
+ * $Revision: 1.22 $
+ * $Date: 2005/10/13 08:15:00 $
+ *
+ * Copyright (C) 2001 CERN - European Organization for Nuclear Research
+ * All rights reserved.
+ **************************************************************************/
+
+package com.c2kernel.lookup;
+
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.process.Gateway;
+import com.c2kernel.utils.Logger;
+import com.novell.ldap.LDAPAttribute;
+import com.novell.ldap.LDAPAttributeSet;
+
+
+/**
+* @version $Revision: 1.22 $ $Date: 2005/10/13 08:15:00 $
+* @author $Author: abranson $
+**/
+public class DomainPath extends Path
+{
+ private EntityPath target = null;
+ protected static String mTypeRoot;
+
+/* Very simple extension to Path. Only copies constructors and defines root */
+
+ public DomainPath()
+ {
+ super(Path.UNKNOWN);
+ }
+
+ public DomainPath(short type)
+ {
+ super();
+ mType = type;
+ }
+
+ public DomainPath(String[] path)
+ {
+ super(path, Path.UNKNOWN);
+ }
+
+ public DomainPath(String path)
+ {
+ super(path, Path.UNKNOWN);
+ }
+
+ public DomainPath(String path, EntityPath entity) throws InvalidEntityPathException
+ {
+ super(path, Path.UNKNOWN);
+ setEntity(entity);
+ }
+
+ public DomainPath(DomainPath parent, String child) {
+ super(parent, child);
+ }
+
+ /* the root of domain paths is /domain
+ * clearly
+ */
+ public String getRoot() {
+ return "domain";
+ }
+
+ public DomainPath getParent() {
+ if (mPath.length == 0)
+ return null;
+
+ String[] parentPath = new String[mPath.length-1];
+ System.arraycopy(mPath, 0, parentPath, 0, parentPath.length);
+ return new DomainPath(parentPath);
+ }
+
+ public void setEntity(EntityPath newTarget) {
+ if (newTarget == null) { // clear
+ target = null;
+ mType = Path.CONTEXT;
+ return;
+ }
+
+ target = newTarget;
+ mType = Path.ENTITY;
+ }
+
+ public EntityPath getEntity() throws ObjectNotFoundException {
+ if (mType == UNKNOWN) { // must decide
+ checkType();
+ }
+
+ if (target == null)
+ throw new ObjectNotFoundException("Path is a context", "");
+ return target;
+ }
+
+ public short getType() {
+ if (mType == UNKNOWN) { // must decide
+ checkType();
+ }
+ return mType;
+ }
+
+ public void checkType() {
+ try {
+ setEntity(Gateway.getLDAPLookup().resolvePath(this));
+ } catch (InvalidEntityPathException ex) {
+ Logger.error(ex);
+ mType = CONTEXT;
+ } catch (ObjectNotFoundException ex) {
+ mType = CONTEXT;
+ }
+
+ }
+
+ /**
+ * Retrieves the domkey of the path
+ * @return the last path component;
+ */
+ public String getName() {
+ return mPath[mPath.length-1];
+ }
+
+ public int getSysKey() {
+ if (mType == UNKNOWN) { // must decide
+ checkType();
+ }
+
+ if (mType == ENTITY) {
+ return target.getSysKey();
+ }
+ else return INVALID;
+ }
+
+ public LDAPAttributeSet createAttributeSet() {
+ LDAPAttributeSet attrs = new LDAPAttributeSet();
+ attrs.add(new LDAPAttribute("cn",getName()));
+ if (getType() == ENTITY) {
+ String objectclass_values[] = { "alias", "aliasObject" };
+ attrs.add(new LDAPAttribute("objectclass",objectclass_values));
+ attrs.add(new LDAPAttribute("aliasedObjectName",target.getFullDN()));
+ }
+
+ else
+ {
+ attrs.add(new LDAPAttribute("objectclass","cristalcontext"));
+ }
+ return attrs;
+ }
+}
+