Wikitty-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- 1653 discussions
31 May '10
Author: echatellier
Date: 2010-05-31 16:43:40 +0200 (Mon, 31 May 2010)
New Revision: 66
Url: http://nuiton.org/repositories/revision/wikitty/66
Log:
Remove deprecated method
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-05-31 13:53:23 UTC (rev 65)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-05-31 14:43:40 UTC (rev 66)
@@ -32,12 +32,6 @@
*/
public interface WikittyService {
- /**
- * Use {@link Criteria.ALL_ELEMENTS}
- */
- @Deprecated
- public static final int ALL_ELEMENTS = -1;
-
/*
* Storage
*/
1
0
31 May '10
Author: echatellier
Date: 2010-05-31 15:53:23 +0200 (Mon, 31 May 2010)
New Revision: 65
Url: http://nuiton.org/repositories/revision/wikitty/65
Log:
Fix javadoc
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Criteria.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Criteria.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Criteria.java 2010-05-31 13:34:55 UTC (rev 64)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Criteria.java 2010-05-31 13:53:23 UTC (rev 65)
@@ -34,7 +34,7 @@
/**
* Criteria represent the search on the wikitty with restriction on field and
- * informations on facet, paggination and sortting.
+ * informations on facet, pagination and sorting.
*<p>
* For search multiple extension use ALL_EXTENSIONS as extension name and
* specify field type.
1
0
31 May '10
Author: echatellier
Date: 2010-05-31 15:34:55 +0200 (Mon, 31 May 2010)
New Revision: 64
Url: http://nuiton.org/repositories/revision/wikitty/64
Log:
Add doc
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-05-31 09:44:30 UTC (rev 63)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-05-31 13:34:55 UTC (rev 64)
@@ -32,7 +32,9 @@
import org.nuiton.wikitty.search.Search;
/**
- *
+ * Wikitty proxy is used to transform wikitty object used by {@link WikittyService}
+ * into business objects used by applications.
+ *
* @author poussin
* @version $Revision$
*
1
0
r63 - in trunk/wikitty-api: . src/main/java/org/nuiton/wikitty/importexport
by echatellier@users.nuiton.org 31 May '10
by echatellier@users.nuiton.org 31 May '10
31 May '10
Author: echatellier
Date: 2010-05-31 11:44:30 +0200 (Mon, 31 May 2010)
New Revision: 63
Url: http://nuiton.org/repositories/revision/wikitty/63
Log:
Add CSV import/export implementation.
Modified:
trunk/wikitty-api/pom.xml
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java
Modified: trunk/wikitty-api/pom.xml
===================================================================
--- trunk/wikitty-api/pom.xml 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/pom.xml 2010-05-31 09:44:30 UTC (rev 63)
@@ -71,6 +71,20 @@
<version>1.1.4c</version>
</dependency>
+ <dependency>
+ <groupId>net.sf.opencsv</groupId>
+ <artifactId>opencsv</artifactId>
+ <version>2.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ <version>1.3</version>
+ <scope>compile</scope>
+ </dependency>
+
<!-- JTA -->
<dependency>
<groupId>jboss.jbossts</groupId>
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -10,6 +10,7 @@
import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.WikittyTransaction;
import org.nuiton.wikitty.WikittyImportExportService.FORMAT;
+import org.nuiton.wikitty.search.Element;
public class ExportTask implements Runnable {
@@ -35,6 +36,11 @@
public void run() {
try {
transaction.begin();
+
+ // use a facet to get only extension used in export
+ // used for CSV export
+ criteria.addFacetField(Element.ELT_EXTENSION);
+
PagedResult<Wikitty> pageResult = ws.findAllByCriteria(transaction, criteria);
long time = 0;
if (log.isInfoEnabled()) {
@@ -42,7 +48,7 @@
log.info("Export started");
}
ImportExportMethod exporter = format.ieporter();
- exporter.exportWriter(writer, pageResult.getAll());
+ exporter.exportWriter(writer, ws, pageResult);
if (log.isInfoEnabled()) {
time = System.currentTimeMillis() - time;
log.info("Export in (ms)" + time);
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -17,14 +17,32 @@
package org.nuiton.wikitty.importexport;
-
import java.io.Reader;
import java.io.Writer;
+import java.util.Collection;
+import java.util.LinkedList;
import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.StringUtil;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.FacetTopic;
+import org.nuiton.wikitty.FieldType;
+import org.nuiton.wikitty.PagedResult;
import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyExtension;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyUtil;
+import org.nuiton.wikitty.search.Element;
+import org.nuiton.wikitty.search.Search;
+import au.com.bytecode.opencsv.CSVReader;
+import au.com.bytecode.opencsv.CSVWriter;
+
/**
*
* @author poussin
@@ -38,14 +56,228 @@
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(ImportExportCSV.class);
+ /** Wikitty id header name. */
+ protected final static String FIELD_WIKITTY_ID = "Wikitty.Id";
+
+ /** Pattern form link queries. */
+ protected Pattern queryPattern = Pattern.compile("^((\\w+)\\.(\\w+))=(\"(.+)\"|([^\"]+))$");
+
@Override
- public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception {
- throw new UnsupportedOperationException("Not supported yet.");
+ public void importReader(Reader reader, WikittyService ws, WikittyBatchUpdate batchUpdate) throws Exception {
+
+ // get index of wikitty.id field
+ int wikittyIdIndex = -1;
+
+ // read header to get extension names
+ // and build two array for ext and fieldName
+ CSVReader csvReader = new CSVReader(reader);
+ String[] header = csvReader.readNext();
+ String[] ext = new String[header.length];
+ String[] fieldsName = new String[header.length];
+ for (int i = 0; i < header.length ; ++i) {
+ // wikitty id is technical (special management)
+ if (FIELD_WIKITTY_ID.equals(header[i])) {
+ wikittyIdIndex = i;
+ }
+ else {
+ ext[i] = header[i].substring(0, header[i].indexOf("."));
+ fieldsName[i] = header[i].substring(header[i].indexOf(".") + 1);
+ }
+ }
+
+ // create a wikitty for each next line
+ String[] currentLine = null;
+ while ((currentLine = csvReader.readNext()) != null) {
+
+ String wikittyId = currentLine[wikittyIdIndex];
+ Wikitty currentWikitty = null;
+ if (StringUtils.isNotEmpty(wikittyId)) {
+ currentWikitty = new Wikitty(wikittyId);
+ }
+ else {
+ currentWikitty = new Wikitty();
+ }
+
+ for (int i = 0; i < header.length ; ++i) {
+
+ // wikitty id column, already managed
+ if (i == wikittyIdIndex) {
+ continue;
+ }
+
+ String extName = ext[i];
+ String fieldName = fieldsName[i];
+ String value = currentLine[i];
+
+ // case null or empty
+ if (StringUtils.isNotEmpty(value)) {
+
+ // extension must exists on wikitty to set a field value
+ addMissingExtension(ws, currentWikitty, extName);
+
+ // convert link values (if necessary)
+ value = convertLinkValues(ws, value);
+
+ // add value to correct field
+ FieldType fieldType = currentWikitty.getFieldType(extName + "." + fieldName);
+ if(fieldType.isCollection()) {
+ String[] multiplesValues = StringUtil.split(value);
+ for (String multiplesValue : multiplesValues) {
+ // begin and ends with () only if fields
+ // has multiples values during import
+ if (multiplesValue.startsWith("(") && multiplesValue.endsWith(")")) {
+ multiplesValue = multiplesValue.substring(1, multiplesValue.length() - 1);
+ }
+ currentWikitty.addToField(extName, fieldName, multiplesValue);
+ }
+ } else {
+ currentWikitty.setField(extName, fieldName, value);
+ }
+ }
+ }
+
+ // add it into datas
+ batchUpdate.addWikitty(currentWikitty);
+ }
}
+
+ /**
+ * Recusively add missing extension of not exist and required extension too.
+ */
+ protected void addMissingExtension(WikittyService ws, Wikitty currentWikitty, String extName) {
+ // extension must exists on wikitty to set a field value
+ if (!currentWikitty.hasExtension(extName)) {
+ WikittyExtension extension = ws.restoreExtensionLastVersion(extName);
+ String requires = extension.getRequires();
+ if (StringUtils.isNotEmpty(requires)) {
+ // add required extensions BEFORE current
+ for (String require : requires.split(",")) {
+ String localRequire = require.trim();
+ addMissingExtension(ws, currentWikitty, localRequire);
+ }
+ }
+
+ currentWikitty.addExtension(extension);
+ }
+ }
+
+ /**
+ * Convert internal queries to search for other real wikitty ids.
+ *
+ * @param value
+ * @return
+ */
+ protected String convertLinkValues(WikittyService ws, String value) {
+
+ String originalValue = value;
+ String resultValue = "";
+ String separator = "";
+ boolean correctQueries = true;
+
+ // manage multiples query comma separated
+ try {
+ String[] queries = StringUtil.split(value, ",");
+
+ for (String query : queries) {
+ Matcher m = queryPattern.matcher(query.trim());
+ if (m.find()) {
+ String fqField = m.group(1);
+ String fValue = m.group(5);
+ if (fValue == null) {
+ // quoted value
+ fValue = m.group(6);
+ }
+ Criteria criteria = Search.query().eq(fqField, fValue).criteria();
+ Wikitty wikitty = ws.findByCriteria(criteria);
+ if (wikitty == null) {
+ correctQueries = false;
+ }
+ else {
+ resultValue += separator + wikitty.getId();
+ separator = ",";
+ }
+ }
+ else {
+ // global parsing fail
+ // return original value
+ correctQueries = false;
+ }
+ }
+ }
+ catch (StringIndexOutOfBoundsException eee) {
+ if (log.isTraceEnabled()) {
+ log.trace("Can't split field on , skipping");
+ }
+ }
+
+ // if conversion has not been done, return original value
+ if (!correctQueries || StringUtils.isEmpty(resultValue)) {
+ resultValue = originalValue;
+ }
+ return resultValue;
+ }
+
@Override
- public void exportWriter(Writer writer, List<Wikitty> wikitties) throws Exception {
- throw new UnsupportedOperationException("Not supported yet.");
+ public void exportWriter(Writer writer, WikittyService ws, PagedResult<Wikitty> pagedResult) throws Exception {
+
+ CSVWriter csvWriter = new CSVWriter(writer);
+
+ // write all data into writer
+ List<String> extensionHeader = new LinkedList<String>();
+ extensionHeader.add(FIELD_WIKITTY_ID);
+ for (FacetTopic topic : pagedResult.getTopic(Element.ELT_EXTENSION)) {
+ String extName = topic.getTopicName();
+
+ WikittyExtension extension = ws.restoreExtensionLastVersion(extName);
+ String ext = WikittyExtension.computeName(extName);
+ for (String fieldName : extension.getFieldNames()) {
+ extensionHeader.add(ext + "." + fieldName);
+ }
+ }
+ csvWriter.writeNext(extensionHeader.toArray(new String[extensionHeader.size()]));
+
+ if (log.isDebugEnabled()) {
+ log.debug("Exporting wikitty : " + pagedResult.getAll().size() + " results");
+ }
+
+ // Export wikitty data
+ List<Wikitty> wikitties = pagedResult.getAll();
+ for (Wikitty w : wikitties) {
+
+ String[] wikittyField = new String[extensionHeader.size()];
+
+ // first, add technical id
+ wikittyField[extensionHeader.indexOf(FIELD_WIKITTY_ID)] = w.getId();
+
+ // wikitty export must be composed of all field
+ // corresponding to header extensions names
+ for (String fieldName : w.fieldNames()) {
+ String currentField = "";
+
+ FieldType type = w.getFieldType(fieldName);
+ if (type.isCollection()) {
+ Object fqField = w.getFqField(fieldName);
+ if (fqField != null) {
+ String separator = "";
+ for (Object o : (Collection) fqField) {
+ String fqFieldValue = WikittyUtil.toString(type, o);
+ currentField += separator + "(" + fqFieldValue + ")";
+ separator = ",";
+ }
+ }
+ } else {
+ String fqFieldValue = WikittyUtil.toString(type, w.getFqField(fieldName));
+ currentField = fqFieldValue;
+ }
+
+ wikittyField[extensionHeader.indexOf(fieldName)] = currentField;
+ }
+
+ csvWriter.writeNext(wikittyField);
+ }
+
+ csvWriter.close();
}
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -19,11 +19,14 @@
import java.io.Reader;
import java.io.Writer;
-import java.util.List;
+
+import org.nuiton.wikitty.PagedResult;
import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyService;
/**
- *
+ * Import / export interface.
+ *
* @author poussin
* @version $Revision$
*
@@ -31,6 +34,26 @@
* by : $Author$
*/
public interface ImportExportMethod {
- public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception;
- public void exportWriter(Writer writer, List<Wikitty> wikitties) throws Exception;
+
+ /**
+ * Import data from reader.
+ *
+ * @param reader reader
+ * @param ws wikitty service
+ * @param batchUpdate wikitty batch update helper
+ *
+ * @throws Exception
+ */
+ public void importReader(Reader reader, WikittyService ws, WikittyBatchUpdate batchUpdate) throws Exception;
+
+ /**
+ * Export data to writer.
+ *
+ * @param writer writer
+ * @param ws wikitty service
+ * @param pagedResult paged result
+ *
+ * @throws Exception
+ */
+ public void exportWriter(Writer writer, WikittyService ws, PagedResult<Wikitty> pagedResult) throws Exception;
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -17,7 +17,6 @@
package org.nuiton.wikitty.importexport;
-
import java.io.Reader;
import java.io.Writer;
import java.util.Collection;
@@ -27,6 +26,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -35,6 +35,7 @@
import org.nuiton.wikitty.Wikitty;
import org.nuiton.wikitty.WikittyException;
import org.nuiton.wikitty.WikittyExtension;
+import org.nuiton.wikitty.WikittyService;
import org.nuiton.wikitty.WikittyUtil;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
@@ -53,7 +54,7 @@
static private Log log = LogFactory.getLog(ImportExportXML.class);
@Override
- public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception {
+ public void importReader(Reader reader, WikittyService ws, WikittyBatchUpdate batchUpdate) throws Exception {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(
System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
factory.setNamespaceAware(true);
@@ -68,9 +69,9 @@
do {
eventType = xpp.next();
String objectVersion = null;
- if (eventType == xpp.START_DOCUMENT) {
+ if (eventType == XmlPullParser.START_DOCUMENT) {
log.info("start XML import at " + new Date());
- } else if (eventType == xpp.START_TAG) {
+ } else if (eventType == XmlPullParser.START_TAG) {
String name = xpp.getName();
if ("extension".equals(name)) {
String extName = xpp.getAttributeValue(null, "name");
@@ -95,7 +96,7 @@
w.addExtension(e);
}
}
- } else if (eventType == xpp.END_TAG) {
+ } else if (eventType == XmlPullParser.END_TAG) {
String name = xpp.getName();
if ("extension".equals(name)) {
batchUpdate.addExtension(ext);
@@ -122,17 +123,19 @@
w.setField(extensionName, fieldName, CDATA);
}
}
- } else if (eventType == xpp.TEXT) {
+ } else if (eventType == XmlPullParser.TEXT) {
CDATA = xpp.getText();
}
- } while (eventType != xpp.END_DOCUMENT);
+ } while (eventType != XmlPullParser.END_DOCUMENT);
}
@Override
- public void exportWriter(Writer result, List<Wikitty> wikitties) throws Exception {
+ public void exportWriter(Writer result, WikittyService ws, PagedResult<Wikitty> pagedResult) throws Exception {
// keep extension already done
Set<String> extDone = new HashSet<String>();
result.write("<wikengo>\n");
+
+ List<Wikitty> wikitties = pagedResult.getAll();
for (Wikitty w : wikitties) {
String extensionList = "";
for (WikittyExtension ext : w.getExtensions()) {
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -39,7 +39,7 @@
log.info("Import in (ms)" + time);
}
ImportExportMethod importer = format.ieporter();
- importer.importReader(reader, batchUpdate);
+ importer.importReader(reader, ws, batchUpdate);
if (log.isInfoEnabled()) {
time = System.currentTimeMillis() - time;
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java 2010-05-28 16:47:31 UTC (rev 62)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java 2010-05-31 09:44:30 UTC (rev 63)
@@ -43,7 +43,7 @@
* search extension in local extension list and if missed restore
* extension from internal WikittyService
* @param id
- * @return
+ * @return extension
*/
public WikittyExtension getExtension(String id) {
WikittyExtension result = exts.get(id);
1
0
r62 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc wikitty-jpa-impl/src/main/java/org/nuiton/wikitty/jpa wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test
by echatellier@users.nuiton.org 28 May '10
by echatellier@users.nuiton.org 28 May '10
28 May '10
Author: echatellier
Date: 2010-05-28 18:47:31 +0200 (Fri, 28 May 2010)
New Revision: 62
Url: http://nuiton.org/repositories/revision/wikitty/62
Log:
Fix compilation problem (abstract / impl replacement)
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java
trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java
trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
trunk/wikitty-jpa-impl/src/main/java/org/nuiton/wikitty/jpa/WikittyServiceJPA.java
trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java
trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -59,6 +59,14 @@
protected WikittyExtensionStorage extensionStorage;
protected WikittyStorage wikittyStorage;
+ /**
+ * @deprecated since 2.0 will be removed soon (leave {@link #searchEngin}, {@link #extensionStorage} , {@link #wikittyStorage} uninitialized
+ */
+ @Deprecated
+ protected WikittyServiceImpl() {
+
+ }
+
public WikittyServiceImpl(WikittyExtensionStorage extensionStorage,
WikittyStorage wikittyStorage,
WikittySearchEngin searchEngin) {
Modified: trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java
===================================================================
--- trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -20,10 +20,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.AbstractWikittyService;
-import org.nuiton.wikitty.WikittyExtensionStorage;
-import org.nuiton.wikitty.WikittySearchEngin;
-import org.nuiton.wikitty.WikittyStorage;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
/**
Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
===================================================================
--- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -19,11 +19,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.AbstractWikittyService;
-import org.nuiton.wikitty.WikittyExtensionStorage;
-import org.nuiton.wikitty.WikittySearchEngin;
-import org.nuiton.wikitty.WikittyServiceInMemory;
-import org.nuiton.wikitty.WikittyStorage;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
/**
Modified: trunk/wikitty-jpa-impl/src/main/java/org/nuiton/wikitty/jpa/WikittyServiceJPA.java
===================================================================
--- trunk/wikitty-jpa-impl/src/main/java/org/nuiton/wikitty/jpa/WikittyServiceJPA.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-jpa-impl/src/main/java/org/nuiton/wikitty/jpa/WikittyServiceJPA.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -19,9 +19,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.AbstractWikittyService;
import org.nuiton.wikitty.WikittyExtensionStorage;
import org.nuiton.wikitty.WikittySearchEngin;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.WikittyStorage;
import org.springframework.beans.factory.annotation.Autowired;
@@ -32,7 +32,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceJPA extends AbstractWikittyService {
+public class WikittyServiceJPA extends WikittyServiceImpl {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyServiceJPA.class);
@@ -46,6 +46,12 @@
@Autowired
protected WikittyStorage wikittyStorage;
+ /**
+ * FIXME EC20100528 super searchEngin, extensionStorage, wikittyStorage
+ * need to be intialized
+ *
+ * Mit de coté temporairement a cause des @Autowired
+ */
public WikittyServiceJPA() {
}
Modified: trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java
===================================================================
--- trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -17,7 +17,7 @@
package org.nuiton.wikitty.multistorage;
-import org.nuiton.wikitty.AbstractWikittyService;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.WikittyExtensionStorage;
import org.nuiton.wikitty.WikittySearchEngin;
import org.nuiton.wikitty.WikittyStorage;
@@ -33,10 +33,6 @@
*/
public class WikittyServiceMultiStorage extends WikittyServiceImpl {
- protected WikittySearchEngin searchEngin;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittyStorage wikittyStorage;
-
protected MultiStorageConfiguration configuration;
public WikittyServiceMultiStorage(MultiStorageConfiguration configuration) {
@@ -50,12 +46,4 @@
this(new MultiStorageConfiguration.BasicConfiguration());
}
- public WikittyExtensionStorage getExtensionMultiStorage() {
- return extensionStorage;
- }
-
- public WikittyStorage getWikittyMultiStorage() {
- return wikittyStorage;
- }
-
}
Modified: trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java
===================================================================
--- trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-05-28 16:21:57 UTC (rev 61)
+++ trunk/wikitty-solr-impl/src/test/java/org/nuiton/wikitty/solr/test/WikittyServiceSolr.java 2010-05-28 16:47:31 UTC (rev 62)
@@ -17,13 +17,8 @@
package org.nuiton.wikitty.solr.test;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.AbstractWikittyService;
-import org.nuiton.wikitty.WikittyExtensionStorage;
-import org.nuiton.wikitty.WikittySearchEngin;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.WikittyServiceInMemory;
-import org.nuiton.wikitty.WikittyStorage;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
/**
@@ -34,33 +29,11 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceSolr extends AbstractWikittyService {
+public class WikittyServiceSolr extends WikittyServiceImpl {
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(WikittyServiceSolr.class);
-
- protected WikittySearchEngin searchEngin;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittyStorage wikittyStorage;
-
public WikittyServiceSolr() {
extensionStorage = new WikittyServiceInMemory.WikittyExtensionStorageInMemory();
wikittyStorage = new WikittyServiceInMemory.WikittyStorageInMemory();
searchEngin = new WikittySearchEnginSolr(extensionStorage);
}
-
- @Override
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- @Override
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- @Override
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
}
1
0
Author: echatellier
Date: 2010-05-28 18:21:57 +0200 (Fri, 28 May 2010)
New Revision: 61
Url: http://nuiton.org/repositories/revision/wikitty/61
Log:
Remove empty packages
Removed:
trunk/wikitty-api/src/main/java/org/sharengo/
trunk/wikitty-api/src/test/java/org/sharengo/
trunk/wikitty-generators/src/main/java/org/sharengo/
trunk/wikitty-hbase-impl/src/main/java/org/sharengo/
trunk/wikitty-hbase-impl/src/test/java/org/sharengo/
trunk/wikitty-jdbc-impl/src/main/java/org/sharengo/
trunk/wikitty-jdbc-impl/src/test/java/org/sharengo/
trunk/wikitty-jms-impl/src/main/java/org/sharengo/
trunk/wikitty-jms-impl/src/test/java/org/sharengo/
trunk/wikitty-jpa-impl/src/main/java/org/sharengo/
trunk/wikitty-jpa-impl/src/test/java/org/sharengo/
trunk/wikitty-multistorage-impl/src/main/java/org/sharengo/
trunk/wikitty-multistorage-impl/src/test/java/org/sharengo/
trunk/wikitty-solr-impl/src/main/java/org/sharengo/
trunk/wikitty-solr-impl/src/test/java/org/sharengo/
1
0
Author: echatellier
Date: 2010-05-28 18:10:47 +0200 (Fri, 28 May 2010)
New Revision: 60
Url: http://nuiton.org/repositories/revision/wikitty/60
Log:
Add commons-collections dependency
Modified:
trunk/pom.xml
trunk/wikitty-api/pom.xml
Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml 2010-05-28 13:06:15 UTC (rev 59)
+++ trunk/pom.xml 2010-05-28 16:10:47 UTC (rev 60)
@@ -59,6 +59,13 @@
<version>2.5</version>
<scope>compile</scope>
</dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.2.1</version>
+ <scope>compile</scope>
+ </dependency>
<dependency>
<groupId>org.nuiton.eugene</groupId>
Modified: trunk/wikitty-api/pom.xml
===================================================================
--- trunk/wikitty-api/pom.xml 2010-05-28 13:06:15 UTC (rev 59)
+++ trunk/wikitty-api/pom.xml 2010-05-28 16:10:47 UTC (rev 60)
@@ -61,6 +61,11 @@
</dependency>
<dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>xpp3</groupId>
<artifactId>xpp3</artifactId>
<version>1.1.4c</version>
1
0
28 May '10
Author: bpoussin
Date: 2010-05-28 15:06:15 +0200 (Fri, 28 May 2010)
New Revision: 59
Url: http://nuiton.org/repositories/revision/wikitty/59
Log:
grosse modification dans wikitty
- debut implantation du cache
- creation d'un service d'import export pour l'extraire de wikittyService
- ajout de certaine methode avec transation dans l'interface wikittyService
- creation du package importexport pour toutes les classes relatives
- ajout de @deprecated sur certaine classe (bean)
Added:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/JobState.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java
Removed:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/AbstractWikittyService.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JobState.java
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntity.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyDAO.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigration.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigrationRename.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/api/WikittyUtilTest.java
trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/conform/ImportExportTest.java
trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java
trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java
Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/AbstractWikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/AbstractWikittyService.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/AbstractWikittyService.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -1,1233 +0,0 @@
-/* *##%
- * Copyright (c) 2009 poussin. All rights reserved.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *##%*/
-
-package org.nuiton.wikitty;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.AbstractMap.SimpleEntry;
-import java.util.Map.Entry;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.FutureTask;
-
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.nuiton.wikitty.search.Search;
-import org.nuiton.wikitty.LabelImpl;
-import org.nuiton.wikitty.TreeNode;
-import org.nuiton.wikitty.TreeNodeBean;
-import org.nuiton.wikitty.TreeNodeImpl;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserFactory;
-
-/**
- * Abstract class that new implementation must extends.
- * New implementation only have three method to implement:
- * <li>getSearchEngin
- * <li>getExtensionStorage
- * <li>getWikittyStorage
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public abstract class AbstractWikittyService implements WikittyService {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(AbstractWikittyService.class);
-
- // FIXME poussin 20090902 next 3 variables must be read from configuration file
- /** number of thread used to import/export task */
- protected int MAX_IMPORT_EXPORT_THREAD = 1;
- /** directory path where export asynchronous file are stored */
- protected String EXPORT_DIRECTORY = "/tmp/";
- /** url used by client to retrieve export file when job is ended */
- protected String EXPORT_URL = "file:///tmp/";
-
- /** Executor that do import export task */
- protected ExecutorService importExportExecutor =
- // TODO poussin 20090902 do thread number configurable
- Executors.newFixedThreadPool(MAX_IMPORT_EXPORT_THREAD);
- /** contains all import or export task, key is job id send to client */
- protected Map<String, Future<String>> importExportTask =
- new HashMap<String, Future<String>>();
-
- /** Default migration use to migrate a wikitty in last extension version */
- protected WikittyExtensionMigration defaultExtensionMigration =
- new WikittyExtensionMigrationRename();
-
- abstract protected WikittySearchEngin getSearchEngin();
- abstract protected WikittyExtensionStorage getExtensionStorage();
- abstract protected WikittyStorage getWikittyStorage();
-
- protected UpdateResponse store(WikittyTransaction transaction,
- Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
- // update/store extension if necessary
- Set<WikittyExtension> allExtensions = new HashSet<WikittyExtension>();
- for (Wikitty w : wikitties) {
- // collect all extensions used by all wikitties
- allExtensions.addAll(w.getExtensions());
- }
-
- // try to commit command
- UpdateResponse extUpdate = getExtensionStorage().store(transaction, allExtensions);
- UpdateResponse wikUpdate = getWikittyStorage().store(transaction, wikitties, disableAutoVersionIncrement);
- UpdateResponse indexUpdate = getSearchEngin().store(transaction, wikitties);
-
- UpdateResponse result = new UpdateResponse();
- // prepare update client response
- result.add(extUpdate);
- result.add(wikUpdate);
- result.add(indexUpdate);
-
- return result;
- }
-
- /**
- * Store and index wikitty object
- * @param wikitty
- */
- @Override
- public UpdateResponse store(Wikitty wikitty) {
- if (wikitty != null) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<Wikitty> wikitties = Arrays.asList(wikitty);
- UpdateResponse result = store(transaction, wikitties, false);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- } else {
- throw new WikittyException("You can't store null wikitty object");
- }
- }
-
- /**
- * Store and index wikitties object
- * @param wikitty
- */
- @Override
- public UpdateResponse store(Collection<Wikitty> wikitties) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- UpdateResponse result = store(transaction, wikitties, false);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- /**
- * Store and index wikitties object
- * @param wikitty
- */
- @Override
- public UpdateResponse store(Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- UpdateResponse result = store(transaction, wikitties, disableAutoVersionIncrement);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public List<String> getAllExtensionIds() {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<String> result = getExtensionStorage().getAllExtensionIds(transaction);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public List<String> getAllExtensionsRequires(String extensionName) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<String> result = getExtensionStorage()
- .getAllExtensionsRequires(transaction, extensionName);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- protected UpdateResponse storeExtension(WikittyTransaction transaction, Collection<WikittyExtension> exts) {
- UpdateResponse result = getExtensionStorage().store(transaction, exts);
- return result;
- }
-
- /**
- * Save just one extension
- * @param ext
- * @throws java.io.IOException
- */
- @Override
- public UpdateResponse storeExtension(Collection<WikittyExtension> exts) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- UpdateResponse result = storeExtension(transaction, exts);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public UpdateResponse storeExtension(WikittyExtension ext) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- UpdateResponse result = storeExtension(transaction, Arrays.asList(ext));
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- protected WikittyExtension restoreExtension(WikittyTransaction transaction, String id) {
- //split the id to ensure that version is normalized
- String name = WikittyExtension.computeName(id);
- String version = WikittyExtension.computeVersion(id);
-
- WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
- return result;
- }
- /**
- * Load extension from id. Id is 'name[version]'
- * @param id
- * @return
- */
- @Override
- public WikittyExtension restoreExtension(String id) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- WikittyExtension result = restoreExtension(transaction, id);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
-
- }
-
- protected WikittyExtension restoreExtensionLastVersion(WikittyTransaction transaction, String name) {
- String version = getExtensionStorage().getLastVersion(transaction, name);
- if(version == null) {
- return null;
- }
-
- WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
- return result;
- }
-
- @Override
- public WikittyExtension restoreExtensionLastVersion(String name) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- WikittyExtension result = restoreExtensionLastVersion(transaction, name);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- protected Wikitty restore(WikittyTransaction transaction, String id) {
- if (!getWikittyStorage().exists(transaction, id)) {
- // object doesn't exist, we return null
- return null;
- }
-
- if (getWikittyStorage().isDeleted(transaction, id)) {
- // object deleted, we return null
- return null;
- }
- Wikitty result = getWikittyStorage().restore(transaction, id);
- if(result != null) {
- result = upgradeData(transaction, result);
- }
- return result;
- }
-
- protected List<Wikitty> restore(WikittyTransaction transaction, List<String> ids) {
- List<Wikitty> result = new ArrayList<Wikitty>();
- for(String id : ids) {
- Wikitty w = restore(transaction, id);
- if (w != null) {
- result.add(w);
- }
- }
- return result;
- }
-
- @Override
- public List<Wikitty> restore(List<String> ids) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<Wikitty> result = restore(transaction, ids);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public Wikitty restore(String id) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty result = restore(transaction, id);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- protected Wikitty upgradeData(WikittyTransaction transaction, Wikitty wikitty) {
- Wikitty result = wikitty;
-
- Collection<WikittyExtension> extensions = wikitty.getExtensions();
- for (WikittyExtension extension : extensions) {
- String extensionName = extension.getName();
- log.debug("extensionName=" + extensionName);
-
- WikittyExtension currentExtension = extension;
- String currentExtensionVersion = currentExtension.getVersion();
-
- WikittyExtension lastExtension = restoreExtensionLastVersion(transaction, extensionName);
- String lastExtensionVersion = lastExtension.getVersion();
- log.debug("lastExtensionVersion=" + lastExtensionVersion);
-
- WikittyExtensionMigration migration = WikittyExtensionMigration.migrationRegistry.get(extensionName);
- if (migration == null) {
- migration = defaultExtensionMigration;
- }
-
- // Loop on between extension in wikitty and last version
- while(WikittyUtil.versionGreaterThan(lastExtensionVersion, currentExtensionVersion)) {
-
- // Get extension after the current version
- String nextExtensionVersion = WikittyUtil.incrementMajorRevision(currentExtensionVersion);
- String nextExtensionId = WikittyExtension.computeId(extensionName, nextExtensionVersion);
- WikittyExtension nextExtension = restoreExtension(transaction, nextExtensionId);
-
- log.debug("currentExtensionVersion=" + currentExtensionVersion);
- log.debug("nextExtensionVersion=" + nextExtensionVersion);
-
- // Test if extension is never use in this version
- if(nextExtension != null) {
- result = migration.migrate(this, transaction, result, currentExtension, nextExtension);
- currentExtension = nextExtension;
- }
-
- // Follow
- currentExtensionVersion = nextExtensionVersion;
- }
- }
-
- return result;
- }
-
- protected void delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException {
- // work only on valid id
- Collection<Wikitty> storedWikitties = new ArrayList<Wikitty>();
- List<String> idList = new LinkedList<String>(ids);
- for (Iterator<String> i = idList.iterator(); i.hasNext();) {
- String id = i.next();
- // test if wikitty exists
- if (!getWikittyStorage().exists(transaction, id)) {
- // don't exist, remove this id in id list
- i.remove();
- }
- if (getWikittyStorage().isDeleted(transaction, id)) {
- // already deleted, remove this id in id list
- i.remove();
- }
-
- // Store node with have deleted node as parent
- Criteria criteria = Search.query().eq(TreeNode.FQ_FIELD_PARENT, id).criteria();
- List<Wikitty> wikittyNodes = findAllByCriteria(transaction, criteria).getAll();
- for (Wikitty wikittyNode : wikittyNodes) {
- String wikittyNodeId = wikittyNode.getId();
- if(!ids.contains(wikittyNodeId)) {
- TreeNode treeNode = new TreeNodeImpl(wikittyNode);
- treeNode.setParent(null);
- storedWikitties.add(wikittyNode);
- }
- }
-
- // Store node with have deleted child
- criteria = Search.query().eq(TreeNode.FQ_FIELD_CHILDREN, id).criteria();
- wikittyNodes = findAllByCriteria(transaction, criteria).getAll();
- for (Wikitty wikittyNode : wikittyNodes) {
- String wikittyNodeId = wikittyNode.getId();
- if(!ids.contains(wikittyNodeId)) {
- TreeNode treeNode = new TreeNodeImpl(wikittyNode);
- treeNode.removeChildren(id);
- storedWikitties.add(wikittyNode);
- }
- }
- }
-
- getWikittyStorage().delete(transaction, ids);
- getSearchEngin().delete(transaction, ids);
-
- store(transaction, storedWikitties, false);
- }
-
- @Override
- public void delete(String id) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- List<String> ids = Arrays.asList(id);
- delete(transaction, ids);
-
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public void delete(Collection<String> ids){
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- delete(transaction, ids);
-
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- /**
- * Use with caution : It will delete ALL indexes from search engine !
- * This operation should be disabled in production environment.
- */
- @Override
- public void clear() {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- getSearchEngin().clear(transaction);
- getWikittyStorage().clear(transaction);
- getExtensionStorage().clear(transaction);
-
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- /**
- * Assume that this PagedResult contains wikitty id as result and
- * return new PagedResult with Wikitty instance
- */
- protected PagedResult<Wikitty> findAllByCriteria(WikittyTransaction transaction, Criteria criteria) {
- PagedResult<String> resultIds = getSearchEngin().findAllByCriteria(transaction, criteria);
- List<String> ids = resultIds.getAll();
- List<Wikitty> wikitties = restore(transaction, ids);
- PagedResult<Wikitty> result = new PagedResult<Wikitty>(
- resultIds.getFirstIndice(),
- resultIds.getNumFound(),
- resultIds.getQueryString(),
- resultIds.getFacets(),
- wikitties);
- return result;
- }
-
- @Override
- public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- PagedResult<Wikitty> result = findAllByCriteria(transaction, criteria);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- protected Wikitty findByCriteria(WikittyTransaction transaction, Criteria criteria) {
- criteria.setFirstIndex(0).setEndIndex(1);
- PagedResult<Wikitty> pages = findAllByCriteria(transaction, criteria);
-
- Wikitty result = null;
- if (pages.size() > 0) {
- result = pages.getFirst();
- }
-
- return result;
- }
-
- @Override
- public Wikitty findByCriteria(Criteria criteria) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty result = findByCriteria(transaction, criteria);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public void addLabel(String wikittyId, String label) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(transaction, wikittyId);
- w.addExtension(LabelImpl.extensions);
- LabelImpl l = new LabelImpl(w);
- l.addLabels(label);
- store(transaction, Arrays.asList(w), false);
-
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public PagedResult<Wikitty> findAllByLabel(String label, int firstIndex, int endIndex) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- LabelImpl l = new LabelImpl();
- l.addLabels(label);
- Criteria criteria = Search.query(l.getWikitty()).criteria()
- .setFirstIndex(firstIndex).setEndIndex(endIndex);
- PagedResult<Wikitty> result = findAllByCriteria(transaction, criteria);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public Wikitty findByLabel(String label) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- LabelImpl l = new LabelImpl();
- l.addLabels(label);
- Criteria criteria = Search.query(l.getWikitty()).criteria();
- Wikitty result = findByCriteria(transaction, criteria);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public Set<String> findAllAppliedLabels(String wikittyId) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(transaction, wikittyId);
- LabelImpl l = new LabelImpl(w);
- Set<String> result = l.getLabels();
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
-
- protected Tree restoreTree(WikittyTransaction transaction, String wikittyId) {
- Wikitty w = restore(transaction, wikittyId);
- if(w == null) {
- return null;
- }
-
- if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, TreeNode.EXT_TREENODE ));
- }
- Tree tree = new Tree();
- TreeNode node = AbstractWikittyService.toBean(new TreeNodeImpl(w));
- tree.setNode(node);
-
- TreeNodeImpl exempleNode = new TreeNodeImpl();
- exempleNode.setParent(wikittyId);
-
- Criteria criteria = Search.query(exempleNode.getWikitty()).criteria()
- .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
- PagedResult<Wikitty> childNodes = findAllByCriteria(transaction, criteria);
- for( Wikitty childNode : childNodes.getAll() ) {
- tree.addChild(restoreTree(transaction, childNode.getId()));
- }
-
- return tree;
- }
-
- @Override
- public Tree restoreTree(String wikittyId) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Tree tree = restoreTree(transaction, wikittyId);
-
- transaction.commit();
- return tree;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public Map.Entry<TreeNode, Integer> restoreNode(String wikittyId, Criteria filter) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(transaction, wikittyId);
- if(w == null) {
- transaction.commit();
- return null;
- }
-
- if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, TreeNode.EXT_TREENODE ));
- }
-
- TreeNode node = AbstractWikittyService.toBean(new TreeNodeImpl(w));
- Integer count = getSearchEngin().findNodeCount(transaction, w, filter);
-
- HashMap.SimpleEntry<TreeNode, Integer> result =
- new SimpleEntry<TreeNode, Integer>(node, count);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public Map<TreeNode, Integer> restoreChildren(String wikittyId, Criteria filter) {
- WikittyTransaction transaction = new WikittyTransaction();
- try {
- transaction.begin();
-
- Wikitty w = restore(transaction, wikittyId);
- if(w == null) {
- transaction.commit();
- return null;
- }
-
- if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
- throw new WikittyException(String.format(
- "Wikitty '%s' do not handle extension %s",
- wikittyId, TreeNode.EXT_TREENODE ));
- }
-
- Map<TreeNode, Integer> result = new LinkedHashMap<TreeNode, Integer>();
-
- Map<String, Integer> search = getSearchEngin().findAllChildrenCount(transaction, w, filter);
- Set<Entry<String, Integer>> children = search.entrySet();
- for (Entry<String, Integer> child : children) {
- Integer count = child.getValue();
-
- String id = child.getKey();
- Wikitty wikitty = restore(transaction, id);
- TreeNode node = AbstractWikittyService.toBean(new TreeNodeImpl(wikitty));
-
- result.put(node, count);
- }
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- @Override
- public Wikitty restoreVersion(String wikittyId, String version) {
- throw new UnsupportedOperationException("Not supported yet.");
- }
-
- @Override
- public UpdateResponse syncEngin() {
- final WikittyTransaction transaction = new WikittyTransaction();
- try {
- final int numberForCommit = 1000;
- final WikittySearchEngin searchEngin = getSearchEngin();
- final UpdateResponse result = new UpdateResponse();
- final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit);
-
- transaction.begin();
- searchEngin.clear(transaction);
- transaction.commit();
- transaction.begin();
-
- getWikittyStorage().scanWikitties(transaction, new WikittyStorage.Scanner() {
- int count = 0;
-
- @Override
- public void scan(Wikitty wikitty) {
- Date deleteDate = wikitty.getDeleteDate();
- if(deleteDate == null) {
- count ++;
- wikitties.add(wikitty);
-
- if(count == numberForCommit) {
- // Reindex
- UpdateResponse response = searchEngin.store(transaction, wikitties);
- result.add(response);
- transaction.commit();
- // Reinit
- count = 0;
- wikitties.clear();
- transaction.begin();
- }
- }
- }
- });
-
- // Last wikitties
- UpdateResponse response = searchEngin.store(transaction, wikitties);
- result.add(response);
-
- transaction.commit();
- return result;
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
-
- /**
- * Class used for import process, this class retain numberForCommit object
- * before to send it to storage.
- */
- static protected class WikittyBatchUpdate {
- // TODO poussin 20090902 do configurable numberForCommit
- protected int numberForCommit = 1000;
- protected int currentAdded = 0;
- protected Map<String, WikittyExtension> exts = new HashMap<String, WikittyExtension>();
- protected List<Wikitty> wikitties = new LinkedList<Wikitty>();
-
- protected AbstractWikittyService ws;
- protected WikittyTransaction transaction;
-
- public WikittyBatchUpdate(AbstractWikittyService ws, WikittyTransaction transaction) {
- this.ws = ws;
- this.transaction = transaction;
- }
-
- public void addExtension(WikittyExtension ext) {
- exts.put(ext.getId(), ext);
- inc();
- }
-
- public void addWikitty(Wikitty w) {
- wikitties.add(w);
- inc();
- }
-
- /**
- * search extension in local extension list and if missed restore
- * extension from internal WikittyService
- * @param id
- * @return
- */
- public WikittyExtension getExtension(WikittyTransaction transaction, String id) {
- WikittyExtension result = exts.get(id);
- if (result == null) {
- result = ws.restoreExtension(transaction, id);
- }
- return result;
- }
-
- public void flush() {
- ws.storeExtension(transaction, exts.values());
- ws.store(transaction, wikitties, true);
-
- exts.clear();
- wikitties.clear();
- currentAdded = 0;
- }
-
- protected void inc() {
- currentAdded++;
- if (currentAdded >= numberForCommit) {
- flush();
- }
- }
- }
-
-
- @Override
- public void syncImportFromXml(String xml) {
- Reader reader = new StringReader(xml);
- ImportTask task = new ImportTask(this, reader);
- task.run();
- }
-
-
- @Override
- public void syncImportFromUri(String uri) {
- try {
- URL url = new URL(uri);
- Reader reader = new InputStreamReader(url.openStream());
- ImportTask task = new ImportTask(this, reader);
- task.run();
- } catch (Exception eee) {
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public String asyncImportFromUri(String uri) {
- try {
- URL url = new URL(uri);
- Reader reader = new InputStreamReader(url.openStream());
- ImportTask task = new ImportTask(this, reader);
- FutureTask<String> future = new FutureTask<String>(task, null);
- importExportExecutor.submit(future);
-
- String jobId = UUID.randomUUID().toString();
- importExportTask.put(jobId, future);
- return jobId;
- } catch (Exception eee) {
- throw new WikittyException(eee);
- }
- }
-
-
- static public class ImportTask implements Runnable {
- protected AbstractWikittyService ws;
- protected WikittyTransaction transaction;
- protected Reader reader;
-
- public ImportTask(AbstractWikittyService ws, Reader reader) {
- this.ws = ws;
- this.reader = reader;
- this.transaction = new WikittyTransaction();
- }
-
- @Override
- public void run() {
- try {
- transaction.begin();
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance(
- System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
- factory.setNamespaceAware(true);
- XmlPullParser xpp = factory.newPullParser();
- xpp.setInput(reader);
-
- WikittyExtension ext = null;
- Wikitty w = null;
- String CDATA = null;
-
- WikittyBatchUpdate batchUpdate = new WikittyBatchUpdate(ws, transaction);
-
- long time = System.currentTimeMillis();
-
- int eventType = xpp.getEventType();
- do {
- String objectVersion = null;
- if (eventType == xpp.START_DOCUMENT) {
- log.info("start XML import at " + new Date());
- } else if (eventType == xpp.END_DOCUMENT) {
- time = System.currentTimeMillis() - time;
- log.info("XML import in (ms)" + time);
- } else if (eventType == xpp.START_TAG) {
- String name = xpp.getName();
- if ("extension".equals(name)) {
- String extName = xpp.getAttributeValue(null, "name");
- String version = xpp.getAttributeValue(null, "version");
- String requires = xpp.getAttributeValue(null, "requires");
- ext = new WikittyExtension(extName, version, requires, new LinkedHashMap<String, FieldType>());
- } else if ("object".equals(name)) {
- String id = xpp.getAttributeValue(null, "id");
- objectVersion = xpp.getAttributeValue(null, "version");
- String extensions = xpp.getAttributeValue(null, "extensions");
- w = new Wikitty(id);
- String[] extensionList = extensions.split(",");
- for (String extId : extensionList) {
- String extName = WikittyExtension.computeName(extId);
- String extVersion = WikittyExtension.computeVersion(extId);
- extId = WikittyExtension.computeId(extName, extVersion);
- WikittyExtension e = batchUpdate.getExtension(transaction, extId);
- if(e == null) {
- throw new WikittyException("Extension not found : " + extId);
- }
- w.addExtension(e);
- }
- }
- } else if (eventType == xpp.END_TAG) {
- String name = xpp.getName();
- if ("extension".equals(name)) {
- batchUpdate.addExtension(ext);
- ext = null;
- } else if ("object".equals(name)) {
- w.setVersion(objectVersion);
- batchUpdate.addWikitty(w);
- w = null;
- } else if (ext != null && "field".equals(name)) {
- FieldType type = new FieldType();
- String fieldName = WikittyUtil.parseField(CDATA, type);
- ext.addField(fieldName, type);
- } else if (ext != null && "tagvalues".equals(name)) {
- Map<String, String> tagValues = WikittyUtil.tagValuesToMap(CDATA);
- ext.setTagValues(tagValues);
- } else if (w != null) {
- String[] fq = name.split("\\.");
- String extensionName = fq[0];
- String fieldName = fq[1];
- FieldType fieldType = w.getFieldType(name);
- if(fieldType.isCollection()) {
- w.addToField(extensionName, fieldName, CDATA);
- } else {
- w.setField(extensionName, fieldName, CDATA);
- }
- }
- } else if (eventType == xpp.TEXT) {
- CDATA = xpp.getText();
- }
- eventType = xpp.next();
- } while (eventType != xpp.END_DOCUMENT);
-
- // don't forget to flush batchUpdate :)
- batchUpdate.flush();
- transaction.commit();
- } catch (Exception eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
- } // end ImportTask
-
- @Override
- public String asyncExportAllByCriteria(Criteria criteria) {
- try {
- String jobId = UUID.randomUUID().toString();
-
- File file = new File(EXPORT_DIRECTORY, jobId);
- String url = EXPORT_URL + jobId;
- Writer result = new FileWriter(file);
- ExportTask task = new ExportTask(this, criteria, result);
- FutureTask<String> future = new FutureTask<String>(task, url);
- importExportExecutor.submit(future);
-
- importExportTask.put(jobId, future);
- return jobId;
- } catch (Exception eee) {
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public String syncExportAllByCriteria(Criteria criteria) {
- StringWriter result = new StringWriter();
- ExportTask task = new ExportTask(this, criteria, result);
- task.run();
- return result.toString();
- }
-
-
- static public class ExportTask implements Runnable {
- protected AbstractWikittyService ws;
- protected WikittyTransaction transaction;
-
- protected Criteria criteria;
- protected Writer result;
-
- public ExportTask(AbstractWikittyService ws, Criteria criteria, Writer result) {
- this.ws = ws;
- this.transaction = new WikittyTransaction();
- this.criteria = criteria;
- this.result = result;
- }
-
- @Override
- public void run() {
- try {
- transaction.begin();
- PagedResult<Wikitty> pageResult = ws.findAllByCriteria(transaction, criteria);
-
- // keep extension already done
- Set<String> extDone = new HashSet<String>();
- result.write("<wikengo>\n");
- for (Wikitty w : pageResult.getAll()) {
- String extensionList = "";
- for (WikittyExtension ext : w.getExtensions()) {
- String id = ext.getId();
- extensionList += "," + id;
- if (!extDone.contains(id)) {
- extDone.add(id);
- result.write(" <extension name='" + ext.getName()
- + "' version='" + ext.getVersion()
- + (ext.getRequires() != null ? "' requires='" + ext.getRequires() : "")
- + "'>\n");
- Map<String, String> tagValues = ext.getTagValues();
- result.write(" <tagvalues>" + WikittyUtil.tagValuesToString(tagValues) + "</tagvalues>\n");
- for (String fieldName : ext.getFieldNames()) {
- String def = ext.getFieldType(fieldName).toDefinition(fieldName);
- result.write(" <field>" + def + "</field>\n");
- }
- result.write(" </extension>\n");
- }
- }
- if (!"".equals(extensionList)) {
- // delete first ','
- extensionList = extensionList.substring(1);
- }
- result.write(" <object id='" + w.getId() + "' version='" + w.getVersion() + "' extensions='" + extensionList + "'>\n");
- for (String fieldName : w.fieldNames()) {
- FieldType type = w.getFieldType(fieldName);
- if (type.isCollection()) {
- Object fqField = w.getFqField(fieldName);
- if (fqField != null) {
- for (Object o : (Collection) fqField) {
- String fqFieldValue = WikittyUtil.toString(type, o);
- if (fqFieldValue != null) {
- fqFieldValue = StringEscapeUtils.escapeXml(fqFieldValue);
- result.write(" <" + fieldName + ">" + fqFieldValue + "</" + fieldName + ">\n");
- }
- }
- }
- } else {
- String fqFieldValue = WikittyUtil.toString(type, w.getFqField(fieldName));
- if (fqFieldValue != null) {
- fqFieldValue = StringEscapeUtils.escapeXml(fqFieldValue);
- result.write(" <" + fieldName + ">" + fqFieldValue + "</" + fieldName + ">\n");
- }
- }
- }
- result.write(" </object>\n");
- }
- result.write("</wikengo>\n");
- transaction.commit();
- } catch (IOException eee) {
- transaction.rollback();
- throw new WikittyException(eee);
- }
- }
- } // end ExportTask
-
-
- @Override
- public JobState infoJob(String jobId) {
- try {
- Future<String> future = importExportTask.get(jobId);
- JobState result = new JobState();
- if (future.isDone()) {
- result.status = "done";
- result.resourceUri = future.get();
- } else if (future.isCancelled()) {
- result.status = "cancelled";
- } else {
- result.status = "inProgress";
- }
- return result;
- } catch (Exception eee) {
- throw new WikittyException(eee);
- }
- }
-
-
- @Override
- public void cancelJob(String jobId) {
- Future future = importExportTask.get(jobId);
- future.cancel(true); // true to kill process, perhaps to strong ?
- }
-
-
- @Override
- public void freeJobResource(String jobId) {
- Future<String> future = importExportTask.remove(jobId);
- if (future != null) {
- File file = new File(EXPORT_DIRECTORY, jobId);
- file.delete();
- }
- }
-
- /**
- * Method copied from eugengo-0.7 generators
- *
- * @param bean
- * @return
- */
- /*public static TreeNodeImpl toImpl(TreeNode bean) {
- if (bean == null) return null;
- TreeNodeImpl impl = new TreeNodeImpl(bean);
- return impl;
- }*/
-
- /**
- * Method copied from eugengo-0.7 generators
- *
- * @param bean
- * @return
- */
- protected static void fillBeanAttributes(TreeNode fromBean, TreeNodeBean toBean) {
- String beanId = fromBean.getWikittyId();
- toBean.id = beanId;
-
- String beanVersion = fromBean.getWikittyVersion();
- toBean.setWikittyVersion(beanVersion);
-
- toBean.setName(fromBean.getName());
- toBean.setParent(fromBean.getParent());
- // WARNING: Copy collection to other collection to not manipulate storage collection directly
- Collection<String> treeNodeChildren = fromBean.getChildren();
- if(treeNodeChildren != null) {
- toBean.TreeNode$children = new HashSet<String>(treeNodeChildren);
- }
- }
-
- /**
- * Method copied from eugengo-0.7 generators
- *
- * @param impl
- * @return
- */
- public static TreeNode toBean(TreeNodeImpl impl) {
- if (impl == null) return null;
- TreeNodeBean bean = new TreeNodeBean();
- AbstractWikittyService.fillBeanAttributes(impl, bean);
- return bean;
- }
-}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntity.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntity.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntity.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -30,6 +30,7 @@
* Last update: $Date$
* by : $Author$
*/
+// FIXME poussin 20100528 voir si cette interface est reellement necessaire. On pourra renommer BusinessEntityWikitty en BusinessEntity
public interface BusinessEntity extends Serializable, Cloneable {
public String getWikittyId();
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -32,6 +32,8 @@
* Last update: $Date$
* by : $Author$
*/
+// FIXME poussin 20100528 verifie que cette classe n'est reellement plus utilisee, seul BusinessEntity(Wikitty) devrait l'etre
+@Deprecated
public class BusinessEntityBean implements BusinessEntity {
/** serialVersionUID. */
Deleted: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JobState.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JobState.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JobState.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -1,41 +0,0 @@
-/* *##%
- * Copyright (c) 2009 Sharengo, Guillaume Dufrene, Benjamin POUSSIN.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *##%*/
-
-package org.nuiton.wikitty;
-
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class JobState {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(JobState.class);
-
- String status; // or enum
- /** if is an export, resourceUri is not null when job is ended */
- String resourceUri; // generated resource URI on that job
-
-}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyCache.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,189 @@
+/* *##%
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.collections.map.ReferenceMap;
+
+/**
+ * Cette classe sert a introduire du cache dans wikitty. Elle sert a centraliser
+ * tous les appels au cache pour pouvoir simplement changer de librairie de
+ * cache si necessaire, meme si pour l'instant on s'appuie le JDK
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyCache {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyCache.class);
+
+ public static interface WikittyCacheListener {
+ public void putWikitty(Wikitty ... ws);
+ public void removeWikitty(String ... ids);
+ public void clearWikitty();
+
+ public void putExtension(WikittyExtension ... es);
+ public void removeExtension(String ... ids);
+ public void clearExtension();
+ }
+
+ static protected WikittyCache instance = null;
+
+ /**
+ * indique si les objects sont propages (true) vers les autres caches ou
+ * simplement supprimes des autres caches (false)
+ */
+ // TODO poussin 20100520 rendre configurable cette variable propagateCache
+ protected boolean propagateCache = false;
+ protected Map<String, Wikitty> wikittyCache;
+ protected Set<WikittyCacheListener> listeners;
+
+ protected WikittyCache() {
+ wikittyCache = new ReferenceMap(ReferenceMap.HARD, ReferenceMap.SOFT);
+ listeners = new HashSet<WikittyCacheListener>();
+ // FIXME poussin 20100520 add jgroups listener to send message to other cache
+ // addListener(new JGroupsCacheNotifier(propagateCache));
+ }
+
+ public static synchronized WikittyCache getInstance() {
+ if (instance == null) {
+ instance = new WikittyCache();
+ }
+ return instance;
+ }
+
+ /**
+ * Notifie les autres caches d'une action: ajout, mise a jour
+ *
+ * @param w
+ */
+ // FIXME poussin 20100520 send message to other cache
+ protected void firePutWikitty(Wikitty ... ws) {
+ WikittyCacheListener[] ls =
+ listeners.toArray(new WikittyCacheListener[listeners.size()]);
+ for (WikittyCacheListener l : ls) {
+ l.putWikitty(ws);
+ }
+ }
+
+ /**
+ * Notifie les autres caches d'une action: suppression
+ *
+ * @param w
+ */
+ protected void fireRemoveWikitty(String ... ids) {
+ WikittyCacheListener[] ls =
+ listeners.toArray(new WikittyCacheListener[listeners.size()]);
+ for (WikittyCacheListener l : ls) {
+ l.removeWikitty(ids);
+ }
+ }
+
+ protected void fireClearWikitty() {
+ WikittyCacheListener[] ls =
+ listeners.toArray(new WikittyCacheListener[listeners.size()]);
+ for (WikittyCacheListener l : ls) {
+ l.clearWikitty();
+ }
+ }
+
+ public boolean existsWikitty(String id) {
+ Object o = wikittyCache.get(id);
+ boolean result = (o != null);
+ return result;
+ }
+
+ /**
+ * Return wikitty object if is in the cache, null otherwize
+ * @param id
+ * @return wikitty object or null
+ */
+ public Wikitty getWikitty(String id) {
+ Wikitty result = wikittyCache.get(id);
+ return result;
+ }
+
+ /**
+ * Only realy put wikitty in cache, if not in cache or version is newer than
+ * one in cache
+ * @param e
+ */
+ public void putWikitty(Wikitty e) {
+ Wikitty old = getWikitty(e.getId());
+ if (old == null
+ || WikittyUtil.versionGreaterThan(e.getVersion(), old.getVersion())) {
+ wikittyCache.put(e.getId(), e);
+ firePutWikitty(e);
+ }
+ }
+
+ /**
+ * batched put
+ * @param e
+ */
+ public void putAllWikitty(Collection<Wikitty> all) {
+ for (Wikitty w : all) {
+ wikittyCache.put(w.getId(), w);
+ }
+ firePutWikitty(all.toArray(new Wikitty[all.size()]));
+ }
+
+ public void removeWikitty(String id) {
+ wikittyCache.remove(id);
+ fireRemoveWikitty(id);
+ }
+
+ /**
+ * clear all wikitty objet in cache
+ */
+ public void clearWikitty() {
+ wikittyCache.clear();
+ fireClearWikitty();
+ }
+
+ /**
+ * batched remove
+ * @param ids
+ */
+ public void removeAllWikitty(Collection<String> ids) {
+ for (String id : ids) {
+ wikittyCache.remove(id);
+ }
+ fireRemoveWikitty(ids.toArray(new String[ids.size()]));
+ }
+
+ public void addListener(WikittyCacheListener l) {
+ listeners.add(l);
+ }
+
+ public void removeListener(WikittyCacheListener l) {
+ listeners.remove(l);
+ }
+
+
+
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyDAO.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyDAO.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyDAO.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -9,6 +9,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+// FIXME poussin 20100528 verifier que cette class ne sert bien a rien et la supprimee
+// Certaine methode ont ete commentee, car si on supprime la classe, ca ne sert a rien
+// de la maintenir
+@Deprecated
public class WikittyDAO<E extends BusinessEntityWikitty> {
protected static Log log = LogFactory.getLog( WikittyDAO.class );
@@ -30,22 +34,22 @@
proxy.addLabel(wikittyId, label);
}
- public String asyncExportAllByCriteria(Criteria criteria) {
- return proxy.asyncExportAllByCriteria(criteria);
- }
+// public String asyncExportAllByCriteria(Criteria criteria) {
+// return proxy.asyncExportAllByCriteria(criteria);
+// }
+//
+// public String asyncExportAllByExample(E e) {
+// return proxy.asyncExportAllByExample(e);
+// }
+//
+// public String asyncImportFromUri(String uri) {
+// return proxy.asyncImportFromUri(uri);
+// }
+//
+// public void cancelJob(String jobId) {
+// proxy.cancelJob(jobId);
+// }
- public String asyncExportAllByExample(E e) {
- return proxy.asyncExportAllByExample(e);
- }
-
- public String asyncImportFromUri(String uri) {
- return proxy.asyncImportFromUri(uri);
- }
-
- public void cancelJob(String jobId) {
- proxy.cancelJob(jobId);
- }
-
public void delete(Collection<String> ids) {
proxy.delete(ids);
}
@@ -90,9 +94,9 @@
return proxy.findByLabel(label);
}
- public void freeJobResource(String jobId) {
- proxy.freeJobResource(jobId);
- }
+// public void freeJobResource(String jobId) {
+// proxy.freeJobResource(jobId);
+// }
public WikittyService getWikittyService() {
return proxy.getWikittyService();
@@ -102,9 +106,9 @@
return proxy.hashCode();
}
- public JobState infoJob(String jobId) {
- return proxy.infoJob(jobId);
- }
+// public JobState infoJob(String jobId) {
+// return proxy.infoJob(jobId);
+// }
public List<E> restore(List<String> id) {
return proxy.restore(clazz, id, true);
@@ -161,22 +165,22 @@
return proxy.store(objets);
}
- public String syncExportAllByCriteria(Criteria criteria) {
- return proxy.syncExportAllByCriteria(criteria);
- }
+// public String syncExportAllByCriteria(Criteria criteria) {
+// return proxy.syncExportAllByCriteria(criteria);
+// }
+//
+// public String syncExportAllByExample(E e) {
+// return proxy.syncExportAllByExample(e);
+// }
+//
+// public void syncImportFromUri(String uri) {
+// proxy.syncImportFromUri(uri);
+// }
+//
+// public void syncImportFromXml(String xml) {
+// proxy.syncImportFromXml(xml);
+// }
- public String syncExportAllByExample(E e) {
- return proxy.syncExportAllByExample(e);
- }
-
- public void syncImportFromUri(String uri) {
- proxy.syncImportFromUri(uri);
- }
-
- public void syncImportFromXml(String xml) {
- proxy.syncImportFromXml(xml);
- }
-
public String toString() {
return proxy.toString();
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigration.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigration.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigration.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -53,7 +53,7 @@
* @return same wikitty as argument if nothing to do, or new wikitty
* if some modification is done
*/
- public Wikitty migrate(AbstractWikittyService service, WikittyTransaction transaction,
+ public Wikitty migrate(WikittyServiceImpl service, WikittyTransaction transaction,
Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt);
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigrationRename.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigrationRename.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyExtensionMigrationRename.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -47,7 +47,7 @@
* @param wikitty wikitty to add extension to
* @param newExt extension to add
*/
- protected void addExtension(AbstractWikittyService service, WikittyTransaction transaction, Wikitty wikitty, WikittyExtension newExt) {
+ protected void addExtension(WikittyServiceImpl service, WikittyTransaction transaction, Wikitty wikitty, WikittyExtension newExt) {
// manage requires before current
String requires = newExt.getRequires();
@@ -63,7 +63,7 @@
}
@Override
- public Wikitty migrate(AbstractWikittyService service, WikittyTransaction transaction, Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt) {
+ public Wikitty migrate(WikittyServiceImpl service, WikittyTransaction transaction, Wikitty wikitty, WikittyExtension oldExt, WikittyExtension newExt) {
String wikittyId = wikitty.getId();
String wikittyVersion = wikitty.getVersion();
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyImportExportService.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,210 @@
+/* *##%
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.importexport.ExportTask;
+import org.nuiton.wikitty.importexport.ImportExportCSV;
+import org.nuiton.wikitty.importexport.ImportExportMethod;
+import org.nuiton.wikitty.importexport.ImportExportXML;
+import org.nuiton.wikitty.importexport.ImportTask;
+import org.nuiton.wikitty.importexport.JobState;
+import org.nuiton.wikitty.search.Search;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyImportExportService {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyImportExportService.class);
+
+ static public enum FORMAT {
+ XML(new ImportExportXML()),
+ CSV(new ImportExportCSV());
+
+ /** ieport == Importer/Exporter */
+ protected ImportExportMethod ieporter;
+ FORMAT(ImportExportMethod ieporter) {
+ this.ieporter = ieporter;
+ }
+
+ public ImportExportMethod ieporter() {
+ return ieporter;
+ }
+ };
+
+ // FIXME poussin 20090902 next 3 variables must be read from configuration file
+ /** number of thread used to import/export task */
+ protected int MAX_IMPORT_EXPORT_THREAD = 1;
+ /** directory path where export asynchronous file are stored */
+ protected String EXPORT_DIRECTORY = "/tmp/";
+ /** url used by client to retrieve export file when job is ended */
+ protected String EXPORT_URL = "file:///tmp/";
+
+ /** Executor that do import export task */
+ protected ExecutorService importExportExecutor =
+ // TODO poussin 20090902 do thread number configurable
+ Executors.newFixedThreadPool(MAX_IMPORT_EXPORT_THREAD);
+ /** contains all import or export task, key is job id send to client */
+ protected Map<String, Future<String>> importExportTask =
+ new HashMap<String, Future<String>>();
+
+ protected WikittyService ws;
+
+ public WikittyImportExportService(WikittyService ws) {
+ this.ws = ws;
+ }
+
+ public WikittyService getWikittyService() {
+ return ws;
+ }
+
+ public void syncImport(FORMAT format, String s) {
+ Reader reader = new StringReader(s);
+ ImportTask task = new ImportTask(ws, format, reader);
+ task.run();
+ }
+
+ public void syncImportFromUri(FORMAT format, String uri) {
+ try {
+ URL url = new URL(uri);
+ Reader reader = new InputStreamReader(url.openStream());
+ ImportTask task = new ImportTask(ws, format, reader);
+ task.run();
+ } catch (Exception eee) {
+ throw new WikittyException(eee);
+ }
+ }
+
+ public String asyncImportFromUri(FORMAT format, String uri) {
+ try {
+ URL url = new URL(uri);
+ Reader reader = new InputStreamReader(url.openStream());
+ ImportTask task = new ImportTask(ws, format, reader);
+ FutureTask<String> future = new FutureTask<String>(task, null);
+ importExportExecutor.submit(future);
+
+ String jobId = UUID.randomUUID().toString();
+ importExportTask.put(jobId, future);
+ return jobId;
+ } catch (Exception eee) {
+ throw new WikittyException(eee);
+ }
+ }
+
+ /**
+ *
+ * @param e
+ * @return job id
+ */
+ public String asyncExportAllByExample(FORMAT format, BusinessEntityWikitty e) {
+ Criteria criteria = Search.query(e.getWikitty()).criteria();
+ String result = asyncExportAllByCriteria(format, criteria);
+ return result;
+ }
+
+ /**
+ *
+ * @param e
+ * @return xml string
+ */
+ public String syncExportAllByExample(FORMAT format, BusinessEntityWikitty e) {
+ Criteria criteria = Search.query(e.getWikitty()).criteria();
+ String result = syncExportAllByCriteria(format, criteria);
+ return result;
+ }
+
+ public String asyncExportAllByCriteria(FORMAT format, Criteria criteria) {
+ try {
+ String jobId = UUID.randomUUID().toString();
+
+ File file = new File(EXPORT_DIRECTORY, jobId);
+ String url = EXPORT_URL + jobId;
+ Writer result = new FileWriter(file);
+ ExportTask task = new ExportTask(ws, format, criteria, result);
+ FutureTask<String> future = new FutureTask<String>(task, url);
+ importExportExecutor.submit(future);
+
+ importExportTask.put(jobId, future);
+ return jobId;
+ } catch (Exception eee) {
+ throw new WikittyException(eee);
+ }
+ }
+
+ public String syncExportAllByCriteria(FORMAT format, Criteria criteria) {
+ StringWriter result = new StringWriter();
+ ExportTask task = new ExportTask(ws, format, criteria, result);
+ task.run();
+ return result.toString();
+ }
+
+ public JobState infoJob(String jobId) {
+ try {
+ Future<String> future = importExportTask.get(jobId);
+ JobState result = new JobState();
+ if (future.isDone()) {
+ result.status = "done";
+ result.resourceUri = future.get();
+ } else if (future.isCancelled()) {
+ result.status = "cancelled";
+ } else {
+ result.status = "inProgress";
+ }
+ return result;
+ } catch (Exception eee) {
+ throw new WikittyException(eee);
+ }
+ }
+
+ public void cancelJob(String jobId) {
+ Future future = importExportTask.get(jobId);
+ future.cancel(true); // true to kill process, perhaps to strong ?
+ }
+
+ public void freeJobResource(String jobId) {
+ Future<String> future = importExportTask.remove(jobId);
+ if (future != null) {
+ File file = new File(EXPORT_DIRECTORY, jobId);
+ file.delete();
+ }
+ }
+
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyProxy.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -30,7 +30,6 @@
import org.nuiton.wikitty.search.Element;
import org.nuiton.wikitty.search.Search;
-import org.nuiton.wikitty.TreeNode;
/**
*
@@ -425,92 +424,4 @@
return true;
}
- public void syncImportFromXml(String xml) {
- wikittyService.syncImportFromXml(xml);
- }
-
- public void syncImportFromUri(String uri) {
- wikittyService.syncImportFromUri(uri);
- }
-
- /**
- *
- * @param uri
- * @return job id
- */
- public String asyncImportFromUri(String uri) {
- String result = wikittyService.asyncImportFromUri(uri);
- return result;
- }
-
- /**
- *
- * @param e
- * @return job id
- */
- public <E extends BusinessEntityWikitty> String asyncExportAllByExample(E e) {
- Criteria criteria = Search.query(e.getWikitty()).criteria();
- String result = wikittyService.asyncExportAllByCriteria(criteria);
- return result;
- }
-
- /**
- *
- * @param e
- * @return xml string
- */
- public <E extends BusinessEntityWikitty> String syncExportAllByExample(E e) {
- Criteria criteria = Search.query(e.getWikitty()).criteria();
- String result = wikittyService.syncExportAllByCriteria(criteria);
- return result;
- }
-
- /**
- *
- * @param criteria
- * @return job id
- */
- public String asyncExportAllByCriteria(Criteria criteria) {
- String result = wikittyService.asyncExportAllByCriteria(criteria);
- return result;
- }
-
- /**
- *
- * @param criteria
- * @return xml string
- */
- public String syncExportAllByCriteria(Criteria criteria) {
- String result = wikittyService.syncExportAllByCriteria(criteria);
- return result;
- }
-
- /**
- * give the job state
- * @param jobId
- * @return
- */
- public JobState infoJob(String jobId) {
- JobState result = wikittyService.infoJob(jobId);
- return result;
- }
-
- /**
- * cancel job you must call freeJobResource
- * @param jobId
- */
- public void cancelJob(String jobId) {
- wikittyService.cancelJob(jobId);
- }
-
- /**
- * This method must be call when your job is done and you have result, or
- * when you call cancelJob
- * @param jobId
- */
- public void freeJobResource(String jobId) {
- wikittyService.freeJobResource(jobId);
- }
-
-
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyService.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -22,8 +22,6 @@
import java.util.Map;
import java.util.Set;
-import org.nuiton.wikitty.TreeNode;
-
/**
*
* @author poussin
@@ -74,7 +72,20 @@
UpdateResponse store(Collection<Wikitty> wikitties,
boolean disableAutoVersionIncrement);
+
/**
+ * Manage Update and creation, action is done in transaction passed in
+ * argument
+ *
+ * @param transaction transaction used to do the action (must not be null)
+ * @param wikitties list of wikitty to be persisted
+ * @param disableAutoVersionIncrement boolean to disable version increment
+ * on saved wikitty
+ */
+ UpdateResponse store(WikittyTransaction transaction,
+ Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement);
+
+ /**
* Return all extension id (ex: "extName[version])")
* @return
*/
@@ -100,6 +111,16 @@
*/
UpdateResponse storeExtension(Collection<WikittyExtension> exts);
+ /**
+ * Manage Update and creation, action is done in transaction passed in
+ * argument
+ *
+ * @param transaction transaction used to do the action (must not be null)
+ * @param exts list of wikitty extension to be persisted
+ */
+ UpdateResponse storeExtension(WikittyTransaction transaction,
+ Collection<WikittyExtension> exts);
+
/**
*
* @param id
@@ -108,6 +129,16 @@
public WikittyExtension restoreExtension(String id);
/**
+ * action is done in transaction passed in argument
+ *
+ * @param transaction transaction used to do the action (must not be null) *
+ * @param id
+ * @return the corresponding object, exception if no such object found.
+ */
+ public WikittyExtension restoreExtension(WikittyTransaction transaction,
+ String id);
+
+ /**
* Search extension with name in last version
* @param name
* @return the corresponding object, exception if no such object found.
@@ -151,6 +182,15 @@
public PagedResult<Wikitty> findAllByCriteria(Criteria criteria);
/**
+ *
+ * @param transaction
+ * @param criteria
+ * @return
+ */
+ public PagedResult<Wikitty> findAllByCriteria(
+ WikittyTransaction transaction, Criteria criteria);
+
+ /**
* Fist lonely (or first one) wikitty object that match criteria, if no wikitty found return null
* @param criteria
* @return
@@ -242,65 +282,4 @@
*/
UpdateResponse syncEngin();
- /*
- * Import / Export
- */
-
-
- /**
- * synchonous or not ?
- *
- * @param xmlData data to import
- */
- void syncImportFromXml(String xml);
-
- /**
- *
- * @param uri
- */
- void syncImportFromUri(String uri);
-
- /**
- *
- * @param uri
- * @return a jobID
- */
- String asyncImportFromUri(String uri);
-
- /**
- *
- * @param criteria
- * @return
- */
- String asyncExportAllByCriteria(Criteria criteria);
-
- /**
- *
- * @param criteria
- * @return
- */
- String syncExportAllByCriteria(Criteria criteria);
-
- /*
- * Job Management
- */
-
- /**
- *
- * @param jobId
- * @return
- */
- JobState infoJob(String jobId);
-
- /**
- *
- * @param jobId
- */
- void cancelJob(String jobId);
-
- /**
- * delete job info and all resources associated to that job (files or other ...)
- */
- void freeJobResource(String jobId);
-
}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceCached.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,432 @@
+/* *##%
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Override some method of WikittyService to use cache
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceCached implements WikittyService {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceCached.class);
+
+ WikittyCache cache = null;
+ WikittyService ws;
+
+ public WikittyServiceCached(WikittyService ws) {
+ cache = WikittyCache.getInstance();
+ this.ws = ws;
+ }
+
+ @Override
+ public void clear() {
+ ws.clear();
+ cache.clearWikitty();
+ }
+
+
+ /**
+ * Override to refresh wikitty after put label
+ * @param wikittyId
+ * @param label
+ */
+ @Override
+ public void addLabel(String wikittyId, String label) {
+ ws.addLabel(wikittyId, label);
+ restore(wikittyId);
+ }
+
+ /**
+ * delete object in cache
+ * @param id
+ */
+ @Override
+ public void delete(String id) {
+ ws.delete(id);
+ cache.removeWikitty(id);
+ }
+
+ /**
+ * delete objets in cache
+ * @param ids
+ */
+ @Override
+ public void delete(Collection<String> ids) {
+ ws.delete(ids);
+ cache.removeAllWikitty(ids);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param wikittyId
+ * @return
+ */
+ @Override
+ public Set<String> findAllAppliedLabels(String wikittyId) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel is called
+ return ws.findAllAppliedLabels(wikittyId);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param criteria
+ * @return
+ */
+ @Override
+ public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel, store, storeExtension are called
+ return ws.findAllByCriteria(criteria);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param criteria
+ * @return
+ */
+ @Override
+ public PagedResult<Wikitty> findAllByCriteria(WikittyTransaction transaction, Criteria criteria) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel, store, storeExtension are called
+ return ws.findAllByCriteria(transaction, criteria);
+ }
+
+
+ /**
+ * just wrap service method
+ *
+ * @param label
+ * @param firstIndex
+ * @param endIndex
+ * @return
+ */
+ @Override
+ public PagedResult<Wikitty> findAllByLabel(String label, int firstIndex, int endIndex) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel is called
+ return ws.findAllByLabel(label, firstIndex, endIndex);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param criteria
+ * @return
+ */
+ @Override
+ public Wikitty findByCriteria(Criteria criteria) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel, store, storeExtension are called
+ return ws.findByCriteria(criteria);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param label
+ * @return
+ */
+ @Override
+ public Wikitty findByLabel(String label) {
+ // if we want to add cache for this method, we must clear cache when
+ // addLabel is called
+ return ws.findByLabel(label);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @return
+ */
+ @Override
+ public List<String> getAllExtensionIds() {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.getAllExtensionIds();
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param extensionName
+ * @return
+ */
+ @Override
+ public List<String> getAllExtensionsRequires(String extensionName) {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.getAllExtensionsRequires(extensionName);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ public Wikitty restore(String id) {
+ Wikitty result = cache.getWikitty(id);
+ if (result == null) {
+ result = ws.restore(id);
+ cache.putWikitty(result);
+ }
+ return result;
+ }
+
+ /**
+ * Overriden to put all restored object from server in cache
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ public List<Wikitty> restore(List<String> ids) {
+ ArrayList<String> notInCache = new ArrayList<String>();
+ // linked to maintains the ordre
+ LinkedHashMap<String, Wikitty> fromCache =
+ new LinkedHashMap<String, Wikitty>();
+ for (String id : ids) {
+ Wikitty w = cache.getWikitty(id);
+ fromCache.put(id, w); // put all to maintains order
+ if (w == null) { // if not found on cache, ask the server
+ notInCache.add(id);
+ }
+ }
+
+ // retrieve missing object
+ List<Wikitty> missingInCache = ws.restore(notInCache);
+
+ cache.putAllWikitty(missingInCache);
+
+ for (Wikitty w : missingInCache) {
+ // add missing object
+ fromCache.put(w.getId(), w);
+ }
+
+ Collection<Wikitty> tmp = fromCache.values();
+ ArrayList<Wikitty> result = new ArrayList<Wikitty>(tmp);
+
+ return result;
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param wikittyId
+ * @param filter
+ * @return
+ */
+ @Override
+ public Map<TreeNode, Integer> restoreChildren(String wikittyId, Criteria filter) {
+ // FIXME lookup in cache, and put in cache
+ return ws.restoreChildren(wikittyId, filter);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param id
+ * @return
+ */
+ @Override
+ public WikittyExtension restoreExtension(String id) {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.restoreExtension(id);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param name
+ * @return
+ */
+ @Override
+ public WikittyExtension restoreExtensionLastVersion(String name) {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.restoreExtensionLastVersion(name);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param wikittyId
+ * @param filter
+ * @return
+ */
+ @Override
+ public Entry<TreeNode, Integer> restoreNode(String wikittyId, Criteria filter) {
+ // FIXME lookup in cache, and put in cache
+ return ws.restoreNode(wikittyId, filter);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param wikittyId
+ * @return
+ */
+ @Override
+ public Tree restoreTree(String wikittyId) {
+ // FIXME lookup in cache, and put in cache
+ return ws.restoreTree(wikittyId);
+ }
+
+ /**
+ * Overriden to update wikitty and put it in cache
+ * @param wikitty
+ * @return
+ */
+ @Override
+ public UpdateResponse store(Wikitty wikitty) {
+ UpdateResponse result = ws.store(wikitty);
+
+ result.update(wikitty);
+ cache.putWikitty(wikitty);
+
+ return result;
+ }
+
+ /**
+ * Overriden to put wikitty in cache
+ *
+ * @param wikitties
+ * @return
+ */
+ @Override
+ public UpdateResponse store(Collection<Wikitty> wikitties) {
+ UpdateResponse result = ws.store(wikitties);
+
+ for (Wikitty w : wikitties) {
+ result.update(w);
+ }
+ cache.putAllWikitty(wikitties);
+
+ return result;
+ }
+
+ /**
+ * Overriden to put wikitty in cache
+ *
+ * @param wikitties
+ * @param disableAutoVersionIncrement
+ * @return
+ */
+ @Override
+ public UpdateResponse store(Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
+ UpdateResponse result = ws.store(wikitties, disableAutoVersionIncrement);
+
+ for (Wikitty w : wikitties) {
+ result.update(w);
+ }
+ cache.putAllWikitty(wikitties);
+
+ return result;
+ }
+
+ /**
+ * Overriden to put wikitty in cache
+ *
+ * @param wikitties
+ * @param disableAutoVersionIncrement
+ * @return
+ */
+ @Override
+ public UpdateResponse store(WikittyTransaction transaction,
+ Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
+ // FIXME poussin 2010 comment gerer le cache avec des transactions ????
+
+ UpdateResponse result = ws.store(transaction, wikitties, disableAutoVersionIncrement);
+
+ for (Wikitty w : wikitties) {
+ result.update(w);
+ }
+ cache.putAllWikitty(wikitties);
+
+ return result;
+ }
+
+
+ /**
+ * just wrap service method
+ *
+ * @param ext
+ * @return
+ */
+ @Override
+ public UpdateResponse storeExtension(WikittyExtension ext) {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.storeExtension(ext);
+ }
+
+ /**
+ * just wrap service method
+ *
+ * @param exts
+ * @return
+ */
+ @Override
+ public UpdateResponse storeExtension(Collection<WikittyExtension> exts) {
+ // TODO poussin 20100412: perhaps use cache for extension ?
+ return ws.storeExtension(exts);
+ }
+
+ @Override
+ public UpdateResponse storeExtension(WikittyTransaction transaction, Collection<WikittyExtension> exts) {
+ // FIXME poussin 2010 comment gerer le cache avec des transactions ????
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public WikittyExtension restoreExtension(WikittyTransaction transaction, String id) {
+ // FIXME poussin 2010 comment gerer le cache avec des transactions ????
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public Wikitty restoreVersion(String wikittyId, String version) {
+ // not put it in cache
+ return ws.restoreVersion(wikittyId, version);
+ }
+
+ @Override
+ public UpdateResponse syncEngin() {
+ return ws.syncEngin();
+ }
+
+
+}
Copied: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java (from rev 57, trunk/wikitty-api/src/main/java/org/nuiton/wikitty/AbstractWikittyService.java)
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceImpl.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,868 @@
+/* *##%
+ * Copyright (c) 2009 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.AbstractMap.SimpleEntry;
+import java.util.Map.Entry;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.search.Search;
+
+/**
+ * WikittyService is main service
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class WikittyServiceImpl implements WikittyService {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(WikittyServiceImpl.class);
+
+ /** Default migration use to migrate a wikitty in last extension version */
+ protected WikittyExtensionMigration defaultExtensionMigration =
+ new WikittyExtensionMigrationRename();
+
+ protected WikittySearchEngin searchEngin;
+ protected WikittyExtensionStorage extensionStorage;
+ protected WikittyStorage wikittyStorage;
+
+ public WikittyServiceImpl(WikittyExtensionStorage extensionStorage,
+ WikittyStorage wikittyStorage,
+ WikittySearchEngin searchEngin) {
+ this.extensionStorage = extensionStorage;
+ this.wikittyStorage = wikittyStorage;
+ this.searchEngin = searchEngin;
+ }
+
+ protected WikittySearchEngin getSearchEngin() {
+ return searchEngin;
+ }
+
+ protected WikittyExtensionStorage getExtensionStorage() {
+ return extensionStorage;
+ }
+
+ protected WikittyStorage getWikittyStorage() {
+ return wikittyStorage;
+ }
+
+ @Override
+ public UpdateResponse store(WikittyTransaction transaction,
+ Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
+ // update/store extension if necessary
+ Set<WikittyExtension> allExtensions = new HashSet<WikittyExtension>();
+ for (Wikitty w : wikitties) {
+ // collect all extensions used by all wikitties
+ allExtensions.addAll(w.getExtensions());
+ }
+
+ // try to commit command
+ UpdateResponse extUpdate = getExtensionStorage().store(transaction, allExtensions);
+ UpdateResponse wikUpdate = getWikittyStorage().store(transaction, wikitties, disableAutoVersionIncrement);
+ UpdateResponse indexUpdate = getSearchEngin().store(transaction, wikitties);
+
+ UpdateResponse result = new UpdateResponse();
+ // prepare update client response
+ result.add(extUpdate);
+ result.add(wikUpdate);
+ result.add(indexUpdate);
+
+ return result;
+ }
+
+ /**
+ * Store and index wikitty object
+ * @param wikitty
+ */
+ @Override
+ public UpdateResponse store(Wikitty wikitty) {
+ if (wikitty != null) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<Wikitty> wikitties = Arrays.asList(wikitty);
+ UpdateResponse result = store(transaction, wikitties, false);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ } else {
+ throw new WikittyException("You can't store null wikitty object");
+ }
+ }
+
+ /**
+ * Store and index wikitties object
+ * @param wikitty
+ */
+ @Override
+ public UpdateResponse store(Collection<Wikitty> wikitties) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ UpdateResponse result = store(transaction, wikitties, false);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ /**
+ * Store and index wikitties object
+ * @param wikitty
+ */
+ @Override
+ public UpdateResponse store(Collection<Wikitty> wikitties, boolean disableAutoVersionIncrement) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ UpdateResponse result = store(transaction, wikitties, disableAutoVersionIncrement);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public List<String> getAllExtensionIds() {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<String> result = getExtensionStorage().getAllExtensionIds(transaction);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public List<String> getAllExtensionsRequires(String extensionName) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<String> result = getExtensionStorage()
+ .getAllExtensionsRequires(transaction, extensionName);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public UpdateResponse storeExtension(WikittyTransaction transaction, Collection<WikittyExtension> exts) {
+ UpdateResponse result = getExtensionStorage().store(transaction, exts);
+ return result;
+ }
+
+ /**
+ * Save just one extension
+ * @param ext
+ * @throws java.io.IOException
+ */
+ @Override
+ public UpdateResponse storeExtension(Collection<WikittyExtension> exts) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ UpdateResponse result = storeExtension(transaction, exts);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public UpdateResponse storeExtension(WikittyExtension ext) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ UpdateResponse result = storeExtension(transaction, Arrays.asList(ext));
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public WikittyExtension restoreExtension(WikittyTransaction transaction, String id) {
+ //split the id to ensure that version is normalized
+ String name = WikittyExtension.computeName(id);
+ String version = WikittyExtension.computeVersion(id);
+
+ WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
+ return result;
+ }
+ /**
+ * Load extension from id. Id is 'name[version]'
+ * @param id
+ * @return
+ */
+ @Override
+ public WikittyExtension restoreExtension(String id) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ WikittyExtension result = restoreExtension(transaction, id);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+
+ }
+
+ protected WikittyExtension restoreExtensionLastVersion(WikittyTransaction transaction, String name) {
+ String version = getExtensionStorage().getLastVersion(transaction, name);
+ if(version == null) {
+ return null;
+ }
+
+ WikittyExtension result = getExtensionStorage().restore(transaction, name, version);
+ return result;
+ }
+
+ @Override
+ public WikittyExtension restoreExtensionLastVersion(String name) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ WikittyExtension result = restoreExtensionLastVersion(transaction, name);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ protected Wikitty restore(WikittyTransaction transaction, String id) {
+ if (!getWikittyStorage().exists(transaction, id)) {
+ // object doesn't exist, we return null
+ return null;
+ }
+
+ if (getWikittyStorage().isDeleted(transaction, id)) {
+ // object deleted, we return null
+ return null;
+ }
+ Wikitty result = getWikittyStorage().restore(transaction, id);
+ if(result != null) {
+ result = upgradeData(transaction, result);
+ }
+ return result;
+ }
+
+ protected List<Wikitty> restore(WikittyTransaction transaction, List<String> ids) {
+ List<Wikitty> result = new ArrayList<Wikitty>();
+ for(String id : ids) {
+ Wikitty w = restore(transaction, id);
+ if (w != null) {
+ result.add(w);
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public List<Wikitty> restore(List<String> ids) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<Wikitty> result = restore(transaction, ids);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public Wikitty restore(String id) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty result = restore(transaction, id);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ protected Wikitty upgradeData(WikittyTransaction transaction, Wikitty wikitty) {
+ Wikitty result = wikitty;
+
+ Collection<WikittyExtension> extensions = wikitty.getExtensions();
+ for (WikittyExtension extension : extensions) {
+ String extensionName = extension.getName();
+ log.debug("extensionName=" + extensionName);
+
+ WikittyExtension currentExtension = extension;
+ String currentExtensionVersion = currentExtension.getVersion();
+
+ WikittyExtension lastExtension = restoreExtensionLastVersion(transaction, extensionName);
+ String lastExtensionVersion = lastExtension.getVersion();
+ log.debug("lastExtensionVersion=" + lastExtensionVersion);
+
+ WikittyExtensionMigration migration = WikittyExtensionMigration.migrationRegistry.get(extensionName);
+ if (migration == null) {
+ migration = defaultExtensionMigration;
+ }
+
+ // Loop on between extension in wikitty and last version
+ while(WikittyUtil.versionGreaterThan(lastExtensionVersion, currentExtensionVersion)) {
+
+ // Get extension after the current version
+ String nextExtensionVersion = WikittyUtil.incrementMajorRevision(currentExtensionVersion);
+ String nextExtensionId = WikittyExtension.computeId(extensionName, nextExtensionVersion);
+ WikittyExtension nextExtension = restoreExtension(transaction, nextExtensionId);
+
+ log.debug("currentExtensionVersion=" + currentExtensionVersion);
+ log.debug("nextExtensionVersion=" + nextExtensionVersion);
+
+ // Test if extension is never use in this version
+ if(nextExtension != null) {
+ result = migration.migrate(this, transaction, result, currentExtension, nextExtension);
+ currentExtension = nextExtension;
+ }
+
+ // Follow
+ currentExtensionVersion = nextExtensionVersion;
+ }
+ }
+
+ return result;
+ }
+
+ protected void delete(WikittyTransaction transaction, Collection<String> ids) throws WikittyException {
+ // work only on valid id
+ Collection<Wikitty> storedWikitties = new ArrayList<Wikitty>();
+ List<String> idList = new LinkedList<String>(ids);
+ for (Iterator<String> i = idList.iterator(); i.hasNext();) {
+ String id = i.next();
+ // test if wikitty exists
+ if (!getWikittyStorage().exists(transaction, id)) {
+ // don't exist, remove this id in id list
+ i.remove();
+ }
+ if (getWikittyStorage().isDeleted(transaction, id)) {
+ // already deleted, remove this id in id list
+ i.remove();
+ }
+
+ // Store node with have deleted node as parent
+ Criteria criteria = Search.query().eq(TreeNode.FQ_FIELD_PARENT, id).criteria();
+ List<Wikitty> wikittyNodes = findAllByCriteria(transaction, criteria).getAll();
+ for (Wikitty wikittyNode : wikittyNodes) {
+ String wikittyNodeId = wikittyNode.getId();
+ if(!ids.contains(wikittyNodeId)) {
+ TreeNode treeNode = new TreeNodeImpl(wikittyNode);
+ treeNode.setParent(null);
+ storedWikitties.add(wikittyNode);
+ }
+ }
+
+ // Store node with have deleted child
+ criteria = Search.query().eq(TreeNode.FQ_FIELD_CHILDREN, id).criteria();
+ wikittyNodes = findAllByCriteria(transaction, criteria).getAll();
+ for (Wikitty wikittyNode : wikittyNodes) {
+ String wikittyNodeId = wikittyNode.getId();
+ if(!ids.contains(wikittyNodeId)) {
+ TreeNode treeNode = new TreeNodeImpl(wikittyNode);
+ treeNode.removeChildren(id);
+ storedWikitties.add(wikittyNode);
+ }
+ }
+ }
+
+ getWikittyStorage().delete(transaction, ids);
+ getSearchEngin().delete(transaction, ids);
+
+ store(transaction, storedWikitties, false);
+ }
+
+ @Override
+ public void delete(String id) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ List<String> ids = Arrays.asList(id);
+ delete(transaction, ids);
+
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public void delete(Collection<String> ids){
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ delete(transaction, ids);
+
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ /**
+ * Use with caution : It will delete ALL indexes from search engine !
+ * This operation should be disabled in production environment.
+ */
+ @Override
+ public void clear() {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ getSearchEngin().clear(transaction);
+ getWikittyStorage().clear(transaction);
+ getExtensionStorage().clear(transaction);
+
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ /**
+ * Assume that this PagedResult contains wikitty id as result and
+ * return new PagedResult with Wikitty instance
+ */
+ @Override
+ public PagedResult<Wikitty> findAllByCriteria(WikittyTransaction transaction, Criteria criteria) {
+ PagedResult<String> resultIds = getSearchEngin().findAllByCriteria(transaction, criteria);
+ List<String> ids = resultIds.getAll();
+ List<Wikitty> wikitties = restore(transaction, ids);
+ PagedResult<Wikitty> result = new PagedResult<Wikitty>(
+ resultIds.getFirstIndice(),
+ resultIds.getNumFound(),
+ resultIds.getQueryString(),
+ resultIds.getFacets(),
+ wikitties);
+ return result;
+ }
+
+ @Override
+ public PagedResult<Wikitty> findAllByCriteria(Criteria criteria) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ PagedResult<Wikitty> result = findAllByCriteria(transaction, criteria);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ protected Wikitty findByCriteria(WikittyTransaction transaction, Criteria criteria) {
+ criteria.setFirstIndex(0).setEndIndex(1);
+ PagedResult<Wikitty> pages = findAllByCriteria(transaction, criteria);
+
+ Wikitty result = null;
+ if (pages.size() > 0) {
+ result = pages.getFirst();
+ }
+
+ return result;
+ }
+
+ @Override
+ public Wikitty findByCriteria(Criteria criteria) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty result = findByCriteria(transaction, criteria);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public void addLabel(String wikittyId, String label) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(transaction, wikittyId);
+ w.addExtension(LabelImpl.extensions);
+ LabelImpl l = new LabelImpl(w);
+ l.addLabels(label);
+ store(transaction, Arrays.asList(w), false);
+
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+
+ @Override
+ public PagedResult<Wikitty> findAllByLabel(String label, int firstIndex, int endIndex) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ LabelImpl l = new LabelImpl();
+ l.addLabels(label);
+ Criteria criteria = Search.query(l.getWikitty()).criteria()
+ .setFirstIndex(firstIndex).setEndIndex(endIndex);
+ PagedResult<Wikitty> result = findAllByCriteria(transaction, criteria);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+
+ @Override
+ public Wikitty findByLabel(String label) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ LabelImpl l = new LabelImpl();
+ l.addLabels(label);
+ Criteria criteria = Search.query(l.getWikitty()).criteria();
+ Wikitty result = findByCriteria(transaction, criteria);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+
+ @Override
+ public Set<String> findAllAppliedLabels(String wikittyId) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(transaction, wikittyId);
+ LabelImpl l = new LabelImpl(w);
+ Set<String> result = l.getLabels();
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+
+ protected Tree restoreTree(WikittyTransaction transaction, String wikittyId) {
+ Wikitty w = restore(transaction, wikittyId);
+ if(w == null) {
+ return null;
+ }
+
+ if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, TreeNode.EXT_TREENODE ));
+ }
+ Tree tree = new Tree();
+ TreeNode node = WikittyServiceImpl.toBean(new TreeNodeImpl(w));
+ tree.setNode(node);
+
+ TreeNodeImpl exempleNode = new TreeNodeImpl();
+ exempleNode.setParent(wikittyId);
+
+ Criteria criteria = Search.query(exempleNode.getWikitty()).criteria()
+ .setFirstIndex(0).setEndIndex(Criteria.ALL_ELEMENTS);
+ PagedResult<Wikitty> childNodes = findAllByCriteria(transaction, criteria);
+ for( Wikitty childNode : childNodes.getAll() ) {
+ tree.addChild(restoreTree(transaction, childNode.getId()));
+ }
+
+ return tree;
+ }
+
+ @Override
+ public Tree restoreTree(String wikittyId) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Tree tree = restoreTree(transaction, wikittyId);
+
+ transaction.commit();
+ return tree;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public Map.Entry<TreeNode, Integer> restoreNode(String wikittyId, Criteria filter) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(transaction, wikittyId);
+ if(w == null) {
+ transaction.commit();
+ return null;
+ }
+
+ if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, TreeNode.EXT_TREENODE ));
+ }
+
+ TreeNode node = WikittyServiceImpl.toBean(new TreeNodeImpl(w));
+ Integer count = getSearchEngin().findNodeCount(transaction, w, filter);
+
+ HashMap.SimpleEntry<TreeNode, Integer> result =
+ new SimpleEntry<TreeNode, Integer>(node, count);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public Map<TreeNode, Integer> restoreChildren(String wikittyId, Criteria filter) {
+ WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ transaction.begin();
+
+ Wikitty w = restore(transaction, wikittyId);
+ if(w == null) {
+ transaction.commit();
+ return null;
+ }
+
+ if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
+ throw new WikittyException(String.format(
+ "Wikitty '%s' do not handle extension %s",
+ wikittyId, TreeNode.EXT_TREENODE ));
+ }
+
+ Map<TreeNode, Integer> result = new LinkedHashMap<TreeNode, Integer>();
+
+ Map<String, Integer> search = getSearchEngin().findAllChildrenCount(transaction, w, filter);
+ Set<Entry<String, Integer>> children = search.entrySet();
+ for (Entry<String, Integer> child : children) {
+ Integer count = child.getValue();
+
+ String id = child.getKey();
+ Wikitty wikitty = restore(transaction, id);
+ TreeNode node = WikittyServiceImpl.toBean(new TreeNodeImpl(wikitty));
+
+ result.put(node, count);
+ }
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+ @Override
+ public Wikitty restoreVersion(String wikittyId, String version) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public UpdateResponse syncEngin() {
+ final WikittyTransaction transaction = new WikittyTransaction();
+ try {
+ final int numberForCommit = 1000;
+ final WikittySearchEngin searchEngin = getSearchEngin();
+ final UpdateResponse result = new UpdateResponse();
+ final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit);
+
+ transaction.begin();
+ searchEngin.clear(transaction);
+ transaction.commit();
+ transaction.begin();
+
+ getWikittyStorage().scanWikitties(transaction, new WikittyStorage.Scanner() {
+ int count = 0;
+
+ @Override
+ public void scan(Wikitty wikitty) {
+ Date deleteDate = wikitty.getDeleteDate();
+ if(deleteDate == null) {
+ count ++;
+ wikitties.add(wikitty);
+
+ if(count == numberForCommit) {
+ // Reindex
+ UpdateResponse response = searchEngin.store(transaction, wikitties);
+ result.add(response);
+ transaction.commit();
+ // Reinit
+ count = 0;
+ wikitties.clear();
+ transaction.begin();
+ }
+ }
+ }
+ });
+
+ // Last wikitties
+ UpdateResponse response = searchEngin.store(transaction, wikitties);
+ result.add(response);
+
+ transaction.commit();
+ return result;
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+
+
+ /**
+ * Method copied from eugengo-0.7 generators
+ *
+ * @param bean
+ * @return
+ */
+ /*public static TreeNodeImpl toImpl(TreeNode bean) {
+ if (bean == null) return null;
+ TreeNodeImpl impl = new TreeNodeImpl(bean);
+ return impl;
+ }*/
+
+ /**
+ * Method copied from eugengo-0.7 generators
+ *
+ * @param bean
+ * @return
+ */
+ protected static void fillBeanAttributes(TreeNode fromBean, TreeNodeBean toBean) {
+ String beanId = fromBean.getWikittyId();
+ toBean.id = beanId;
+
+ String beanVersion = fromBean.getWikittyVersion();
+ toBean.setWikittyVersion(beanVersion);
+
+ toBean.setName(fromBean.getName());
+ toBean.setParent(fromBean.getParent());
+ // WARNING: Copy collection to other collection to not manipulate storage collection directly
+ Collection<String> treeNodeChildren = fromBean.getChildren();
+ if(treeNodeChildren != null) {
+ toBean.TreeNode$children = new HashSet<String>(treeNodeChildren);
+ }
+ }
+
+ /**
+ * Method copied from eugengo-0.7 generators
+ *
+ * @param impl
+ * @return
+ */
+ public static TreeNode toBean(TreeNodeImpl impl) {
+ if (impl == null) return null;
+ TreeNodeBean bean = new TreeNodeBean();
+ WikittyServiceImpl.fillBeanAttributes(impl, bean);
+ return bean;
+ }
+}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceInMemory.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -51,7 +51,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceInMemory extends AbstractWikittyService {
+public class WikittyServiceInMemory extends WikittyServiceImpl {
//FIXME InMemory implementation is not usable for production. Must be reviewed.
//FIXME The version increment must be done in 'prepare' method
@@ -353,14 +353,16 @@
*/
protected File persitenceFile = null;
- protected WikittyStorage wikittyStorage;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittySearchEngin searchEngin;
+// protected WikittyStorage wikittyStorage;
+// protected WikittyExtensionStorage extensionStorage;
+// protected WikittySearchEngin searchEngin;
public WikittyServiceInMemory() {
- extensionStorage = new WikittyExtensionStorageInMemory();
- wikittyStorage = new WikittyStorageInMemory();
- searchEngin = new WikittySearchEnginInMemory((WikittyStorageInMemory)wikittyStorage);
+ super(new WikittyExtensionStorageInMemory(),
+ new WikittyStorageInMemory(),
+ null);
+ searchEngin = new WikittySearchEnginInMemory(
+ (WikittyStorageInMemory) wikittyStorage);
}
public WikittyServiceInMemory(File persitenceFile) {
@@ -380,21 +382,6 @@
}
@Override
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
-
- @Override
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- @Override
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- @Override
protected void finalize() throws Throwable {
saveToPersistenceFile();
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyTransaction.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -14,7 +14,7 @@
public class WikittyTransaction {
/** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(AbstractWikittyService.class);
+ static private Log log = LogFactory.getLog(WikittyServiceImpl.class);
protected Map<Object, Object> tagValues;
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ExportTask.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,56 @@
+package org.nuiton.wikitty.importexport;
+
+import java.io.Writer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.Criteria;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyTransaction;
+import org.nuiton.wikitty.WikittyImportExportService.FORMAT;
+
+public class ExportTask implements Runnable {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ImportTask.class);
+
+ protected WikittyService ws;
+ protected WikittyTransaction transaction;
+ protected FORMAT format;
+ protected Criteria criteria;
+ protected Writer writer;
+
+ public ExportTask(WikittyService ws, FORMAT format, Criteria criteria, Writer writer) {
+ super();
+ this.ws = ws;
+ this.transaction = new WikittyTransaction();
+ this.format = format;
+ this.criteria = criteria;
+ this.writer = writer;
+ }
+
+ @Override
+ public void run() {
+ try {
+ transaction.begin();
+ PagedResult<Wikitty> pageResult = ws.findAllByCriteria(transaction, criteria);
+ long time = 0;
+ if (log.isInfoEnabled()) {
+ time = System.currentTimeMillis();
+ log.info("Export started");
+ }
+ ImportExportMethod exporter = format.ieporter();
+ exporter.exportWriter(writer, pageResult.getAll());
+ if (log.isInfoEnabled()) {
+ time = System.currentTimeMillis() - time;
+ log.info("Export in (ms)" + time);
+ }
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportCSV.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,51 @@
+/* *##%
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty.importexport;
+
+
+import java.io.Reader;
+import java.io.Writer;
+import java.util.List;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.Wikitty;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class ImportExportCSV implements ImportExportMethod {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ImportExportCSV.class);
+
+ @Override
+ public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+ @Override
+ public void exportWriter(Writer writer, List<Wikitty> wikitties) throws Exception {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportMethod.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package org.nuiton.wikitty.importexport;
+
+import java.io.Reader;
+import java.io.Writer;
+import java.util.List;
+import org.nuiton.wikitty.Wikitty;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public interface ImportExportMethod {
+ public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception;
+ public void exportWriter(Writer writer, List<Wikitty> wikitties) throws Exception;
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportExportXML.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,183 @@
+/* *##%
+ * Copyright (c) 2010 poussin. All rights reserved.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty.importexport;
+
+
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.FieldType;
+import org.nuiton.wikitty.PagedResult;
+import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.WikittyExtension;
+import org.nuiton.wikitty.WikittyUtil;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class ImportExportXML implements ImportExportMethod {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ImportExportXML.class);
+
+ @Override
+ public void importReader(Reader reader, WikittyBatchUpdate batchUpdate) throws Exception {
+ XmlPullParserFactory factory = XmlPullParserFactory.newInstance(
+ System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null);
+ factory.setNamespaceAware(true);
+ XmlPullParser xpp = factory.newPullParser();
+ xpp.setInput(reader);
+
+ WikittyExtension ext = null;
+ Wikitty w = null;
+ String CDATA = null;
+
+ int eventType;
+ do {
+ eventType = xpp.next();
+ String objectVersion = null;
+ if (eventType == xpp.START_DOCUMENT) {
+ log.info("start XML import at " + new Date());
+ } else if (eventType == xpp.START_TAG) {
+ String name = xpp.getName();
+ if ("extension".equals(name)) {
+ String extName = xpp.getAttributeValue(null, "name");
+ String version = xpp.getAttributeValue(null, "version");
+ String requires = xpp.getAttributeValue(null, "requires");
+ ext = new WikittyExtension(extName, version, requires,
+ new LinkedHashMap<String, FieldType>());
+ } else if ("object".equals(name)) {
+ String id = xpp.getAttributeValue(null, "id");
+ objectVersion = xpp.getAttributeValue(null, "version");
+ String extensions = xpp.getAttributeValue(null, "extensions");
+ w = new Wikitty(id);
+ String[] extensionList = extensions.split(",");
+ for (String extId : extensionList) {
+ String extName = WikittyExtension.computeName(extId);
+ String extVersion = WikittyExtension.computeVersion(extId);
+ extId = WikittyExtension.computeId(extName, extVersion);
+ WikittyExtension e = batchUpdate.getExtension(extId);
+ if (e == null) {
+ throw new WikittyException("Extension not found : " + extId);
+ }
+ w.addExtension(e);
+ }
+ }
+ } else if (eventType == xpp.END_TAG) {
+ String name = xpp.getName();
+ if ("extension".equals(name)) {
+ batchUpdate.addExtension(ext);
+ ext = null;
+ } else if ("object".equals(name)) {
+ w.setVersion(objectVersion);
+ batchUpdate.addWikitty(w);
+ w = null;
+ } else if (ext != null && "field".equals(name)) {
+ FieldType type = new FieldType();
+ String fieldName = WikittyUtil.parseField(CDATA, type);
+ ext.addField(fieldName, type);
+ } else if (ext != null && "tagvalues".equals(name)) {
+ Map<String, String> tagValues = WikittyUtil.tagValuesToMap(CDATA);
+ ext.setTagValues(tagValues);
+ } else if (w != null) {
+ String[] fq = name.split("\\.");
+ String extensionName = fq[0];
+ String fieldName = fq[1];
+ FieldType fieldType = w.getFieldType(name);
+ if (fieldType.isCollection()) {
+ w.addToField(extensionName, fieldName, CDATA);
+ } else {
+ w.setField(extensionName, fieldName, CDATA);
+ }
+ }
+ } else if (eventType == xpp.TEXT) {
+ CDATA = xpp.getText();
+ }
+ } while (eventType != xpp.END_DOCUMENT);
+ }
+
+ @Override
+ public void exportWriter(Writer result, List<Wikitty> wikitties) throws Exception {
+ // keep extension already done
+ Set<String> extDone = new HashSet<String>();
+ result.write("<wikengo>\n");
+ for (Wikitty w : wikitties) {
+ String extensionList = "";
+ for (WikittyExtension ext : w.getExtensions()) {
+ String id = ext.getId();
+ extensionList += "," + id;
+ if (!extDone.contains(id)) {
+ extDone.add(id);
+ result.write(" <extension name='" + ext.getName() + "' version='" + ext.getVersion() + (ext.getRequires() != null ? "' requires='" + ext.getRequires() : "") + "'>\n");
+ Map<String, String> tagValues = ext.getTagValues();
+ result.write(" <tagvalues>" + WikittyUtil.tagValuesToString(tagValues) + "</tagvalues>\n");
+ for (String fieldName : ext.getFieldNames()) {
+ String def = ext.getFieldType(fieldName).toDefinition(fieldName);
+ result.write(" <field>" + def + "</field>\n");
+ }
+ result.write(" </extension>\n");
+ }
+ }
+ if (!"".equals(extensionList)) {
+ // delete first ','
+ extensionList = extensionList.substring(1);
+ }
+ result.write(" <object id='" + w.getId() + "' version='" + w.getVersion() + "' extensions='" + extensionList + "'>\n");
+ for (String fieldName : w.fieldNames()) {
+ FieldType type = w.getFieldType(fieldName);
+ if (type.isCollection()) {
+ Object fqField = w.getFqField(fieldName);
+ if (fqField != null) {
+ for (Object o : (Collection) fqField) {
+ String fqFieldValue = WikittyUtil.toString(type, o);
+ if (fqFieldValue != null) {
+ fqFieldValue = StringEscapeUtils.escapeXml(fqFieldValue);
+ result.write(" <" + fieldName + ">" + fqFieldValue + "</" + fieldName + ">\n");
+ }
+ }
+ }
+ } else {
+ String fqFieldValue = WikittyUtil.toString(type, w.getFqField(fieldName));
+ if (fqFieldValue != null) {
+ fqFieldValue = StringEscapeUtils.escapeXml(fqFieldValue);
+ result.write(" <" + fieldName + ">" + fqFieldValue + "</" + fieldName + ">\n");
+ }
+ }
+ }
+ result.write(" </object>\n");
+ }
+ result.write("</wikengo>\n");
+ }
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/ImportTask.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,56 @@
+package org.nuiton.wikitty.importexport;
+
+import java.io.Reader;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.wikitty.WikittyException;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyTransaction;
+import org.nuiton.wikitty.WikittyImportExportService.FORMAT;
+
+public class ImportTask implements Runnable {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(ImportTask.class);
+
+ protected WikittyService ws;
+ protected WikittyTransaction transaction;
+ protected FORMAT format;
+ protected Reader reader;
+ protected ImportExportMethod importerExporter;
+
+ public ImportTask(WikittyService ws, FORMAT format, Reader reader) {
+ super();
+ this.ws = ws;
+ this.format = format;
+ this.reader = reader;
+ this.transaction = new WikittyTransaction();
+ }
+
+ @Override
+ public void run() {
+ try {
+ transaction.begin();
+ WikittyBatchUpdate batchUpdate = new WikittyBatchUpdate(ws, transaction);
+
+ long time = 0;
+ if (log.isInfoEnabled()) {
+ time = System.currentTimeMillis();
+ log.info("Import in (ms)" + time);
+ }
+ ImportExportMethod importer = format.ieporter();
+ importer.importReader(reader, batchUpdate);
+
+ if (log.isInfoEnabled()) {
+ time = System.currentTimeMillis() - time;
+ log.info("Import in (ms)" + time);
+ }
+ // don't forget to flush batchUpdate :)
+ batchUpdate.flush();
+ transaction.commit();
+ } catch (Exception eee) {
+ transaction.rollback();
+ throw new WikittyException(eee);
+ }
+ }
+}
Copied: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/JobState.java (from rev 58, trunk/wikitty-api/src/main/java/org/nuiton/wikitty/JobState.java)
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/JobState.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/JobState.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,41 @@
+/* *##%
+ * Copyright (c) 2009 Sharengo, Guillaume Dufrene, Benjamin POUSSIN.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *##%*/
+
+package org.nuiton.wikitty.importexport;
+
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ *
+ * @author poussin
+ * @version $Revision$
+ *
+ * Last update: $Date$
+ * by : $Author$
+ */
+public class JobState {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ static private Log log = LogFactory.getLog(JobState.class);
+
+ public String status; // or enum
+ /** if is an export, resourceUri is not null when job is ended */
+ public String resourceUri; // generated resource URI on that job
+
+}
Added: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java (rev 0)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/importexport/WikittyBatchUpdate.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -0,0 +1,70 @@
+package org.nuiton.wikitty.importexport;
+
+import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyExtension;
+import org.nuiton.wikitty.WikittyService;
+import org.nuiton.wikitty.WikittyTransaction;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Class used for import process, this class retain numberForCommit object
+ * before to send it to storage.
+ */
+public class WikittyBatchUpdate {
+
+ // TODO poussin 20090902 do configurable numberForCommit
+ protected int numberForCommit = 1000;
+ protected int currentAdded = 0;
+ protected Map<String, WikittyExtension> exts = new HashMap<String, WikittyExtension>();
+ protected List<Wikitty> wikitties = new LinkedList<Wikitty>();
+ protected WikittyService ws;
+ protected WikittyTransaction transaction;
+
+ public WikittyBatchUpdate(WikittyService ws, WikittyTransaction transaction) {
+ super();
+ this.ws = ws;
+ this.transaction = transaction;
+ }
+
+ public void addExtension(WikittyExtension ext) {
+ exts.put(ext.getId(), ext);
+ inc();
+ }
+
+ public void addWikitty(Wikitty w) {
+ wikitties.add(w);
+ inc();
+ }
+
+ /**
+ * search extension in local extension list and if missed restore
+ * extension from internal WikittyService
+ * @param id
+ * @return
+ */
+ public WikittyExtension getExtension(String id) {
+ WikittyExtension result = exts.get(id);
+ if (result == null) {
+ result = ws.restoreExtension(transaction, id);
+ }
+ return result;
+ }
+
+ public void flush() {
+ ws.storeExtension(transaction, exts.values());
+ ws.store(transaction, wikitties, true);
+ exts.clear();
+ wikitties.clear();
+ currentAdded = 0;
+ }
+
+ protected void inc() {
+ currentAdded++;
+ if (currentAdded >= numberForCommit) {
+ flush();
+ }
+ }
+}
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/api/WikittyUtilTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/api/WikittyUtilTest.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/api/WikittyUtilTest.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -29,7 +29,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Test;
-import org.nuiton.wikitty.AbstractWikittyService;
+import org.nuiton.wikitty.WikittyServiceImpl;
import org.nuiton.wikitty.FieldType;
import org.nuiton.wikitty.WikittyExtension;
import org.nuiton.wikitty.WikittyUtil;
@@ -430,7 +430,7 @@
impl.setName("toto");
impl.setParent("idparent");
- TreeNode bean = AbstractWikittyService.toBean(impl); // WikittyUtil.wikittyToBean(TreeNodeBean.class, impl);
+ TreeNode bean = WikittyServiceImpl.toBean(impl); // WikittyUtil.wikittyToBean(TreeNodeBean.class, impl);
assertEquals(impl.getName(), bean.getName());
assertEquals(impl.getParent(), bean.getParent());
}
Modified: trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/conform/ImportExportTest.java
===================================================================
--- trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/conform/ImportExportTest.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-api/src/test/java/org/nuiton/wikitty/test/conform/ImportExportTest.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -19,6 +19,7 @@
import org.junit.Test;
import org.nuiton.wikitty.Criteria;
import org.nuiton.wikitty.Wikitty;
+import org.nuiton.wikitty.WikittyImportExportService;
import org.nuiton.wikitty.search.Element;
import org.nuiton.wikitty.search.Search;
import org.w3c.dom.Document;
@@ -30,12 +31,22 @@
protected final static Log log = LogFactory.getLog(ImportExportTest.class);
+ protected WikittyImportExportService ieService;
+
+ protected WikittyImportExportService getImportExportService() {
+ if (ieService == null) {
+ ieService = new WikittyImportExportService(ws);
+ }
+ return ieService;
+ }
+
@Test
public void testExport() throws Exception {
final List<Wikitty> wikitties = createSampleWikitty(ws);
Criteria criteria = Search.query().eq(Element.ELT_EXTENSION, AbstractTestConformance.EXTNAME).criteria();
- String result = ws.syncExportAllByCriteria(criteria);
+ String result = getImportExportService().syncExportAllByCriteria(
+ WikittyImportExportService.FORMAT.XML, criteria);
log.debug("[XML] " + result);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
@@ -117,7 +128,7 @@
" </object>" +
"</wikengo>";
- ws.syncImportFromXml(xml);
+ getImportExportService().syncImport(WikittyImportExportService.FORMAT.XML, xml);
String[] ids = new String[] {
"f4ef949b-09e4-438f-b359-2a4332771c81",
Modified: trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java
===================================================================
--- trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-hbase-impl/src/main/java/org/nuiton/wikitty/hbase/WikittyServiceHBase.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -54,33 +54,14 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceHBase extends AbstractWikittyService {
+public class WikittyServiceHBase extends WikittyServiceImpl {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyServiceHBase.class);
- protected WikittySearchEngin searchEngin;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittyStorage wikittyStorage;
-
public WikittyServiceHBase() {
extensionStorage = new WikittyExtensionStorageHBase();
wikittyStorage = new WikittyStorageHBase(extensionStorage);
searchEngin = new WikittySearchEnginSolr(extensionStorage);
}
-
- @Override
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- @Override
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- @Override
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
}
Modified: trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java
===================================================================
--- trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-jdbc-impl/src/main/java/org/nuiton/wikitty/jdbc/WikittyServiceJDBC.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -22,6 +22,7 @@
import org.nuiton.wikitty.AbstractWikittyService;
import org.nuiton.wikitty.WikittyExtensionStorage;
import org.nuiton.wikitty.WikittySearchEngin;
+import org.nuiton.wikitty.WikittyServiceInMemory;
import org.nuiton.wikitty.WikittyStorage;
import org.nuiton.wikitty.solr.WikittySearchEnginSolr;
@@ -32,33 +33,15 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceJDBC extends AbstractWikittyService {
+public class WikittyServiceJDBC extends WikittyServiceImpl {
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittyServiceJDBC.class);
- protected WikittySearchEngin searchEngin;
- protected WikittyExtensionStorage extensionStorage;
- protected WikittyStorage wikittyStorage;
-
public WikittyServiceJDBC() {
extensionStorage = new WikittyExtensionStorageJDBC();
wikittyStorage = new WikittyStorageJDBC(extensionStorage);
searchEngin = new WikittySearchEnginSolr(extensionStorage);
}
- @Override
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- @Override
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- @Override
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
}
Modified: trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java
===================================================================
--- trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java 2010-05-20 09:43:56 UTC (rev 58)
+++ trunk/wikitty-multistorage-impl/src/main/java/org/nuiton/wikitty/multistorage/WikittyServiceMultiStorage.java 2010-05-28 13:06:15 UTC (rev 59)
@@ -31,7 +31,7 @@
* Last update: $Date$
* by : $Author$
*/
-public class WikittyServiceMultiStorage extends AbstractWikittyService {
+public class WikittyServiceMultiStorage extends WikittyServiceImpl {
protected WikittySearchEngin searchEngin;
protected WikittyExtensionStorage extensionStorage;
@@ -58,19 +58,4 @@
return wikittyStorage;
}
- @Override
- protected WikittySearchEngin getSearchEngin() {
- return searchEngin;
- }
-
- @Override
- protected WikittyExtensionStorage getExtensionStorage() {
- return extensionStorage;
- }
-
- @Override
- protected WikittyStorage getWikittyStorage() {
- return wikittyStorage;
- }
-
}
1
0
r58 - trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by echatellier@users.nuiton.org 20 May '10
by echatellier@users.nuiton.org 20 May '10
20 May '10
Author: echatellier
Date: 2010-05-20 11:43:56 +0200 (Thu, 20 May 2010)
New Revision: 58
Url: http://nuiton.org/repositories/revision/wikitty/58
Log:
Generated @deprecated has been lost :(
Modified:
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityBeanGenerator.java
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityBeanGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityBeanGenerator.java 2010-05-17 10:30:16 UTC (rev 57)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityBeanGenerator.java 2010-05-20 09:43:56 UTC (rev 58)
@@ -101,7 +101,11 @@
}
}
-/*{public <%=abstractString%>class <%=name%><%=extendsString%> <%=implementsString%> {
+/*{/*
+ * @deprecated since wikitty 2.0 will be removed soon
+ *)
+@Deprecated
+public <%=abstractString%>class <%=name%><%=extendsString%> <%=implementsString%> {
}*/
1
0
r57 - in trunk: wikitty-api/src/main/java/org/nuiton/wikitty wikitty-generators/src/main/java/org/nuiton/wikitty/generator
by echatellier@users.nuiton.org 17 May '10
by echatellier@users.nuiton.org 17 May '10
17 May '10
Author: echatellier
Date: 2010-05-17 12:30:16 +0200 (Mon, 17 May 2010)
New Revision: 57
Url: http://nuiton.org/repositories/revision/wikitty/57
Log:
Add defered intialisation for transient attributes (Null after deserialisation)
Modified:
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityWikitty.java
trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java
trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityAbstractGenerator.java
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java 2010-05-17 10:13:56 UTC (rev 56)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityBean.java 2010-05-17 10:30:16 UTC (rev 57)
@@ -37,6 +37,11 @@
/** serialVersionUID. */
private static final long serialVersionUID = 5245199905431320116L;
+ /**
+ * Property change support.
+ *
+ * Warning, this transient field is null after deserialization.
+ */
protected transient PropertyChangeSupport propertyChangeSupport;
protected String id;
@@ -66,8 +71,14 @@
public void setWikittyVersion(String version) {
this.version = version;
}
-
+ protected PropertyChangeSupport getPropertyChangeSupport() {
+ if (propertyChangeSupport == null) {
+ propertyChangeSupport = new PropertyChangeSupport(this);
+ }
+ return propertyChangeSupport;
+ }
+
public Collection<String> getExtensionNames() {
Collection<String> result = extensions.keySet();
return result;
@@ -99,7 +110,7 @@
*/
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(listener);
+ getPropertyChangeSupport().addPropertyChangeListener(listener);
}
/*
@@ -107,7 +118,7 @@
*/
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(listener);
+ getPropertyChangeSupport().removePropertyChangeListener(listener);
}
/*
@@ -116,7 +127,7 @@
@Override
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().addPropertyChangeListener(propertyName, listener);
}
/*
@@ -125,6 +136,6 @@
@Override
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().removePropertyChangeListener(propertyName, listener);
}
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityWikitty.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityWikitty.java 2010-05-17 10:13:56 UTC (rev 56)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/BusinessEntityWikitty.java 2010-05-17 10:30:16 UTC (rev 57)
@@ -37,19 +37,30 @@
/** serialVersionUID. */
private static final long serialVersionUID = -4399752739887114180L;
+ /**
+ * Property change support.
+ *
+ * Warning, this transient field is null after deserialization.
+ */
protected transient PropertyChangeSupport propertyChangeSupport;
protected Wikitty wikitty;
public BusinessEntityWikitty(Wikitty wi) {
- propertyChangeSupport = new PropertyChangeSupport(this);
setWikitty(wi);
}
public BusinessEntityWikitty() {
this(new Wikitty());
}
-
+
+ protected PropertyChangeSupport getPropertyChangeSupport() {
+ if (propertyChangeSupport == null) {
+ propertyChangeSupport = new PropertyChangeSupport(this);
+ }
+ return propertyChangeSupport;
+ }
+
public String getWikittyId() {
String result = getWikitty().getId();
return result;
@@ -110,7 +121,7 @@
*/
@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(listener);
+ getPropertyChangeSupport().addPropertyChangeListener(listener);
}
/*
@@ -118,7 +129,7 @@
*/
@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(listener);
+ getPropertyChangeSupport().removePropertyChangeListener(listener);
}
/*
@@ -127,7 +138,7 @@
@Override
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().addPropertyChangeListener(propertyName, listener);
}
/*
@@ -136,6 +147,6 @@
@Override
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().removePropertyChangeListener(propertyName, listener);
}
}
Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java
===================================================================
--- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-05-17 10:13:56 UTC (rev 56)
+++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/Wikitty.java 2010-05-17 10:30:16 UTC (rev 57)
@@ -50,23 +50,31 @@
* technical id for this wikitty object. id must be never null
*/
protected String id;
+
/** current version of this wikitty object */
protected String version = WikittyUtil.DEFAULT_VERSION;
+
/** if not null, date of deletion, if date this object is marked as deleted */
protected Date deleteDate = null;
- /** used to add property change support to wikitty object */
- protected transient PropertyChangeSupport propertyChange = new PropertyChangeSupport(this);
+ /**
+ * Used to add property change support to wikitty object.
+ *
+ * Warning, this field can be null after deserialization.
+ */
+ private transient PropertyChangeSupport propertyChange;
/**
* key: field name prefixed by extension name (dot separator)
* value: value of field
*/
protected HashMap<String, Object> fieldValue = new HashMap<String, Object>();
+
/**
* all field name currently modified (field name = extension . fieldname)
*/
protected Set<String> fieldDirty = new HashSet<String>();
+
/**
* Map is LinkedHashMap to maintains order like user want
* key: extension name
@@ -88,27 +96,39 @@
}
}
+ /**
+ * Always call this method because field is transient.
+ *
+ * @return
+ */
+ protected PropertyChangeSupport getPropertyChangeSupport() {
+ if (propertyChange == null) {
+ propertyChange = new PropertyChangeSupport(this);
+ }
+ return propertyChange;
+ }
+
public synchronized void addPropertyChangeListener(
PropertyChangeListener listener) {
- propertyChange.addPropertyChangeListener(listener);
+ getPropertyChangeSupport().addPropertyChangeListener(listener);
}
public synchronized void removePropertyChangeListener(
PropertyChangeListener listener) {
- propertyChange.removePropertyChangeListener(listener);
+ getPropertyChangeSupport().removePropertyChangeListener(listener);
}
public synchronized void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChange.addPropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().addPropertyChangeListener(propertyName, listener);
}
public synchronized void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
- propertyChange.removePropertyChangeListener(propertyName, listener);
+ getPropertyChangeSupport().removePropertyChangeListener(propertyName, listener);
}
public String getId() {
@@ -142,7 +162,7 @@
String key = ext + "." + fieldName;
fieldDirty.add(key);
version = WikittyUtil.incrementMinorRevision(version);
- propertyChange.firePropertyChange(key, oldValue, newValue);
+ getPropertyChangeSupport().firePropertyChange(key, oldValue, newValue);
}
public void addExtension(WikittyExtension ext) {
@@ -255,7 +275,7 @@
// take old value if needed
Object oldValue = null;
- if (propertyChange.hasListeners(key)) {
+ if (getPropertyChangeSupport().hasListeners(key)) {
oldValue = fieldValue.get(key);
}
Modified: trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityAbstractGenerator.java
===================================================================
--- trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityAbstractGenerator.java 2010-05-17 10:13:56 UTC (rev 56)
+++ trunk/wikitty-generators/src/main/java/org/nuiton/wikitty/generator/BusinessEntityAbstractGenerator.java 2010-05-17 10:30:16 UTC (rev 57)
@@ -317,7 +317,7 @@
public void set<%=attrNameCapitalized%>(<%=attrType%> <%=attrName%>) {
Object oldValue = getField(<%=EXT_NAME%>, "<%=attrName%>");
getWikitty().setField(<%=EXT_NAME%>, "<%=attrName%>", <%=attrName%>);
- propertyChangeSupport.firePropertyChange("<%=attrName%>", oldValue, <%=attrName%>);
+ getPropertyChangeSupport().firePropertyChange("<%=attrName%>", oldValue, <%=attrName%>);
}
public <%=attrType%> get<%=attrNameCapitalized%>() {
@@ -391,17 +391,17 @@
public void add<%=attrNameCapitalized%>(<%=elementType%> element) {
getWikitty().addToField(<%=EXT_NAME%>, "<%=attrName%>", element);
- propertyChangeSupport.firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
+ getPropertyChangeSupport().firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
}
public void remove<%=attrNameCapitalized%>(<%=elementType%> element) {
getWikitty().removeFromField(<%=EXT_NAME%>, "<%=attrName%>", element);
- propertyChangeSupport.firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
+ getPropertyChangeSupport().firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
}
public void clear<%=attrNameCapitalized%>() {
getWikitty().clearField(<%=EXT_NAME%>, "<%=attrName%>");
- propertyChangeSupport.firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
+ getPropertyChangeSupport().firePropertyChange("<%=attrName%>", null, get<%=attrNameCapitalized%>());
}
}*/
1
0