Sandbox-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
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- 1825 discussions
r348 - wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources
by kmorin@users.nuiton.org 05 Jan '10
by kmorin@users.nuiton.org 05 Jan '10
05 Jan '10
Author: kmorin
Date: 2010-01-05 16:28:48 +0100 (Tue, 05 Jan 2010)
New Revision: 348
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml
Log:
- change the tokenizer to remove the apostrophes
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml 2010-01-05 14:33:59 UTC (rev 347)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml 2010-01-05 15:28:48 UTC (rev 348)
@@ -191,7 +191,7 @@
<fieldType name="text_fr" class="solr.TextField" positionIncrementGap="100">
<analyzer>
- <tokenizer class="solr.StandardTokenizerFactory"/>
+ <tokenizer class="solr.LetterTokenizerFactory"/>
<filter class="solr.ISOLatin1AccentFilterFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
1
0
r347 - wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr
by kmorin@users.nuiton.org 05 Jan '10
by kmorin@users.nuiton.org 05 Jan '10
05 Jan '10
Author: kmorin
Date: 2010-01-05 15:33:59 +0100 (Tue, 05 Jan 2010)
New Revision: 347
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
Log:
- debug solr conversion
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2010-01-05 14:01:10 UTC (rev 346)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2010-01-05 14:33:59 UTC (rev 347)
@@ -138,9 +138,9 @@
} else if (searchField.length >= 2) {
String extName = searchField[0];
String fieldName = searchField[1];
-
if (Criteria.ALL_EXTENSIONS.equals(extName)) {
fqfieldname = SOLR_ALL_EXTENSIONS + "." + fieldName;
+ extName = SOLR_ALL_EXTENSIONS;
}
if (searchField.length >= 3) {
1
0
r346 - in misctestproject/trunk: . src src/main src/main/java src/main/java/org src/main/java/org/nuiton src/main/java/org/nuiton/test src/main/java/org/nuiton/test/layer
by echatellier@users.nuiton.org 05 Jan '10
by echatellier@users.nuiton.org 05 Jan '10
05 Jan '10
Author: echatellier
Date: 2010-01-05 15:01:10 +0100 (Tue, 05 Jan 2010)
New Revision: 346
Added:
misctestproject/trunk/pom.xml
misctestproject/trunk/src/
misctestproject/trunk/src/main/
misctestproject/trunk/src/main/java/
misctestproject/trunk/src/main/java/org/
misctestproject/trunk/src/main/java/org/nuiton/
misctestproject/trunk/src/main/java/org/nuiton/test/
misctestproject/trunk/src/main/java/org/nuiton/test/layer/
misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestBlockingLayer.java
misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestLayer.java
misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestModel.java
Modified:
misctestproject/trunk/
Log:
Initial commit.
Property changes on: misctestproject/trunk
___________________________________________________________________
Added: svn:ignore
+ .settings
target
.classpath
.project
Added: misctestproject/trunk/pom.xml
===================================================================
--- misctestproject/trunk/pom.xml (rev 0)
+++ misctestproject/trunk/pom.xml 2010-01-05 14:01:10 UTC (rev 346)
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <!--The version of maven's project object model-->
+ <modelVersion>4.0.0</modelVersion>
+
+ <!--A unique name for this project-->
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <name>test</name>
+
+ <!--ejb, jar, war...-->
+ <packaging>jar</packaging>
+
+ <!--Version-->
+ <version>1</version>
+
+ <!--Description-->
+ <description>test</description>
+ <inceptionYear>2009</inceptionYear>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <!-- Dependencies -->
+ <dependencies>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ <version>1.6</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-cli</groupId>
+ <artifactId>commons-cli</artifactId>
+ <version>1.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-utils</artifactId>
+ <version>1.1.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.14</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- SwingLabs Swing Component Extensions -->
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swingx</artifactId>
+ <version>1.6</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>jxlayer</artifactId>
+ <version>3.0.4</version>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestBlockingLayer.java
===================================================================
--- misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestBlockingLayer.java (rev 0)
+++ misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestBlockingLayer.java 2010-01-05 14:01:10 UTC (rev 346)
@@ -0,0 +1,66 @@
+/* *##%
+ * Copyright (C) 2010 Code Lutin, Chatellier Eric
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *##%*/
+
+package org.nuiton.test.layer;
+
+import java.awt.event.MouseEvent;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollBar;
+import javax.swing.JTable;
+
+import org.jdesktop.jxlayer.JXLayer;
+import org.jdesktop.jxlayer.plaf.AbstractLayerUI;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestBlockingLayer extends AbstractLayerUI<JComponent> {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 1877010363682882308L;
+
+ /*
+ * @see org.jdesktop.jxlayer.plaf.AbstractLayerUI#processMouseEvent(java.awt.event.MouseEvent, org.jdesktop.jxlayer.JXLayer)
+ */
+ @Override
+ protected void processMouseEvent(MouseEvent event,
+ JXLayer<? extends JComponent> layer) {
+
+ if (!(event.getSource() instanceof JScrollBar)) {
+ System.out.println("blocked on " + event.getSource());
+ event.consume();
+ }
+
+ if (event.getSource() instanceof JTable) {
+ JTable tableSource = (JTable)event.getSource();
+ TestModel model = (TestModel)tableSource.getModel();
+
+ int rowIndex = tableSource.rowAtPoint(event.getPoint());
+ int columnIndex = tableSource.columnAtPoint(event.getPoint());
+ Object value = model.getValueAt(rowIndex, columnIndex);
+ System.out.println("Try to click on + " + value);
+ }
+ }
+}
Property changes on: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestBlockingLayer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestLayer.java
===================================================================
--- misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestLayer.java (rev 0)
+++ misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestLayer.java 2010-01-05 14:01:10 UTC (rev 346)
@@ -0,0 +1,66 @@
+/* *##%
+ * Copyright (C) 2010 Code Lutin, Chatellier Eric
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *##%*/
+
+package org.nuiton.test.layer;
+
+import javax.swing.JComponent;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+
+import org.jdesktop.jxlayer.JXLayer;
+
+/**
+ * Test jxlayer.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestLayer extends JFrame {
+
+ /** serialVersionUID. */
+ private static final long serialVersionUID = 8735374368691145269L;
+
+ public static void main(String[] args) {
+ new TestLayer().setVisible(true);
+ }
+
+ public TestLayer() {
+
+ JPanel rootPanel = new JPanel();
+
+ JTable table = new JTable();
+ table.setModel(new TestModel());
+
+ JScrollPane pane = new JScrollPane(table);
+ rootPanel.add(pane);
+
+ TestBlockingLayer layerUI = new TestBlockingLayer();
+ // wrap the panel with JXLayer and the lockableUI
+ JXLayer<JComponent> l = new JXLayer<JComponent>(rootPanel, layerUI);
+
+ this.add(l);
+ this.pack();
+ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ }
+
+}
Property changes on: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestLayer.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
Added: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestModel.java
===================================================================
--- misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestModel.java (rev 0)
+++ misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestModel.java 2010-01-05 14:01:10 UTC (rev 346)
@@ -0,0 +1,76 @@
+/* *##%
+ * Copyright (C) 2010 Code Lutin, Chatellier Eric
+ *
+ * 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 2
+ * 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *##%*/
+
+package org.nuiton.test.layer;
+
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+
+/**
+ * TODO add comment here.
+ *
+ * @author chatellier
+ * @version $Revision$
+ *
+ * Last update : $Date$
+ * By : $Author$
+ */
+public class TestModel implements TableModel {
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ }
+
+ @Override
+ public void removeTableModelListener(TableModelListener l) {
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return true;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ return rowIndex + "," + columnIndex;
+ }
+
+ @Override
+ public int getRowCount() {
+ return 50;
+ }
+
+ @Override
+ public String getColumnName(int columnIndex) {
+ return "column " + columnIndex;
+ }
+
+ @Override
+ public int getColumnCount() {
+ return 5;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ return String.class;
+ }
+
+ @Override
+ public void addTableModelListener(TableModelListener l) {
+ }
+}
Property changes on: misctestproject/trunk/src/main/java/org/nuiton/test/layer/TestModel.java
___________________________________________________________________
Added: svn:keywords
+ "Author Date Id Revision HeadURL"
1
0
Author: echatellier
Date: 2010-01-05 15:00:19 +0100 (Tue, 05 Jan 2010)
New Revision: 345
Added:
misctestproject/
misctestproject/trunk/
Log:
Initial import.
1
0
r344 - wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty
by schorlet@users.nuiton.org 05 Jan '10
by schorlet@users.nuiton.org 05 Jan '10
05 Jan '10
Author: schorlet
Date: 2010-01-05 12:49:24 +0100 (Tue, 05 Jan 2010)
New Revision: 344
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/ExtensionFactory.java
Log:
add method setRequiredExtension
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/ExtensionFactory.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/ExtensionFactory.java 2010-01-05 09:32:25 UTC (rev 343)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/ExtensionFactory.java 2010-01-05 11:49:24 UTC (rev 344)
@@ -35,4 +35,8 @@
fields.put(fieldName, fieldType);
}
+ public void setRequiredExtension(String requiredExtension) {
+ this.requiredExtension = requiredExtension;
+ }
+
}
1
0
r343 - in wikengo_core-wikitty: wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr
by kmorin@users.nuiton.org 05 Jan '10
by kmorin@users.nuiton.org 05 Jan '10
05 Jan '10
Author: kmorin
Date: 2010-01-05 10:32:25 +0100 (Tue, 05 Jan 2010)
New Revision: 343
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionStorage.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Element.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Search.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/Restriction2Solr.java
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
Log:
- don't remember what I did before holydays... should have commit before leaving but forgot...
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -180,7 +180,7 @@
* @return
*/
public WikittyExtension restoreExtension(String id) {
- WikittyExtension result = getExtensionStorage().restore(id);
+ WikittyExtension result = getExtensionStorage().restore(WikittyExtension.computeName(id), WikittyExtension.computeVersion(id));
return result;
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionStorage.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionStorage.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtensionStorage.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -77,10 +77,12 @@
/**
* Restore one extension from storage, if not found an exception is throw
- * @param id extension id to restore
+ * @param name extension name to restore
+ * @param version extension version to restore
* @return
*/
- public WikittyExtension restore(String id) throws WikittyException;
+ WikittyExtension restore(String name, String version)
+ throws WikittyException;
/**
* Command update
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -209,7 +209,8 @@
return null; //To change body of implemented methods use File | Settings | File Templates.
}
- public WikittyExtension restore(String id) throws WikittyException {
+ public WikittyExtension restore(String name, String version) throws WikittyException {
+ String id = WikittyExtension.computeId(name, version);
WikittyExtension result = extensions.get(id);
if (result == null) {
throw new WikittyException(String.format("No extension with id '%s'", id));
@@ -356,10 +357,14 @@
throw new UnsupportedOperationException("Not supported yet.");
}
- public Map<String, Integer> findAllChildren(Wikitty w) {
+ public Integer findNodeCount(Wikitty w) {
throw new UnsupportedOperationException("Not supported yet.");
}
+ public Map<String, Integer> findAllChildrenCount(Wikitty w) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
}
/**
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Element.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Element.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Element.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -16,8 +16,6 @@
*##%*/
package org.sharengo.wikitty.search;
-import org.sharengo.wikitty.FieldType;
-
import java.io.Serializable;
/**
@@ -32,25 +30,28 @@
/** Represent a element on id */
public static String ELT_ID = "elt_id";
- // serialVersionUID is used for serialization.
- private static final long serialVersionUID = 1L;
+ /** Represent type to search an element */
+ public static enum ElementType {NUMERIC, STRING, WIKITTY, BOOLEAN, TEXT, DATE};
- protected String name;
+ // serialVersionUID is used for serialization.
+ private static final long serialVersionUID = 1L;
- public Element() {
- super();
- }
+ protected String name;
+ public Element() {
+ super();
+ }
+
public Element(String name) {
- this.name = name.replace(" ", FieldType.WORD_SEPARATOR);
+ this.name = name;
}
- public String getName() {
- return name;
- }
+ public String getName() {
+ return name;
+ }
- public void setName(String name) {
- this.name = name.replace(" ", FieldType.WORD_SEPARATOR);
- }
+ public void setName(String name) {
+ this.name = name;
+ }
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Search.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Search.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/search/Search.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -13,23 +13,29 @@
/**
* Helper to create a criteria with a restriction
+ *
+ * Element :
+ * <extensionName>.<fieldName>[.<fieldType>] : search on an extension and field with specific type (optionnal)
+ * Criteria.ALL_EXTENSIONS.<fieldName>.<fieldType> : search on all extension and field name with specific type
+ *
+ * <fieldType> specify seach on field as NUMERIC, STRING, WIKITTY, BOOLEAN, TEXT
*/
public class Search {
static private Log log = LogFactory.getLog(Search.class);
- public enum KIND {
- AND, OR
- }
-
- KIND kind = KIND.AND;
- List<Restriction> restrictions;
+ public enum KIND {
+ AND, OR, NOT
+ }
+
+ KIND kind = KIND.AND;
+ List<Restriction> restrictions;
List<Search> subSearchs;
-
- public Search() {
- restrictions = new ArrayList<Restriction>();
+
+ public Search() {
+ restrictions = new ArrayList<Restriction>();
subSearchs = new ArrayList<Search>();
- }
+ }
/**
* Create Search query with field in wikitty argument
@@ -42,7 +48,7 @@
result.kind = KIND.AND;
// result object must have same extension that wikitty example
for (String extName : wikitty.getExtensionNames()) {
- result.eq(Element.ELT_EXTENSION, extName);
+ result.eq(Element.ELT_EXTENSION, extName);
}
for (String fqfieldName : wikitty.fieldNames()) {
@@ -65,133 +71,150 @@
return result;
}
- public static Search query() {
- Search search = new Search();
- search.kind = KIND.AND;
- return search;
- }
+ public static Search query() {
+ Search search = new Search();
+ search.kind = KIND.AND;
+ return search;
+ }
public static Search query(KIND kind) {
- Search search = new Search();
- search.kind = kind;
- return search;
- }
-
+ Search search = new Search();
+ search.kind = kind;
+ return search;
+ }
+
/**
* Create new query on existant criteria to add new constraint to existant
* criteria
* @param criteria
* @return
*/
- public static Search query(Criteria criteria) {
- Search search = query();
+ public static Search query(Criteria criteria) {
+ Search search = query();
search.restrictions.add(criteria.getRestriction());
- return search;
- }
-
- private static Element elt(String element) {
- Element elm = new Element();
- elm.setName(element);
- return elm;
- }
-
- protected Search handle( Restriction dto ) {
- restrictions.add( dto );
- return this;
- }
+ return search;
+ }
- public Search contains(String element, Collection<String> values) {
- return handle( RestrictionHelper.contains(elt(element),
+ private static Element elt(String element) {
+ Element elm = new Element();
+ elm.setName(element);
+ return elm;
+ }
+
+ protected Search handle( Restriction dto ) {
+ restrictions.add( dto );
+ return this;
+ }
+
+ public Search contains(String element, Collection<String> values) {
+ return handle( RestrictionHelper.contains(elt(element),
new ArrayList<String>(values)) );
- }
+ }
- public Search eq(String element, String value) {
- return handle( RestrictionHelper.eq(elt(element), value) );
- }
-
- public Search neq(String element, String value) {
- return handle( RestrictionHelper.neq(elt(element), value) );
- }
+ public Search eq(String element, String value) {
+ return handle( RestrictionHelper.eq(elt(element), value) );
+ }
- public Search gt(String element, String value) {
- return handle( RestrictionHelper.great(elt(element), value) );
- }
-
- public Search ge(String element, String value) {
- return handle( RestrictionHelper.greatEq(elt(element), value) );
- }
-
- public Search lt(String element, String value) {
- return handle( RestrictionHelper.less(elt(element), value) );
- }
-
- public Search le(String element, String value) {
- return handle( RestrictionHelper.lessEq(elt(element), value) );
- }
-
- public Search bw(String element, String lowerValue, String upperValue) {
- return handle( RestrictionHelper.between(elt(element), lowerValue, upperValue) );
- }
-
- public Search sw(String element, String value) {
- return handle( RestrictionHelper.start(elt(element), value) );
- }
+ public Search neq(String element, String value) {
+ return handle( RestrictionHelper.neq(elt(element), value) );
+ }
- public Search nsw(String element, String value) {
- return handle( RestrictionHelper.not(
+ public Search gt(String element, String value) {
+ return handle( RestrictionHelper.great(elt(element), value) );
+ }
+
+ public Search ge(String element, String value) {
+ return handle( RestrictionHelper.greatEq(elt(element), value) );
+ }
+
+ public Search lt(String element, String value) {
+ return handle( RestrictionHelper.less(elt(element), value) );
+ }
+
+ public Search le(String element, String value) {
+ return handle( RestrictionHelper.lessEq(elt(element), value) );
+ }
+
+ public Search bw(String element, String lowerValue, String upperValue) {
+ return handle( RestrictionHelper.between(elt(element), lowerValue, upperValue) );
+ }
+
+ public Search sw(String element, String value) {
+ return handle( RestrictionHelper.start(elt(element), value) );
+ }
+
+ public Search nsw(String element, String value) {
+ return handle( RestrictionHelper.not(
RestrictionHelper.start(elt(element), value)) );
- }
-
- public Search ew(String element, String value) {
- return handle( RestrictionHelper.end(elt(element), value) );
- }
+ }
+ public Search ew(String element, String value) {
+ return handle( RestrictionHelper.end(elt(element), value) );
+ }
+
public Search notew(String element, String value) {
- return handle( RestrictionHelper.not(
+ return handle( RestrictionHelper.not(
RestrictionHelper.end(elt(element), value)) );
- }
+ }
public Search keyword(String value) {
return handle(RestrictionHelper.keyword(value));
}
- public Search or() {
- Search search = Search.query(KIND.OR);
+ public Search not() {
+ Search not = Search.query(KIND.NOT);
+ subSearchs.add(not);
+
+ Search search = Search.query(kind);
+ not.subSearchs.add(search);
+
+ return search;
+ }
+
+ public Search or() {
+ Search search = Search.query(KIND.OR);
subSearchs.add(search);
- return search;
- }
-
- public Search and() {
- Search search = Search.query(KIND.AND);
+ return search;
+ }
+
+ public Search and() {
+ Search search = Search.query(KIND.AND);
subSearchs.add(search);
- return search;
- }
+ return search;
+ }
- public Search associated(String foreignFieldName) {
- Search search = new SubSearch( foreignFieldName, this );
- return search;
- }
-
+ public Search associated(String foreignFieldName) {
+ Search search = new SubSearch( foreignFieldName, this );
+ return search;
+ }
+
/**
* return unnamed criteria
* @return new criteria
*/
- public Criteria criteria(String name) {
- Criteria criteria = new Criteria(name);
- Restriction result = getRestrictions();
+ public Criteria criteria(String name) {
+ Criteria criteria = new Criteria(name);
+ Restriction result = getRestrictions();
criteria.setRestriction(result);
- return criteria;
- }
-
+ return criteria;
+ }
+
protected Restriction getRestrictions() throws UnsupportedOperationException {
Restriction result;
if (restrictions.isEmpty() && subSearchs.isEmpty()) {
result = RestrictionHelper.rFalse();
+
} else if (restrictions.size() == 1 && subSearchs.isEmpty()) {
result = restrictions.remove(0);
+
} else if (subSearchs.size() == 1 && restrictions.isEmpty()) {
Search subSearch = subSearchs.get(0);
result = subSearch.getRestrictions();
+
+ if(kind == KIND.NOT) {
+ result = RestrictionHelper.not(result);
+ }
+
} else {
List<Restriction> allRestrictions = new ArrayList<Restriction>(restrictions);
for (Search subSearch : subSearchs) {
@@ -214,10 +237,9 @@
/**
* return criteria with name
- * @param name name of criteria
* @return new criteria
*/
- public Criteria criteria() {
- return criteria(null);
- }
-}
+ public Criteria criteria() {
+ return criteria(null);
+ }
+}
\ No newline at end of file
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -278,7 +278,7 @@
String extName = adminResultSet.getString(COL_NAME);
String extVersion = getLastVersion(extName);
String extId = WikittyExtension.computeId(extName, extVersion);
- result.add(restore(extId));
+ result.add(restore(WikittyExtension.computeName(extId), WikittyExtension.computeVersion(extId)));
}
} else {
adminResultSet = statement.executeQuery(
@@ -287,7 +287,7 @@
adminResultSet.beforeFirst();
while (adminResultSet.next()) {
String extId = adminResultSet.getString(COL_ID);
- result.add(restore(extId));
+ result.add(restore(WikittyExtension.computeName(extId), WikittyExtension.computeVersion(extId)));
}
}
closeConnection(con);
@@ -340,7 +340,8 @@
}
@Override
- public WikittyExtension restore(String id) throws WikittyException {
+ public WikittyExtension restore(String name, String version) throws WikittyException {
+ String id = WikittyExtension.computeId(name, version);
WikittyExtension result = extensionCache.get(id);
if (result == null) {
Connection con = null;
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -593,7 +593,7 @@
result.setVersion(version);
if (extensionList != null && !"".equals(extensionList)) {
for (String ext : extensionList.split(",")) {
- WikittyExtension extension = extensionStorage.restore(ext);
+ WikittyExtension extension = extensionStorage.restore(WikittyExtension.computeName(ext), WikittyExtension.computeVersion(ext));
result.addExtension(extension);
}
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/Restriction2Solr.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/Restriction2Solr.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/Restriction2Solr.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -8,6 +8,7 @@
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.sharengo.wikitty.WikittyException;
@@ -34,21 +35,16 @@
/**
* @author "Nicolas Chapurlat" <nicolas.chapurlat(a)logica.com>
* @author "Guillaume Dufrêne" <dufrene(a)argia.fr>
- *
+ *
* This class is used to parse Restriction to create lucene request on
* content. Every operators describe in RestrictionName is handle. Parsing may
* throw exception when restriction parameters are incorrect.
*/
public class Restriction2Solr {
-
- private static final int MAX_SUBQUERY_RESULT = 100;
- /** use to permit client to modify fieldname during query generation */
- static public interface FieldModifier {
- public String convertToSolr(String fieldname);
- public String convertToField(String solrName);
- }
- final static protected FieldModifier dummyFieldModifier = new FieldModifier() {
+ private static final int MAX_SUBQUERY_RESULT = 100;
+
+ final static protected WikittySearchEngineSolr.FieldModifier dummyFieldModifier = new WikittySearchEngineSolr.FieldModifier() {
public String convertToSolr(String fieldname) {
return fieldname;
}
@@ -57,331 +53,323 @@
}
};
- protected FieldModifier fieldModifer;
+ protected WikittySearchEngineSolr.FieldModifier fieldModifer;
public Restriction2Solr() {
this(dummyFieldModifier);
}
- public Restriction2Solr(FieldModifier fieldModifer) {
+ public Restriction2Solr(WikittySearchEngineSolr.FieldModifier fieldModifer) {
this.fieldModifer = fieldModifer;
}
public String toSolr(Restriction restriction) {
- return toSolr(restriction, null);
+ return toSolr(restriction, null);
}
-
- public String toSolr(Restriction restriction, SolrServer solr)
- throws WikittyException {
- // ParameterValidator.checkNullParameter(restriction, "restriction");
- switch (restriction.getName()) {
- case TRUE:
- return true2solr();
- case FALSE:
- return false2solr();
- case NOT:
- Not not = (Not) restriction;
- return not2solr(not);
- case AND:
- And and = (And) restriction;
- return and2solr(and);
- case OR:
- Or or = (Or) restriction;
- return or2solr(or);
- case EQUALS:
- Equals eq = (Equals) restriction;
- return eq2solr(eq);
- case NOT_EQUALS:
- NotEquals neq = (NotEquals) restriction;
- return neq2solr(neq);
- case LESS:
- Less less = (Less) restriction;
- return less2solr(less);
- case LESS_OR_EQUAL:
- LessOrEqual lessEq = (LessOrEqual) restriction;
- return lessEq2solr(lessEq);
- case GREATER:
- Greater great = (Greater) restriction;
- return great2solr(great);
- case GREATER_OR_EQUAL:
- GreaterOrEqual greatEq = (GreaterOrEqual) restriction;
- return greatEq2solr(greatEq);
- case BETWEEN:
- Between between = (Between) restriction;
- return between2solr(between);
- case CONTAINS:
- Contains contains = (Contains) restriction;
- return contains2solr(contains);
- case IN:
- In in = (In) restriction;
- return in2solr(in);
- case STARTS_WITH:
- StartsWith start = (StartsWith) restriction;
- return start2solr(start);
- case ENDS_WITH:
- EndsWith end = (EndsWith) restriction;
- return end2solr(end);
- case ASSOCIATED:
- AssociatedRestriction associated = (AssociatedRestriction) restriction;
- return associated2solr(associated, solr);
+
+ public String toSolr(Restriction restriction, SolrServer solr)
+ throws WikittyException {
+ // ParameterValidator.checkNullParameter(restriction, "restriction");
+ switch (restriction.getName()) {
+ case TRUE:
+ return true2solr();
+ case FALSE:
+ return false2solr();
+ case NOT:
+ Not not = (Not) restriction;
+ return not2solr(not);
+ case AND:
+ And and = (And) restriction;
+ return and2solr(and);
+ case OR:
+ Or or = (Or) restriction;
+ return or2solr(or);
+ case EQUALS:
+ Equals eq = (Equals) restriction;
+ return eq2solr(eq);
+ case NOT_EQUALS:
+ NotEquals neq = (NotEquals) restriction;
+ return neq2solr(neq);
+ case LESS:
+ Less less = (Less) restriction;
+ return less2solr(less);
+ case LESS_OR_EQUAL:
+ LessOrEqual lessEq = (LessOrEqual) restriction;
+ return lessEq2solr(lessEq);
+ case GREATER:
+ Greater great = (Greater) restriction;
+ return great2solr(great);
+ case GREATER_OR_EQUAL:
+ GreaterOrEqual greatEq = (GreaterOrEqual) restriction;
+ return greatEq2solr(greatEq);
+ case BETWEEN:
+ Between between = (Between) restriction;
+ return between2solr(between);
+ case CONTAINS:
+ Contains contains = (Contains) restriction;
+ return contains2solr(contains);
+ case IN:
+ In in = (In) restriction;
+ return in2solr(in);
+ case STARTS_WITH:
+ StartsWith start = (StartsWith) restriction;
+ return start2solr(start);
+ case ENDS_WITH:
+ EndsWith end = (EndsWith) restriction;
+ return end2solr(end);
+ case ASSOCIATED:
+ AssociatedRestriction associated = (AssociatedRestriction) restriction;
+ return associated2solr(associated, solr);
case KEYWORD:
Keyword keyword = (Keyword) restriction;
return keyword2solr(keyword);
- default:
- throw new WikittyException("this kind of restriction is not supported : "
- + restriction.getName().toString());
- }
- }
+ default:
+ throw new WikittyException("this kind of restriction is not supported : "
+ + restriction.getName().toString());
+ }
+ }
- private String in2solr(In in) {
- boolean first = true;
- String result = in.getElement().getName() + ":[";
- for( String value : in.getValue() ) {
- if ( !first ) { result += ", "; first = false; }
- result += value;
- }
- result +="]";
- return result;
- }
+ private String in2solr(In in) {
+ boolean first = true;
+ String result = in.getElement().getName() + ":[";
+ for( String value : in.getValue() ) {
+ if ( !first ) { result += ", "; first = false; }
+ result += value;
+ }
+ result +="]";
+ return result;
+ }
- private String associated2solr(AssociatedRestriction associated, SolrServer solr) throws WikittyException {
- String subQuery = toSolr( associated.getRestriction() );
- SolrQuery query = new SolrQuery(WikittySearchEngineSolr.SOLR_QUERY_PARSER + subQuery);
+ private String associated2solr(AssociatedRestriction associated, SolrServer solr) throws WikittyException {
+ String subQuery = toSolr( associated.getRestriction() );
+ SolrQuery query = new SolrQuery(WikittySearchEngineSolr.SOLR_QUERY_PARSER + subQuery);
query.setRows(MAX_SUBQUERY_RESULT);
QueryResponse resp = null;
try {
- resp = solr.query(query);
- } catch (SolrServerException e) {
- throw new WikittyException("Unable to execute associative query on " + associated.getElement().getName(), e);
- }
+ resp = solr.query(query);
+ } catch (SolrServerException e) {
+ throw new WikittyException("Unable to execute associative query on " + associated.getElement().getName(), e);
+ }
SolrDocumentList solrResults = resp.getResults();
-
+
Restriction generatedRestriction = null;
long size = solrResults.size();
if ( size == 0 ) {
- throw new WikittyException("Associated " + associated.getElement().getName() + " do not retrieved any result");
+ throw new WikittyException("Associated " + associated.getElement().getName() + " do not retrieved any result");
}
if ( size == 1 ) {
- generatedRestriction = RestrictionHelper.eq( associated.getElement(), (String) solrResults.get(0).getFieldValue(WikittySearchEngineSolr.SOLR_ID) );
+ generatedRestriction = RestrictionHelper.eq( associated.getElement(), (String) solrResults.get(0).getFieldValue(WikittySearchEngineSolr.SOLR_ID) );
} else {
- List<String> ids = new ArrayList<String>(solrResults.size());
- for (SolrDocument doc : solrResults) {
- String id = (String) doc.getFieldValue(WikittySearchEngineSolr.SOLR_ID);
- ids.add(id);
- }
- generatedRestriction = new In(associated.getElement(), ids);
+ List<String> ids = new ArrayList<String>(solrResults.size());
+ for (SolrDocument doc : solrResults) {
+ String id = (String) doc.getFieldValue(WikittySearchEngineSolr.SOLR_ID);
+ ids.add(id);
+ }
+ generatedRestriction = new In(associated.getElement(), ids);
}
Restriction parent = associated.getParentRestrictionDto();
And and;
if ( parent instanceof And ) {
- and = (And) parent;
- and.getRestrictions().add( generatedRestriction );
+ and = (And) parent;
+ and.getRestrictions().add( generatedRestriction );
} else {
- and = RestrictionHelper.and( Arrays.asList(new Restriction[]{ associated.getParentRestrictionDto(), generatedRestriction }) );
+ and = RestrictionHelper.and( Arrays.asList(new Restriction[]{ associated.getParentRestrictionDto(), generatedRestriction }) );
}
- return toSolr(and);
- }
+ return toSolr(and);
+ }
- private String not2solr(Not not) throws WikittyException {
- if (not.getRestriction() == null) {
- throw new WikittyException( "not.restriction" );
- }
- return "( *:* - " + toSolr(not.getRestriction()) + " )";
- }
+ private String not2solr(Not not) throws WikittyException {
+ if (not.getRestriction() == null) {
+ throw new WikittyException( "not.restriction" );
+ }
+ return "( *:* - " + toSolr(not.getRestriction()) + " )";
+ }
- private String and2solr(And and) throws WikittyException {
- if (and.getRestrictions() == null) {
- throw new WikittyException( "and.restrictions is null" );
- }
- if (and.getRestrictions().size() < 2) {
- throw new WikittyException( "AND is an operator that handle 2 operand at least");
- }
- boolean first = true;
- StringBuffer result = new StringBuffer();
- for (Restriction restriction : and.getRestrictions()) {
- if (first) {
- result.append("( ").append(toSolr(restriction));
- first = false;
- } else {
- result.append(" AND ").append(toSolr(restriction));
- }
- }
- return result.append(" )").toString();
- }
+ private String and2solr(And and) throws WikittyException {
+ if (and.getRestrictions() == null) {
+ throw new WikittyException( "and.restrictions is null" );
+ }
+ if (and.getRestrictions().size() < 2) {
+ throw new WikittyException( "AND is an operator that handle 2 operand at least");
+ }
+ boolean first = true;
+ StringBuffer result = new StringBuffer();
+ for (Restriction restriction : and.getRestrictions()) {
+ if (first) {
+ result.append("( ").append(toSolr(restriction));
+ first = false;
+ } else {
+ result.append(" AND ").append(toSolr(restriction));
+ }
+ }
+ return result.append(" )").toString();
+ }
- private String or2solr(Or or) throws WikittyException {
- if (or.getRestrictions() == null) {
- throw new WikittyException("or.restrictions is null");
- }
- if (or.getRestrictions().size() < 2) {
- throw new WikittyException("OR is an operator that handle 2 operand at least");
- }
- boolean first = true;
- StringBuffer result = new StringBuffer();
- for (Restriction restriction : or.getRestrictions()) {
- if (first) {
- result.append("( ");
- first = false;
- } else {
- result.append(" OR ");
- }
- result.append(toSolr(restriction));
- }
- return result.append(" )").toString();
- }
+ private String or2solr(Or or) throws WikittyException {
+ if (or.getRestrictions() == null) {
+ throw new WikittyException("or.restrictions is null");
+ }
+ if (or.getRestrictions().size() < 2) {
+ throw new WikittyException("OR is an operator that handle 2 operand at least");
+ }
+ boolean first = true;
+ StringBuffer result = new StringBuffer();
+ for (Restriction restriction : or.getRestrictions()) {
+ if (first) {
+ result.append("( ");
+ first = false;
+ } else {
+ result.append(" OR ");
+ }
+ result.append(toSolr(restriction));
+ }
+ return result.append(" )").toString();
+ }
- private String eq2solr(Equals eq) throws WikittyException {
- return element2solr(eq.getElement()) + ":" + value2solr(eq.getValue());
- }
+ private String eq2solr(Equals eq) throws WikittyException {
+ return element2solr(eq.getElement()) + ":" + value2solr(eq.getValue());
+ }
- private String neq2solr(NotEquals neq)
- throws WikittyException {
- return "-" + element2solr(neq.getElement()) + ":"
- + value2solr(neq.getValue());
- }
+ private String neq2solr(NotEquals neq)
+ throws WikittyException {
+ return "-" + element2solr(neq.getElement()) + ":"
+ + value2solr(neq.getValue());
+ }
- private String less2solr(Less less) throws WikittyException {
- return element2solr(less.getElement()) + ":{* TO "
- + value2solr(less.getValue()) + "}";
- }
+ private String less2solr(Less less) throws WikittyException {
+ return element2solr(less.getElement()) + ":{* TO "
+ + value2solr(less.getValue()) + "}";
+ }
- private String lessEq2solr(LessOrEqual lessEq)
- throws WikittyException {
- return element2solr(lessEq.getElement()) + ":[* TO "
- + value2solr(lessEq.getValue()) + "]";
- }
+ private String lessEq2solr(LessOrEqual lessEq)
+ throws WikittyException {
+ return element2solr(lessEq.getElement()) + ":[* TO "
+ + value2solr(lessEq.getValue()) + "]";
+ }
- private String great2solr(Greater great)
- throws WikittyException {
- return element2solr(great.getElement()) + ":{"
- + value2solr(great.getValue()) + " TO *}";
- }
+ private String great2solr(Greater great)
+ throws WikittyException {
+ return element2solr(great.getElement()) + ":{"
+ + value2solr(great.getValue()) + " TO *}";
+ }
- private String greatEq2solr(GreaterOrEqual greatEq)
- throws WikittyException {
- return element2solr(greatEq.getElement()) + ":["
- + value2solr(greatEq.getValue()) + " TO *]";
- }
+ private String greatEq2solr(GreaterOrEqual greatEq)
+ throws WikittyException {
+ return element2solr(greatEq.getElement()) + ":["
+ + value2solr(greatEq.getValue()) + " TO *]";
+ }
- private String between2solr(Between between)
- throws WikittyException {
- if (between.getElement() == null) {
- throw new WikittyException("contains.element");
- }
- if (between.getMin() == null) {
- throw new WikittyException("contains.min");
- }
- if (between.getMax() == null) {
- throw new WikittyException("contains.max");
- }
- return element2solr(between.getElement()) + ":["
- + value2solr(between.getMin()) + " TO "
- + value2solr(between.getMax()) + "]";
- }
+ private String between2solr(Between between)
+ throws WikittyException {
+ if (between.getElement() == null) {
+ throw new WikittyException("contains.element");
+ }
+ if (between.getMin() == null) {
+ throw new WikittyException("contains.min");
+ }
+ if (between.getMax() == null) {
+ throw new WikittyException("contains.max");
+ }
+ return element2solr(between.getElement()) + ":["
+ + value2solr(between.getMin()) + " TO "
+ + value2solr(between.getMax()) + "]";
+ }
- private String contains2solr(Contains contains)
- throws WikittyException {
- if (contains.getElement() == null) {
- throw new WikittyException("contains.element");
- }
- if (contains.getValue() == null) {
- throw new WikittyException("contains.values");
- }
- if (contains.getValue().size() < 1) {
- throw new WikittyException("CONTAINS is an operator that handle 1 operand at least");
- }
+ private String contains2solr(Contains contains)
+ throws WikittyException {
+ if (contains.getElement() == null) {
+ throw new WikittyException("contains.element");
+ }
+ if (contains.getValue() == null) {
+ throw new WikittyException("contains.values");
+ }
+ if (contains.getValue().size() < 1) {
+ throw new WikittyException("CONTAINS is an operator that handle 1 operand at least");
+ }
String operand = "";
- StringBuffer result = new StringBuffer();
+ StringBuffer result = new StringBuffer();
result.append("(");
- for (String value : contains.getValue()) {
+ for (String value : contains.getValue()) {
result.append(operand);
- result.append(element2solr(contains.getElement()))
- .append(":").append(value2solr(value));
+ result.append(element2solr(contains.getElement()))
+ .append(":").append(value2solr(value));
operand = " OR ";
- }
+ }
result.append(")");
- return result.toString();
- }
+ return result.toString();
+ }
- private String start2solr(StartsWith start)
- throws WikittyException {
- return element2solr(start.getElement()) + ":"
- + value2solr(start.getValue(), true, false);
- }
+ private String start2solr(StartsWith start)
+ throws WikittyException {
+ return element2solr(start.getElement()) + ":"
+ + value2solr(start.getValue(), true, false);
+ }
- private String end2solr(EndsWith end) {
- return element2solr(end.getElement()) + ":" + value2solr(end.getValue());
- }
+ private String end2solr(EndsWith end) {
+ return element2solr(end.getElement()) + ":" + value2solr(end.getValue());
+ }
- private String true2solr() {
- return "( *:* )";
- }
+ private String true2solr() {
+ return "( *:* )";
+ }
- private String false2solr() {
- return "( *:* - *:* )";
- }
+ private String false2solr() {
+ return "( *:* - *:* )";
+ }
private String keyword2solr(Keyword keyword) {
return value2solr(keyword.getValue());
}
- private String value2solr(String value) {
- return value2solr(value, false, false);
- }
+ private String value2solr(String value) {
+ return value2solr(value, false, false);
+ }
- private String value2solr(String value, boolean starOnEnd,
- boolean revert) {
- String result;
- if (value != null) {
- if (value.equals("*")) {
- return "*";
- }
+ private String value2solr(String value, boolean starOnEnd,
+ boolean revert) {
+ String result;
+ if (value != null) {
+ if (value.equals("*")) {
+ return "*";
+ }
- if (revert) {
- result = Restriction2Solr.escapeValue(reverse(value));
- } else {
- result = Restriction2Solr.escapeValue(value);
- }
- } else {
- result = "";
- }
- if (starOnEnd) {
- result += "*";
- }
- if (result.contains(" ")) {
- result = "\"" + result + "\"";
- }
- return result;
- }
-
- private String element2solr(Element element) throws WikittyException {
- String result = element.getName();
- if(Element.ELT_EXTENSION.equals(result)) {
- result = WikittySearchEngineSolr.SOLR_EXTENSIONS;
- } else if(Element.ELT_ID.equals(result)) {
- result = WikittySearchEngineSolr.SOLR_ID;
+ if (revert) {
+ result = Restriction2Solr.escapeValue(reverse(value));
+ } else {
+ result = Restriction2Solr.escapeValue(value);
+ }
} else {
- result = element.getName();
+ result = "";
}
+ if (starOnEnd) {
+ result += "*";
+ }
+ if (result.contains(" ")) {
+ result = "\"" + result + "\"";
+ }
+ return result;
+ }
+
+ private String element2solr(Element element) throws WikittyException {
+ String result = element.getName();
result = fieldModifer.convertToSolr(result);
return result;
- }
+ }
- private static String escapeValue(String value) {
- final String LUCENE_REPLACE_PATTERN = "\\+" + "|-" + "|&&" + "|\\|"
- + "|!" + "|\\(|\\)" + "|\\[|\\]" + "|\\{|\\}" + "|\"" + "|:";
- return value.replaceAll(LUCENE_REPLACE_PATTERN, "\\\\$0");
- }
+ private static String escapeValue(String value) {
+ final String LUCENE_REPLACE_PATTERN = "\\+" + "|-" + "|&&" + "|\\|"
+ + "|!" + "|\\(|\\)" + "|\\[|\\]" + "|\\{|\\}" + "|\"" + "|:";
+ return value.replaceAll(LUCENE_REPLACE_PATTERN, "\\\\$0");
+ }
- private String reverse(String source) {
- int i, len = source.length();
- StringBuffer dest = new StringBuffer(len);
+ private String reverse(String source) {
+ int i, len = source.length();
+ StringBuffer dest = new StringBuffer(len);
- for (i = (len - 1); i >= 0; i--) {
- dest.append(source.charAt(i));
+ for (i = (len - 1); i >= 0; i--) {
+ dest.append(source.charAt(i));
}
- return dest.toString();
- }
+ return dest.toString();
+ }
}
-
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2009-12-24 13:33:17 UTC (rev 342)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2010-01-05 09:32:25 UTC (rev 343)
@@ -1,16 +1,16 @@
/* *##%
* 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/>.
*##%*/
@@ -58,6 +58,7 @@
import org.sharengo.wikitty.WikittyExtensionStorage;
import org.sharengo.wikitty.WikittySearchEngine;
import org.sharengo.wikitty.WikittyTransaction;
+import org.sharengo.wikitty.search.Element;
import org.sharengo.wikitty.search.Search;
/**
@@ -70,6 +71,7 @@
*/
public class WikittySearchEngineSolr implements WikittySearchEngine {
+
/** to use log facility, just put in your code: log.info(\"...\"); */
static private Log log = LogFactory.getLog(WikittySearchEngineSolr.class);
@@ -111,7 +113,13 @@
}
}
- static protected class TypeFieldModifer implements Restriction2Solr.FieldModifier {
+ /** use to permit client to modify fieldname during query generation */
+ static public interface FieldModifier {
+ public String convertToSolr(String fieldname);
+ public String convertToField(String solrName);
+ }
+
+ static protected class TypeFieldModifer implements FieldModifier {
protected WikittyExtensionStorage extensionStorage;
public TypeFieldModifer(WikittyExtensionStorage extensionStorage) {
this.extensionStorage = extensionStorage;
@@ -121,39 +129,42 @@
String result = fqfieldname;
String[] searchField = fqfieldname.split("\\.");
- if (searchField.length == 2) {
+ if (Element.ELT_EXTENSION.equals(fqfieldname)) {
+ result = SOLR_EXTENSIONS;
+
+ } else if (Element.ELT_ID.equals(fqfieldname)) {
+ result = SOLR_ID;
+
+ } else if (searchField.length >= 2) {
String extName = searchField[0];
String fieldName = searchField[1];
- String version = extensionStorage.getLastVersion(extName);
- if (version != null) { // not valid extension is version == null
- WikittyExtension ext = extensionStorage.restore(
- WikittyExtension.computeId(extName, version));
- FieldType type = ext.getFieldType(fieldName.replace(" ", "_"));
- if (type != null) { // type can be null if extension version differ
- result = WikittySearchEngineSolr.getSolrFieldName(
- fqfieldname, type);
+ if (Criteria.ALL_EXTENSIONS.equals(extName)) {
+ fqfieldname = SOLR_ALL_EXTENSIONS + "." + fieldName;
+ }
+
+ if (searchField.length >= 3) {
+ String fieldNameType = searchField[2];
+
+ if (Element.ElementType.TEXT.name().equals(fieldNameType)) {
+ result = extName + "." + fieldName + "_s_t";
} else {
- log.debug(String.format(
- "Field '%s' could not be found in '%s'",
- fqfieldname, extName));
+ TYPE type = FieldType.TYPE.valueOf(fieldNameType);
+ result = WikittySearchEngineSolr.getSolrFieldName(fqfieldname, type);
}
- } else {
- log.warn("No version for extension " + extName);
+ return result;
}
- }
- if (searchField.length == 3) {
- String extName = searchField[0];
- String fieldName = searchField[1];
- String fieldType = searchField[2];
-
- if(Criteria.ALL_EXTENSIONS.equals(extName)) {
- TYPE type = FieldType.TYPE.valueOf(fieldType);
- String solrFieldName = SOLR_ALL_EXTENSIONS + "." + fieldName;
- result = WikittySearchEngineSolr.getSolrFieldName(solrFieldName, type);
- } else {
- log.warn("All extension not found " + extName);
+ // Search type of field in extension
+ String version = extensionStorage.getLastVersion(extName);
+ if (version != null) { // not valid extension is version == null
+ WikittyExtension ext = extensionStorage.restore(extName, version);
+ FieldType fieldType = ext.getFieldType(fieldName);
+ if (fieldType != null) { // type can be null if extension version differ
+ TYPE type = fieldType.getType();
+ result = WikittySearchEngineSolr.getSolrFieldName(fqfieldname, type);
+ return result;
+ }
}
}
@@ -161,10 +172,12 @@
}
public String convertToField(String solrName) {
- String fieldname = solrName.replaceAll("(_b$)|(_dt$)|(_t$)|(_l$)", "");
- return fieldname;
+ String fieldName = solrName.replaceAll("(_b$)|(_dt$)|(_s$)|(_s_t$)|(_d$)", "");
+ if(SOLR_EXTENSIONS.equals(fieldName)) {
+ fieldName = Element.ELT_EXTENSION;
+ }
+ return fieldName;
}
-
}
protected static class ReindexChildTreeNode extends HashSet<String> {
@@ -230,7 +243,7 @@
protected TypeFieldModifer fieldModifier;
public WikittySearchEngineSolr(WikittyExtensionStorage extensionStorage) {
- this(extensionStorage, null);
+ this(extensionStorage, null);
}
public WikittySearchEngineSolr(WikittyExtensionStorage extensionStorage, String dataDir) {
@@ -280,7 +293,7 @@
Collection<Wikitty> wikitties) {
List<Command> result = new ArrayList<Command>(wikitties.size());
ReindexChildTreeNode reindexChildTreeNode = ReindexChildTreeNode.getReindexChildTreeNode(transaction);
-
+
for (Wikitty w : wikitties) {
if(w.hasExtension(TreeNode.EXT_TREENODE)) {
@@ -294,12 +307,12 @@
SolrDocument treeNodeDoc = findById(treeNodeId);
if(treeNodeDoc != null) {
Collection oldChildren = treeNodeDoc.
- getFieldValues(TreeNode.FQ_FIELD_CHILDREN + "_t");
+ getFieldValues(TreeNode.FQ_FIELD_CHILDREN + "_s");
if(oldChildren != null) {
reindexChildTreeNode.addAll(oldChildren);
}
}
-
+
}
result.add(new CommandSolr(w));
@@ -330,7 +343,7 @@
} catch (Exception eee) {
throw new WikittyException(eee);
}
-
+
return result;
}
@@ -360,7 +373,7 @@
solrServer.add(doc);
}
solrServer.commit();
-
+
// no specific result needed
UpdateResponse result = new UpdateResponse();
return result;
@@ -380,15 +393,15 @@
int firstIndex = criteria.getFirstIndex();
int endIndex = criteria.getEndIndex();
- query.setStart(firstIndex);
- int nbRows;
- if (endIndex == -1) {
- // WARNING It is necessary to substract 'start' otherwise, there is a capacity overlow in solR
- nbRows = Integer.MAX_VALUE - firstIndex;
- } else {
- nbRows = endIndex - firstIndex + 1;
- }
- query.setRows(nbRows);
+ query.setStart(firstIndex);
+ int nbRows;
+ if (endIndex == -1) {
+ // WARNING It is necessary to substract 'start' otherwise, there is a capacity overlow in solR
+ nbRows = Integer.MAX_VALUE - firstIndex;
+ } else {
+ nbRows = endIndex - firstIndex + 1;
+ }
+ query.setRows(nbRows);
// Add sorting
List<String> sortAscending = criteria.getSortAscending();
@@ -398,7 +411,7 @@
query.setSortField(tranform, SolrQuery.ORDER.asc);
}
}
-
+
List<String> sortDescending = criteria.getSortDescending();
if(sortDescending != null) {
for (String sort : sortDescending) {
@@ -415,11 +428,11 @@
// use to map query string to criteria facet name
Map<String, String> facetQueryToName = new HashMap<String, String>();
- if ((facetField != null && !facetField.isEmpty())
+ if ((facetField != null && !facetField.isEmpty())
|| (facetCriteria != null && !facetCriteria.isEmpty())) {
- query.setFacet(true);
- query.setFacetMinCount(1);
- // query.setFacetLimit(8); // no limit actualy
+ query.setFacet(true);
+ query.setFacetMinCount(1);
+ // query.setFacetLimit(8); // no limit actualy
// field facetisation
if (facetField != null) {
@@ -438,12 +451,12 @@
query.addFacetQuery(queryFacet);
}
}
- }
+ }
- QueryResponse resp = solrServer.query(query);
- SolrDocumentList solrResults = resp.getResults();
+ QueryResponse resp = solrServer.query(query);
+ SolrDocumentList solrResults = resp.getResults();
- Map<String, List<FacetTopic>> facets = new HashMap<String, List<FacetTopic>>();
+ Map<String, List<FacetTopic>> facets = new HashMap<String, List<FacetTopic>>();
if (facetField != null && !facetField.isEmpty()) {
for (FacetField facet : resp.getFacetFields()) {
String facetName = fieldModifier.convertToField(facet.getName());
@@ -476,20 +489,20 @@
}
}
- List<String> ids = new ArrayList<String>(solrResults.size());
- for (SolrDocument doc : solrResults) {
- String id = (String) doc.getFieldValue(SOLR_ID);
- ids.add(id);
- }
+ List<String> ids = new ArrayList<String>(solrResults.size());
+ for (SolrDocument doc : solrResults) {
+ String id = (String) doc.getFieldValue(SOLR_ID);
+ ids.add(id);
+ }
int numFound = (int)resp.getResults().getNumFound();
PagedResult<String> result = new PagedResult<String>(
firstIndex, numFound, queryString, facets, ids);
- return result;
- } catch (SolrServerException e) {
- throw new WikittyException(e);
- }
+ return result;
+ } catch (SolrServerException e) {
+ throw new WikittyException(e);
+ }
}
public Integer findNodeCount(Wikitty w) {
@@ -510,16 +523,17 @@
return numFound;
}
+
public Map<String, Integer> findAllChildrenCount(Wikitty w) {
String wikittyId = w.getId();
-
+
String parent = w.getFieldAsWikitty(TreeNode.EXT_TREENODE, TreeNode.FIELD_PARENT);
if(parent == null) {
parent = TREENODE_ROOT;
} else {
parent = TREENODE_PREFIX + parent;
}
-
+
// Find count with facet, if the node not contain recurcively content,
// the node not found with facet
Criteria criteria = Search.query().eq(parent, wikittyId).criteria()
@@ -565,42 +579,44 @@
SolrInputDocument doc = new SolrInputDocument();
String id = w.getId();
- doc.addField(SOLR_ID,id);
+ doc.addField(SOLR_ID, id);
for (String name : w.getExtensionNames()) {
doc.addField(SOLR_EXTENSIONS, name);
}
for (String fqfieldName : w.fieldNames()) {
- FieldType type = w.getFieldType(fqfieldName);
- // do not index wikitty field reference
-// if (type.getType() == FieldType.TYPE.WIKITTY) {
-// continue;
-// }
- String solrFqFieldName = getSolrFieldName(fqfieldName, type );
- String[] extAndName = solrFqFieldName.split("\\.");
- String solrFieldName = SOLR_ALL_EXTENSIONS + "." + extAndName[1];
- if (type.isCollection()) {
- Collection collection = (Collection) w.getFqField(fqfieldName);
- if (collection != null) {
- for (Object objectValue : collection) {
- if (objectValue != null) {
- // String value = WikittyUtil.toString(type, objectValue);
- Object value = objectValue;
- doc.addField(solrFqFieldName, value);
- doc.addField(solrFieldName, value);
- }
- }
+ FieldType fieldType = w.getFieldType(fqfieldName);
+ TYPE type = fieldType.getType();
+ String solrFqFieldName = getSolrFieldName(fqfieldName, type);
+
+ String[] solrFieldName = solrFqFieldName.split("\\.");
+ String solrAllFieldName = SOLR_ALL_EXTENSIONS + "." + solrFieldName[1];
+
+ Object objectValue = w.getFqField(fqfieldName);
+ if(objectValue != null) {
+ if (fieldType.isCollection()) {
+ Collection collectionValue = (Collection) objectValue;
+ for (Object itemValue : collectionValue) {
+ if (itemValue != null) {
+ doc.addField(solrFqFieldName, itemValue);
+ doc.addField(solrAllFieldName, itemValue);
+
+ log.debug("index field " + solrFqFieldName + " with value '" + itemValue + "'");
+ }
+ }
+ } else {
+ doc.addField(solrFqFieldName, objectValue);
+ doc.addField(solrAllFieldName, objectValue);
+
+ // Store as text field
+ if(type == TYPE.STRING) {
+ doc.addField(solrFqFieldName + "_t", objectValue);
+ doc.addField(solrAllFieldName + "_t", objectValue);
+ }
+
+ log.debug("index field " + solrFqFieldName + " with value '" + objectValue + "'");
}
- } else {
- Object objectValue = w.getFqField(fqfieldName);
- if (objectValue != null) {
- // String value = WikittyUtil.toString(type, objectValue);
- Object value = objectValue;
- log.debug("index field " + solrFqFieldName + " with value '" + value + "'");
- doc.addField(solrFqFieldName, value);
- doc.addField(solrFieldName, value);
- }
}
}
return doc;
@@ -615,11 +631,11 @@
doc.setField(TREENODE_CHILD, childId);
// Find all node contain child
- SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TreeNode.FQ_FIELD_CHILDREN + "_t:" + childId);
+ SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TreeNode.FQ_FIELD_CHILDREN + "_s:" + childId);
QueryResponse response = solrServer.query(query);
SolrDocumentList updateDocs = response.getResults();
- List<String> paths = new ArrayList<String>();
+ Map<String, String> paths = new HashMap<String, String>();
for (Iterator<SolrDocument> iterator = updateDocs.iterator();
iterator.hasNext();) {
SolrDocument solrDocument = iterator.next();
@@ -631,70 +647,23 @@
String childParent = treeNodeId;
String parent = parentMap.get(childParent);
while (parent != null) {
- if(!paths.contains(parent)) {
+ String parentPath = paths.get(childParent);
+ if(parentPath == null) {
doc.addField(TREENODE_PREFIX + parent, childParent);
- paths.add(parent);
+ paths.put(childParent, parent);
}
childParent = parent;
parent = parentMap.get(childParent);
}
- doc.addField(TREENODE_ROOT, childParent);
- }
-
- return doc;
- }
- /**
- * Update all document depend a deleted node in tree
- */
- public void updateTreeNodeDocument(Map<String, SolrInputDocument> documents, String nodeId) throws SolrServerException {
- SolrQuery query = new SolrQuery(SOLR_QUERY_PARSER + TREENODE_PREFIX + nodeId + ":*");
- QueryResponse response = solrServer.query(query);
- SolrDocumentList updateDocs = response.getResults();
-
- for (Iterator<SolrDocument> iterator = updateDocs.iterator(); iterator.hasNext();) {
- SolrDocument solrDocument = iterator.next();
-
- String documentId = (String) solrDocument.getFieldValue(SOLR_ID);
- SolrInputDocument alreadyDone = documents.get(documentId);
-
- if (alreadyDone == null) {
- SolrInputDocument doc = updateTreeNodeDocument(solrDocument, nodeId);
- documents.put(documentId, doc);
- } else {
- // Copy other field after node
- String parent = (String) alreadyDone.getFieldValue(TREENODE_PREFIX + nodeId);
- if (parent != null) {
- // Recreate doc a sub node is deleted
- SolrInputDocument doc = updateTreeNodeDocument(solrDocument, nodeId);
- documents.put(documentId, doc);
- }
+ String parentPath = paths.get(childParent);
+ if(parentPath == null) {
+ doc.addField(TREENODE_ROOT, childParent);
+ paths.put(childParent, TREENODE_ROOT);
}
}
- }
- /**
- * Re-create a new document without node deleted, from age document
- */
- public SolrInputDocument updateTreeNodeDocument(SolrDocument solrDocument, String nodeId) {
- String documentId = (String) solrDocument.getFieldValue(SOLR_ID);
-
- SolrInputDocument doc = new SolrInputDocument();
- doc.setField(SOLR_ID, documentId);
- doc.setField(TREENODE_CHILD, solrDocument.getFieldValue(TREENODE_CHILD));
-
- // Copy other field after node
- String parent = (String) solrDocument.getFieldValue(TREENODE_PREFIX + nodeId);
- if (parent != null) {
- String childParent = (String) solrDocument.getFieldValue(parent);
- while (childParent != null) {
- doc.setField(parent, childParent);
- parent = TREENODE_PREFIX + childParent;
- childParent = (String) solrDocument.getFieldValue(parent);
- }
- }
-
return doc;
}
@@ -719,12 +688,6 @@
return null;
}
- static public String getSolrFieldName(String fqfieldName, FieldType fieldType) {
- TYPE type = fieldType.getType();
- String result = getSolrFieldName(fqfieldName, type);
- return result;
- }
-
public static String getSolrFieldName(String fqfieldName, TYPE type) {
switch (type) {
case BOOLEAN:
@@ -732,11 +695,11 @@
case DATE:
return fqfieldName + "_dt";
case STRING:
- return fqfieldName + "_t";
+ return fqfieldName + "_s";
case NUMERIC:
return fqfieldName + "_d";
default:
return fqfieldName;
}
}
-}
+}
\ No newline at end of file
1
0
r342 - in wikengo_core-wikitty: wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr
by kmorin@users.nuiton.org 24 Dec '09
by kmorin@users.nuiton.org 24 Dec '09
24 Dec '09
Author: kmorin
Date: 2009-12-24 14:33:17 +0100 (Thu, 24 Dec 2009)
New Revision: 342
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyProxy.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittySearchEngine.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyService.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyStorage.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
Log:
- add index synchronisation method (to fix)
- add restore node method
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -26,20 +26,8 @@
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.*;
import java.util.Map.Entry;
-import java.util.Set;
-import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@@ -341,21 +329,41 @@
return tree;
}
+ public Map.Entry<TreeNode, Integer> restoreNode(String wikittyId) {
+ Wikitty w = restore(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 ));
+ }
+
+ TreeNode node = new TreeNodeImpl(w);
+ Integer count = getSearchEngine().findNodeCount(w);
+
+ HashMap.SimpleEntry<TreeNode, Integer> result =
+ new AbstractMap.SimpleEntry<TreeNode, Integer>(node, count);
+ return result;
+ }
+
public Map<TreeNode, Integer> restoreChildren(String wikittyId) {
Wikitty w = restore(wikittyId);
if(w == null) {
return null;
}
- if ( !w.hasExtension(TreeNode.EXT_TREENODE) ) {
- throw new WikittyException(String.format(
+ 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 = getSearchEngine().findAllChildren(w);
+ Map<String, Integer> search = getSearchEngine().findAllChildrenCount(w);
Set<Entry<String, Integer>> children = search.entrySet();
for (Entry<String, Integer> child : children) {
Integer count = child.getValue();
@@ -374,6 +382,49 @@
throw new UnsupportedOperationException("Not supported yet.");
}
+ public UpdateResponse syncEngin() {
+ final int numberForCommit = 1000;
+ final WikittySearchEngine searchEngine = getSearchEngine();
+ final UpdateResponse result = new UpdateResponse();
+ final List<Wikitty> wikitties = new ArrayList<Wikitty>(numberForCommit);
+
+ searchEngine.clear();
+ getWikittyStorage().scanWikitties(new WikittyStorage.Scanner() {
+
+ WikittyTransaction transaction = new WikittyTransaction();
+ int count = 0;
+
+ @Override
+ public void scan(Wikitty wikitty) {
+ Date deleteDate = wikitty.getDeleteDate();
+ if(deleteDate == null) {
+ count ++;
+ wikitties.add(wikitty);
+
+ if(count == numberForCommit) {
+ // Reindex
+ List<WikittySearchEngine.Command> commands = searchEngine.prepare(transaction, wikitties);
+ UpdateResponse response = searchEngine.commit(transaction, commands);
+ result.add(response);
+
+ // Reinit
+ count = 0;
+ wikitties.clear();
+ transaction = new WikittyTransaction();
+ }
+ }
+ }
+ });
+
+ // Last wikitties
+ WikittyTransaction transaction = new WikittyTransaction();
+ List<WikittySearchEngine.Command> commands = searchEngine.prepare(transaction, wikitties);
+ UpdateResponse response = searchEngine.commit(transaction, commands);
+ result.add(response);
+
+ return result;
+ }
+
/**
* Class used for import process, this class retain numberForCommit object
* before to send it to storage.
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyProxy.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyProxy.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyProxy.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -17,15 +17,9 @@
package org.sharengo.wikitty;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.Map.Entry;
-import java.util.Set;
+
import org.sharengo.wikitty.search.Element;
import org.sharengo.wikitty.search.Search;
@@ -271,8 +265,33 @@
Tree result = wikittyService.restoreTree(wikittyId);
return result;
}
+ public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode(Class<E> clazz, String wikittyId) {
+ Entry<E, Integer> result = restoreNode(clazz, wikittyId, false);
+ return result;
+ }
+ public <E extends BusinessEntity> Map.Entry<E, Integer> restoreNode(Class<E> clazz, String wikittyId, boolean checkExtension) {
+ Map.Entry<TreeNode, Integer> node = wikittyService.restoreNode(wikittyId);
+ if(node == null) {
+ return null;
+ }
+
+ E bean = restore(clazz, wikittyId, checkExtension);
+ if(bean == null) {
+ return null;
+ }
+
+ Map.Entry<E, Integer> result =
+ new HashMap.SimpleEntry<E, Integer>(bean, node.getValue());
+ return result;
+ }
+
public <E extends BusinessEntity> Map<E, Integer> restoreChildren(Class<E> clazz, String wikittyId) {
+ Map<E, Integer> result = restoreChildren(clazz, wikittyId, false);
+ return result;
+ }
+
+ public <E extends BusinessEntity> Map<E, Integer> restoreChildren(Class<E> clazz, String wikittyId, boolean checkExtension) {
Map<TreeNode, Integer> result = wikittyService.restoreChildren(wikittyId);
if(result == null) {
return null;
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittySearchEngine.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittySearchEngine.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittySearchEngine.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -75,12 +75,19 @@
public PagedResult<String> findAllByCriteria(Criteria criteria);
+ /**
+ * Find count of child for a node
+ * @param w
+ * @return
+ */
+ public Integer findNodeCount(Wikitty w);
+
/**
* Find all children ids with count for a node wikitty.
* @param w
* @return
*/
- public Map<String, Integer> findAllChildren(Wikitty w);
+ public Map<String, Integer> findAllChildrenCount(Wikitty w);
/**
* Command update
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyService.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyService.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyService.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -17,7 +17,6 @@
package org.sharengo.wikitty;
-import javax.swing.tree.TreeNode;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -185,13 +184,21 @@
Tree restoreTree(String wikittyId);
/**
+ * Retrieve wikitty node with count. Wikitty reference by wikittyId MUST
+ * include the 'Node' extension
+ * @param wikittyId
+ * @return
+ */
+ Map.Entry<TreeNode, Integer> restoreNode(String wikittyId);
+
+ /**
* Retrieve all wikitties children with count (no recursively) of an other one
* Wikitty reference by wikittyId MUST include the 'Node' extension
*
* @param wikittyId
* @return
*/
- Map<org.sharengo.wikitty.TreeNode, Integer> restoreChildren(String wikittyId);
+ Map<TreeNode, Integer> restoreChildren(String wikittyId);
/*
@@ -203,6 +210,17 @@
*/
Wikitty restoreVersion(String wikittyId, String version);
+ /*
+ * admin
+ */
+
+ /**
+ * Synchronise search engine with wikitty strorage engine, i.e. clear and
+ * reindex all wikitties.
+ * @return
+ */
+ UpdateResponse syncEngin();
+
/*
* Import / Export
*/
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyServiceInMemory.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -143,6 +143,16 @@
return result;
}
+ /**
+ * Scan all wikitties with specific scanner, even if the wikitty is deleted
+ *
+ * @param scanner scanner
+ */
+ @Override
+ public void scanWikitties(Scanner scanner) {
+ throw new UnsupportedOperationException("Not supported yet.");
+ }
+
class CommandInMemory implements Command {
/** if true command is for storage, if false for deletion */
boolean toStore;
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyStorage.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyStorage.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyStorage.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -93,4 +93,17 @@
*/
static public interface Command {}
+ /**
+ * Scan all wikitties with specific scanner, even if the wikitty is deleted
+ * @param scanner scanner
+ */
+ void scanWikitties(Scanner scanner);
+
+ /**
+ * Call each time wikitty is scan
+ */
+ public static interface Scanner {
+ void scan(Wikitty wikitty);
+ }
+
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyStorageJDBC.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -45,6 +45,7 @@
* JDBC driver property name
*/
static protected String driver = "jdbc.con.driver";
+
/**
* wikitty_admin table creation query property name
*/
@@ -54,6 +55,10 @@
*/
static protected String wikittyDataCreationQ = "jdbc.queries.creation.wikitty.data";
/**
+ * basic selection without where clause query property name
+ */
+ static protected String selectionQ = "jdbc.queries.select";
+ /**
* basic selection with where clause query property name
*/
static protected String whereSelectionQ = "jdbc.queries.select.where";
@@ -679,4 +684,32 @@
return result;
}
+
+ @Override
+ public void scanWikitties(Scanner scanner) {
+ Connection con = null;
+ try {
+ con = getConnection();
+ Statement statement = con.createStatement();
+ //select the data with the id "id" in the admin table
+ ResultSet adminResultSet = statement.executeQuery(
+ String.format(conf.getProperty(selectionQ), "*",
+ adminTable));
+ adminResultSet.beforeFirst();
+ while(adminResultSet.next()) {
+ String id = adminResultSet.getString(COL_ID);
+ String version = adminResultSet.getString(COL_VERSION);
+ String extensionList = adminResultSet.getString(COL_EXTENSION);
+ //select the data with the id "id" in the data table
+ ResultSet dataResultSet = statement.executeQuery(
+ String.format(conf.getProperty(whereSelectionQ), "*",
+ dataTable, COL_ID, "'" + id + "'"));
+ Wikitty result = constructWikitty(id, version, extensionList,
+ dataResultSet);
+ scanner.scan(result);
+ }
+ } catch (Exception eee) {
+ throw new WikittyException("Can't restore wikitties", eee);
+ }
+ }
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2009-12-23 15:32:17 UTC (rev 341)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/java/org/sharengo/wikitty/solr/WikittySearchEngineSolr.java 2009-12-24 13:33:17 UTC (rev 342)
@@ -492,8 +492,26 @@
}
}
- public Map<String, Integer> findAllChildren(Wikitty w) {
+ public Integer findNodeCount(Wikitty w) {
String wikittyId = w.getId();
+
+ String parent = w.getFieldAsWikitty(TreeNode.EXT_TREENODE, TreeNode.FIELD_PARENT);
+ if(parent == null) {
+ parent = TREENODE_ROOT;
+ } else {
+ parent = TREENODE_PREFIX + parent;
+ }
+
+ Criteria criteria = Search.query().eq(parent, wikittyId).criteria()
+ .setFirstIndex(0).setEndIndex(0);
+ PagedResult<String> search = findAllByCriteria(criteria);
+
+ int numFound = search.getNumFound();
+ return numFound;
+ }
+
+ public Map<String, Integer> findAllChildrenCount(Wikitty w) {
+ String wikittyId = w.getId();
String parent = w.getFieldAsWikitty(TreeNode.EXT_TREENODE, TreeNode.FIELD_PARENT);
if(parent == null) {
1
0
r341 - wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty
by kmorin@users.nuiton.org 23 Dec '09
by kmorin@users.nuiton.org 23 Dec '09
23 Dec '09
Author: kmorin
Date: 2009-12-23 16:32:17 +0100 (Wed, 23 Dec 2009)
New Revision: 341
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
Log:
- correction in the export (transform < and & into <s; and &)
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-11 15:46:53 UTC (rev 340)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-23 15:32:17 UTC (rev 341)
@@ -613,10 +613,11 @@
extensionList += "," + id;
if (!extDone.contains(id)) {
extDone.add(id);
- result.write(" <extension name='" + ext.getName() + "' version='" + ext.getVersion() + "' requires='" + ext.getRequires() + "'>\n");
+ result.write(" <extension name='" + ext.getName() + "' version='" + ext.getVersion() + "'"
+ + (ext.getRequires() != null ? " requires='" + ext.getRequires() + "'" : "") + ">\n");
for (String fieldName : ext.getFieldNames()) {
String def = ext.getFieldType(fieldName).toDefinition(fieldName);
- result.write(" <field>" + def + "</field>\n");
+ result.write(" <field>" + def.replace("&", "&").replace("<", "<") + "</field>\n");
}
result.write(" </extension>\n");
}
@@ -629,11 +630,11 @@
for (String fieldName : w.fieldNames()) {
FieldType type = w.getFieldType(fieldName);
if (type.isCollection()) {
- for (Object o : (List) w.getFqField(fieldName)) {
- result.write(" <" + fieldName + ">" + WikittyUtil.toString(type, o) + "</" + fieldName + ">\n");
+ for (Object o : (Set) w.getFqField(fieldName)) {
+ result.write(" <" + fieldName + ">" + WikittyUtil.toString(type, o).replace("&", "&").replace("<", "<") + "</" + fieldName + ">\n");
}
} else {
- result.write(" <" + fieldName + ">" + WikittyUtil.toString(type, w.getFqField(fieldName)) + "</" + fieldName + ">\n");
+ result.write(" <" + fieldName + ">" + WikittyUtil.toString(type, w.getFqField(fieldName)).replace("&", "&").replace("<", "<") + "</" + fieldName + ">\n");
}
}
result.write(" </object>\n");
1
0
r340 - in wikengo_core-wikitty: wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc wikengo_core-wikitty-solr-impl/src/main/resources
by kmorin@users.nuiton.org 11 Dec '09
by kmorin@users.nuiton.org 11 Dec '09
11 Dec '09
Author: kmorin
Date: 2009-12-11 16:46:53 +0100 (Fri, 11 Dec 2009)
New Revision: 340
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml
Log:
- changed the id type into string instead of text (otherwise it finds several times the same objects)
- improved the field names with spaces
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-10 17:14:14 UTC (rev 339)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-11 15:46:53 UTC (rev 340)
@@ -69,7 +69,7 @@
if (name == null) {
throw new IllegalArgumentException("Name must not be null");
}
- this.name = name;
+ this.name = name.replace(" ", FieldType.WORD_SEPARATOR);
}
public WikittyExtension(String name, String version,
@@ -80,11 +80,15 @@
if (version == null) {
throw new IllegalArgumentException("Version must not be null");
}
- this.name = name;
+ this.name = name.replace(" ", FieldType.WORD_SEPARATOR);
this.version = version;
this.requires = requires;
if (fields != null) {
- this.fields = fields;
+ this.fields.clear();
+ LinkedHashMap<String, FieldType> corretcFields = new LinkedHashMap<String, FieldType>();
+ for (Map.Entry<String, FieldType> fieldEntry : fields.entrySet()) {
+ this.fields.put(fieldEntry.getKey().replace(" ", FieldType.WORD_SEPARATOR), fieldEntry.getValue());
+ }
}
}
@@ -101,7 +105,7 @@
static public String computeName(String id) {
int i = id.lastIndexOf("[");
- String result = id.substring(0, i).replace(FieldType.WORD_SEPARATOR, " ");
+ String result = id.substring(0, i);
return result;
}
@@ -118,7 +122,7 @@
}
public String getName() {
- return name.replace(FieldType.WORD_SEPARATOR, " ");
+ return name;
}
public String getVersion() {
@@ -138,16 +142,19 @@
}
public FieldType getFieldType(String fieldName) {
- return fields.get(fieldName);
+ return fields.get(fieldName.replace(" ", FieldType.WORD_SEPARATOR));
}
public List<String> getFieldNames() {
- List<String> result = new ArrayList<String>(fields.keySet());
+ List<String> result = new ArrayList<String>();
+ for(String fieldName : fields.keySet()) {
+ result.add(fieldName);
+ }
return result;
}
public void addField(String fieldName, FieldType type) {
- fields.put(fieldName, type);
+ fields.put(fieldName.replace(" ", FieldType.WORD_SEPARATOR), type);
}
public void addTagValue(String tag, String value) {
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-10 17:14:14 UTC (rev 339)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-11 15:46:53 UTC (rev 340)
@@ -171,7 +171,7 @@
for (int i = 0 ; i < ext.getFieldNames().size() ; i++) {
FieldType type = ext.getFieldType(ext.getFieldNames().get(i));
batch.append(String.format(conf.getProperty(dataInsertQ),
- ext.getId(), ext.getFieldNames().get(i).replace(" ", FieldType.WORD_SEPARATOR),
+ ext.getId(), ext.getFieldNames().get(i),
type.toDefinition(ext.getFieldNames().get(i)), i));
}
} else {
Modified: wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml 2009-12-10 17:14:14 UTC (rev 339)
+++ wikengo_core-wikitty/wikengo_core-wikitty-solr-impl/src/main/resources/schema.xml 2009-12-11 15:46:53 UTC (rev 340)
@@ -279,8 +279,8 @@
<fields>
- <field name="id" type="text_fr" indexed="true" stored="true" required="true" />
- <field name="extensions" type="text_fr" indexed="true" stored="false" multiValued="true"/>
+ <field name="id" type="string" indexed="true" stored="true" required="true" />
+ <field name="extensions" type="string" indexed="true" stored="false" multiValued="true"/>
<!-- catchall field, containing all other searchable text fields (implemented
via copyField further on in this schema -->
1
0
r339 - in wikengo_core-wikitty: wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc wikengo_core-wikitty-jdbc-impl/src/test/resources
by kmorin@users.nuiton.org 10 Dec '09
by kmorin@users.nuiton.org 10 Dec '09
10 Dec '09
Author: kmorin
Date: 2009-12-10 18:14:14 +0100 (Thu, 10 Dec 2009)
New Revision: 339
Modified:
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java
wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java
wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties
Log:
- add tag value to the wikittyExtension
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/AbstractWikittyService.java 2009-12-10 17:14:14 UTC (rev 339)
@@ -509,6 +509,7 @@
String extName = xpp.getAttributeValue(null, "name");
String version = xpp.getAttributeValue(null, "version");
String requires = xpp.getAttributeValue(null, "requires");
+ String tagValue = xpp.getAttributeValue(null, "tagValue");
ext = new WikittyExtension(extName, version, requires, new LinkedHashMap<String, FieldType>());
} else if ("object".equals(name)) {
String id = xpp.getAttributeValue(null, "id");
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyExtension.java 2009-12-10 17:14:14 UTC (rev 339)
@@ -19,10 +19,7 @@
import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
+import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -50,6 +47,10 @@
* name of other extension needed to put this extension to object
*/
protected String requires;
+ /**
+ * tag value for this extension
+ */
+ Map<String, String> tagValues = new HashMap<String, String>();
/**
* use to know version objet, when you change field number, type or other
@@ -70,7 +71,7 @@
}
this.name = name;
}
-
+
public WikittyExtension(String name, String version,
String requires, LinkedHashMap<String, FieldType> fields) {
if (name == null) {
@@ -127,7 +128,15 @@
public String getRequires() {
return requires;
}
-
+
+ public Map<String,String> getTagValues() {
+ return tagValues;
+ }
+
+ public String getTagValue(String tag) {
+ return tagValues.get(tag);
+ }
+
public FieldType getFieldType(String fieldName) {
return fields.get(fieldName);
}
@@ -141,6 +150,10 @@
fields.put(fieldName, type);
}
+ public void addTagValue(String tag, String value) {
+ tagValues.put(tag, value);
+ }
+
@Override
public int hashCode() {
return getId().hashCode();
Modified: wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-api/src/main/java/org/sharengo/wikitty/WikittyUtil.java 2009-12-10 17:14:14 UTC (rev 339)
@@ -93,9 +93,15 @@
* <li> group 8: all tag/value (toto=titi tutu=tata;lala) no space allowed in tag or value
*/
static protected Pattern fieldPattern = Pattern.compile(
- "\\s*(\\w+)\\s+(\\w+)(?:\\s*\\[(\\d+)-(?:(\\d+)|([\\*n]))\\])?(?:\\s+(unique))?(?:\\s+(not null))?((?:\\s+\\w+=(\\w|;)+)*)");
+ "\\s*(\\w+)\\s+(\\w+)(?:\\s*\\[(\\d+)-(?:(\\d+)|([\\*n]))\\])?(?:\\s+(unique))?(?:\\s+(not null))?((?:\\s+\\w+=(\\S)+)*)");
/**
+ * Extension tagValue pattern parser
+ * group: all tag/value (toto=titi tutu=tata;lala) no space allowed in tag or value
+ */
+ static protected Pattern extTagValuePattern = Pattern.compile("((?:\\w+=(\\S)+(\\s+|$))*)");
+
+ /**
* parse FieldType definition and return field name. All field information
* are stored in fieldType object passed in argument
* @param def string field definition
@@ -150,6 +156,49 @@
}
/**
+ * parse tag value definition and add each one to the extension. All tag values
+ * are stored in WikittyExtension object passed in argument
+ * @param def string field definition
+ * @param extension the WikittyExtension to add the tag values
+ * @return field name parsed in definition
+ */
+ static public void parseExtensionTagValue(String def, WikittyExtension extension) {
+ log.debug(def);
+ if(def != null) {
+ Matcher match = extTagValuePattern.matcher(def);
+ if (match.matches()) {
+ log.debug("matches !");
+ String tagValues = match.group(1);
+ if (tagValues != null) {
+ String[] tagValuesTab = tagValues.trim().split("\\s");
+ for (String tagValue : tagValuesTab) {
+ String[] tagValueTab = tagValue.trim().split("=");
+ if (tagValueTab.length != 2) {
+ log.warn(String.format(
+ "Illegal tag/value declaration '%s' in '%s'",
+ tagValue, def));
+ } else {
+ String tag = tagValueTab[0];
+ String value = tagValueTab[1];
+ extension.addTagValue(tag, value.replace(FieldType.WORD_SEPARATOR, " "));
+ }
+ }
+ }
+ } else {
+ throw new WikittyException(String.format("Bad FieldType definition '%s'", def));
+ }
+ }
+ }
+
+ static public String convertTagValuesToString(WikittyExtension extension) {
+ StringBuffer result = new StringBuffer();
+ for(Map.Entry entry : extension.getTagValues().entrySet()) {
+ result.append(entry.getKey()).append("=").append(entry.getValue()).append(" ");
+ }
+ return result.toString().trim();
+ }
+
+ /**
* Create map from string representation
*
* ex: "String name", "Wikitty children[0-*]"
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyExtensionStorageJDBC.java 2009-12-10 17:14:14 UTC (rev 339)
@@ -163,9 +163,11 @@
//if the data is not already recorded
if (!versionResultSet.first()) {
+ String tagValues = WikittyUtil.convertTagValuesToString(ext);
batch.append(String.format(conf.getProperty(adminInsertQ),
ext.getId(), ext.getName(), ext.getVersion(),
- ext.getRequires() != null ? "'" + ext.getRequires() + "'" : "null"));
+ ext.getRequires() != null ? "'" + ext.getRequires() + "'" : "null",
+ !tagValues.isEmpty() ? "'" + tagValues + "'" : "null"));
for (int i = 0 ; i < ext.getFieldNames().size() ; i++) {
FieldType type = ext.getFieldType(ext.getFieldNames().get(i));
batch.append(String.format(conf.getProperty(dataInsertQ),
@@ -353,6 +355,7 @@
String extName = adminResultSet.getString(COL_NAME);
String extVersion = adminResultSet.getString(COL_VERSION);
String extRequires = adminResultSet.getString(COL_REQUIRES);
+ String extTagValue = adminResultSet.getString(COL_TAG_VALUES);
LinkedHashMap<String, FieldType> fieldTypes = new LinkedHashMap<String, FieldType>();
//get the data with the id "id" in the data table
ResultSet dataResultSet = statement.executeQuery(
@@ -367,6 +370,7 @@
}
result = new WikittyExtension(extName, extVersion, extRequires, fieldTypes);
+ WikittyUtil.parseExtensionTagValue(extTagValue, result);
extensionCache.put(id, result);
}
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/main/java/org/sharengo/wikitty/jdbc/WikittyJDBCUtil.java 2009-12-10 17:14:14 UTC (rev 339)
@@ -51,6 +51,10 @@
*/
static final public String COL_REQUIRES = "requires";
/**
+ * requires column in the extension_admin table
+ */
+ static final public String COL_TAG_VALUES = "tagValues";
+ /**
* version column in the admin tables
*/
static final public String COL_VERSION = "version";
Modified: wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties
===================================================================
--- wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties 2009-12-08 07:46:00 UTC (rev 338)
+++ wikengo_core-wikitty/wikengo_core-wikitty-jdbc-impl/src/test/resources/jdbc.properties 2009-12-10 17:14:14 UTC (rev 339)
@@ -8,7 +8,9 @@
jdbc.queries.creation.extension.admin=CREATE TABLE IF NOT EXISTS extension_admin (\
id text NOT NULL,\
name text NOT NULL,\
-version varchar(8) NOT NULL);\
+version varchar(8) NOT NULL,\
+requires text,\
+tagValues text);\
ALTER TABLE extension_admin ADD PRIMARY KEY (id);
#table extension_data creation query
@@ -65,7 +67,7 @@
(id, fieldName, %s) VALUES ('%s', '%s.%s', %s);
#extension insertion in the admin table query
jdbc.queries.insert.extension.admin=INSERT INTO extension_admin\
-(id, name, version) VALUES ('%s', '%s', '%s');
+(id, name, version, requires, tagValues) VALUES ('%s', '%s', '%s', %s, %s);
#extension insertion in the data table query
jdbc.queries.insert.extension.data=INSERT INTO extension_data\
(id, fieldName, fieldType) VALUES ('%s', '%s', '%s');
\ No newline at end of file
1
0