diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-06-05 15:52:08 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-06-05 15:52:08 +0200 |
| commit | ab0a3220a0244188f306372cfadb068dbc5c8be7 (patch) | |
| tree | 48b07fbd966254015ac2cafc6ef44044414a45d5 | |
| parent | dc08625d66657c6da793aa6deaf218ebc6367c98 (diff) | |
Update for issue #192 - adding authenticator support
3 files changed, 2 insertions, 518 deletions
diff --git a/src/main/java/com/c2kernel/persistency/XMLDBClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLDBClusterStorage.java index ec1dd0c..aec0442 100644 --- a/src/main/java/com/c2kernel/persistency/XMLDBClusterStorage.java +++ b/src/main/java/com/c2kernel/persistency/XMLDBClusterStorage.java @@ -15,6 +15,7 @@ import org.xmldb.api.modules.CollectionManagementService; import com.c2kernel.entity.C2KLocalObject;
import com.c2kernel.persistency.outcome.Outcome;
import com.c2kernel.process.Gateway;
+import com.c2kernel.process.auth.Authenticator;
import com.c2kernel.utils.Logger;
public class XMLDBClusterStorage extends ClusterStorage {
@@ -57,7 +58,7 @@ public class XMLDBClusterStorage extends ClusterStorage { * @see com.c2kernel.persistency.ClusterStorage#open()
*/
@Override
- public void open() throws ClusterStorageException {
+ public void open(Authenticator auth) throws ClusterStorageException {
final String driver = "org.exist.xmldb.DatabaseImpl";
// Uncomment the following for integrated existdb
diff --git a/src/main/java/com/c2kernel/persistency/XMLDBSyskeyTypeClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLDBSyskeyTypeClusterStorage.java deleted file mode 100644 index e840ec9..0000000 --- a/src/main/java/com/c2kernel/persistency/XMLDBSyskeyTypeClusterStorage.java +++ /dev/null @@ -1,260 +0,0 @@ -package com.c2kernel.persistency;
-
-import java.util.ArrayList;
-
-import org.xmldb.api.DatabaseManager;
-import org.xmldb.api.base.Collection;
-import org.xmldb.api.base.Database;
-import org.xmldb.api.base.ErrorCodes;
-import org.xmldb.api.base.Resource;
-import org.xmldb.api.base.XMLDBException;
-import org.xmldb.api.modules.CollectionManagementService;
-
-import com.c2kernel.entity.C2KLocalObject;
-import com.c2kernel.persistency.outcome.Outcome;
-import com.c2kernel.process.Gateway;
-import com.c2kernel.utils.Logger;
-
-public class XMLDBSyskeyTypeClusterStorage extends ClusterStorage {
-
- Database database;
- Collection db;
-
- public XMLDBSyskeyTypeClusterStorage() throws Exception {
-
- }
-
- private static Collection verifyCollection(Collection parent, String name, boolean create) throws ClusterStorageException {
- Collection coll;
- try {
- coll = parent.getChildCollection(name);
- if (coll == null)
- throw new XMLDBException(ErrorCodes.NO_SUCH_COLLECTION);
- } catch (XMLDBException ex) {
- if (ex.errorCode == ErrorCodes.NO_SUCH_COLLECTION) {
- if (create) {
- try {
- CollectionManagementService collManager = (CollectionManagementService)parent.getService("CollectionManagementService", "1.0");
- coll = collManager.createCollection(name);
- } catch (Exception ex2) {
- throw new ClusterStorageException("Could not create XMLDB collection for item "+name);
- }
- }
- else // not found
- return null;
- }
- else {
- Logger.error(ex);
- throw new ClusterStorageException("Error loading XMLDB collection for item "+name);
- }
- }
- return coll;
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#open()
- */
- @Override
- public void open() throws ClusterStorageException {
-
- final String driver = "org.exist.xmldb.DatabaseImpl";
- // Uncomment the following for integrated existdb
- //System.setProperty("exist.initdb", "true");
- //System.setProperty("exist.home", Gateway.getProperty("XMLDB.home"));
- try {
- Class<?> cl = Class.forName(driver);
- database = (Database) cl.newInstance();
- database.setProperty("create-database", "true");
- DatabaseManager.registerDatabase(database);
- db = DatabaseManager.getCollection(Gateway.getProperty("XMLDB.URI"), Gateway.getProperty("XMLDB.user"), Gateway.getProperty("XMLDB.password"));
- } catch (Exception ex) {
- Logger.error(ex);
- throw new ClusterStorageException("Error initializing XMLDB");
- }
-
- if (db == null)
- throw new ClusterStorageException("Root collection is null. Problem connecting to XMLDB.");
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#close()
- */
- @Override
- public void close() throws ClusterStorageException {
- try {
- db.close();
- //DatabaseInstanceManager manager = (DatabaseInstanceManager)db.getService("DatabaseInstanceManager", "1.0");
- //manager.shutdown();
- } catch (XMLDBException e) {
- Logger.error(e);
- throw new ClusterStorageException("Error shutting down eXist XMLDB");
- }
-
-
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#queryClusterSupport(java.lang.String)
- */
- @Override
- public short queryClusterSupport(String clusterType) {
- return READWRITE;
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getName()
- */
- @Override
- public String getName() {
- // TODO Auto-generated method stub
- return "XMLDB";
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getId()
- */
- @Override
- public String getId() {
- // TODO Auto-generated method stub
- return "XMLDB";
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#get(java.lang.Integer, java.lang.String)
- */
- @Override
- public C2KLocalObject get(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- // Get item collection
- String strSysKey = String.valueOf(sysKey);
- Collection itemColl = verifyCollection(db, strSysKey, false);
- if (itemColl == null) return null; // doesn't exist
- // Get type collection
- Collection typeColl = verifyCollection(itemColl, type, false);
- if (typeColl == null) return null; // doesn't exist
-
- try {
- String resource = path.substring(path.indexOf('/')+1).replace('/', '.');
- String objString = (String)typeColl.getResource(resource).getContent();
- typeColl.close(); itemColl.close();
- if (type.equals("Outcome"))
- return new Outcome(path, objString);
- else {
- C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(objString);
- return obj;
- }
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLDB error");
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#put(java.lang.Integer, com.c2kernel.entity.C2KLocalObject)
- */
- @Override
- public void put(Integer sysKey, C2KLocalObject obj)
- throws ClusterStorageException {
-
- String resName = getPath(obj);
- String type = obj.getClusterType();
- String strSysKey = String.valueOf(sysKey);
- Collection itemColl = verifyCollection(db, strSysKey, true);
- Collection typeColl = verifyCollection(itemColl, type, true);
-
- try {
- resName = resName.substring(resName.indexOf('/')+1).replace('/', '.');
- String objString = Gateway.getMarshaller().marshall(obj);
- Resource res = typeColl.getResource(resName);
- if (res == null)
- res = typeColl.createResource(resName, "XMLResource");
- res.setContent(objString);
- typeColl.storeResource(res);
- typeColl.close(); itemColl.close();
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLDB error");
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#delete(java.lang.Integer, java.lang.String)
- */
- @Override
- public void delete(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- String strSysKey = String.valueOf(sysKey);
- Collection itemColl = verifyCollection(db, strSysKey, false);
- if (itemColl == null) return;
- Collection typeColl = verifyCollection(itemColl, type, false);
- if (typeColl == null) return;
-
- try {
- String resource = path.substring(path.indexOf('/')+1).replace('/', '.');
- Resource res = typeColl.getResource(resource);
- if (res != null) typeColl.removeResource(res);
- typeColl.close(); itemColl.close();
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLClusterStorage.delete() - Could not delete "+path+" to "+sysKey);
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getClusterContents(java.lang.Integer, java.lang.String)
- */
- @Override
- public String[] getClusterContents(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- String strSysKey = String.valueOf(sysKey);
- Collection coll = verifyCollection(db, strSysKey, false);
- if (coll == null) return new String[0];
-
- ArrayList<String> contents = new ArrayList<String>();
-
- // If it's the root, list the child collections
- if (type.equals(ClusterStorage.ROOT)) {
- try {
- for (String childName : coll.listChildCollections()) {
- contents.add(childName);
- }
- } catch (XMLDBException ex) {
- Logger.error(ex);
- throw new ClusterStorageException("Error finding collection contents for item "+strSysKey);
- }
-
- return contents.toArray(new String[contents.size()]);
- }
-
- coll = verifyCollection(coll, type, false);
- if (coll == null) return new String[0];
-
- // Find prefix for our path level
- StringBuffer resPrefix = new StringBuffer();
- String[] pathComps = path.split("/");
- if (pathComps.length > 1)
- for (int i = 1; i < pathComps.length; i++) {
- if (pathComps[i].length()>0) resPrefix.append(pathComps[i]).append(".");
- }
-
- // Look at each entry for matches. Trim off the ends.
- try {
- for (String res: coll.listResources()) {
- if (res.startsWith(resPrefix.toString())) {
- String resName = res.substring(resPrefix.length());
- if (resName.indexOf('.')>-1)
- resName = resName.substring(0, resName.indexOf('.'));
- contents.add(resName);
- }
- }
- } catch (XMLDBException e) {
- Logger.error(e);
- throw new ClusterStorageException("Error listing collection resources for item "+strSysKey);
- }
- return contents.toArray(new String[contents.size()]);
- }
-
-}
diff --git a/src/main/java/com/c2kernel/persistency/XMLDBTypeSyskeyCollClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLDBTypeSyskeyCollClusterStorage.java deleted file mode 100644 index 924ab90..0000000 --- a/src/main/java/com/c2kernel/persistency/XMLDBTypeSyskeyCollClusterStorage.java +++ /dev/null @@ -1,257 +0,0 @@ -package com.c2kernel.persistency;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.xmldb.api.DatabaseManager;
-import org.xmldb.api.base.Collection;
-import org.xmldb.api.base.Database;
-import org.xmldb.api.base.ErrorCodes;
-import org.xmldb.api.base.Resource;
-import org.xmldb.api.base.XMLDBException;
-import org.xmldb.api.modules.CollectionManagementService;
-
-import com.c2kernel.entity.C2KLocalObject;
-import com.c2kernel.persistency.outcome.Outcome;
-import com.c2kernel.process.Gateway;
-import com.c2kernel.utils.Logger;
-
-public class XMLDBTypeSyskeyCollClusterStorage extends ClusterStorage {
-
- Database database;
- Collection db;
- HashMap<String, Collection> rootCollections = new HashMap<String, Collection>();
-
- public XMLDBTypeSyskeyCollClusterStorage() throws Exception {
-
- }
-
- private static Collection verifyCollection(Collection parent, String name, boolean create) throws ClusterStorageException {
- Collection coll;
- try {
- coll = parent.getChildCollection(name);
- if (coll == null)
- throw new XMLDBException(ErrorCodes.NO_SUCH_COLLECTION);
- } catch (XMLDBException ex) {
- if (ex.errorCode == ErrorCodes.NO_SUCH_COLLECTION) {
- if (create) {
- try {
- CollectionManagementService collManager = (CollectionManagementService)parent.getService("CollectionManagementService", "1.0");
- coll = collManager.createCollection(name);
- } catch (Exception ex2) {
- throw new ClusterStorageException("Could not create XMLDB collection for item "+name);
- }
- }
- else // not found
- return null;
- }
- else {
- Logger.error(ex);
- throw new ClusterStorageException("Error loading XMLDB collection for item "+name);
- }
- }
- return coll;
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#open()
- */
- @Override
- public void open() throws ClusterStorageException {
-
- final String driver = "org.exist.xmldb.DatabaseImpl";
- // Uncomment the following for integrated existdb
- //System.setProperty("exist.initdb", "true");
- //System.setProperty("exist.home", Gateway.getProperty("XMLDB.home"));
- try {
- Class<?> cl = Class.forName(driver);
- database = (Database) cl.newInstance();
- database.setProperty("create-database", "true");
- DatabaseManager.registerDatabase(database);
- db = DatabaseManager.getCollection(Gateway.getProperty("XMLDB.URI"), Gateway.getProperty("XMLDB.user"), Gateway.getProperty("XMLDB.password"));
- } catch (Exception ex) {
- Logger.error(ex);
- throw new ClusterStorageException("Error initializing XMLDB");
- }
-
- if (db == null)
- throw new ClusterStorageException("Root collection is null. Problem connecting to XMLDB.");
-
- // Get all cluster root collections
- for (String cluster : allClusterTypes) {
- rootCollections.put(cluster, verifyCollection(db, cluster, true));
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#close()
- */
- @Override
- public void close() throws ClusterStorageException {
- try {
- db.close();
- //DatabaseInstanceManager manager = (DatabaseInstanceManager)db.getService("DatabaseInstanceManager", "1.0");
- //manager.shutdown();
- } catch (XMLDBException e) {
- Logger.error(e);
- throw new ClusterStorageException("Error shutting down eXist XMLDB");
- }
-
-
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#queryClusterSupport(java.lang.String)
- */
- @Override
- public short queryClusterSupport(String clusterType) {
- return READWRITE;
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getName()
- */
- @Override
- public String getName() {
- // TODO Auto-generated method stub
- return "XMLDB";
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getId()
- */
- @Override
- public String getId() {
- // TODO Auto-generated method stub
- return "XMLDB";
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#get(java.lang.Integer, java.lang.String)
- */
- @Override
- public C2KLocalObject get(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- String strSysKey = String.valueOf(sysKey);
- Collection coll = verifyCollection(rootCollections.get(type), strSysKey, false);
- if (coll == null) return null; // doesn't exist
-
- try {
- String resource = path.substring(path.indexOf('/')+1).replace('/', '.');
- String objString = (String)coll.getResource(resource).getContent();
- coll.close();
- if (type.equals("Outcome"))
- return new Outcome(path, objString);
- else {
- C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(objString);
- return obj;
- }
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLDB error");
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#put(java.lang.Integer, com.c2kernel.entity.C2KLocalObject)
- */
- @Override
- public void put(Integer sysKey, C2KLocalObject obj)
- throws ClusterStorageException {
-
- String resName = getPath(obj);
- String type = obj.getClusterType();
- String strSysKey = String.valueOf(sysKey);
- Collection coll = verifyCollection(rootCollections.get(type), strSysKey, true);
-
- try {
- resName = resName.substring(resName.indexOf('/')+1).replace('/', '.');
- String objString = Gateway.getMarshaller().marshall(obj);
- Resource res = coll.getResource(resName);
- if (res == null)
- res = coll.createResource(resName, "XMLResource");
- res.setContent(objString);
- coll.storeResource(res);
- coll.close();
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLDB error");
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#delete(java.lang.Integer, java.lang.String)
- */
- @Override
- public void delete(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- String strSysKey = String.valueOf(sysKey);
- Collection coll = verifyCollection(rootCollections.get(type), strSysKey, false);
- if (coll == null) return;
-
- try {
- String resource = path.substring(path.indexOf('/')+1).replace('/', '.');
- Resource res = coll.getResource(resource);
- if (res != null) coll.removeResource(res);
- coll.close();
- } catch (Exception e) {
- Logger.error(e);
- throw new ClusterStorageException("XMLClusterStorage.delete() - Could not delete "+path+" to "+sysKey);
- }
- }
-
- /* (non-Javadoc)
- * @see com.c2kernel.persistency.ClusterStorage#getClusterContents(java.lang.Integer, java.lang.String)
- */
- @Override
- public String[] getClusterContents(Integer sysKey, String path)
- throws ClusterStorageException {
- String type = ClusterStorage.getClusterType(path);
- String strSysKey = String.valueOf(sysKey);
- ArrayList<String> contents = new ArrayList<String>();
-
- if (type.equals(ClusterStorage.ROOT)) { // list rootColls this item appears in
- for (Collection rootColl : rootCollections.values()) {
- try {
- for (String childName : rootColl.listChildCollections()) {
- if (childName.equals(strSysKey))
- contents.add(rootColl.getName());
- }
- } catch (XMLDBException ex) {
- Logger.error(ex);
- throw new ClusterStorageException("Error finding root collections for item "+strSysKey);
- }
-
- }
- return contents.toArray(new String[contents.size()]);
- }
-
-
- Collection itemColl = verifyCollection(rootCollections.get(type), strSysKey, false);
- if (itemColl == null) return new String[0];
- StringBuffer resPrefix = new StringBuffer();
- String[] pathComps = path.split("/");
- if (pathComps.length > 1)
- for (int i = 1; i < pathComps.length; i++) {
- if (pathComps[i].length()>0) resPrefix.append(pathComps[i]).append(".");
- }
-
- try {
- for (String res: itemColl.listResources()) {
- if (res.startsWith(resPrefix.toString())) {
- String resName = res.substring(resPrefix.length());
- if (resName.indexOf('.')>-1)
- resName = resName.substring(0, resName.indexOf('.'));
- contents.add(resName);
- }
- }
- } catch (XMLDBException e) {
- Logger.error(e);
- throw new ClusterStorageException("Error listing collection resources for item "+strSysKey);
- }
- return contents.toArray(new String[contents.size()]);
- }
-
-}
|
