Author: glandais
Date: 2008-01-22 14:12:45 +0000 (Tue, 22 Jan 2008)
New Revision: 415
Added:
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java
Modified:
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
Log:
StorageEngine interface
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java 2008-01-22 14:11:10 UTC (rev 414)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceImpl.java 2008-01-22 14:12:45 UTC (rev 415)
@@ -31,21 +31,22 @@
import fr.cemagref.simexplorer.is.factories.MetaDataEntityFactory;
import fr.cemagref.simexplorer.is.factories.XmlConstants;
import fr.cemagref.simexplorer.is.storage.engine.StorageEngine;
+import fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl;
@Stateless(name = "StorageService")
@Remote(StorageService.class)
@RemoteBinding(jndiBinding = "StorageService")
public class StorageServiceImpl implements StorageService, XmlConstants {
- private StorageEngine storageEngine = null;
+ private StorageEngine storageEngineImpl = null;
private static final String KEY_XML = "_xml";
public StorageServiceImpl() {
super();
- storageEngine = new StorageEngine();
+ storageEngineImpl = new StorageEngineImpl();
try {
- storageEngine.open();
+ storageEngineImpl.open();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -53,15 +54,15 @@
}
public void open() throws Exception {
- storageEngine.open();
+ storageEngineImpl.open();
}
public void close() throws Exception {
- storageEngine.close();
+ storageEngineImpl.close();
}
public void commit() throws Exception {
- storageEngine.commit();
+ storageEngineImpl.commit();
}
public MetaDataEntity saveElement(RemoteInputStream zipRemoteStream)
@@ -84,33 +85,33 @@
}
public MetaDataEntity getMetadata(String uuid) throws Exception {
- return storageEngine.getMetadata(uuid);
+ return storageEngineImpl.getMetadata(uuid);
}
public MetaDataEntity getMetadata(String uuid, String version)
throws Exception {
- return storageEngine.getMetadata(uuid, new Version(version));
+ return storageEngineImpl.getMetadata(uuid, new Version(version));
}
public MetaDataEntity[] findFullText(String query, boolean onlyLatest,
int indexStart, int count, int dateOrder) throws Exception {
- return storageEngine.findFullText(query, onlyLatest, indexStart, count,
+ return storageEngineImpl.findFullText(query, onlyLatest, indexStart, count,
dateOrder);
}
public int findFullTextCount(String query, boolean onlyLatest)
throws Exception {
- return storageEngine.findFullTextCount(query, onlyLatest);
+ return storageEngineImpl.findFullTextCount(query, onlyLatest);
}
public int findApplicationsCount(boolean onlyLatest) throws Exception {
- return storageEngine.findElementsByTypeCount(VALUE_METADATA_TYPE_EA,
+ return storageEngineImpl.findElementsByTypeCount(VALUE_METADATA_TYPE_EA,
onlyLatest);
}
public MetaDataEntity[] findApplications(boolean onlyLatest, int start,
int count, int dateOrder) throws Exception {
- return storageEngine.findElementsByType(VALUE_METADATA_TYPE_EA,
+ return storageEngineImpl.findElementsByType(VALUE_METADATA_TYPE_EA,
onlyLatest, start, count, dateOrder);
}
@@ -120,7 +121,7 @@
LoggableElement le = (LoggableElement) BaseEntityFactory.getFactory(
LoggableElement.class.getPackage().getName() + "." + mde.getType())
- .loadElement(storageEngine.retrieveData(mde, KEY_XML));
+ .loadElement(storageEngineImpl.retrieveData(mde, KEY_XML));
return le;
}
@@ -136,12 +137,12 @@
if (!entry.isDirectory()) {
String entryName = entry.getName();
if (entryName.equals(FILE_XML)) {
- xmlFile = storageEngine.storeTempData(zis);
+ xmlFile = storageEngineImpl.storeTempData(zis);
} else {
if (entryName.startsWith(FILE_DATA_PREFIX)) {
String fileName = entryName.replace(FILE_DATA_PREFIX
+ "/", "");
- String idFile = storageEngine.storeTempData(zis);
+ String idFile = storageEngineImpl.storeTempData(zis);
attachments.put(fileName, idFile);
}
}
@@ -154,10 +155,10 @@
public MetaDataEntity saveElement(InputStream xmlFile,
Map<String, InputStream> attachments) throws Exception {
// Store temporary data
- String idxml = storageEngine.storeTempData(xmlFile);
+ String idxml = storageEngineImpl.storeTempData(xmlFile);
Map<String, String> idsattachment = new HashMap<String, String>();
for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
- String idattachment = storageEngine.storeTempData(entry.getValue());
+ String idattachment = storageEngineImpl.storeTempData(entry.getValue());
idsattachment.put(entry.getKey(), idattachment);
}
return saveElement(idxml, idsattachment);
@@ -166,7 +167,7 @@
public void exportElement(RemoteOutputStream xmlOutputStream, String uuid,
String version) throws Exception {
MetaDataEntity mde = getMetadata(uuid, version);
- InputStream xmlStream = storageEngine.retrieveData(mde, KEY_XML);
+ InputStream xmlStream = storageEngineImpl.retrieveData(mde, KEY_XML);
OutputStream os = RemoteOutputStreamClient.wrap(xmlOutputStream);
// Buffer copy stream to stream
@@ -196,7 +197,7 @@
MetaDataEntityFactory mdeFactory = (MetaDataEntityFactory) BaseEntityFactory
.getFactory(MetaDataEntity.class);
MetaDataEntity metaData = mdeFactory
- .loadElementFromParentXML(storageEngine.retrieveTempData(idxml));
+ .loadElementFromParentXML(storageEngineImpl.retrieveTempData(idxml));
if (metaData.getType() != null
&& VALUE_METADATA_TYPE_EA.equals(metaData.getType())) {
@@ -243,16 +244,16 @@
// Prepare saving
Map<String, InputStream> attachments = new HashMap<String, InputStream>();
- attachments.put(KEY_XML, storageEngine.retrieveTempData(idxml));
+ attachments.put(KEY_XML, storageEngineImpl.retrieveTempData(idxml));
if (metaData.getType() != null
&& !VALUE_METADATA_TYPE_EA.equals(metaData.getType())) {
for (Map.Entry<String, String> entry : idsattachment.entrySet()) {
- attachments.put(entry.getKey(), storageEngine
+ attachments.put(entry.getKey(), storageEngineImpl
.retrieveTempData(entry.getValue()));
}
}
- storageEngine.saveElement(metaData, attachments);
- storageEngine.commit();
+ storageEngineImpl.saveElement(metaData, attachments);
+ storageEngineImpl.commit();
return metaData;
}
@@ -260,7 +261,7 @@
private void processVersionRules(MetaDataEntity metaData) throws Exception {
// Check existing version in storage
- MetaDataEntity previousVersion = storageEngine.getMetadata(metaData
+ MetaDataEntity previousVersion = storageEngineImpl.getMetadata(metaData
.getUuid(), metaData.getVersion());
/*
* MetaDataEntity parentData = storageEngine.getElementVersion(metaData
@@ -287,7 +288,7 @@
.getFactory(MetaDataEntity.class);
Document document = BaseEntityFactory.getXMLBuilder().parse(
- storageEngine.retrieveTempData(idxml));
+ storageEngineImpl.retrieveTempData(idxml));
Element rootElement = (Element) document.getFirstChild();
@@ -298,7 +299,7 @@
.getXMLElementsByTagName(componentsElement,
KEY_EXPLORATIONAPPLICATION_COMPONENT_NODE);
for (Element element : componentElements) {
- components.add(storageEngine.storeTempData(elementFactory
+ components.add(storageEngineImpl.storeTempData(elementFactory
.serializeElement(element)));
}
@@ -322,7 +323,7 @@
} else {
explorationDataArray = new String[1];
}
- explorationDataArray[0] = storageEngine
+ explorationDataArray[0] = storageEngineImpl
.storeTempData(elementFactory.serializeElement(elementAD));
explorationDatas.add(explorationDataArray);
Copied: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java (from rev 288, trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java)
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java (rev 0)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-01-22 14:12:45 UTC (rev 415)
@@ -0,0 +1,248 @@
+package fr.cemagref.simexplorer.is.storage.engine;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+
+import fr.cemagref.simexplorer.is.contenttype.ContentType;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler;
+import fr.cemagref.simexplorer.is.storage.attachment.FileSystemAttachmentHandler;
+import fr.cemagref.simexplorer.is.storage.database.Database;
+import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase;
+
+/**
+ * Handle data storage and indexing
+ *
+ * @author landais
+ *
+ */
+public class StorageEngineImpl implements StorageEngine {
+
+ /**
+ * Indexing
+ */
+ protected Database database;
+
+ /**
+ * Storage
+ */
+ protected AttachmentHandler attachmentHandler;
+
+ /**
+ * Metadata handling temporary data
+ */
+ private MetaDataEntity mdTmp;
+
+ /**
+ * Default constructor with default implementations of storage and indexing
+ */
+ public StorageEngineImpl() {
+ super();
+ // Indexing
+ database = new LuceneDatabase();
+ // Storage
+ attachmentHandler = new FileSystemAttachmentHandler();
+ // Storing tmp data
+ mdTmp = new MetaDataEntity();
+ mdTmp.setUuid(UUID.randomUUID().toString());
+ mdTmp.setVersion("0");
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#open()
+ */
+ public void open() throws Exception {
+ database.open();
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#close()
+ */
+ public void close() throws Exception {
+ database.close();
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#commit()
+ */
+ public void commit() throws Exception {
+ database.commit();
+ }
+
+ // Create / update
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#saveElement(fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity, java.util.Map)
+ */
+ public void saveElement(MetaDataEntity element,
+ Map<String, InputStream> attachments) throws Exception {
+
+ // Save all attachments in system
+ for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
+ attachmentHandler.storeData(element, entry.getKey(), entry
+ .getValue());
+ }
+
+ // Parse all attachments for indexing
+ List<Reader> readers = new ArrayList<Reader>();
+ for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
+ String field = entry.getKey();
+ InputStream content = attachmentHandler
+ .retrieveData(element, field);
+ if (element.getAttachments() != null) {
+ ContentType contentType = element.getAttachments().get(field);
+ if (contentType != null) {
+ // Transform stream into indexable text
+ Reader reader = contentType.renderToText(content);
+ readers.add(reader);
+ }
+ }
+ }
+
+ if (element.getName() != null) {
+ Reader reader = new StringReader(element.getName());
+ readers.add(reader);
+ }
+ if (element.getDescription() != null) {
+ Reader reader = new StringReader(element.getDescription());
+ readers.add(reader);
+ }
+
+ // Insert element in database
+ database.insertElement(element, readers);
+ }
+
+ // Read
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#getMetadata(java.lang.String)
+ */
+ public MetaDataEntity getMetadata(String uuid) throws Exception {
+ MetaDataEntity mde = null;
+ Set<MetaDataEntity> set = database.findElementsById(uuid, true);
+ if (!set.isEmpty()) {
+ mde = set.iterator().next();
+ }
+ return mde;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#getVersions(java.lang.String)
+ */
+ public List<Version> getVersions(String uuid) throws Exception {
+ return database.getVersions(uuid);
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#getMetadata(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version)
+ */
+ public MetaDataEntity getMetadata(String uuid, Version version)
+ throws Exception {
+ MetaDataEntity mde = database.getElement(uuid, version);
+ return mde;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#retrieveData(fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity, java.lang.String)
+ */
+ public InputStream retrieveData(MetaDataEntity entity, String field)
+ throws Exception {
+ InputStream result = attachmentHandler.retrieveData(entity, field);
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#findFullTextCount(java.lang.String, boolean)
+ */
+ public int findFullTextCount(String query, boolean onlyLatest)
+ throws Exception {
+ return database.findElementsByContentSearchCount(query, onlyLatest);
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#findFullText(java.lang.String, boolean, int, int, int)
+ */
+ public MetaDataEntity[] findFullText(String query, boolean onlyLatest,
+ int indexStart, int count, int dateOrder) throws Exception {
+ MetaDataEntity[] result = database.findElementsByContentSearch(query,
+ onlyLatest, indexStart, count, dateOrder).toArray(
+ new MetaDataEntity[0]);
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#findElementsByType(java.lang.String, boolean, int, int, int)
+ */
+ public MetaDataEntity[] findElementsByType(String type, boolean onlyLatest,
+ int start, int count, int dateOrder) throws Exception {
+ MetaDataEntity[] result = database.findElementsByType(type, onlyLatest,
+ start, count, dateOrder).toArray(new MetaDataEntity[0]);
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#findElementsByTypeCount(java.lang.String, boolean)
+ */
+ public int findElementsByTypeCount(String type, boolean onlyLatest)
+ throws Exception {
+ return database.findElementsByTypeCount(type, onlyLatest);
+ }
+
+ // Delete
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#deleteElements(java.lang.String)
+ */
+ public void deleteElements(String uuid) throws Exception {
+ List<Version> versions = getVersions(uuid);
+ for (Version version : versions) {
+ deleteElement(uuid, version);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#deleteElement(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.Version)
+ */
+ public void deleteElement(String uuid, Version version) throws Exception {
+ MetaDataEntity element = getMetadata(uuid, version);
+ Map<String, ContentType> attachments = element.getAttachments();
+ for (Map.Entry<String, ContentType> entry : attachments.entrySet()) {
+ attachmentHandler.deleteData(element, entry.getKey());
+ }
+ database.deleteElement(element);
+ }
+
+ // Tools
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#storeTempData(java.io.InputStream)
+ */
+ public String storeTempData(InputStream stream) throws Exception {
+ String id = UUID.randomUUID().toString();
+ attachmentHandler.storeData(mdTmp, id, stream);
+ return id;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#retrieveTempData(java.lang.String)
+ */
+ public InputStream retrieveTempData(String id) throws Exception {
+ InputStream is = attachmentHandler.retrieveData(mdTmp, id);
+ return is;
+ }
+
+ /* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#deleteTempData(java.lang.String)
+ */
+ public void deleteTempData(String id) throws Exception {
+ attachmentHandler.deleteData(mdTmp, id);
+ }
+
+}
Added: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java (rev 0)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-01-22 14:12:45 UTC (rev 415)
@@ -0,0 +1,105 @@
+package fr.cemagref.simexplorer.is.storage.engine;
+
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+
+public class StorageEngineSecuImpl extends StorageEngineImpl {
+
+ @Override
+ public void deleteElement(String uuid, Version version) throws Exception {
+ // TODO Auto-generated method stub
+ super.deleteElement(uuid, version);
+ }
+
+ @Override
+ public void deleteElements(String uuid) throws Exception {
+ // TODO Auto-generated method stub
+ super.deleteElements(uuid);
+ }
+
+ @Override
+ public void deleteTempData(String id) throws Exception {
+ // TODO Auto-generated method stub
+ super.deleteTempData(id);
+ }
+
+ @Override
+ public MetaDataEntity[] findElementsByType(String type, boolean onlyLatest,
+ int start, int count, int dateOrder) throws Exception {
+ // TODO Auto-generated method stub
+ return super.findElementsByType(type, onlyLatest, start, count,
+ dateOrder);
+ }
+
+ @Override
+ public int findElementsByTypeCount(String type, boolean onlyLatest)
+ throws Exception {
+ // TODO Auto-generated method stub
+ return super.findElementsByTypeCount(type, onlyLatest);
+ }
+
+ @Override
+ public MetaDataEntity[] findFullText(String query, boolean onlyLatest,
+ int indexStart, int count, int dateOrder) throws Exception {
+ // TODO Auto-generated method stub
+ return super.findFullText(query, onlyLatest, indexStart, count,
+ dateOrder);
+ }
+
+ @Override
+ public int findFullTextCount(String query, boolean onlyLatest)
+ throws Exception {
+ // TODO Auto-generated method stub
+ return super.findFullTextCount(query, onlyLatest);
+ }
+
+ @Override
+ public MetaDataEntity getMetadata(String uuid, Version version)
+ throws Exception {
+ // TODO Auto-generated method stub
+ return super.getMetadata(uuid, version);
+ }
+
+ @Override
+ public MetaDataEntity getMetadata(String uuid) throws Exception {
+ // TODO Auto-generated method stub
+ return super.getMetadata(uuid);
+ }
+
+ @Override
+ public List<Version> getVersions(String uuid) throws Exception {
+ // TODO Auto-generated method stub
+ return super.getVersions(uuid);
+ }
+
+ @Override
+ public InputStream retrieveData(MetaDataEntity entity, String field)
+ throws Exception {
+ // TODO Auto-generated method stub
+ return super.retrieveData(entity, field);
+ }
+
+ @Override
+ public InputStream retrieveTempData(String id) throws Exception {
+ // TODO Auto-generated method stub
+ return super.retrieveTempData(id);
+ }
+
+ @Override
+ public void saveElement(MetaDataEntity element,
+ Map<String, InputStream> attachments) throws Exception {
+ // TODO Auto-generated method stub
+ super.saveElement(element, attachments);
+ }
+
+ @Override
+ public String storeTempData(InputStream stream) throws Exception {
+ // TODO Auto-generated method stub
+ return super.storeTempData(stream);
+ }
+
+}