Remove scheduled action xml

Fix AR-123 lucene PATH serach for "/" and "/." now work

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2675 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Andrew Hind
2006-04-20 15:08:09 +00:00
parent f50655a691
commit 09e6edf88e
3 changed files with 137 additions and 584 deletions

View File

@@ -1,442 +0,0 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!--
Define the model factory used to generate object models suitable for use with freemarker templates.
-->
<bean id="templateActionModelFactory" class="org.alfresco.repo.action.scheduled.FreeMarkerWithLuceneExtensionsModelFactory">
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<!--
An example action template that defines an action to add the generalclassifiable aspect to all nodes that do not have
and add a category defined by path.
-->
<bean id="addClassifiableAspectAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
<property name="actionName">
<value>add-features</value>
</property>
<property name="parameterTemplates">
<map>
<entry>
<key>
<value>aspect-name</value>
</key>
<value>{http://www.alfresco.org/model/content/1.0}generalclassifiable</value>
</entry>
<entry>
<key>
<value>{http://www.alfresco.org/model/content/1.0}categories</value>
</key>
<value>${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/cm:generalclassifiable/cm:Languages/cm:English"' )}</value>
</entry>
</map>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="dictionaryService">
<ref bean="DictionaryService"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
</bean>
<!--
An example action template that removes an aspect from all those nodes that have the aspect.
-->
<bean id="removeClassifiableAspectAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
<property name="actionName">
<value>remove-features</value>
</property>
<property name="parameterTemplates">
<map>
<entry>
<key>
<value>aspect-name</value>
</key>
<value>{http://www.alfresco.org/model/content/1.0}generalclassifiable</value>
</entry>
</map>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="dictionaryService">
<ref bean="DictionaryService"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
</bean>
<!--
An example that copies the tutorial node into the company home space
-->
<bean id="copyAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
<property name="actionName">
<value>copy</value>
</property>
<property name="parameterTemplates">
<map>
<entry>
<key>
<value>destination-folder</value>
</key>
<value>${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home"' )}</value>
</entry>
<entry>
<key>
<value>assoc-type</value>
</key>
<value>${node.primaryParentAssoc.typeQName}</value>
</entry>
<entry>
<key>
<value>assoc-name</value>
</key>
<value>${node.primaryParentAssoc.QName}</value>
</entry>
<entry>
<key>
<value>deep-copy</value>
</key>
<value>false</value>
</entry>
</map>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="dictionaryService">
<ref bean="DictionaryService"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
</bean>
<!--
An example that sets the created date to now
-->
<bean id="setCreatedDateAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
<property name="actionName">
<value>set-property-value</value>
</property>
<property name="parameterTemplates">
<map>
<entry>
<key>
<value>property</value>
</key>
<value>{http://www.alfresco.org/model/content/1.0}created</value>
</entry>
<entry>
<key>
<value>value</value>
</key>
<value>${today?string("yyyy-MM-dd'T'HH:mm:ss.sss'Z'")}</value>
</entry>
</map>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="dictionaryService">
<ref bean="DictionaryService"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
</bean>
<!--
Compound action example ...
-->
<bean id="compositeAction" class="org.alfresco.repo.action.scheduled.CompositeTemplateActionDefinition">
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
<property name="templateActionDefinitions">
<list>
<ref bean="copyAction"/>
<ref bean="setCreatedDateAction"/>
</list>
</property>
</bean>
<!-- ONE_TRANSACTION ISOLATED_TRANSACTIONS UNTIL_FIRST_FAILURE -->
<!--
Define a job for adding the classified aspect to nodes.
-->
<bean id="addClassifiableAspectEveryTenMinutes" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
<property name="transactionMode">
<value>UNTIL_FIRST_FAILURE</value>
</property>
<property name="compensatingActionMode">
<value>IGNORE</value>
</property>
<property name="searchService">
<ref bean="SearchService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
<property name="queryLanguage">
<value>lucene</value>
</property>
<property name="stores">
<list>
<value>workspace://SpacesStore</value>
</list>
</property>
<!-- Find all nodes that do not have the aspect -->
<property name="queryTemplate">
<value>PATH:"//\*" -ASPECT:"{http://www.alfresco.org/model/content/1.0}generalclassifiable"</value>
</property>
<property name="cronExpression">
<value>0 50 * * * ?</value>
</property>
<property name="jobName">
<value>jobA</value>
</property>
<property name="jobGroup">
<value>jobGroup</value>
</property>
<property name="triggerName">
<value>triggerA</value>
</property>
<property name="triggerGroup">
<value>triggerGroup</value>
</property>
<property name="scheduler">
<ref bean="schedulerFactory"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="templateActionDefinition">
<ref bean="addClassifiableAspectAction"/>
</property>
<property name="transactionService">
<ref bean="TransactionService"/>
</property>
<property name="runAsUser">
<value>System</value>
</property>
</bean>
<!--
Define a job to remove an aspect.
-->
<bean id="removeClassifiableAspectEveryTenMinutes" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
<property name="transactionMode">
<value>UNTIL_FIRST_FAILURE</value>
</property>
<property name="compensatingActionMode">
<value>IGNORE</value>
</property>
<property name="searchService">
<ref bean="SearchService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
<property name="queryLanguage">
<value>lucene</value>
</property>
<property name="stores">
<list>
<value>workspace://SpacesStore</value>
</list>
</property>
<property name="queryTemplate">
<value>ASPECT:"{http://www.alfresco.org/model/content/1.0}generalclassifiable"</value>
</property>
<property name="cronExpression">
<value>0 55 * * * ?</value>
</property>
<property name="jobName">
<value>jobB</value>
</property>
<property name="jobGroup">
<value>jobGroup</value>
</property>
<property name="triggerName">
<value>triggerB</value>
</property>
<property name="triggerGroup">
<value>triggerGroup</value>
</property>
<property name="scheduler">
<ref bean="schedulerFactory"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="templateActionDefinition">
<ref bean="removeClassifiableAspectAction"/>
</property>
<property name="transactionService">
<ref bean="TransactionService"/>
</property>
<property name="runAsUser">
<value>System</value>
</property>
</bean>
<!--
Define a job to remove an aspect.
-->
<bean id="copyTutorialEveryTenMinutes" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
<property name="transactionMode">
<value>UNTIL_FIRST_FAILURE</value>
</property>
<property name="compensatingActionMode">
<value>IGNORE</value>
</property>
<property name="searchService">
<ref bean="SearchService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
<property name="queryLanguage">
<value>lucene</value>
</property>
<property name="stores">
<list>
<value>workspace://SpacesStore</value>
</list>
</property>
<property name="queryTemplate">
<value>+PATH:"/app:company_home/*//*" +TEXT:"tutorial"</value>
</property>
<property name="cronExpression">
<value>0 40 * * * ?</value>
</property>
<property name="jobName">
<value>jobC</value>
</property>
<property name="jobGroup">
<value>jobGroup</value>
</property>
<property name="triggerName">
<value>triggerC</value>
</property>
<property name="triggerGroup">
<value>triggerGroup</value>
</property>
<property name="scheduler">
<ref bean="schedulerFactory"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="templateActionDefinition">
<ref bean="copyAction"/>
</property>
<property name="transactionService">
<ref bean="TransactionService"/>
</property>
<property name="runAsUser">
<value>System</value>
</property>
</bean>
<!--
Find content created yesterday in the previous 10 years:-
set the created date to today and copy to the company home
-->
<bean id="makeStuffCreatedRecentlyCreatedNow" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
<property name="transactionMode">
<value>UNTIL_FIRST_FAILURE</value>
</property>
<property name="compensatingActionMode">
<value>IGNORE</value>
</property>
<property name="searchService">
<ref bean="SearchService"/>
</property>
<property name="templateService">
<ref bean="TemplateService"/>
</property>
<property name="queryLanguage">
<value>lucene</value>
</property>
<property name="stores">
<list>
<value>workspace://SpacesStore</value>
</list>
</property>
<property name="queryTemplate">
<value>@cm\:created:${luceneDateRange(yesterday, "-P10Y")}</value>
</property>
<property name="cronExpression">
<value>0 0/1 * * * ?</value>
</property>
<property name="jobName">
<value>jobD</value>
</property>
<property name="jobGroup">
<value>jobGroup</value>
</property>
<property name="triggerName">
<value>triggerD</value>
</property>
<property name="triggerGroup">
<value>triggerGroup</value>
</property>
<property name="scheduler">
<ref bean="schedulerFactory"/>
</property>
<property name="actionService">
<ref bean="ActionService"/>
</property>
<property name="templateActionModelFactory">
<ref bean="templateActionModelFactory"/>
</property>
<property name="templateActionDefinition">
<ref bean="compositeAction"/>
</property>
<property name="transactionService">
<ref bean="TransactionService"/>
</property>
<property name="runAsUser">
<value>System</value>
</property>
</bean>
</beans>

View File

@@ -198,7 +198,6 @@ public class LuceneTest extends TestCase
StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "Test_" + System.currentTimeMillis()); StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "Test_" + System.currentTimeMillis());
rootNodeRef = nodeService.getRootNode(storeRef); rootNodeRef = nodeService.getRootNode(storeRef);
n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}one"), n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}one"),
testSuperType).getChildRef(); testSuperType).getChildRef();
nodeService.setProperty(n1, QName.createQName("{namespace}property-1"), "ValueOne"); nodeService.setProperty(n1, QName.createQName("{namespace}property-1"), "ValueOne");
@@ -208,7 +207,6 @@ public class LuceneTest extends TestCase
nodeService.setProperty(n2, QName.createQName("{namespace}property-1"), "valueone"); nodeService.setProperty(n2, QName.createQName("{namespace}property-1"), "valueone");
nodeService.setProperty(n2, QName.createQName("{namespace}property-2"), "valuetwo"); nodeService.setProperty(n2, QName.createQName("{namespace}property-2"), "valuetwo");
n3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}three"), n3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}three"),
testSuperType).getChildRef(); testSuperType).getChildRef();
@@ -334,7 +332,6 @@ public class LuceneTest extends TestCase
super(arg0); super(arg0);
} }
public void test0() throws Exception public void test0() throws Exception
{ {
luceneFTS.pause(); luceneFTS.pause();
@@ -343,14 +340,11 @@ public class LuceneTest extends TestCase
luceneFTS.resume(); luceneFTS.resume();
} }
public void testDeleteIssue() throws Exception public void testDeleteIssue() throws Exception
{ {
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); UserTransaction tx = transactionService.getUserTransaction();
tx.begin(); tx.begin();
ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName
@@ -395,13 +389,11 @@ public class LuceneTest extends TestCase
tx3.commit(); tx3.commit();
} }
public void testMTDeleteIssue() throws Exception public void testMTDeleteIssue() throws Exception
{ {
testTX.commit(); testTX.commit();
UserTransaction tx = transactionService.getUserTransaction(); UserTransaction tx = transactionService.getUserTransaction();
tx.begin(); tx.begin();
ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName ChildAssociationRef testFind = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName
@@ -418,7 +410,6 @@ public class LuceneTest extends TestCase
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
Thread runner = null; Thread runner = null;
for (int i = 0; i < 20; i++) for (int i = 0; i < 20; i++)
@@ -439,8 +430,6 @@ public class LuceneTest extends TestCase
} }
} }
UserTransaction tx3 = transactionService.getUserTransaction(); UserTransaction tx3 = transactionService.getUserTransaction();
tx3.begin(); tx3.begin();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\""); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "QNAME:\"namespace:testFind\"");
@@ -477,8 +466,8 @@ public class LuceneTest extends TestCase
HashSet<ChildAssociationRef> refs = new HashSet<ChildAssociationRef>(); HashSet<ChildAssociationRef> refs = new HashSet<ChildAssociationRef>();
for (int j = 0; j < i; j++) for (int j = 0; j < i; j++)
{ {
ChildAssociationRef test = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName ChildAssociationRef test = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN,
.createQName("{namespace}test"), testSuperType); QName.createQName("{namespace}test"), testSuperType);
refs.add(test); refs.add(test);
} }
@@ -514,8 +503,6 @@ public class LuceneTest extends TestCase
} }
public void testDeltaIssue() throws Exception public void testDeltaIssue() throws Exception
{ {
final NodeService pns = (NodeService) ctx.getBean("NodeService"); final NodeService pns = (NodeService) ctx.getBean("NodeService");
@@ -745,8 +732,6 @@ public class LuceneTest extends TestCase
luceneFTS.resume(); luceneFTS.resume();
SearchParameters sp3 = new SearchParameters(); SearchParameters sp3 = new SearchParameters();
sp3.addStore(rootNodeRef.getStoreRef()); sp3.addStore(rootNodeRef.getStoreRef());
sp3.setLanguage(SearchService.LANGUAGE_LUCENE); sp3.setLanguage(SearchService.LANGUAGE_LUCENE);
@@ -1050,7 +1035,8 @@ public class LuceneTest extends TestCase
QName qname = QName.createQName("", "property-1"); QName qname = QName.createQName("", "property-1");
} finally }
finally
{ {
results.close(); results.close();
} }
@@ -1059,7 +1045,8 @@ public class LuceneTest extends TestCase
try try
{ {
assertEquals(2, results.length()); assertEquals(2, results.length());
} finally }
finally
{ {
results.close(); results.close();
} }
@@ -1069,7 +1056,8 @@ public class LuceneTest extends TestCase
try try
{ {
assertEquals(1, results.length()); assertEquals(1, results.length());
} finally }
finally
{ {
results.close(); results.close();
} }
@@ -1129,17 +1117,17 @@ public class LuceneTest extends TestCase
searcher.setDictionaryService(dictionaryService); searcher.setDictionaryService(dictionaryService);
searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace")); searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace"));
searcher.setQueryRegister(queryRegisterComponent); searcher.setQueryRegister(queryRegisterComponent);
ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one\"", null, null); ResultSet results;
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/.\"", null, null);
assertEquals(1, results.length());
results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
// results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
// "PATH:\"/\"", null, null);
// assertEquals(1, results.length());
// results.close();
// results = searcher.query(rootNodeRef.getStoreRef(), "lucene",
// "PATH:\"/.\"", null, null);
// assertEquals(1, results.length());
// results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two\"", null, null); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:two\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
@@ -1373,15 +1361,14 @@ public class LuceneTest extends TestCase
// Type search tests // Type search tests
QName qname = QName.createQName(TEST_NAMESPACE, "int-ista"); QName qname = QName.createQName(TEST_NAMESPACE, "int-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"1\"", null, results = searcher
null); .query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"1\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "int-ista"); qname = QName.createQName(TEST_NAMESPACE, "int-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":1", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":1", null, null);
null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
@@ -1394,22 +1381,20 @@ public class LuceneTest extends TestCase
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "int-ista"); qname = QName.createQName(TEST_NAMESPACE, "int-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":01", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":01", null, null);
null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "int-ista"); qname = QName.createQName(TEST_NAMESPACE, "int-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "@" + escapeQName(qname) + ":\"001\"", null, results = searcher
null); .query(rootNodeRef.getStoreRef(), "lucene", "@" + escapeQName(qname) + ":\"001\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "int-ista"); qname = QName.createQName(TEST_NAMESPACE, "int-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@test\\:int\\-ista:\"0001\"", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@test\\:int\\-ista:\"0001\"", null, null);
null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
@@ -1441,22 +1426,22 @@ public class LuceneTest extends TestCase
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "long-ista"); qname = QName.createQName(TEST_NAMESPACE, "long-ista");
results = searcher results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"02\"", null,
.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"02\"", null, null); null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "long-ista"); qname = QName.createQName(TEST_NAMESPACE, "long-ista");
results = searcher results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"002\"", null,
.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"002\"", null, null); null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "long-ista"); qname = QName.createQName(TEST_NAMESPACE, "long-ista");
results = searcher results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"0002\"", null,
.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"0002\"", null, null); null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
@@ -1495,19 +1480,18 @@ public class LuceneTest extends TestCase
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "float-ista"); qname = QName.createQName(TEST_NAMESPACE, "float-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":[3.3 TO 3.4]", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":[3.3 TO 3.4]",
null); null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "float-ista"); qname = QName.createQName(TEST_NAMESPACE, "float-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{3.3 TO 3.4}", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{3.3 TO 3.4}",
null); null, null);
assertEquals(0, results.length()); assertEquals(0, results.length());
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "float-ista"); qname = QName.createQName(TEST_NAMESPACE, "float-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"3.40\"", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":\"3.40\"", null,
null); null);
@@ -1550,25 +1534,24 @@ public class LuceneTest extends TestCase
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "double-ista"); qname = QName.createQName(TEST_NAMESPACE, "double-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":[5.5 TO 5.7]", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":[5.5 TO 5.7]",
null); null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
assertNotNull(results.getRow(0).getValue(qname)); assertNotNull(results.getRow(0).getValue(qname));
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "double-ista"); qname = QName.createQName(TEST_NAMESPACE, "double-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{5.5 TO 5.6}", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{5.5 TO 5.6}",
null); null, null);
assertEquals(0, results.length()); assertEquals(0, results.length());
results.close(); results.close();
qname = QName.createQName(TEST_NAMESPACE, "double-ista"); qname = QName.createQName(TEST_NAMESPACE, "double-ista");
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{5.6 TO 5.7}", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(qname) + ":{5.6 TO 5.7}",
null); null, null);
assertEquals(0, results.length()); assertEquals(0, results.length());
results.close(); results.close();
Date date = new Date(); Date date = new Date();
String sDate = CachingDateFormat.getDateFormat().format(date); String sDate = CachingDateFormat.getDateFormat().format(date);
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@"
@@ -1621,13 +1604,13 @@ public class LuceneTest extends TestCase
assertEquals(13, results.length()); assertEquals(13, results.length());
results.close(); results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "ASPECT:\"" + ISO9075.getXPathName(testAspect) + "\"", null, results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "ASPECT:\""
null); + ISO9075.getXPathName(testAspect) + "\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "ASPECT:\"" + ISO9075.getXPathName(testSuperAspect) + "\"", results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "ASPECT:\""
null, null); + ISO9075.getXPathName(testSuperAspect) + "\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
@@ -1637,11 +1620,14 @@ public class LuceneTest extends TestCase
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "@"+LuceneQueryParser.escape(ContentModel.PROP_CONTENT.toString())+":\"fox\"", null, null); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "@"
+ LuceneQueryParser.escape(ContentModel.PROP_CONTENT.toString()) + ":\"fox\"", null, null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "@"+LuceneQueryParser.escape(ContentModel.PROP_CONTENT.toString())+".mimetype:\"text/plain\"", null, null); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "@"
+ LuceneQueryParser.escape(ContentModel.PROP_CONTENT.toString()) + ".mimetype:\"text/plain\"", null,
null);
assertEquals(1, results.length()); assertEquals(1, results.length());
results.close(); results.close();
@@ -3026,7 +3012,6 @@ public class LuceneTest extends TestCase
serviceRegistry.getNodeService().deleteNode(n1); serviceRegistry.getNodeService().deleteNode(n1);
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setLanguage(SearchService.LANGUAGE_LUCENE);
@@ -3045,7 +3030,6 @@ public class LuceneTest extends TestCase
assertEquals(15, results.length()); assertEquals(15, results.length());
results.close(); results.close();
NodeRef created = serviceRegistry.getNodeService().createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, NodeRef created = serviceRegistry.getNodeService().createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN,
QName.createQName("{namespace}texas"), testSuperType).getChildRef(); QName.createQName("{namespace}texas"), testSuperType).getChildRef();
@@ -3069,7 +3053,6 @@ public class LuceneTest extends TestCase
serviceRegistry.getNodeService().deleteNode(created); serviceRegistry.getNodeService().deleteNode(created);
sp = new SearchParameters(); sp = new SearchParameters();
sp.addStore(rootNodeRef.getStoreRef()); sp.addStore(rootNodeRef.getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE); sp.setLanguage(SearchService.LANGUAGE_LUCENE);

