Author: glandais Date: 2008-01-09 14:13:13 +0000 (Wed, 09 Jan 2008) New Revision: 105 Added: trunk/simexplorer-si-storage/pom.xml trunk/simexplorer-si-storage/src/main/ trunk/simexplorer-si-storage/src/main/java/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java trunk/simexplorer-si-storage/src/main/resources/ trunk/simexplorer-si-storage/src/main/resources/properties/ trunk/simexplorer-si-storage/src/main/resources/properties/config.properties trunk/simexplorer-si-storage/src/test/java/ trunk/simexplorer-si-storage/src/test/java/fr/ trunk/simexplorer-si-storage/src/test/resources/ trunk/simexplorer-si-storage/src/test/resources/properties2/ trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties trunk/simexplorer-si-storage/src/test/resources/testImport/ Removed: trunk/simexplorer-si-storage/pom.xml trunk/simexplorer-si-storage/src/java/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/handler/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/type/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/entities/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/factories/ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/service/ trunk/simexplorer-si-storage/src/ressources/ trunk/simexplorer-si-storage/src/test/fr/ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/service/ Modified: trunk/simexplorer-si-storage/.classpath trunk/simexplorer-si-storage/.project trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java Log: Service&entities split Modified: trunk/simexplorer-si-storage/.classpath =================================================================== --- trunk/simexplorer-si-storage/.classpath 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/.classpath 2008-01-09 14:13:13 UTC (rev 105) @@ -1,10 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> <classpath> - <classpathentry kind="src" path="src/java"/> - <classpathentry kind="src" path="src/test"/> - <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.eclipse.jst.server.generic.runtimeTarget/JBoss v4.2"/> - <classpathentry exported="true" kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/> + <classpathentry kind="src" path="src/main/java"/> + <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/> + <classpathentry kind="src" output="target/test-classes" path="src/test/java"/> + <classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/> + <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar" sourcepath="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar" sourcepath="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/> + <classpathentry kind="var" path="M2_REPO/simexplorer-is/simexplorer-is-entities/0.0.1-SNAPSHOT/simexplorer-is-entities-0.0.1-SNAPSHOT.jar"/> + <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar" sourcepath="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/> + <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.12/log4j-1.2.12.jar"/> + <classpathentry kind="var" path="M2_REPO/org/testng/testng/5.1/testng-5.1-jdk15.jar"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-6-sun-1.6.0.03"/> <classpathentry kind="output" path="target/classes"/> </classpath> Modified: trunk/simexplorer-si-storage/.project =================================================================== --- trunk/simexplorer-si-storage/.project 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/.project 2008-01-09 14:13:13 UTC (rev 105) @@ -1,42 +1,26 @@ -<?xml version="1.0" encoding="UTF-8"?> <projectDescription> - <name>simexplorer-is-storage</name> - <comment>simexploreris stockage</comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.maven.ide.eclipse.maven2Builder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.wst.common.project.facet.core.builder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.wst.validation.validationbuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.devzuz.q.maven.jdt.core.mavenIncrementalBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.maven.ide.eclipse.maven2Nature</nature> - <nature>org.devzuz.q.maven.jdt.core.mavenNature</nature> - <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> - <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> - <nature>org.eclipse.wst.common.project.facet.core.nature</nature> - </natures> -</projectDescription> + <name>simexplorer-is-storage</name> + <comment></comment> + <projects/> + <buildSpec> + <buildCommand> + <name>org.eclipse.wst.common.project.facet.core.builder</name> + </buildCommand> + <buildCommand> + <name>org.maven.ide.eclipse.maven2Builder</name> + </buildCommand> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + </buildCommand> + <buildCommand> + <name>org.eclipse.wst.validation.validationbuilder</name> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.maven.ide.eclipse.maven2Nature</nature> + <nature>org.eclipse.wst.common.project.facet.core.nature</nature> + <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature> + <nature>org.eclipse.jem.workbench.JavaEMFNature</nature> + </natures> +</projectDescription> \ No newline at end of file Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs =================================================================== --- trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/.settings/org.eclipse.jdt.core.prefs 2008-01-09 14:13:13 UTC (rev 105) @@ -1,4 +1,4 @@ -#Fri Dec 21 11:44:03 CET 2007 +#Tue Jan 08 17:55:15 CET 2008 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component =================================================================== --- trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.component 2008-01-09 14:13:13 UTC (rev 105) @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <project-modules id="moduleCoreId" project-version="1.5.0"> <wb-module deploy-name="simexplorer-is-storage"> - <wb-resource deploy-path="/" source-path="/src/java"/> - <wb-resource deploy-path="/" source-path="/src/test"/> - <property name="java-output-path" value="build/classes"/> + <wb-resource deploy-path="/" source-path="/src/main/java"/> + <wb-resource deploy-path="/" source-path="/src/main/resources"/> + <wb-resource deploy-path="/" source-path="/src/test/java"/> + <wb-resource deploy-path="/" source-path="/src/test/resources"/> </wb-module> </project-modules> Modified: trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml =================================================================== --- trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/.settings/org.eclipse.wst.common.project.facet.core.xml 2008-01-09 14:13:13 UTC (rev 105) @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <faceted-project> - <runtime name="JBoss v4.2"/> - <fixed facet="jst.ejb"/> + <runtime name="JBoss 4.2 Runtime"/> <fixed facet="jst.java"/> + <fixed facet="jst.utility"/> + <installed facet="jst.utility" version="1.0"/> <installed facet="jst.java" version="5.0"/> - <installed facet="jst.ejb" version="3.0"/> </faceted-project> Deleted: trunk/simexplorer-si-storage/pom.xml =================================================================== --- trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:11:23 UTC (rev 104) +++ trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:13:13 UTC (rev 105) @@ -1,69 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <parent> - <artifactId>lutinproject</artifactId> - <groupId>lutinlib</groupId> - <version>2.2</version> - </parent> - - <modelVersion>4.0.0</modelVersion> - <groupId>simexplorer-is-storage</groupId> - <artifactId>simexplorer-is-storage</artifactId> - <version>0.0.1-SNAPSHOT</version> - <description></description> - - <profiles> - <profile> - <id>project</id> - - <activation> - <activeByDefault>true</activeByDefault> - </activation> - - <properties> - <!--Source base dir--> - <maven.src.dir> - ${basedir}/target/src-build - </maven.src.dir> - - <!--Test--> - <maven.test.skip>true</maven.test.skip> - - <!--Compile with ?--> - <maven.compile.source>1.5</maven.compile.source> - <maven.compile.target>1.5</maven.compile.target> - - <!--Verbose--> - <maven.verbose>false</maven.verbose> - </properties> - </profile> - </profiles> - - <dependencies> - <dependency> - <groupId>com.healthmarketscience.rmiio</groupId> - <artifactId>rmiio</artifactId> - <version>2.0.0</version> - </dependency> - <dependency> - <groupId>org.apache.lucene</groupId> - <artifactId>lucene-core</artifactId> - <version>2.2.0</version> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <version>4.4</version> - </dependency> - <dependency> - <groupId>lutinlib</groupId> - <artifactId>lutinutil</artifactId> - <version>0.26</version> - </dependency> - </dependencies> - <reporting> - <outputDirectory>target/site</outputDirectory> - </reporting> -</project> \ No newline at end of file Added: trunk/simexplorer-si-storage/pom.xml =================================================================== --- trunk/simexplorer-si-storage/pom.xml (rev 0) +++ trunk/simexplorer-si-storage/pom.xml 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project> + <modelVersion>4.0.0</modelVersion> + <groupId>simexplorer-is</groupId> + <artifactId>simexplorer-is-storage</artifactId> + <version>0.0.1-SNAPSHOT</version> + <description></description> + <build> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <skip>true</skip> + </configuration> + </plugin> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + </plugins> + </build> + <dependencies> + <dependency> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + <version>5.1</version> + <classifier>jdk15</classifier> + <scope>test</scope> + </dependency> + <dependency> + <groupId>simexplorer-is</groupId> + <artifactId>simexplorer-is-entities</artifactId> + <version>0.0.1-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.apache.lucene</groupId> + <artifactId>lucene-core</artifactId> + <version>2.2.0</version> + </dependency> + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>1.1</version> + </dependency> + + </dependencies> +</project> \ No newline at end of file Copied: trunk/simexplorer-si-storage/src/main/java (from rev 94, trunk/simexplorer-si-storage/src/java) Copied: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java (from rev 94, trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/handler/AttachmentHandler.java) =================================================================== --- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java (rev 0) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,54 @@ +package fr.cemagref.simexplorer.is.storage.attachment; + +import java.io.InputStream; + +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; + +/** + * Store, retrieve and delete content + * + * @author landais + * + */ +public abstract class AttachmentHandler { + + /** + * Store content + * + * @param entity + * DataEntity related to content + * @param field + * Unique field for content + * @param is + * Content + * @throws Exception + */ + public abstract void storeData(MetaDataEntity entity, String field, + InputStream is) throws Exception; + + /** + * Retrieve content + * + * @param entity + * DataEntity related to content + * @param field + * Unique field for content + * @return Content + * @throws Exception + */ + public abstract InputStream retrieveData(MetaDataEntity entity, String field) + throws Exception; + + /** + * Delete content + * + * @param entity + * DataEntity related to content + * @param field + * Unique field for content + * @throws Exception + */ + public abstract void deleteData(MetaDataEntity entity, String field) + throws Exception; + +} \ No newline at end of file Copied: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java (from rev 94, trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/handler/FileSystemAttachmentHandler.java) =================================================================== --- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java (rev 0) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,98 @@ +package fr.cemagref.simexplorer.is.storage.attachment; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStream; + +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; +import fr.cemagref.simexplorer.is.storage.util.Config; + +/** + * File system implementation + * + * @author landais + * + */ +public class FileSystemAttachmentHandler extends AttachmentHandler { + + /** + * Base folder + */ + private static String baseFolder = Config.getProperties().getProperty( + "simexplorer.data"); + + /** + * Retrieve file associated to content Create directories associated to file + * + * @param entity + * DataEntity related to content + * @param field + * Unique field for content + * @return Instance of file + * @throws Exception + */ + private File getFile(MetaDataEntity entity, String field) { + String resultPath = baseFolder; + + // Create file path + if (entity.getUuid().length() > 3) { + resultPath = resultPath + entity.getUuid().substring(0, 1) + "/" + + entity.getUuid().substring(1, 2) + "/" + + entity.getUuid().substring(2, 3) + "/" + entity.getUuid(); + } else { + resultPath = resultPath + entity.getUuid(); + } + resultPath = resultPath + "/" + entity.getVersion().toString() + "/" + + field; + + File result = new File(resultPath); + // Create directories + File resultFolder = new File(result.getParent()); + if (!resultFolder.exists()) { + resultFolder.mkdirs(); + } + + return result; + } + + @Override + public InputStream retrieveData(MetaDataEntity entity, String field) + throws Exception { + // Simple stream on file + FileInputStream fis = new FileInputStream(getFile(entity, field)); + return fis; + } + + @Override + public void storeData(MetaDataEntity entity, String field, InputStream is) + throws Exception { + // Simple stream on file + FileOutputStream fos = new FileOutputStream(getFile(entity, field)); + + // Buffer copy stream to stream + BufferedInputStream bin = new BufferedInputStream(is); + BufferedOutputStream bout = new BufferedOutputStream(fos); + + while (true) { + int datum = bin.read(); + if (datum == -1) + break; + bout.write(datum); + } + bout.flush(); + + // Close file + fos.close(); + } + + @Override + public void deleteData(MetaDataEntity entity, String field) + throws Exception { + // Simple delete on file + getFile(entity, field).delete(); + } + +} Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/Database.java 2008-01-09 14:13:13 UTC (rev 105) @@ -6,8 +6,8 @@ import java.util.Map; import java.util.Set; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.entities.metadata.Version; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; +import fr.cemagref.simexplorer.is.entities.metadata.Version; /** * Interface of a database able to manage metadata elements @@ -140,6 +140,15 @@ public abstract int findElementsByPropertiesCount( Map<String, String> properties) throws Exception; + /** + * Prepare properties for query + * + * @param type + * Type of entity wanted + * @param onlyLatest + * Only wanted elements + * @return Properties for query + */ private Map<String, String> getPropertiesByType(String type, boolean onlyLatest) { Map<String, String> properties = new HashMap<String, String>(); @@ -150,12 +159,39 @@ return properties; } + /** + * Retrieve elements of a certain type + * + * @param type + * Type wanted + * @param onlyLatest + * Only latest elements + * @param start + * Start index + * @param count + * Number of documents + * @param dateOrder + * Sorting + * @return Element list + * @throws Exception + */ public Set<MetaDataEntity> findElementsByType(String type, - boolean onlyLatest, int start, int count, int dateOrder) throws Exception { + boolean onlyLatest, int start, int count, int dateOrder) + throws Exception { return findElementsByProperties(getPropertiesByType(type, onlyLatest), start, count, dateOrder); } + /** + * Number of elements of the type + * + * @param type + * Type wanted + * @param onlyLatest + * Only latest elements + * @return Number of elements + * @throws Exception + */ public int findElementsByTypeCount(String type, boolean onlyLatest) throws Exception { return findElementsByPropertiesCount(getPropertiesByType(type, @@ -176,8 +212,8 @@ * @throws Exception */ public abstract Set<MetaDataEntity> findElementsByContentSearch( - String queryText, boolean onlyLatest, int start, int count, int dateOrder) - throws Exception; + String queryText, boolean onlyLatest, int start, int count, + int dateOrder) throws Exception; /** * Retrieve element count with specific content Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/DatabaseConstants.java 2008-01-09 14:13:13 UTC (rev 105) @@ -50,19 +50,19 @@ */ public static final String KEY_ATTACHMENT = "simexplorer.attachment"; /** - * Field name for id + * Field name for id of parent data */ public static final String KEY_PARENTDATA_UUID = "simexplorer.parentdata.uuid"; /** - * Field name for id + * Field name for version of parent data */ public static final String KEY_PARENTDATA_VERSION = "simexplorer.parentdata.version"; /** - * Field name for id + * Field name for id of parent version */ public static final String KEY_PARENTVERSION_UUID = "simexplorer.parentversion.uuid"; /** - * Field name for id + * Field name for version of parent version */ public static final String KEY_PARENTVERSION_VERSION = "simexplorer.parentversion.version"; /** @@ -70,19 +70,19 @@ */ public static final String KEY_SEARCHABLE_CONTENT = "simexplorer.searchablecontent"; /** - * + * Field name for sorting */ public static final String SORT_DATE_FIELD = KEY_CREATIONDATE; /** - * + * No date sort */ public static final int SORT_DATE_NONE = 0; /** - * + * Sort element by date (ascending) */ public static final int SORT_DATE_ASCENDING = 1; /** - * + * Sort element by date (descending) */ public static final int SORT_DATE_DESCENDING = -1; } Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-01-09 14:13:13 UTC (rev 105) @@ -36,11 +36,12 @@ import org.apache.lucene.store.LockFactory; import org.apache.lucene.store.NoLockFactory; -import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType; -import fr.cemagref.simexplorer.is.storage.attachment.type.ContentTypeFactory; +import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.contenttype.ContentTypeFactory; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; +import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.database.Database; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.entities.metadata.Version; +import fr.cemagref.simexplorer.is.storage.util.Config; /** * Lucene implementation @@ -51,6 +52,18 @@ public class LuceneDatabase extends Database { /** + * DB folder + */ + private static String dbFolder = Config.getProperties().getProperty( + "simexplorer.db"); + + /** + * Optimize period + */ + private static Integer optimizePeriod = new Integer(Config.getProperties() + .getProperty("simexplorer.optimizeperiod")); + + /** * Lock factory for Lucene writer */ private static LockFactory lockFactory = new NoLockFactory(); @@ -129,14 +142,17 @@ // Create an analyzer Analyzer analyzer = new SimpleAnalyzer(); - // FIXME index location - // File indexDir = new File("./index/"); - // File indexDir = new File("/home/glandais/lucene/index.big"); - File indexDir = new File("/var/local/simexplorer/db1"); + File indexDir = new File(dbFolder); + // Create directories + File resultFolder = new File(indexDir.getParent()); + if (!resultFolder.exists()) { + resultFolder.mkdirs(); + } // Base directory index directory = FSDirectory.getDirectory(indexDir, lockFactory); + // force creation if index doesn't exist boolean realCreate = create; if (!IndexReader.indexExists(directory)) { realCreate = true; @@ -145,6 +161,7 @@ // Instanciate unique writer writer = new IndexWriter(directory, true, analyzer, realCreate); + // Write index on create if (realCreate) { commit(); } @@ -152,10 +169,17 @@ @Override public void close() throws Exception { + // Close writer and invalidate reader writer.close(); resetReader(); } + /** + * Push commit to db + * + * @throws CorruptIndexException + * @throws IOException + */ private synchronized void synchedCommit() throws CorruptIndexException, IOException { // Flush in ram data @@ -163,18 +187,18 @@ // Check if an optimization is required Date now = new Date(); long elapsed = now.getTime() - lastOptimize.getTime(); - // FIXME One optimize per hour, if readers are closed - if (elapsed > 3600 * 1000 && searcherPool.allClosed()) { + // One optimize per period, if readers are closed + if (elapsed > optimizePeriod * 1000 && searcherPool.allClosed()) { writer.optimize(); lastOptimize = new Date(); } - // System.out.println(writer.docCount()); // Invalidate reader resetReader(); } @Override public void commit() throws Exception { + // Allows concurent access synchedCommit(); } @@ -352,6 +376,14 @@ return result; } + /** + * Retrieve a Lucene Sort for date sorting + * + * @param dateOrder + * sort wanted SORT_DATE_NONE, SORT_DATE_DESCENDING, + * SORT_DATE_ASCENDING, + * @return null if no sort + */ private Sort getSortDate(int dateOrder) { Sort sort = null; if (dateOrder == SORT_DATE_DESCENDING) { @@ -386,21 +418,39 @@ return result; } + /** + * Retrieve a Lucene Query for a full text search + * + * @param queryText + * String to match + * @param onlyLatest + * Latest flag + * @return Query + * @throws ParseException + */ private Query getQueryByContentSearch(String queryText, boolean onlyLatest) throws ParseException { Query query; + // Create an analyzer for query parsing Analyzer analyzer = new SimpleAnalyzer(); + // Create an parser to handle query QueryParser parser = new QueryParser(KEY_SEARCHABLE_CONTENT, analyzer); + // Parse query Query searchQuery = parser.parse(queryText); + if (onlyLatest) { + // If we want only latest items + // Boolean search with content and latest field query = new BooleanQuery(); ((BooleanQuery) query).add(searchQuery, BooleanClause.Occur.MUST); ((BooleanQuery) query).add( new TermQuery(new Term(KEY_LATEST, "1")), BooleanClause.Occur.MUST); } else { + // No change query = searchQuery; } + return query; } @@ -437,7 +487,7 @@ } /** - * Convert all Lucene documents to real entities + * Convert Lucene documents to real entities * * @param hits * Document collection @@ -476,6 +526,9 @@ private MetaDataEntity loadLuceneElement(Document document) throws Exception { MetaDataEntity element = new MetaDataEntity(); + + // Fill element with Lucene document + element.setUuid(document.get(KEY_UUID)); element.setName(document.get(KEY_NAME)); element.setType(document.get(KEY_TYPE)); @@ -532,8 +585,19 @@ return element; } + /** + * Add a field to a document + * + * @param document + * Document to add the field + * @param name + * Field name + * @param value + * Field value + */ private void addSimpleField(Document document, String name, String value) { if (value != null) { + // Create a simple field Field f = new Field(name, value, Field.Store.YES, Field.Index.UN_TOKENIZED); document.add(f); @@ -552,6 +616,8 @@ List<Reader> readers) { Document document = new Document(); + // Store all element properties in Lucene document + addSimpleField(document, KEY_UUID, element.getUuid()); addSimpleField(document, KEY_NAME, element.getName()); addSimpleField(document, KEY_TYPE, element.getType()); Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/database/lucene/SearcherPool.java 2008-01-09 14:13:13 UTC (rev 105) @@ -1,7 +1,6 @@ package fr.cemagref.simexplorer.is.storage.database.lucene; import java.io.IOException; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; Modified: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java =================================================================== --- trunk/simexplorer-si-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-09 14:13:13 UTC (rev 105) @@ -8,13 +8,13 @@ import java.util.Set; import java.util.UUID; -import fr.cemagref.simexplorer.is.storage.attachment.handler.AttachmentHandler; -import fr.cemagref.simexplorer.is.storage.attachment.handler.FileSystemAttachmentHandler; -import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType; +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; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.entities.metadata.Version; /** * Handle data storage and indexing @@ -27,7 +27,7 @@ /** * Indexing */ - protected Database database; + protected static Database database; /** * Storage @@ -45,7 +45,9 @@ public StorageEngine() { super(); // Indexing - database = new LuceneDatabase(); + if (database == null) { + database = new LuceneDatabase(); + } // Storage attachmentHandler = new FileSystemAttachmentHandler(); // Storing tmp data @@ -95,11 +97,13 @@ 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(); @@ -108,12 +112,14 @@ 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); } } } + // Insert element in database database.insertElement(element, readers); } @@ -164,17 +170,46 @@ return mde; } + /** + * Get data associated to an element + * + * @param entity + * Element related + * @param field + * Data field + * @return Data stream + * @throws Exception + */ public InputStream retrieveData(MetaDataEntity entity, String field) throws Exception { InputStream result = attachmentHandler.retrieveData(entity, field); return result; } + /** + * Get number of items corresponding to query + * + * @param query + * @param onlyLatest + * @return + * @throws Exception + */ public int findFullTextCount(String query, boolean onlyLatest) throws Exception { return database.findElementsByContentSearchCount(query, onlyLatest); } + /** + * Retrieve list of items corresponding to query + * + * @param query + * @param onlyLatest + * @param indexStart + * @param count + * @param dateOrder + * @return + * @throws Exception + */ public MetaDataEntity[] findFullText(String query, boolean onlyLatest, int indexStart, int count, int dateOrder) throws Exception { MetaDataEntity[] result = database.findElementsByContentSearch(query, @@ -183,6 +218,17 @@ return result; } + /** + * Retrieve list of items of type wanted + * + * @param type + * @param onlyLatest + * @param start + * @param count + * @param dateOrder + * @return + * @throws Exception + */ public MetaDataEntity[] findElementsByType(String type, boolean onlyLatest, int start, int count, int dateOrder) throws Exception { MetaDataEntity[] result = database.findElementsByType(type, onlyLatest, @@ -190,6 +236,14 @@ return result; } + /** + * Retrieve number of items of type wanted + * + * @param type + * @param onlyLatest + * @return + * @throws Exception + */ public int findElementsByTypeCount(String type, boolean onlyLatest) throws Exception { return database.findElementsByTypeCount(type, onlyLatest); @@ -197,6 +251,12 @@ // Delete + /** + * Delete elements + * + * @param uuid + * @throws Exception + */ public void deleteElements(String uuid) throws Exception { List<Version> versions = getVersions(uuid); for (Version version : versions) { @@ -204,6 +264,13 @@ } } + /** + * Delete one element + * + * @param uuid + * @param version + * @throws Exception + */ public void deleteElement(String uuid, Version version) throws Exception { MetaDataEntity element = getMetadata(uuid, version); Map<String, ContentType> attachments = element.getAttachments(); @@ -215,17 +282,39 @@ // Tools + /** + * Store temporary data, for stream duplication + * + * @param stream + * Stream to store + * @return id for retrieval + * @throws Exception + */ public String storeTempData(InputStream stream) throws Exception { String id = UUID.randomUUID().toString(); attachmentHandler.storeData(mdTmp, id, stream); return id; } + /** + * Retrieve temporary data + * + * @param id + * Id associated + * @return Data stream + * @throws Exception + */ public InputStream retrieveTempData(String id) throws Exception { InputStream is = attachmentHandler.retrieveData(mdTmp, id); return is; } + /** + * Delete temporary data + * + * @param id + * @throws Exception + */ public void deleteTempData(String id) throws Exception { attachmentHandler.deleteData(mdTmp, id); } Added: trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java =================================================================== --- trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java (rev 0) +++ trunk/simexplorer-si-storage/src/main/java/fr/cemagref/simexplorer/is/storage/util/Config.java 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,44 @@ +package fr.cemagref.simexplorer.is.storage.util; + +import java.io.IOException; +import java.net.URL; +import java.util.Properties; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class Config { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static final Log log = LogFactory.getLog(Config.class); + + private static Properties properties = null; + private static final String propertiesLocation = "/properties/config.properties"; + + private static void initProperties() throws IOException { + log.info("Loading properties"); + + properties = new Properties(); + + URL inClasspath = ClassLoader.getSystemClassLoader().getResource( + propertiesLocation); + if (inClasspath == null) { + inClasspath = Config.class.getResource(propertiesLocation); + } + if (inClasspath != null) { + properties.load(inClasspath.openStream()); + } + } + + public static Properties getProperties() { + if (properties == null) { + try { + initProperties(); + } catch (Exception e) { + log.error(e); + } + } + return properties; + } + +} Added: trunk/simexplorer-si-storage/src/main/resources/properties/config.properties =================================================================== --- trunk/simexplorer-si-storage/src/main/resources/properties/config.properties (rev 0) +++ trunk/simexplorer-si-storage/src/main/resources/properties/config.properties 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,3 @@ +simexplorer.db=/var/local/simexplorer/db3 +simexplorer.data=/var/local/simexplorer/data3/ +simexplorer.optimizeperiod=3600 Copied: trunk/simexplorer-si-storage/src/test/java/fr (from rev 94, trunk/simexplorer-si-storage/src/test/fr) Deleted: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/ElementGenerator.java 2008-01-09 14:13:13 UTC (rev 105) @@ -1,139 +0,0 @@ -package fr.cemagref.simexplorer.is.storage.test; - -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.UUID; - -import fr.cemagref.simexplorer.is.storage.entities.data.Code; -import fr.cemagref.simexplorer.is.storage.entities.data.Component; -import fr.cemagref.simexplorer.is.storage.entities.data.Constant; -import fr.cemagref.simexplorer.is.storage.entities.data.ConstantValue; -import fr.cemagref.simexplorer.is.storage.entities.data.DataEntity; -import fr.cemagref.simexplorer.is.storage.entities.data.ExplorationApplication; -import fr.cemagref.simexplorer.is.storage.entities.data.ExplorationData; -import fr.cemagref.simexplorer.is.storage.entities.data.Library; -import fr.cemagref.simexplorer.is.storage.entities.data.LoggableElement; -import fr.cemagref.simexplorer.is.storage.entities.data.Result; -import fr.cemagref.simexplorer.is.storage.entities.data.Structure; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.factories.BaseEntityFactory; - -public class ElementGenerator { - - private Random r = new Random(); - - private void update(LoggableElement element) throws Exception { - MetaDataEntity metaData = new MetaDataEntity(); - metaData.setUuid(UUID.randomUUID().toString()); - metaData.setName(UUID.randomUUID().toString()); - metaData.setType(element.getClass().getSimpleName()); - metaData.setDescription("test"); - metaData.setVersion(Integer.toString(r.nextInt(100))); - metaData.setCreationDate(new Date()); - metaData.setHash(UUID.randomUUID().toString()); - metaData.setLatest(true); - - Map<String, String> descriptors = new HashMap<String, String>(); - int i = 5 + r.nextInt(10); - for (int j = 0; j < i; j++) { - descriptors.put(Integer.toString(j), UUID.randomUUID().toString()); - } - metaData.setDescriptors(descriptors); - - element.setMetaData(metaData); - } - - private <T extends DataEntity> Set<T> generateArray(Class<T> clazz) - throws Exception { - Set<T> elements = new HashSet<T>(); - int i = 1 + r.nextInt(2); - for (int j = 0; j < i; j++) { - T element = (T) BaseEntityFactory.getFactory(clazz) - .createInstance(); - if (element instanceof LoggableElement) { - update((LoggableElement) element); - } - elements.add(element); - } - return elements; - } - - public ExplorationApplication generateRandomEA() throws Exception { - ExplorationApplication ea = new ExplorationApplication(); - update(ea); - Set<ExplorationData> datas = generateArray(ExplorationData.class); - for (ExplorationData object : datas) { - processExplorationData(object); - } - ea.setExplorations(datas); - Set<Component> components = generateArray(Component.class); - for (Component object : components) { - processComponent(object); - } - ea.setComponents(components); - return ea; - } - - private void processComponent(Component component) throws Exception { - Set<Constant> constants = generateArray(Constant.class); - for (Constant constant : constants) { - processConstant(constant); - } - component.setConstants(constants); - - component.setStructures(new HashSet<Structure>()); - - Set<Code> codes = generateArray(Code.class); - for (Code code : codes) { - processCode(code); - } - component.setCodes(codes); - - Set<Library> libraries = generateArray(Library.class); - for (Library library : libraries) { - processLibrary(library); - } - component.setLibraries(libraries); - - } - - private void processLibrary(Library library) { - } - - private void processCode(Code code) { - code.setCode(UUID.randomUUID().toString()); - code.setLanguage(UUID.randomUUID().toString()); - } - - private void processConstant(Constant constant) { - constant.setName(UUID.randomUUID().toString()); - constant.setType(String.class); - } - - private void processExplorationData(ExplorationData explorationData) - throws Exception { - Result result = new Result(); - explorationData.setResult(result); - - Set<ConstantValue> constantValues = generateArray(ConstantValue.class); - for (ConstantValue constantValue : constantValues) { - processConstantValue(constantValue); - } - explorationData.setValuesMap(constantValues); - - } - - private void processConstantValue(ConstantValue constantValue) { - Constant constant = new Constant(); - constant.setName(UUID.randomUUID().toString()); - constant.setType(Integer.class); - - constantValue.setConstant(constant); - constantValue.setValue(Integer.toString(r.nextInt())); - } - -} Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseLoadTestCase.java 2008-01-09 14:13:13 UTC (rev 105) @@ -9,9 +9,9 @@ import java.util.Set; import junit.framework.TestCase; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.storage.database.Database; import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; public class LuceneDatabaseLoadTestCase extends TestCase { Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseTestCase.java 2008-01-09 14:13:13 UTC (rev 105) @@ -4,19 +4,15 @@ import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Random; import java.util.Set; -import java.util.UUID; import junit.framework.TestCase; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; +import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.database.Database; import fr.cemagref.simexplorer.is.storage.database.lucene.LuceneDatabase; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.entities.metadata.Version; public class LuceneDatabaseTestCase extends TestCase { Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/LuceneDatabaseThread.java 2008-01-09 14:13:13 UTC (rev 105) @@ -5,8 +5,8 @@ import java.util.Random; import java.util.Set; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.storage.database.Database; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; public class LuceneDatabaseThread extends Thread { Modified: trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java =================================================================== --- trunk/simexplorer-si-storage/src/test/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2008-01-04 15:59:36 UTC (rev 94) +++ trunk/simexplorer-si-storage/src/test/java/fr/cemagref/simexplorer/is/storage/test/MetaDataGenerator.java 2008-01-09 14:13:13 UTC (rev 105) @@ -6,9 +6,9 @@ import java.util.Random; import java.util.UUID; -import fr.cemagref.simexplorer.is.storage.attachment.type.ContentType; -import fr.cemagref.simexplorer.is.storage.entities.metadata.MetaDataEntity; -import fr.cemagref.simexplorer.is.storage.entities.metadata.Version; +import fr.cemagref.simexplorer.is.contenttype.ContentType; +import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; +import fr.cemagref.simexplorer.is.entities.metadata.Version; public class MetaDataGenerator { Added: trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties =================================================================== --- trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties (rev 0) +++ trunk/simexplorer-si-storage/src/test/resources/properties2/config.properties 2008-01-09 14:13:13 UTC (rev 105) @@ -0,0 +1,3 @@ +simexplorer.db=/var/local/simexplorer/dbtest +simexplorer.data=/var/local/simexplorer/datatest/ +simexplorer.optimizeperiod=3600 Copied: trunk/simexplorer-si-storage/src/test/resources/testImport (from rev 94, trunk/simexplorer-si-storage/src/ressources/testImport)