From fdaf02db3616b7b36168e97462b7d55adc47fee2 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Thu, 24 Jul 2014 09:23:15 +0200 Subject: Move cluster storage implementation into lookup.ldap package, leave stubs in the old persistency package for backwards compatibility. --- .../com/c2kernel/lookup/ldap/LDAPClientReader.java | 44 +++++ .../c2kernel/lookup/ldap/LDAPClusterStorage.java | 176 ++++++++++++++++++++ .../com/c2kernel/persistency/LDAPClientReader.java | 50 ++---- .../c2kernel/persistency/LDAPClusterStorage.java | 184 ++------------------- 4 files changed, 242 insertions(+), 212 deletions(-) create mode 100644 src/main/java/com/c2kernel/lookup/ldap/LDAPClientReader.java create mode 100644 src/main/java/com/c2kernel/lookup/ldap/LDAPClusterStorage.java diff --git a/src/main/java/com/c2kernel/lookup/ldap/LDAPClientReader.java b/src/main/java/com/c2kernel/lookup/ldap/LDAPClientReader.java new file mode 100644 index 0000000..a02d4fd --- /dev/null +++ b/src/main/java/com/c2kernel/lookup/ldap/LDAPClientReader.java @@ -0,0 +1,44 @@ +package com.c2kernel.lookup.ldap; + +import com.c2kernel.entity.C2KLocalObject; +import com.c2kernel.persistency.ClusterStorageException; + +/** Allows clients to directly load properties and collections from the LDAP +* so no CORBA calls need to be made during normal browsing +*/ + +public class LDAPClientReader extends LDAPClusterStorage { + // return all readwrite support as readonly + @Override + public short queryClusterSupport(String clusterType) { + return (short)(super.queryClusterSupport(clusterType) & READ); + } + + + /** + * @see com.c2kernel.persistency.ClusterStorage#delete(Integer, String) + */ + @Override + public void delete(Integer sysKey, String path) + throws ClusterStorageException { + throw new ClusterStorageException("Writing not supported in ClientReader"); + } + + /** + * @see com.c2kernel.persistency.ClusterStorage#getName() + */ + @Override + public String getName() { + return "LDAP Client Cluster Reader"; + } + + /** + * @see com.c2kernel.persistency.ClusterStorage#put(Integer, String, C2KLocalObject) + */ + + public void put(Integer sysKey, String path, C2KLocalObject obj) + throws ClusterStorageException { + throw new ClusterStorageException("Writing not supported in ClientReader"); + } + +} diff --git a/src/main/java/com/c2kernel/lookup/ldap/LDAPClusterStorage.java b/src/main/java/com/c2kernel/lookup/ldap/LDAPClusterStorage.java new file mode 100644 index 0000000..f309378 --- /dev/null +++ b/src/main/java/com/c2kernel/lookup/ldap/LDAPClusterStorage.java @@ -0,0 +1,176 @@ +package com.c2kernel.lookup.ldap; +import java.util.ArrayList; +import java.util.StringTokenizer; + +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.entity.C2KLocalObject; +import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.lookup.Lookup; +import com.c2kernel.persistency.ClusterStorage; +import com.c2kernel.persistency.ClusterStorageException; +import com.c2kernel.process.Gateway; +import com.c2kernel.process.auth.Authenticator; +import com.c2kernel.property.Property; +import com.c2kernel.utils.Logger; + +public class LDAPClusterStorage extends ClusterStorage { + LDAPPropertyManager ldapStore; + + @Override + public void open(Authenticator auth) throws ClusterStorageException { + Lookup lookup = Gateway.getLookup(); + if (lookup instanceof LDAPLookup) + ldapStore = ((LDAPLookup)lookup).getPropManager(); + else + throw new ClusterStorageException("Cannot use LDAP cluster storage without LDAP Lookup"); + + } + + @Override + public void close() throws ClusterStorageException { + } + + // 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(Integer sysKey, String path) throws ClusterStorageException { + Logger.msg(6, "LDAPClusterStorage.get() - "+sysKey+"/"+path); + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength != 2) + throw new ClusterStorageException("Path length was invalid: "+path); + String type = tok.nextToken(); + + ItemPath thisEntity; + try { + thisEntity = new ItemPath(sysKey.intValue()); + } catch (InvalidItemPathException e) { + throw new ClusterStorageException("Invalid Syskey:"+sysKey); + } + + String objName = tok.nextToken(); + C2KLocalObject newObj; + + if (type.equals(PROPERTY)) { + try { + Property newProperty = ldapStore.getProperty(thisEntity, objName); + newObj = newProperty; + } catch (ObjectNotFoundException ex) { + throw new ClusterStorageException("Property "+objName+" not found in "+sysKey); + } + + } + else + throw new ClusterStorageException("Cluster type "+type+" not supported."); + + return newObj; + } + // store object by path + @Override + public void put(Integer sysKey, C2KLocalObject obj) throws ClusterStorageException { + Logger.msg(6, "LDAPClusterStorage.put() - "+sysKey+"/"+ClusterStorage.getPath(obj)); + + String type = obj.getClusterType(); + + ItemPath thisEntity; + try { + thisEntity = new ItemPath(sysKey.intValue()); + } catch (InvalidItemPathException e) { + throw new ClusterStorageException("Invalid Syskey:"+sysKey); + } + + if (type.equals(PROPERTY)) { + try { + ldapStore.setProperty(thisEntity, (Property)obj); + } catch (Exception e1) { + Logger.error(e1); + throw new ClusterStorageException("LDAPClusterStorage - could not write property"); + } + } + else + throw new ClusterStorageException("Cluster type "+type+" not supported."); + + } + // delete cluster + @Override + public void delete(Integer sysKey, String path) throws ClusterStorageException { + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength != 2) + throw new ClusterStorageException("Path length was invalid: "+path); + String type = tok.nextToken(); + + ItemPath thisEntity; + try { + thisEntity = new ItemPath(sysKey.intValue()); + } catch (InvalidItemPathException e) { + throw new ClusterStorageException("Invalid Syskey:"+sysKey); + } + + if (type.equals(PROPERTY)) { + try { + ldapStore.deleteProperty(thisEntity, tok.nextToken()); + } catch (Exception e1) { + Logger.error(e1); + throw new ClusterStorageException("LDAPClusterStorage - could not delete property"); + } + } + else + throw new ClusterStorageException("Cluster type "+type+" not supported."); + + } + + /* navigation */ + + // directory listing + @Override + public String[] getClusterContents(Integer sysKey, String path) throws ClusterStorageException { + Logger.msg(6, "LDAPClusterStorage.getClusterContents() - "+sysKey+"/"+path); + StringTokenizer tok = new StringTokenizer(path, "/"); + int pathLength = tok.countTokens(); + if (pathLength > 1) + return new String[0]; + + String type = getClusterType(path); + try + { + ItemPath thisEntity = new ItemPath(sysKey.intValue()); + if (type.equals(PROPERTY)) + return ldapStore.getPropertyNames(thisEntity); + else + if (type.equals("")) { // root query + String[] allClusters = new String[0]; + ArrayList clusterList = new ArrayList(); + if (ldapStore.hasProperties(thisEntity)) + clusterList.add(PROPERTY); + allClusters = clusterList.toArray(allClusters); + return allClusters; + } + else + throw new ClusterStorageException("Cluster type "+type+" not supported."); + } catch (InvalidItemPathException e) { + throw new ClusterStorageException("Invalid Syskey:"+sysKey); + } catch (ObjectNotFoundException e) { + throw new ClusterStorageException("Entity "+sysKey+" does not exist"); + } + } +} diff --git a/src/main/java/com/c2kernel/persistency/LDAPClientReader.java b/src/main/java/com/c2kernel/persistency/LDAPClientReader.java index ac9215c..4458ac6 100644 --- a/src/main/java/com/c2kernel/persistency/LDAPClientReader.java +++ b/src/main/java/com/c2kernel/persistency/LDAPClientReader.java @@ -1,43 +1,15 @@ package com.c2kernel.persistency; -import com.c2kernel.entity.C2KLocalObject; - -/** Allows clients to directly load properties and collections from the LDAP -* so no CORBA calls need to be made during normal browsing -*/ - -public class LDAPClientReader extends LDAPClusterStorage { - // return all readwrite support as readonly - @Override - public short queryClusterSupport(String clusterType) { - return (short)(super.queryClusterSupport(clusterType) & READ); - } - - - /** - * @see com.c2kernel.persistency.ClusterStorage#delete(Integer, String) - */ - @Override - public void delete(Integer sysKey, String path) - throws ClusterStorageException { - throw new ClusterStorageException("Writing not supported in ClientReader"); - } - - /** - * @see com.c2kernel.persistency.ClusterStorage#getName() - */ - @Override - public String getName() { - return "LDAP Client Cluster Reader"; +/** + * Provided for easier loading (may be referenced without package in ClusterStorage property) + * + * @author abranson + * + */ +public class LDAPClientReader extends com.c2kernel.lookup.ldap.LDAPClientReader { + + public LDAPClientReader() { + super(); } - - /** - * @see com.c2kernel.persistency.ClusterStorage#put(Integer, String, C2KLocalObject) - */ - - public void put(Integer sysKey, String path, C2KLocalObject obj) - throws ClusterStorageException { - throw new ClusterStorageException("Writing not supported in ClientReader"); - } - + } diff --git a/src/main/java/com/c2kernel/persistency/LDAPClusterStorage.java b/src/main/java/com/c2kernel/persistency/LDAPClusterStorage.java index 4762a33..005c6e8 100644 --- a/src/main/java/com/c2kernel/persistency/LDAPClusterStorage.java +++ b/src/main/java/com/c2kernel/persistency/LDAPClusterStorage.java @@ -1,176 +1,14 @@ package com.c2kernel.persistency; -import java.util.ArrayList; -import java.util.StringTokenizer; -import com.c2kernel.common.ObjectNotFoundException; -import com.c2kernel.entity.C2KLocalObject; -import com.c2kernel.lookup.InvalidItemPathException; -import com.c2kernel.lookup.ItemPath; -import com.c2kernel.lookup.Lookup; -import com.c2kernel.lookup.ldap.LDAPLookup; -import com.c2kernel.lookup.ldap.LDAPPropertyManager; -import com.c2kernel.process.Gateway; -import com.c2kernel.process.auth.Authenticator; -import com.c2kernel.property.Property; -import com.c2kernel.utils.Logger; - -public class LDAPClusterStorage extends ClusterStorage { - LDAPPropertyManager ldapStore; - - @Override - public void open(Authenticator auth) throws ClusterStorageException { - Lookup lookup = Gateway.getLookup(); - if (lookup instanceof LDAPLookup) - ldapStore = ((LDAPLookup)lookup).getPropManager(); - else - throw new ClusterStorageException("Cannot use LDAP cluster storage without LDAP Lookup"); - - } - - @Override - public void close() throws ClusterStorageException { - } - - // 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(Integer sysKey, String path) throws ClusterStorageException { - Logger.msg(6, "LDAPClusterStorage.get() - "+sysKey+"/"+path); - StringTokenizer tok = new StringTokenizer(path, "/"); - int pathLength = tok.countTokens(); - if (pathLength != 2) - throw new ClusterStorageException("Path length was invalid: "+path); - String type = tok.nextToken(); - - ItemPath thisEntity; - try { - thisEntity = new ItemPath(sysKey.intValue()); - } catch (InvalidItemPathException e) { - throw new ClusterStorageException("Invalid Syskey:"+sysKey); - } - - String objName = tok.nextToken(); - C2KLocalObject newObj; - - if (type.equals(PROPERTY)) { - try { - Property newProperty = ldapStore.getProperty(thisEntity, objName); - newObj = newProperty; - } catch (ObjectNotFoundException ex) { - throw new ClusterStorageException("Property "+objName+" not found in "+sysKey); - } - - } - else - throw new ClusterStorageException("Cluster type "+type+" not supported."); - - return newObj; - } - // store object by path - @Override - public void put(Integer sysKey, C2KLocalObject obj) throws ClusterStorageException { - Logger.msg(6, "LDAPClusterStorage.put() - "+sysKey+"/"+ClusterStorage.getPath(obj)); - - String type = obj.getClusterType(); - - ItemPath thisEntity; - try { - thisEntity = new ItemPath(sysKey.intValue()); - } catch (InvalidItemPathException e) { - throw new ClusterStorageException("Invalid Syskey:"+sysKey); - } - - if (type.equals(PROPERTY)) { - try { - ldapStore.setProperty(thisEntity, (Property)obj); - } catch (Exception e1) { - Logger.error(e1); - throw new ClusterStorageException("LDAPClusterStorage - could not write property"); - } - } - else - throw new ClusterStorageException("Cluster type "+type+" not supported."); - - } - // delete cluster - @Override - public void delete(Integer sysKey, String path) throws ClusterStorageException { - StringTokenizer tok = new StringTokenizer(path, "/"); - int pathLength = tok.countTokens(); - if (pathLength != 2) - throw new ClusterStorageException("Path length was invalid: "+path); - String type = tok.nextToken(); - - ItemPath thisEntity; - try { - thisEntity = new ItemPath(sysKey.intValue()); - } catch (InvalidItemPathException e) { - throw new ClusterStorageException("Invalid Syskey:"+sysKey); - } - - if (type.equals(PROPERTY)) { - try { - ldapStore.deleteProperty(thisEntity, tok.nextToken()); - } catch (Exception e1) { - Logger.error(e1); - throw new ClusterStorageException("LDAPClusterStorage - could not delete property"); - } - } - else - throw new ClusterStorageException("Cluster type "+type+" not supported."); - - } - - /* navigation */ - - // directory listing - @Override - public String[] getClusterContents(Integer sysKey, String path) throws ClusterStorageException { - Logger.msg(6, "LDAPClusterStorage.getClusterContents() - "+sysKey+"/"+path); - StringTokenizer tok = new StringTokenizer(path, "/"); - int pathLength = tok.countTokens(); - if (pathLength > 1) - return new String[0]; - - String type = getClusterType(path); - try - { - ItemPath thisEntity = new ItemPath(sysKey.intValue()); - if (type.equals(PROPERTY)) - return ldapStore.getPropertyNames(thisEntity); - else - if (type.equals("")) { // root query - String[] allClusters = new String[0]; - ArrayList clusterList = new ArrayList(); - if (ldapStore.hasProperties(thisEntity)) - clusterList.add(PROPERTY); - allClusters = clusterList.toArray(allClusters); - return allClusters; - } - else - throw new ClusterStorageException("Cluster type "+type+" not supported."); - } catch (InvalidItemPathException e) { - throw new ClusterStorageException("Invalid Syskey:"+sysKey); - } catch (ObjectNotFoundException e) { - throw new ClusterStorageException("Entity "+sysKey+" does not exist"); - } - } +/** + * Provided for easier loading (may be referenced without package in ClusterStorage property) + * + * @author abranson + * + */ +public class LDAPClusterStorage extends com.c2kernel.lookup.ldap.LDAPClusterStorage { + + public LDAPClusterStorage() { + super(); + } } -- cgit v1.2.3