From eb16b04d14b3bea6cd110f21361e049e35a37822 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 7 Oct 2014 09:17:37 +0200 Subject: Repackage to org.cristalise --- .../cristalise/lookup/ldap/LDAPClusterStorage.java | 152 +++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 src/main/java/org/cristalise/lookup/ldap/LDAPClusterStorage.java (limited to 'src/main/java/org/cristalise/lookup/ldap/LDAPClusterStorage.java') diff --git a/src/main/java/org/cristalise/lookup/ldap/LDAPClusterStorage.java b/src/main/java/org/cristalise/lookup/ldap/LDAPClusterStorage.java new file mode 100644 index 0000000..7132116 --- /dev/null +++ b/src/main/java/org/cristalise/lookup/ldap/LDAPClusterStorage.java @@ -0,0 +1,152 @@ +package org.cristalise.lookup.ldap; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import org.cristalise.kernel.common.ObjectNotFoundException; +import org.cristalise.kernel.common.PersistencyException; +import org.cristalise.kernel.entity.C2KLocalObject; +import org.cristalise.kernel.lookup.ItemPath; +import org.cristalise.kernel.lookup.Lookup; +import org.cristalise.kernel.persistency.ClusterStorage; +import org.cristalise.kernel.process.Gateway; +import org.cristalise.kernel.process.auth.Authenticator; +import org.cristalise.kernel.property.Property; +import org.cristalise.kernel.utils.Logger; + + +public class LDAPClusterStorage extends ClusterStorage { + LDAPPropertyManager ldapStore; + + @Override + public void open(Authenticator auth) throws PersistencyException { + Lookup lookup = Gateway.getLookup(); + if (lookup instanceof LDAPLookup) + ldapStore = ((LDAPLookup)lookup).getPropManager(); + else + throw new PersistencyException("Cannot use LDAP cluster storage without LDAP Lookup"); + + } + + @Override + public void close() throws PersistencyException { + } + + // introspection + @Override + public short queryClusterSupport(String clusterType) { + if (clusterType.equals(PROPERTY)) + return READWRITE; + else + return NONE; + } + + @Override + public String getName() { + return "LDAP Cluster Storage"; + } + + @Override + public String getId() { + return "LDAP"; + } + + // retrieve object by path + @Override + public C2KLocalObject get(ItemPath thisItem, String path) throws PersistencyException { + Logger.msg(6, "LDAPClusterStorage.get() - "+thisItem+"/"+path); + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength != 2) + throw new PersistencyException("Path length was invalid: "+path); + String type = tok.nextToken(); + + String objName = tok.nextToken(); + C2KLocalObject newObj; + + if (type.equals(PROPERTY)) { + try { + Property newProperty = ldapStore.getProperty(thisItem, objName); + newObj = newProperty; + } catch (ObjectNotFoundException ex) { + throw new PersistencyException("Property "+objName+" not found in "+thisItem); + } + + } + else + throw new PersistencyException("Cluster type "+type+" not supported."); + + return newObj; + } + // store object by path + @Override + public void put(ItemPath thisItem, C2KLocalObject obj) throws PersistencyException { + Logger.msg(6, "LDAPClusterStorage.put() - "+thisItem+"/"+ClusterStorage.getPath(obj)); + + String type = obj.getClusterType(); + + if (type.equals(PROPERTY)) { + try { + ldapStore.setProperty(thisItem, (Property)obj); + } catch (Exception e1) { + Logger.error(e1); + throw new PersistencyException("LDAPClusterStorage - could not write property"); + } + } + else + throw new PersistencyException("Cluster type "+type+" not supported."); + + } + // delete cluster + @Override + public void delete(ItemPath thisItem, String path) throws PersistencyException { + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength != 2) + throw new PersistencyException("Path length was invalid: "+path); + String type = tok.nextToken(); + + if (type.equals(PROPERTY)) { + try { + ldapStore.deleteProperty(thisItem, tok.nextToken()); + } catch (Exception e1) { + Logger.error(e1); + throw new PersistencyException("LDAPClusterStorage - could not delete property"); + } + } + else + throw new PersistencyException("Cluster type "+type+" not supported."); + + } + + /* navigation */ + + // directory listing + @Override + public String[] getClusterContents(ItemPath thisItem, String path) throws PersistencyException { + Logger.msg(6, "LDAPClusterStorage.getClusterContents() - "+thisItem+"/"+path); + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength > 1) + return new String[0]; + + String type = getClusterType(path); + + try { + if (type.equals(PROPERTY)) + return ldapStore.getPropertyNames(thisItem); + else + if (type.equals("")) { // root query + String[] allClusters = new String[0]; + ArrayList clusterList = new ArrayList(); + if (ldapStore.hasProperties(thisItem)) + clusterList.add(PROPERTY); + allClusters = clusterList.toArray(allClusters); + return allClusters; + } + else + throw new PersistencyException("Cluster type "+type+" not supported."); + } catch (ObjectNotFoundException e) { + throw new PersistencyException("Item "+thisItem+" does not exist"); + } + } +} -- cgit v1.2.3