package org.ariadne_eu.metadata.insert;
import org.apache.log4j.Logger;
import org.ariadne.config.PropertiesManager;
import org.ariadne_eu.utils.config.RepositoryConstants;
import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.Database;
import org.xmldb.api.base.XMLDBException;
import org.xmldb.api.modules.XMLResource;
/**
* Created by ben
* Date: 5-mei-2007
* Time: 19:05:44
* To change this template use File | Settings | File Templates.
*/
public class InsertMetadataExistDbImpl extends InsertMetadataImpl {
private static Logger log = Logger.getLogger(InsertMetadataExistDbImpl.class);
private Collection xmlCollection;
public InsertMetadataExistDbImpl() {
initialize();
}
public InsertMetadataExistDbImpl(int language) {
setLanguage(language);
initialize();
}
void initialize() {
super.initialize();
try {
String URI = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_URI + "." + getLanguage());
if (URI == null)
URI = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_URI);
try {
// String driver = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_DRIVER + "." + getLanguage());
// if (driver == null)
// driver = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_DRIVER);
// Class cl = Class.forName(driver);
Class cl = Class.forName("org.exist.xmldb.DatabaseImpl");
Database database = (Database)cl.newInstance();
DatabaseManager.registerDatabase(database);
String username = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_USERNAME + "." + getLanguage());
if (username == null)
username = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_USERNAME);
String password = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_PASSWORD + "." + getLanguage());
if (password == null)
password = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_DB_PASSWORD);
xmlCollection = DatabaseManager.getCollection(URI, username, password);
//TODO: auto generate?
// if(collection == null)
// generateCollection(URI, collectionString, username, password);
} catch (ClassNotFoundException e) {
log.error("initialize: ", e);
} catch (InstantiationException e) {
log.error("initialize: ", e);
} catch (IllegalAccessException e) {
log.error("initialize: ", e);
} catch (XMLDBException e) {
//TODO: auto generate?
// generateCollection(URI, collectionString, username, password);
}
} catch (Throwable t) {
log.error("initialize: ", t);
}
}
// private void generateCollection(String URI, String collectionString, String username, String password) {
// //TODO: auto generate?
// try {
// log.info("generateCollection:collection="+collectionString);
// Collection root = DatabaseManager.getCollection(URI + "/db", username, password);
// CollectionManagementService mgtService = (CollectionManagementService)
// root.getService("CollectionManagementService", "1.0");
// collection = mgtService.createCollection(collectionString.substring("/db".length()));
// collection = DatabaseManager.getCollection(URI + collectionString, username, password);
// } catch (XMLDBException e) {
// log.error("generateCollection: URI=\"" + URI + "\", collection=\"" + collectionString + "\", username=\"" + username + "\", password=\"" + password + "\" ", e);
// }
// }
/*
* NOTE: Collection is not implemented!
*
* */
public synchronized void insertMetadata(String identifier, String metadata, String collection) throws InsertMetadataException{
try {
//exist cant handle ":" on the identifier
identifier = identifier.replaceAll(":", "_");
XMLResource document = (XMLResource)xmlCollection.createResource(identifier, "XMLResource");
document.setContent(metadata);
xmlCollection.storeResource(document);
log.info("insertMetadata:identifier:\""+identifier+"\"");
} catch (XMLDBException e) {
log.error("insertMetadata:identifier:\""+identifier+"\" ", e);
throw new InsertMetadataException(e);
}
}
}