Mercurial > hg > mpdl-group
view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/externalObjects/app/ExternalObjectsHandler.java @ 6:2396a569e446
new functions: externalObjects, normalizer, Unicode2Betacode
author | Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 08 Feb 2011 14:54:09 +0100 |
parents | |
children | 1ec29fdd0db8 |
line wrap: on
line source
package de.mpg.mpiwg.berlin.mpdl.externalObjects.app; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Date; import com.sleepycat.je.Cursor; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.LockMode; import com.sleepycat.je.OperationStatus; import de.mpg.mpiwg.berlin.mpdl.util.Util; import de.mpg.mpiwg.berlin.mpdl.exception.ApplicationException; import de.mpg.mpiwg.berlin.mpdl.externalObjects.db.DbEnvExternalObjects; import de.mpg.mpiwg.berlin.mpdl.general.MpdlConstants; public class ExternalObjectsHandler { private static ExternalObjectsHandler instance; private static String MPDL_DATA_DIR = MpdlConstants.MPDL_EXIST_DATA_DIR; private static String DB_DIR_EXTERNAL_OBJECTS = MPDL_DATA_DIR + "/dataBerkeleyDB/externalObjects"; private DbEnvExternalObjects dbEnvExternalObjects; private Date beginOfOperation; private Date endOfOperation; public static ExternalObjectsHandler getInstance() throws ApplicationException { if (instance == null) { instance = new ExternalObjectsHandler(); instance.init(); } return instance; } public ArrayList<ExtElement> readExternalElements(String documentId, String pageNumber) throws ApplicationException { return readDBExternalElements(documentId, pageNumber); } public void writeExternalElement(ExtElement element) throws ApplicationException { writeDBExternalElement(element); } public void deleteExternalElement(ExtElement element) throws ApplicationException { deleteDBExternalElement(element); } private void writeDBExternalElement(ExtElement element) throws ApplicationException { try { String keyStr = element.getDocumentId() + "###" + element.getPageNumber(); String valueStr = element.getXmlString(); DatabaseEntry dbEntryKey = new DatabaseEntry(keyStr.getBytes("utf-8")); DatabaseEntry dbEntryValue = new DatabaseEntry(valueStr.getBytes("utf-8")); Database elementDB = dbEnvExternalObjects.getElementDB(); elementDB.put(null, dbEntryKey, dbEntryValue); } catch (DatabaseException e) { throw new ApplicationException(e); } catch (UnsupportedEncodingException e) { throw new ApplicationException(e); } } private void deleteDBExternalElement(ExtElement element) throws ApplicationException { try { String keyStr = element.getDocumentId() + "###" + element.getPageNumber(); DatabaseEntry dbEntryKey = new DatabaseEntry(keyStr.getBytes("utf-8")); Database elementDB = dbEnvExternalObjects.getElementDB(); elementDB.delete(null, dbEntryKey); } catch (DatabaseException e) { throw new ApplicationException(e); } catch (UnsupportedEncodingException e) { throw new ApplicationException(e); } } private ArrayList<ExtElement> readDBExternalElements(String documentId, String pageNumber) throws ApplicationException { ArrayList<ExtElement> retElements = new ArrayList<ExtElement>(); String hashKey = documentId + "###" + pageNumber; try { Database elementDB = dbEnvExternalObjects.getElementDB(); Cursor cursor = elementDB.openCursor(null, null); byte[] bHashKey = hashKey.getBytes("utf-8"); DatabaseEntry dbEntryKey = new DatabaseEntry(bHashKey); DatabaseEntry foundValue = new DatabaseEntry(); OperationStatus operationStatus = cursor.getSearchKey(dbEntryKey, foundValue, LockMode.DEFAULT); while (operationStatus == OperationStatus.SUCCESS) { byte[] foundValueBytes = foundValue.getData(); String foundValueStr = new String(foundValueBytes, "utf-8"); ExtElement e = ExtElement.parseXmlStr(foundValueStr); retElements.add(e); operationStatus = cursor.getNextDup(dbEntryKey, foundValue, LockMode.DEFAULT); } cursor.close(); } catch (DatabaseException e) { throw new ApplicationException(e); } catch (UnsupportedEncodingException e) { throw new ApplicationException(e); } return retElements; } private void init() throws ApplicationException { dbEnvExternalObjects = new DbEnvExternalObjects(); dbEnvExternalObjects.setDataDir(DB_DIR_EXTERNAL_OBJECTS); dbEnvExternalObjects.init(); dbEnvExternalObjects.openDatabases(); } public static void main(String[] args) throws ApplicationException { getInstance(); instance.beginOperation(); System.out.print("Start ..."); // instance.deleteSampleData(); // instance.writeSampleData(); instance.readSampleData(); instance.end(); instance.endOperation(); Double elapsedTime = new Util().getSecondWithMillisecondsBetween(instance.beginOfOperation, instance.endOfOperation); System.out.println("End."); System.out.println("Needed time: " + elapsedTime + " seconds"); } private void deleteSampleData() throws ApplicationException { ExtElement e = new ExtElement(); e.setUid("joe"); e.setDocumentId("/archimedes/it/l223.xml"); e.setPageNumber("17"); deleteExternalElement(e); } private void writeSampleData() throws ApplicationException { Date now = new Date(); String sId = "1.2.2.2.2.5"; ExtElement e = new ExtElement(); e.setUid("joe"); e.setModificationDate(now); e.setDocumentId("/archimedes/it/l223.xml"); e.setPageNumber("17"); e.setXmlNodeId(sId); e.setContent("<note>This is a test note to sentence " + sId + "</note>"); writeExternalElement(e); ExtElement e2 = new ExtElement(); String sId2 = "1.2.2.2.2.7"; e2.setUid("michael"); e2.setModificationDate(now); e2.setDocumentId("/archimedes/it/l223.xml"); e2.setPageNumber("17"); e2.setXmlNodeId(sId2); e2.setCharPos("18"); e2.setContent("<note>This is a test note to sentence " + sId2 + "</note>"); writeExternalElement(e2); /* String sId3 = "1.2.2.2.2.8.15.3.3"; e3.setUid("joe"); e3.setModificationDate(now); e3.setDocumentId("/archimedes/it/l223.xml"); e3.setPageNumber("17"); e3.setXmlNodeId(sId3); e2.setContent("<note>This is an external test note to sentence " + sId3 + "</note>"); writeExternalElement(e3); */ } private void readSampleData() throws ApplicationException { ArrayList<ExtElement> elements = readExternalElements("/archimedes/it/l223.xml", "17"); System.out.println(elements); } private void end() throws ApplicationException { dbEnvExternalObjects.close(); } private void beginOperation() { beginOfOperation = new Date(); } private void endOperation() { endOfOperation = new Date(); } }