From c717551907fb2f6506d30c4ea938e3ae4d39e743 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Wed, 3 Sep 2014 15:21:53 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 79326: Merged EOL to HEAD-BUG-FIX (5.0/Cloud) 79090: ACE-2013 EOL JCR, JCR-RMI, etc in 5.0 - Removed references to http://www.jcp.org/jcr (left in web-scripts-application-context.xml and multiple versions of opencmis-gnamefilter-context.xml) 78990: ACE-2013 EOL JCR, JCR-RMI, etc in 5.0 - Removing references to "jcr-xpath" - Biggest changes were to: DocumentNavigator, NodeServiceXPath and NodeSearcher - SearcherComponentTest has a lot of tests removed that appeared to be JCR specific - There are still a lot of namespace references in XML files to http://www.jcp.org/jcr/1.0 etc. - Left a few references to "JSR 170" and JCR in java classes as they looked like they might be common with other bits. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82708 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../bootstrap/customMessagesSpace.xml | 4 +- .../customWebClientExtensionSpace.xml | 4 +- config/alfresco/bootstrap/webScripts.xml | 4 +- .../bootstrap/webScriptsExtensions.xml | 4 +- .../alfresco/bootstrap/webScriptsReadme.xml | 6 +- config/alfresco/model/jcrModel.xml | 151 ---- .../templates/following-email-templates.xml | 2 +- .../templates/invite-email-templates.xml | 14 +- .../alfresco/templates/new-user-templates.xml | 14 +- .../templates/notify_email_templates.xml | 16 +- config/alfresco/templates/readme_template.xml | 4 +- .../repo/workflow/jbpm/jbpm.varmapping.xml | 8 - .../org/alfresco/repo/jscript/Search.java | 2 +- .../repo/search/DocumentNavigator.java | 72 +- .../repo/search/NodeServiceXPath.java | 71 -- .../repo/search/impl/JCR170Searcher.java | 61 -- .../repo/search/impl/NodeSearcher.java | 48 +- .../repo/search/SearcherComponentTest.java | 497 ------------- .../org/alfresco/jcr/tck/testExcludeList.txt | 2 - .../org/alfresco/jcr/test/docview.xml | 30 - .../org/alfresco/jcr/test/myModel.xml | 71 -- .../org/alfresco/jcr/test/sysview.xml | 682 ------------------ .../org/alfresco/jcr/test/test-context.xml | 18 - .../org/alfresco/jcr/test/testContent.txt | 1 - .../org/alfresco/jcr/test/testData.xml | 111 --- .../org/alfresco/jcr/test/testModel.xml | 152 ---- .../org/alfresco/jcr/test/testQuick.jpg | Bin 26445 -> 0 bytes 27 files changed, 51 insertions(+), 1998 deletions(-) delete mode 100644 config/alfresco/model/jcrModel.xml delete mode 100644 source/java/org/alfresco/repo/search/impl/JCR170Searcher.java delete mode 100644 source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt delete mode 100644 source/test-resources/org/alfresco/jcr/test/docview.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/myModel.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/sysview.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/test-context.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/testContent.txt delete mode 100644 source/test-resources/org/alfresco/jcr/test/testData.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/testModel.xml delete mode 100644 source/test-resources/org/alfresco/jcr/test/testQuick.jpg diff --git a/config/alfresco/bootstrap/customMessagesSpace.xml b/config/alfresco/bootstrap/customMessagesSpace.xml index 7dd99c34e2..c5099f4c11 100644 --- a/config/alfresco/bootstrap/customMessagesSpace.xml +++ b/config/alfresco/bootstrap/customMessagesSpace.xml @@ -1,6 +1,6 @@ - @@ -12,4 +12,4 @@ ${spaces.messages.name} - \ No newline at end of file + diff --git a/config/alfresco/bootstrap/customWebClientExtensionSpace.xml b/config/alfresco/bootstrap/customWebClientExtensionSpace.xml index b1f71c5103..18df478072 100644 --- a/config/alfresco/bootstrap/customWebClientExtensionSpace.xml +++ b/config/alfresco/bootstrap/customWebClientExtensionSpace.xml @@ -1,6 +1,6 @@ - @@ -12,4 +12,4 @@ ${spaces.web.client.extension.name} - \ No newline at end of file + diff --git a/config/alfresco/bootstrap/webScripts.xml b/config/alfresco/bootstrap/webScripts.xml index 5aafe6cd19..064480500f 100644 --- a/config/alfresco/bootstrap/webScripts.xml +++ b/config/alfresco/bootstrap/webScripts.xml @@ -1,6 +1,6 @@ - + @@ -383,4 +383,4 @@ - \ No newline at end of file + diff --git a/config/alfresco/bootstrap/webScriptsExtensions.xml b/config/alfresco/bootstrap/webScriptsExtensions.xml index d2901442d2..7e9884ff62 100644 --- a/config/alfresco/bootstrap/webScriptsExtensions.xml +++ b/config/alfresco/bootstrap/webScriptsExtensions.xml @@ -1,6 +1,6 @@ - + @@ -31,4 +31,4 @@ - \ No newline at end of file + diff --git a/config/alfresco/bootstrap/webScriptsReadme.xml b/config/alfresco/bootstrap/webScriptsReadme.xml index 6100fd7e08..d63feeddfd 100644 --- a/config/alfresco/bootstrap/webScriptsReadme.xml +++ b/config/alfresco/bootstrap/webScriptsReadme.xml @@ -1,6 +1,6 @@ - + @@ -8,7 +8,7 @@ /app:company_home/app:dictionary/app:content_templates/cm:readme.ftl - + @@ -16,4 +16,4 @@ /app:company_home/app:dictionary/app:content_templates/cm:readme.ftl - \ No newline at end of file + diff --git a/config/alfresco/model/jcrModel.xml b/config/alfresco/model/jcrModel.xml deleted file mode 100644 index 599428b582..0000000000 --- a/config/alfresco/model/jcrModel.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - JCR Model Definitions - 1.0 - - - - - - - - - - - - - - - - - - sys:base - - - d:qname - true - true - - - d:qname - true - true - - - - - - nt:base - - - d:date - true - false - false - - - - - - nt:hierarchyNode - - - - false - true - - - nt:base - true - false - - jcr:content - false - - - - - - nt:hierarchyNode - - - - false - true - - - nt:hierarchyNode - false - true - - false - - - - - - nt:base - - - d:text - false - false - false - - - d:text - false - true - false - - - d:content - false - true - false - - true - false - true - - - - d:date - false - true - false - - - - mix:referenceable - - - - - - - - - - - d:text - true - true - - - - - - - - d:text - - - d:boolean - - - - - - - \ No newline at end of file diff --git a/config/alfresco/templates/following-email-templates.xml b/config/alfresco/templates/following-email-templates.xml index c53262e5f8..9e45893dca 100644 --- a/config/alfresco/templates/following-email-templates.xml +++ b/config/alfresco/templates/following-email-templates.xml @@ -1,7 +1,7 @@ - + ${spaces.templates.email.following.name} ${spaces.templates.email.following.name} diff --git a/config/alfresco/templates/invite-email-templates.xml b/config/alfresco/templates/invite-email-templates.xml index 858eac4e30..9a6bab3b15 100644 --- a/config/alfresco/templates/invite-email-templates.xml +++ b/config/alfresco/templates/invite-email-templates.xml @@ -3,7 +3,7 @@ /app:company_home/app:dictionary/app:email_templates/cm:invite - + @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -99,7 +99,7 @@ - + diff --git a/config/alfresco/templates/new-user-templates.xml b/config/alfresco/templates/new-user-templates.xml index dd93518b1c..b7804721ef 100644 --- a/config/alfresco/templates/new-user-templates.xml +++ b/config/alfresco/templates/new-user-templates.xml @@ -3,7 +3,7 @@ /app:company_home/app:dictionary/app:email_templates/cm:invite - + @@ -19,7 +19,7 @@ - + @@ -35,7 +35,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -67,7 +67,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -99,7 +99,7 @@ - + diff --git a/config/alfresco/templates/notify_email_templates.xml b/config/alfresco/templates/notify_email_templates.xml index 1f2153f071..edd1983940 100644 --- a/config/alfresco/templates/notify_email_templates.xml +++ b/config/alfresco/templates/notify_email_templates.xml @@ -1,6 +1,6 @@ - + @@ -15,7 +15,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -45,7 +45,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -104,4 +104,4 @@ - \ No newline at end of file + diff --git a/config/alfresco/templates/readme_template.xml b/config/alfresco/templates/readme_template.xml index 0aa97605e3..402cd146d1 100644 --- a/config/alfresco/templates/readme_template.xml +++ b/config/alfresco/templates/readme_template.xml @@ -1,6 +1,6 @@ - + @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/config/org/alfresco/repo/workflow/jbpm/jbpm.varmapping.xml b/config/org/alfresco/repo/workflow/jbpm/jbpm.varmapping.xml index eba185c2ad..4f1b74ad5e 100644 --- a/config/org/alfresco/repo/workflow/jbpm/jbpm.varmapping.xml +++ b/config/org/alfresco/repo/workflow/jbpm/jbpm.varmapping.xml @@ -184,14 +184,6 @@ - - - - - - - - diff --git a/source/java/org/alfresco/repo/jscript/Search.java b/source/java/org/alfresco/repo/jscript/Search.java index d278f1edae..19593b7242 100644 --- a/source/java/org/alfresco/repo/jscript/Search.java +++ b/source/java/org/alfresco/repo/jscript/Search.java @@ -511,7 +511,7 @@ public class Search extends BaseScopableProcessorExtension implements Initializi * { * query: string, mandatory, in appropriate format and encoded for the given language * store: string, optional, defaults to 'workspace://SpacesStore' - * language: string, optional, one of: lucene, xpath, jcr-xpath, fts-alfresco - defaults to 'lucene' + * language: string, optional, one of: lucene, xpath, fts-alfresco - defaults to 'lucene' * templates: [], optional, Array of query language template objects (see below) - if supported by the language * sort: [], optional, Array of sort column objects (see below) - if supported by the language * page: object, optional, paging information object (see below) - if supported by the language diff --git a/source/java/org/alfresco/repo/search/DocumentNavigator.java b/source/java/org/alfresco/repo/search/DocumentNavigator.java index 5768a3be7b..76cea7b737 100644 --- a/source/java/org/alfresco/repo/search/DocumentNavigator.java +++ b/source/java/org/alfresco/repo/search/DocumentNavigator.java @@ -60,12 +60,6 @@ import org.jaxen.XPath; */ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNavigator { - private static QName JCR_ROOT = QName.createQName("http://www.jcp.org/jcr/1.0", "root"); - - private static QName JCR_PRIMARY_TYPE = QName.createQName("http://www.jcp.org/jcr/1.0", "primaryType"); - - private static QName JCR_MIXIN_TYPES = QName.createQName("http://www.jcp.org/jcr/1.0", "mixinTypes"); - private static final long serialVersionUID = 3618984485740165427L; private DictionaryService dictionaryService; @@ -108,30 +102,17 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa } } - public class JCRRootNodeChildAssociationRef extends ChildAssociationRef - { - - /** - * Comment for serialVersionUID - */ - private static final long serialVersionUID = -3890194577752476675L; - - public JCRRootNodeChildAssociationRef(QName assocTypeQName, NodeRef parentRef, QName childQName, NodeRef childRef) - { - super(assocTypeQName, parentRef, childQName, childRef); - } - - public JCRRootNodeChildAssociationRef(QName assocTypeQName, NodeRef parentRef, QName childQName, NodeRef childRef, boolean isPrimary, int nthSibling) - { - super(assocTypeQName, parentRef, childQName, childRef, isPrimary, nthSibling); - } - - } - private boolean followAllParentLinks; - private boolean useJCRRootNode; - + /** + * @deprecated useJCRRootNode parameter is now obsolete. + */ + public DocumentNavigator(DictionaryService dictionaryService, NodeService nodeService, SearchService searchService, + NamespacePrefixResolver nspr, boolean followAllParentLinks, boolean useJCRRootNode) + { + this(dictionaryService, nodeService, searchService, nspr, followAllParentLinks); + } + /** * @param dictionaryService * used to resolve the subtypeOf function and other @@ -149,7 +130,7 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa * parent-child association should be traversed */ public DocumentNavigator(DictionaryService dictionaryService, NodeService nodeService, SearchService searchService, - NamespacePrefixResolver nspr, boolean followAllParentLinks, boolean useJCRRootNode) + NamespacePrefixResolver nspr, boolean followAllParentLinks) { super(); this.dictionaryService = dictionaryService; @@ -157,7 +138,6 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa this.searchService = searchService; this.nspr = nspr; this.followAllParentLinks = followAllParentLinks; - this.useJCRRootNode = useJCRRootNode; } @@ -379,14 +359,6 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa properties.add(property); } } - if(useJCRRootNode) - { - properties.add(new Property(JCR_PRIMARY_TYPE, nodeService.getType(nodeRef), nodeRef)); - for(QName mixin : nodeService.getAspects(nodeRef)) - { - properties.add(new Property(JCR_MIXIN_TYPES, mixin, nodeRef)); - } - } return properties.iterator(); } @@ -400,18 +372,7 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa NodeRef childRef = assocRef.getChildRef(); QName qName = QName.createQName(namespaceURI, localName); List list = null; - // Add compatability for JCR 170 by including the root node. - if(isDocument(contextNode) && useJCRRootNode) - { - list = new ArrayList(1); - list = Collections.singletonList( - new JCRRootNodeChildAssociationRef( - ContentModel.ASSOC_CHILDREN, childRef, JCR_ROOT, childRef, true, 0)); - } - else - { - list = nodeService.getChildAssocs(childRef, RegexQNamePattern.MATCH_ALL, qName); - } + list = nodeService.getChildAssocs(childRef, RegexQNamePattern.MATCH_ALL, qName); // done return list.iterator(); } @@ -422,16 +383,7 @@ public class DocumentNavigator extends DefaultNavigator implements NamedAccessNa ChildAssociationRef assocRef = (ChildAssociationRef) o; NodeRef childRef = assocRef.getChildRef(); List list; - // Add compatability for JCR 170 by including the root node. - if(isDocument(o) && useJCRRootNode) - { - list = new ArrayList(1); - list.add(new JCRRootNodeChildAssociationRef(ContentModel.ASSOC_CHILDREN, childRef, JCR_ROOT, childRef, true, 0)); - } - else - { - list = nodeService.getChildAssocs(childRef); - } + list = nodeService.getChildAssocs(childRef); return list.iterator(); } diff --git a/source/java/org/alfresco/repo/search/NodeServiceXPath.java b/source/java/org/alfresco/repo/search/NodeServiceXPath.java index 312cb14a99..c0cceccf6d 100644 --- a/source/java/org/alfresco/repo/search/NodeServiceXPath.java +++ b/source/java/org/alfresco/repo/search/NodeServiceXPath.java @@ -88,8 +88,6 @@ public class NodeServiceXPath extends BaseXPath { private static final long serialVersionUID = 3834032441789592882L; - private static String JCR_URI = "http://www.jcp.org/jcr/1.0"; - private static Log logger = LogFactory.getLog(NodeServiceXPath.class); /** @@ -469,67 +467,6 @@ public class NodeServiceXPath extends BaseXPath } } - static class JCRContains implements Function - { - - public Object call(Context context, List args) throws FunctionCallException - { - if (args.size() == 2) - { - if (context.getNavigator().isAttribute(context.getNodeSet().get(0))) - { - throw new FunctionCallException("jcr:contains() does not apply to an attribute context."); - } - return evaluate(context.getNodeSet(), args.get(0), args.get(1), context.getNavigator()); - } - - throw new FunctionCallException("contains() requires two argument."); - } - - public Object evaluate(List nodes, Object identifier, Object pattern, Navigator nav) - { - if (nodes.size() != 1) - { - return false; - } - - QName qname = null; - NodeRef nodeRef = null; - - Object target = identifier; - - if (identifier instanceof List) - { - List list = (List) identifier; - if (list.isEmpty()) - { - return false; - } - // do not recurse: only first list should unwrap - target = list.get(0); - } - - if (nav.isElement(target)) - { - qname = null; // should use all attributes and full text index - nodeRef = ((ChildAssociationRef) target).getChildRef(); - } - else if (nav.isAttribute(target)) - { - qname = QName.createQName( - nav.getAttributeNamespaceUri(target), - ISO9075.decode(nav.getAttributeName(target))); - nodeRef = ((DocumentNavigator.Property) target).parent; - } - - String patternValue = StringFunction.evaluate(pattern, nav); - DocumentNavigator dNav = (DocumentNavigator) nav; - - return dNav.contains(nodeRef, qname, patternValue, SearchParameters.AND); - - } - } - static class Score implements Function { private Double one = new Double(1); @@ -694,14 +631,6 @@ public class NodeServiceXPath extends BaseXPath registerFunction("", "contains", new Contains()); registerFunction("", "first", new FirstFunction()); - - // 170 functions - - registerFunction(JCR_URI, "like", new Like()); - registerFunction(JCR_URI, "score", new Score()); - registerFunction(JCR_URI, "contains", new JCRContains()); - registerFunction(JCR_URI, "deref", new Deref()); - } } diff --git a/source/java/org/alfresco/repo/search/impl/JCR170Searcher.java b/source/java/org/alfresco/repo/search/impl/JCR170Searcher.java deleted file mode 100644 index 759af8be35..0000000000 --- a/source/java/org/alfresco/repo/search/impl/JCR170Searcher.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2005-2010 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.repo.search.impl; - -import org.alfresco.repo.search.AbstractSearcherComponent; -import org.alfresco.service.cmr.repository.Path; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.search.QueryParameter; -import org.alfresco.service.cmr.search.QueryParameterDefinition; -import org.alfresco.service.cmr.search.ResultSet; -import org.alfresco.service.cmr.search.SearchParameters; -import org.alfresco.service.namespace.QName; - -/** - * Simple searcher against another store using the JSR 170 API. - *