View File

@@ -17,6 +17,7 @@
package org.alfresco.repo.search.impl.lucene.query; package org.alfresco.repo.search.impl.lucene.query;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import org.alfresco.repo.search.impl.lucene.query.LeafScorer.Counter; import org.alfresco.repo.search.impl.lucene.query.LeafScorer.Counter;
@@ -79,10 +80,14 @@ public class PathScorer extends Scorer
} }
if ((pathQuery.getPathStructuredFieldPositions().size() + pathQuery.getQNameStructuredFieldPositions().size()) == 0) // optimize if ((pathQuery.getPathStructuredFieldPositions().size() + pathQuery.getQNameStructuredFieldPositions().size()) == 0)
// zero-term {
// case ArrayList<StructuredFieldPosition> answer = new ArrayList<StructuredFieldPosition>(2);
return null; answer.add(new SelfAxisStructuredFieldPosition());
answer.add(new SelfAxisStructuredFieldPosition());
pathQuery.appendQuery(answer);
}
for (StructuredFieldPosition sfp : pathQuery.getPathStructuredFieldPositions()) for (StructuredFieldPosition sfp : pathQuery.getPathStructuredFieldPositions())
@@ -144,6 +149,13 @@ public class PathScorer extends Scorer
level0 = reader.termPositions(new Term("ISROOT", "T")); level0 = reader.termPositions(new Term("ISROOT", "T"));
} }
if((cs == null) &&
(pathQuery.getQNameStructuredFieldPositions().get(pathQuery.getQNameStructuredFieldPositions().size()-1)).linkSelf())
{
nodePositions = reader.termPositions(new Term("ISROOT", "T"));
}
LeafScorer ls = new LeafScorer(weight, rootLeafPositions, level0, cs, (StructuredFieldPosition[]) pathQuery.getQNameStructuredFieldPositions().toArray(new StructuredFieldPosition[] {}), nodePositions, LeafScorer ls = new LeafScorer(weight, rootLeafPositions, level0, cs, (StructuredFieldPosition[]) pathQuery.getQNameStructuredFieldPositions().toArray(new StructuredFieldPosition[] {}), nodePositions,
selfIds, reader, similarity, reader.norms(pathQuery.getQnameField()), dictionarySertvice, repeat, tp); selfIds, reader, similarity, reader.norms(pathQuery.getQnameField()), dictionarySertvice, repeat, tp);