From ae909e741310d75a74c8460e028a72511e3a43d6 Mon Sep 17 00:00:00 2001 From: David Caruana Date: Thu, 4 Sep 2008 11:08:13 +0000 Subject: [PATCH] Merge from SEAMIST3 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@10730 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/cmis-api-context.xml | 41 +- config/alfresco/model/cmisModel.xml | 44 +- .../java/org/alfresco/cmis/CMISService.java | 463 ++++++ .../cmis/dictionary/BaseCMISTest.java | 11 +- .../dictionary/CMISDictionaryService.java | 64 +- .../cmis/dictionary/CMISDictionaryTest.java | 20 +- .../alfresco/cmis/dictionary/CMISMapping.java | 185 ++- .../dictionary/CMISPropertyDefinition.java | 51 +- .../cmis/dictionary/CMISPropertyType.java | 6 +- .../alfresco/cmis/dictionary/CMISScope.java | 37 +- .../cmis/dictionary/CMISTypeDefinition.java | 139 +- .../cmis/dictionary/ContentStreamAllowed.java | 34 + .../property/AbstractPropertyAccessor.java | 15 + .../property/CMISPropertyServiceImpl.java | 67 +- .../property/CMISPropertyServiceTest.java | 177 ++- .../property/MappingPropertyAccessor.java | 3 +- .../property/ObjectIdPropertyAccessor.java | 25 +- .../ObjectTypeIdPropertyAccessor.java | 9 +- .../cmis/property/ParentPropertyAccessor.java | 11 +- ...ionSeriesCheckedOutIdPropertyAccessor.java | 3 +- .../VersionSeriesIdPropertyAccessor.java | 59 + .../cmis/search/CMISQueryOptions.java | 351 +++++ .../cmis/search/CMISQueryService.java | 68 + .../alfresco/cmis/search/CMISResultSet.java | 84 ++ .../cmis/search/CMISResultSetColumn.java | 55 + .../cmis/search/CMISResultSetMetaData.java | 78 + .../cmis/search/CMISResultSetRow.java | 83 ++ .../cmis/search/CMISResultSetSelector.java | 49 + .../cmis/search/FullTextSearchSupport.java | 34 + .../org/alfresco/cmis/search/JoinSupport.java | 34 + .../org/alfresco/cmis/search/QueryTest.java | 1001 +------------ .../cmis/search/impl/CMISQueryParser.java | 1078 ++++++++++++++ .../search/impl/CMISQueryServiceImpl.java | 120 ++ .../search/impl/lucene/ADMLuceneTest.java | 4 +- .../search/impl/lucene/LuceneResultSet.java | 2 +- .../alfresco/repo/search/impl/parsers/CMIS.g | 37 +- .../repo/search/impl/parsers/CMIS.tokens | 8 +- .../repo/search/impl/parsers/CMISLexer.java | 1260 ++++++++--------- .../repo/search/impl/parsers/CMISParser.java | 620 ++++---- .../impl/querymodel/FunctionArgument.java | 34 + .../impl/querymodel/QueryModelFactory.java | 2 + .../querymodel/impl/BaseFunctionArgument.java | 87 ++ .../impl/lucene/LuceneFunctionArgument.java | 50 + .../impl/lucene/LuceneQueryModelFactory.java | 9 + .../service/cmr/search/SearchParameters.java | 2 +- 45 files changed, 4443 insertions(+), 2171 deletions(-) create mode 100644 source/java/org/alfresco/cmis/CMISService.java create mode 100644 source/java/org/alfresco/cmis/dictionary/ContentStreamAllowed.java create mode 100644 source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java create mode 100644 source/java/org/alfresco/cmis/search/CMISQueryOptions.java create mode 100644 source/java/org/alfresco/cmis/search/CMISQueryService.java create mode 100644 source/java/org/alfresco/cmis/search/CMISResultSet.java create mode 100644 source/java/org/alfresco/cmis/search/CMISResultSetColumn.java create mode 100644 source/java/org/alfresco/cmis/search/CMISResultSetMetaData.java create mode 100644 source/java/org/alfresco/cmis/search/CMISResultSetRow.java create mode 100644 source/java/org/alfresco/cmis/search/CMISResultSetSelector.java create mode 100644 source/java/org/alfresco/cmis/search/FullTextSearchSupport.java create mode 100644 source/java/org/alfresco/cmis/search/JoinSupport.java create mode 100644 source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java create mode 100644 source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java create mode 100644 source/java/org/alfresco/repo/search/impl/querymodel/FunctionArgument.java create mode 100644 source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java create mode 100644 source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionArgument.java diff --git a/config/alfresco/cmis-api-context.xml b/config/alfresco/cmis-api-context.xml index 0bf97d9155..96feff9f01 100644 --- a/config/alfresco/cmis-api-context.xml +++ b/config/alfresco/cmis-api-context.xml @@ -2,17 +2,26 @@ + + + + + + + + + + + + true - - - @@ -27,6 +36,32 @@ + + + + + + + 0.43 + workspace/SpacesStore/Company Home + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/config/alfresco/model/cmisModel.xml b/config/alfresco/model/cmisModel.xml index dda60d8698..1582c0d63c 100644 --- a/config/alfresco/model/cmisModel.xml +++ b/config/alfresco/model/cmisModel.xml @@ -12,6 +12,19 @@ + + + + + + NOT_ALLOWED + ALLOWED + REQUIRED + + + + + @@ -55,6 +68,28 @@ false + + Version Label + The version label + d:text + true + true + false + + true + + + + Version series id + The version series id + d:noderef + true + true + false + + false + + Version Series Is Checked Out Is the version series checked out? @@ -96,11 +131,14 @@ Content Stream Allowed Is a content stream allowed? - d:boolean + d:text true true false + + + Content Stream Length @@ -124,7 +162,7 @@ false - + Content Stream Filename The content stream filename d:text @@ -273,7 +311,7 @@ false - + Last Modified By The authority who last modified this object d:text diff --git a/source/java/org/alfresco/cmis/CMISService.java b/source/java/org/alfresco/cmis/CMISService.java new file mode 100644 index 0000000000..e246bf004b --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISService.java @@ -0,0 +1,463 @@ +/* + * Copyright (C) 2005-2008 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.model.Repository; +import org.alfresco.repo.search.QueryParameterDefImpl; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; +import org.alfresco.repo.tenant.TenantDeployer; +import org.alfresco.repo.tenant.TenantDeployerService; +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +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.cmr.search.SearchService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.AbstractLifecycleBean; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; + + +/** + * CMIS Service + * + * @author davidc + */ +public class CMISService implements ApplicationContextAware, ApplicationListener, TenantDeployer +{ + /** + * Types Filter + * + * @author davidc + */ + public enum TypesFilter + { + Folders, + FoldersAndDocuments, + Documents + }; + + /** Query Parameters */ + private static final QName PARAM_PARENT = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "parent"); + private static final QName PARAM_USERNAME = QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "username"); + + /** Shallow search for all files and folders */ + private static final String LUCENE_QUERY_SHALLOW_FOLDERS = + "+PARENT:\"${cm:parent}\" " + + "-TYPE:\"" + ContentModel.TYPE_SYSTEM_FOLDER + "\" " + + "+TYPE:\"" + ContentModel.TYPE_FOLDER + "\""; + + /** Shallow search for all files and folders */ + private static final String LUCENE_QUERY_SHALLOW_FILES = + "+PARENT:\"${cm:parent}\" " + + "-TYPE:\"" + ContentModel.TYPE_SYSTEM_FOLDER + "\" " + + "+TYPE:\"" + ContentModel.TYPE_CONTENT + "\" " + + "-ASPECT:\"" + ContentModel.ASPECT_WORKING_COPY + "\""; + + private static final String LUCENE_QUERY_CHECKEDOUT = + "+@cm\\:workingCopyOwner:${cm:username}"; + + private static final String LUCENE_QUERY_CHECKEDOUT_IN_FOLDER = + "+@cm\\:workingCopyOwner:${cm:username} " + + "+PARENT:\"${cm:parent}\""; + + + // dependencies + private Repository repository; + private RetryingTransactionHelper retryingTransactionHelper; + private DictionaryService dictionaryService; + private SearchService searchService; + private NodeService nodeService; + private TenantDeployerService tenantDeployerService; + private ProcessorLifecycle lifecycle = new ProcessorLifecycle(); + + // CMIS supported version + private String cmisVersion = "[undefined]"; + + // default CMIS store and path + private String defaultRootPath; + private Map defaultRootNodeRefs; + + // data types for query + private DataTypeDefinition nodeRefDataType; + private DataTypeDefinition textDataType; + + + /** + * Sets the supported version of the CMIS specification + * + * @param cmisVersion + */ + public void setCMISSpecVersion(String cmisVersion) + { + this.cmisVersion = cmisVersion; + } + + /** + * Sets the default root path + * + * store_type/store_id/path... + * + * @param path store_type/store_id/path... + */ + public void setDefaultRootPath(String path) + { + defaultRootPath = path; + } + + /** + * Sets the tenant deployer service + * + * @param tenantDeployerService + */ + public void setTenantDeployerService(TenantDeployerService tenantDeployerService) + { + this.tenantDeployerService = tenantDeployerService; + } + + /** + * Sets helper that provides transaction callbacks + */ + public void setTransactionHelper(RetryingTransactionHelper retryingTransactionHelper) + { + this.retryingTransactionHelper = retryingTransactionHelper; + } + + /** + * @param dictionaryService + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + /** + * @param searchService + */ + public void setSearchService(SearchService searchService) + { + this.searchService = searchService; + } + + /** + * @param nodeService + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @param repository + */ + public void setRepository(Repository repository) + { + this.repository = repository; + } + + /* (non-Javadoc) + * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) + */ + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + lifecycle.setApplicationContext(applicationContext); + } + + /* (non-Javadoc) + * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) + */ + public void onApplicationEvent(ApplicationEvent event) + { + lifecycle.onApplicationEvent(event); + } + + /** + * Hooks into Spring Application Lifecycle + */ + private class ProcessorLifecycle extends AbstractLifecycleBean + { + @Override + protected void onBootstrap(ApplicationEvent event) + { + init(); + } + + @Override + protected void onShutdown(ApplicationEvent event) + { + } + } + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantDeployer#onEnableTenant() + */ + public void onEnableTenant() + { + init(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantDeployer#onDisableTenant() + */ + public void onDisableTenant() + { + destroy(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantDeployer#init() + */ + public void init() + { + // initialise data types + nodeRefDataType = dictionaryService.getDataType(DataTypeDefinition.NODE_REF); + textDataType = dictionaryService.getDataType(DataTypeDefinition.TEXT); + + // initialise root node ref + tenantDeployerService.register(this); + if (defaultRootNodeRefs == null) + { + defaultRootNodeRefs = new HashMap(1); + } + getDefaultRootNodeRef(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.tenant.TenantDeployer#destroy() + */ + public void destroy() + { + defaultRootNodeRefs.remove(tenantDeployerService.getCurrentUserDomain()); + } + + /** + * Gets the supported CMIS Version + * + * @return version of CMIS specification supported + */ + public String getCMISVersion() + { + return cmisVersion; + } + + /** + * Gets the default root node path + * + * @return root node path + */ + public String getDefaultRootPath() + { + return defaultRootPath; + } + + /** + * Gets the default root node ref + * + * @return root node ref + */ + public NodeRef getDefaultRootNodeRef() + { + String tenantDomain = tenantDeployerService.getCurrentUserDomain(); + NodeRef defaultNodeRef = defaultRootNodeRefs.get(tenantDomain); + if (defaultNodeRef == null) + { + defaultNodeRef = AuthenticationUtil.runAs(new RunAsWork() + { + public NodeRef doWork() throws Exception + { + return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback() + { + public NodeRef execute() throws Exception + { + return repository.findNodeRef("path", defaultRootPath.split("/")); + }; + }); + } + }, AuthenticationUtil.getSystemUserName()); + + if (defaultNodeRef == null) + { + throw new AlfrescoRuntimeException("Default root folder path '" + defaultRootPath + "' not found"); + } + defaultRootNodeRefs.put(tenantDomain, defaultNodeRef); + } + return defaultNodeRef; + } + + /** + * Gets the default store ref + * + * @return store ref + */ + public StoreRef getDefaultRootStoreRef() + { + return getDefaultRootNodeRef().getStoreRef(); + } + + /** + * Query for node children + * + * @param parent node to query children for + * @param typesFilter types filter + * @return children of node + */ + public NodeRef[] getChildren(NodeRef parent, TypesFilter typesFilter) + { + if (typesFilter == TypesFilter.FoldersAndDocuments) + { + NodeRef[] folders = queryChildren(parent, TypesFilter.Folders); + NodeRef[] docs = queryChildren(parent, TypesFilter.Documents); + NodeRef[] foldersAndDocs = new NodeRef[folders.length + docs.length]; + System.arraycopy(folders, 0, foldersAndDocs, 0, folders.length); + System.arraycopy(docs, 0, foldersAndDocs, folders.length, docs.length); + return foldersAndDocs; + } + else if (typesFilter == TypesFilter.Folders) + { + NodeRef[] folders = queryChildren(parent, TypesFilter.Folders); + return folders; + } + else if (typesFilter == TypesFilter.Documents) + { + NodeRef[] docs = queryChildren(parent, TypesFilter.Documents); + return docs; + } + + return new NodeRef[0]; + } + + /** + * Query for checked out items + * + * @param username for user + * @param folder (optional) within folder + * @param includeDescendants true => include descendants of folder, false => only children of folder + * @return checked out items + */ + public NodeRef[] getCheckedOut(String username, NodeRef folder, boolean includeDescendants) + { + SearchParameters params = new SearchParameters(); + params.setLanguage(SearchService.LANGUAGE_LUCENE); + QueryParameterDefinition usernameDef = new QueryParameterDefImpl(PARAM_USERNAME, textDataType, true, username); + params.addQueryParameterDefinition(usernameDef); + + if (folder == null) + { + // get all checked-out items + params.setQuery(LUCENE_QUERY_CHECKEDOUT); + params.addStore(getDefaultRootStoreRef()); + } + else + { + // get all checked-out items within folder + // NOTE: special-case for all descendants in root folder (treat as all checked-out items) + if (includeDescendants && nodeService.getRootNode(folder.getStoreRef()) == folder) + { + // get all checked-out items within specified folder store + params.setQuery(LUCENE_QUERY_CHECKEDOUT); + params.addStore(folder.getStoreRef()); + } + else + { + // TODO: implement descendants of folder + params.setQuery(LUCENE_QUERY_CHECKEDOUT_IN_FOLDER); + params.addStore(folder.getStoreRef()); + QueryParameterDefinition parentDef = new QueryParameterDefImpl(PARAM_PARENT, nodeRefDataType, true, folder.toString()); + params.addQueryParameterDefinition(parentDef); + } + } + + ResultSet resultSet = null; + try + { + resultSet = searchService.query(params); + List results = resultSet.getNodeRefs(); + NodeRef[] nodeRefs = new NodeRef[results.size()]; + return results.toArray(nodeRefs); + } + finally + { + if (resultSet != null) resultSet.close(); + } + } + + /** + * Query children helper + * + * NOTE: Queries for folders only or documents only + * + * @param parent node to query children for + * @param typesFilter folders or documents + * @return node children + */ + private NodeRef[] queryChildren(NodeRef parent, TypesFilter typesFilter) + { + SearchParameters params = new SearchParameters(); + params.setLanguage(SearchService.LANGUAGE_LUCENE); + params.addStore(parent.getStoreRef()); + QueryParameterDefinition parentDef = new QueryParameterDefImpl(PARAM_PARENT, nodeRefDataType, true, parent.toString()); + params.addQueryParameterDefinition(parentDef); + + if (typesFilter == TypesFilter.Folders) + { + params.setQuery(LUCENE_QUERY_SHALLOW_FOLDERS); + } + else if (typesFilter == TypesFilter.Documents) + { + params.setQuery(LUCENE_QUERY_SHALLOW_FILES); + } + + ResultSet resultSet = null; + try + { + resultSet = searchService.query(params); + List results = resultSet.getNodeRefs(); + NodeRef[] nodeRefs = new NodeRef[results.size()]; + return results.toArray(nodeRefs); + } + finally + { + if (resultSet != null) resultSet.close(); + } + } + +} diff --git a/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java b/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java index 269e0e1d2e..7f19fd8c3d 100644 --- a/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java +++ b/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java @@ -32,6 +32,7 @@ import javax.transaction.UserTransaction; import junit.framework.TestCase; import org.alfresco.cmis.property.CMISPropertyService; +import org.alfresco.cmis.search.CMISQueryService; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; @@ -56,6 +57,8 @@ public abstract class BaseCMISTest extends TestCase { private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(); + protected CMISMapping cmisMapping; + protected CMISDictionaryService cmisDictionaryService; protected DictionaryService dictionaryService; @@ -77,19 +80,22 @@ public abstract class BaseCMISTest extends TestCase protected ServiceRegistry serviceRegistry; protected NamespaceService namespaceService; + + protected CMISQueryService cmisQueryService; public void setUp() throws Exception { serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); + cmisMapping = (CMISMapping) ctx.getBean("CMISMapping"); cmisDictionaryService = (CMISDictionaryService) ctx.getBean("CMISDictionaryService"); cmisPropertyService = (CMISPropertyService) ctx.getBean("CMISPropertyService"); + cmisQueryService = (CMISQueryService) ctx.getBean("CMISQueryService"); dictionaryService = (DictionaryService) ctx.getBean("dictionaryService"); nodeService = (NodeService) ctx.getBean("nodeService"); fileFolderService = (FileFolderService) ctx.getBean("fileFolderService"); namespaceService = (NamespaceService) ctx.getBean("namespaceService"); - transactionService = (TransactionService) ctx.getBean("transactionComponent"); authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent"); @@ -100,14 +106,11 @@ public abstract class BaseCMISTest extends TestCase String storeName = "CMISTest-" + getName() + "-" + (new Date().getTime()); StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, storeName); rootNodeRef = nodeService.getRootNode(storeRef); - - } @Override protected void tearDown() throws Exception { - if (testTX.getStatus() == Status.STATUS_ACTIVE) { testTX.rollback(); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryService.java b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryService.java index 91736c7a31..ddc2f8adab 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryService.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryService.java @@ -33,7 +33,6 @@ import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.TypeDefinition; -import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; /** @@ -43,11 +42,10 @@ import org.alfresco.service.namespace.QName; */ public class CMISDictionaryService { - + private CMISMapping cmisMapping; + private DictionaryService dictionaryService; - - private NamespaceService namespaceService; - + private boolean strict = true; /** @@ -61,14 +59,15 @@ public class CMISDictionaryService } /** - * Set the namespace service + * Set the mapping service * - * @param namespaceService + * @param cmisMapping */ - public void setNamespaceService(NamespaceService namespaceService) + public void setCMISMapping(CMISMapping cmisMapping) { - this.namespaceService = namespaceService; + this.cmisMapping = cmisMapping; } + /** * Is the service strict (CMIS types only) @@ -116,25 +115,25 @@ public class CMISDictionaryService for (QName typeQName : alfrescoTypeQNames) { - if (CMISMapping.isValidCmisDocument(dictionaryService, typeQName)) + if (cmisMapping.isValidCmisDocument(typeQName)) { - answer.add(CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, typeQName)); + answer.add(cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, typeQName)); } - else if (CMISMapping.isValidCmisFolder(dictionaryService, typeQName)) + else if (cmisMapping.isValidCmisFolder(typeQName)) { - answer.add(CMISMapping.getCmisTypeId(CMISScope.FOLDER, typeQName)); + answer.add(cmisMapping.getCmisTypeId(CMISScope.FOLDER, typeQName)); } else if (typeQName.equals(CMISMapping.RELATIONSHIP_QNAME)) { - answer.add(CMISMapping.getCmisTypeId(CMISScope.RELATIONSHIP, typeQName)); + answer.add(cmisMapping.getCmisTypeId(CMISScope.RELATIONSHIP, typeQName)); } } for (QName associationName : alfrescoAssociationQNames) { - if (CMISMapping.isValidCmisRelationship(dictionaryService, associationName)) + if (cmisMapping.isValidCmisRelationship(associationName)) { - answer.add(CMISMapping.getCmisTypeId(CMISScope.RELATIONSHIP, associationName)); + answer.add(cmisMapping.getCmisTypeId(CMISScope.RELATIONSHIP, associationName)); } } @@ -154,30 +153,23 @@ public class CMISDictionaryService { case RELATIONSHIP: // Associations - AssociationDefinition associationDefinition = dictionaryService.getAssociation(typeId.getQName()); - if (associationDefinition != null) + if (cmisMapping.isValidCmisRelationship(typeId.getQName())) { - if (CMISMapping.isValidCmisRelationship(dictionaryService, typeId.getQName())) - { - return new CMISTypeDefinition(dictionaryService, namespaceService, typeId); - } - else - { - return null; - } + return new CMISTypeDefinition(cmisMapping, typeId); } else { return null; } + case DOCUMENT: case FOLDER: TypeDefinition typeDefinition = dictionaryService.getType(typeId.getQName()); if (typeDefinition != null) { - if (CMISMapping.isValidCmisType(dictionaryService, typeId.getQName())) + if (cmisMapping.isValidCmisType(typeId.getQName())) { - return new CMISTypeDefinition(dictionaryService, namespaceService, typeId); + return new CMISTypeDefinition(cmisMapping, typeId); } else { @@ -210,7 +202,7 @@ public class CMISDictionaryService AssociationDefinition associationDefinition = dictionaryService.getAssociation(typeId.getQName()); if (associationDefinition != null) { - if (CMISMapping.isValidCmisRelationship(dictionaryService, typeId.getQName())) + if (cmisMapping.isValidCmisRelationship(typeId.getQName())) { return getPropertyDefinitions(CMISMapping.RELATIONSHIP_TYPE_ID); } @@ -227,13 +219,13 @@ public class CMISDictionaryService TypeDefinition typeDefinition = dictionaryService.getType(typeId.getQName()); if (typeDefinition != null) { - if (CMISMapping.isValidCmisDocumentOrFolder(dictionaryService, typeId.getQName()) || typeId.getQName().equals(CMISMapping.RELATIONSHIP_QNAME)) + if (cmisMapping.isValidCmisDocumentOrFolder(typeId.getQName()) || typeId.getQName().equals(CMISMapping.RELATIONSHIP_QNAME)) { for (QName qname : typeDefinition.getProperties().keySet()) { - if (CMISMapping.getPropertyType(dictionaryService, qname) != null) + if (cmisMapping.getPropertyType(qname) != null) { - CMISPropertyDefinition cmisPropDefinition = new CMISPropertyDefinition(dictionaryService, namespaceService, qname); + CMISPropertyDefinition cmisPropDefinition = new CMISPropertyDefinition(cmisMapping, qname, typeDefinition.getName()); properties.put(cmisPropDefinition.getPropertyName(), cmisPropDefinition); } } @@ -241,19 +233,19 @@ public class CMISDictionaryService { for (QName qname : aspect.getProperties().keySet()) { - if (CMISMapping.getPropertyType(dictionaryService, qname) != null) + if (cmisMapping.getPropertyType(qname) != null) { - CMISPropertyDefinition cmisPropDefinition = new CMISPropertyDefinition(dictionaryService, namespaceService, qname); + CMISPropertyDefinition cmisPropDefinition = new CMISPropertyDefinition(cmisMapping, qname, typeDefinition.getName()); properties.put(cmisPropDefinition.getPropertyName(), cmisPropDefinition); } } } } - if (CMISMapping.isValidCmisDocumentOrFolder(dictionaryService, typeId.getQName())) + if (cmisMapping.isValidCmisDocumentOrFolder(typeId.getQName())) { // Add CMIS properties if required - if (!CMISMapping.isCmisCoreType(typeId.getQName())) + if (!cmisMapping.isCmisCoreType(typeId.getQName())) { properties.putAll(getPropertyDefinitions(typeId.getRootTypeId())); } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java index 9fd3f244c4..c303736cc3 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISDictionaryTest.java @@ -34,9 +34,8 @@ public class CMISDictionaryTest extends BaseCMISTest System.out.println(name); } assertEquals(3, cmisDictionaryService.getAllObjectTypeIds().size()); - } - + public void testBasicTypeDefinitions() { cmisDictionaryService.setStrict(false); @@ -44,7 +43,21 @@ public class CMISDictionaryTest extends BaseCMISTest { System.out.println(cmisDictionaryService.getType(name)); } + } + public void testTypeIds() + { + cmisDictionaryService.setStrict(false); + for (CMISTypeId name : cmisDictionaryService.getAllObjectTypeIds()) + { + String typeId = name.getTypeId(); + CMISTypeId lookup = cmisMapping.getCmisTypeId(typeId); + assertEquals(name, lookup); + System.out.println(name + " => " + lookup); + CMISTypeDefinition type = cmisDictionaryService.getType(lookup); + assertNotNull(type); + assertEquals(lookup, type.getObjectTypeId()); + } } public void testBasicProperties() @@ -57,7 +70,6 @@ public class CMISDictionaryTest extends BaseCMISTest System.out.println(name +" -> "+ propertyName); } } - } public void testBasicPropertyDefinitions() @@ -71,7 +83,6 @@ public class CMISDictionaryTest extends BaseCMISTest } } - cmisDictionaryService.setStrict(false); for (CMISTypeId name : cmisDictionaryService.getAllObjectTypeIds()) { @@ -80,6 +91,5 @@ public class CMISDictionaryTest extends BaseCMISTest System.out.println(proDef); } } - } } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java index 80a8339fcd..0bc6c5abb1 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java @@ -27,6 +27,7 @@ package org.alfresco.cmis.dictionary; import java.util.Collection; import java.util.HashMap; +import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.dictionary.AssociationDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; @@ -121,6 +122,10 @@ public class CMISMapping public static String PROP_IS_MAJOR_VERSION = "IS_MAJOR_VERSION"; public static String PROP_IS_LATEST_MAJOR_VERSION = "IS_LATEST_MAJOR_VERSION"; + + public static String PROP_VERSION_LABEL = "VERSION_LABEL"; + + public static String PROP_VERSION_SERIES_ID = "VERSION_SERIES_ID"; public static String PROP_VERSION_SERIES_IS_CHECKED_OUT = "VERSION_SERIES_IS_CHECKED_OUT"; @@ -195,45 +200,118 @@ public class CMISMapping alfrescoPropertyTypesToCimsPropertyTypes.put(DataTypeDefinition.TEXT, CMISPropertyType.STRING); } + + private DictionaryService dictionaryService; + private NamespaceService namespaceService; + + + /** + * Set the dictionary Service + * + * @param dictionaryService + */ + public void setDictionaryService(DictionaryService dictionaryService) + { + this.dictionaryService = dictionaryService; + } + + /** + * Gets the dictionary service + * + * @return dictionaryService + */ + /*package*/ DictionaryService getDictionaryService() + { + return this.dictionaryService; + } + + /** + * Set the namespace service + * + * @param namespaceService + */ + public void setNamespaceService(NamespaceService namespaceService) + { + this.namespaceService = namespaceService; + } + + /** + * Gets the namespace service + * + * @return namespaceService + */ + /*package*/ NamespaceService getNamespaceService() + { + return this.namespaceService; + } + /** * Id this a CMIS core type defined in the Alfresco CMIS model * * @param typeQName * @return */ - public static boolean isCmisCoreType(QName typeQName) + public boolean isCmisCoreType(QName typeQName) { return qNameToCmisTypeId.get(typeQName) != null; } /** - * Get the CMIS Type Id given the Alfresco QName for the type in any Alfresco model + * Gets the CMIS Type Id given the serialized type Id + * + * @param typeId type id in the form of /_ + * @return + */ + public CMISTypeId getCmisTypeId(String typeId) + { + // Is it a CMIS root object type id? + if (typeId.equals(DOCUMENT_TYPE_ID.getTypeId())) + { + return DOCUMENT_TYPE_ID; + } + else if (typeId.equals(FOLDER_TYPE_ID.getTypeId())) + { + return FOLDER_TYPE_ID; + } + else if (typeId.equals(RELATIONSHIP_TYPE_ID.getTypeId())) + { + return RELATIONSHIP_TYPE_ID; + } + // TODO: Policy root object type + + // Is it an Alfresco type id? + if (typeId.length() < 4 || typeId.charAt(1) != '/') + { + throw new AlfrescoRuntimeException("Malformed type id '" + typeId + "'"); + } + + // Alfresco type id + CMISScope scope = CMISScope.toScope(typeId.charAt(0)); + if (scope == null) + { + throw new AlfrescoRuntimeException("Malformed type id '" + typeId + "'; discriminator " + typeId.charAt(0) + " unknown"); + } + QName typeQName = QName.resolveToQName(namespaceService, typeId.substring(2).replace('_', ':')); + + // Construct CMIS Type Id + return new CMISTypeId(scope, typeQName, typeId); + } + + /** + * Gets the CMIS Type Id given the Alfresco QName for the type in any Alfresco model * * @param typeQName * @return */ - public static CMISTypeId getCmisTypeId(CMISScope scope, QName typeQName) + public CMISTypeId getCmisTypeId(CMISScope scope, QName typeQName) { CMISTypeId typeId = qNameToCmisTypeId.get(typeQName); if (typeId == null) { StringBuilder builder = new StringBuilder(128); - switch (scope) - { - case DOCUMENT: - builder.append("D"); - break; - case FOLDER: - builder.append("F"); - break; - case RELATIONSHIP: - builder.append("R"); - break; - default: - builder.append("U"); - break; - } - builder.append(typeQName.toString()); + builder.append(scope.discriminator()); + builder.append("/"); + builder.append(buildPrefixEncodedString(typeQName, false)); return new CMISTypeId(scope, typeQName, builder.toString()); } else @@ -249,12 +327,12 @@ public class CMISMapping * @param typeQName * @return */ - public static String getQueryName(NamespaceService namespaceService, QName typeQName) + public String getQueryName(QName typeQName) { - return buildPrefixEncodedString(namespaceService, typeQName); + return buildPrefixEncodedString(typeQName, true); } - private static String buildPrefixEncodedString(NamespaceService namespaceService, QName qname) + private String buildPrefixEncodedString(QName qname, boolean upperCase) { StringBuilder builder = new StringBuilder(128); @@ -267,11 +345,11 @@ public class CMISMapping } String resolvedPrefix = prefixes.iterator().next(); - builder.append(resolvedPrefix.toUpperCase()); + builder.append(upperCase ? resolvedPrefix.toUpperCase() : resolvedPrefix); builder.append("_"); } - builder.append(qname.getLocalName().toUpperCase()); + builder.append(upperCase ? qname.getLocalName().toUpperCase() : qname.getLocalName()); return builder.toString(); } @@ -283,9 +361,9 @@ public class CMISMapping * @param typeQName * @return */ - public static boolean isValidCmisType(DictionaryService dictionaryService, QName typeQName) + public boolean isValidCmisType(QName typeQName) { - return isValidCmisFolder(dictionaryService, typeQName) || isValidCmisDocument(dictionaryService, typeQName) || isValidCmisRelationship(dictionaryService, typeQName); + return isValidCmisFolder(typeQName) || isValidCmisDocument(typeQName) || isValidCmisRelationship(typeQName); } /** @@ -295,9 +373,9 @@ public class CMISMapping * @param typeQName * @return */ - public static boolean isValidCmisDocumentOrFolder(DictionaryService dictionaryService, QName typeQName) + public boolean isValidCmisDocumentOrFolder(QName typeQName) { - return isValidCmisFolder(dictionaryService, typeQName) || isValidCmisDocument(dictionaryService, typeQName); + return isValidCmisFolder(typeQName) || isValidCmisDocument(typeQName); } /** @@ -307,7 +385,7 @@ public class CMISMapping * @param typeQName * @return */ - public static boolean isValidCmisFolder(DictionaryService dictionaryService, QName typeQName) + public boolean isValidCmisFolder(QName typeQName) { if (typeQName == null) { @@ -340,7 +418,7 @@ public class CMISMapping * @param typeQName * @return */ - public static boolean isValidCmisDocument(DictionaryService dictionaryService, QName typeQName) + public boolean isValidCmisDocument(QName typeQName) { if (typeQName == null) { @@ -374,7 +452,7 @@ public class CMISMapping * @param associationQName * @return */ - public static boolean isValidCmisRelationship(DictionaryService dictionaryService, QName associationQName) + public boolean isValidCmisRelationship(QName associationQName) { if (associationQName == null) { @@ -393,11 +471,11 @@ public class CMISMapping { return false; } - if (!isValidCmisDocumentOrFolder(dictionaryService, getCmisType(associationDefinition.getSourceClass().getName()))) + if (!isValidCmisDocumentOrFolder(getCmisType(associationDefinition.getSourceClass().getName()))) { return false; } - if (!isValidCmisDocumentOrFolder(dictionaryService, getCmisType(associationDefinition.getTargetClass().getName()))) + if (!isValidCmisDocumentOrFolder(getCmisType(associationDefinition.getTargetClass().getName()))) { return false; } @@ -411,7 +489,7 @@ public class CMISMapping * @param typeQName * @return */ - public static QName getCmisType(QName typeQName) + public QName getCmisType(QName typeQName) { QName mapped = alfrescoToCmisTypes.get(typeQName); if (mapped != null) @@ -428,9 +506,9 @@ public class CMISMapping * @param propertyQName * @return */ - public static String getCmisPropertyName(NamespaceService namespaceService, QName propertyQName) + public String getCmisPropertyName(QName propertyQName) { - return buildPrefixEncodedString(namespaceService, propertyQName); + return buildPrefixEncodedString(propertyQName, true); } /** @@ -440,14 +518,21 @@ public class CMISMapping * @param propertyQName * @return */ - public static CMISPropertyType getPropertyType(DictionaryService dictionaryService, QName propertyQName) + public CMISPropertyType getPropertyType(QName propertyQName) { PropertyDefinition propertyDefinition = dictionaryService.getProperty(propertyQName); DataTypeDefinition dataTypeDefinition = propertyDefinition.getDataType(); QName dQName = dataTypeDefinition.getName(); - if (propertyQName.getNamespaceURI().equals(CMIS_MODEL_URI) && dQName.equals(DataTypeDefinition.QNAME)) + if (propertyQName.getNamespaceURI().equals(CMIS_MODEL_URI)) { - return CMISPropertyType.TYPE_ID; + if(dQName.equals(DataTypeDefinition.QNAME) || dQName.equals(DataTypeDefinition.NODE_REF)) + { + return CMISPropertyType.ID; + } + else + { + alfrescoPropertyTypesToCimsPropertyTypes.get(dQName); + } } return alfrescoPropertyTypesToCimsPropertyTypes.get(dQName); @@ -461,7 +546,7 @@ public class CMISMapping * @param cmisPropertyName * @return */ - public static QName getPropertyQName(DictionaryService dictionaryService, NamespaceService namespaceService, String cmisPropertyName) + public QName getPropertyQName(String cmisPropertyName) { // Try the cmis model first - it it matches we are done QName cmisPropertyQName = QName.createQName(CMIS_MODEL_URI, cmisPropertyName); @@ -515,7 +600,7 @@ public class CMISMapping * @param tableName * @return */ - public static QName getAlfrescoClassQNameFromCmisTableName(DictionaryService dictionaryService, NamespaceService namespaceService, String tableName) + public QName getAlfrescoClassQNameFromCmisTableName(String tableName) { if (tableName.equals(DOCUMENT_TYPE_ID.getTypeId())) { @@ -577,4 +662,22 @@ public class CMISMapping return null; } + + /** + * @param namespaceService + * @param propertyQName + * @return + */ + public String getCmisPropertyId(QName propertyQName) + { + if (propertyQName.getNamespaceURI().equals(CMIS_MODEL_URI)) + { + return propertyQName.getLocalName(); + } + else + { + return propertyQName.toString(); + + } + } } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISPropertyDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISPropertyDefinition.java index 16a34902d6..133563ae97 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISPropertyDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISPropertyDefinition.java @@ -39,9 +39,7 @@ import org.alfresco.repo.search.impl.lucene.analysis.PathAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.VerbatimAnalyser; import org.alfresco.service.cmr.dictionary.Constraint; import org.alfresco.service.cmr.dictionary.ConstraintDefinition; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; -import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; /** @@ -53,9 +51,13 @@ public class CMISPropertyDefinition { private String propertyName; + private String propertyId; + private String displayName; private String description; + + private boolean isInherited; private CMISPropertyType propertyType; @@ -81,16 +83,18 @@ public class CMISPropertyDefinition private boolean orderable; - public CMISPropertyDefinition(DictionaryService dictionaryService, NamespaceService namespaceService, QName propertyQName) + public CMISPropertyDefinition(CMISMapping cmisMapping, QName propertyQName, QName typeQName) { - PropertyDefinition propDef = dictionaryService.getProperty(propertyQName); + PropertyDefinition propDef = cmisMapping.getDictionaryService().getProperty(propertyQName); if (propDef.getContainerClass().getName().equals(CMISMapping.RELATIONSHIP_QNAME)) { // Properties of associations - all the same - propertyName = CMISMapping.getCmisPropertyName(namespaceService, propertyQName); + propertyName = cmisMapping.getCmisPropertyName(propertyQName); + propertyId = cmisMapping.getCmisPropertyId(propertyQName); displayName = propDef.getTitle(); description = propDef.getDescription(); - propertyType = CMISMapping.getPropertyType(dictionaryService, propertyQName); + isInherited = false; + propertyType = cmisMapping.getPropertyType(propertyQName); cardinality = propDef.isMultiValued() ? CMISCardinality.MULTI_VALUED : CMISCardinality.SINGLE_VALUED; required = propDef.isMandatory(); defaultValue = propDef.getDefaultValue(); @@ -101,10 +105,19 @@ public class CMISPropertyDefinition else { - propertyName = CMISMapping.getCmisPropertyName(namespaceService, propertyQName); + propertyName = cmisMapping.getCmisPropertyName(propertyQName); + propertyId = cmisMapping.getCmisPropertyId(propertyQName); displayName = propDef.getTitle(); description = propDef.getDescription(); - propertyType = CMISMapping.getPropertyType(dictionaryService, propertyQName); + if(propDef.getContainerClass().isAspect()) + { + isInherited = false; + } + else + { + isInherited = !propDef.getContainerClass().equals(typeQName); + } + propertyType = cmisMapping.getPropertyType(propertyQName); cardinality = propDef.isMultiValued() ? CMISCardinality.MULTI_VALUED : CMISCardinality.SINGLE_VALUED; for (ConstraintDefinition constraintDef : propDef.getConstraints()) { @@ -175,6 +188,16 @@ public class CMISPropertyDefinition { return propertyName; } + + /** + * Get the property id + * + * @return + */ + public String getPropertyId() + { + return propertyId; + } /** * Get the display name @@ -195,6 +218,16 @@ public class CMISPropertyDefinition { return description; } + + /** + * Is the property definition inherited? + * + * @return + */ + public boolean isInherited() + { + return isInherited; + } /** * Get the property type @@ -321,8 +354,10 @@ public class CMISPropertyDefinition StringBuilder builder = new StringBuilder(); builder.append("CMISPropertyDefinition["); builder.append("PropertyName=").append(getPropertyName()).append(", "); + builder.append("PropertyId=").append(getPropertyId()).append(", "); builder.append("DisplayName=").append(getDisplayName()).append(", "); builder.append("Description=").append(getDescription()).append(", "); + builder.append("IsInherited=").append(isInherited()).append(", "); builder.append("PropertyType=").append(getPropertyType()).append(", "); builder.append("Cardinality=").append(getCardinality()).append(", "); builder.append("MaximumLength=").append(getMaximumLength()).append(", "); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISPropertyType.java b/source/java/org/alfresco/cmis/dictionary/CMISPropertyType.java index 04b9b89fec..1d5c25c411 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISPropertyType.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISPropertyType.java @@ -66,9 +66,5 @@ public enum CMISPropertyType /** * ID */ - ID, - /** - * Type Id - */ - TYPE_ID; + ID; } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISScope.java b/source/java/org/alfresco/cmis/dictionary/CMISScope.java index 2eeeab7b06..ca95e76a17 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISScope.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISScope.java @@ -24,6 +24,9 @@ */ package org.alfresco.cmis.dictionary; +import java.util.HashMap; +import java.util.Map; + /** * The scope for a CMIS name @@ -37,5 +40,37 @@ package org.alfresco.cmis.dictionary; */ public enum CMISScope { - OBJECT, RELATIONSHIP, DOCUMENT, FOLDER, POLICY, UNKNOWN; + OBJECT ('O'), + RELATIONSHIP ('R'), + DOCUMENT ('D'), + FOLDER ('F'), + POLICY ('P'), + UNKNOWN ('U'); + + private static Map discriminatorMap = new HashMap(10); + static + { + for (CMISScope scope : CMISScope.values()) + { + discriminatorMap.put(scope.discriminator, scope); + } + } + + private char discriminator; + + CMISScope(char discriminator) + { + this.discriminator = discriminator; + } + + public char discriminator() + { + return discriminator; + } + + public static CMISScope toScope(char discrimator) + { + return discriminatorMap.get(discrimator); + } + } diff --git a/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java index 1b2b6be844..fff7df21c2 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java @@ -32,9 +32,7 @@ import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.AssociationDefinition; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.TypeDefinition; -import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; /** @@ -56,11 +54,17 @@ public class CMISTypeDefinition private String description; + private boolean creatable; + + private boolean fileable; + private boolean queryable; + private boolean controllable; + private boolean versionable; - private String constraints = ""; + private ContentStreamAllowed contentStreamAllowed; private boolean isAssociation; @@ -68,72 +72,80 @@ public class CMISTypeDefinition private ArrayList allowedTargetTypes = new ArrayList(1); - public CMISTypeDefinition(DictionaryService dictionaryService, NamespaceService namespaceService, CMISTypeId typeId) + public CMISTypeDefinition(CMISMapping cmisMapping, CMISTypeId typeId) { switch (typeId.getScope()) { case RELATIONSHIP: - AssociationDefinition associationDefinition = dictionaryService.getAssociation(typeId.getQName()); + AssociationDefinition associationDefinition = cmisMapping.getDictionaryService().getAssociation(typeId.getQName()); if (associationDefinition != null) { objectTypeId = typeId; - objectTypeQueryName = CMISMapping.getQueryName(namespaceService, typeId.getQName()); + objectTypeQueryName = cmisMapping.getQueryName(typeId.getQName()); displayName = associationDefinition.getTitle(); parentTypeId = CMISMapping.RELATIONSHIP_TYPE_ID; - rootTypeQueryName = CMISMapping.getQueryName(namespaceService, CMISMapping.RELATIONSHIP_QNAME); + rootTypeQueryName = cmisMapping.getQueryName(CMISMapping.RELATIONSHIP_QNAME); description = associationDefinition.getDescription(); + creatable = false; + fileable = false; queryable = false; + controllable = false; versionable = false; + contentStreamAllowed = ContentStreamAllowed.NOT_ALLOWED; isAssociation = true; - QName sourceType = CMISMapping.getCmisType(associationDefinition.getSourceClass().getName()); - if (CMISMapping.isValidCmisDocument(dictionaryService, sourceType)) + QName sourceType = cmisMapping.getCmisType(associationDefinition.getSourceClass().getName()); + if (cmisMapping.isValidCmisDocument(sourceType)) { - allowedSourceTypes.add(CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, sourceType)); + allowedSourceTypes.add(cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, sourceType)); } - else if (CMISMapping.isValidCmisFolder(dictionaryService, sourceType)) + else if (cmisMapping.isValidCmisFolder(sourceType)) { - allowedSourceTypes.add(CMISMapping.getCmisTypeId(CMISScope.FOLDER, sourceType)); + allowedSourceTypes.add(cmisMapping.getCmisTypeId(CMISScope.FOLDER, sourceType)); } - QName targetType = CMISMapping.getCmisType(associationDefinition.getTargetClass().getName()); - if (CMISMapping.isValidCmisDocument(dictionaryService, targetType)) + QName targetType = cmisMapping.getCmisType(associationDefinition.getTargetClass().getName()); + if (cmisMapping.isValidCmisDocument(targetType)) { - allowedTargetTypes.add(CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, targetType)); + allowedTargetTypes.add(cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, targetType)); } - else if (CMISMapping.isValidCmisFolder(dictionaryService, targetType)) + else if (cmisMapping.isValidCmisFolder(targetType)) { - allowedTargetTypes.add(CMISMapping.getCmisTypeId(CMISScope.FOLDER, targetType)); + allowedTargetTypes.add(cmisMapping.getCmisTypeId(CMISScope.FOLDER, targetType)); } } else { // TODO: Add CMIS Association mapping?? - TypeDefinition typeDefinition = dictionaryService.getType(typeId.getQName()); + TypeDefinition typeDefinition = cmisMapping.getDictionaryService().getType(typeId.getQName()); objectTypeId = typeId; - objectTypeQueryName = CMISMapping.getQueryName(namespaceService, typeId.getQName()); + objectTypeQueryName = cmisMapping.getQueryName(typeId.getQName()); displayName = typeDefinition.getTitle(); parentTypeId = CMISMapping.RELATIONSHIP_TYPE_ID; - rootTypeQueryName = CMISMapping.getQueryName(namespaceService, CMISMapping.RELATIONSHIP_QNAME); + rootTypeQueryName = cmisMapping.getQueryName(CMISMapping.RELATIONSHIP_QNAME); description = typeDefinition.getDescription(); + creatable = false; + fileable = false; queryable = false; + controllable = false; versionable = false; + contentStreamAllowed = ContentStreamAllowed.NOT_ALLOWED; isAssociation = true; } break; case DOCUMENT: case FOLDER: - TypeDefinition typeDefinition = dictionaryService.getType(typeId.getQName()); + TypeDefinition typeDefinition = cmisMapping.getDictionaryService().getType(typeId.getQName()); if (typeDefinition != null) { objectTypeId = typeId; - objectTypeQueryName = CMISMapping.getQueryName(namespaceService, typeId.getQName()); + objectTypeQueryName = cmisMapping.getQueryName(typeId.getQName()); displayName = typeDefinition.getTitle(); - QName parentTypeQName = CMISMapping.getCmisType(typeDefinition.getParentName()); + QName parentTypeQName = cmisMapping.getCmisType(typeDefinition.getParentName()); if (parentTypeQName == null) { // Core and unknown types @@ -141,32 +153,51 @@ public class CMISTypeDefinition } else { - if (CMISMapping.isValidCmisDocument(dictionaryService, parentTypeQName)) + if (cmisMapping.isValidCmisDocument(parentTypeQName)) { - parentTypeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, parentTypeQName); + parentTypeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, parentTypeQName); } - else if (CMISMapping.isValidCmisFolder(dictionaryService, parentTypeQName)) + else if (cmisMapping.isValidCmisFolder(parentTypeQName)) { - parentTypeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, parentTypeQName); + parentTypeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, parentTypeQName); } } - rootTypeQueryName = CMISMapping.getQueryName(namespaceService, typeId.getRootTypeId().getQName()); + rootTypeQueryName = cmisMapping.getQueryName(typeId.getRootTypeId().getQName()); description = typeDefinition.getDescription(); + creatable = true; + + fileable = true; + queryable = true; + controllable = false; + versionable = false; - List defaultAspects = typeDefinition.getDefaultAspects(); - for (AspectDefinition aspectDefinition : defaultAspects) + + if (typeId.getScope() == CMISScope.DOCUMENT) { - if (aspectDefinition.getName().equals(ContentModel.ASPECT_VERSIONABLE)) + List defaultAspects = typeDefinition.getDefaultAspects(); + for (AspectDefinition aspectDefinition : defaultAspects) { - versionable = true; - break; + if (aspectDefinition.getName().equals(ContentModel.ASPECT_VERSIONABLE)) + { + versionable = true; + break; + } } } + + if (typeId.getScope() == CMISScope.DOCUMENT) + { + contentStreamAllowed = ContentStreamAllowed.ALLOWED; + } + else + { + contentStreamAllowed = ContentStreamAllowed.NOT_ALLOWED; + } } break; @@ -175,7 +206,6 @@ public class CMISTypeDefinition break; } - } /** @@ -241,6 +271,26 @@ public class CMISTypeDefinition return description; } + /** + * Can objects of this type be created? + * + * @return + */ + public boolean isCreatable() + { + return creatable; + } + + /** + * Are objects of this type fileable? + * + * @return + */ + public boolean isFileable() + { + return fileable; + } + /** * Is this type queryable? If not, the type may not appear in the FROM clause of a query. This property of the type * is not inherited in the type hierarchy. It is set on each type. @@ -252,6 +302,16 @@ public class CMISTypeDefinition return queryable; } + /** + * Are objects of this type controllable. + * + * @return + */ + public boolean isControllable() + { + return controllable; + } + /** * Is this type versionable? If true this implies all instances of the type are versionable. * @@ -263,13 +323,13 @@ public class CMISTypeDefinition } /** - * Get the constraints for the type. These are not currently supported. + * Is a content stream allowed for this type? It may be disallowed, optional or mandatory. * * @return */ - public String getConstraints() + public ContentStreamAllowed getContentStreamAllowed() { - return constraints; + return contentStreamAllowed; } /** @@ -312,9 +372,12 @@ public class CMISTypeDefinition builder.append("ParentTypeId=").append(getParentTypeId()).append(", "); builder.append("RootTypeQueryName=").append(getRootTypeQueryName()).append(", "); builder.append("Description=").append(getDescription()).append(", "); + builder.append("Creatable=").append(isCreatable()).append(", "); + builder.append("Fileable=").append(isFileable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); + builder.append("Controllable=").append(isControllable()).append(", "); builder.append("Versionable=").append(isVersionable()).append(", "); - builder.append("Constraints=").append(getConstraints()).append(", "); + builder.append("ContentStreamAllowed=").append(getContentStreamAllowed()).append(", "); builder.append("IsAssociation=").append(isAssociation()).append(", "); builder.append("AllowedSourceTypes=").append(getAllowedSourceTypes()).append(", "); builder.append("AllowedTargetTypes=").append(getAllowedTargetTypes()); diff --git a/source/java/org/alfresco/cmis/dictionary/ContentStreamAllowed.java b/source/java/org/alfresco/cmis/dictionary/ContentStreamAllowed.java new file mode 100644 index 0000000000..db015f4b67 --- /dev/null +++ b/source/java/org/alfresco/cmis/dictionary/ContentStreamAllowed.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.dictionary; + +/** + * @author andyh + * + */ +public enum ContentStreamAllowed +{ + NOT_ALLOWED, ALLOWED, REQUIRED; +} diff --git a/source/java/org/alfresco/cmis/property/AbstractPropertyAccessor.java b/source/java/org/alfresco/cmis/property/AbstractPropertyAccessor.java index 551d47c70e..04d9d16ac9 100644 --- a/source/java/org/alfresco/cmis/property/AbstractPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/AbstractPropertyAccessor.java @@ -24,6 +24,7 @@ */ package org.alfresco.cmis.property; +import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.service.ServiceRegistry; /** @@ -34,8 +35,17 @@ import org.alfresco.service.ServiceRegistry; */ public abstract class AbstractPropertyAccessor { + private CMISMapping cmisMapping; private ServiceRegistry serviceRegistry; + /** + * @param cmisMapping + */ + public void setCMISMapping(CMISMapping cmisMapping) + { + this.cmisMapping = cmisMapping; + } + public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; @@ -46,4 +56,9 @@ public abstract class AbstractPropertyAccessor return serviceRegistry; } + public CMISMapping getCMISMapping() + { + return cmisMapping; + } + } diff --git a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java index a51c5685e6..02ff0f5b0a 100644 --- a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java +++ b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java @@ -31,6 +31,7 @@ import java.util.Map; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.cmis.dictionary.ContentStreamAllowed; import org.alfresco.model.ContentModel; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; @@ -48,10 +49,23 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin private AbstractGenericPropertyAccessor genericPropertyAccessor; + private CMISMapping cmisMapping; + private ServiceRegistry serviceRegistry; private boolean strict = false; + /** + * @param cmisMapping + */ + public void setCMISMapping(CMISMapping cmisMapping) + { + this.cmisMapping = cmisMapping; + } + + /** + * @param serviceRegistry + */ public void setServiceRegistry(ServiceRegistry serviceRegistry) { this.serviceRegistry = serviceRegistry; @@ -70,13 +84,13 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin public Map getProperties(NodeRef nodeRef) { // Map - QName typeQName = CMISMapping.getCmisType(serviceRegistry.getNodeService().getType(nodeRef)); + QName typeQName = cmisMapping.getCmisType(serviceRegistry.getNodeService().getType(nodeRef)); CMISScope scope; - if (CMISMapping.isValidCmisDocument(serviceRegistry.getDictionaryService(), typeQName)) + if (cmisMapping.isValidCmisDocument(typeQName)) { scope = CMISScope.DOCUMENT; } - else if (CMISMapping.isValidCmisFolder(serviceRegistry.getDictionaryService(), typeQName)) + else if (cmisMapping.isValidCmisFolder(typeQName)) { scope = CMISScope.FOLDER; } @@ -96,7 +110,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin Map unmapped = serviceRegistry.getNodeService().getProperties(nodeRef); for (QName propertyQName : unmapped.keySet()) { - String cmisPropertyName = CMISMapping.getCmisPropertyName(serviceRegistry.getNamespaceService(), propertyQName); + String cmisPropertyName = cmisMapping.getCmisPropertyName(propertyQName); mapped.put(cmisPropertyName, unmapped.get(propertyQName)); } } @@ -116,13 +130,13 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin public Serializable getProperty(NodeRef nodeRef, String propertyName) { - QName typeQName = CMISMapping.getCmisType(serviceRegistry.getNodeService().getType(nodeRef)); + QName typeQName = cmisMapping.getCmisType(serviceRegistry.getNodeService().getType(nodeRef)); CMISScope scope; - if (CMISMapping.isValidCmisDocument(serviceRegistry.getDictionaryService(), typeQName)) + if (cmisMapping.isValidCmisDocument(typeQName)) { scope = CMISScope.DOCUMENT; } - else if (CMISMapping.isValidCmisFolder(serviceRegistry.getDictionaryService(), typeQName)) + else if (cmisMapping.isValidCmisFolder(typeQName)) { scope = CMISScope.FOLDER; } @@ -177,9 +191,10 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin // Generic Alfresco mappings genericPropertyAccessor = new MappingPropertyAccessor(); genericPropertyAccessor.setServiceRegistry(serviceRegistry); + genericPropertyAccessor.setCMISMapping(cmisMapping); // CMIS Object - addNamedPropertyAccessor(new ObjectIdPropertyAccessor()); + addNamedPropertyAccessor(getObjectIdPropertyAccessor()); addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_URI, null, CMISScope.OBJECT)); addNamedPropertyAccessor(getObjectTypeIdPropertyAccessor()); addNamedPropertyAccessor(getSimplePropertyAccessor(CMISMapping.PROP_CREATED_BY, ContentModel.PROP_CREATOR, CMISScope.OBJECT)); @@ -191,16 +206,18 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin // CMIS Document and Folder addNamedPropertyAccessor(getSimplePropertyAccessor(CMISMapping.PROP_NAME, ContentModel.PROP_NAME, CMISScope.OBJECT)); - // CMIS Docuement + // CMIS Document addNamedPropertyAccessor(getIsImmutablePropertyAccessor()); addNamedPropertyAccessor(getIsLatestVersionPropertyAccessor()); addNamedPropertyAccessor(getIsMajorVersionPropertyAccessor()); addNamedPropertyAccessor(getIsLatestMajorVersionPropertyAccessor()); + addNamedPropertyAccessor(getSimplePropertyAccessor(CMISMapping.PROP_VERSION_LABEL, ContentModel.PROP_VERSION_LABEL, CMISScope.DOCUMENT)); + addNamedPropertyAccessor(getVersionSeriesIdPropertyAccessor()); addNamedPropertyAccessor(getVersionSeriesIsCheckedOutPropertyAccessor()); addNamedPropertyAccessor(getVersionSeriesCheckedOutByPropertyAccessor()); addNamedPropertyAccessor(getVersionSeriesCheckedOutIdPropertyAccessor()); addNamedPropertyAccessor(getCheckinCommentPropertyAccessor()); - addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_CONTENT_STREAM_ALLOWED, Boolean.valueOf(true), CMISScope.DOCUMENT)); + addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_CONTENT_STREAM_ALLOWED, ContentStreamAllowed.ALLOWED.toString(), CMISScope.DOCUMENT)); addNamedPropertyAccessor(getContentStreamLengthPropertyAccessor()); addNamedPropertyAccessor(getContentStreamMimetypePropertyAccessor()); addNamedPropertyAccessor(getSimplePropertyAccessor(CMISMapping.PROP_CONTENT_STREAM_FILENAME, ContentModel.PROP_NAME, CMISScope.DOCUMENT)); @@ -221,6 +238,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { SimplePropertyAccessor accessor = new SimplePropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); accessor.setPropertyName(propertyName); accessor.setMapping(to.toString()); accessor.setScope(scope); @@ -236,10 +254,19 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin return accessor; } + public NamedPropertyAccessor getObjectIdPropertyAccessor() + { + ObjectIdPropertyAccessor accessor = new ObjectIdPropertyAccessor(); + accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); + return accessor; + } + public NamedPropertyAccessor getFixedValuePropertyAccessor(String propertyName, Serializable fixedValue, CMISScope scope) { FixedValuePropertyAccessor accessor = new FixedValuePropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); accessor.setPropertyName(propertyName); accessor.setFixedValue(fixedValue); accessor.setScope(scope); @@ -250,6 +277,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { ObjectTypeIdPropertyAccessor accessor = new ObjectTypeIdPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -257,6 +285,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { IsImmutablePropertyAccessor accessor = new IsImmutablePropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -264,6 +293,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { IsLatestVersionPropertyAccessor accessor = new IsLatestVersionPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -271,6 +301,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { IsMajorVersionPropertyAccessor accessor = new IsMajorVersionPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -278,13 +309,23 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { IsLatestMajorVersionPropertyAccessor accessor = new IsLatestMajorVersionPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } + public NamedPropertyAccessor getVersionSeriesIdPropertyAccessor() + { + VersionSeriesIdPropertyAccessor accessor = new VersionSeriesIdPropertyAccessor(); + accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); + return accessor; + } + public NamedPropertyAccessor getVersionSeriesIsCheckedOutPropertyAccessor() { VersionSeriesIsCheckedOutPropertyAccessor accessor = new VersionSeriesIsCheckedOutPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -292,6 +333,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { VersionSeriesCheckedOutByPropertyAccessor accessor = new VersionSeriesCheckedOutByPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -299,6 +341,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { VersionSeriesCheckedOutIdPropertyAccessor accessor = new VersionSeriesCheckedOutIdPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -306,6 +349,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { CheckinCommentPropertyAccessor accessor = new CheckinCommentPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -313,6 +357,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { ContentStreamLengthPropertyAccessor accessor = new ContentStreamLengthPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -320,6 +365,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { ContentStreamMimetypePropertyAccessor accessor = new ContentStreamMimetypePropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } @@ -327,6 +373,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin { ParentPropertyAccessor accessor = new ParentPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); + accessor.setCMISMapping(cmisMapping); return accessor; } diff --git a/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java b/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java index cf36c6d0e0..6ff6dc58e0 100644 --- a/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java +++ b/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java @@ -31,6 +31,7 @@ import java.util.Map; import org.alfresco.cmis.dictionary.BaseCMISTest; import org.alfresco.cmis.dictionary.CMISMapping; +import org.alfresco.cmis.dictionary.ContentStreamAllowed; import org.alfresco.model.ContentModel; import org.alfresco.repo.version.VersionModel; import org.alfresco.service.cmr.lock.LockType; @@ -46,9 +47,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest { NodeRef folder = fileFolderService.create(rootNodeRef, "BaseFolder", ContentModel.TYPE_FOLDER).getNodeRef(); Map properties = cmisPropertyService.getProperties(folder); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), folder); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), folder.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.FOLDER_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.FOLDER_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -61,6 +62,8 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(properties.get(CMISMapping.PROP_IS_LATEST_VERSION)); assertNull(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION)); assertNull(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION)); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertNull(properties.get(CMISMapping.PROP_VERSION_SERIES_ID)); assertNull(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT)); assertNull(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY)); assertNull(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID)); @@ -71,7 +74,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME)); assertNull(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI)); - assertEquals(properties.get(CMISMapping.PROP_PARENT), rootNodeRef); + assertEquals(properties.get(CMISMapping.PROP_PARENT), rootNodeRef.toString()); assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); } @@ -81,9 +84,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest NodeRef content = fileFolderService.create(rootNodeRef, "BaseContent", ContentModel.TYPE_CONTENT).getNodeRef(); Map properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -96,11 +99,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -116,9 +121,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest NodeRef content = fileFolderService.create(rootNodeRef, "BaseContent", ContentModel.TYPE_CONTENT).getNodeRef(); Map properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -131,11 +136,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -156,7 +163,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest long size = writer.getSize(); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), size); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "text/plain"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -168,9 +175,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest NodeRef content = fileFolderService.create(rootNodeRef, "BaseContent", ContentModel.TYPE_CONTENT).getNodeRef(); Map properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -183,11 +190,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -203,6 +212,8 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); @@ -211,9 +222,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getLockService().unlock(content); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -226,11 +237,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -246,9 +259,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest NodeRef content = fileFolderService.create(rootNodeRef, "BaseContent", ContentModel.TYPE_CONTENT).getNodeRef(); Map properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -261,11 +274,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -281,16 +296,18 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), true); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), authenticationComponent.getCurrentUserName()); - assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); properties = cmisPropertyService.getProperties(pwc); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -303,11 +320,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); @@ -319,9 +338,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getCheckOutCheckInService().cancelCheckout(pwc); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -334,11 +353,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -354,16 +375,18 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), true); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), authenticationComponent.getCurrentUserName()); - assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); properties = cmisPropertyService.getProperties(pwc); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -376,11 +399,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); @@ -392,9 +417,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getCheckOutCheckInService().checkin(pwc, null); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -407,11 +432,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -427,9 +454,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest NodeRef content = fileFolderService.create(rootNodeRef, "BaseContent", ContentModel.TYPE_CONTENT).getNodeRef(); Map properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -442,11 +469,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -458,9 +487,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest nodeService.addAspect(content, ContentModel.ASPECT_VERSIONABLE, null); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -473,11 +502,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -493,16 +524,18 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), true); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), authenticationComponent.getCurrentUserName()); - assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); properties = cmisPropertyService.getProperties(pwc); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -515,11 +548,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); @@ -531,9 +566,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getCheckOutCheckInService().cancelCheckout(pwc); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -546,11 +581,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -566,16 +603,18 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), true); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), authenticationComponent.getCurrentUserName()); - assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); properties = cmisPropertyService.getProperties(pwc); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -588,11 +627,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); @@ -607,9 +648,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getCheckOutCheckInService().checkin(pwc, versionProperties); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()+"/1.0"); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -622,11 +663,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), true); + assertEquals(properties.get(CMISMapping.PROP_VERSION_LABEL), "1.0"); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), "Meep"); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -642,16 +685,18 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), true); + assertEquals(properties.get(CMISMapping.PROP_VERSION_LABEL), "1.0"); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), true); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), authenticationComponent.getCurrentUserName()); - assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), "Meep"); properties = cmisPropertyService.getProperties(pwc); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), pwc.toString()); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -664,11 +709,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertNull(properties.get(CMISMapping.PROP_VERSION_LABEL)); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), pwc.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); @@ -683,9 +730,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest serviceRegistry.getCheckOutCheckInService().checkin(pwc, versionProperties); properties = cmisPropertyService.getProperties(content); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_ID), content.toString()+"/1.1"); assertNull(properties.get(CMISMapping.PROP_URI)); - assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID); + assertEquals(properties.get(CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.DOCUMENT_TYPE_ID.getTypeId()); assertEquals(properties.get(CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(properties.get(CMISMapping.PROP_CREATION_DATE)); assertEquals(properties.get(CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -698,11 +745,13 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_VERSION), true); assertEquals(properties.get(CMISMapping.PROP_IS_MAJOR_VERSION), false); assertEquals(properties.get(CMISMapping.PROP_IS_LATEST_MAJOR_VERSION), false); + assertEquals(properties.get(CMISMapping.PROP_VERSION_LABEL), "1.1"); + assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_ID), content.toString()); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT), false); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY), null); assertEquals(properties.get(CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID), null); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), "Woof"); - assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), true); + assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_MIMETYPE), "application/octet-stream"); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); @@ -715,9 +764,9 @@ public class CMISPropertyServiceTest extends BaseCMISTest public void testSinglePropertyFolderAccess() { NodeRef folder = fileFolderService.create(rootNodeRef, "BaseFolder", ContentModel.TYPE_FOLDER).getNodeRef(); - assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_OBJECT_ID), folder); + assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_OBJECT_ID), folder.toString()); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_URI)); - assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.FOLDER_TYPE_ID); + assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_OBJECT_TYPE_ID), CMISMapping.FOLDER_TYPE_ID.getTypeId()); assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_CREATED_BY), authenticationComponent.getCurrentUserName()); assertNotNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_CREATION_DATE)); assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_LAST_MODIFIED_BY), authenticationComponent.getCurrentUserName()); @@ -730,6 +779,8 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_IS_LATEST_VERSION)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_IS_MAJOR_VERSION)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_IS_LATEST_MAJOR_VERSION)); + assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_VERSION_LABEL)); + assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_VERSION_SERIES_ID)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_VERSION_SERIES_IS_CHECKED_OUT)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_BY)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_VERSION_SERIES_CHECKED_OUT_ID)); @@ -740,7 +791,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_CONTENT_STREAM_FILENAME)); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_CONTENT_STREAM_URI)); - assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_PARENT), rootNodeRef); + assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_PARENT), rootNodeRef.toString()); assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); assertEquals(cmisPropertyService.getProperty(folder, "CM_NAME"), "BaseFolder"); diff --git a/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java b/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java index 490c95b8fc..49aa41e58e 100644 --- a/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java @@ -26,7 +26,6 @@ package org.alfresco.cmis.property; import java.io.Serializable; -import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; @@ -39,7 +38,7 @@ public class MappingPropertyAccessor extends AbstractGenericPropertyAccessor { public Serializable getProperty(NodeRef nodeRef, String propertyName) { - QName propertyQname = CMISMapping.getPropertyQName(getServiceRegistry().getDictionaryService(), getServiceRegistry().getNamespaceService(), propertyName); + QName propertyQname = getCMISMapping().getPropertyQName(propertyName); return getServiceRegistry().getNodeService().getProperty(nodeRef, propertyQname); } diff --git a/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java index 9319a3fc2d..3956f5dd1b 100644 --- a/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java @@ -28,20 +28,37 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.model.ContentModel; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; /** * Get the CMIS object id property. * * @author andyh - * */ public class ObjectIdPropertyAccessor extends AbstractNamedPropertyAccessor { public Serializable getProperty(NodeRef nodeRef) { - return nodeRef; + if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE)) + { + Serializable value = getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL); + if (value != null) + { + String versionLabel = DefaultTypeConverter.INSTANCE.convert(String.class, value); + StringBuilder builder = new StringBuilder(128); + builder.append(nodeRef.toString()); + builder.append("/"); + builder.append(versionLabel); + return builder.toString(); + } + + } + + return nodeRef.toString(); + } @Override @@ -53,9 +70,7 @@ public class ObjectIdPropertyAccessor extends AbstractNamedPropertyAccessor @Override public CMISScope getScope() { - return CMISScope.OBJECT; + return CMISScope.OBJECT; } - - } diff --git a/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java index f8dce8e877..c9045aff27 100644 --- a/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java @@ -42,13 +42,13 @@ public class ObjectTypeIdPropertyAccessor extends AbstractNamedPropertyAccessor public Serializable getProperty(NodeRef nodeRef) { - QName typeQName = CMISMapping.getCmisType(getServiceRegistry().getNodeService().getType(nodeRef)); + QName typeQName = getCMISMapping().getCmisType(getServiceRegistry().getNodeService().getType(nodeRef)); CMISScope scope; - if(CMISMapping.isValidCmisDocument(getServiceRegistry().getDictionaryService(), typeQName)) + if(getCMISMapping().isValidCmisDocument(typeQName)) { scope = CMISScope.DOCUMENT; } - else if(CMISMapping.isValidCmisFolder(getServiceRegistry().getDictionaryService(), typeQName)) + else if(getCMISMapping().isValidCmisFolder(typeQName)) { scope = CMISScope.FOLDER; } @@ -56,7 +56,7 @@ public class ObjectTypeIdPropertyAccessor extends AbstractNamedPropertyAccessor { scope = CMISScope.UNKNOWN; } - return CMISMapping.getCmisTypeId(scope, typeQName); + return getCMISMapping().getCmisTypeId(scope, typeQName).getTypeId(); } @Override @@ -64,7 +64,6 @@ public class ObjectTypeIdPropertyAccessor extends AbstractNamedPropertyAccessor { return CMISMapping.PROP_OBJECT_TYPE_ID; } - @Override public CMISScope getScope() diff --git a/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java index 32307885e0..1e9615d7fc 100644 --- a/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java @@ -28,6 +28,7 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -41,7 +42,15 @@ public class ParentPropertyAccessor extends AbstractNamedPropertyAccessor public Serializable getProperty(NodeRef nodeRef) { - return getServiceRegistry().getNodeService().getPrimaryParent(nodeRef).getParentRef(); + ChildAssociationRef car = getServiceRegistry().getNodeService().getPrimaryParent(nodeRef); + if((car != null) && (car.getParentRef() != null)) + { + return car.getParentRef().toString(); + } + else + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java index 9db8d642a3..ea7663c6fd 100644 --- a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java @@ -51,7 +51,8 @@ public class VersionSeriesCheckedOutIdPropertyAccessor extends AbstractNamedProp LockType type = getServiceRegistry().getLockService().getLockType(nodeRef); if (type == LockType.READ_ONLY_LOCK) { - return getServiceRegistry().getCheckOutCheckInService().getWorkingCopy(nodeRef); + NodeRef pwc = getServiceRegistry().getCheckOutCheckInService().getWorkingCopy(nodeRef); + return (pwc == null) ? null : pwc.toString(); } else { diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java new file mode 100644 index 0000000000..83c9cb1cf4 --- /dev/null +++ b/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.property; + +import java.io.Serializable; + +import org.alfresco.cmis.dictionary.CMISMapping; +import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * @author andyh + * + */ +public class VersionSeriesIdPropertyAccessor extends AbstractNamedPropertyAccessor +{ + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#getProperty(org.alfresco.service.cmr.repository.NodeRef) + */ + public Serializable getProperty(NodeRef nodeRef) + { + return nodeRef.toString(); + } + + @Override + public String getPropertyName() + { + return CMISMapping.PROP_VERSION_SERIES_ID; + } + + @Override + public CMISScope getScope() + { + return CMISScope.DOCUMENT; + } +} diff --git a/source/java/org/alfresco/cmis/search/CMISQueryOptions.java b/source/java/org/alfresco/cmis/search/CMISQueryOptions.java new file mode 100644 index 0000000000..ecf0e99c06 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISQueryOptions.java @@ -0,0 +1,351 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.alfresco.i18n.I18NUtil; +import org.alfresco.repo.search.MLAnalysisMode; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.search.QueryParameterDefinition; + +/** + * The options for a CMIS query + * + * @author andyh + */ +public class CMISQueryOptions +{ + public enum Connective + { + AND, OR; + } + + public enum CMISQueryMode + { + STRICT; + } + + private String query; + + private List stores = new ArrayList(1); + + private int maxItems = -1; + + private int skipCount = 0; + + private Connective defaultFTSConnective = Connective.AND; + + private Connective defaultFTSFieldConnective = Connective.AND; + + private CMISQueryMode queryMode = CMISQueryMode.STRICT; + + private int fetchSize = 1000; + + private List locales = new ArrayList(1); + + private MLAnalysisMode mlAnalaysisMode = MLAnalysisMode.EXACT_LANGUAGE_AND_ALL; + + private List queryParameterDefinitions = new ArrayList(4); + + private boolean includeInTransactionData = true; + + /** + * Create a CMISQueryOptions instance with the default options other than the query and store ref. + * The query will be run using the locale returned by I18NUtil.getLocale() + * + * @param query - the query to run + * @param storeRef - the store against which to run the query + */ + public CMISQueryOptions(String query, StoreRef storeRef) + { + this(query, storeRef, I18NUtil.getLocale()); + } + + /** + * Create a CMISQueryOptions instance with the default options other than the query, store ref and locale. + * + * @param query - the query to run + * @param storeRef - the store against which to run the query + */ + public CMISQueryOptions(String query, StoreRef storeRef, Locale locale) + { + this.query = query; + this.stores.add(storeRef); + this.locales.add(locale); + } + + /** + * Get the query string + * + * @return the query + */ + public String getQuery() + { + return query; + } + + /** + * Set the query string + * + * @param query the query to set + */ + public void setQuery(String query) + { + this.query = query; + } + + /** + * Get the list of stores in which to run the query. + * Only one store is supported at the momentOnly one store is supported at the moment + * + * @return the stores + */ + public List getStores() + { + return stores; + } + + /** + * Set the stores against which to run the query. + * Only one store is supported at the moment. + * + * @param stores the stores to set + */ + public void setStores(List stores) + { + this.stores = stores; + } + + /** + * Get the max number of rows for the result set + * 0 or less is unlimited + * + * @return the maxItems + */ + public int getMaxItems() + { + return maxItems; + } + + /** + * Set the max number of rows for the result set + * 0 or less is unlimited + * + * @param maxItems the maxItems to set + */ + public void setMaxItems(int maxItems) + { + this.maxItems = maxItems; + } + + /** + * Get the skip count - the number of rows to skip at the start of the query. + * + * @return the skipCount + */ + public int getSkipCount() + { + return skipCount; + } + + /** + * Set the skip count - the number of rows to skip at the start of the query. + * + * @param skipCount the skipCount to set + */ + public void setSkipCount(int skipCount) + { + this.skipCount = skipCount; + } + + /** + * Get the default connective used when OR and AND are not specified for the FTS contains() function. + * + * @return the defaultFTSConnective + */ + public Connective getDefaultFTSConnective() + { + return defaultFTSConnective; + } + + /** + * Set the default connective used when OR and AND are not specified for the FTS contains() function. + * + * @param defaultFTSConnective the defaultFTSConnective to set + */ + public void setDefaultFTSConnective(Connective defaultFTSConnective) + { + this.defaultFTSConnective = defaultFTSConnective; + } + + /** + * As getDefaultFTSConnective() but for field groups + * + * @return the defaultFTSFieldConnective + */ + public Connective getDefaultFTSFieldConnective() + { + return defaultFTSFieldConnective; + } + + /** + * As setDefaultFTSConnective() but for field groups + * + * @param defaultFTSFieldConnective the defaultFTSFieldConnective to set + */ + public void setDefaultFTSFieldConnective(Connective defaultFTSFieldConnective) + { + this.defaultFTSFieldConnective = defaultFTSFieldConnective; + } + + /** + * Get the query mode. + * + * @return the queryMode + */ + public CMISQueryMode getQueryMode() + { + return queryMode; + } + + /** + * Set the query mode. + * + * @param queryMode the queryMode to set + */ + public void setQueryMode(CMISQueryMode queryMode) + { + this.queryMode = queryMode; + } + + /** + * Get the fetch size + * 0 - no prefetch + * -1 - prefetch all + * + * @return the fetchSize + */ + public int getFetchSize() + { + return fetchSize; + } + + /** + * Set the fetch size + * 0 - no prefetch + * -1 - prefetch all + * + * @param fetchSize the fetchSize to set + */ + public void setFetchSize(int fetchSize) + { + this.fetchSize = fetchSize; + } + + /** + * Get the list of locales to use for the query + * + * @return the locales + */ + public List getLocales() + { + return locales; + } + + /** + * sSet the list of locales to use for the query + * + * @param locales the locales to set + */ + public void setLocales(List locales) + { + this.locales = locales; + } + + /** + * Get the mode for multi-lingual text analaysis + * + * @return the mlAnalaysisMode + */ + public MLAnalysisMode getMlAnalaysisMode() + { + return mlAnalaysisMode; + } + + /** + * Set the mode for multi-lingual text analaysis + * + * @param mlAnalaysisMode the mlAnalaysisMode to set + */ + public void setMlAnalaysisMode(MLAnalysisMode mlAnalaysisMode) + { + this.mlAnalaysisMode = mlAnalaysisMode; + } + + /** + * Get the query parameters + * + * @return the queryParameterDefinitions + */ + public List getQueryParameterDefinitions() + { + return queryParameterDefinitions; + } + + /** + * Set the query parameters + * + * @param queryParameterDefinitions the queryParameterDefinitions to set + */ + public void setQueryParameterDefinitions(List queryParameterDefinitions) + { + this.queryParameterDefinitions = queryParameterDefinitions; + } + + /** + * Does the search include any changes made in the current transaction? + * + * @return the includeInTransactionData + */ + public boolean isIncludeInTransactionData() + { + return includeInTransactionData; + } + + /** + * Set to true if the search include any changes made in the current transaction. + * + * @param includeInTransactionData the includeInTransactionData to set + */ + public void setIncludeInTransactionData(boolean includeInTransactionData) + { + this.includeInTransactionData = includeInTransactionData; + } + + +} diff --git a/source/java/org/alfresco/cmis/search/CMISQueryService.java b/source/java/org/alfresco/cmis/search/CMISQueryService.java new file mode 100644 index 0000000000..a48b87c8df --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISQueryService.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +/** + * Support to execute CMIS queries + * + * @author andyh + * + */ +public interface CMISQueryService +{ + /** + * Execute a CMIS query as defined by options + * + * @param options + * @return a result set + */ + public CMISResultSet query(CMISQueryOptions options); + + /** + * Execute a CMIS query with all the default options; + * + * @param query + * @return + */ + public CMISResultSet query(String query); + + /** + * Can you query non-latest versions of a document. + * The current latest version is always searchable according to the type definition. + * @return + */ + public boolean getAllVersionsSearchable(); + + /** + * Get the join support level in queries. + * @return + */ + public JoinSupport getJoinSupport(); + + /** + * Get the full text search support level in queries. + */ + public FullTextSearchSupport getFullTextSearchSupport(); +} diff --git a/source/java/org/alfresco/cmis/search/CMISResultSet.java b/source/java/org/alfresco/cmis/search/CMISResultSet.java new file mode 100644 index 0000000000..4ec4aaef95 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISResultSet.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + + +/** + * A CMIS result set + * + * @author andyh + * + */ +public interface CMISResultSet extends Iterable +{ + /** + * Get the result set meta-data. + * @return + */ + public CMISResultSetMetaData getMetaData(); + + /** + * Get the start point for this results set in the overall + * set of rows that match the query - this will be equals to the skip count + * set when executing the query. + * @return + */ + public int start(); + + /** + * Get the number of rows in this result set. + * + * This will be less than or equal to the maximum number of rows requested or + * the full length if no restriction on length is specified. + * + * If a skip count is given, the length represents the number of results + * after the skip count and does not include the items skipped. + * + * @return + */ + public int length(); + + /** + * Close the result set and release any resources held/ + * The result set is also bound to the transaction and will auto close at + * the end of the transaction. + */ + public void close(); + + /** + * Was this result set curtailed - are there more pages to the result set? + * @return + */ + public boolean hasMore(); + + + /** + * Get the given row + * @param i -the position in this result set - start + i gives the position in the overall result set + * @return + */ + public CMISResultSetRow getRow(int i); + +} diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetColumn.java b/source/java/org/alfresco/cmis/search/CMISResultSetColumn.java new file mode 100644 index 0000000000..c8582c8f1d --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISResultSetColumn.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +import org.alfresco.cmis.dictionary.CMISPropertyDefinition; +import org.alfresco.cmis.dictionary.CMISPropertyType; + +/** + * The column meta data for a result set + * + * @author andyh + * + */ +public interface CMISResultSetColumn +{ + /** + * The column name + * @return - the column name + */ + public String getName(); + + /** + * The property definition if there is one for the column + * @return - the property definition or null if it does not make sense for the column + */ + public CMISPropertyDefinition getPropertyDefinition(); + + /** + * The type of the column + * @return - the CMIS type for the column + */ + public CMISPropertyType getPropertyType(); +} diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetMetaData.java b/source/java/org/alfresco/cmis/search/CMISResultSetMetaData.java new file mode 100644 index 0000000000..babf220bd6 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISResultSetMetaData.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +/** + * The meta data associated with a result set + * + * @author andyh + * + */ +public interface CMISResultSetMetaData +{ + /** + * The selector meta-data. + * @return - the selector meta-data. + */ + public CMISResultSetSelector[] getSelectors(); + + /** + * The column meta-data. + * @return - the column meta-data. + */ + public CMISResultSetColumn[] getColumns(); + + /** + * Get the query options used to create this result set + * @return the query options + */ + public CMISQueryOptions getQueryOptions(); + + /** + * Get the names of the selectors. + * @return - the selector names. + */ + public String[] getSelectorNames(); + + /** + * Get the column names. + * @return - the names of the columns. + */ + public String[] getColumnNames(); + + /** + * Get the selector meta-data by name. + * @param name + * @return - the selector meta-data. + */ + public CMISResultSetSelector getSelector(String name); + + /** + * Get the column meta-data by column name. + * @param name + * @return - the column meta-data. + */ + public CMISResultSetColumn getCoumn(String name); +} diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetRow.java b/source/java/org/alfresco/cmis/search/CMISResultSetRow.java new file mode 100644 index 0000000000..004417cd57 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISResultSetRow.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +import java.io.Serializable; +import java.util.Map; + +/** + * A row in a CMISResultSet + * + * @author andyh + * + */ +public interface CMISResultSetRow +{ + /** + * Get all the column data. + * @return - a map of serializable column values with teh column name as the key + */ + public Map getValues(); + + /** + * Get the data for a single column + * @param columnName + * @return the value + */ + public Serializable getValue(String columnName); + + /** + * Get the overall score. + * + * @return + */ + public float getScore(); + + /** + * Get the scores . + * @return a map of selector name to score. + */ + public Map getScores(); + + /** + * Get the score related to the names selector. + * @param selectorName + * @return - the score. + */ + public float getScore(String selectorName); + + /** + * Get the index of this result set in the result set + * If you want the overall position in paged reults you have to add the skipCount fo the result set. + * @return + */ + public int getIndex(); + + /** + * Get the result set for which this row is a member. + * @return - the result set. + */ + public CMISResultSet getResultSet(); +} diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetSelector.java b/source/java/org/alfresco/cmis/search/CMISResultSetSelector.java new file mode 100644 index 0000000000..635fbe3ae7 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMISResultSetSelector.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +import org.alfresco.cmis.dictionary.CMISTypeDefinition; + +/** + * The meta-data for a result set selector. + * + * @author andyh + * + */ +public interface CMISResultSetSelector +{ + /** + * The name of the selector + * @return - the selector name + */ + public String getName(); + + /** + * Get the type definition for the selector. + * @return - the CMIS type definition. + */ + public CMISTypeDefinition getTypeDefinition(); + +} diff --git a/source/java/org/alfresco/cmis/search/FullTextSearchSupport.java b/source/java/org/alfresco/cmis/search/FullTextSearchSupport.java new file mode 100644 index 0000000000..597df08996 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/FullTextSearchSupport.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +/** + * @author andyh + * + */ +public enum FullTextSearchSupport +{ + NO_FULL_TEXT, FULL_TEXT_ONLY, FULL_TEXT_AND_STRUCTURED; +} diff --git a/source/java/org/alfresco/cmis/search/JoinSupport.java b/source/java/org/alfresco/cmis/search/JoinSupport.java new file mode 100644 index 0000000000..94e601e130 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/JoinSupport.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search; + +/** + * @author andyh + * + */ +public enum JoinSupport +{ + NO_JOIN_SUPPORT, INNER_JOIN_SUPPORT, INNER_AND_OUTER_JOIN_SUPPORT; +} diff --git a/source/java/org/alfresco/cmis/search/QueryTest.java b/source/java/org/alfresco/cmis/search/QueryTest.java index 232805ca43..0708661cf3 100644 --- a/source/java/org/alfresco/cmis/search/QueryTest.java +++ b/source/java/org/alfresco/cmis/search/QueryTest.java @@ -24,1001 +24,46 @@ */ package org.alfresco.cmis.search; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.alfresco.cmis.dictionary.BaseCMISTest; -import org.alfresco.cmis.dictionary.CMISCardinality; -import org.alfresco.cmis.dictionary.CMISMapping; -import org.alfresco.cmis.dictionary.CMISPropertyDefinition; -import org.alfresco.cmis.dictionary.CMISScope; -import org.alfresco.cmis.dictionary.CMISTypeId; -import org.alfresco.repo.search.impl.parsers.CMISLexer; -import org.alfresco.repo.search.impl.parsers.CMISParser; -import org.alfresco.repo.search.impl.parsers.FTSLexer; -import org.alfresco.repo.search.impl.parsers.FTSParser; -import org.alfresco.repo.search.impl.querymodel.Argument; -import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; -import org.alfresco.repo.search.impl.querymodel.Column; -import org.alfresco.repo.search.impl.querymodel.Constraint; -import org.alfresco.repo.search.impl.querymodel.Function; -import org.alfresco.repo.search.impl.querymodel.JoinType; -import org.alfresco.repo.search.impl.querymodel.Order; -import org.alfresco.repo.search.impl.querymodel.Ordering; -import org.alfresco.repo.search.impl.querymodel.Query; -import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; -import org.alfresco.repo.search.impl.querymodel.Selector; -import org.alfresco.repo.search.impl.querymodel.Source; -import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Equals; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; -import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; -import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; -import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; -import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThan; -import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThanOrEquals; -import org.alfresco.repo.search.impl.querymodel.impl.functions.In; -import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThan; -import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThanOrEquals; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Like; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; -import org.alfresco.repo.search.impl.querymodel.impl.functions.NotEquals; -import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Score; -import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; -import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryModelFactory; -import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.namespace.QName; -import org.antlr.runtime.ANTLRStringStream; -import org.antlr.runtime.CharStream; -import org.antlr.runtime.CommonTokenStream; -import org.antlr.runtime.RecognitionException; -import org.antlr.runtime.tree.CommonTree; /** * @author andyh */ public class QueryTest extends BaseCMISTest { - public void testParse() + public void testBasicSelect() { - String input = "SELECT UPPER(1.0) AS WOOF FROM DOCUMENT_OBJECT_TYPE AS DOC LEFT OUTER JOIN FOLDER_OBJECT_TYPE AS FOLDER ON (DOC.NAME = FOLDER.NAME) WHERE CONTAINS('DOC.NAME:lemur AND woof') AND (DOC.NAME in ('one', 'two') AND IN_FOLDER('meep') AND DOC.NAME like 'woof' and DOC.NAME = 'woof' and DOC.OBJECT_ID = 'meep') ORDER BY DOC.NAME DESC, WOOF"; - CMISParser parser = null; - try - { - CharStream cs = new ANTLRStringStream(input); - CMISLexer lexer = new CMISLexer(cs); - CommonTokenStream tokens = new CommonTokenStream(lexer); - parser = new CMISParser(tokens); - CommonTree queryNode = (CommonTree) parser.query().getTree(); - assertTrue(queryNode.getType() == CMISParser.QUERY); - - QueryModelFactory factory = new LuceneQueryModelFactory(); - - CommonTree sourceNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.SOURCE); - Source source = buildSource(sourceNode, true, factory); - Map selectors = source.getSelectors(); - ArrayList columns = buildColumns(queryNode, factory, selectors); - - ArrayList orderings = buildOrderings(queryNode, factory, selectors, columns); - - Constraint constraint = null; - CommonTree orNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.DISJUNCTION); - if (orNode != null) - { - constraint = buildDisjunction(orNode, factory, selectors, columns); - } - - System.out.println(source); - System.out.println(selectors); - System.out.println(columns); - System.out.println(orderings); - System.out.println(constraint); - - Query query = factory.createQuery(columns, source, constraint, orderings); - System.out.println(query); - } - catch (RecognitionException e) - { - if (parser != null) - { - String[] tokenNames = parser.getTokenNames(); - String hdr = parser.getErrorHeader(e); - String msg = parser.getErrorMessage(e, tokenNames); - throw new CMISQueryException(hdr + "\n" + msg, e); - } - } - + String query = "SELECT * FROM DOCUMENT_OBJECT_TYPE"; + cmisQueryService.query(query); } - - /** - * @param queryNode - * @param factory - * @param selectors - * @param columns - * @return - */ - private Constraint buildDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) + + public void xtestParse1() { - List constraints = new ArrayList(orNode.getChildCount()); - for (int i = 0; i < orNode.getChildCount(); i++) - { - CommonTree andNode = (CommonTree) orNode.getChild(i); - Constraint constraint = buildConjunction(andNode, factory, selectors, columns); - constraints.add(constraint); - } - if (constraints.size() == 1) - { - return constraints.get(0); - } - else - { - return factory.createDisjunction(constraints); - } + String query = "SELECT UPPER(1.0) AS WOOF FROM DOCUMENT_OBJECT_TYPE AS DOC LEFT OUTER JOIN FOLDER_OBJECT_TYPE AS FOLDER ON (DOC.NAME = FOLDER.NAME) WHERE LOWER(DOC.NAME = ' woof' AND CONTAINS(, 'one two three') AND CONTAINS(, 'DOC.NAME:lemur AND woof') AND (DOC.NAME in ('one', 'two') AND IN_FOLDER('meep') AND DOC.NAME like 'woof' and DOC.NAME = 'woof' and DOC.OBJECT_ID = 'meep') ORDER BY DOC.NAME DESC, WOOF"; + cmisQueryService.query(query); } - - /** - * @param andNode - * @param factory - * @param selectors - * @param columns - * @return - */ - private Constraint buildConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) + + public void xtestParse2() { - List constraints = new ArrayList(andNode.getChildCount()); - for (int i = 0; i < andNode.getChildCount(); i++) - { - CommonTree notNode = (CommonTree) andNode.getChild(i); - Constraint constraint = buildNegation(notNode, factory, selectors, columns); - constraints.add(constraint); - } - if (constraints.size() == 1) - { - return constraints.get(0); - } - else - { - return factory.createConjunction(constraints); - } + String query = "SELECT TITLE, AUTHORS, DATE FROM WHITE_PAPER WHERE ( IN_TREE( , 'ID00093854763') ) AND ( 'SMITH' = ANY AUTHORS )"; + cmisQueryService.query(query); } - - /** - * @param notNode - * @param factory - * @param selectors - * @param columns - * @return - */ - private Constraint buildNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) + + public void xtestParse3() { - if (notNode.getType() == CMISParser.NEGATION) - { - Constraint constraint = buildTest(notNode, factory, selectors, columns); - return factory.createNegation(constraint); - } - else - { - return buildTest(notNode, factory, selectors, columns); - } + String query = "SELECT OBJECT_ID, SCORE() AS X, DESTINATION, DEPARTURE_DATES FROM TRAVEL_BROCHURE WHERE ( CONTAINS(, 'CARIBBEAN CENTRAL AMERICA CRUISE TOUR') ) AND ( '2009-1-1' < ANY DEPARTURE_DATES ) ORDER BY X DESC"; + cmisQueryService.query(query); } - - /** - * @param notNode - * @param factory - * @param selectors - * @param columns - * @return - */ - private Constraint buildTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) + + public void xtestParse4() { - if (testNode.getType() == CMISParser.DISJUNCTION) - { - return buildDisjunction(testNode, factory, selectors, columns); - } - else - { - return buildPredicate(testNode, factory, selectors, columns); - } + String query = "SELECT * FROM CAR_REVIEW WHERE ( LOWER(MAKE) = 'buick' ) OR ( ANY FEATURES IN ('NAVIGATION SYSTEM', 'SATELLITE RADIO', 'MP3' ) )"; + cmisQueryService.query(query); } - - /** - * @param orNode - * @param factory - * @param selectors - * @param columns - * @return - */ - private Constraint buildPredicate(CommonTree predicateNode, QueryModelFactory factory, Map selectors, ArrayList columns) + + public void xtestParse5() { - String functionName; - Function function; - CommonTree argNode; - List functionArguments; - Argument arg; - switch (predicateNode.getType()) - { - case CMISParser.PRED_CHILD: - functionName = Child.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); - functionArguments.add(arg); - if (predicateNode.getChildCount() > 1) - { - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); - functionArguments.add(arg); - } - return factory.createFunctionalConstraint(function, functionArguments); - case CMISParser.PRED_COMPARISON: - switch (predicateNode.getChild(2).getType()) - { - case CMISParser.EQUALS: - functionName = Equals.NAME; - function = factory.getFunction(functionName); - break; - case CMISParser.NOTEQUALS: - functionName = NotEquals.NAME; - function = factory.getFunction(functionName); - break; - case CMISParser.GREATERTHAN: - functionName = GreaterThan.NAME; - function = factory.getFunction(functionName); - break; - case CMISParser.GREATERTHANOREQUALS: - functionName = GreaterThanOrEquals.NAME; - function = factory.getFunction(functionName); - break; - case CMISParser.LESSTHAN: - functionName = LessThan.NAME; - function = factory.getFunction(functionName); - break; - case CMISParser.LESSTHANOREQUALS: - functionName = LessThanOrEquals.NAME; - function = factory.getFunction(functionName); - break; - default: - throw new CMISQueryException("Unknown comparison function " + predicateNode.getChild(2).getText()); - } - functionArguments = new ArrayList(); - argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_LHS), factory, selectors); - functionArguments.add(arg); - argNode = (CommonTree) predicateNode.getChild(3); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_RHS), factory, selectors); - functionArguments.add(arg); - return factory.createFunctionalConstraint(function, functionArguments); - case CMISParser.PRED_DESCENDANT: - functionName = Descendant.NAME; - function = factory.getFunction(functionName); - argNode = (CommonTree) predicateNode.getChild(0); - functionArguments = new ArrayList(); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); - functionArguments.add(arg); - if (predicateNode.getChildCount() > 1) - { - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); - functionArguments.add(arg); - } - return factory.createFunctionalConstraint(function, functionArguments); - case CMISParser.PRED_EXISTS: - functionName = Exists.NAME; - function = factory.getFunction(functionName); - argNode = (CommonTree) predicateNode.getChild(0); - functionArguments = new ArrayList(); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors); - functionArguments.add(arg); - arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() == 1)); - functionArguments.add(arg); - return factory.createFunctionalConstraint(function, functionArguments); - case CMISParser.PRED_FTS: - String ftsExpression = predicateNode.getChild(0).getText(); - return buildFTS(ftsExpression, factory, selectors, columns); - case CMISParser.PRED_IN: - functionName = In.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_PROPERTY), factory, selectors); - functionArguments.add(arg); - argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_COLLECTION), factory, selectors); - functionArguments.add(arg); - arg = factory.createLiteralArgument(In.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); - functionArguments.add(arg); - return factory.createFunctionalConstraint(function, functionArguments); - case CMISParser.PRED_LIKE: - functionName = Like.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_PROPERTY), factory, selectors); - functionArguments.add(arg); - argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_EXP), factory, selectors); - functionArguments.add(arg); - arg = factory.createLiteralArgument(Like.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); - functionArguments.add(arg); - return factory.createFunctionalConstraint(function, functionArguments); - default: - return null; - } - } - - private Constraint buildFTS(String ftsExpression, QueryModelFactory factory, Map selectors, ArrayList columns) - { - // TODO: transform '' to ' to reverse encoding - FTSParser parser = null; - try - { - CharStream cs = new ANTLRStringStream(ftsExpression); - FTSLexer lexer = new FTSLexer(cs); - CommonTokenStream tokens = new CommonTokenStream(lexer); - parser = new FTSParser(tokens); - CommonTree ftsNode = (CommonTree) parser.fts().getTree(); - if (ftsNode.getType() == FTSParser.CONJUNCTION) - { - return buildFTSConjunction(ftsNode, factory, selectors, columns); - } - else - { - return buildFTSDisjunction(ftsNode, factory, selectors, columns); - } - } - catch (RecognitionException e) - { - if (parser != null) - { - String[] tokenNames = parser.getTokenNames(); - String hdr = parser.getErrorHeader(e); - String msg = parser.getErrorMessage(e, tokenNames); - throw new CMISQueryException(hdr + "\n" + msg, e); - } - return null; - } - - } - - private Constraint buildFTSDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) - { - List constraints = new ArrayList(orNode.getChildCount()); - for (int i = 0; i < orNode.getChildCount(); i++) - { - CommonTree andNode = (CommonTree) orNode.getChild(i); - Constraint constraint = buildFTSConjunction(andNode, factory, selectors, columns); - constraints.add(constraint); - } - if (constraints.size() == 1) - { - return constraints.get(0); - } - else - { - return factory.createDisjunction(constraints); - } - } - - private Constraint buildFTSConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) - { - List constraints = new ArrayList(andNode.getChildCount()); - for (int i = 0; i < andNode.getChildCount(); i++) - { - CommonTree notNode = (CommonTree) andNode.getChild(i); - Constraint constraint = buildFTSNegation(notNode, factory, selectors, columns); - constraints.add(constraint); - } - if (constraints.size() == 1) - { - return constraints.get(0); - } - else - { - return factory.createConjunction(constraints); - } - } - - private Constraint buildFTSNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) - { - if (notNode.getType() == FTSParser.NEGATION) - { - Constraint constraint = buildFTSTest(notNode, factory, selectors, columns); - return factory.createNegation(constraint); - } - else - { - return buildFTSTest(notNode, factory, selectors, columns); - } - } - - private Constraint buildFTSTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) - { - String term; - String phrase; - String functionName; - Function function; - List functionArguments; - Argument arg; - switch (testNode.getType()) - { - case FTSParser.DISJUNCTION: - return buildFTSDisjunction(testNode, factory, selectors, columns); - case FTSParser.CONJUNCTION: - return buildFTSConjunction(testNode, factory, selectors, columns); - case FTSParser.TERM: - functionName = FTSTerm.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - arg = factory.createLiteralArgument(FTSTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); - functionArguments.add(arg); - if(testNode.getChildCount() > 1) - { - arg = buildColumnReference(FTSTerm.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); - functionArguments.add(arg); - } - return factory.createFunctionalConstraint(function, functionArguments); - case FTSParser.EXACT_TERM: - functionName = FTSExactTerm.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - arg = factory.createLiteralArgument(FTSExactTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); - functionArguments.add(arg); - if(testNode.getChildCount() > 1) - { - arg = buildColumnReference(FTSExactTerm.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); - functionArguments.add(arg); - } - return factory.createFunctionalConstraint(function, functionArguments); - case FTSParser.PHRASE: - // TODO: transform "" to " to reverse escaping - functionName = FTSPhrase.NAME; - function = factory.getFunction(functionName); - functionArguments = new ArrayList(); - arg = factory.createLiteralArgument(FTSPhrase.ARG_PHRASE, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); - functionArguments.add(arg); - if(testNode.getChildCount() > 1) - { - arg = buildColumnReference(FTSPhrase.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); - functionArguments.add(arg); - } - return factory.createFunctionalConstraint(function, functionArguments); - case FTSParser.SYNONYM: - case FTSParser.FG_PROXIMITY: - case FTSParser.FG_RANGE: - case FTSParser.FIELD_GROUP: - case FTSParser.FIELD_CONJUNCTION: - case FTSParser.FIELD_DISJUNCTION: - default: - throw new CMISQueryException("Unsupported FTS option "+testNode.getText()); - } - } - - /** - * @param queryNode - * @param factory - * @param selectors - * @return - */ - private ArrayList buildOrderings(CommonTree queryNode, QueryModelFactory factory, Map selectors, List columns) - { - ArrayList orderings = new ArrayList(); - CommonTree orderNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ORDER); - if (orderNode != null) - { - for (int i = 0; i < orderNode.getChildCount(); i++) - { - CommonTree current = (CommonTree) orderNode.getChild(i); - - CommonTree columnRefNode = (CommonTree) current.getFirstChildWithType(CMISParser.COLUMN_REF); - if (columnRefNode != null) - { - String columnName = columnRefNode.getChild(0).getText(); - String qualifier = ""; - if (columnRefNode.getChildCount() > 1) - { - qualifier = columnRefNode.getChild(1).getText(); - } - - Order order = Order.ASCENDING; - - if (current.getChild(1).getType() == CMISParser.DESC) - { - order = Order.DESCENDING; - } - - Column orderColumn = null; - - if (qualifier.length() == 0) - { - Column match = null; - for (Column column : columns) - { - if (column.getAlias().equals(columnName)) - { - match = column; - break; - } - } - if (match == null) - { - - Selector selector = selectors.get(qualifier); - if (selector == null) - { - throw new CMISQueryException("No selector for " + qualifier); - } - QName cmisType = CMISMapping.getCmisType(selector.getType()); - CMISTypeId typeId = null; - if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); - } - else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); - } - else - { - throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); - } - CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); - - if (definition == null) - { - throw new CMISQueryException("Invalid column for " + CMISMapping.getQueryName(namespaceService, typeId.getQName()) + "." + columnName); - } - - Function function = factory.getFunction(PropertyAccessor.NAME); - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); - List functionArguments = new ArrayList(1); - functionArguments.add(arg); - - String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); - - match = factory.createColumn(function, functionArguments, alias); - } - orderColumn = match; - } - else - { - Selector selector = selectors.get(qualifier); - if (selector == null) - { - throw new CMISQueryException("No selector for " + qualifier); - } - QName cmisType = CMISMapping.getCmisType(selector.getType()); - CMISTypeId typeId = null; - if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); - } - else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); - } - else - { - throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); - } - CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); - - if (definition == null) - { - throw new CMISQueryException("Invalid column for " - + CMISMapping.getQueryName(namespaceService, typeId.getQName()) + "." + columnName + " selector alias " + selector.getAlias()); - } - - Function function = factory.getFunction(PropertyAccessor.NAME); - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); - List functionArguments = new ArrayList(1); - functionArguments.add(arg); - - String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); - - orderColumn = factory.createColumn(function, functionArguments, alias); - } - - // TODO: check orderable - add to the column definition - - Ordering ordering = factory.createOrdering(orderColumn, order); - orderings.add(ordering); - - } - } - } - return orderings; - } - - private ArrayList buildColumns(CommonTree queryNode, QueryModelFactory factory, Map selectors) - { - ArrayList columns = new ArrayList(); - CommonTree starNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ALL_COLUMNS); - if (starNode != null) - { - for (Selector selector : selectors.values()) - { - QName cmisType = CMISMapping.getCmisType(selector.getType()); - CMISTypeId typeId = null; - if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); - } - else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); - } - else - { - throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); - } - Map propDefs = cmisDictionaryService.getPropertyDefinitions(typeId); - for (CMISPropertyDefinition definition : propDefs.values()) - { - if (definition.getCardinality() == CMISCardinality.SINGLE_VALUED) - { - Function function = factory.getFunction(PropertyAccessor.NAME); - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); - List functionArguments = new ArrayList(1); - functionArguments.add(arg); - Column column = factory.createColumn(function, functionArguments, selector.getAlias() + "." + definition.getPropertyName()); - columns.add(column); - } - } - } - } - - CommonTree columnsNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.COLUMNS); - if (columnsNode != null) - { - CommonTree allColumnsNode = (CommonTree) columnsNode.getFirstChildWithType(CMISParser.ALL_COLUMNS); - if (allColumnsNode != null) - { - String qualifier = allColumnsNode.getChild(0).getText(); - Selector selector = selectors.get(qualifier); - if (selector == null) - { - throw new CMISQueryException("No selector for " + qualifier + " in " + qualifier + ".*"); - } - QName cmisType = CMISMapping.getCmisType(selector.getType()); - CMISTypeId typeId = null; - if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); - } - else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); - } - else - { - throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); - } - Map propDefs = cmisDictionaryService.getPropertyDefinitions(typeId); - for (CMISPropertyDefinition definition : propDefs.values()) - { - if (definition.getCardinality() == CMISCardinality.SINGLE_VALUED) - { - Function function = factory.getFunction(PropertyAccessor.NAME); - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); - List functionArguments = new ArrayList(1); - functionArguments.add(arg); - Column column = factory.createColumn(function, functionArguments, selector.getAlias() + "." + definition.getPropertyName()); - columns.add(column); - } - } - } - - CommonTree columnNode = (CommonTree) columnsNode.getFirstChildWithType(CMISParser.COLUMN); - if (columnNode != null) - { - CommonTree columnRefNode = (CommonTree) columnNode.getFirstChildWithType(CMISParser.COLUMN_REF); - if (columnRefNode != null) - { - String columnName = columnRefNode.getChild(0).getText(); - String qualifier = ""; - if (columnRefNode.getChildCount() > 1) - { - qualifier = columnRefNode.getChild(1).getText(); - } - Selector selector = selectors.get(qualifier); - if (selector == null) - { - throw new CMISQueryException("No selector for " + qualifier); - } - QName cmisType = CMISMapping.getCmisType(selector.getType()); - CMISTypeId typeId = null; - if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); - } - else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) - { - typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); - } - else - { - throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); - } - CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); - - if (definition == null) - { - throw new CMISQueryException("Invalid column for " + CMISMapping.getQueryName(namespaceService, typeId.getQName()) + "." + columnName); - } - - Function function = factory.getFunction(PropertyAccessor.NAME); - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); - List functionArguments = new ArrayList(1); - functionArguments.add(arg); - - String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); - if (columnNode.getChildCount() > 1) - { - alias = columnNode.getChild(1).getText(); - } - - Column column = factory.createColumn(function, functionArguments, alias); - columns.add(column); - - } - - CommonTree functionNode = (CommonTree) columnNode.getFirstChildWithType(CMISParser.FUNCTION); - if (functionNode != null) - { - String functionName = getFunctionName((CommonTree) functionNode.getChild(0)); - Function function = factory.getFunction(functionName); - Set definitions = function.getArgumentDefinitions(); - List functionArguments = new ArrayList(); - - int childIndex = 1; - for (ArgumentDefinition definition : definitions) - { - if (functionNode.getChildCount() > childIndex) - { - CommonTree argNode = (CommonTree) functionNode.getChild(childIndex++); - Argument arg = getFunctionArgument(argNode, definition, factory, selectors); - functionArguments.add(arg); - } - else - { - if (definition.isMandatory()) - { - // throw new CMISQueryException("Insufficient aruments for function " + ((CommonTree) - // functionNode.getChild(0)).getText() ); - break; - } - else - { - // ok - } - } - } - - String alias = function.getName(); - if (columnNode.getChildCount() > 1) - { - alias = columnNode.getChild(1).getText(); - } - - Column column = factory.createColumn(function, functionArguments, alias); - columns.add(column); - } - - } - } - - return columns; - } - - private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors) - { - if (argNode.getType() == CMISParser.COLUMN_REF) - { - Argument arg = buildColumnReference(definition.getName(), argNode, factory); - return arg; - } - else if (argNode.getType() == CMISParser.ID) - { - Argument arg; - String id = argNode.getText(); - if (selectors.containsKey(id)) - { - arg = factory.createSelectorArgument(definition.getName(), id); - } - else - { - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), id); - arg = factory.createPropertyArgument(definition.getName(), "", propertyQName); - } - return arg; - } - else if (argNode.getType() == CMISParser.PARAMETER) - { - Argument arg = factory.createParameterArgument(definition.getName(), argNode.getText()); - return arg; - } - else if (argNode.getType() == CMISParser.NUMERIC_LITERAL) - { - CommonTree literalNode = (CommonTree) argNode.getChild(0); - if (literalNode.getType() == CMISParser.FLOATING_POINT_LITERAL) - { - QName type = DataTypeDefinition.DOUBLE; - Number value = Double.parseDouble(literalNode.getText()); - if (value.floatValue() == value.doubleValue()) - { - type = DataTypeDefinition.FLOAT; - value = Float.valueOf(value.floatValue()); - } - Argument arg = factory.createLiteralArgument(definition.getName(), type, value); - return arg; - } - else if (literalNode.getType() == CMISParser.DECIMAL_INTEGER_LITERAL) - { - QName type = DataTypeDefinition.LONG; - Number value = Long.parseLong(literalNode.getText()); - if (value.intValue() == value.longValue()) - { - type = DataTypeDefinition.INT; - value = Integer.valueOf(value.intValue()); - } - Argument arg = factory.createLiteralArgument(definition.getName(), type, value); - return arg; - } - else - { - throw new CMISQueryException("Invalid numeric literal " + literalNode.getText()); - } - } - else if (argNode.getType() == CMISParser.STRING_LITERAL) - { - Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getChild(0).getText()); - return arg; - } - else if (argNode.getType() == CMISParser.LIST) - { - ArrayList arguments = new ArrayList(); - for (int i = 0; i < argNode.getChildCount(); i++) - { - CommonTree arg = (CommonTree) argNode.getChild(i); - arguments.add(getFunctionArgument(arg, definition, factory, selectors)); - } - Argument arg = factory.createListArgument(definition.getName(), arguments); - return arg; - } - else if (argNode.getType() == CMISParser.ANY) - { - Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); - return arg; - } - else if (argNode.getType() == CMISParser.NOT) - { - Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); - return arg; - } - else - { - throw new CMISQueryException("Invalid query argument " + argNode.getText()); - } - } - - @SuppressWarnings("unchecked") - private Source buildSource(CommonTree source, boolean supportJoins, QueryModelFactory factory) - { - if (source.getChildCount() == 1) - { - // single table reference - CommonTree singleTableNode = (CommonTree) source.getChild(0); - if (singleTableNode.getType() == CMISParser.TABLE) - { - if (!supportJoins) - { - throw new UnsupportedOperationException("Joins are not supported"); - } - CommonTree tableSourceNode = (CommonTree) singleTableNode.getFirstChildWithType(CMISParser.SOURCE); - return buildSource(tableSourceNode, false, factory); - - } - assertTrue(singleTableNode.getType() == CMISParser.TABLE_REF); - String tableName = singleTableNode.getChild(0).getText(); - String alias = ""; - if (singleTableNode.getChildCount() > 1) - { - alias = singleTableNode.getChild(1).getText(); - } - QName classQName = CMISMapping.getAlfrescoClassQNameFromCmisTableName(dictionaryService, serviceRegistry.getNamespaceService(), tableName); - return factory.createSelector(classQName, alias); - } - else - { - if (!supportJoins) - { - throw new UnsupportedOperationException("Joins are not supported"); - } - CommonTree singleTableNode = (CommonTree) source.getChild(0); - assertTrue(singleTableNode.getType() == CMISParser.TABLE_REF); - String tableName = singleTableNode.getChild(0).getText(); - String alias = ""; - if (singleTableNode.getChildCount() == 2) - { - alias = singleTableNode.getChild(1).getText(); - } - QName classQName = CMISMapping.getAlfrescoClassQNameFromCmisTableName(dictionaryService, serviceRegistry.getNamespaceService(), tableName); - Source lhs = factory.createSelector(classQName, alias); - - List list = (List) (source.getChildren()); - for (CommonTree joinNode : list) - { - if (joinNode.getType() == CMISParser.JOIN) - { - CommonTree rhsSource = (CommonTree) joinNode.getFirstChildWithType(CMISParser.SOURCE); - Source rhs = buildSource(rhsSource, supportJoins, factory); - - JoinType joinType = JoinType.INNER; - CommonTree joinTypeNode = (CommonTree) joinNode.getFirstChildWithType(CMISParser.LEFT); - if (joinTypeNode != null) - { - joinType = JoinType.LEFT; - } - - Constraint joinCondition = null; - CommonTree joinConditionNode = (CommonTree) joinNode.getFirstChildWithType(CMISParser.ON); - if (joinConditionNode != null) - { - Argument arg1 = buildColumnReference(Equals.ARG_LHS, (CommonTree) joinConditionNode.getChild(0), factory); - String functionName = getFunctionName((CommonTree) joinConditionNode.getChild(1)); - Argument arg2 = buildColumnReference(Equals.ARG_RHS, (CommonTree) joinConditionNode.getChild(2), factory); - Function function = factory.getFunction(functionName); - List functionArguments = new ArrayList(2); - functionArguments.add(arg1); - functionArguments.add(arg2); - joinCondition = factory.createFunctionalConstraint(function, functionArguments); - } - - Source join = factory.createJoin(lhs, rhs, joinType, joinCondition); - lhs = join; - } - } - - return lhs; - - } - } - - public Argument buildColumnReference(String argumentName, CommonTree columnReferenceNode, QueryModelFactory factory) - { - String cmisPropertyName = columnReferenceNode.getChild(0).getText(); - String qualifer = ""; - if (columnReferenceNode.getChildCount() > 1) - { - qualifer = columnReferenceNode.getChild(1).getText(); - } - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), cmisPropertyName); - return factory.createPropertyArgument(argumentName, qualifer, propertyQName); - } - - public String getFunctionName(CommonTree functionNameNode) - { - switch (functionNameNode.getType()) - { - case CMISParser.EQUALS: - return Equals.NAME; - case CMISParser.UPPER: - return Upper.NAME; - case CMISParser.SCORE: - return Score.NAME; - case CMISParser.LOWER: - return Lower.NAME; - default: - throw new CMISQueryException("Unknown function: " + functionNameNode.getText()); - } + String query = "SELECT Y.CLAIM_NUM, X.PROPERTY_ADDRESS, Y.DAMAGE_ESTIMATES FROM POLICY AS X JOIN CLAIMS AS Y ON ( X.POLICY_NUM = Y.POLICY_NUM ) WHERE ( 100000 <= ANY Y.DAMAGE_ESTIMATES ) AND ( Y.CAUSE NOT LIKE '%Katrina%' )"; + cmisQueryService.query(query); } } diff --git a/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java b/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java new file mode 100644 index 0000000000..a320a81d47 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java @@ -0,0 +1,1078 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.alfresco.cmis.dictionary.CMISCardinality; +import org.alfresco.cmis.dictionary.CMISDictionaryService; +import org.alfresco.cmis.dictionary.CMISMapping; +import org.alfresco.cmis.dictionary.CMISPropertyDefinition; +import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.cmis.dictionary.CMISTypeId; +import org.alfresco.cmis.search.CMISQueryException; +import org.alfresco.cmis.search.CMISQueryOptions; +import org.alfresco.cmis.search.JoinSupport; +import org.alfresco.repo.search.impl.parsers.CMISLexer; +import org.alfresco.repo.search.impl.parsers.CMISParser; +import org.alfresco.repo.search.impl.parsers.FTSLexer; +import org.alfresco.repo.search.impl.parsers.FTSParser; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.Function; +import org.alfresco.repo.search.impl.querymodel.JoinType; +import org.alfresco.repo.search.impl.querymodel.Order; +import org.alfresco.repo.search.impl.querymodel.Ordering; +import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; +import org.alfresco.repo.search.impl.querymodel.Selector; +import org.alfresco.repo.search.impl.querymodel.Source; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Equals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.In; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Like; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; +import org.alfresco.repo.search.impl.querymodel.impl.functions.NotEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Score; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryModelFactory; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.namespace.QName; +import org.antlr.runtime.ANTLRStringStream; +import org.antlr.runtime.CharStream; +import org.antlr.runtime.CommonTokenStream; +import org.antlr.runtime.RecognitionException; +import org.antlr.runtime.tree.CommonTree; + +/** + * @author andyh + */ +public class CMISQueryParser +{ + private CMISQueryOptions options; + + private CMISDictionaryService cmisDictionaryService; + + private CMISMapping cmisMapping; + + private JoinSupport joinSupport; + + public CMISQueryParser(CMISQueryOptions options, CMISDictionaryService cmisDictionaryService, CMISMapping cmisMapping, JoinSupport joinSupport) + { + this.options = options; + this.cmisDictionaryService = cmisDictionaryService; + this.cmisMapping = cmisMapping; + this.joinSupport = joinSupport; + } + + public Query parse() + { + CMISParser parser = null; + try + { + CharStream cs = new ANTLRStringStream(options.getQuery()); + CMISLexer lexer = new CMISLexer(cs); + CommonTokenStream tokens = new CommonTokenStream(lexer); + parser = new CMISParser(tokens); + CommonTree queryNode = (CommonTree) parser.query().getTree(); + + QueryModelFactory factory = new LuceneQueryModelFactory(); + + CommonTree sourceNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.SOURCE); + Source source = buildSource(sourceNode, joinSupport, factory); + Map selectors = source.getSelectors(); + ArrayList columns = buildColumns(queryNode, factory, selectors); + + ArrayList orderings = buildOrderings(queryNode, factory, selectors, columns); + + Constraint constraint = null; + CommonTree orNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.DISJUNCTION); + if (orNode != null) + { + constraint = buildDisjunction(orNode, factory, selectors, columns); + } + + Query query = factory.createQuery(columns, source, constraint, orderings); + + return query; + } + catch (RecognitionException e) + { + if (parser != null) + { + String[] tokenNames = parser.getTokenNames(); + String hdr = parser.getErrorHeader(e); + String msg = parser.getErrorMessage(e, tokenNames); + throw new CMISQueryException(hdr + "\n" + msg, e); + } + } + throw new CMISQueryException("Failed to parse"); + } + + /** + * @param queryNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(orNode.getChildCount()); + for (int i = 0; i < orNode.getChildCount(); i++) + { + CommonTree andNode = (CommonTree) orNode.getChild(i); + Constraint constraint = buildConjunction(andNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createDisjunction(constraints); + } + } + + /** + * @param andNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(andNode.getChildCount()); + for (int i = 0; i < andNode.getChildCount(); i++) + { + CommonTree notNode = (CommonTree) andNode.getChild(i); + Constraint constraint = buildNegation(notNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createConjunction(constraints); + } + } + + /** + * @param notNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (notNode.getType() == CMISParser.NEGATION) + { + Constraint constraint = buildTest(notNode, factory, selectors, columns); + return factory.createNegation(constraint); + } + else + { + return buildTest(notNode, factory, selectors, columns); + } + } + + /** + * @param notNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (testNode.getType() == CMISParser.DISJUNCTION) + { + return buildDisjunction(testNode, factory, selectors, columns); + } + else + { + return buildPredicate(testNode, factory, selectors, columns); + } + } + + /** + * @param orNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildPredicate(CommonTree predicateNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + String functionName; + Function function; + CommonTree argNode; + List functionArguments; + Argument arg; + switch (predicateNode.getType()) + { + case CMISParser.PRED_CHILD: + functionName = Child.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + functionArguments.add(arg); + if (predicateNode.getChildCount() > 1) + { + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_COMPARISON: + switch (predicateNode.getChild(2).getType()) + { + case CMISParser.EQUALS: + functionName = Equals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.NOTEQUALS: + functionName = NotEquals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.GREATERTHAN: + functionName = GreaterThan.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.GREATERTHANOREQUALS: + functionName = GreaterThanOrEquals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.LESSTHAN: + functionName = LessThan.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.LESSTHANOREQUALS: + functionName = LessThanOrEquals.NAME; + function = factory.getFunction(functionName); + break; + default: + throw new CMISQueryException("Unknown comparison function " + predicateNode.getChild(2).getText()); + } + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_LHS), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(3); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_RHS), factory, selectors); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_DESCENDANT: + functionName = Descendant.NAME; + function = factory.getFunction(functionName); + argNode = (CommonTree) predicateNode.getChild(0); + functionArguments = new ArrayList(); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + functionArguments.add(arg); + if (predicateNode.getChildCount() > 1) + { + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_EXISTS: + functionName = Exists.NAME; + function = factory.getFunction(functionName); + argNode = (CommonTree) predicateNode.getChild(0); + functionArguments = new ArrayList(); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() == 1)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_FTS: + String ftsExpression = predicateNode.getChild(0).getText(); + return buildFTS(ftsExpression, factory, selectors, columns); + case CMISParser.PRED_IN: + functionName = In.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_COLLECTION), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(In.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_LIKE: + functionName = Like.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_EXP), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(Like.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + default: + return null; + } + } + + private Constraint buildFTS(String ftsExpression, QueryModelFactory factory, Map selectors, ArrayList columns) + { + // TODO: transform '' to ' to reverse encoding + FTSParser parser = null; + try + { + CharStream cs = new ANTLRStringStream(ftsExpression); + FTSLexer lexer = new FTSLexer(cs); + CommonTokenStream tokens = new CommonTokenStream(lexer); + parser = new FTSParser(tokens); + CommonTree ftsNode = (CommonTree) parser.fts().getTree(); + if (ftsNode.getType() == FTSParser.CONJUNCTION) + { + return buildFTSConjunction(ftsNode, factory, selectors, columns); + } + else + { + return buildFTSDisjunction(ftsNode, factory, selectors, columns); + } + } + catch (RecognitionException e) + { + if (parser != null) + { + String[] tokenNames = parser.getTokenNames(); + String hdr = parser.getErrorHeader(e); + String msg = parser.getErrorMessage(e, tokenNames); + throw new CMISQueryException(hdr + "\n" + msg, e); + } + return null; + } + + } + + private Constraint buildFTSDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(orNode.getChildCount()); + for (int i = 0; i < orNode.getChildCount(); i++) + { + CommonTree andNode = (CommonTree) orNode.getChild(i); + Constraint constraint = buildFTSConjunction(andNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createDisjunction(constraints); + } + } + + private Constraint buildFTSConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(andNode.getChildCount()); + for (int i = 0; i < andNode.getChildCount(); i++) + { + CommonTree notNode = (CommonTree) andNode.getChild(i); + Constraint constraint = buildFTSNegation(notNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createConjunction(constraints); + } + } + + private Constraint buildFTSNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (notNode.getType() == FTSParser.NEGATION) + { + Constraint constraint = buildFTSTest(notNode, factory, selectors, columns); + return factory.createNegation(constraint); + } + else + { + return buildFTSTest(notNode, factory, selectors, columns); + } + } + + private Constraint buildFTSTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + String functionName; + Function function; + List functionArguments; + Argument arg; + switch (testNode.getType()) + { + case FTSParser.DISJUNCTION: + return buildFTSDisjunction(testNode, factory, selectors, columns); + case FTSParser.CONJUNCTION: + return buildFTSConjunction(testNode, factory, selectors, columns); + case FTSParser.TERM: + functionName = FTSTerm.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if (testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSTerm.ARG_PROPERTY, (CommonTree) testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.EXACT_TERM: + functionName = FTSExactTerm.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSExactTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if (testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSExactTerm.ARG_PROPERTY, (CommonTree) testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.PHRASE: + // TODO: transform "" to " to reverse escaping + functionName = FTSPhrase.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSPhrase.ARG_PHRASE, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if (testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSPhrase.ARG_PROPERTY, (CommonTree) testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.SYNONYM: + case FTSParser.FG_PROXIMITY: + case FTSParser.FG_RANGE: + case FTSParser.FIELD_GROUP: + case FTSParser.FIELD_CONJUNCTION: + case FTSParser.FIELD_DISJUNCTION: + default: + throw new CMISQueryException("Unsupported FTS option " + testNode.getText()); + } + } + + /** + * @param queryNode + * @param factory + * @param selectors + * @return + */ + private ArrayList buildOrderings(CommonTree queryNode, QueryModelFactory factory, Map selectors, List columns) + { + ArrayList orderings = new ArrayList(); + CommonTree orderNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ORDER); + if (orderNode != null) + { + for (int i = 0; i < orderNode.getChildCount(); i++) + { + CommonTree current = (CommonTree) orderNode.getChild(i); + + CommonTree columnRefNode = (CommonTree) current.getFirstChildWithType(CMISParser.COLUMN_REF); + if (columnRefNode != null) + { + String columnName = columnRefNode.getChild(0).getText(); + String qualifier = ""; + if (columnRefNode.getChildCount() > 1) + { + qualifier = columnRefNode.getChild(1).getText(); + } + + Order order = Order.ASCENDING; + + if (current.getChild(1).getType() == CMISParser.DESC) + { + order = Order.DESCENDING; + } + + Column orderColumn = null; + + if (qualifier.length() == 0) + { + Column match = null; + for (Column column : columns) + { + if (column.getAlias().equals(columnName)) + { + match = column; + break; + } + } + if (match == null) + { + + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier); + } + QName cmisType = cmisMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (cmisMapping.isValidCmisDocument(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (cmisMapping.isValidCmisFolder(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); + + if (definition == null) + { + throw new CMISQueryException("Invalid column for " + cmisMapping.getQueryName(typeId.getQName()) + "." + columnName); + } + + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = cmisMapping.getPropertyQName(definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); + + match = factory.createColumn(function, functionArguments, alias); + } + orderColumn = match; + } + else + { + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier); + } + QName cmisType = cmisMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (cmisMapping.isValidCmisDocument(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (cmisMapping.isValidCmisFolder(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); + + if (definition == null) + { + throw new CMISQueryException("Invalid column for " + + cmisMapping.getQueryName(typeId.getQName()) + "." + columnName + " selector alias " + selector.getAlias()); + } + + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = cmisMapping.getPropertyQName(definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); + + orderColumn = factory.createColumn(function, functionArguments, alias); + } + + // TODO: check orderable - add to the column definition + + Ordering ordering = factory.createOrdering(orderColumn, order); + orderings.add(ordering); + + } + } + } + return orderings; + } + + private ArrayList buildColumns(CommonTree queryNode, QueryModelFactory factory, Map selectors) + { + ArrayList columns = new ArrayList(); + CommonTree starNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ALL_COLUMNS); + if (starNode != null) + { + for (Selector selector : selectors.values()) + { + QName cmisType = cmisMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (cmisMapping.isValidCmisDocument(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (cmisMapping.isValidCmisFolder(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + Map propDefs = cmisDictionaryService.getPropertyDefinitions(typeId); + for (CMISPropertyDefinition definition : propDefs.values()) + { + if (definition.getCardinality() == CMISCardinality.SINGLE_VALUED) + { + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = cmisMapping.getPropertyQName(definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + Column column = factory.createColumn(function, functionArguments, selector.getAlias() + "." + definition.getPropertyName()); + columns.add(column); + } + } + } + } + + CommonTree columnsNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.COLUMNS); + if (columnsNode != null) + { + CommonTree allColumnsNode = (CommonTree) columnsNode.getFirstChildWithType(CMISParser.ALL_COLUMNS); + if (allColumnsNode != null) + { + String qualifier = allColumnsNode.getChild(0).getText(); + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier + " in " + qualifier + ".*"); + } + QName cmisType = cmisMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (cmisMapping.isValidCmisDocument(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (cmisMapping.isValidCmisFolder(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + Map propDefs = cmisDictionaryService.getPropertyDefinitions(typeId); + for (CMISPropertyDefinition definition : propDefs.values()) + { + if (definition.getCardinality() == CMISCardinality.SINGLE_VALUED) + { + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = cmisMapping.getPropertyQName(definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + Column column = factory.createColumn(function, functionArguments, selector.getAlias() + "." + definition.getPropertyName()); + columns.add(column); + } + } + } + + CommonTree columnNode = (CommonTree) columnsNode.getFirstChildWithType(CMISParser.COLUMN); + if (columnNode != null) + { + CommonTree columnRefNode = (CommonTree) columnNode.getFirstChildWithType(CMISParser.COLUMN_REF); + if (columnRefNode != null) + { + String columnName = columnRefNode.getChild(0).getText(); + String qualifier = ""; + if (columnRefNode.getChildCount() > 1) + { + qualifier = columnRefNode.getChild(1).getText(); + } + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier); + } + QName cmisType = cmisMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (cmisMapping.isValidCmisDocument(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (cmisMapping.isValidCmisFolder(cmisType)) + { + typeId = cmisMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); + + if (definition == null) + { + throw new CMISQueryException("Invalid column for " + cmisMapping.getQueryName(typeId.getQName()) + "." + columnName); + } + + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = cmisMapping.getPropertyQName(definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); + if (columnNode.getChildCount() > 1) + { + alias = columnNode.getChild(1).getText(); + } + + Column column = factory.createColumn(function, functionArguments, alias); + columns.add(column); + + } + + CommonTree functionNode = (CommonTree) columnNode.getFirstChildWithType(CMISParser.FUNCTION); + if (functionNode != null) + { + String functionName = getFunctionName((CommonTree) functionNode.getChild(0)); + Function function = factory.getFunction(functionName); + Set definitions = function.getArgumentDefinitions(); + List functionArguments = new ArrayList(); + + int childIndex = 1; + for (ArgumentDefinition definition : definitions) + { + if (functionNode.getChildCount() > childIndex) + { + CommonTree argNode = (CommonTree) functionNode.getChild(childIndex++); + Argument arg = getFunctionArgument(argNode, definition, factory, selectors); + functionArguments.add(arg); + } + else + { + if (definition.isMandatory()) + { + // throw new CMISQueryException("Insufficient aruments for function " + ((CommonTree) + // functionNode.getChild(0)).getText() ); + break; + } + else + { + // ok + } + } + } + + String alias = function.getName(); + if (columnNode.getChildCount() > 1) + { + alias = columnNode.getChild(1).getText(); + } + + Column column = factory.createColumn(function, functionArguments, alias); + columns.add(column); + } + + } + } + + return columns; + } + + private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors) + { + if (argNode.getType() == CMISParser.COLUMN_REF) + { + Argument arg = buildColumnReference(definition.getName(), argNode, factory); + return arg; + } + else if (argNode.getType() == CMISParser.ID) + { + Argument arg; + String id = argNode.getText(); + if (selectors.containsKey(id)) + { + arg = factory.createSelectorArgument(definition.getName(), id); + } + else + { + QName propertyQName = cmisMapping.getPropertyQName(id); + arg = factory.createPropertyArgument(definition.getName(), "", propertyQName); + } + return arg; + } + else if (argNode.getType() == CMISParser.PARAMETER) + { + Argument arg = factory.createParameterArgument(definition.getName(), argNode.getText()); + return arg; + } + else if (argNode.getType() == CMISParser.NUMERIC_LITERAL) + { + CommonTree literalNode = (CommonTree) argNode.getChild(0); + if (literalNode.getType() == CMISParser.FLOATING_POINT_LITERAL) + { + QName type = DataTypeDefinition.DOUBLE; + Number value = Double.parseDouble(literalNode.getText()); + if (value.floatValue() == value.doubleValue()) + { + type = DataTypeDefinition.FLOAT; + value = Float.valueOf(value.floatValue()); + } + Argument arg = factory.createLiteralArgument(definition.getName(), type, value); + return arg; + } + else if (literalNode.getType() == CMISParser.DECIMAL_INTEGER_LITERAL) + { + QName type = DataTypeDefinition.LONG; + Number value = Long.parseLong(literalNode.getText()); + if (value.intValue() == value.longValue()) + { + type = DataTypeDefinition.INT; + value = Integer.valueOf(value.intValue()); + } + Argument arg = factory.createLiteralArgument(definition.getName(), type, value); + return arg; + } + else + { + throw new CMISQueryException("Invalid numeric literal " + literalNode.getText()); + } + } + else if (argNode.getType() == CMISParser.STRING_LITERAL) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getChild(0).getText()); + return arg; + } + else if (argNode.getType() == CMISParser.LIST) + { + ArrayList arguments = new ArrayList(); + for (int i = 0; i < argNode.getChildCount(); i++) + { + CommonTree arg = (CommonTree) argNode.getChild(i); + arguments.add(getFunctionArgument(arg, definition, factory, selectors)); + } + Argument arg = factory.createListArgument(definition.getName(), arguments); + return arg; + } + else if (argNode.getType() == CMISParser.ANY) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); + return arg; + } + else if (argNode.getType() == CMISParser.NOT) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); + return arg; + } + else if (argNode.getType() == CMISParser.FUNCTION) + { + String functionName = getFunctionName((CommonTree) argNode.getChild(0)); + Function function = factory.getFunction(functionName); + Set definitions = function.getArgumentDefinitions(); + List functionArguments = new ArrayList(); + + int childIndex = 1; + for (ArgumentDefinition currentDefinition : definitions) + { + if (argNode.getChildCount() > childIndex) + { + CommonTree currentArgNode = (CommonTree) argNode.getChild(childIndex++); + Argument arg = getFunctionArgument(currentArgNode, currentDefinition, factory, selectors); + functionArguments.add(arg); + } + else + { + if (definition.isMandatory()) + { + // throw new CMISQueryException("Insufficient aruments for function " + ((CommonTree) + // functionNode.getChild(0)).getText() ); + break; + } + else + { + // ok + } + } + } + Argument arg = factory.createFunctionArgument(definition.getName(), function, functionArguments); + return arg; + } + else + { + throw new CMISQueryException("Invalid function argument " + argNode.getText()); + } + } + + @SuppressWarnings("unchecked") + private Source buildSource(CommonTree source, JoinSupport joinSupport, QueryModelFactory factory) + { + if (source.getChildCount() == 1) + { + // single table reference + CommonTree singleTableNode = (CommonTree) source.getChild(0); + if (singleTableNode.getType() == CMISParser.TABLE) + { + if (joinSupport == JoinSupport.NO_JOIN_SUPPORT) + { + throw new UnsupportedOperationException("Joins are not supported"); + } + CommonTree tableSourceNode = (CommonTree) singleTableNode.getFirstChildWithType(CMISParser.SOURCE); + return buildSource(tableSourceNode, joinSupport, factory); + + } + if (singleTableNode.getType() != CMISParser.TABLE_REF) + { + throw new CMISQueryException("Expecting TABLE_REF token but found " + singleTableNode.getText()); + } + String tableName = singleTableNode.getChild(0).getText(); + String alias = ""; + if (singleTableNode.getChildCount() > 1) + { + alias = singleTableNode.getChild(1).getText(); + } + QName classQName = cmisMapping.getAlfrescoClassQNameFromCmisTableName(tableName); + return factory.createSelector(classQName, alias); + } + else + { + if (joinSupport == JoinSupport.NO_JOIN_SUPPORT) + { + throw new UnsupportedOperationException("Joins are not supported"); + } + CommonTree singleTableNode = (CommonTree) source.getChild(0); + if (singleTableNode.getType() != CMISParser.TABLE_REF) + { + throw new CMISQueryException("Expecting TABLE_REF token but found " + singleTableNode.getText()); + } + String tableName = singleTableNode.getChild(0).getText(); + String alias = ""; + if (singleTableNode.getChildCount() == 2) + { + alias = singleTableNode.getChild(1).getText(); + } + QName classQName = cmisMapping.getAlfrescoClassQNameFromCmisTableName(tableName); + Source lhs = factory.createSelector(classQName, alias); + + List list = (List) (source.getChildren()); + for (CommonTree joinNode : list) + { + if (joinNode.getType() == CMISParser.JOIN) + { + CommonTree rhsSource = (CommonTree) joinNode.getFirstChildWithType(CMISParser.SOURCE); + Source rhs = buildSource(rhsSource, joinSupport, factory); + + JoinType joinType = JoinType.INNER; + CommonTree joinTypeNode = (CommonTree) joinNode.getFirstChildWithType(CMISParser.LEFT); + if (joinTypeNode != null) + { + joinType = JoinType.LEFT; + } + + if ((joinType == JoinType.LEFT) && (joinSupport == JoinSupport.INNER_JOIN_SUPPORT)) + { + throw new UnsupportedOperationException("Outer joins are not supported"); + } + + Constraint joinCondition = null; + CommonTree joinConditionNode = (CommonTree) joinNode.getFirstChildWithType(CMISParser.ON); + if (joinConditionNode != null) + { + Argument arg1 = buildColumnReference(Equals.ARG_LHS, (CommonTree) joinConditionNode.getChild(0), factory); + String functionName = getFunctionName((CommonTree) joinConditionNode.getChild(1)); + Argument arg2 = buildColumnReference(Equals.ARG_RHS, (CommonTree) joinConditionNode.getChild(2), factory); + Function function = factory.getFunction(functionName); + List functionArguments = new ArrayList(2); + functionArguments.add(arg1); + functionArguments.add(arg2); + joinCondition = factory.createFunctionalConstraint(function, functionArguments); + } + + Source join = factory.createJoin(lhs, rhs, joinType, joinCondition); + lhs = join; + } + } + + return lhs; + + } + } + + public Argument buildColumnReference(String argumentName, CommonTree columnReferenceNode, QueryModelFactory factory) + { + String cmisPropertyName = columnReferenceNode.getChild(0).getText(); + String qualifer = ""; + if (columnReferenceNode.getChildCount() > 1) + { + qualifer = columnReferenceNode.getChild(1).getText(); + } + QName propertyQName = cmisMapping.getPropertyQName(cmisPropertyName); + return factory.createPropertyArgument(argumentName, qualifer, propertyQName); + } + + public String getFunctionName(CommonTree functionNameNode) + { + switch (functionNameNode.getType()) + { + case CMISParser.EQUALS: + return Equals.NAME; + case CMISParser.UPPER: + return Upper.NAME; + case CMISParser.SCORE: + return Score.NAME; + case CMISParser.LOWER: + return Lower.NAME; + default: + throw new CMISQueryException("Unknown function: " + functionNameNode.getText()); + } + } +} diff --git a/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java b/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java new file mode 100644 index 0000000000..bf1fc3aff8 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.search.impl; + +import org.alfresco.cmis.CMISService; +import org.alfresco.cmis.dictionary.CMISDictionaryService; +import org.alfresco.cmis.dictionary.CMISMapping; +import org.alfresco.cmis.search.CMISQueryOptions; +import org.alfresco.cmis.search.CMISQueryService; +import org.alfresco.cmis.search.CMISResultSet; +import org.alfresco.cmis.search.FullTextSearchSupport; +import org.alfresco.cmis.search.JoinSupport; +import org.alfresco.repo.search.impl.querymodel.Query; + +/** + * @author andyh + */ +public class CMISQueryServiceImpl implements CMISQueryService +{ + private CMISService cmisService; + + private CMISDictionaryService cmisDictionaryService; + + private CMISMapping cmisMapping; + + /** + * @param service the service to set + */ + public void setCmisService(CMISService cmisService) + { + this.cmisService = cmisService; + } + + /** + * @param cmisDictionaryService the cmisDictionaryService to set + */ + public void setCmisDictionaryService(CMISDictionaryService cmisDictionaryService) + { + this.cmisDictionaryService = cmisDictionaryService; + } + + /** + * @param cmisMapping the cmisMapping to set + */ + public void setCmisMapping(CMISMapping cmisMapping) + { + this.cmisMapping = cmisMapping; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.search.CMISQueryService#query(org.alfresco.cmis.search.CMISQueryOptions) + */ + public CMISResultSet query(CMISQueryOptions options) + { + CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, cmisMapping, getJoinSupport()); + Query query = parser.parse(); + System.out.println(query); + return null; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.search.CMISQueryService#query(java.lang.String) + */ + public CMISResultSet query(String query) + { + CMISQueryOptions options = new CMISQueryOptions(query, cmisService.getDefaultRootStoreRef()); + return query(options); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.search.CMISQueryService#getAllVersionsSearchable() + */ + public boolean getAllVersionsSearchable() + { + return false; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.search.CMISQueryService#getFullTextSearchSupport() + */ + public FullTextSearchSupport getFullTextSearchSupport() + { + return FullTextSearchSupport.FULL_TEXT_AND_STRUCTURED; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.search.CMISQueryService#getJoinSupport() + */ + public JoinSupport getJoinSupport() + { + return JoinSupport.NO_JOIN_SUPPORT; + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index 8e7bd54ce7..05688c08e6 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -52,6 +52,7 @@ import org.alfresco.repo.dictionary.DictionaryNamespaceComponent; import org.alfresco.repo.dictionary.M2Model; import org.alfresco.repo.dictionary.NamespaceDAOImpl; import org.alfresco.repo.domain.hibernate.HibernateL1CacheBulkLoader; +import org.alfresco.repo.domain.hibernate.HibernateSessionHelper; import org.alfresco.repo.domain.hibernate.SessionSizeResourceManager; import org.alfresco.repo.node.BaseNodeServiceTest; import org.alfresco.repo.search.MLAnalysisMode; @@ -546,7 +547,8 @@ public class ADMLuceneTest extends TestCase private void doBulkTest(int n) throws Exception { - + SessionSizeResourceManager.setDisableInTransaction(); + Map testProperties = new HashMap(); testProperties.put(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic"), "BULK"); for (int i = 0; i < n; i++) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java index 1f691759ec..b54a38b603 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java @@ -64,7 +64,7 @@ public class LuceneResultSet extends AbstractResultSet private TenantService tenantService; - SearchParameters searchParameters; + private SearchParameters searchParameters; private LuceneConfig config; diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g index 6c37f0dc04..f4a563b081 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g @@ -495,6 +495,27 @@ keyWordOrId /* * LEXER */ + +/* + * Quoted strings take precedence + */ + +SINGLE_QUOTE + : '\''; + +/* + * Fragments for quoted strings + */ + +fragment +ESCAPED_SINGLE_QUOTE + : '\'\''; + +QUOTED_STRING + : SINGLE_QUOTE ( ~SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE)* SINGLE_QUOTE + ; + + SELECT : ('S'|'s')('E'|'e')('L'|'l')('E'|'e')('C'|'c')('T'|'t'); AS : ('A'|'a')('S'|'s'); @@ -545,17 +566,10 @@ LESSTHANOREQUALS : '<=' ; COLON : ':' ; -SINGLE_QUOTE - : '\''; - DOUBLE_QUOTE : '"' ; -QUOTED_STRING - : SINGLE_QUOTE ( ~SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE)* SINGLE_QUOTE - ; - /* * Decimal adapted from the Java spec @@ -577,14 +591,7 @@ FLOATING_POINT_LITERAL ID : ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..'0'|'_'|'$'|'#')* ; WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ; -/* - * Fragments for quoted strings - */ - -fragment -ESCAPED_SINGLE_QUOTE - : '\'\''; - + /** * Fragments for decimal */ diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens index eaf5076c5b..57a3e81d02 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens @@ -11,7 +11,7 @@ PRED_COMPARISON=18 CONTAINS=58 TABLE=12 SOURCE=11 -DOTDOT=74 +DOTDOT=76 EQUALS=43 NOT=47 ID=67 @@ -19,9 +19,9 @@ AND=46 LPAREN=35 LESSTHANOREQUALS=51 AS=32 -SINGLE_QUOTE=76 +SINGLE_QUOTE=74 RPAREN=36 -TILDA=75 +TILDA=77 PRED_LIKE=21 STRING_LITERAL=28 IN=53 @@ -81,4 +81,4 @@ ALL_COLUMNS=5 FROM=37 UPPER=71 PRED_IN=19 -ESCAPED_SINGLE_QUOTE=77 +ESCAPED_SINGLE_QUOTE=75 diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java index 296b78bf2e..fc94878287 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-15 16:24:40 +// $ANTLR 3.1b1 W:\\workspace-cmis2\\ANTLR\\CMIS.g 2008-07-21 10:14:45 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -21,7 +21,7 @@ public class CMISLexer extends Lexer { public static final int TABLE=12; public static final int SOURCE=11; public static final int EQUALS=43; - public static final int DOTDOT=74; + public static final int DOTDOT=76; public static final int NOT=47; public static final int ID=67; public static final int AND=46; @@ -29,9 +29,9 @@ public class CMISLexer extends Lexer { public static final int LPAREN=35; public static final int LESSTHANOREQUALS=51; public static final int AS=32; - public static final int SINGLE_QUOTE=76; + public static final int SINGLE_QUOTE=74; public static final int RPAREN=36; - public static final int TILDA=75; + public static final int TILDA=77; public static final int PRED_LIKE=21; public static final int STRING_LITERAL=28; public static final int IN=53; @@ -91,7 +91,7 @@ public class CMISLexer extends Lexer { public static final int FROM=37; public static final int UPPER=71; public static final int PRED_IN=19; - public static final int ESCAPED_SINGLE_QUOTE=77; + public static final int ESCAPED_SINGLE_QUOTE=75; // delegates // delegators @@ -104,15 +104,122 @@ public class CMISLexer extends Lexer { super(input,state); } - public String getGrammarFileName() { return "W:\\workspace-cmis\\ANTLR\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\workspace-cmis2\\ANTLR\\CMIS.g"; } + + // $ANTLR start SINGLE_QUOTE + public final void mSINGLE_QUOTE() throws RecognitionException { + try { + int _type = SINGLE_QUOTE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:504:9: ( '\\'' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:504:17: '\\'' + { + match('\''); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end SINGLE_QUOTE + + // $ANTLR start ESCAPED_SINGLE_QUOTE + public final void mESCAPED_SINGLE_QUOTE() throws RecognitionException { + try { + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:512:9: ( '\\'\\'' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:512:17: '\\'\\'' + { + match("\'\'"); + + + } + + } + finally { + } + } + // $ANTLR end ESCAPED_SINGLE_QUOTE + + // $ANTLR start QUOTED_STRING + public final void mQUOTED_STRING() throws RecognitionException { + try { + int _type = QUOTED_STRING; + int _channel = DEFAULT_TOKEN_CHANNEL; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:5: ( SINGLE_QUOTE (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:9: SINGLE_QUOTE (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE + { + mSINGLE_QUOTE(); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:22: (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* + loop1: + do { + int alt1=3; + int LA1_0 = input.LA(1); + + if ( (LA1_0=='\'') ) { + int LA1_1 = input.LA(2); + + if ( (LA1_1=='\'') ) { + alt1=2; + } + + + } + else if ( ((LA1_0>='\u0000' && LA1_0<='&')||(LA1_0>='(' && LA1_0<='\uFFFE')) ) { + alt1=1; + } + + + switch (alt1) { + case 1 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:24: ~ SINGLE_QUOTE + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='I')||(input.LA(1)>='K' && input.LA(1)<='\uFFFE') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + case 2 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:40: ESCAPED_SINGLE_QUOTE + { + mESCAPED_SINGLE_QUOTE(); + + } + break; + + default : + break loop1; + } + } while (true); + + mSINGLE_QUOTE(); + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end QUOTED_STRING // $ANTLR start SELECT public final void mSELECT() throws RecognitionException { try { int _type = SELECT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:499:8: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:499:10: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:520:8: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:520:10: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -184,8 +291,8 @@ public class CMISLexer extends Lexer { try { int _type = AS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:500:4: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:500:6: ( 'A' | 'a' ) ( 'S' | 's' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:521:4: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:521:6: ( 'A' | 'a' ) ( 'S' | 's' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -221,8 +328,8 @@ public class CMISLexer extends Lexer { try { int _type = UPPER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:501:7: ( ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:501:9: ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:522:7: ( ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:522:9: ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='U'||input.LA(1)=='u' ) { input.consume(); @@ -285,8 +392,8 @@ public class CMISLexer extends Lexer { try { int _type = LOWER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:502:7: ( ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:502:9: ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:523:7: ( ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:523:9: ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -349,8 +456,8 @@ public class CMISLexer extends Lexer { try { int _type = FROM; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:503:6: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:503:8: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:524:6: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:524:8: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -404,8 +511,8 @@ public class CMISLexer extends Lexer { try { int _type = JOIN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:504:6: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:504:8: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:525:6: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:525:8: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='J'||input.LA(1)=='j' ) { input.consume(); @@ -459,8 +566,8 @@ public class CMISLexer extends Lexer { try { int _type = INNER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:505:7: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:505:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:526:7: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:526:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -523,8 +630,8 @@ public class CMISLexer extends Lexer { try { int _type = LEFT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:506:6: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:506:8: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:527:6: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:527:8: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -578,8 +685,8 @@ public class CMISLexer extends Lexer { try { int _type = OUTER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:507:7: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:507:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:528:7: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:528:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -642,8 +749,8 @@ public class CMISLexer extends Lexer { try { int _type = ON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:508:4: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:508:6: ( 'O' | 'o' ) ( 'N' | 'n' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:4: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:6: ( 'O' | 'o' ) ( 'N' | 'n' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -679,8 +786,8 @@ public class CMISLexer extends Lexer { try { int _type = WHERE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:509:7: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:509:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:530:7: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:530:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='W'||input.LA(1)=='w' ) { input.consume(); @@ -743,8 +850,8 @@ public class CMISLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:510:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:510:6: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:6: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -780,8 +887,8 @@ public class CMISLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:511:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:511:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:532:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:532:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -826,8 +933,8 @@ public class CMISLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:512:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:512:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:533:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:533:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -872,8 +979,8 @@ public class CMISLexer extends Lexer { try { int _type = IN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:513:4: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:513:6: ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:4: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:6: ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -909,8 +1016,8 @@ public class CMISLexer extends Lexer { try { int _type = LIKE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:514:6: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:514:8: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:535:6: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:535:8: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -964,8 +1071,8 @@ public class CMISLexer extends Lexer { try { int _type = IS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:515:4: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:515:6: ( 'I' | 'i' ) ( 'S' | 's' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:4: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:6: ( 'I' | 'i' ) ( 'S' | 's' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1001,8 +1108,8 @@ public class CMISLexer extends Lexer { try { int _type = NULL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:516:6: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:516:8: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:537:6: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:537:8: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -1056,8 +1163,8 @@ public class CMISLexer extends Lexer { try { int _type = ANY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:517:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:517:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:538:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:538:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1102,8 +1209,8 @@ public class CMISLexer extends Lexer { try { int _type = CONTAINS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:518:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:518:11: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:539:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:539:11: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) { if ( input.LA(1)=='C'||input.LA(1)=='c' ) { input.consume(); @@ -1193,8 +1300,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_FOLDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:520:2: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:520:4: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:541:2: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:541:4: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1285,8 +1392,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_TREE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:521:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:521:11: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:542:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:542:11: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1359,8 +1466,8 @@ public class CMISLexer extends Lexer { try { int _type = ORDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:522:7: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:522:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:543:7: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:543:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -1423,8 +1530,8 @@ public class CMISLexer extends Lexer { try { int _type = BY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:523:4: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:523:6: ( 'B' | 'b' ) ( 'Y' | 'y' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:4: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:6: ( 'B' | 'b' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='B'||input.LA(1)=='b' ) { input.consume(); @@ -1460,8 +1567,8 @@ public class CMISLexer extends Lexer { try { int _type = ASC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:524:5: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:524:7: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:545:5: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:545:7: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1506,8 +1613,8 @@ public class CMISLexer extends Lexer { try { int _type = DESC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:525:6: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:525:8: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:546:6: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:546:8: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='D'||input.LA(1)=='d' ) { input.consume(); @@ -1561,8 +1668,8 @@ public class CMISLexer extends Lexer { try { int _type = SCORE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:526:7: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:526:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:547:7: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:547:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -1625,8 +1732,8 @@ public class CMISLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:527:8: ( '(' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:527:10: '(' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:8: ( '(' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:10: '(' { match('('); @@ -1645,8 +1752,8 @@ public class CMISLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:528:8: ( ')' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:528:10: ')' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:8: ( ')' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:10: ')' { match(')'); @@ -1665,8 +1772,8 @@ public class CMISLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:529:6: ( '*' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:529:8: '*' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:6: ( '*' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:8: '*' { match('*'); @@ -1685,8 +1792,8 @@ public class CMISLexer extends Lexer { try { int _type = COMMA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:530:7: ( ',' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:530:9: ',' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:7: ( ',' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:9: ',' { match(','); @@ -1705,8 +1812,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTSTAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:531:9: ( '.*' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:531:11: '.*' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:9: ( '.*' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:11: '.*' { match(".*"); @@ -1726,8 +1833,8 @@ public class CMISLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:532:5: ( '.' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:532:7: '.' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:5: ( '.' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:7: '.' { match('.'); @@ -1746,8 +1853,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:533:8: ( '..' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:533:10: '..' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:8: ( '..' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:10: '..' { match(".."); @@ -1767,8 +1874,8 @@ public class CMISLexer extends Lexer { try { int _type = EQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:534:9: ( '=' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:534:11: '=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:9: ( '=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:11: '=' { match('='); @@ -1787,8 +1894,8 @@ public class CMISLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:535:7: ( '~' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:535:9: '~' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:7: ( '~' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:9: '~' { match('~'); @@ -1807,8 +1914,8 @@ public class CMISLexer extends Lexer { try { int _type = NOTEQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:537:2: ( '<>' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:537:4: '<>' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:2: ( '<>' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:4: '<>' { match("<>"); @@ -1828,8 +1935,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:539:2: ( '>' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:539:4: '>' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:2: ( '>' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:4: '>' { match('>'); @@ -1848,8 +1955,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:541:2: ( '<' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:541:4: '<' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:2: ( '<' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:4: '<' { match('<'); @@ -1868,8 +1975,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:543:2: ( '>=' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:543:4: '>=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:2: ( '>=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:4: '>=' { match(">="); @@ -1889,8 +1996,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:545:2: ( '<=' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:545:4: '<=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:2: ( '<=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:4: '<=' { match("<="); @@ -1910,8 +2017,8 @@ public class CMISLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:546:7: ( ':' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:546:9: ':' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:567:7: ( ':' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:567:9: ':' { match(':'); @@ -1925,33 +2032,13 @@ public class CMISLexer extends Lexer { } // $ANTLR end COLON - // $ANTLR start SINGLE_QUOTE - public final void mSINGLE_QUOTE() throws RecognitionException { - try { - int _type = SINGLE_QUOTE; - int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:549:9: ( '\\'' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:549:17: '\\'' - { - match('\''); - - } - - state.type = _type; - state.channel = _channel; - } - finally { - } - } - // $ANTLR end SINGLE_QUOTE - // $ANTLR start DOUBLE_QUOTE public final void mDOUBLE_QUOTE() throws RecognitionException { try { int _type = DOUBLE_QUOTE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:552:2: ( '\"' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:552:4: '\"' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:570:2: ( '\"' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:570:4: '\"' { match('\"'); @@ -1965,85 +2052,15 @@ public class CMISLexer extends Lexer { } // $ANTLR end DOUBLE_QUOTE - // $ANTLR start QUOTED_STRING - public final void mQUOTED_STRING() throws RecognitionException { - try { - int _type = QUOTED_STRING; - int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:556:2: ( SINGLE_QUOTE (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:556:4: SINGLE_QUOTE (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE - { - mSINGLE_QUOTE(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:556:17: (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* - loop1: - do { - int alt1=3; - int LA1_0 = input.LA(1); - - if ( (LA1_0=='\'') ) { - int LA1_1 = input.LA(2); - - if ( (LA1_1=='\'') ) { - alt1=2; - } - - - } - else if ( ((LA1_0>='\u0000' && LA1_0<='&')||(LA1_0>='(' && LA1_0<='\uFFFE')) ) { - alt1=1; - } - - - switch (alt1) { - case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:556:19: ~ SINGLE_QUOTE - { - if ( (input.LA(1)>='\u0000' && input.LA(1)<='K')||(input.LA(1)>='M' && input.LA(1)<='\uFFFE') ) { - input.consume(); - - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} - - - } - break; - case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:556:35: ESCAPED_SINGLE_QUOTE - { - mESCAPED_SINGLE_QUOTE(); - - } - break; - - default : - break loop1; - } - } while (true); - - mSINGLE_QUOTE(); - - } - - state.type = _type; - state.channel = _channel; - } - finally { - } - } - // $ANTLR end QUOTED_STRING - // $ANTLR start DECIMAL_INTEGER_LITERAL public final void mDECIMAL_INTEGER_LITERAL() throws RecognitionException { try { int _type = DECIMAL_INTEGER_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:564:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:564:11: ( PLUS | MINUS )? DECIMAL_NUMERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:578:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:578:11: ( PLUS | MINUS )? DECIMAL_NUMERAL { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:564:11: ( PLUS | MINUS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:578:11: ( PLUS | MINUS )? int alt2=2; int LA2_0 = input.LA(1); @@ -2052,7 +2069,7 @@ public class CMISLexer extends Lexer { } switch (alt2) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2086,14 +2103,14 @@ public class CMISLexer extends Lexer { try { int _type = FLOATING_POINT_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:2: ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:2: ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT ) int alt9=3; alt9 = dfa9.predict(input); switch (alt9) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:4: ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:4: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: ( DIGIT )+ int cnt3=0; loop3: do { @@ -2107,7 +2124,7 @@ public class CMISLexer extends Lexer { switch (alt3) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:4: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: DIGIT { mDIGIT(); @@ -2124,7 +2141,7 @@ public class CMISLexer extends Lexer { } while (true); mDOT(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:15: ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:15: ( DIGIT )* loop4: do { int alt4=2; @@ -2137,7 +2154,7 @@ public class CMISLexer extends Lexer { switch (alt4) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:15: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:15: DIGIT { mDIGIT(); @@ -2149,7 +2166,7 @@ public class CMISLexer extends Lexer { } } while (true); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:22: ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:22: ( EXPONENT )? int alt5=2; int LA5_0 = input.LA(1); @@ -2158,7 +2175,7 @@ public class CMISLexer extends Lexer { } switch (alt5) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:571:22: EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:22: EXPONENT { mEXPONENT(); @@ -2171,10 +2188,10 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:572:4: DOT ( DIGIT )+ ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:4: DOT ( DIGIT )+ ( EXPONENT )? { mDOT(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:572:8: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:8: ( DIGIT )+ int cnt6=0; loop6: do { @@ -2188,7 +2205,7 @@ public class CMISLexer extends Lexer { switch (alt6) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:572:8: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:8: DIGIT { mDIGIT(); @@ -2204,7 +2221,7 @@ public class CMISLexer extends Lexer { cnt6++; } while (true); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:572:15: ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:15: ( EXPONENT )? int alt7=2; int LA7_0 = input.LA(1); @@ -2213,7 +2230,7 @@ public class CMISLexer extends Lexer { } switch (alt7) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:572:15: EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:15: EXPONENT { mEXPONENT(); @@ -2226,9 +2243,9 @@ public class CMISLexer extends Lexer { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:573:4: ( DIGIT )+ EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ EXPONENT { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:573:4: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ int cnt8=0; loop8: do { @@ -2242,7 +2259,7 @@ public class CMISLexer extends Lexer { switch (alt8) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:573:4: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: DIGIT { mDIGIT(); @@ -2277,8 +2294,8 @@ public class CMISLexer extends Lexer { try { int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:577:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:577:6: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:591:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:591:6: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2289,7 +2306,7 @@ public class CMISLexer extends Lexer { recover(mse); throw mse;} - // W:\\workspace-cmis\\ANTLR\\CMIS.g:577:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:591:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* loop10: do { int alt10=2; @@ -2302,7 +2319,7 @@ public class CMISLexer extends Lexer { switch (alt10) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( (input.LA(1)>='#' && input.LA(1)<='$')||input.LA(1)=='0'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2338,10 +2355,10 @@ public class CMISLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\CMIS.g:578:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:578:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:578:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt11=0; loop11: do { @@ -2355,7 +2372,7 @@ public class CMISLexer extends Lexer { switch (alt11) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { input.consume(); @@ -2391,27 +2408,10 @@ public class CMISLexer extends Lexer { } // $ANTLR end WS - // $ANTLR start ESCAPED_SINGLE_QUOTE - public final void mESCAPED_SINGLE_QUOTE() throws RecognitionException { - try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:586:9: ( '\\'\\'' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:586:17: '\\'\\'' - { - match("\'\'"); - - - } - - } - finally { - } - } - // $ANTLR end ESCAPED_SINGLE_QUOTE - // $ANTLR start DECIMAL_NUMERAL public final void mDECIMAL_NUMERAL() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:594:2: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:601:2: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) int alt13=2; int LA13_0 = input.LA(1); @@ -2429,17 +2429,17 @@ public class CMISLexer extends Lexer { } switch (alt13) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:594:4: ZERO_DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:601:4: ZERO_DIGIT { mZERO_DIGIT(); } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:595:4: NON_ZERO_DIGIT ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:4: NON_ZERO_DIGIT ( DIGIT )* { mNON_ZERO_DIGIT(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:595:19: ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:19: ( DIGIT )* loop12: do { int alt12=2; @@ -2452,7 +2452,7 @@ public class CMISLexer extends Lexer { switch (alt12) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:595:19: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:19: DIGIT { mDIGIT(); @@ -2478,8 +2478,8 @@ public class CMISLexer extends Lexer { // $ANTLR start DIGIT public final void mDIGIT() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:598:7: ( ZERO_DIGIT | NON_ZERO_DIGIT ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:605:7: ( ZERO_DIGIT | NON_ZERO_DIGIT ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9') ) { input.consume(); @@ -2502,8 +2502,8 @@ public class CMISLexer extends Lexer { // $ANTLR start ZERO_DIGIT public final void mZERO_DIGIT() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:601:2: ( '0' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:601:4: '0' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:608:2: ( '0' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:608:4: '0' { match('0'); @@ -2518,8 +2518,8 @@ public class CMISLexer extends Lexer { // $ANTLR start NON_ZERO_DIGIT public final void mNON_ZERO_DIGIT() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:604:2: ( '1' .. '9' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:604:4: '1' .. '9' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:611:2: ( '1' .. '9' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:611:4: '1' .. '9' { matchRange('1','9'); @@ -2534,8 +2534,8 @@ public class CMISLexer extends Lexer { // $ANTLR start PLUS public final void mPLUS() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:606:6: ( '+' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:606:8: '+' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:613:6: ( '+' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:613:8: '+' { match('+'); @@ -2550,8 +2550,8 @@ public class CMISLexer extends Lexer { // $ANTLR start MINUS public final void mMINUS() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:608:7: ( '-' ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:608:9: '-' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:7: ( '-' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:9: '-' { match('-'); @@ -2566,8 +2566,8 @@ public class CMISLexer extends Lexer { // $ANTLR start E public final void mE() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:611:3: ( ( 'e' | 'E' ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:611:5: ( 'e' | 'E' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:618:3: ( ( 'e' | 'E' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:618:5: ( 'e' | 'E' ) { if ( input.LA(1)=='E'||input.LA(1)=='e' ) { input.consume(); @@ -2590,8 +2590,8 @@ public class CMISLexer extends Lexer { // $ANTLR start EXPONENT public final void mEXPONENT() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:622:2: ( E SIGNED_INTEGER ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:622:4: E SIGNED_INTEGER + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:629:2: ( E SIGNED_INTEGER ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:629:4: E SIGNED_INTEGER { mE(); mSIGNED_INTEGER(); @@ -2607,10 +2607,10 @@ public class CMISLexer extends Lexer { // $ANTLR start SIGNED_INTEGER public final void mSIGNED_INTEGER() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:626:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:626:4: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:4: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:626:4: ( PLUS | MINUS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:4: ( PLUS | MINUS )? int alt14=2; int LA14_0 = input.LA(1); @@ -2619,7 +2619,7 @@ public class CMISLexer extends Lexer { } switch (alt14) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2636,7 +2636,7 @@ public class CMISLexer extends Lexer { } - // W:\\workspace-cmis\\ANTLR\\CMIS.g:626:20: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:20: ( DIGIT )+ int cnt15=0; loop15: do { @@ -2650,7 +2650,7 @@ public class CMISLexer extends Lexer { switch (alt15) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:626:20: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:20: DIGIT { mDIGIT(); @@ -2676,348 +2676,348 @@ public class CMISLexer extends Lexer { // $ANTLR end SIGNED_INTEGER public void mTokens() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:8: ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | SINGLE_QUOTE | DOUBLE_QUOTE | QUOTED_STRING | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:8: ( SINGLE_QUOTE | QUOTED_STRING | SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) int alt16=49; alt16 = dfa16.predict(input); switch (alt16) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:10: SELECT - { - mSELECT(); - - } - break; - case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:17: AS - { - mAS(); - - } - break; - case 3 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:20: UPPER - { - mUPPER(); - - } - break; - case 4 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:26: LOWER - { - mLOWER(); - - } - break; - case 5 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:32: FROM - { - mFROM(); - - } - break; - case 6 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:37: JOIN - { - mJOIN(); - - } - break; - case 7 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:42: INNER - { - mINNER(); - - } - break; - case 8 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:48: LEFT - { - mLEFT(); - - } - break; - case 9 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:53: OUTER - { - mOUTER(); - - } - break; - case 10 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:59: ON - { - mON(); - - } - break; - case 11 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:62: WHERE - { - mWHERE(); - - } - break; - case 12 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:68: OR - { - mOR(); - - } - break; - case 13 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:71: AND - { - mAND(); - - } - break; - case 14 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:75: NOT - { - mNOT(); - - } - break; - case 15 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:79: IN - { - mIN(); - - } - break; - case 16 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:82: LIKE - { - mLIKE(); - - } - break; - case 17 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:87: IS - { - mIS(); - - } - break; - case 18 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:90: NULL - { - mNULL(); - - } - break; - case 19 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:95: ANY - { - mANY(); - - } - break; - case 20 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:99: CONTAINS - { - mCONTAINS(); - - } - break; - case 21 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:108: IN_FOLDER - { - mIN_FOLDER(); - - } - break; - case 22 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:118: IN_TREE - { - mIN_TREE(); - - } - break; - case 23 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:126: ORDER - { - mORDER(); - - } - break; - case 24 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:132: BY - { - mBY(); - - } - break; - case 25 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:135: ASC - { - mASC(); - - } - break; - case 26 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:139: DESC - { - mDESC(); - - } - break; - case 27 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:144: SCORE - { - mSCORE(); - - } - break; - case 28 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:150: LPAREN - { - mLPAREN(); - - } - break; - case 29 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:157: RPAREN - { - mRPAREN(); - - } - break; - case 30 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:164: STAR - { - mSTAR(); - - } - break; - case 31 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:169: COMMA - { - mCOMMA(); - - } - break; - case 32 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:175: DOTSTAR - { - mDOTSTAR(); - - } - break; - case 33 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:183: DOT - { - mDOT(); - - } - break; - case 34 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:187: DOTDOT - { - mDOTDOT(); - - } - break; - case 35 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:194: EQUALS - { - mEQUALS(); - - } - break; - case 36 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:201: TILDA - { - mTILDA(); - - } - break; - case 37 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:207: NOTEQUALS - { - mNOTEQUALS(); - - } - break; - case 38 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:217: GREATERTHAN - { - mGREATERTHAN(); - - } - break; - case 39 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:229: LESSTHAN - { - mLESSTHAN(); - - } - break; - case 40 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:238: GREATERTHANOREQUALS - { - mGREATERTHANOREQUALS(); - - } - break; - case 41 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:258: LESSTHANOREQUALS - { - mLESSTHANOREQUALS(); - - } - break; - case 42 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:275: COLON - { - mCOLON(); - - } - break; - case 43 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:281: SINGLE_QUOTE + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:10: SINGLE_QUOTE { mSINGLE_QUOTE(); } break; - case 44 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:294: DOUBLE_QUOTE - { - mDOUBLE_QUOTE(); - - } - break; - case 45 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:307: QUOTED_STRING + case 2 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:23: QUOTED_STRING { mQUOTED_STRING(); + } + break; + case 3 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:37: SELECT + { + mSELECT(); + + } + break; + case 4 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:44: AS + { + mAS(); + + } + break; + case 5 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:47: UPPER + { + mUPPER(); + + } + break; + case 6 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:53: LOWER + { + mLOWER(); + + } + break; + case 7 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:59: FROM + { + mFROM(); + + } + break; + case 8 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:64: JOIN + { + mJOIN(); + + } + break; + case 9 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:69: INNER + { + mINNER(); + + } + break; + case 10 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:75: LEFT + { + mLEFT(); + + } + break; + case 11 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:80: OUTER + { + mOUTER(); + + } + break; + case 12 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:86: ON + { + mON(); + + } + break; + case 13 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:89: WHERE + { + mWHERE(); + + } + break; + case 14 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:95: OR + { + mOR(); + + } + break; + case 15 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:98: AND + { + mAND(); + + } + break; + case 16 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:102: NOT + { + mNOT(); + + } + break; + case 17 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:106: IN + { + mIN(); + + } + break; + case 18 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:109: LIKE + { + mLIKE(); + + } + break; + case 19 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:114: IS + { + mIS(); + + } + break; + case 20 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:117: NULL + { + mNULL(); + + } + break; + case 21 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:122: ANY + { + mANY(); + + } + break; + case 22 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:126: CONTAINS + { + mCONTAINS(); + + } + break; + case 23 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:135: IN_FOLDER + { + mIN_FOLDER(); + + } + break; + case 24 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:145: IN_TREE + { + mIN_TREE(); + + } + break; + case 25 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:153: ORDER + { + mORDER(); + + } + break; + case 26 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:159: BY + { + mBY(); + + } + break; + case 27 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:162: ASC + { + mASC(); + + } + break; + case 28 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:166: DESC + { + mDESC(); + + } + break; + case 29 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:171: SCORE + { + mSCORE(); + + } + break; + case 30 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:177: LPAREN + { + mLPAREN(); + + } + break; + case 31 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:184: RPAREN + { + mRPAREN(); + + } + break; + case 32 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:191: STAR + { + mSTAR(); + + } + break; + case 33 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:196: COMMA + { + mCOMMA(); + + } + break; + case 34 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:202: DOTSTAR + { + mDOTSTAR(); + + } + break; + case 35 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:210: DOT + { + mDOT(); + + } + break; + case 36 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:214: DOTDOT + { + mDOTDOT(); + + } + break; + case 37 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:221: EQUALS + { + mEQUALS(); + + } + break; + case 38 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:228: TILDA + { + mTILDA(); + + } + break; + case 39 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:234: NOTEQUALS + { + mNOTEQUALS(); + + } + break; + case 40 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:244: GREATERTHAN + { + mGREATERTHAN(); + + } + break; + case 41 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:256: LESSTHAN + { + mLESSTHAN(); + + } + break; + case 42 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:265: GREATERTHANOREQUALS + { + mGREATERTHANOREQUALS(); + + } + break; + case 43 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:285: LESSTHANOREQUALS + { + mLESSTHANOREQUALS(); + + } + break; + case 44 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:302: COLON + { + mCOLON(); + + } + break; + case 45 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:308: DOUBLE_QUOTE + { + mDOUBLE_QUOTE(); + } break; case 46 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:321: DECIMAL_INTEGER_LITERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:321: DECIMAL_INTEGER_LITERAL { mDECIMAL_INTEGER_LITERAL(); } break; case 47 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:345: FLOATING_POINT_LITERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:345: FLOATING_POINT_LITERAL { mFLOATING_POINT_LITERAL(); } break; case 48 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:368: ID + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:368: ID { mID(); } break; case 49 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:1:371: WS + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:1:371: WS { mWS(); @@ -3081,91 +3081,93 @@ public class CMISLexer extends Lexer { this.transition = DFA9_transition; } public String getDescription() { - return "570:1: FLOATING_POINT_LITERAL : ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT );"; + return "584:1: FLOATING_POINT_LITERAL : ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT );"; } } static final String DFA16_eotS = - "\1\uffff\15\35\4\uffff\1\66\2\uffff\1\72\1\74\1\uffff\1\75\2\uffff"+ - "\2\32\2\uffff\2\35\1\103\7\35\1\116\1\117\1\35\1\121\1\123\4\35"+ - "\1\130\1\35\13\uffff\1\32\2\35\1\134\1\uffff\1\135\1\136\10\35\2"+ - "\uffff\1\35\1\uffff\1\35\1\uffff\1\35\1\153\2\35\1\uffff\3\35\3"+ - "\uffff\2\35\1\163\1\164\1\165\1\166\6\35\1\uffff\1\175\1\35\1\177"+ - "\1\35\1\u0081\1\u0082\1\u0083\4\uffff\1\u0084\2\35\1\u0087\1\u0088"+ - "\1\u0089\1\uffff\1\35\1\uffff\1\u008b\4\uffff\2\35\3\uffff\1\35"+ - "\1\uffff\1\35\1\u0090\2\35\1\uffff\1\u0093\1\u0094\2\uffff"; + "\1\uffff\1\37\15\35\4\uffff\1\70\2\uffff\1\74\1\76\3\uffff\2\32"+ + "\4\uffff\2\35\1\103\7\35\1\116\1\117\1\35\1\121\1\123\4\35\1\130"+ + "\1\35\11\uffff\1\32\2\35\1\134\1\uffff\1\135\1\136\10\35\2\uffff"+ + "\1\35\1\uffff\1\35\1\uffff\1\35\1\153\2\35\1\uffff\3\35\3\uffff"+ + "\2\35\1\163\1\164\1\165\1\166\6\35\1\uffff\1\175\1\35\1\177\1\35"+ + "\1\u0081\1\u0082\1\u0083\4\uffff\1\u0084\2\35\1\u0087\1\u0088\1"+ + "\u0089\1\uffff\1\35\1\uffff\1\u008b\4\uffff\2\35\3\uffff\1\35\1"+ + "\uffff\1\35\1\u0090\2\35\1\uffff\1\u0093\1\u0094\2\uffff"; static final String DFA16_eofS = "\u0095\uffff"; static final String DFA16_minS = - "\1\11\1\103\1\116\1\120\1\105\1\122\1\117\2\116\1\110\2\117\1\131"+ - "\1\105\4\uffff\1\52\2\uffff\2\75\1\uffff\1\0\2\uffff\2\56\2\uffff"+ - "\1\114\1\117\1\43\1\104\1\120\1\127\1\106\1\113\1\117\1\111\2\43"+ - "\1\124\2\43\1\105\1\124\1\114\1\116\1\43\1\123\13\uffff\1\56\1\105"+ - "\1\122\1\43\1\uffff\2\43\2\105\1\124\1\105\1\115\1\116\1\105\1\106"+ - "\2\uffff\1\105\1\uffff\1\105\1\uffff\1\122\1\43\1\114\1\124\1\uffff"+ - "\2\103\1\105\3\uffff\2\122\4\43\1\122\1\117\3\122\1\105\1\uffff"+ - "\1\43\1\101\1\43\1\124\3\43\4\uffff\1\43\1\114\1\105\3\43\1\uffff"+ - "\1\111\1\uffff\1\43\4\uffff\1\104\1\105\3\uffff\1\116\1\uffff\1"+ - "\105\1\43\1\123\1\122\1\uffff\2\43\2\uffff"; + "\1\11\1\0\1\103\1\116\1\120\1\105\1\122\1\117\2\116\1\110\2\117"+ + "\1\131\1\105\4\uffff\1\52\2\uffff\2\75\3\uffff\2\56\4\uffff\1\114"+ + "\1\117\1\43\1\104\1\120\1\127\1\106\1\113\1\117\1\111\2\43\1\124"+ + "\2\43\1\105\1\124\1\114\1\116\1\43\1\123\11\uffff\1\56\1\105\1\122"+ + "\1\43\1\uffff\2\43\2\105\1\124\1\105\1\115\1\116\1\105\1\106\2\uffff"+ + "\1\105\1\uffff\1\105\1\uffff\1\122\1\43\1\114\1\124\1\uffff\2\103"+ + "\1\105\3\uffff\2\122\4\43\1\122\1\117\3\122\1\105\1\uffff\1\43\1"+ + "\101\1\43\1\124\3\43\4\uffff\1\43\1\114\1\105\3\43\1\uffff\1\111"+ + "\1\uffff\1\43\4\uffff\1\104\1\105\3\uffff\1\116\1\uffff\1\105\1"+ + "\43\1\123\1\122\1\uffff\2\43\2\uffff"; static final String DFA16_maxS = - "\1\176\1\145\1\163\1\160\1\157\1\162\1\157\1\163\1\165\1\150\1"+ - "\165\1\157\1\171\1\145\4\uffff\1\71\2\uffff\1\76\1\75\1\uffff\1"+ - "\ufffe\2\uffff\2\145\2\uffff\1\154\1\157\1\172\1\171\1\160\1\167"+ - "\1\146\1\153\1\157\1\151\2\172\1\164\2\172\1\145\1\164\1\154\1\156"+ - "\1\172\1\163\13\uffff\2\145\1\162\1\172\1\uffff\2\172\2\145\1\164"+ - "\1\145\1\155\1\156\1\145\1\164\2\uffff\1\145\1\uffff\1\145\1\uffff"+ - "\1\162\1\172\1\154\1\164\1\uffff\2\143\1\145\3\uffff\2\162\4\172"+ - "\1\162\1\157\3\162\1\145\1\uffff\1\172\1\141\1\172\1\164\3\172\4"+ - "\uffff\1\172\1\154\1\145\3\172\1\uffff\1\151\1\uffff\1\172\4\uffff"+ - "\1\144\1\145\3\uffff\1\156\1\uffff\1\145\1\172\1\163\1\162\1\uffff"+ - "\2\172\2\uffff"; + "\1\176\1\ufffe\1\145\1\163\1\160\1\157\1\162\1\157\1\163\1\165"+ + "\1\150\1\165\1\157\1\171\1\145\4\uffff\1\71\2\uffff\1\76\1\75\3"+ + "\uffff\2\145\4\uffff\1\154\1\157\1\172\1\171\1\160\1\167\1\146\1"+ + "\153\1\157\1\151\2\172\1\164\2\172\1\145\1\164\1\154\1\156\1\172"+ + "\1\163\11\uffff\2\145\1\162\1\172\1\uffff\2\172\2\145\1\164\1\145"+ + "\1\155\1\156\1\145\1\164\2\uffff\1\145\1\uffff\1\145\1\uffff\1\162"+ + "\1\172\1\154\1\164\1\uffff\2\143\1\145\3\uffff\2\162\4\172\1\162"+ + "\1\157\3\162\1\145\1\uffff\1\172\1\141\1\172\1\164\3\172\4\uffff"+ + "\1\172\1\154\1\145\3\172\1\uffff\1\151\1\uffff\1\172\4\uffff\1\144"+ + "\1\145\3\uffff\1\156\1\uffff\1\145\1\172\1\163\1\162\1\uffff\2\172"+ + "\2\uffff"; static final String DFA16_acceptS = - "\16\uffff\1\34\1\35\1\36\1\37\1\uffff\1\43\1\44\2\uffff\1\52\1"+ - "\uffff\1\54\1\56\2\uffff\1\60\1\61\25\uffff\1\40\1\42\1\41\1\57"+ - "\1\45\1\51\1\47\1\50\1\46\1\53\1\55\4\uffff\1\2\12\uffff\1\17\1"+ - "\21\1\uffff\1\12\1\uffff\1\14\4\uffff\1\30\3\uffff\1\31\1\15\1\23"+ - "\14\uffff\1\16\7\uffff\1\10\1\20\1\5\1\6\6\uffff\1\22\1\uffff\1"+ - "\32\1\uffff\1\33\1\3\1\4\1\7\2\uffff\1\11\1\27\1\13\1\uffff\1\1"+ - "\4\uffff\1\26\2\uffff\1\24\1\25"; + "\17\uffff\1\36\1\37\1\40\1\41\1\uffff\1\45\1\46\2\uffff\1\54\1"+ + "\55\1\56\2\uffff\1\60\1\61\1\1\1\2\25\uffff\1\42\1\44\1\43\1\57"+ + "\1\47\1\53\1\51\1\52\1\50\4\uffff\1\4\12\uffff\1\21\1\23\1\uffff"+ + "\1\14\1\uffff\1\16\4\uffff\1\32\3\uffff\1\33\1\17\1\25\14\uffff"+ + "\1\20\7\uffff\1\12\1\22\1\7\1\10\6\uffff\1\24\1\uffff\1\34\1\uffff"+ + "\1\35\1\5\1\6\1\11\2\uffff\1\13\1\31\1\15\1\uffff\1\3\4\uffff\1"+ + "\30\2\uffff\1\26\1\27"; static final String DFA16_specialS = "\u0095\uffff}>"; static final String[] DFA16_transitionS = { - "\2\36\2\uffff\1\36\22\uffff\1\36\1\uffff\1\31\4\uffff\1\30"+ - "\1\16\1\17\1\20\1\32\1\21\1\32\1\22\1\uffff\1\33\11\34\1\27"+ - "\1\uffff\1\25\1\23\1\26\2\uffff\1\2\1\14\1\13\1\15\1\35\1\5"+ - "\2\35\1\7\1\6\1\35\1\4\1\35\1\12\1\10\3\35\1\1\1\35\1\3\1\35"+ - "\1\11\3\35\4\uffff\1\35\1\uffff\1\2\1\14\1\13\1\15\1\35\1\5"+ - "\2\35\1\7\1\6\1\35\1\4\1\35\1\12\1\10\3\35\1\1\1\35\1\3\1\35"+ - "\1\11\3\35\3\uffff\1\24", - "\1\40\1\uffff\1\37\35\uffff\1\40\1\uffff\1\37", - "\1\42\4\uffff\1\41\32\uffff\1\42\4\uffff\1\41", - "\1\43\37\uffff\1\43", - "\1\45\3\uffff\1\46\5\uffff\1\44\25\uffff\1\45\3\uffff\1\46"+ - "\5\uffff\1\44", - "\1\47\37\uffff\1\47", - "\1\50\37\uffff\1\50", - "\1\51\4\uffff\1\52\32\uffff\1\51\4\uffff\1\52", - "\1\54\3\uffff\1\55\2\uffff\1\53\30\uffff\1\54\3\uffff\1\55"+ - "\2\uffff\1\53", - "\1\56\37\uffff\1\56", - "\1\57\5\uffff\1\60\31\uffff\1\57\5\uffff\1\60", - "\1\61\37\uffff\1\61", - "\1\62\37\uffff\1\62", + "\2\36\2\uffff\1\36\22\uffff\1\36\1\uffff\1\31\4\uffff\1\1\1"+ + "\17\1\20\1\21\1\32\1\22\1\32\1\23\1\uffff\1\33\11\34\1\30\1"+ + "\uffff\1\26\1\24\1\27\2\uffff\1\3\1\15\1\14\1\16\1\35\1\6\2"+ + "\35\1\10\1\7\1\35\1\5\1\35\1\13\1\11\3\35\1\2\1\35\1\4\1\35"+ + "\1\12\3\35\4\uffff\1\35\1\uffff\1\3\1\15\1\14\1\16\1\35\1\6"+ + "\2\35\1\10\1\7\1\35\1\5\1\35\1\13\1\11\3\35\1\2\1\35\1\4\1\35"+ + "\1\12\3\35\3\uffff\1\25", + "\uffff\40", + "\1\42\1\uffff\1\41\35\uffff\1\42\1\uffff\1\41", + "\1\44\4\uffff\1\43\32\uffff\1\44\4\uffff\1\43", + "\1\45\37\uffff\1\45", + "\1\47\3\uffff\1\50\5\uffff\1\46\25\uffff\1\47\3\uffff\1\50"+ + "\5\uffff\1\46", + "\1\51\37\uffff\1\51", + "\1\52\37\uffff\1\52", + "\1\53\4\uffff\1\54\32\uffff\1\53\4\uffff\1\54", + "\1\56\3\uffff\1\57\2\uffff\1\55\30\uffff\1\56\3\uffff\1\57"+ + "\2\uffff\1\55", + "\1\60\37\uffff\1\60", + "\1\61\5\uffff\1\62\31\uffff\1\61\5\uffff\1\62", "\1\63\37\uffff\1\63", + "\1\64\37\uffff\1\64", + "\1\65\37\uffff\1\65", "", "", "", "", - "\1\64\3\uffff\1\65\1\uffff\12\67", + "\1\66\3\uffff\1\67\1\uffff\12\71", "", "", - "\1\71\1\70", - "\1\73", - "", - "\uffff\76", + "\1\73\1\72", + "\1\75", + "", + "", + "", + "\1\71\1\uffff\12\71\13\uffff\1\71\37\uffff\1\71", + "\1\71\1\uffff\12\77\13\uffff\1\71\37\uffff\1\71", "", "", - "\1\67\1\uffff\12\67\13\uffff\1\67\37\uffff\1\67", - "\1\67\1\uffff\12\77\13\uffff\1\67\37\uffff\1\67", "", "", "\1\100\37\uffff\1\100", @@ -3204,9 +3206,7 @@ public class CMISLexer extends Lexer { "", "", "", - "", - "", - "\1\67\1\uffff\12\77\13\uffff\1\67\37\uffff\1\67", + "\1\71\1\uffff\12\77\13\uffff\1\71\37\uffff\1\71", "\1\132\37\uffff\1\132", "\1\133\37\uffff\1\133", "\2\35\13\uffff\1\35\20\uffff\32\35\4\uffff\1\35\1\uffff\32"+ @@ -3345,7 +3345,7 @@ public class CMISLexer extends Lexer { this.transition = DFA16_transition; } public String getDescription() { - return "1:1: Tokens : ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | SINGLE_QUOTE | DOUBLE_QUOTE | QUOTED_STRING | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS );"; + return "1:1: Tokens : ( SINGLE_QUOTE | QUOTED_STRING | SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS );"; } } diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java index c7c78e2cc3..ed45808479 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-15 16:24:39 +// $ANTLR 3.1b1 W:\\workspace-cmis2\\ANTLR\\CMIS.g 2008-07-21 10:14:45 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -12,7 +12,7 @@ import org.antlr.runtime.tree.*; public class CMISParser extends Parser { public static final String[] tokenNames = new String[] { - "", "", "", "", "QUERY", "ALL_COLUMNS", "COLUMN", "COLUMNS", "COLUMN_REF", "QUALIFIER", "FUNCTION", "SOURCE", "TABLE", "TABLE_REF", "PARAMETER", "CONJUNCTION", "DISJUNCTION", "NEGATION", "PRED_COMPARISON", "PRED_IN", "PRED_EXISTS", "PRED_LIKE", "PRED_FTS", "LIST", "PRED_CHILD", "PRED_DESCENDANT", "SORT_SPECIFICATION", "NUMERIC_LITERAL", "STRING_LITERAL", "SELECT", "STAR", "COMMA", "AS", "DOTSTAR", "DOT", "LPAREN", "RPAREN", "FROM", "JOIN", "INNER", "LEFT", "OUTER", "ON", "EQUALS", "WHERE", "OR", "AND", "NOT", "NOTEQUALS", "LESSTHAN", "GREATERTHAN", "LESSTHANOREQUALS", "GREATERTHANOREQUALS", "IN", "LIKE", "IS", "NULL", "ANY", "CONTAINS", "IN_FOLDER", "IN_TREE", "ORDER", "BY", "ASC", "DESC", "COLON", "QUOTED_STRING", "ID", "DOUBLE_QUOTE", "FLOATING_POINT_LITERAL", "DECIMAL_INTEGER_LITERAL", "UPPER", "LOWER", "SCORE", "DOTDOT", "TILDA", "SINGLE_QUOTE", "ESCAPED_SINGLE_QUOTE", "PLUS", "MINUS", "DECIMAL_NUMERAL", "DIGIT", "EXPONENT", "WS", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER" + "", "", "", "", "QUERY", "ALL_COLUMNS", "COLUMN", "COLUMNS", "COLUMN_REF", "QUALIFIER", "FUNCTION", "SOURCE", "TABLE", "TABLE_REF", "PARAMETER", "CONJUNCTION", "DISJUNCTION", "NEGATION", "PRED_COMPARISON", "PRED_IN", "PRED_EXISTS", "PRED_LIKE", "PRED_FTS", "LIST", "PRED_CHILD", "PRED_DESCENDANT", "SORT_SPECIFICATION", "NUMERIC_LITERAL", "STRING_LITERAL", "SELECT", "STAR", "COMMA", "AS", "DOTSTAR", "DOT", "LPAREN", "RPAREN", "FROM", "JOIN", "INNER", "LEFT", "OUTER", "ON", "EQUALS", "WHERE", "OR", "AND", "NOT", "NOTEQUALS", "LESSTHAN", "GREATERTHAN", "LESSTHANOREQUALS", "GREATERTHANOREQUALS", "IN", "LIKE", "IS", "NULL", "ANY", "CONTAINS", "IN_FOLDER", "IN_TREE", "ORDER", "BY", "ASC", "DESC", "COLON", "QUOTED_STRING", "ID", "DOUBLE_QUOTE", "FLOATING_POINT_LITERAL", "DECIMAL_INTEGER_LITERAL", "UPPER", "LOWER", "SCORE", "SINGLE_QUOTE", "ESCAPED_SINGLE_QUOTE", "DOTDOT", "TILDA", "PLUS", "MINUS", "DECIMAL_NUMERAL", "DIGIT", "EXPONENT", "WS", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER" }; public static final int FUNCTION=10; public static final int WHERE=44; @@ -27,7 +27,7 @@ public class CMISParser extends Parser { public static final int CONTAINS=58; public static final int TABLE=12; public static final int SOURCE=11; - public static final int DOTDOT=74; + public static final int DOTDOT=76; public static final int EQUALS=43; public static final int NOT=47; public static final int ID=67; @@ -36,9 +36,9 @@ public class CMISParser extends Parser { public static final int LPAREN=35; public static final int LESSTHANOREQUALS=51; public static final int AS=32; - public static final int SINGLE_QUOTE=76; + public static final int SINGLE_QUOTE=74; public static final int RPAREN=36; - public static final int TILDA=75; + public static final int TILDA=77; public static final int PRED_LIKE=21; public static final int STRING_LITERAL=28; public static final int IN=53; @@ -98,7 +98,7 @@ public class CMISParser extends Parser { public static final int FROM=37; public static final int UPPER=71; public static final int PRED_IN=19; - public static final int ESCAPED_SINGLE_QUOTE=77; + public static final int ESCAPED_SINGLE_QUOTE=75; // delegates // delegators @@ -121,7 +121,7 @@ public class CMISParser extends Parser { } public String[] getTokenNames() { return CMISParser.tokenNames; } - public String getGrammarFileName() { return "W:\\workspace-cmis\\ANTLR\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\workspace-cmis2\\ANTLR\\CMIS.g"; } private Stack paraphrases = new Stack(); @@ -181,7 +181,7 @@ public class CMISParser extends Parser { }; // $ANTLR start query - // W:\\workspace-cmis\\ANTLR\\CMIS.g:142:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:142:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; public final CMISParser.query_return query() throws RecognitionException { CMISParser.query_return retval = new CMISParser.query_return(); retval.start = input.LT(1); @@ -208,8 +208,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_selectList=new RewriteRuleSubtreeStream(adaptor,"rule selectList"); RewriteRuleSubtreeStream stream_fromClause=new RewriteRuleSubtreeStream(adaptor,"rule fromClause"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:2: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:4: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:2: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:4: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF { SELECT1=(Token)match(input,SELECT,FOLLOW_SELECT_in_query172); if (state.failed) return retval; if ( state.backtracking==0 ) stream_SELECT.add(SELECT1); @@ -226,7 +226,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_fromClause.add(fromClause3.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:33: ( whereClause )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:33: ( whereClause )? int alt1=2; int LA1_0 = input.LA(1); @@ -235,7 +235,7 @@ public class CMISParser extends Parser { } switch (alt1) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:33: whereClause + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:33: whereClause { pushFollow(FOLLOW_whereClause_in_query178); whereClause4=whereClause(); @@ -249,7 +249,7 @@ public class CMISParser extends Parser { } - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:46: ( orderByClause )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:46: ( orderByClause )? int alt2=2; int LA2_0 = input.LA(1); @@ -258,7 +258,7 @@ public class CMISParser extends Parser { } switch (alt2) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:149:46: orderByClause + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:149:46: orderByClause { pushFollow(FOLLOW_orderByClause_in_query181); orderByClause5=orderByClause(); @@ -290,20 +290,20 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 150:3: -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:150:6: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:150:6: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(QUERY, "QUERY"), root_1); adaptor.addChild(root_1, stream_selectList.nextTree()); adaptor.addChild(root_1, stream_fromClause.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:150:36: ( whereClause )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:150:36: ( whereClause )? if ( stream_whereClause.hasNext() ) { adaptor.addChild(root_1, stream_whereClause.nextTree()); } stream_whereClause.reset(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:150:49: ( orderByClause )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:150:49: ( orderByClause )? if ( stream_orderByClause.hasNext() ) { adaptor.addChild(root_1, stream_orderByClause.nextTree()); @@ -343,7 +343,7 @@ public class CMISParser extends Parser { }; // $ANTLR start selectList - // W:\\workspace-cmis\\ANTLR\\CMIS.g:154:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:154:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); public final CMISParser.selectList_return selectList() throws RecognitionException { CMISParser.selectList_return retval = new CMISParser.selectList_return(); retval.start = input.LT(1); @@ -364,7 +364,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_selectSubList=new RewriteRuleSubtreeStream(adaptor,"rule selectSubList"); paraphrases.push("in select list"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:157:2: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:157:2: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) int alt4=2; int LA4_0 = input.LA(1); @@ -383,7 +383,7 @@ public class CMISParser extends Parser { } switch (alt4) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:157:4: STAR + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:157:4: STAR { STAR7=(Token)match(input,STAR,FOLLOW_STAR_in_selectList233); if (state.failed) return retval; if ( state.backtracking==0 ) stream_STAR.add(STAR7); @@ -403,7 +403,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 158:3: -> ^( ALL_COLUMNS ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:158:6: ^( ALL_COLUMNS ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:158:6: ^( ALL_COLUMNS ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -417,7 +417,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:159:5: selectSubList ( COMMA selectSubList )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:159:5: selectSubList ( COMMA selectSubList )* { pushFollow(FOLLOW_selectSubList_in_selectList249); selectSubList8=selectSubList(); @@ -425,7 +425,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_selectSubList.add(selectSubList8.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:159:19: ( COMMA selectSubList )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:159:19: ( COMMA selectSubList )* loop3: do { int alt3=2; @@ -438,7 +438,7 @@ public class CMISParser extends Parser { switch (alt3) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:159:21: COMMA selectSubList + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:159:21: COMMA selectSubList { COMMA9=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectList253); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA9); @@ -473,7 +473,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 160:3: -> ^( COLUMNS ( selectSubList )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:160:6: ^( COLUMNS ( selectSubList )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:160:6: ^( COLUMNS ( selectSubList )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMNS, "COLUMNS"), root_1); @@ -525,7 +525,7 @@ public class CMISParser extends Parser { }; // $ANTLR start selectSubList - // W:\\workspace-cmis\\ANTLR\\CMIS.g:164:1: selectSubList : ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:164:1: selectSubList : ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->); public final CMISParser.selectSubList_return selectSubList() throws RecognitionException { CMISParser.selectSubList_return retval = new CMISParser.selectSubList_return(); retval.start = input.LT(1); @@ -552,7 +552,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:2: ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:2: ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->) int alt7=3; int LA7_0 = input.LA(1); @@ -661,7 +661,7 @@ public class CMISParser extends Parser { } switch (alt7) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:4: ( valueExpression )=> valueExpression ( ( AS )? columnName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:4: ( valueExpression )=> valueExpression ( ( AS )? columnName )? { pushFollow(FOLLOW_valueExpression_in_selectSubList291); valueExpression11=valueExpression(); @@ -669,7 +669,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_valueExpression.add(valueExpression11.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:40: ( ( AS )? columnName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:40: ( ( AS )? columnName )? int alt6=2; int LA6_0 = input.LA(1); @@ -678,9 +678,9 @@ public class CMISParser extends Parser { } switch (alt6) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:42: ( AS )? columnName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:42: ( AS )? columnName { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:42: ( AS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:42: ( AS )? int alt5=2; int LA5_0 = input.LA(1); @@ -689,7 +689,7 @@ public class CMISParser extends Parser { } switch (alt5) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:42: AS + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:42: AS { AS12=(Token)match(input,AS,FOLLOW_AS_in_selectSubList295); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS12); @@ -727,13 +727,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 166:3: -> ^( COLUMN valueExpression ( columnName )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:166:6: ^( COLUMN valueExpression ( columnName )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:166:6: ^( COLUMN valueExpression ( columnName )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN, "COLUMN"), root_1); adaptor.addChild(root_1, stream_valueExpression.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:166:31: ( columnName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:166:31: ( columnName )? if ( stream_columnName.hasNext() ) { adaptor.addChild(root_1, stream_columnName.nextTree()); @@ -749,7 +749,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:167:4: qualifier DOTSTAR + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:167:4: qualifier DOTSTAR { pushFollow(FOLLOW_qualifier_in_selectSubList319); qualifier14=qualifier(); @@ -775,7 +775,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 168:3: -> ^( ALL_COLUMNS qualifier ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:168:6: ^( ALL_COLUMNS qualifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:168:6: ^( ALL_COLUMNS qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -791,7 +791,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:169:4: multiValuedColumnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:169:4: multiValuedColumnReference { pushFollow(FOLLOW_multiValuedColumnReference_in_selectSubList337); multiValuedColumnReference16=multiValuedColumnReference(); @@ -847,7 +847,7 @@ public class CMISParser extends Parser { }; // $ANTLR start valueExpression - // W:\\workspace-cmis\\ANTLR\\CMIS.g:173:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:173:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); public final CMISParser.valueExpression_return valueExpression() throws RecognitionException { CMISParser.valueExpression_return retval = new CMISParser.valueExpression_return(); retval.start = input.LT(1); @@ -862,7 +862,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_valueFunction=new RewriteRuleSubtreeStream(adaptor,"rule valueFunction"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:174:2: ( columnReference -> columnReference | valueFunction -> valueFunction ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:174:2: ( columnReference -> columnReference | valueFunction -> valueFunction ) int alt8=2; switch ( input.LA(1) ) { case ID: @@ -930,7 +930,7 @@ public class CMISParser extends Parser { switch (alt8) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:174:4: columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:174:4: columnReference { pushFollow(FOLLOW_columnReference_in_valueExpression356); columnReference17=columnReference(); @@ -961,7 +961,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:176:5: valueFunction + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:176:5: valueFunction { pushFollow(FOLLOW_valueFunction_in_valueExpression369); valueFunction18=valueFunction(); @@ -1018,7 +1018,7 @@ public class CMISParser extends Parser { }; // $ANTLR start columnReference - // W:\\workspace-cmis\\ANTLR\\CMIS.g:180:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:180:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; public final CMISParser.columnReference_return columnReference() throws RecognitionException { CMISParser.columnReference_return retval = new CMISParser.columnReference_return(); retval.start = input.LT(1); @@ -1036,10 +1036,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:181:2: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:181:4: ( qualifier DOT )? columnName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:181:2: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:181:4: ( qualifier DOT )? columnName { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:181:4: ( qualifier DOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:181:4: ( qualifier DOT )? int alt9=2; int LA9_0 = input.LA(1); @@ -1078,7 +1078,7 @@ public class CMISParser extends Parser { } switch (alt9) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:181:6: qualifier DOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:181:6: qualifier DOT { pushFollow(FOLLOW_qualifier_in_columnReference392); qualifier19=qualifier(); @@ -1116,13 +1116,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 182:3: -> ^( COLUMN_REF columnName ( qualifier )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:182:6: ^( COLUMN_REF columnName ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:182:6: ^( COLUMN_REF columnName ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); adaptor.addChild(root_1, stream_columnName.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:182:30: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:182:30: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -1162,7 +1162,7 @@ public class CMISParser extends Parser { }; // $ANTLR start multiValuedColumnReference - // W:\\workspace-cmis\\ANTLR\\CMIS.g:189:1: multiValuedColumnReference : ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:189:1: multiValuedColumnReference : ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ; public final CMISParser.multiValuedColumnReference_return multiValuedColumnReference() throws RecognitionException { CMISParser.multiValuedColumnReference_return retval = new CMISParser.multiValuedColumnReference_return(); retval.start = input.LT(1); @@ -1180,10 +1180,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_multiValuedColumnName=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnName"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:190:2: ( ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:190:10: ( qualifier DOT )? multiValuedColumnName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:190:2: ( ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:190:10: ( qualifier DOT )? multiValuedColumnName { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:190:10: ( qualifier DOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:190:10: ( qualifier DOT )? int alt10=2; int LA10_0 = input.LA(1); @@ -1222,7 +1222,7 @@ public class CMISParser extends Parser { } switch (alt10) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:190:12: qualifier DOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:190:12: qualifier DOT { pushFollow(FOLLOW_qualifier_in_multiValuedColumnReference435); qualifier22=qualifier(); @@ -1260,13 +1260,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 191:3: -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:191:6: ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:191:6: ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); adaptor.addChild(root_1, stream_multiValuedColumnName.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:191:41: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:191:41: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -1306,7 +1306,7 @@ public class CMISParser extends Parser { }; // $ANTLR start valueFunction - // W:\\workspace-cmis\\ANTLR\\CMIS.g:194:1: valueFunction : functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName ( functionArgument )* ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:194:1: valueFunction : functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName ( functionArgument )* ) ; public final CMISParser.valueFunction_return valueFunction() throws RecognitionException { CMISParser.valueFunction_return retval = new CMISParser.valueFunction_return(); retval.start = input.LT(1); @@ -1327,8 +1327,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); RewriteRuleSubtreeStream stream_functionArgument=new RewriteRuleSubtreeStream(adaptor,"rule functionArgument"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:195:2: (functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName ( functionArgument )* ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:195:4: functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:2: (functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName ( functionArgument )* ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:4: functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN { pushFollow(FOLLOW_keyWordOrId_in_valueFunction470); functionName=keyWordOrId(); @@ -1339,7 +1339,7 @@ public class CMISParser extends Parser { LPAREN25=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction472); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN25); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:195:36: ( functionArgument )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:36: ( functionArgument )* loop11: do { int alt11=2; @@ -1352,7 +1352,7 @@ public class CMISParser extends Parser { switch (alt11) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:195:36: functionArgument + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:36: functionArgument { pushFollow(FOLLOW_functionArgument_in_valueFunction474); functionArgument26=functionArgument(); @@ -1388,13 +1388,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 196:3: -> ^( FUNCTION $functionName ( functionArgument )* ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:196:6: ^( FUNCTION $functionName ( functionArgument )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:196:6: ^( FUNCTION $functionName ( functionArgument )* ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION, "FUNCTION"), root_1); adaptor.addChild(root_1, stream_functionName.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:196:31: ( functionArgument )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:196:31: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); @@ -1434,7 +1434,7 @@ public class CMISParser extends Parser { }; // $ANTLR start functionArgument - // W:\\workspace-cmis\\ANTLR\\CMIS.g:199:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:199:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); public final CMISParser.functionArgument_return functionArgument() throws RecognitionException { CMISParser.functionArgument_return retval = new CMISParser.functionArgument_return(); retval.start = input.LT(1); @@ -1456,7 +1456,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:200:5: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:200:5: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) int alt12=3; switch ( input.LA(1) ) { case ID: @@ -1565,7 +1565,7 @@ public class CMISParser extends Parser { switch (alt12) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:200:9: qualifier DOT columnName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:200:9: qualifier DOT columnName { pushFollow(FOLLOW_qualifier_in_functionArgument508); qualifier28=qualifier(); @@ -1597,7 +1597,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 201:5: -> ^( COLUMN_REF columnName qualifier ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:201:8: ^( COLUMN_REF columnName qualifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:201:8: ^( COLUMN_REF columnName qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); @@ -1614,7 +1614,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:202:9: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:202:9: identifier { root_0 = (Object)adaptor.nil(); @@ -1628,7 +1628,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:203:9: literalOrParameterName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:203:9: literalOrParameterName { root_0 = (Object)adaptor.nil(); @@ -1668,7 +1668,7 @@ public class CMISParser extends Parser { }; // $ANTLR start qualifier - // W:\\workspace-cmis\\ANTLR\\CMIS.g:206:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:206:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); public final CMISParser.qualifier_return qualifier() throws RecognitionException { CMISParser.qualifier_return retval = new CMISParser.qualifier_return(); retval.start = input.LT(1); @@ -1683,7 +1683,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_correlationName=new RewriteRuleSubtreeStream(adaptor,"rule correlationName"); RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:207:2: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:2: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) int alt13=2; int LA13_0 = input.LA(1); @@ -1780,7 +1780,7 @@ public class CMISParser extends Parser { } switch (alt13) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:207:4: ( tableName )=> tableName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:4: ( tableName )=> tableName { pushFollow(FOLLOW_tableName_in_qualifier567); tableName33=tableName(); @@ -1811,7 +1811,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:209:5: correlationName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:209:5: correlationName { pushFollow(FOLLOW_correlationName_in_qualifier579); correlationName34=correlationName(); @@ -1868,7 +1868,7 @@ public class CMISParser extends Parser { }; // $ANTLR start fromClause - // W:\\workspace-cmis\\ANTLR\\CMIS.g:213:1: fromClause : FROM tableReference -> tableReference ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:213:1: fromClause : FROM tableReference -> tableReference ; public final CMISParser.fromClause_return fromClause() throws RecognitionException { CMISParser.fromClause_return retval = new CMISParser.fromClause_return(); retval.start = input.LT(1); @@ -1884,8 +1884,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_tableReference=new RewriteRuleSubtreeStream(adaptor,"rule tableReference"); paraphrases.push("in from"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:216:2: ( FROM tableReference -> tableReference ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:216:4: FROM tableReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:216:2: ( FROM tableReference -> tableReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:216:4: FROM tableReference { FROM35=(Token)match(input,FROM,FOLLOW_FROM_in_fromClause616); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FROM.add(FROM35); @@ -1946,7 +1946,7 @@ public class CMISParser extends Parser { }; // $ANTLR start tableReference - // W:\\workspace-cmis\\ANTLR\\CMIS.g:220:1: tableReference : singleTable ( ( joinedTable )=> joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:220:1: tableReference : singleTable ( ( joinedTable )=> joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; public final CMISParser.tableReference_return tableReference() throws RecognitionException { CMISParser.tableReference_return retval = new CMISParser.tableReference_return(); retval.start = input.LT(1); @@ -1961,8 +1961,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_singleTable=new RewriteRuleSubtreeStream(adaptor,"rule singleTable"); RewriteRuleSubtreeStream stream_joinedTable=new RewriteRuleSubtreeStream(adaptor,"rule joinedTable"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:2: ( singleTable ( ( joinedTable )=> joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:4: singleTable ( ( joinedTable )=> joinedTable )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:2: ( singleTable ( ( joinedTable )=> joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:4: singleTable ( ( joinedTable )=> joinedTable )* { pushFollow(FOLLOW_singleTable_in_tableReference636); singleTable37=singleTable(); @@ -1970,7 +1970,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_singleTable.add(singleTable37.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:16: ( ( joinedTable )=> joinedTable )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:16: ( ( joinedTable )=> joinedTable )* loop14: do { int alt14=2; @@ -2013,7 +2013,7 @@ public class CMISParser extends Parser { switch (alt14) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:17: ( joinedTable )=> joinedTable + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:17: ( joinedTable )=> joinedTable { pushFollow(FOLLOW_joinedTable_in_tableReference645); joinedTable38=joinedTable(); @@ -2045,13 +2045,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 222:3: -> ^( SOURCE singleTable ( joinedTable )* ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:222:6: ^( SOURCE singleTable ( joinedTable )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:222:6: ^( SOURCE singleTable ( joinedTable )* ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); adaptor.addChild(root_1, stream_singleTable.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:222:27: ( joinedTable )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:222:27: ( joinedTable )* while ( stream_joinedTable.hasNext() ) { adaptor.addChild(root_1, stream_joinedTable.nextTree()); @@ -2091,7 +2091,7 @@ public class CMISParser extends Parser { }; // $ANTLR start singleTable - // W:\\workspace-cmis\\ANTLR\\CMIS.g:228:1: singleTable : ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:228:1: singleTable : ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ); public final CMISParser.singleTable_return singleTable() throws RecognitionException { CMISParser.singleTable_return retval = new CMISParser.singleTable_return(); retval.start = input.LT(1); @@ -2118,7 +2118,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); RewriteRuleSubtreeStream stream_joinedTables=new RewriteRuleSubtreeStream(adaptor,"rule joinedTables"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:2: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:2: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ) int alt17=2; int LA17_0 = input.LA(1); @@ -2137,7 +2137,7 @@ public class CMISParser extends Parser { } switch (alt17) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:4: tableName ( ( AS )? correlationName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:4: tableName ( ( AS )? correlationName )? { pushFollow(FOLLOW_tableName_in_singleTable674); tableName39=tableName(); @@ -2145,7 +2145,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_tableName.add(tableName39.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:14: ( ( AS )? correlationName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:14: ( ( AS )? correlationName )? int alt16=2; int LA16_0 = input.LA(1); @@ -2154,9 +2154,9 @@ public class CMISParser extends Parser { } switch (alt16) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:16: ( AS )? correlationName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:16: ( AS )? correlationName { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:16: ( AS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:16: ( AS )? int alt15=2; int LA15_0 = input.LA(1); @@ -2165,7 +2165,7 @@ public class CMISParser extends Parser { } switch (alt15) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:229:16: AS + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:16: AS { AS40=(Token)match(input,AS,FOLLOW_AS_in_singleTable678); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS40); @@ -2203,13 +2203,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 230:3: -> ^( TABLE_REF tableName ( correlationName )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:230:6: ^( TABLE_REF tableName ( correlationName )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:230:6: ^( TABLE_REF tableName ( correlationName )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE_REF, "TABLE_REF"), root_1); adaptor.addChild(root_1, stream_tableName.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:230:28: ( correlationName )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:230:28: ( correlationName )? if ( stream_correlationName.hasNext() ) { adaptor.addChild(root_1, stream_correlationName.nextTree()); @@ -2225,7 +2225,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:231:4: LPAREN joinedTables RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:231:4: LPAREN joinedTables RPAREN { LPAREN42=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_singleTable702); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN42); @@ -2254,7 +2254,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 232:3: -> ^( TABLE joinedTables ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:232:6: ^( TABLE joinedTables ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:232:6: ^( TABLE joinedTables ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE, "TABLE"), root_1); @@ -2296,7 +2296,7 @@ public class CMISParser extends Parser { }; // $ANTLR start joinedTable - // W:\\workspace-cmis\\ANTLR\\CMIS.g:235:1: joinedTable : ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? -> ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:235:1: joinedTable : ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? -> ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) ; public final CMISParser.joinedTable_return joinedTable() throws RecognitionException { CMISParser.joinedTable_return retval = new CMISParser.joinedTable_return(); retval.start = input.LT(1); @@ -2317,10 +2317,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_joinType=new RewriteRuleSubtreeStream(adaptor,"rule joinType"); RewriteRuleSubtreeStream stream_joinSpecification=new RewriteRuleSubtreeStream(adaptor,"rule joinSpecification"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:2: ( ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? -> ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:4: ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:2: ( ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? -> ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:4: ( joinType )? JOIN tableReference ( ( joinSpecification )=> joinSpecification )? { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:4: ( joinType )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:4: ( joinType )? int alt18=2; int LA18_0 = input.LA(1); @@ -2329,7 +2329,7 @@ public class CMISParser extends Parser { } switch (alt18) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:4: joinType + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:4: joinType { pushFollow(FOLLOW_joinType_in_joinedTable728); joinType45=joinType(); @@ -2352,7 +2352,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_tableReference.add(tableReference47.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:34: ( ( joinSpecification )=> joinSpecification )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:34: ( ( joinSpecification )=> joinSpecification )? int alt19=2; int LA19_0 = input.LA(1); @@ -2365,7 +2365,7 @@ public class CMISParser extends Parser { } switch (alt19) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:35: ( joinSpecification )=> joinSpecification + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:35: ( joinSpecification )=> joinSpecification { pushFollow(FOLLOW_joinSpecification_in_joinedTable742); joinSpecification48=joinSpecification(); @@ -2382,7 +2382,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: joinSpecification, tableReference, JOIN, joinType + // elements: JOIN, joinSpecification, tableReference, joinType // token labels: // rule labels: retval // token list labels: @@ -2394,19 +2394,19 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 237:3: -> ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:237:6: ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:237:6: ^( JOIN tableReference ( joinType )? ( joinSpecification )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_JOIN.nextNode(), root_1); adaptor.addChild(root_1, stream_tableReference.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:237:28: ( joinType )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:237:28: ( joinType )? if ( stream_joinType.hasNext() ) { adaptor.addChild(root_1, stream_joinType.nextTree()); } stream_joinType.reset(); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:237:38: ( joinSpecification )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:237:38: ( joinSpecification )? if ( stream_joinSpecification.hasNext() ) { adaptor.addChild(root_1, stream_joinSpecification.nextTree()); @@ -2446,7 +2446,7 @@ public class CMISParser extends Parser { }; // $ANTLR start joinedTables - // W:\\workspace-cmis\\ANTLR\\CMIS.g:241:1: joinedTables : singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:241:1: joinedTables : singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ; public final CMISParser.joinedTables_return joinedTables() throws RecognitionException { CMISParser.joinedTables_return retval = new CMISParser.joinedTables_return(); retval.start = input.LT(1); @@ -2461,8 +2461,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_singleTable=new RewriteRuleSubtreeStream(adaptor,"rule singleTable"); RewriteRuleSubtreeStream stream_joinedTable=new RewriteRuleSubtreeStream(adaptor,"rule joinedTable"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:242:2: ( singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:242:4: singleTable ( joinedTable )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:242:2: ( singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:242:4: singleTable ( joinedTable )+ { pushFollow(FOLLOW_singleTable_in_joinedTables773); singleTable49=singleTable(); @@ -2470,7 +2470,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_singleTable.add(singleTable49.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:242:16: ( joinedTable )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:242:16: ( joinedTable )+ int cnt20=0; loop20: do { @@ -2484,7 +2484,7 @@ public class CMISParser extends Parser { switch (alt20) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:242:16: joinedTable + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:242:16: joinedTable { pushFollow(FOLLOW_joinedTable_in_joinedTables775); joinedTable50=joinedTable(); @@ -2509,7 +2509,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: joinedTable, singleTable + // elements: singleTable, joinedTable // token labels: // rule labels: retval // token list labels: @@ -2521,7 +2521,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 243:3: -> ^( SOURCE singleTable ( joinedTable )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:243:6: ^( SOURCE singleTable ( joinedTable )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:243:6: ^( SOURCE singleTable ( joinedTable )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); @@ -2569,7 +2569,7 @@ public class CMISParser extends Parser { }; // $ANTLR start joinType - // W:\\workspace-cmis\\ANTLR\\CMIS.g:246:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:246:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); public final CMISParser.joinType_return joinType() throws RecognitionException { CMISParser.joinType_return retval = new CMISParser.joinType_return(); retval.start = input.LT(1); @@ -2588,7 +2588,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_LEFT=new RewriteRuleTokenStream(adaptor,"token LEFT"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:247:2: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:247:2: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) int alt22=2; int LA22_0 = input.LA(1); @@ -2607,7 +2607,7 @@ public class CMISParser extends Parser { } switch (alt22) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:247:4: INNER + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:247:4: INNER { INNER51=(Token)match(input,INNER,FOLLOW_INNER_in_joinType802); if (state.failed) return retval; if ( state.backtracking==0 ) stream_INNER.add(INNER51); @@ -2635,12 +2635,12 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:249:5: LEFT ( OUTER )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:5: LEFT ( OUTER )? { LEFT52=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType814); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LEFT.add(LEFT52); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:249:10: ( OUTER )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:10: ( OUTER )? int alt21=2; int LA21_0 = input.LA(1); @@ -2649,7 +2649,7 @@ public class CMISParser extends Parser { } switch (alt21) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:249:10: OUTER + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:10: OUTER { OUTER53=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType816); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OUTER.add(OUTER53); @@ -2709,7 +2709,7 @@ public class CMISParser extends Parser { }; // $ANTLR start joinSpecification - // W:\\workspace-cmis\\ANTLR\\CMIS.g:253:1: joinSpecification : ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN -> ^( ON $lhs EQUALS $rhs) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:253:1: joinSpecification : ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN -> ^( ON $lhs EQUALS $rhs) ; public final CMISParser.joinSpecification_return joinSpecification() throws RecognitionException { CMISParser.joinSpecification_return retval = new CMISParser.joinSpecification_return(); retval.start = input.LT(1); @@ -2735,8 +2735,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:254:2: ( ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN -> ^( ON $lhs EQUALS $rhs) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:254:4: ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:254:2: ( ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN -> ^( ON $lhs EQUALS $rhs) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:254:4: ON LPAREN lhs= columnReference EQUALS rhs= columnReference RPAREN { ON54=(Token)match(input,ON,FOLLOW_ON_in_joinSpecification836); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ON.add(ON54); @@ -2765,7 +2765,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: rhs, EQUALS, lhs, ON + // elements: ON, EQUALS, rhs, lhs // token labels: // rule labels: retval, rhs, lhs // token list labels: @@ -2779,7 +2779,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 255:3: -> ^( ON $lhs EQUALS $rhs) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:255:6: ^( ON $lhs EQUALS $rhs) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:255:6: ^( ON $lhs EQUALS $rhs) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ON.nextNode(), root_1); @@ -2821,7 +2821,7 @@ public class CMISParser extends Parser { }; // $ANTLR start whereClause - // W:\\workspace-cmis\\ANTLR\\CMIS.g:262:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:262:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; public final CMISParser.whereClause_return whereClause() throws RecognitionException { CMISParser.whereClause_return retval = new CMISParser.whereClause_return(); retval.start = input.LT(1); @@ -2837,8 +2837,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_searchOrCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchOrCondition"); paraphrases.push("in where"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:265:2: ( WHERE searchOrCondition -> searchOrCondition ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:265:4: WHERE searchOrCondition + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:265:2: ( WHERE searchOrCondition -> searchOrCondition ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:265:4: WHERE searchOrCondition { WHERE58=(Token)match(input,WHERE,FOLLOW_WHERE_in_whereClause900); if (state.failed) return retval; if ( state.backtracking==0 ) stream_WHERE.add(WHERE58); @@ -2899,7 +2899,7 @@ public class CMISParser extends Parser { }; // $ANTLR start searchOrCondition - // W:\\workspace-cmis\\ANTLR\\CMIS.g:269:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:269:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; public final CMISParser.searchOrCondition_return searchOrCondition() throws RecognitionException { CMISParser.searchOrCondition_return retval = new CMISParser.searchOrCondition_return(); retval.start = input.LT(1); @@ -2916,8 +2916,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR"); RewriteRuleSubtreeStream stream_searchAndCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchAndCondition"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:273:2: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:273:4: searchAndCondition ( OR searchAndCondition )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:273:2: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:273:4: searchAndCondition ( OR searchAndCondition )* { pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition922); searchAndCondition60=searchAndCondition(); @@ -2925,7 +2925,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchAndCondition.add(searchAndCondition60.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:273:23: ( OR searchAndCondition )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:273:23: ( OR searchAndCondition )* loop23: do { int alt23=2; @@ -2938,7 +2938,7 @@ public class CMISParser extends Parser { switch (alt23) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:273:24: OR searchAndCondition + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:273:24: OR searchAndCondition { OR61=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition925); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OR.add(OR61); @@ -2973,7 +2973,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 274:3: -> ^( DISJUNCTION ( searchAndCondition )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:274:6: ^( DISJUNCTION ( searchAndCondition )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:274:6: ^( DISJUNCTION ( searchAndCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -3020,7 +3020,7 @@ public class CMISParser extends Parser { }; // $ANTLR start searchAndCondition - // W:\\workspace-cmis\\ANTLR\\CMIS.g:278:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:278:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; public final CMISParser.searchAndCondition_return searchAndCondition() throws RecognitionException { CMISParser.searchAndCondition_return retval = new CMISParser.searchAndCondition_return(); retval.start = input.LT(1); @@ -3037,8 +3037,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND"); RewriteRuleSubtreeStream stream_searchNotCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchNotCondition"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:282:2: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:282:4: searchNotCondition ( AND searchNotCondition )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:282:2: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:282:4: searchNotCondition ( AND searchNotCondition )* { pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition955); searchNotCondition63=searchNotCondition(); @@ -3046,7 +3046,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchNotCondition.add(searchNotCondition63.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:282:23: ( AND searchNotCondition )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:282:23: ( AND searchNotCondition )* loop24: do { int alt24=2; @@ -3059,7 +3059,7 @@ public class CMISParser extends Parser { switch (alt24) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:282:24: AND searchNotCondition + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:282:24: AND searchNotCondition { AND64=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition958); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AND.add(AND64); @@ -3094,7 +3094,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 283:3: -> ^( CONJUNCTION ( searchNotCondition )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:283:6: ^( CONJUNCTION ( searchNotCondition )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:283:6: ^( CONJUNCTION ( searchNotCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -3141,7 +3141,7 @@ public class CMISParser extends Parser { }; // $ANTLR start searchNotCondition - // W:\\workspace-cmis\\ANTLR\\CMIS.g:286:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:286:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); public final CMISParser.searchNotCondition_return searchNotCondition() throws RecognitionException { CMISParser.searchNotCondition_return retval = new CMISParser.searchNotCondition_return(); retval.start = input.LT(1); @@ -3158,12 +3158,12 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleSubtreeStream stream_searchTest=new RewriteRuleSubtreeStream(adaptor,"rule searchTest"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:287:2: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:287:2: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) int alt25=2; alt25 = dfa25.predict(input); switch (alt25) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:287:4: NOT searchTest + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:287:4: NOT searchTest { NOT66=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition987); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT66); @@ -3189,7 +3189,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 288:3: -> ^( NEGATION searchTest ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:288:6: ^( NEGATION searchTest ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:288:6: ^( NEGATION searchTest ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NEGATION, "NEGATION"), root_1); @@ -3205,7 +3205,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:289:4: searchTest + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:289:4: searchTest { pushFollow(FOLLOW_searchTest_in_searchNotCondition1004); searchTest68=searchTest(); @@ -3262,7 +3262,7 @@ public class CMISParser extends Parser { }; // $ANTLR start searchTest - // W:\\workspace-cmis\\ANTLR\\CMIS.g:293:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:293:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); public final CMISParser.searchTest_return searchTest() throws RecognitionException { CMISParser.searchTest_return retval = new CMISParser.searchTest_return(); retval.start = input.LT(1); @@ -3283,7 +3283,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_predicate=new RewriteRuleSubtreeStream(adaptor,"rule predicate"); RewriteRuleSubtreeStream stream_searchOrCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchOrCondition"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:294:2: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:294:2: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) int alt26=2; int LA26_0 = input.LA(1); @@ -3302,7 +3302,7 @@ public class CMISParser extends Parser { } switch (alt26) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:294:4: predicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:294:4: predicate { pushFollow(FOLLOW_predicate_in_searchTest1022); predicate69=predicate(); @@ -3333,7 +3333,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:296:4: LPAREN searchOrCondition RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:296:4: LPAREN searchOrCondition RPAREN { LPAREN70=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_searchTest1033); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN70); @@ -3396,7 +3396,7 @@ public class CMISParser extends Parser { }; // $ANTLR start predicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:300:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:300:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); public final CMISParser.predicate_return predicate() throws RecognitionException { CMISParser.predicate_return retval = new CMISParser.predicate_return(); retval.start = input.LT(1); @@ -3422,12 +3422,12 @@ public class CMISParser extends Parser { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:301:2: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:301:2: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) int alt27=8; alt27 = dfa27.predict(input); switch (alt27) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:301:4: comparisonPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:301:4: comparisonPredicate { root_0 = (Object)adaptor.nil(); @@ -3441,7 +3441,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:302:4: inPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:302:4: inPredicate { root_0 = (Object)adaptor.nil(); @@ -3455,7 +3455,7 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:303:4: likePredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:303:4: likePredicate { root_0 = (Object)adaptor.nil(); @@ -3469,7 +3469,7 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:304:4: nullPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:304:4: nullPredicate { root_0 = (Object)adaptor.nil(); @@ -3483,7 +3483,7 @@ public class CMISParser extends Parser { } break; case 5 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:305:5: quantifiedComparisonPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:305:5: quantifiedComparisonPredicate { root_0 = (Object)adaptor.nil(); @@ -3497,7 +3497,7 @@ public class CMISParser extends Parser { } break; case 6 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:306:4: quantifiedInPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:306:4: quantifiedInPredicate { root_0 = (Object)adaptor.nil(); @@ -3511,7 +3511,7 @@ public class CMISParser extends Parser { } break; case 7 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:307:4: textSearchPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:307:4: textSearchPredicate { root_0 = (Object)adaptor.nil(); @@ -3525,7 +3525,7 @@ public class CMISParser extends Parser { } break; case 8 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:308:4: folderPredicate + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:308:4: folderPredicate { root_0 = (Object)adaptor.nil(); @@ -3565,7 +3565,7 @@ public class CMISParser extends Parser { }; // $ANTLR start comparisonPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:311:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:311:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ; public final CMISParser.comparisonPredicate_return comparisonPredicate() throws RecognitionException { CMISParser.comparisonPredicate_return retval = new CMISParser.comparisonPredicate_return(); retval.start = input.LT(1); @@ -3583,8 +3583,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:312:2: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:312:4: valueExpression compOp literalOrParameterName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:312:2: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:312:4: valueExpression compOp literalOrParameterName { pushFollow(FOLLOW_valueExpression_in_comparisonPredicate1102); valueExpression81=valueExpression(); @@ -3607,7 +3607,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: valueExpression, literalOrParameterName, compOp + // elements: compOp, literalOrParameterName, valueExpression // token labels: // rule labels: retval // token list labels: @@ -3619,7 +3619,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 313:3: -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:313:6: ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:313:6: ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); @@ -3662,7 +3662,7 @@ public class CMISParser extends Parser { }; // $ANTLR start compOp - // W:\\workspace-cmis\\ANTLR\\CMIS.g:316:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:316:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); public final CMISParser.compOp_return compOp() throws RecognitionException { CMISParser.compOp_return retval = new CMISParser.compOp_return(); retval.start = input.LT(1); @@ -3674,8 +3674,8 @@ public class CMISParser extends Parser { Object set84_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:317:2: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:317:2: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { root_0 = (Object)adaptor.nil(); @@ -3719,7 +3719,7 @@ public class CMISParser extends Parser { }; // $ANTLR start literalOrParameterName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:325:1: literalOrParameterName : ( literal | parameterName ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:325:1: literalOrParameterName : ( literal | parameterName ); public final CMISParser.literalOrParameterName_return literalOrParameterName() throws RecognitionException { CMISParser.literalOrParameterName_return retval = new CMISParser.literalOrParameterName_return(); retval.start = input.LT(1); @@ -3733,7 +3733,7 @@ public class CMISParser extends Parser { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:326:2: ( literal | parameterName ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:326:2: ( literal | parameterName ) int alt28=2; int LA28_0 = input.LA(1); @@ -3752,7 +3752,7 @@ public class CMISParser extends Parser { } switch (alt28) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:326:4: literal + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:326:4: literal { root_0 = (Object)adaptor.nil(); @@ -3766,7 +3766,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:327:4: parameterName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:327:4: parameterName { root_0 = (Object)adaptor.nil(); @@ -3806,7 +3806,7 @@ public class CMISParser extends Parser { }; // $ANTLR start literal - // W:\\workspace-cmis\\ANTLR\\CMIS.g:330:1: literal : ( signedNumericLiteral | characterStringLiteral ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:330:1: literal : ( signedNumericLiteral | characterStringLiteral ); public final CMISParser.literal_return literal() throws RecognitionException { CMISParser.literal_return retval = new CMISParser.literal_return(); retval.start = input.LT(1); @@ -3820,7 +3820,7 @@ public class CMISParser extends Parser { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:331:2: ( signedNumericLiteral | characterStringLiteral ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:331:2: ( signedNumericLiteral | characterStringLiteral ) int alt29=2; int LA29_0 = input.LA(1); @@ -3839,7 +3839,7 @@ public class CMISParser extends Parser { } switch (alt29) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:331:4: signedNumericLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:331:4: signedNumericLiteral { root_0 = (Object)adaptor.nil(); @@ -3853,7 +3853,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:332:4: characterStringLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:332:4: characterStringLiteral { root_0 = (Object)adaptor.nil(); @@ -3893,7 +3893,7 @@ public class CMISParser extends Parser { }; // $ANTLR start inPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:335:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:335:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; public final CMISParser.inPredicate_return inPredicate() throws RecognitionException { CMISParser.inPredicate_return retval = new CMISParser.inPredicate_return(); retval.start = input.LT(1); @@ -3920,8 +3920,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:2: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:4: columnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:336:2: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:336:4: columnReference ( NOT )? IN LPAREN inValueList RPAREN { pushFollow(FOLLOW_columnReference_in_inPredicate1207); columnReference89=columnReference(); @@ -3929,7 +3929,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference89.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:20: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:336:20: ( NOT )? int alt30=2; int LA30_0 = input.LA(1); @@ -3938,7 +3938,7 @@ public class CMISParser extends Parser { } switch (alt30) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:20: NOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:336:20: NOT { NOT90=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate1209); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT90); @@ -3967,7 +3967,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: inValueList, NOT, columnReference + // elements: columnReference, inValueList, NOT // token labels: // rule labels: retval // token list labels: @@ -3979,7 +3979,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 337:3: -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:6: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:337:6: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); @@ -3987,7 +3987,7 @@ public class CMISParser extends Parser { adaptor.addChild(root_1, (Object)adaptor.create(ANY, "ANY")); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:48: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:337:48: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4027,7 +4027,7 @@ public class CMISParser extends Parser { }; // $ANTLR start inValueList - // W:\\workspace-cmis\\ANTLR\\CMIS.g:340:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:340:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; public final CMISParser.inValueList_return inValueList() throws RecognitionException { CMISParser.inValueList_return retval = new CMISParser.inValueList_return(); retval.start = input.LT(1); @@ -4044,8 +4044,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:341:2: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:341:4: literalOrParameterName ( COMMA literalOrParameterName )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:341:2: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:341:4: literalOrParameterName ( COMMA literalOrParameterName )* { pushFollow(FOLLOW_literalOrParameterName_in_inValueList1247); literalOrParameterName95=literalOrParameterName(); @@ -4053,7 +4053,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName95.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:341:27: ( COMMA literalOrParameterName )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:341:27: ( COMMA literalOrParameterName )* loop31: do { int alt31=2; @@ -4066,7 +4066,7 @@ public class CMISParser extends Parser { switch (alt31) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:341:28: COMMA literalOrParameterName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:341:28: COMMA literalOrParameterName { COMMA96=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList1250); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA96); @@ -4101,7 +4101,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 342:3: -> ^( LIST ( literalOrParameterName )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:342:6: ^( LIST ( literalOrParameterName )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:342:6: ^( LIST ( literalOrParameterName )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(LIST, "LIST"), root_1); @@ -4148,7 +4148,7 @@ public class CMISParser extends Parser { }; // $ANTLR start likePredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:345:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:345:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; public final CMISParser.likePredicate_return likePredicate() throws RecognitionException { CMISParser.likePredicate_return retval = new CMISParser.likePredicate_return(); retval.start = input.LT(1); @@ -4169,8 +4169,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:2: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:4: columnReference ( NOT )? LIKE characterStringLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:346:2: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:346:4: columnReference ( NOT )? LIKE characterStringLiteral { pushFollow(FOLLOW_columnReference_in_likePredicate1278); columnReference98=columnReference(); @@ -4178,7 +4178,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference98.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:20: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:346:20: ( NOT )? int alt32=2; int LA32_0 = input.LA(1); @@ -4187,7 +4187,7 @@ public class CMISParser extends Parser { } switch (alt32) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:20: NOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:346:20: NOT { NOT99=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate1280); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT99); @@ -4222,14 +4222,14 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 347:3: -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:6: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:347:6: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_LIKE, "PRED_LIKE"), root_1); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_characterStringLiteral.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:57: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:347:57: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4269,7 +4269,7 @@ public class CMISParser extends Parser { }; // $ANTLR start nullPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:350:1: nullPredicate : ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL -> ^( PRED_EXISTS columnReference ( NOT )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:350:1: nullPredicate : ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL -> ^( PRED_EXISTS columnReference ( NOT )? ) ; public final CMISParser.nullPredicate_return nullPredicate() throws RecognitionException { CMISParser.nullPredicate_return retval = new CMISParser.nullPredicate_return(); retval.start = input.LT(1); @@ -4293,10 +4293,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:2: ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL -> ^( PRED_EXISTS columnReference ( NOT )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:2: ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL -> ^( PRED_EXISTS columnReference ( NOT )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS ( NOT )? NULL { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) int alt33=2; int LA33_0 = input.LA(1); @@ -4393,7 +4393,7 @@ public class CMISParser extends Parser { } switch (alt33) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:6: ( columnReference )=> columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:6: ( columnReference )=> columnReference { pushFollow(FOLLOW_columnReference_in_nullPredicate1319); columnReference102=columnReference(); @@ -4405,7 +4405,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:44: multiValuedColumnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:44: multiValuedColumnReference { pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1323); multiValuedColumnReference103=multiValuedColumnReference(); @@ -4422,7 +4422,7 @@ public class CMISParser extends Parser { IS104=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1326); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IS.add(IS104); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:75: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:75: ( NOT )? int alt34=2; int LA34_0 = input.LA(1); @@ -4431,7 +4431,7 @@ public class CMISParser extends Parser { } switch (alt34) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:75: NOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:75: NOT { NOT105=(Token)match(input,NOT,FOLLOW_NOT_in_nullPredicate1328); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT105); @@ -4460,13 +4460,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 352:3: -> ^( PRED_EXISTS columnReference ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:352:6: ^( PRED_EXISTS columnReference ( NOT )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:352:6: ^( PRED_EXISTS columnReference ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_EXISTS, "PRED_EXISTS"), root_1); adaptor.addChild(root_1, stream_columnReference.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:352:36: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:352:36: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4506,7 +4506,7 @@ public class CMISParser extends Parser { }; // $ANTLR start quantifiedComparisonPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:355:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:355:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ; public final CMISParser.quantifiedComparisonPredicate_return quantifiedComparisonPredicate() throws RecognitionException { CMISParser.quantifiedComparisonPredicate_return retval = new CMISParser.quantifiedComparisonPredicate_return(); retval.start = input.LT(1); @@ -4527,8 +4527,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:356:2: ( literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:356:4: literalOrParameterName compOp ANY multiValuedColumnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:356:2: ( literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:356:4: literalOrParameterName compOp ANY multiValuedColumnReference { pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1356); literalOrParameterName107=literalOrParameterName(); @@ -4554,7 +4554,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: ANY, literalOrParameterName, multiValuedColumnReference, compOp + // elements: compOp, multiValuedColumnReference, literalOrParameterName, ANY // token labels: // rule labels: retval // token list labels: @@ -4566,7 +4566,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 357:2: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:357:5: ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:357:5: ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); @@ -4609,7 +4609,7 @@ public class CMISParser extends Parser { }; // $ANTLR start quantifiedInPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:361:1: quantifiedInPredicate : ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:361:1: quantifiedInPredicate : ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ; public final CMISParser.quantifiedInPredicate_return quantifiedInPredicate() throws RecognitionException { CMISParser.quantifiedInPredicate_return retval = new CMISParser.quantifiedInPredicate_return(); retval.start = input.LT(1); @@ -4639,8 +4639,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:4: ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:4: ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN { ANY111=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate1391); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ANY.add(ANY111); @@ -4651,7 +4651,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference112.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:35: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:35: ( NOT )? int alt35=2; int LA35_0 = input.LA(1); @@ -4660,7 +4660,7 @@ public class CMISParser extends Parser { } switch (alt35) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:35: NOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:35: NOT { NOT113=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate1395); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT113); @@ -4689,7 +4689,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: inValueList, ANY, multiValuedColumnReference, NOT + // elements: ANY, multiValuedColumnReference, inValueList, NOT // token labels: // rule labels: retval // token list labels: @@ -4701,7 +4701,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 363:3: -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:6: ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:363:6: ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); @@ -4709,7 +4709,7 @@ public class CMISParser extends Parser { adaptor.addChild(root_1, stream_ANY.nextNode()); adaptor.addChild(root_1, stream_multiValuedColumnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:59: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:363:59: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4749,7 +4749,7 @@ public class CMISParser extends Parser { }; // $ANTLR start textSearchPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:366:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:366:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; public final CMISParser.textSearchPredicate_return textSearchPredicate() throws RecognitionException { CMISParser.textSearchPredicate_return retval = new CMISParser.textSearchPredicate_return(); retval.start = input.LT(1); @@ -4778,8 +4778,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_textSearchExpression=new RewriteRuleSubtreeStream(adaptor,"rule textSearchExpression"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:2: ( CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:4: CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:2: ( CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:4: CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN { CONTAINS118=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate1434); if (state.failed) return retval; if ( state.backtracking==0 ) stream_CONTAINS.add(CONTAINS118); @@ -4787,7 +4787,7 @@ public class CMISParser extends Parser { LPAREN119=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate1436); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN119); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:20: ( qualifier COMMA | COMMA )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:20: ( qualifier COMMA | COMMA )? int alt36=3; int LA36_0 = input.LA(1); @@ -4799,7 +4799,7 @@ public class CMISParser extends Parser { } switch (alt36) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:21: qualifier COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:21: qualifier COMMA { pushFollow(FOLLOW_qualifier_in_textSearchPredicate1439); qualifier120=qualifier(); @@ -4814,7 +4814,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:39: COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:39: COMMA { COMMA122=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1445); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA122); @@ -4849,13 +4849,13 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 368:3: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:368:6: ^( PRED_FTS textSearchExpression ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:368:6: ^( PRED_FTS textSearchExpression ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_FTS, "PRED_FTS"), root_1); adaptor.addChild(root_1, stream_textSearchExpression.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:368:38: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:368:38: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -4895,7 +4895,7 @@ public class CMISParser extends Parser { }; // $ANTLR start folderPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:371:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:371:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); public final CMISParser.folderPredicate_return folderPredicate() throws RecognitionException { CMISParser.folderPredicate_return retval = new CMISParser.folderPredicate_return(); retval.start = input.LT(1); @@ -4915,7 +4915,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_IN_FOLDER=new RewriteRuleTokenStream(adaptor,"token IN_FOLDER"); RewriteRuleSubtreeStream stream_folderPredicateArgs=new RewriteRuleSubtreeStream(adaptor,"rule folderPredicateArgs"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:372:2: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:372:2: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) int alt37=2; int LA37_0 = input.LA(1); @@ -4934,7 +4934,7 @@ public class CMISParser extends Parser { } switch (alt37) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:372:4: IN_FOLDER folderPredicateArgs + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:372:4: IN_FOLDER folderPredicateArgs { IN_FOLDER125=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate1476); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER125); @@ -4960,7 +4960,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 373:3: -> ^( PRED_CHILD folderPredicateArgs ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:373:6: ^( PRED_CHILD folderPredicateArgs ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:373:6: ^( PRED_CHILD folderPredicateArgs ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_CHILD, "PRED_CHILD"), root_1); @@ -4976,7 +4976,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:374:10: IN_TREE folderPredicateArgs + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:374:10: IN_TREE folderPredicateArgs { IN_TREE127=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate1500); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE127); @@ -5002,7 +5002,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 375:3: -> ^( PRED_DESCENDANT folderPredicateArgs ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:375:6: ^( PRED_DESCENDANT folderPredicateArgs ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:375:6: ^( PRED_DESCENDANT folderPredicateArgs ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_DESCENDANT, "PRED_DESCENDANT"), root_1); @@ -5044,7 +5044,7 @@ public class CMISParser extends Parser { }; // $ANTLR start folderPredicateArgs - // W:\\workspace-cmis\\ANTLR\\CMIS.g:378:1: folderPredicateArgs : LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:378:1: folderPredicateArgs : LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ; public final CMISParser.folderPredicateArgs_return folderPredicateArgs() throws RecognitionException { CMISParser.folderPredicateArgs_return retval = new CMISParser.folderPredicateArgs_return(); retval.start = input.LT(1); @@ -5070,13 +5070,13 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_folderId=new RewriteRuleSubtreeStream(adaptor,"rule folderId"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:2: ( LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:4: LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:2: ( LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:4: LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN { LPAREN129=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs1524); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN129); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:11: ( qualifier COMMA | COMMA )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:11: ( qualifier COMMA | COMMA )? int alt38=3; int LA38_0 = input.LA(1); @@ -5088,7 +5088,7 @@ public class CMISParser extends Parser { } switch (alt38) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:12: qualifier COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:12: qualifier COMMA { pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1527); qualifier130=qualifier(); @@ -5103,7 +5103,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:30: COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:30: COMMA { COMMA132=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1533); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA132); @@ -5139,7 +5139,7 @@ public class CMISParser extends Parser { // 380:3: -> folderId ( qualifier )? { adaptor.addChild(root_0, stream_folderId.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:380:15: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:380:15: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_0, stream_qualifier.nextTree()); @@ -5176,7 +5176,7 @@ public class CMISParser extends Parser { }; // $ANTLR start orderByClause - // W:\\workspace-cmis\\ANTLR\\CMIS.g:383:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:383:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; public final CMISParser.orderByClause_return orderByClause() throws RecognitionException { CMISParser.orderByClause_return retval = new CMISParser.orderByClause_return(); retval.start = input.LT(1); @@ -5200,8 +5200,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_sortSpecification=new RewriteRuleSubtreeStream(adaptor,"rule sortSpecification"); paraphrases.push("in order by"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:2: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:4: ORDER BY sortSpecification ( COMMA sortSpecification )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:2: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:4: ORDER BY sortSpecification ( COMMA sortSpecification )* { ORDER135=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause1578); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ORDER.add(ORDER135); @@ -5215,7 +5215,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification137.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:31: ( COMMA sortSpecification )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:31: ( COMMA sortSpecification )* loop39: do { int alt39=2; @@ -5228,7 +5228,7 @@ public class CMISParser extends Parser { switch (alt39) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:33: COMMA sortSpecification + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:33: COMMA sortSpecification { COMMA138=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause1586); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA138); @@ -5263,7 +5263,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 387:3: -> ^( ORDER ( sortSpecification )+ ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:387:6: ^( ORDER ( sortSpecification )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:387:6: ^( ORDER ( sortSpecification )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ORDER.nextNode(), root_1); @@ -5313,7 +5313,7 @@ public class CMISParser extends Parser { }; // $ANTLR start sortSpecification - // W:\\workspace-cmis\\ANTLR\\CMIS.g:390:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:390:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); public final CMISParser.sortSpecification_return sortSpecification() throws RecognitionException { CMISParser.sortSpecification_return retval = new CMISParser.sortSpecification_return(); retval.start = input.LT(1); @@ -5331,12 +5331,12 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DESC=new RewriteRuleTokenStream(adaptor,"token DESC"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:2: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:391:2: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) int alt41=2; alt41 = dfa41.predict(input); switch (alt41) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:4: columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:391:4: columnReference { pushFollow(FOLLOW_columnReference_in_sortSpecification1614); columnReference140=columnReference(); @@ -5359,7 +5359,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 392:3: -> ^( SORT_SPECIFICATION columnReference ASC ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:392:6: ^( SORT_SPECIFICATION columnReference ASC ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:392:6: ^( SORT_SPECIFICATION columnReference ASC ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5376,7 +5376,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:4: columnReference (by= ASC | by= DESC ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:4: columnReference (by= ASC | by= DESC ) { pushFollow(FOLLOW_columnReference_in_sortSpecification1632); columnReference141=columnReference(); @@ -5384,7 +5384,7 @@ public class CMISParser extends Parser { state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference141.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:20: (by= ASC | by= DESC ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:20: (by= ASC | by= DESC ) int alt40=2; int LA40_0 = input.LA(1); @@ -5403,7 +5403,7 @@ public class CMISParser extends Parser { } switch (alt40) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:22: by= ASC + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:22: by= ASC { by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1638); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASC.add(by); @@ -5412,7 +5412,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:31: by= DESC + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:31: by= DESC { by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1644); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DESC.add(by); @@ -5426,7 +5426,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: by, columnReference + // elements: columnReference, by // token labels: by // rule labels: retval // token list labels: @@ -5439,7 +5439,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 394:3: -> ^( SORT_SPECIFICATION columnReference $by) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:394:6: ^( SORT_SPECIFICATION columnReference $by) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:394:6: ^( SORT_SPECIFICATION columnReference $by) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5482,7 +5482,7 @@ public class CMISParser extends Parser { }; // $ANTLR start correlationName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:397:1: correlationName : identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:397:1: correlationName : identifier ; public final CMISParser.correlationName_return correlationName() throws RecognitionException { CMISParser.correlationName_return retval = new CMISParser.correlationName_return(); retval.start = input.LT(1); @@ -5494,8 +5494,8 @@ public class CMISParser extends Parser { try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:398:2: ( identifier ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:398:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:398:2: ( identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:398:4: identifier { root_0 = (Object)adaptor.nil(); @@ -5533,7 +5533,7 @@ public class CMISParser extends Parser { }; // $ANTLR start tableName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:405:1: tableName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:405:1: tableName : identifier -> identifier ; public final CMISParser.tableName_return tableName() throws RecognitionException { CMISParser.tableName_return retval = new CMISParser.tableName_return(); retval.start = input.LT(1); @@ -5545,8 +5545,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:406:2: ( identifier -> identifier ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:406:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:406:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:406:4: identifier { pushFollow(FOLLOW_identifier_in_tableName1685); identifier143=identifier(); @@ -5601,7 +5601,7 @@ public class CMISParser extends Parser { }; // $ANTLR start columnName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:410:1: columnName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:410:1: columnName : identifier -> identifier ; public final CMISParser.columnName_return columnName() throws RecognitionException { CMISParser.columnName_return retval = new CMISParser.columnName_return(); retval.start = input.LT(1); @@ -5613,8 +5613,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:411:2: ( identifier -> identifier ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:411:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:411:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:411:4: identifier { pushFollow(FOLLOW_identifier_in_columnName1703); identifier144=identifier(); @@ -5669,7 +5669,7 @@ public class CMISParser extends Parser { }; // $ANTLR start multiValuedColumnName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:415:1: multiValuedColumnName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:415:1: multiValuedColumnName : identifier -> identifier ; public final CMISParser.multiValuedColumnName_return multiValuedColumnName() throws RecognitionException { CMISParser.multiValuedColumnName_return retval = new CMISParser.multiValuedColumnName_return(); retval.start = input.LT(1); @@ -5681,8 +5681,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:416:2: ( identifier -> identifier ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:416:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:416:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:416:4: identifier { pushFollow(FOLLOW_identifier_in_multiValuedColumnName1722); identifier145=identifier(); @@ -5737,7 +5737,7 @@ public class CMISParser extends Parser { }; // $ANTLR start parameterName - // W:\\workspace-cmis\\ANTLR\\CMIS.g:420:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:420:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; public final CMISParser.parameterName_return parameterName() throws RecognitionException { CMISParser.parameterName_return retval = new CMISParser.parameterName_return(); retval.start = input.LT(1); @@ -5752,8 +5752,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:421:2: ( COLON identifier -> ^( PARAMETER identifier ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:421:4: COLON identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:421:2: ( COLON identifier -> ^( PARAMETER identifier ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:421:4: COLON identifier { COLON146=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName1740); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COLON.add(COLON146); @@ -5779,7 +5779,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 422:3: -> ^( PARAMETER identifier ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:422:6: ^( PARAMETER identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:422:6: ^( PARAMETER identifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER, "PARAMETER"), root_1); @@ -5819,7 +5819,7 @@ public class CMISParser extends Parser { }; // $ANTLR start folderId - // W:\\workspace-cmis\\ANTLR\\CMIS.g:425:1: folderId : characterStringLiteral -> characterStringLiteral ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:425:1: folderId : characterStringLiteral -> characterStringLiteral ; public final CMISParser.folderId_return folderId() throws RecognitionException { CMISParser.folderId_return retval = new CMISParser.folderId_return(); retval.start = input.LT(1); @@ -5831,8 +5831,8 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:426:3: ( characterStringLiteral -> characterStringLiteral ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:426:5: characterStringLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:426:3: ( characterStringLiteral -> characterStringLiteral ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:426:5: characterStringLiteral { pushFollow(FOLLOW_characterStringLiteral_in_folderId1765); characterStringLiteral148=characterStringLiteral(); @@ -5887,7 +5887,7 @@ public class CMISParser extends Parser { }; // $ANTLR start textSearchExpression - // W:\\workspace-cmis\\ANTLR\\CMIS.g:430:1: textSearchExpression : QUOTED_STRING ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:430:1: textSearchExpression : QUOTED_STRING ; public final CMISParser.textSearchExpression_return textSearchExpression() throws RecognitionException { CMISParser.textSearchExpression_return retval = new CMISParser.textSearchExpression_return(); retval.start = input.LT(1); @@ -5899,8 +5899,8 @@ public class CMISParser extends Parser { Object QUOTED_STRING149_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:431:2: ( QUOTED_STRING ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:431:4: QUOTED_STRING + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:431:2: ( QUOTED_STRING ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:431:4: QUOTED_STRING { root_0 = (Object)adaptor.nil(); @@ -5937,7 +5937,7 @@ public class CMISParser extends Parser { }; // $ANTLR start identifier - // W:\\workspace-cmis\\ANTLR\\CMIS.g:434:1: identifier : ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:434:1: identifier : ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); public final CMISParser.identifier_return identifier() throws RecognitionException { CMISParser.identifier_return retval = new CMISParser.identifier_return(); retval.start = input.LT(1); @@ -5957,7 +5957,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DOUBLE_QUOTE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_QUOTE"); RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:435:2: ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:435:2: ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) int alt42=2; int LA42_0 = input.LA(1); @@ -5976,7 +5976,7 @@ public class CMISParser extends Parser { } switch (alt42) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:435:4: ID + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:435:4: ID { ID150=(Token)match(input,ID,FOLLOW_ID_in_identifier1798); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID150); @@ -6004,7 +6004,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:437:4: DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:437:4: DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE { DOUBLE_QUOTE151=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1809); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE151); @@ -6033,7 +6033,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 438:3: -> ^( keyWordOrId ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:438:6: ^( keyWordOrId ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:438:6: ^( keyWordOrId ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_keyWordOrId.nextNode(), root_1); @@ -6073,7 +6073,7 @@ public class CMISParser extends Parser { }; // $ANTLR start signedNumericLiteral - // W:\\workspace-cmis\\ANTLR\\CMIS.g:441:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:441:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); public final CMISParser.signedNumericLiteral_return signedNumericLiteral() throws RecognitionException { CMISParser.signedNumericLiteral_return retval = new CMISParser.signedNumericLiteral_return(); retval.start = input.LT(1); @@ -6088,7 +6088,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_FLOATING_POINT_LITERAL=new RewriteRuleTokenStream(adaptor,"token FLOATING_POINT_LITERAL"); RewriteRuleSubtreeStream stream_integerLiteral=new RewriteRuleSubtreeStream(adaptor,"rule integerLiteral"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:442:2: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:442:2: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) int alt43=2; int LA43_0 = input.LA(1); @@ -6107,7 +6107,7 @@ public class CMISParser extends Parser { } switch (alt43) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:442:4: FLOATING_POINT_LITERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:442:4: FLOATING_POINT_LITERAL { FLOATING_POINT_LITERAL154=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1833); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL154); @@ -6127,7 +6127,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 443:3: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:443:6: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:443:6: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -6143,7 +6143,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:444:4: integerLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:444:4: integerLiteral { pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral1848); integerLiteral155=integerLiteral(); @@ -6200,7 +6200,7 @@ public class CMISParser extends Parser { }; // $ANTLR start integerLiteral - // W:\\workspace-cmis\\ANTLR\\CMIS.g:448:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:448:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; public final CMISParser.integerLiteral_return integerLiteral() throws RecognitionException { CMISParser.integerLiteral_return retval = new CMISParser.integerLiteral_return(); retval.start = input.LT(1); @@ -6213,8 +6213,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:449:2: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:449:4: DECIMAL_INTEGER_LITERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:449:2: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:449:4: DECIMAL_INTEGER_LITERAL { DECIMAL_INTEGER_LITERAL156=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1867); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL156); @@ -6234,7 +6234,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 450:3: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:450:6: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:450:6: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -6274,7 +6274,7 @@ public class CMISParser extends Parser { }; // $ANTLR start characterStringLiteral - // W:\\workspace-cmis\\ANTLR\\CMIS.g:453:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:453:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; public final CMISParser.characterStringLiteral_return characterStringLiteral() throws RecognitionException { CMISParser.characterStringLiteral_return retval = new CMISParser.characterStringLiteral_return(); retval.start = input.LT(1); @@ -6287,8 +6287,8 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_QUOTED_STRING=new RewriteRuleTokenStream(adaptor,"token QUOTED_STRING"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:454:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:454:4: QUOTED_STRING + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:454:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:454:4: QUOTED_STRING { QUOTED_STRING157=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral1890); if (state.failed) return retval; if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING157); @@ -6308,7 +6308,7 @@ public class CMISParser extends Parser { root_0 = (Object)adaptor.nil(); // 455:3: -> ^( STRING_LITERAL QUOTED_STRING ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:455:6: ^( STRING_LITERAL QUOTED_STRING ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:455:6: ^( STRING_LITERAL QUOTED_STRING ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRING_LITERAL, "STRING_LITERAL"), root_1); @@ -6348,7 +6348,7 @@ public class CMISParser extends Parser { }; // $ANTLR start keyWord - // W:\\workspace-cmis\\ANTLR\\CMIS.g:459:1: keyWord : ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:459:1: keyWord : ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE ); public final CMISParser.keyWord_return keyWord() throws RecognitionException { CMISParser.keyWord_return retval = new CMISParser.keyWord_return(); retval.start = input.LT(1); @@ -6360,8 +6360,8 @@ public class CMISParser extends Parser { Object set158_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:459:9: ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g: + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:459:9: ( SELECT | AS | UPPER | LOWER | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | SCORE ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { root_0 = (Object)adaptor.nil(); @@ -6405,7 +6405,7 @@ public class CMISParser extends Parser { }; // $ANTLR start keyWordOrId - // W:\\workspace-cmis\\ANTLR\\CMIS.g:488:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:488:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); public final CMISParser.keyWordOrId_return keyWordOrId() throws RecognitionException { CMISParser.keyWordOrId_return retval = new CMISParser.keyWordOrId_return(); retval.start = input.LT(1); @@ -6420,7 +6420,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleSubtreeStream stream_keyWord=new RewriteRuleSubtreeStream(adaptor,"rule keyWord"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:489:2: ( keyWord -> keyWord | ID -> ID ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:489:2: ( keyWord -> keyWord | ID -> ID ) int alt44=2; int LA44_0 = input.LA(1); @@ -6439,7 +6439,7 @@ public class CMISParser extends Parser { } switch (alt44) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:489:4: keyWord + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:489:4: keyWord { pushFollow(FOLLOW_keyWord_in_keyWordOrId2099); keyWord159=keyWord(); @@ -6470,7 +6470,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:491:4: ID + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:491:4: ID { ID160=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2111); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID160); @@ -6520,8 +6520,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred1_CMIS public final void synpred1_CMIS_fragment() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:4: ( valueExpression ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:165:5: valueExpression + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:4: ( valueExpression ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:165:5: valueExpression { pushFollow(FOLLOW_valueExpression_in_synpred1_CMIS287); valueExpression(); @@ -6535,8 +6535,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred2_CMIS public final void synpred2_CMIS_fragment() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:207:4: ( tableName ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:207:5: tableName + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:4: ( tableName ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:5: tableName { pushFollow(FOLLOW_tableName_in_synpred2_CMIS562); tableName(); @@ -6550,8 +6550,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred3_CMIS public final void synpred3_CMIS_fragment() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:17: ( joinedTable ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:221:18: joinedTable + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:17: ( joinedTable ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:18: joinedTable { pushFollow(FOLLOW_joinedTable_in_synpred3_CMIS640); joinedTable(); @@ -6565,8 +6565,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred4_CMIS public final void synpred4_CMIS_fragment() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:35: ( joinSpecification ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:236:36: joinSpecification + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:35: ( joinSpecification ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:36: joinSpecification { pushFollow(FOLLOW_joinSpecification_in_synpred4_CMIS737); joinSpecification(); @@ -6580,8 +6580,8 @@ public class CMISParser extends Parser { // $ANTLR start synpred5_CMIS public final void synpred5_CMIS_fragment() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:6: ( columnReference ) - // W:\\workspace-cmis\\ANTLR\\CMIS.g:351:7: columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:6: ( columnReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:7: columnReference { pushFollow(FOLLOW_columnReference_in_synpred5_CMIS1315); columnReference(); diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/FunctionArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionArgument.java new file mode 100644 index 0000000000..5ff4ad7bb9 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionArgument.java @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel; + +/** + * @author andyh + * + */ +public interface FunctionArgument extends DynamicArgument, FunctionInvokation +{ + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java b/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java index c7256f87a1..c31a0a353b 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java @@ -64,4 +64,6 @@ public interface QueryModelFactory public Function getFunction(String functionName); public ListArgument createListArgument(String name, ArrayList arguments); + + public FunctionArgument createFunctionArgument(String name, Function function, List functionArguments); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java new file mode 100644 index 0000000000..61a41a415f --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.io.Serializable; +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.Function; +import org.alfresco.repo.search.impl.querymodel.FunctionArgument; + +/** + * @author andyh + * + */ +public class BaseFunctionArgument extends BaseDynamicArgument implements FunctionArgument +{ + + private Function function; + + private List arguments; + + public BaseFunctionArgument(String name, Function function, List arguments) + { + super(name); + this.function = function; + this.arguments = arguments; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() + */ + public Serializable getValue() + { + throw new UnsupportedOperationException(); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionInvokation#getFunction() + */ + public Function getFunction() + { + return function; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionInvokation#getFunctionArguments() + */ + public List getFunctionArguments() + { + return arguments; + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseFunctionArgument["); + builder.append("Name=").append(getName()).append(", "); + builder.append("Function="+getFunction()).append(", "); + builder.append("Arguments="+getFunctionArguments()); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionArgument.java new file mode 100644 index 0000000000..fe75c04ed1 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionArgument.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.Function; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunctionArgument; + +/** + * @author andyh + * + */ +public class LuceneFunctionArgument extends BaseFunctionArgument +{ + + /** + * @param name + * @param function + * @param arguments + */ + public LuceneFunctionArgument(String name, Function function, List arguments) + { + super(name, function, arguments); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java index b5089a2646..cd5828363c 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java @@ -33,6 +33,7 @@ import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Column; import org.alfresco.repo.search.impl.querymodel.Constraint; import org.alfresco.repo.search.impl.querymodel.Function; +import org.alfresco.repo.search.impl.querymodel.FunctionArgument; import org.alfresco.repo.search.impl.querymodel.Join; import org.alfresco.repo.search.impl.querymodel.JoinType; import org.alfresco.repo.search.impl.querymodel.ListArgument; @@ -287,4 +288,12 @@ public class LuceneQueryModelFactory implements QueryModelFactory return new LuceneListArgument(name, arguments); } + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createFunctionArgument(java.lang.String, org.alfresco.repo.search.impl.querymodel.Function, java.util.List) + */ + public FunctionArgument createFunctionArgument(String name, Function function, List functionArguments) + { + return new LuceneFunctionArgument(name, function, functionArguments); + } + } diff --git a/source/java/org/alfresco/service/cmr/search/SearchParameters.java b/source/java/org/alfresco/service/cmr/search/SearchParameters.java index 2782830fd9..ea51033525 100644 --- a/source/java/org/alfresco/service/cmr/search/SearchParameters.java +++ b/source/java/org/alfresco/service/cmr/search/SearchParameters.java @@ -50,7 +50,7 @@ public class SearchParameters extends SearchStatement */ private static int DEFAULT_LIMIT = 500; - private static int DEFAULT_BULK_FETCH_SIZE = 10; + private static int DEFAULT_BULK_FETCH_SIZE = 1000; /* * Standard sort definitions for sorting in document and score order.