- * This class is not fully implemented and hence still abstract. - */ -public abstract class JCR170Searcher extends AbstractSearcherComponent -{ - public ResultSet query(StoreRef store, String language, String query, Path[] queryOptions, - QueryParameter[] queryParameters) - { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); - } - - public ResultSet query(StoreRef store, String language, String query, Path[] attributePaths, QueryParameterDefinition[] queryParameterDefinitions) - { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); - } - - public ResultSet query(StoreRef store, QName queryId, QueryParameter[] queryParameters) - { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); - } - - public ResultSet query(SearchParameters searchParameters) - { - // TODO Auto-generated method stub - throw new UnsupportedOperationException(); - } -} diff --git a/source/java/org/alfresco/repo/search/impl/NodeSearcher.java b/source/java/org/alfresco/repo/search/impl/NodeSearcher.java index e51b2c4de2..81c7d538ab 100644 --- a/source/java/org/alfresco/repo/search/impl/NodeSearcher.java +++ b/source/java/org/alfresco/repo/search/impl/NodeSearcher.java @@ -75,53 +75,11 @@ public class NodeSearcher try { String xpath = xpathIn; - boolean useJCRXPath = language.equalsIgnoreCase(SearchService.LANGUAGE_JCR_XPATH); List order = null; - // replace element - if (useJCRXPath) - { - order = new ArrayList(); - // We do not allow variable substitution with this pattern - xpath = xpath.replaceAll("element\\(\\s*(\\*|\\w*:\\w*)\\s*,\\s*(\\*|\\w*:\\w*)\\s*\\)", - "$1[subtypeOf(\"$2\")]"); - String split[] = xpath.split("order\\s*by\\s*", 2); - xpath = split[0]; - - if (split.length > 1 && split[1].length() > 0) - { - String clauses[] = split[1].split("\\s,\\s"); - - for (String clause : clauses) - { - if (clause.startsWith("@")) - { - String attribute = clause.replaceFirst("@(\\p{Alpha}[\\w:]*)(?:\\s+(.*))?", "$1"); - String sort = clause.replaceFirst("@(\\p{Alpha}[\\w:]*)(?:\\s+(.*))?", "$2"); - - if (sort.length() == 0) - { - sort = "ascending"; - } - - QName attributeQName = QName.createQName(attribute, namespacePrefixResolver); - order.add(new AttributeOrder(attributeQName, sort.equalsIgnoreCase("ascending"))); - } - else if (clause.startsWith("jcr:score")) - { - // ignore jcr:score ordering - } - else - { - throw new IllegalArgumentException("Malformed order by expression " + split[1]); - } - } - } - } - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searchService, - namespacePrefixResolver, followAllParentLinks, useJCRXPath); + namespacePrefixResolver, followAllParentLinks); NodeServiceXPath nsXPath = new NodeServiceXPath(xpath, documentNavigator, paramDefs); for (String prefix : namespacePrefixResolver.getPrefixes()) { @@ -236,10 +194,8 @@ public class NodeSearcher { try { - boolean useJCRXPath = language.equalsIgnoreCase(SearchService.LANGUAGE_JCR_XPATH); - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searchService, - namespacePrefixResolver, followAllParentLinks, useJCRXPath); + namespacePrefixResolver, followAllParentLinks); NodeServiceXPath nsXPath = new NodeServiceXPath(xpath, documentNavigator, paramDefs); for (String prefix : namespacePrefixResolver.getPrefixes()) { diff --git a/source/test-java/org/alfresco/repo/search/SearcherComponentTest.java b/source/test-java/org/alfresco/repo/search/SearcherComponentTest.java index c7f8a6c065..102905ab0b 100644 --- a/source/test-java/org/alfresco/repo/search/SearcherComponentTest.java +++ b/source/test-java/org/alfresco/repo/search/SearcherComponentTest.java @@ -465,503 +465,6 @@ public class SearcherComponentTest extends TestCase assertTrue("Incorrect result: incorrect node retrieved", answer.contains(n3Ref)); } - public void testJCRRoot() throws Exception - { - - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - NodeServiceXPath xpath; - List list; - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - // create the document navigator - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searcher, - namespacePrefixResolver, false, true); - - xpath = new NodeServiceXPath("/jcr:root", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root/*", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(2, list.size()); - - xpath = new NodeServiceXPath("/*/*", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(2, list.size()); - } - - public void testBooleanFunctions() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - NodeServiceXPath xpath; - List list; - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - // create the document navigator - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searcher, - namespacePrefixResolver, false, true); - - xpath = new NodeServiceXPath("/jcr:root[true()]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root[false()]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root[not(true())]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root[not(false())]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - } - - public void testMutiValueProperties() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - NodeServiceXPath xpath; - List list; - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - namespacePrefixResolver.registerNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE); - // create the document navigator - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searcher, - namespacePrefixResolver, false, true); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp = 'first']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp = 'second']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp = 'third']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp != 'third']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp < 'e']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp > 'e']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp < 'first']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp <= 'first']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp > 'third']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvp >= 'third']", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvi < 1]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvi <= 1]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvi > 3]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(0, list.size()); - - xpath = new NodeServiceXPath("/jcr:root//*[@test:mvi >= 3]", documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - } - - public void testElementNodeTest() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - NodeServiceXPath xpath; - List list; - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - namespacePrefixResolver.registerNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE); - // create the document navigator - DocumentNavigator documentNavigator = new DocumentNavigator(dictionaryService, nodeService, searcher, - namespacePrefixResolver, false, true); - - xpath = new NodeServiceXPath("//element(*, *)".replaceAll( - "element\\(\\s*(\\*|\\$?\\w*:\\w*)\\s*,\\s*(\\*|\\$?\\w*:\\w*)\\s*\\)", "$1[subtypeOf(\"$2\")]"), - documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(13, list.size()); - - xpath = new NodeServiceXPath("//element(jcr:root, *)".replaceAll( - "element\\(\\s*(\\*|\\$?\\w*:\\w*)\\s*,\\s*(\\*|\\$?\\w*:\\w*)\\s*\\)", "$1[subtypeOf(\"$2\")]"), - documentNavigator, null); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - QueryParameterDefImpl paramDef; - - paramDef = new QueryParameterDefImpl(QName.createQName("test:type", namespacePrefixResolver), dictionaryService - .getDataType(DataTypeDefinition.QNAME), true, BaseNodeServiceTest.TYPE_QNAME_TEST_CONTENT - .toPrefixString(namespacePrefixResolver)); - xpath = new NodeServiceXPath("//element(*, test:content)".replaceAll( - "element\\(\\s*(\\*|\\$?\\w*:\\w*)\\s*,\\s*(\\*|\\$?\\w*:\\w*)\\s*\\)", "$1[subtypeOf(\"$2\")]"), - documentNavigator, new QueryParameterDefinition[] { paramDef }); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(3, list.size()); - - paramDef = new QueryParameterDefImpl(QName.createQName("test:type", namespacePrefixResolver), dictionaryService - .getDataType(DataTypeDefinition.QNAME), true, BaseNodeServiceTest.TYPE_QNAME_TEST_CONTENT - .toPrefixString(namespacePrefixResolver)); - xpath = new NodeServiceXPath("//element(test:n6_p_n8, test:content)".replaceAll( - "element\\(\\s*(\\*|\\$?\\w*:\\w*)\\s*,\\s*(\\*|\\$?\\w*:\\w*)\\s*\\)", "$1[subtypeOf(\"$2\")]"), - documentNavigator, new QueryParameterDefinition[] { paramDef }); - list = xpath.selectNodes(new ChildAssociationRef(null, null, null, rootNodeRef)); - assertEquals(1, list.size()); - - } - - public void testJCRLike() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - namespacePrefixResolver.registerNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE); - // create the document navigator - // DocumentNavigator documentNavigator = new DocumentNavigator( - // dictionaryService, - // nodeService, - // searcher, - // namespacePrefixResolver, - // false, true); - - List answer = searcher.selectNodes(rootNodeRef, "//*[jcr:like(@test:animal, 'm__k%')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - } - - public void testJCRScore() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - namespacePrefixResolver.registerNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE); - // create the document navigator - // DocumentNavigator documentNavigator = new DocumentNavigator( - // dictionaryService, - // nodeService, - // searcher, - // namespacePrefixResolver, - // false, true); - - List answer; - - answer = searcher.selectNodes(rootNodeRef, "//.", null, namespacePrefixResolver, false); - assertEquals(9, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//.[jcr:score() = 1.0]", null, namespacePrefixResolver, false); - assertEquals(9, answer.size()); - } - - public void testJCRContains() throws Exception - { - BaseNodeServiceTest.buildNodeGraph(nodeService, rootNodeRef); - // commit the node graph - txn.commit(); - - txn = transactionService.getUserTransaction(); - txn.begin(); - - DynamicNamespacePrefixResolver namespacePrefixResolver = new DynamicNamespacePrefixResolver(null); - namespacePrefixResolver.registerNamespace("jcr", "http://www.jcp.org/jcr/1.0"); - namespacePrefixResolver.registerNamespace(BaseNodeServiceTest.TEST_PREFIX, BaseNodeServiceTest.NAMESPACE); - // create the document navigator - // DocumentNavigator documentNavigator = new DocumentNavigator( - // dictionaryService, - // nodeService, - // searcher, - // namespacePrefixResolver, - // false, true); - - List answer; - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text1, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text3, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text3, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text3, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text3, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text3, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text2, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text12, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text13, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text23, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(0, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'bun')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'bun cake')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(@test:text123, 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'bun')]", null, namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher - .selectNodes(rootNodeRef, "//*[jcr:contains(., 'cake')]", null, namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'biscuit')]", null, namespacePrefixResolver, - false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'bun cake')]", null, namespacePrefixResolver, - false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'bun biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - answer = searcher.selectNodes(rootNodeRef, "//*[jcr:contains(., 'bun cake biscuit')]", null, - namespacePrefixResolver, false); - assertEquals(1, answer.size()); - - } - public static void main(String[] args) { String escape = "\\\t\n\""; diff --git a/source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt b/source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt deleted file mode 100644 index 5d1efcc81c..0000000000 --- a/source/test-resources/org/alfresco/jcr/tck/testExcludeList.txt +++ /dev/null @@ -1,2 +0,0 @@ -version=0.6.0 -list=org.apache.jackrabbit.test.api.AddNodeTest,org.apache.jackrabbit.test.api.CheckPermissionTest,org.apache.jackrabbit.test.api.DocumentViewImportTest,org.apache.jackrabbit.test.api.ImpersonateTest,org.apache.jackrabbit.test.api.lock.SetValueLockExceptionTest,org.apache.jackrabbit.test.api.NamespaceRegistryTest,org.apache.jackrabbit.test.api.NodeAddMixinTest,org.apache.jackrabbit.test.api.NodeCanAddMixinTest,org.apache.jackrabbit.test.api.NodeItemIsModifiedTest,org.apache.jackrabbit.test.api.NodeItemIsNewTest,org.apache.jackrabbit.test.api.NodeOrderableChildNodesTest,org.apache.jackrabbit.test.api.NodeRemoveMixinTest,org.apache.jackrabbit.test.api.NodeTest,org.apache.jackrabbit.test.api.NodeUUIDTest,org.apache.jackrabbit.test.api.PropertyItemIsModifiedTest,org.apache.jackrabbit.test.api.PropertyItemIsNewTest,org.apache.jackrabbit.test.api.PropertyTest,org.apache.jackrabbit.test.api.query.ElementTest,org.apache.jackrabbit.test.api.query.GetPersistentQueryPathTest,org.apache.jackrabbit.test.api.query.OrderByDateTest,org.apache.jackrabbit.test.api.query.OrderByDoubleTest,org.apache.jackrabbit.test.api.query.OrderByLongTest,org.apache.jackrabbit.test.api.query.OrderByMultiTypeTest,org.apache.jackrabbit.test.api.query.OrderByStringTest,org.apache.jackrabbit.test.api.query.SaveTest,org.apache.jackrabbit.test.api.query.SQLQueryLevel2Test,org.apache.jackrabbit.test.api.query.XPathQueryLevel2Test,org.apache.jackrabbit.test.api.ReferencesTest,org.apache.jackrabbit.test.api.SerializationTest,org.apache.jackrabbit.test.api.SessionTest,org.apache.jackrabbit.test.api.SetPropertyAssumeTypeTest,org.apache.jackrabbit.test.api.SetPropertyBooleanTest,org.apache.jackrabbit.test.api.SetPropertyCalendarTest,org.apache.jackrabbit.test.api.SetPropertyConstraintViolationExceptionTest,org.apache.jackrabbit.test.api.SetPropertyDoubleTest,org.apache.jackrabbit.test.api.SetPropertyInputStreamTest,org.apache.jackrabbit.test.api.SetPropertyLongTest,org.apache.jackrabbit.test.api.SetPropertyNodeTest,org.apache.jackrabbit.test.api.SetPropertyStringTest,org.apache.jackrabbit.test.api.SetPropertyValueTest,org.apache.jackrabbit.test.api.SetValueBinaryTest,org.apache.jackrabbit.test.api.SetValueBooleanTest,org.apache.jackrabbit.test.api.SetValueConstraintViolationExceptionTest,org.apache.jackrabbit.test.api.SetValueDateTest,org.apache.jackrabbit.test.api.SetValueDoubleTest,org.apache.jackrabbit.test.api.SetValueLongTest,org.apache.jackrabbit.test.api.SetValueReferenceTest,org.apache.jackrabbit.test.api.SetValueStringTest,org.apache.jackrabbit.test.api.SetValueValueFormatExceptionTest,org.apache.jackrabbit.test.api.SetValueVersionExceptionTest,org.apache.jackrabbit.test.api.ValueFactoryTest,org.apache.jackrabbit.test.api.WorkspaceCloneReferenceableTest,org.apache.jackrabbit.test.api.WorkspaceCloneSameNameSibsTest,org.apache.jackrabbit.test.api.WorkspaceCloneTest,org.apache.jackrabbit.test.api.WorkspaceCloneVersionableTest,org.apache.jackrabbit.test.api.WorkspaceCopyBetweenWorkspacesReferenceableTest,org.apache.jackrabbit.test.api.WorkspaceCopyBetweenWorkspacesSameNameSibsTest,org.apache.jackrabbit.test.api.WorkspaceCopyBetweenWorkspacesTest,org.apache.jackrabbit.test.api.WorkspaceCopyBetweenWorkspacesVersionableTest,org.apache.jackrabbit.test.api.WorkspaceCopyReferenceableTest,org.apache.jackrabbit.test.api.WorkspaceCopySameNameSibsTest,org.apache.jackrabbit.test.api.WorkspaceCopyTest,org.apache.jackrabbit.test.api.WorkspaceCopyVersionableTest,org.apache.jackrabbit.test.api.WorkspaceMoveReferenceableTest,org.apache.jackrabbit.test.api.WorkspaceMoveSameNameSibsTest,org.apache.jackrabbit.test.api.WorkspaceMoveTest,org.apache.jackrabbit.test.api.WorkspaceMoveVersionableTest,org.apache.jackrabbit.test.api.version.CheckinTest,org.apache.jackrabbit.test.api.version.CheckoutTest,org.apache.jackrabbit.test.api.version.GetContainingHistoryTest,org.apache.jackrabbit.test.api.version.GetCreatedTest,org.apache.jackrabbit.test.api.version.GetPredecessorsTest,org.apache.jackrabbit.test.api.version.GetReferencesNodeTest,org.apache.jackrabbit.test.api.version.GetVersionableUUIDTest,org.apache.jackrabbit.test.api.version.MergeCancelMergeTest,org.apache.jackrabbit.test.api.version.MergeCheckedoutSubNodeTest,org.apache.jackrabbit.test.api.version.MergeDoneMergeTest,org.apache.jackrabbit.test.api.version.MergeNodeIteratorTest,org.apache.jackrabbit.test.api.version.MergeNodeTest,org.apache.jackrabbit.test.api.version.MergeNonVersionableSubNodeTest,org.apache.jackrabbit.test.api.version.MergeSubNodeTest,org.apache.jackrabbit.test.api.version.OnParentVersionAbortTest,org.apache.jackrabbit.test.api.version.OnParentVersionComputeTest,org.apache.jackrabbit.test.api.version.OnParentVersionCopyTest,org.apache.jackrabbit.test.api.version.OnParentVersionIgnoreTest,org.apache.jackrabbit.test.api.version.OnParentVersionInitializeTest,org.apache.jackrabbit.test.api.version.RemoveVersionTest,org.apache.jackrabbit.test.api.version.RestoreTest,org.apache.jackrabbit.test.api.version.SessionMoveVersionExceptionTest,org.apache.jackrabbit.test.api.version.VersionGraphTest,org.apache.jackrabbit.test.api.version.VersionHistoryTest,org.apache.jackrabbit.test.api.version.VersionLabelTest,org.apache.jackrabbit.test.api.version.VersionStorageTest,org.apache.jackrabbit.test.api.version.VersionTest,org.apache.jackrabbit.test.api.version.WorkspaceMoveVersionExceptionTest,org.apache.jackrabbit.test.api.version.WorkspaceRestoreTest,org.apache.jackrabbit.test.api.lock.LockTest,org.apache.jackrabbit.test.api.query.SQLJcrPathTest,org.apache.jackrabbit.test.api.query.SQLJoinTest,org.apache.jackrabbit.test.api.query.SQLOrderByTest,org.apache.jackrabbit.test.api.query.SQLPathTest,org.apache.jackrabbit.test.api.observation.AddEventListenerTest,org.apache.jackrabbit.test.api.observation.EventIteratorTest,org.apache.jackrabbit.test.api.observation.EventTest,org.apache.jackrabbit.test.api.observation.GetRegisteredEventListenersTest,org.apache.jackrabbit.test.api.observation.LockingTest,org.apache.jackrabbit.test.api.observation.NodeAddedTest,org.apache.jackrabbit.test.api.observation.NodeMovedTest,org.apache.jackrabbit.test.api.observation.NodeRemovedTest,org.apache.jackrabbit.test.api.observation.NodeReorderTest,org.apache.jackrabbit.test.api.observation.PropertyAddedTest,org.apache.jackrabbit.test.api.observation.PropertyChangedTest,org.apache.jackrabbit.test.api.observation.PropertyRemovedTest,org.apache.jackrabbit.test.api.observation.WorkspaceOperationTest,org.apache.jackrabbit.test.api.query.TextNodeTest,org.apache.jackrabbit.test.api.SessionUUIDTest \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/docview.xml b/source/test-resources/org/alfresco/jcr/test/docview.xml deleted file mode 100644 index 25fd8d1296..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/docview.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/myModel.xml b/source/test-resources/org/alfresco/jcr/test/myModel.xml deleted file mode 100644 index f142e93f43..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/myModel.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - My test model - 1.0 - - - - - - - - - - - - - - A - cm:folder - - - - my:b - false - false - - - - - my:baseAspect - - - - - B - cm:folder - - my:baseAspect - - - - - C - cm:folder - - - - false - true - - - sys:base - false - true - - false - - - - - - - - - - Base Aspect - - - - - \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/sysview.xml b/source/test-resources/org/alfresco/jcr/test/sysview.xml deleted file mode 100644 index ab7025b359..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/sysview.xml +++ /dev/null @@ -1,682 +0,0 @@ - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36110c2e-68bf-11da-98b9-375bcb5cbca6 - - - true - - - 3.141592653589793 - - - 36110c2e-68bf-11da-98b9-375bcb5cbca6 - - - 2005-09-16T19:20:05.034+01:00 - - - 90834953485278298 - - - jcrtest:test - - - workspace - - - 36110c2e-68bf-11da-98b9-375bcb5cbca6 - - - 2005-09-16T20:20:05.555+01:00 - - - test - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36137d2f-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 36137d2f-68bf-11da-98b9-375bcb5cbca6 - - - 36137d2f-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36137d30-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 36137d30-68bf-11da-98b9-375bcb5cbca6 - - - 36137d30-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3615c721-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 3615c721-68bf-11da-98b9-375bcb5cbca6 - - - 3615c721-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3615c722-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 3615c722-68bf-11da-98b9-375bcb5cbca6 - - - 3615c722-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36183823-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 36183823-68bf-11da-98b9-375bcb5cbca6 - - - value one - value two - value three - - - 36183823-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - cm:content - - - cm:auditable - sys:referenceable - mix:referenceable - - - 36183824-68bf-11da-98b9-375bcb5cbca6 - - - System - - - 2005-12-09T14:22:21.676Z - - - 36183824-68bf-11da-98b9-375bcb5cbca6 - - - System - - - workspace - - - dHJ1ZQ== - - - Test Content - - - test - - - 2005-12-09T14:22:21.660Z - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 361f6416-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - 361f6416-68bf-11da-98b9-375bcb5cbca6 - - - 361f6416-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3621ae07-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - a - - - 3621ae07-68bf-11da-98b9-375bcb5cbca6 - - - 3621ae07-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3621ae08-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - c - - - 3621ae08-68bf-11da-98b9-375bcb5cbca6 - - - 3621ae08-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3621ae09-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - e - - - 3621ae09-68bf-11da-98b9-375bcb5cbca6 - - - 3621ae09-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36241f0a-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - g - - - 36241f0a-68bf-11da-98b9-375bcb5cbca6 - - - 36241f0a-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 36241f0b-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - b - - - 36241f0b-68bf-11da-98b9-375bcb5cbca6 - - - 36241f0b-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3626900c-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - d - - - 3626900c-68bf-11da-98b9-375bcb5cbca6 - - - 3626900c-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3628d9fd-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - f - - - 3628d9fd-68bf-11da-98b9-375bcb5cbca6 - - - 3628d9fd-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testtype - - - sys:referenceable - mix:referenceable - - - 3628d9fe-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - h - - - 3628d9fe-68bf-11da-98b9-375bcb5cbca6 - - - 3628d9fe-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - - jcrtest:testdoc - - - sys:referenceable - mix:referenceable - - - 362b4aff-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - Doc 1 - - - 362b4aff-68bf-11da-98b9-375bcb5cbca6 - - - 362b4aff-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 362d94f0-68bf-11da-98b9-375bcb5cbca6 - - - P 1 1 - - - workspace - - - 362d94f0-68bf-11da-98b9-375bcb5cbca6 - - - 362d94f0-68bf-11da-98b9-375bcb5cbca6 - - - A bit of wiffle - - - test - - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 362d94f1-68bf-11da-98b9-375bcb5cbca6 - - - P 1 2 - - - workspace - - - 362d94f1-68bf-11da-98b9-375bcb5cbca6 - - - 362d94f1-68bf-11da-98b9-375bcb5cbca6 - - - More whitterings - - - test - - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 362d94f2-68bf-11da-98b9-375bcb5cbca6 - - - P 1 3 - - - workspace - - - 362d94f2-68bf-11da-98b9-375bcb5cbca6 - - - 362d94f2-68bf-11da-98b9-375bcb5cbca6 - - - Carrot, spud, turnip and leek. - - - test - - - - - - jcrtest:testdoc - - - sys:referenceable - mix:referenceable - - - 363005f3-68bf-11da-98b9-375bcb5cbca6 - - - workspace - - - Doc 2 - - - 363005f3-68bf-11da-98b9-375bcb5cbca6 - - - 363005f3-68bf-11da-98b9-375bcb5cbca6 - - - test - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 363005f4-68bf-11da-98b9-375bcb5cbca6 - - - P 2 1 - - - workspace - - - 363005f4-68bf-11da-98b9-375bcb5cbca6 - - - 363005f4-68bf-11da-98b9-375bcb5cbca6 - - - tiger, lion - - - test - - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 363276f5-68bf-11da-98b9-375bcb5cbca6 - - - P 2 2 - - - workspace - - - 363276f5-68bf-11da-98b9-375bcb5cbca6 - - - 363276f5-68bf-11da-98b9-375bcb5cbca6 - - - biscuit, bun, cake - - - test - - - - - jcrtest:testpara - - - sys:referenceable - mix:referenceable - - - 363276f6-68bf-11da-98b9-375bcb5cbca6 - - - P 2 3 - - - workspace - - - 363276f6-68bf-11da-98b9-375bcb5cbca6 - - - 363276f6-68bf-11da-98b9-375bcb5cbca6 - - - penguin, hawk, dove - - - test - - - - - \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/test-context.xml b/source/test-resources/org/alfresco/jcr/test/test-context.xml deleted file mode 100644 index 00037c113f..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/test-context.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - org/alfresco/jcr/test/testModel.xml - org/alfresco/jcr/test/myModel.xml - - - - - diff --git a/source/test-resources/org/alfresco/jcr/test/testContent.txt b/source/test-resources/org/alfresco/jcr/test/testContent.txt deleted file mode 100644 index f32a5804e2..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/testContent.txt +++ /dev/null @@ -1 +0,0 @@ -true \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/testData.xml b/source/test-resources/org/alfresco/jcr/test/testData.xml deleted file mode 100644 index 49c8bf88e0..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/testData.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - true - 2005-09-16T18:20:05.034Z - 3.141592653589793 - 90834953485278298 - {http://www.alfresco.org/test/jcr/1.0}test - 2005-09-16T20:20:05.555+01:00 - - - - - - - - - - - - - - - - value one - value two - value three - - - - - - Test Content - contentUrl=org/alfresco/jcr/test/testContent.txt|mimetype=text/plain|size=|encoding=UTF-8 - - - - - - - - a - - - c - - - e - - - g - - - b - - - d - - - f - - - h - - - Doc 1 - - - P 1 1 - A bit of wiffle - - - P 1 2 - More whitterings - - - P 1 3 - Carrot, spud, turnip and leek. - - - - - Doc 2 - - - P 2 1 - tiger, lion - - - P 2 2 - biscuit, bun, cake - - - P 2 3 - penguin, hawk, dove - - - - - - - - - - diff --git a/source/test-resources/org/alfresco/jcr/test/testModel.xml b/source/test-resources/org/alfresco/jcr/test/testModel.xml deleted file mode 100644 index 75a8f640c7..0000000000 --- a/source/test-resources/org/alfresco/jcr/test/testModel.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - JCR Test Model Definitions - 1.0 - - - - - - - - - - - - - - Base Test Type - sys:base - - - - sys:base - - - - - - - Test Type - jcrtest:basetesttype - - - d:boolean - - - d:date - - - d:double - - - d:long - - - d:qname - - - d:text - - - d:text - true - - - d:text - - - - - - Test Doc Type - jcrtest:basetesttype - - - d:text - - - - - - Test Doc Type - sys:base - - - d:text - - - d:text - - - - - - Test Set Properties - jcrtest:basetesttype - - - d:boolean - - - d:boolean - true - - - d:date - - - d:date - true - - - d:double - - - d:double - true - - - d:long - - - d:long - true - - - d:qname - - - d:qname - true - - - d:text - - - d:text - true - - - d:content - - - d:noderef - - - d:noderef - true - - - d:any - - - d:any - true - - - - - - - \ No newline at end of file diff --git a/source/test-resources/org/alfresco/jcr/test/testQuick.jpg b/source/test-resources/org/alfresco/jcr/test/testQuick.jpg deleted file mode 100644 index 08473b8e8b65fa2ce2cb481ab31e5b18862e4515..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26445 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