diff --git a/.externalToolBuilders/JibX.launch b/.externalToolBuilders/JibX.launch index 2e7c430e11..a5578dd881 100644 --- a/.externalToolBuilders/JibX.launch +++ b/.externalToolBuilders/JibX.launch @@ -1,24 +1,15 @@ + + - - - - - - - - - - - - + + + - - - + @@ -28,9 +19,15 @@ + + + + + + + - - - - + + + diff --git a/config/alfresco/cmis-api-context.xml b/config/alfresco/cmis-api-context.xml index 53dbc018ec..627ebe1cc4 100644 --- a/config/alfresco/cmis-api-context.xml +++ b/config/alfresco/cmis-api-context.xml @@ -36,6 +36,9 @@ + + + @@ -86,6 +89,9 @@ + + + diff --git a/config/alfresco/ehcache-default.xml b/config/alfresco/ehcache-default.xml index 12c3f69b4e..61444af599 100644 --- a/config/alfresco/ehcache-default.xml +++ b/config/alfresco/ehcache-default.xml @@ -43,7 +43,7 @@ @@ -57,21 +57,21 @@ diff --git a/config/alfresco/model/cmisModel.xml b/config/alfresco/model/cmisModel.xml index 081a8981bf..1d21a58d40 100644 --- a/config/alfresco/model/cmisModel.xml +++ b/config/alfresco/model/cmisModel.xml @@ -97,9 +97,7 @@ true true false - - true - + Version Series Checked Out By @@ -108,7 +106,7 @@ true false false - + Version Series Checked Out Id @@ -148,7 +146,7 @@ false false - true + false @@ -230,9 +228,7 @@ true true false - - false - + Target Id @@ -241,9 +237,7 @@ true true false - - false - + @@ -274,9 +268,7 @@ true false false - - false - + Object Type Id @@ -340,9 +332,7 @@ true true false - - false - + diff --git a/source/java/org/alfresco/cmis/CMISService.java b/source/java/org/alfresco/cmis/CMISService.java index e246bf004b..9d064cdf93 100644 --- a/source/java/org/alfresco/cmis/CMISService.java +++ b/source/java/org/alfresco/cmis/CMISService.java @@ -71,9 +71,10 @@ public class CMISService implements ApplicationContextAware, ApplicationListener */ public enum TypesFilter { + Documents, Folders, - FoldersAndDocuments, - Documents + Policies, + Any, }; /** Query Parameters */ @@ -342,7 +343,7 @@ public class CMISService implements ApplicationContextAware, ApplicationListener */ public NodeRef[] getChildren(NodeRef parent, TypesFilter typesFilter) { - if (typesFilter == TypesFilter.FoldersAndDocuments) + if (typesFilter == TypesFilter.Any) { NodeRef[] folders = queryChildren(parent, TypesFilter.Folders); NodeRef[] docs = queryChildren(parent, TypesFilter.Documents); diff --git a/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java b/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java index 6ce49e3746..cb5ebf595e 100644 --- a/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java +++ b/source/java/org/alfresco/cmis/dictionary/BaseCMISTest.java @@ -31,6 +31,7 @@ import javax.transaction.UserTransaction; import junit.framework.TestCase; +import org.alfresco.cmis.CMISService; import org.alfresco.cmis.property.CMISPropertyService; import org.alfresco.cmis.search.CMISQueryService; import org.alfresco.repo.security.authentication.AuthenticationComponent; @@ -42,6 +43,7 @@ import org.alfresco.service.cmr.model.FileFolderService; 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.SearchService; import org.alfresco.service.cmr.security.AuthenticationService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.transaction.TransactionService; @@ -89,6 +91,10 @@ public abstract class BaseCMISTest extends TestCase private MutableAuthenticationDao authenticationDAO; + protected CMISService cmisService; + + protected SearchService searchService; + public void setUp() throws Exception { serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); @@ -97,6 +103,7 @@ public abstract class BaseCMISTest extends TestCase cmisMapping = cmisDictionaryService.getCMISMapping(); cmisPropertyService = (CMISPropertyService) ctx.getBean("CMISPropertyService"); cmisQueryService = (CMISQueryService) ctx.getBean("CMISQueryService"); + cmisService = (CMISService) ctx.getBean("CMISService"); dictionaryService = (DictionaryService) ctx.getBean("dictionaryService"); nodeService = (NodeService) ctx.getBean("nodeService"); fileFolderService = (FileFolderService) ctx.getBean("fileFolderService"); @@ -105,6 +112,8 @@ public abstract class BaseCMISTest extends TestCase transactionService = (TransactionService) ctx.getBean("transactionComponent"); authenticationComponent = (AuthenticationComponent) ctx.getBean("authenticationComponent"); + searchService = (SearchService) ctx.getBean("searchService"); + authenticationService = (AuthenticationService) ctx.getBean("authenticationService"); authenticationDAO = (MutableAuthenticationDao) ctx.getBean("authenticationDao"); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java index 133dc617a1..caedc88c90 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISMapping.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISMapping.java @@ -147,7 +147,7 @@ public class CMISMapping public static String PROP_PARENT = "PARENT"; - public static String PROP_ALLLOWED_CHILD_OBJECT_TYPES = "ALLLOWED_CHILD_OBJECT_TYPES"; + public static String PROP_ALLOWED_CHILD_OBJECT_TYPES = "ALLOWED_CHILD_OBJECT_TYPES"; public static String PROP_SOURCE_ID = "SOURCE_ID"; diff --git a/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java index fb0bb5ce79..233bb4565f 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISTypeDefinition.java @@ -142,7 +142,7 @@ public class CMISTypeDefinition implements Serializable objectTypeId = typeId; objectTypeQueryName = cmisMapping.getQueryName(typeId.getQName()); displayName = typeDefinition.getTitle(); - parentTypeId = CMISMapping.RELATIONSHIP_TYPE_ID; + parentTypeId = null; rootTypeQueryName = cmisMapping.getQueryName(CMISMapping.RELATIONSHIP_QNAME); description = typeDefinition.getDescription(); creatable = false; diff --git a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java index 3d877f09f8..86e7f240eb 100644 --- a/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java +++ b/source/java/org/alfresco/cmis/property/CMISPropertyServiceImpl.java @@ -29,13 +29,17 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.alfresco.cmis.CMISService; 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.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; +import org.apache.lucene.search.Query; import org.springframework.beans.factory.InitializingBean; /** @@ -49,12 +53,22 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin private AbstractGenericPropertyAccessor genericPropertyAccessor; + private CMISService cmisService; + private CMISMapping cmisMapping; - + private ServiceRegistry serviceRegistry; private boolean strict = false; + /** + * @param cmisService + */ + public void setCMISService(CMISService cmisService) + { + this.cmisService = cmisService; + } + /** * @param cmisMapping */ @@ -64,13 +78,13 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin } /** - * @return cmis mapping service + * @return cmis mapping service */ public CMISMapping getCMISMapping() { return cmisMapping; } - + /** * @param serviceRegistry */ @@ -233,7 +247,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin // CMIS Folder addNamedPropertyAccessor(getParentPropertyAccessor()); - addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES, null, CMISScope.FOLDER)); + addNamedPropertyAccessor(getFixedValuePropertyAccessor(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES, null, CMISScope.FOLDER)); } public void addNamedPropertyAccessor(NamedPropertyAccessor namedPropertyAccessor) @@ -269,7 +283,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin accessor.setCMISMapping(cmisMapping); return accessor; } - + public NamedPropertyAccessor getFixedValuePropertyAccessor(String propertyName, Serializable fixedValue, CMISScope scope) { FixedValuePropertyAccessor accessor = new FixedValuePropertyAccessor(); @@ -328,7 +342,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin accessor.setCMISMapping(cmisMapping); return accessor; } - + public NamedPropertyAccessor getVersionSeriesIsCheckedOutPropertyAccessor() { VersionSeriesIsCheckedOutPropertyAccessor accessor = new VersionSeriesIsCheckedOutPropertyAccessor(); @@ -336,7 +350,7 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin accessor.setCMISMapping(cmisMapping); return accessor; } - + public NamedPropertyAccessor getVersionSeriesCheckedOutByPropertyAccessor() { VersionSeriesCheckedOutByPropertyAccessor accessor = new VersionSeriesCheckedOutByPropertyAccessor(); @@ -382,7 +396,47 @@ public class CMISPropertyServiceImpl implements CMISPropertyService, Initializin ParentPropertyAccessor accessor = new ParentPropertyAccessor(); accessor.setServiceRegistry(serviceRegistry); accessor.setCMISMapping(cmisMapping); + accessor.setCMISService(cmisService); return accessor; } + /** + * @param lqp + * @param propertyName + * @param value + * @return + * @throws ParseException + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + NamedPropertyAccessor accessor = namedPropertyAccessors.get(propertyName); + if (accessor != null) + { + return accessor.buildLuceneEquality(lqp, propertyName, value); + } + else + { + return genericPropertyAccessor.buildLuceneEquality(lqp, propertyName, value); + } + } + + /** + * @param lqp + * @param propertyName + * @param not + * @return + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + NamedPropertyAccessor accessor = namedPropertyAccessors.get(propertyName); + if (accessor != null) + { + return accessor.buildLuceneExists(lqp, propertyName, not); + } + else + { + return genericPropertyAccessor.buildLuceneExists(lqp, propertyName, not); + } + } + } diff --git a/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java b/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java index 6ff6dc58e0..08984ef708 100644 --- a/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java +++ b/source/java/org/alfresco/cmis/property/CMISPropertyServiceTest.java @@ -75,7 +75,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI)); assertEquals(properties.get(CMISMapping.PROP_PARENT), rootNodeRef.toString()); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); } @@ -112,7 +112,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); } @@ -149,7 +149,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); ContentData contentData = new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK); @@ -203,7 +203,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); serviceRegistry.getLockService().lock(content, LockType.READ_ONLY_LOCK); @@ -250,7 +250,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); } @@ -287,7 +287,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); NodeRef pwc = serviceRegistry.getCheckOutCheckInService().checkout(content); @@ -321,10 +321,10 @@ public class CMISPropertyServiceTest extends BaseCMISTest 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_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.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); @@ -333,7 +333,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); serviceRegistry.getCheckOutCheckInService().cancelCheckout(pwc); @@ -366,7 +366,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); pwc = serviceRegistry.getCheckOutCheckInService().checkout(content); @@ -400,10 +400,10 @@ public class CMISPropertyServiceTest extends BaseCMISTest 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_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.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); @@ -412,7 +412,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); serviceRegistry.getCheckOutCheckInService().checkin(pwc, null); @@ -445,7 +445,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); } @@ -482,7 +482,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); nodeService.addAspect(content, ContentModel.ASPECT_VERSIONABLE, null); @@ -515,7 +515,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); NodeRef pwc = serviceRegistry.getCheckOutCheckInService().checkout(content); @@ -549,10 +549,10 @@ public class CMISPropertyServiceTest extends BaseCMISTest 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_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.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); @@ -561,7 +561,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); serviceRegistry.getCheckOutCheckInService().cancelCheckout(pwc); @@ -594,7 +594,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); pwc = serviceRegistry.getCheckOutCheckInService().checkout(content); @@ -628,10 +628,10 @@ public class CMISPropertyServiceTest extends BaseCMISTest 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_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.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); @@ -640,7 +640,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); Map versionProperties = new HashMap(); versionProperties.put(Version.PROP_DESCRIPTION, "Meep"); @@ -676,7 +676,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); pwc = serviceRegistry.getCheckOutCheckInService().checkout(content); @@ -710,10 +710,10 @@ public class CMISPropertyServiceTest extends BaseCMISTest 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_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.toString()); assertEquals(properties.get(CMISMapping.PROP_CHECKIN_COMMENT), null); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_ALLOWED), ContentStreamAllowed.ALLOWED.toString()); assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_LENGTH), 0L); @@ -722,7 +722,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); versionProperties = new HashMap(); versionProperties.put(Version.PROP_DESCRIPTION, "Woof"); @@ -758,7 +758,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISMapping.PROP_CONTENT_STREAM_URI), null); assertNull(properties.get(CMISMapping.PROP_PARENT)); - assertNull(properties.get(CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(properties.get(CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); } public void testSinglePropertyFolderAccess() @@ -792,7 +792,7 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_CONTENT_STREAM_URI)); assertEquals(cmisPropertyService.getProperty(folder, CMISMapping.PROP_PARENT), rootNodeRef.toString()); - assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_ALLLOWED_CHILD_OBJECT_TYPES)); + assertNull(cmisPropertyService.getProperty(folder, CMISMapping.PROP_ALLOWED_CHILD_OBJECT_TYPES)); assertEquals(cmisPropertyService.getProperty(folder, "CM_NAME"), "BaseFolder"); assertEquals(cmisPropertyService.getProperty(folder, "cm_name"), "BaseFolder"); diff --git a/source/java/org/alfresco/cmis/property/CheckinCommentPropertyAccessor.java b/source/java/org/alfresco/cmis/property/CheckinCommentPropertyAccessor.java index fcd47607c3..2ce131dd14 100644 --- a/source/java/org/alfresco/cmis/property/CheckinCommentPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/CheckinCommentPropertyAccessor.java @@ -28,8 +28,10 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.version.Version; +import org.apache.lucene.search.Query; /** * Accesor for the CMIS Checkin Comment @@ -64,5 +66,21 @@ public class CheckinCommentPropertyAccessor extends AbstractNamedPropertyAccesso { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) + { + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/ContentStreamLengthPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ContentStreamLengthPropertyAccessor.java index 24e456ca97..e03e6af5a3 100644 --- a/source/java/org/alfresco/cmis/property/ContentStreamLengthPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ContentStreamLengthPropertyAccessor.java @@ -29,9 +29,13 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * Accessor for CMIS content stream length property * @@ -67,4 +71,39 @@ public class ContentStreamLengthPropertyAccessor extends AbstractNamedPropertyAc { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + StringBuilder field = new StringBuilder(); + field.append("@"); + field.append(ContentModel.PROP_CONTENT); + field.append(".size"); + + // Check type conversion + + Object converted = DefaultTypeConverter.INSTANCE.convert(getServiceRegistry().getDictionaryService().getDataType(DataTypeDefinition.LONG), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery(field.toString(), asString); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if(not) + { + return lqp.getFieldQuery("ISNULL", ContentModel.PROP_CONTENT.toString()); + } + else + { + return lqp.getFieldQuery("ISNOTNULL", ContentModel.PROP_CONTENT.toString()); + } + + + } } diff --git a/source/java/org/alfresco/cmis/property/ContentStreamMimetypePropertyAccessor.java b/source/java/org/alfresco/cmis/property/ContentStreamMimetypePropertyAccessor.java index f37d786433..d0b0e3182e 100644 --- a/source/java/org/alfresco/cmis/property/ContentStreamMimetypePropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ContentStreamMimetypePropertyAccessor.java @@ -29,9 +29,13 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * Accessor for CMIS content stream mimetype property @@ -69,4 +73,36 @@ public class ContentStreamMimetypePropertyAccessor extends AbstractNamedProperty return CMISScope.DOCUMENT; } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + StringBuilder field = new StringBuilder(); + field.append("@"); + field.append(ContentModel.PROP_CONTENT); + field.append(".mimetype"); + + // Check type conversion + + Object converted = DefaultTypeConverter.INSTANCE.convert(getServiceRegistry().getDictionaryService().getDataType(DataTypeDefinition.TEXT), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery(field.toString(), asString); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if(not) + { + return lqp.getFieldQuery("ISNULL", ContentModel.PROP_CONTENT.toString()); + } + else + { + return lqp.getFieldQuery("ISNOTNULL", ContentModel.PROP_CONTENT.toString()); + } + } } diff --git a/source/java/org/alfresco/cmis/property/FixedValuePropertyAccessor.java b/source/java/org/alfresco/cmis/property/FixedValuePropertyAccessor.java index 994bf2fc58..f7df1fea7b 100644 --- a/source/java/org/alfresco/cmis/property/FixedValuePropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/FixedValuePropertyAccessor.java @@ -26,7 +26,13 @@ package org.alfresco.cmis.property; import java.io.Serializable; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; /** * Property accessor for fixed value mapping (eg to null, true, etc) @@ -53,4 +59,49 @@ public class FixedValuePropertyAccessor extends AbstractNamedPropertyAccessor return fixedValue; } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + if(value.equals(fixedValue)) + { + return new MatchAllDocsQuery(); + } + else + { + return new TermQuery(new Term("NO_TOKENS", "__")); + } + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if(not) + { + if(fixedValue == null) + { + return new MatchAllDocsQuery(); + } + else + { + return new TermQuery(new Term("NO_TOKENS", "__")); + } + } + else + { + if(fixedValue == null) + { + return new TermQuery(new Term("NO_TOKENS", "__")); + } + else + { + return new MatchAllDocsQuery(); + } + } + + } + } diff --git a/source/java/org/alfresco/cmis/property/GenericPropertyAccessor.java b/source/java/org/alfresco/cmis/property/GenericPropertyAccessor.java index 55c482690e..45abb60910 100644 --- a/source/java/org/alfresco/cmis/property/GenericPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/GenericPropertyAccessor.java @@ -26,7 +26,10 @@ package org.alfresco.cmis.property; import java.io.Serializable; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * The API to access a property. @@ -44,4 +47,8 @@ public interface GenericPropertyAccessor * @return */ public Serializable getProperty(NodeRef nodeRef, String propertyName); + + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException; + + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException; } diff --git a/source/java/org/alfresco/cmis/property/IsImmutablePropertyAccessor.java b/source/java/org/alfresco/cmis/property/IsImmutablePropertyAccessor.java index 0a14eaacc6..b6810d019f 100644 --- a/source/java/org/alfresco/cmis/property/IsImmutablePropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/IsImmutablePropertyAccessor.java @@ -29,9 +29,12 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * Property accessor for CMIS is immutable property @@ -72,5 +75,21 @@ public class IsImmutablePropertyAccessor extends AbstractNamedPropertyAccessor { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/IsLatestVersionPropertyAccessor.java b/source/java/org/alfresco/cmis/property/IsLatestVersionPropertyAccessor.java index 5c3fd310fe..fb794ee363 100644 --- a/source/java/org/alfresco/cmis/property/IsLatestVersionPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/IsLatestVersionPropertyAccessor.java @@ -29,7 +29,10 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * Accesser for CMIS is latest version property @@ -55,5 +58,21 @@ public class IsLatestVersionPropertyAccessor extends AbstractNamedPropertyAccess { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/IsMajorVersionPropertyAccessor.java b/source/java/org/alfresco/cmis/property/IsMajorVersionPropertyAccessor.java index 0866512534..febd135959 100644 --- a/source/java/org/alfresco/cmis/property/IsMajorVersionPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/IsMajorVersionPropertyAccessor.java @@ -29,9 +29,12 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.version.Version; import org.alfresco.service.cmr.version.VersionType; +import org.apache.lucene.search.Query; /** * Accessor for CMIS is major version property @@ -73,4 +76,20 @@ public class IsMajorVersionPropertyAccessor extends AbstractNamedPropertyAccesso return CMISScope.DOCUMENT; } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } + } diff --git a/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java b/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java index 49aa41e58e..11d4e818df 100644 --- a/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/MappingPropertyAccessor.java @@ -26,8 +26,13 @@ package org.alfresco.cmis.property; import java.io.Serializable; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; +import org.apache.lucene.search.Query; /** * Generic mapping of CMIS style property names to Alfresco properties (for non CMIS properties) @@ -42,4 +47,42 @@ public class MappingPropertyAccessor extends AbstractGenericPropertyAccessor return getServiceRegistry().getNodeService().getProperty(nodeRef, propertyQname); } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.GenericPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + QName propertyQname = getCMISMapping().getPropertyQName(propertyName); + StringBuilder field = new StringBuilder(); + field.append("@"); + field.append(propertyQname); + + // Check type conversion + + PropertyDefinition pd = getServiceRegistry().getDictionaryService().getProperty(propertyQname); + Object converted = DefaultTypeConverter.INSTANCE.convert(pd.getDataType(), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery(field.toString(), asString); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.GenericPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + + QName propertyQname = getCMISMapping().getPropertyQName(propertyName); + if(not) + { + return lqp.getFieldQuery("ISNULL", propertyQname.toString()); + } + else + { + return lqp.getFieldQuery("ISNOTNULL", propertyQname.toString()); + } + } + + + } diff --git a/source/java/org/alfresco/cmis/property/NamedPropertyAccessor.java b/source/java/org/alfresco/cmis/property/NamedPropertyAccessor.java index 9a415ca2e1..3b61beeb79 100644 --- a/source/java/org/alfresco/cmis/property/NamedPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/NamedPropertyAccessor.java @@ -27,7 +27,10 @@ package org.alfresco.cmis.property; import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * Named property accessor @@ -55,4 +58,15 @@ public interface NamedPropertyAccessor * @return */ public CMISScope getScope(); + + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException; + + /** + * @param lqp + * @param propertyName + * @param not + * @return + * @throws ParseException + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException; } diff --git a/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java index 3956f5dd1b..8c0ece0868 100644 --- a/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ObjectIdPropertyAccessor.java @@ -29,8 +29,15 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; /** * Get the CMIS object id property. @@ -73,4 +80,38 @@ public class ObjectIdPropertyAccessor extends AbstractNamedPropertyAccessor return CMISScope.OBJECT; } + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, + * java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + // TODO: version label form + + Object converted = DefaultTypeConverter.INSTANCE.convert(getServiceRegistry().getDictionaryService().getDataType(DataTypeDefinition.NODE_REF), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery("ID", asString); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, + * java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if (not) + { + return new TermQuery(new Term("NO_TOKENS", "__")); + } + else + { + return new MatchAllDocsQuery(); + } + } + } diff --git a/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java index c9045aff27..3fd254e963 100644 --- a/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ObjectTypeIdPropertyAccessor.java @@ -28,8 +28,15 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; /** * Get the CMIS object type id property @@ -71,5 +78,34 @@ public class ObjectTypeIdPropertyAccessor extends AbstractNamedPropertyAccessor return CMISScope.OBJECT; } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + // TODO: version label form + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, value); + return lqp.getFieldQuery("TYPE", asString); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, + * java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if (not) + { + return new TermQuery(new Term("NO_TOKENS", "__")); + } + else + { + return new MatchAllDocsQuery(); + } + } + + } diff --git a/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java b/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java index 1e9615d7fc..3475ad946e 100644 --- a/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/ParentPropertyAccessor.java @@ -26,10 +26,19 @@ package org.alfresco.cmis.property; import java.io.Serializable; +import org.alfresco.cmis.CMISService; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.index.Term; +import org.apache.lucene.search.MatchAllDocsQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TermQuery; /** * Get the CMIS parent property @@ -39,11 +48,27 @@ import org.alfresco.service.cmr.repository.NodeRef; */ public class ParentPropertyAccessor extends AbstractNamedPropertyAccessor { + private CMISService cmisService; + + /** + * @param cmisService + */ + public void setCMISService(CMISService cmisService) + { + this.cmisService = cmisService; + } + + public Serializable getProperty(NodeRef nodeRef) { + if (nodeRef.equals(cmisService.getDefaultRootNodeRef())) + { + return null; + } + ChildAssociationRef car = getServiceRegistry().getNodeService().getPrimaryParent(nodeRef); - if((car != null) && (car.getParentRef() != null)) + if ((car != null) && (car.getParentRef() != null)) { return car.getParentRef().toString(); } @@ -66,4 +91,36 @@ public class ParentPropertyAccessor extends AbstractNamedPropertyAccessor { return CMISScope.FOLDER; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + // TODO: version label form + + Object converted = DefaultTypeConverter.INSTANCE.convert(getServiceRegistry().getDictionaryService().getDataType(DataTypeDefinition.NODE_REF), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery("PARENT", asString); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, + * java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + if (not) + { + return new TermQuery(new Term("ISROOT", "T")); + } + else + { + return new MatchAllDocsQuery(); + } + } + } diff --git a/source/java/org/alfresco/cmis/property/SimplePropertyAccessor.java b/source/java/org/alfresco/cmis/property/SimplePropertyAccessor.java index 65e1aecb78..03c41ecefa 100644 --- a/source/java/org/alfresco/cmis/property/SimplePropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/SimplePropertyAccessor.java @@ -26,8 +26,13 @@ package org.alfresco.cmis.property; import java.io.Serializable; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; +import org.apache.lucene.search.Query; import org.springframework.beans.factory.InitializingBean; /** @@ -37,7 +42,7 @@ import org.springframework.beans.factory.InitializingBean; */ public class SimplePropertyAccessor extends AbstractNamedPropertyAccessor implements InitializingBean { - private QName qname; + private QName propertyQname; private String mapping; @@ -48,12 +53,45 @@ public class SimplePropertyAccessor extends AbstractNamedPropertyAccessor implem public Serializable getProperty(NodeRef nodeRef) { - return getServiceRegistry().getNodeService().getProperty(nodeRef, qname); + return getServiceRegistry().getNodeService().getProperty(nodeRef, propertyQname); } public void afterPropertiesSet() throws Exception { - qname = QName.resolveToQName(getServiceRegistry().getNamespaceService(), mapping); + propertyQname = QName.resolveToQName(getServiceRegistry().getNamespaceService(), mapping); } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.GenericPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + StringBuilder field = new StringBuilder(); + field.append("@"); + field.append(propertyQname); + + // Check type conversion + + PropertyDefinition pd = getServiceRegistry().getDictionaryService().getProperty(propertyQname); + Object converted = DefaultTypeConverter.INSTANCE.convert(pd.getDataType(), value); + String asString = DefaultTypeConverter.INSTANCE.convert(String.class, converted); + + return lqp.getFieldQuery(field.toString(), asString); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.GenericPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + + if(not) + { + return lqp.getFieldQuery("ISNULL", propertyQname.toString()); + } + else + { + return lqp.getFieldQuery("ISNOTNULL", propertyQname.toString()); + } + } } diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutByPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutByPropertyAccessor.java index 8ee687b702..ddcc1b2b73 100644 --- a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutByPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutByPropertyAccessor.java @@ -29,8 +29,11 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * Get the CMIS version series checked out by property @@ -44,7 +47,7 @@ public class VersionSeriesCheckedOutByPropertyAccessor extends AbstractNamedProp { if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY)) { - return null; + return getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_WORKING_COPY_OWNER); } else { @@ -79,4 +82,21 @@ public class VersionSeriesCheckedOutByPropertyAccessor extends AbstractNamedProp { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java index ea7663c6fd..58be9f0f30 100644 --- a/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/VersionSeriesCheckedOutIdPropertyAccessor.java @@ -29,8 +29,11 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * Get the CMIS version series checked out id property @@ -44,7 +47,7 @@ public class VersionSeriesCheckedOutIdPropertyAccessor extends AbstractNamedProp { if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY)) { - return null; + return nodeRef.toString(); } else { @@ -74,4 +77,21 @@ public class VersionSeriesCheckedOutIdPropertyAccessor extends AbstractNamedProp return CMISScope.DOCUMENT; } + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } + } diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java index 83c9cb1cf4..854f944cab 100644 --- a/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/VersionSeriesIdPropertyAccessor.java @@ -28,7 +28,11 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * @author andyh @@ -42,6 +46,11 @@ public class VersionSeriesIdPropertyAccessor extends AbstractNamedPropertyAccess */ public Serializable getProperty(NodeRef nodeRef) { + if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY)) + { + Serializable seriesId = getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_COPY_REFERENCE); + return (seriesId != null) ? seriesId.toString() : null; + } return nodeRef.toString(); } @@ -56,4 +65,21 @@ public class VersionSeriesIdPropertyAccessor extends AbstractNamedPropertyAccess { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } } diff --git a/source/java/org/alfresco/cmis/property/VersionSeriesIsCheckedOutPropertyAccessor.java b/source/java/org/alfresco/cmis/property/VersionSeriesIsCheckedOutPropertyAccessor.java index 643a1ada5e..29a52ddb66 100644 --- a/source/java/org/alfresco/cmis/property/VersionSeriesIsCheckedOutPropertyAccessor.java +++ b/source/java/org/alfresco/cmis/property/VersionSeriesIsCheckedOutPropertyAccessor.java @@ -29,8 +29,11 @@ import java.io.Serializable; import org.alfresco.cmis.dictionary.CMISMapping; import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.repository.NodeRef; +import org.apache.lucene.search.Query; /** * Get the CMIS version series checked out property @@ -44,7 +47,7 @@ public class VersionSeriesIsCheckedOutPropertyAccessor extends AbstractNamedProp { if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY)) { - return false; + return true; } else { @@ -72,4 +75,22 @@ public class VersionSeriesIsCheckedOutPropertyAccessor extends AbstractNamedProp { return CMISScope.DOCUMENT; } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneEquality(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.io.Serializable) + */ + public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value) throws ParseException + { + return null; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.property.NamedPropertyAccessor#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, java.lang.String, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, String propertyName, Boolean not) throws ParseException + { + return null; + } + + } diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java index dbc5f33356..775ae018e7 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java @@ -147,6 +147,7 @@ public class CMISResultSetRowImpl implements CMISResultSetRow context.setNodeRefs(nodeRefs); context.setNodeService(nodeService); context.setScores(scores); + context.setScore(getScore()); return column.getFunction().getValue(column.getFunctionArguments(), context); } } diff --git a/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java b/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java index fb44f14844..668722c7fd 100644 --- a/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java +++ b/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java @@ -29,10 +29,14 @@ import java.util.Map; import org.alfresco.cmis.dictionary.CMISDictionaryService; import org.alfresco.cmis.property.CMISPropertyService; +import org.alfresco.cmis.property.CMISPropertyServiceImpl; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.QName; +import org.apache.lucene.search.Query; /** * @author andyh @@ -49,44 +53,49 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext private CMISDictionaryService cmisDictionaryService; - - + private Float score; + /** - * @param nodeRefs the nodeRefs to set + * @param nodeRefs + * the nodeRefs to set */ - protected void setNodeRefs(Map nodeRefs) + public void setNodeRefs(Map nodeRefs) { this.nodeRefs = nodeRefs; } /** - * @param scores the scores to set + * @param scores + * the scores to set */ - protected void setScores(Map scores) + public void setScores(Map scores) { this.scores = scores; } /** - * @param nodeService the nodeService to set + * @param nodeService + * the nodeService to set */ - protected void setNodeService(NodeService nodeService) + public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } /** - * @param cmisPropertyService the cmisPropertyService to set + * @param cmisPropertyService + * the cmisPropertyService to set */ - protected void setCmisPropertyService(CMISPropertyService cmisPropertyService) + public void setCmisPropertyService(CMISPropertyService cmisPropertyService) { this.cmisPropertyService = cmisPropertyService; } /** - * @param cmisDictionaryService the cmisDictionaryService to set + * @param cmisDictionaryService + * the cmisDictionaryService to set */ - protected void setCmisDictionaryService(CMISDictionaryService cmisDictionaryService) + public void setCmisDictionaryService(CMISDictionaryService cmisDictionaryService) { this.cmisDictionaryService = cmisDictionaryService; } @@ -133,4 +142,52 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext return scores; } + /** + * @return the score + */ + public Float getScore() + { + return score; + } + + /** + * @param score + * the score to set + */ + public void setScore(Float score) + { + this.score = score; + } + + public Query buildLuceneEquality(LuceneQueryParser lqp, QName propertyQName, Serializable value) throws ParseException + { + if(cmisPropertyService instanceof CMISPropertyServiceImpl) + { + String propertyName = cmisDictionaryService.getCMISMapping().getCmisPropertyName(propertyQName); + CMISPropertyServiceImpl impl = (CMISPropertyServiceImpl)cmisPropertyService; + return impl.buildLuceneEquality(lqp, propertyName, value); + } + else + { + return null; + } + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext#buildLuceneExists(org.alfresco.repo.search.impl.lucene.LuceneQueryParser, org.alfresco.service.namespace.QName, java.lang.Boolean) + */ + public Query buildLuceneExists(LuceneQueryParser lqp, QName propertyQName, Boolean not) throws ParseException + { + if(cmisPropertyService instanceof CMISPropertyServiceImpl) + { + String propertyName = cmisDictionaryService.getCMISMapping().getCmisPropertyName(propertyQName); + CMISPropertyServiceImpl impl = (CMISPropertyServiceImpl)cmisPropertyService; + return impl.buildLuceneExists(lqp, propertyName, not); + } + else + { + return null; + } + } + } diff --git a/source/java/org/alfresco/cmis/search/QueryTest.java b/source/java/org/alfresco/cmis/search/QueryTest.java index 4ab637fac6..c836ad66ab 100644 --- a/source/java/org/alfresco/cmis/search/QueryTest.java +++ b/source/java/org/alfresco/cmis/search/QueryTest.java @@ -24,14 +24,239 @@ */ package org.alfresco.cmis.search; +import java.io.Serializable; + import org.alfresco.cmis.dictionary.BaseCMISTest; import org.alfresco.cmis.dictionary.CMISMapping; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; /** * @author andyh */ public class QueryTest extends BaseCMISTest { + public void testSimpleConjunction() + { + + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME IS NOT NULL AND NAME = 'company'"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME IS NOT NULL AND NAME = 'home'"; + rs = cmisQueryService.query(query); + assertEquals(2, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME IS NOT NULL AND NAME = 'home' AND NAME = 'company'"; + rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + } + + public void testSimpleDisjunction() + { + + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME = 'guest'"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME = 'company'"; + rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME = 'guest' OR NAME = 'company'"; + rs = cmisQueryService.query(query); + assertEquals(2, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + + } + + public void testExists() + { + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME IS NOT NULL"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(33, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME IS NULL"; + rs = cmisQueryService.query(query); + assertEquals(0, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + + query = "SELECT * FROM DOCUMENT_OBJECT_TYPE WHERE URI IS NOT NULL"; + rs = cmisQueryService.query(query); + assertEquals(0, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM DOCUMENT_OBJECT_TYPE WHERE URI IS NULL"; + rs = cmisQueryService.query(query); + assertEquals(45, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + } + + public void testObjectEquals() + { + + } + + public void testDocumentEquals() + { + + } + + public void testFolderEquals() + { + NodeRef rootNode = cmisService.getDefaultRootNodeRef(); + + Serializable ser = cmisPropertyService.getProperty(rootNode, CMISMapping.PROP_NAME); + String name = DefaultTypeConverter.INSTANCE.convert(String.class, ser); + + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME = '" + name + "'"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE NAME = 'company'"; + rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE PARENT = '" + rootNode.toString() + "'"; + rs = cmisQueryService.query(query); + assertEquals(4, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE ALLOWED_CHILD_OBJECT_TYPES = 'meep'"; + rs = cmisQueryService.query(query); + assertEquals(0, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + } + + public void test_IN_TREE() + { + NodeRef rootNode = cmisService.getDefaultRootNodeRef(); + + Serializable ser = cmisPropertyService.getProperty(rootNode, CMISMapping.PROP_OBJECT_ID); + String id = DefaultTypeConverter.INSTANCE.convert(String.class, ser); + + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE IN_TREE('" + id + "')"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(32, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + + } + + public void test_IN_FOLDER() + { + NodeRef rootNode = cmisService.getDefaultRootNodeRef(); + + Serializable ser = cmisPropertyService.getProperty(rootNode, CMISMapping.PROP_OBJECT_ID); + String id = DefaultTypeConverter.INSTANCE.convert(String.class, ser); + + String query = "SELECT * FROM FOLDER_OBJECT_TYPE WHERE IN_FOLDER('" + id + "')"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(4, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + } + + public void testFTS() + { + String query = "SELECT * FROM DOCUMENT_OBJECT_TYPE WHERE CONTAINS('\"Sample demonstrating the listing of AVM folder contents\"')"; + CMISResultSet rs = cmisQueryService.query(query); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("NAME") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + } + public void testBasicSelectAsGuest() { runAs("guest"); @@ -107,13 +332,13 @@ public class QueryTest extends BaseCMISTest { for (String column : md.getColumnNames()) { - System.out.println("Column " +column + " value =" + row.getValue(column)); + System.out.println("Column " + column + " value =" + row.getValue(column)); } System.out.println("\n\n"); } rs.close(); } - + public void testBasicAllFolderColumns() { String query = "SELECT * FROM FOLDER_OBJECT_TYPE AS DOC"; @@ -124,13 +349,13 @@ public class QueryTest extends BaseCMISTest { for (String column : md.getColumnNames()) { - System.out.println("Column " +column + " value =" + row.getValue(column)); + System.out.println("Column " + column + " value =" + row.getValue(column)); } System.out.println("\n\n"); } rs.close(); } - + public void testBasicAll_ST_SITES_Columns() { String query = "SELECT * FROM ST_SITES AS DOC"; @@ -141,17 +366,42 @@ public class QueryTest extends BaseCMISTest { for (String column : md.getColumnNames()) { - System.out.println("Column " +column + " value =" + row.getValue(column)); + System.out.println("Column " + column + " value =" + row.getValue(column)); } System.out.println("\n\n"); System.out.println(row.getValues()); System.out.println("\n\n"); } - + + rs.close(); + } + + public void testFunctionColumns() + { + String query = "SELECT DOC.NAME AS NAME, \nLOWER(\tDOC.NAME \n), LOWER ( DOC.NAME ) AS LNAME, UPPER ( DOC.NAME ) , UPPER(DOC.NAME) AS UNAME, Score(), SCORE(DOC), SCORE() AS SCORED, SCORE(DOC) AS DOCSCORE FROM FOLDER_OBJECT_TYPE AS DOC"; + CMISResultSet rs = cmisQueryService.query(query); + CMISResultSetMetaData md = rs.getMetaData(); + assertNotNull(md.getQueryOptions()); + assertEquals(9, md.getColumnNames().length); + assertNotNull(md.getColumn("NAME")); + assertNotNull(md.getColumn("LOWER(\tDOC.NAME \n)")); + assertNotNull(md.getColumn("LNAME")); + assertNotNull(md.getColumn("UPPER ( DOC.NAME )")); + assertNotNull(md.getColumn("UNAME")); + assertNotNull(md.getColumn("Score()")); + assertNotNull(md.getColumn("SCORE(DOC)")); + assertNotNull(md.getColumn("SCORED")); + assertNotNull(md.getColumn("DOCSCORE")); + assertEquals(1, md.getSelectors().length); + assertNotNull(md.getSelector("DOC")); + for (CMISResultSetRow row : rs) + { + System.out.println("\n\n"); + System.out.println(row.getValues()); + System.out.println("\n\n"); + } rs.close(); } - - public void xtestParse1() { diff --git a/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java b/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java index 52d62f1e4b..6e33c1a01b 100644 --- a/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java +++ b/source/java/org/alfresco/cmis/search/impl/CMISQueryParser.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.StringTokenizer; import org.alfresco.cmis.dictionary.CMISCardinality; import org.alfresco.cmis.dictionary.CMISDictionaryService; @@ -118,7 +119,7 @@ public class CMISQueryParser CommonTree sourceNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.SOURCE); Source source = buildSource(sourceNode, joinSupport, factory); Map selectors = source.getSelectors(); - ArrayList columns = buildColumns(queryNode, factory, selectors); + ArrayList columns = buildColumns(queryNode, factory, selectors, options.getQuery()); HashSet columnNames = new HashSet(); for(Column column : columns) @@ -320,11 +321,11 @@ public class CMISQueryParser function = factory.getFunction(functionName); argNode = (CommonTree) predicateNode.getChild(0); functionArguments = new LinkedHashMap(); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_ANCESTOR), factory, selectors); functionArguments.put(arg.getName(), arg); if (predicateNode.getChildCount() > 1) { - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_SELECTOR), factory, selectors); functionArguments.put(arg.getName(), arg); } return factory.createFunctionalConstraint(function, functionArguments); @@ -335,7 +336,7 @@ public class CMISQueryParser functionArguments = new LinkedHashMap(); arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors); functionArguments.put(arg.getName(), arg); - arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() == 1)); + arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 1)); functionArguments.put(arg.getName(), arg); return factory.createFunctionalConstraint(function, functionArguments); case CMISParser.PRED_FTS: @@ -378,7 +379,7 @@ public class CMISQueryParser FTSParser parser = null; try { - CharStream cs = new ANTLRStringStream(ftsExpression); + CharStream cs = new ANTLRStringStream(ftsExpression.substring(1, ftsExpression.length()-1)); FTSLexer lexer = new FTSLexer(cs); CommonTokenStream tokens = new CommonTokenStream(lexer); parser = new FTSParser(tokens); @@ -656,7 +657,7 @@ public class CMISQueryParser } @SuppressWarnings("unchecked") - private ArrayList buildColumns(CommonTree queryNode, QueryModelFactory factory, Map selectors) + private ArrayList buildColumns(CommonTree queryNode, QueryModelFactory factory, Map selectors, String query) { ArrayList columns = new ArrayList(); CommonTree starNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ALL_COLUMNS); @@ -802,10 +803,10 @@ public class CMISQueryParser Collection definitions = function.getArgumentDefinitions().values(); Map functionArguments = new LinkedHashMap(); - int childIndex = 1; + int childIndex = 2; for (ArgumentDefinition definition : definitions) { - if (functionNode.getChildCount() > childIndex) + if (functionNode.getChildCount() > childIndex+1) { CommonTree argNode = (CommonTree) functionNode.getChild(childIndex++); Argument arg = getFunctionArgument(argNode, definition, factory, selectors); @@ -827,7 +828,13 @@ public class CMISQueryParser } } - String alias = function.getName(); + + CommonTree rparenNode = (CommonTree)functionNode.getChild(functionNode.getChildCount()-1); + + int start = getStringPosition(query, functionNode.getLine(), functionNode.getCharPositionInLine()); + int end = getStringPosition(query, rparenNode.getLine(), rparenNode.getCharPositionInLine()); + + String alias = query.substring(start, end+1); if (columnNode.getChildCount() > 1) { alias = columnNode.getChild(1).getText(); @@ -842,6 +849,33 @@ public class CMISQueryParser return columns; } + + + + /** + * @param query + * @param line + * @param charPositionInLine + * @return + */ + private int getStringPosition(String query, int line, int charPositionInLine) + { + StringTokenizer tokenizer = new StringTokenizer(query, "\n\r\f"); + String[] lines = new String[tokenizer.countTokens()]; + int i = 0; + while(tokenizer.hasMoreElements()) + { + lines[i++] = tokenizer.nextToken(); + } + + int position = 0; + for(i = 0; i < line-1; i++) + { + position += lines[i].length(); + position++; + } + return position + charPositionInLine; + } private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors) { @@ -904,7 +938,9 @@ public class CMISQueryParser } else if (argNode.getType() == CMISParser.STRING_LITERAL) { - Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getChild(0).getText()); + String text = argNode.getChild(0).getText(); + text = text.substring(1, text.length()-1); + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, text); return arg; } else if (argNode.getType() == CMISParser.LIST) @@ -935,10 +971,10 @@ public class CMISQueryParser Collection definitions = function.getArgumentDefinitions().values(); Map functionArguments = new LinkedHashMap(); - int childIndex = 1; + int childIndex = 2; for (ArgumentDefinition currentDefinition : definitions) { - if (argNode.getChildCount() > childIndex) + if (argNode.getChildCount() > childIndex+1) { CommonTree currentArgNode = (CommonTree) argNode.getChild(childIndex++); Argument arg = getFunctionArgument(currentArgNode, currentDefinition, factory, selectors); diff --git a/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java b/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java index d1e8ebcf71..cca0d4aab2 100644 --- a/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java +++ b/source/java/org/alfresco/cmis/search/impl/CMISQueryServiceImpl.java @@ -24,7 +24,6 @@ */ package org.alfresco.cmis.search.impl; -import java.io.IOException; import java.util.HashMap; import java.util.Map; @@ -36,6 +35,7 @@ import org.alfresco.cmis.search.CMISQueryOptions; import org.alfresco.cmis.search.CMISQueryService; import org.alfresco.cmis.search.CMISResultSet; import org.alfresco.cmis.search.CMISResultSetImpl; +import org.alfresco.cmis.search.CmisFunctionEvaluationContext; import org.alfresco.cmis.search.FullTextSearchSupport; import org.alfresco.cmis.search.JoinSupport; import org.alfresco.repo.search.impl.querymodel.Query; @@ -51,7 +51,7 @@ public class CMISQueryServiceImpl implements CMISQueryService private CMISService cmisService; private CMISDictionaryService cmisDictionaryService; - + private CMISPropertyService cmisPropertyService; private CMISMapping cmisMapping; @@ -105,10 +105,9 @@ public class CMISQueryServiceImpl implements CMISQueryService this.nodeService = nodeService; } - - /** - * @param cmisPropertyService the cmisPropertyService to set + * @param cmisPropertyService + * the cmisPropertyService to set */ public void setCmisPropertyService(CMISPropertyService cmisPropertyService) { @@ -125,20 +124,17 @@ public class CMISQueryServiceImpl implements CMISQueryService CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, cmisMapping, getJoinSupport()); Query query = parser.parse(queryEngine.getQueryModelFactory()); System.out.println(query); - try - { - ResultSet lucene = queryEngine.executeQuery(query, query.getSource().getSelector(), options); - Map wrapped = new HashMap(); - wrapped.put(query.getSource().getSelector(), lucene); - CMISResultSet cmis = new CMISResultSetImpl(wrapped, options, nodeService, query, cmisDictionaryService, cmisPropertyService); - return cmis; - } - catch (IOException e) - { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; + + CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext(); + functionContext.setCmisDictionaryService(cmisDictionaryService); + functionContext.setCmisPropertyService(cmisPropertyService); + functionContext.setNodeService(nodeService); + + ResultSet lucene = queryEngine.executeQuery(query, query.getSource().getSelector(), options, functionContext); + Map wrapped = new HashMap(); + wrapped.put(query.getSource().getSelector(), lucene); + CMISResultSet cmis = new CMISResultSetImpl(wrapped, options, nodeService, query, cmisDictionaryService, cmisPropertyService); + return cmis; } /* @@ -169,7 +165,7 @@ public class CMISQueryServiceImpl implements CMISQueryService */ public FullTextSearchSupport getFullTextSearchSupport() { - return FullTextSearchSupport.FULL_TEXT_AND_STRUCTURED; + return FullTextSearchSupport.FULL_TEXT_ONLY; } /* diff --git a/source/java/org/alfresco/repo/jscript/ScriptNode.java b/source/java/org/alfresco/repo/jscript/ScriptNode.java index f1fa468e8b..e2a137b6d9 100644 --- a/source/java/org/alfresco/repo/jscript/ScriptNode.java +++ b/source/java/org/alfresco/repo/jscript/ScriptNode.java @@ -2694,6 +2694,21 @@ public class ScriptNode implements Serializable, Scopeable this.contentData = (ContentData) services.getNodeService().getProperty(nodeRef, this.property); } + /** + * Set the content stream from another input stream + * + * @param inputStream + */ + public void write(InputStream inputStream) + { + ContentService contentService = services.getContentService(); + ContentWriter writer = contentService.getWriter(nodeRef, this.property, true); + writer.putContent(inputStream); + + // update cached variables after putContent() + this.contentData = (ContentData) services.getNodeService().getProperty(nodeRef, this.property); + } + /** * @return download URL to the content */ diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java index f28e352bbb..3c6ba0c1c5 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java @@ -108,9 +108,8 @@ public class LuceneQueryParser extends QueryParser * @throws ParseException * if the parsing fails */ - static public Query parse(String query, String field, Analyzer analyzer, - NamespacePrefixResolver namespacePrefixResolver, DictionaryService dictionaryService, TenantService tenantService, - Operator defaultOperator, SearchParameters searchParameters, LuceneConfig config, IndexReader indexReader) throws ParseException + static public Query parse(String query, String field, Analyzer analyzer, NamespacePrefixResolver namespacePrefixResolver, DictionaryService dictionaryService, + TenantService tenantService, Operator defaultOperator, SearchParameters searchParameters, LuceneConfig config, IndexReader indexReader) throws ParseException { if (s_logger.isDebugEnabled()) { @@ -133,7 +132,7 @@ public class LuceneQueryParser extends QueryParser return result; } - private void setLuceneConfig(LuceneConfig config) + public void setLuceneConfig(LuceneConfig config) { this.config = config; } @@ -143,7 +142,7 @@ public class LuceneQueryParser extends QueryParser this.indexReader = indexReader; } - private void setSearchParameters(SearchParameters searchParameters) + public void setSearchParameters(SearchParameters searchParameters) { this.searchParameters = searchParameters; } @@ -152,7 +151,7 @@ public class LuceneQueryParser extends QueryParser { this.namespacePrefixResolver = namespacePrefixResolver; } - + public void setTenantService(TenantService tenantService) { this.tenantService = tenantService; @@ -188,7 +187,7 @@ public class LuceneQueryParser extends QueryParser } - protected Query getFieldQuery(String field, String queryText) throws ParseException + public Query getFieldQuery(String field, String queryText) throws ParseException { try { @@ -409,9 +408,8 @@ public class LuceneQueryParser extends QueryParser } } + Collection subclasses = dictionaryService.getSubAspects(target.getName(), true); - Collection subclasses = dictionaryService.getSubAspects(target.getName(), true); - BooleanQuery booleanQuery = new BooleanQuery(); for (QName qname : subclasses) { @@ -538,7 +536,7 @@ public class LuceneQueryParser extends QueryParser Query presenceQuery = getWildcardQuery("@" + qname.toString(), "*"); if ((typeQuery != null) && (presenceQuery != null)) { - query.add(typeQuery, Occur.MUST); + //query.add(typeQuery, Occur.MUST); query.add(presenceQuery, Occur.MUST); } return query; @@ -888,6 +886,7 @@ public class LuceneQueryParser extends QueryParser if (isMlText) { int position = c.termText().indexOf("}"); + @SuppressWarnings("unused") String language = c.termText().substring(0, position + 1); String token = c.termText().substring(position + 1); int oldPositionIncrement = replace.getPositionIncrement(); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/query/PathQuery.java b/source/java/org/alfresco/repo/search/impl/lucene/query/PathQuery.java index d5dd0c961c..ea78cfd9b2 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/query/PathQuery.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/query/PathQuery.java @@ -174,7 +174,50 @@ public class PathQuery extends Query */ public String toString() { - return ""; + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("PATH:"); + int i = 0; + for(StructuredFieldPosition sfp : pathStructuredFieldPositions) + { + if(i % 2 == 0) + { + stringBuilder.append('/'); + } + else + { + stringBuilder.append(':'); + } + if(sfp.matchesAll()) + { + stringBuilder.append("*"); + } + else + { + stringBuilder.append(sfp.getTermText()); + } + i++; + } + for(StructuredFieldPosition sfp : qNameStructuredFieldPositions) + { + if(i % 2 == 0) + { + stringBuilder.append('/'); + } + else + { + stringBuilder.append(':'); + } + if(sfp.matchesAll()) + { + stringBuilder.append("*"); + } + else + { + stringBuilder.append(sfp.getTermText()); + } + i++; + } + return stringBuilder.toString(); } /* @@ -182,7 +225,7 @@ public class PathQuery extends Query */ public String toString(String field) { - return ""; + return toString(); } private class StructuredFieldWeight implements Weight 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 f4a563b081..c7dfcfde2d 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g @@ -193,7 +193,7 @@ multiValuedColumnReference valueFunction : functionName=keyWordOrId LPAREN functionArgument* RPAREN - -> ^(FUNCTION $functionName functionArgument*) + -> ^(FUNCTION $functionName LPAREN functionArgument* RPAREN) ; functionArgument @@ -348,8 +348,10 @@ likePredicate ; nullPredicate - : ( (columnReference)=> columnReference | multiValuedColumnReference) IS NOT? NULL - -> ^(PRED_EXISTS columnReference NOT?) + : ( (columnReference)=> columnReference | multiValuedColumnReference) IS NULL + -> ^(PRED_EXISTS columnReference NOT) + | ( (columnReference)=> columnReference | multiValuedColumnReference) IS NOT NULL + -> ^(PRED_EXISTS columnReference) ; quantifiedComparisonPredicate 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 fc94878287..1bb5c30540 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-cmis2\\ANTLR\\CMIS.g 2008-07-21 10:14:45 +// $ANTLR 3.1b1 W:\\workspace-cmis2\\ANTLR\\CMIS.g 2008-07-29 14:25:59 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -111,8 +111,8 @@ public class CMISLexer extends Lexer { 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: '\\'' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:506:9: ( '\\'' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:506:17: '\\'' { match('\''); @@ -129,8 +129,8 @@ public class CMISLexer extends Lexer { // $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: '\\'\\'' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:514:9: ( '\\'\\'' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:514:17: '\\'\\'' { match("\'\'"); @@ -148,11 +148,11 @@ public class CMISLexer extends Lexer { 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:517:5: ( SINGLE_QUOTE (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* SINGLE_QUOTE ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:517: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 )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:517:22: (~ SINGLE_QUOTE | ESCAPED_SINGLE_QUOTE )* loop1: do { int alt1=3; @@ -174,7 +174,7 @@ public class CMISLexer extends Lexer { switch (alt1) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:24: ~ SINGLE_QUOTE + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:517:24: ~ SINGLE_QUOTE { if ( (input.LA(1)>='\u0000' && input.LA(1)<='I')||(input.LA(1)>='K' && input.LA(1)<='\uFFFE') ) { input.consume(); @@ -189,7 +189,7 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:515:40: ESCAPED_SINGLE_QUOTE + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:517:40: ESCAPED_SINGLE_QUOTE { mESCAPED_SINGLE_QUOTE(); @@ -218,8 +218,8 @@ public class CMISLexer extends Lexer { try { int _type = SELECT; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:522:8: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:522:10: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -291,8 +291,8 @@ public class CMISLexer extends Lexer { try { int _type = AS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:521:4: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:521:6: ( 'A' | 'a' ) ( 'S' | 's' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:523:4: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:523:6: ( 'A' | 'a' ) ( 'S' | 's' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -328,8 +328,8 @@ public class CMISLexer extends Lexer { try { int _type = UPPER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:524:7: ( ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:524:9: ( 'U' | 'u' ) ( 'P' | 'p' ) ( 'P' | 'p' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='U'||input.LA(1)=='u' ) { input.consume(); @@ -392,8 +392,8 @@ public class CMISLexer extends Lexer { try { int _type = LOWER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:525:7: ( ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:525:9: ( 'L' | 'l' ) ( 'O' | 'o' ) ( 'W' | 'w' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -456,8 +456,8 @@ public class CMISLexer extends Lexer { try { int _type = FROM; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:526:6: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:526:8: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -511,8 +511,8 @@ public class CMISLexer extends Lexer { try { int _type = JOIN; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:527:6: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:527:8: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='J'||input.LA(1)=='j' ) { input.consume(); @@ -566,8 +566,8 @@ public class CMISLexer extends Lexer { try { int _type = INNER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:528:7: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:528:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -630,8 +630,8 @@ public class CMISLexer extends Lexer { try { int _type = LEFT; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:6: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:8: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -685,8 +685,8 @@ public class CMISLexer extends Lexer { try { int _type = OUTER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:530:7: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:530:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -749,8 +749,8 @@ public class CMISLexer extends Lexer { try { int _type = ON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:4: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:529:6: ( 'O' | 'o' ) ( 'N' | 'n' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:4: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:6: ( 'O' | 'o' ) ( 'N' | 'n' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -786,8 +786,8 @@ public class CMISLexer extends Lexer { try { int _type = WHERE; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:532:7: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:532:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='W'||input.LA(1)=='w' ) { input.consume(); @@ -850,8 +850,8 @@ public class CMISLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:531:6: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:533:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:533:6: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -887,8 +887,8 @@ public class CMISLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -933,8 +933,8 @@ public class CMISLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:535:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:535:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -979,8 +979,8 @@ public class CMISLexer extends Lexer { try { int _type = IN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:4: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:534:6: ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:4: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:6: ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1016,8 +1016,8 @@ public class CMISLexer extends Lexer { try { int _type = LIKE; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:537:6: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:537:8: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -1071,8 +1071,8 @@ public class CMISLexer extends Lexer { try { int _type = IS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:4: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:536:6: ( 'I' | 'i' ) ( 'S' | 's' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:538:4: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:538:6: ( 'I' | 'i' ) ( 'S' | 's' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1108,8 +1108,8 @@ public class CMISLexer extends Lexer { try { int _type = NULL; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:539:6: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:539:8: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -1163,8 +1163,8 @@ public class CMISLexer extends Lexer { try { int _type = ANY; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:540:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:540:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1209,8 +1209,8 @@ public class CMISLexer extends Lexer { try { int _type = CONTAINS; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:541:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:541: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(); @@ -1300,8 +1300,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_FOLDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:543:2: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:543: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(); @@ -1392,8 +1392,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_TREE; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:11: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1466,8 +1466,8 @@ public class CMISLexer extends Lexer { try { int _type = ORDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:545:7: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:545:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -1530,8 +1530,8 @@ public class CMISLexer extends Lexer { try { int _type = BY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:4: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:544:6: ( 'B' | 'b' ) ( 'Y' | 'y' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:546:4: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:546:6: ( 'B' | 'b' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='B'||input.LA(1)=='b' ) { input.consume(); @@ -1567,8 +1567,8 @@ public class CMISLexer extends Lexer { try { int _type = ASC; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:547:5: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:547:7: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1613,8 +1613,8 @@ public class CMISLexer extends Lexer { try { int _type = DESC; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:6: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:8: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='D'||input.LA(1)=='d' ) { input.consume(); @@ -1668,8 +1668,8 @@ public class CMISLexer extends Lexer { try { int _type = SCORE; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:7: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -1732,8 +1732,8 @@ public class CMISLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:8: ( '(' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:548:10: '(' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:8: ( '(' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:10: '(' { match('('); @@ -1752,8 +1752,8 @@ public class CMISLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:8: ( ')' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:549:10: ')' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:8: ( ')' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:10: ')' { match(')'); @@ -1772,8 +1772,8 @@ public class CMISLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:6: ( '*' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:550:8: '*' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:6: ( '*' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:8: '*' { match('*'); @@ -1792,8 +1792,8 @@ public class CMISLexer extends Lexer { try { int _type = COMMA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:7: ( ',' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:551:9: ',' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:7: ( ',' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:9: ',' { match(','); @@ -1812,8 +1812,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTSTAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:9: ( '.*' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:552:11: '.*' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:9: ( '.*' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:11: '.*' { match(".*"); @@ -1833,8 +1833,8 @@ public class CMISLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:5: ( '.' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:553:7: '.' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:5: ( '.' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:7: '.' { match('.'); @@ -1853,8 +1853,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:8: ( '..' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:554:10: '..' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:8: ( '..' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:10: '..' { match(".."); @@ -1874,8 +1874,8 @@ public class CMISLexer extends Lexer { try { int _type = EQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:9: ( '=' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:555:11: '=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:557:9: ( '=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:557:11: '=' { match('='); @@ -1894,8 +1894,8 @@ public class CMISLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:7: ( '~' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:556:9: '~' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:7: ( '~' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:9: '~' { match('~'); @@ -1914,8 +1914,8 @@ public class CMISLexer extends Lexer { try { int _type = NOTEQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:2: ( '<>' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:558:4: '<>' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:2: ( '<>' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:4: '<>' { match("<>"); @@ -1935,8 +1935,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:2: ( '>' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:560:4: '>' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:2: ( '>' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:4: '>' { match('>'); @@ -1955,8 +1955,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:2: ( '<' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:562:4: '<' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:2: ( '<' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:4: '<' { match('<'); @@ -1975,8 +1975,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:2: ( '>=' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:564:4: '>=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:2: ( '>=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:4: '>=' { match(">="); @@ -1996,8 +1996,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:2: ( '<=' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:566:4: '<=' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:568:2: ( '<=' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:568:4: '<=' { match("<="); @@ -2017,8 +2017,8 @@ public class CMISLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:567:7: ( ':' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:567:9: ':' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:569:7: ( ':' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:569:9: ':' { match(':'); @@ -2037,8 +2037,8 @@ public class CMISLexer extends Lexer { try { int _type = DOUBLE_QUOTE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:570:2: ( '\"' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:570:4: '\"' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:572:2: ( '\"' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:572:4: '\"' { match('\"'); @@ -2057,10 +2057,10 @@ public class CMISLexer extends Lexer { try { int _type = DECIMAL_INTEGER_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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-cmis2\\ANTLR\\CMIS.g:580:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:580:11: ( PLUS | MINUS )? DECIMAL_NUMERAL { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:578:11: ( PLUS | MINUS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:580:11: ( PLUS | MINUS )? int alt2=2; int LA2_0 = input.LA(1); @@ -2103,14 +2103,14 @@ public class CMISLexer extends Lexer { try { int _type = FLOATING_POINT_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:2: ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:2: ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT ) int alt9=3; alt9 = dfa9.predict(input); switch (alt9) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ int cnt3=0; loop3: do { @@ -2124,7 +2124,7 @@ public class CMISLexer extends Lexer { switch (alt3) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:4: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: DIGIT { mDIGIT(); @@ -2141,7 +2141,7 @@ public class CMISLexer extends Lexer { } while (true); mDOT(); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:15: ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:15: ( DIGIT )* loop4: do { int alt4=2; @@ -2154,7 +2154,7 @@ public class CMISLexer extends Lexer { switch (alt4) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:15: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:15: DIGIT { mDIGIT(); @@ -2166,7 +2166,7 @@ public class CMISLexer extends Lexer { } } while (true); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:22: ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:22: ( EXPONENT )? int alt5=2; int LA5_0 = input.LA(1); @@ -2175,7 +2175,7 @@ public class CMISLexer extends Lexer { } switch (alt5) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:585:22: EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:22: EXPONENT { mEXPONENT(); @@ -2188,10 +2188,10 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:4: DOT ( DIGIT )+ ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:588:4: DOT ( DIGIT )+ ( EXPONENT )? { mDOT(); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:8: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:588:8: ( DIGIT )+ int cnt6=0; loop6: do { @@ -2205,7 +2205,7 @@ public class CMISLexer extends Lexer { switch (alt6) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:8: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:588:8: DIGIT { mDIGIT(); @@ -2221,7 +2221,7 @@ public class CMISLexer extends Lexer { cnt6++; } while (true); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:15: ( EXPONENT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:588:15: ( EXPONENT )? int alt7=2; int LA7_0 = input.LA(1); @@ -2230,7 +2230,7 @@ public class CMISLexer extends Lexer { } switch (alt7) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:586:15: EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:588:15: EXPONENT { mEXPONENT(); @@ -2243,9 +2243,9 @@ public class CMISLexer extends Lexer { } break; case 3 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ EXPONENT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:589:4: ( DIGIT )+ EXPONENT { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:589:4: ( DIGIT )+ int cnt8=0; loop8: do { @@ -2259,7 +2259,7 @@ public class CMISLexer extends Lexer { switch (alt8) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:587:4: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:589:4: DIGIT { mDIGIT(); @@ -2294,8 +2294,8 @@ public class CMISLexer extends Lexer { try { int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // 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' | '_' | '$' | '#' )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:593:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:593: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(); @@ -2306,7 +2306,7 @@ public class CMISLexer extends Lexer { recover(mse); throw mse;} - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:591:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:593:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* loop10: do { int alt10=2; @@ -2355,10 +2355,10 @@ public class CMISLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:594:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:594:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:592:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:594:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt11=0; loop11: do { @@ -2411,7 +2411,7 @@ public class CMISLexer extends Lexer { // $ANTLR start DECIMAL_NUMERAL public final void mDECIMAL_NUMERAL() throws RecognitionException { try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:601:2: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:603: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-cmis2\\ANTLR\\CMIS.g:601:4: ZERO_DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:603:4: ZERO_DIGIT { mZERO_DIGIT(); } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:4: NON_ZERO_DIGIT ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:604:4: NON_ZERO_DIGIT ( DIGIT )* { mNON_ZERO_DIGIT(); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:19: ( DIGIT )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:604:19: ( DIGIT )* loop12: do { int alt12=2; @@ -2452,7 +2452,7 @@ public class CMISLexer extends Lexer { switch (alt12) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:602:19: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:604:19: DIGIT { mDIGIT(); @@ -2478,7 +2478,7 @@ public class CMISLexer extends Lexer { // $ANTLR start DIGIT public final void mDIGIT() throws RecognitionException { try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:605:7: ( ZERO_DIGIT | NON_ZERO_DIGIT ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:607:7: ( ZERO_DIGIT | NON_ZERO_DIGIT ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9') ) { @@ -2502,8 +2502,8 @@ public class CMISLexer extends Lexer { // $ANTLR start ZERO_DIGIT public final void mZERO_DIGIT() throws RecognitionException { try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:608:2: ( '0' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:608:4: '0' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:610:2: ( '0' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:610: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-cmis2\\ANTLR\\CMIS.g:611:2: ( '1' .. '9' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:611:4: '1' .. '9' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:613:2: ( '1' .. '9' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:613: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-cmis2\\ANTLR\\CMIS.g:613:6: ( '+' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:613:8: '+' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:6: ( '+' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:8: '+' { match('+'); @@ -2550,8 +2550,8 @@ public class CMISLexer extends Lexer { // $ANTLR start MINUS public final void mMINUS() throws RecognitionException { try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:7: ( '-' ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:615:9: '-' + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:617:7: ( '-' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:617:9: '-' { match('-'); @@ -2566,8 +2566,8 @@ public class CMISLexer extends Lexer { // $ANTLR start E public final void mE() throws RecognitionException { try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:618:3: ( ( 'e' | 'E' ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:618:5: ( 'e' | 'E' ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:620:3: ( ( 'e' | 'E' ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:620: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-cmis2\\ANTLR\\CMIS.g:629:2: ( E SIGNED_INTEGER ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:629:4: E SIGNED_INTEGER + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:631:2: ( E SIGNED_INTEGER ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:631: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-cmis2\\ANTLR\\CMIS.g:633:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:4: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:635:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:635:4: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:4: ( PLUS | MINUS )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:635:4: ( PLUS | MINUS )? int alt14=2; int LA14_0 = input.LA(1); @@ -2636,7 +2636,7 @@ public class CMISLexer extends Lexer { } - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:20: ( DIGIT )+ + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:635:20: ( DIGIT )+ int cnt15=0; loop15: do { @@ -2650,7 +2650,7 @@ public class CMISLexer extends Lexer { switch (alt15) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:633:20: DIGIT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:635:20: DIGIT { mDIGIT(); @@ -3081,7 +3081,7 @@ public class CMISLexer extends Lexer { this.transition = DFA9_transition; } public String getDescription() { - return "584:1: FLOATING_POINT_LITERAL : ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT );"; + return "586:1: FLOATING_POINT_LITERAL : ( ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | DOT ( DIGIT )+ ( EXPONENT )? | ( DIGIT )+ EXPONENT );"; } } static final String DFA16_eotS = 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 ed45808479..1996216852 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-cmis2\\ANTLR\\CMIS.g 2008-07-21 10:14:45 +// $ANTLR 3.1b1 W:\\workspace-cmis2\\ANTLR\\CMIS.g 2008-07-29 14:25:59 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -278,7 +278,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: fromClause, selectList, whereClause, orderByClause + // elements: whereClause, selectList, fromClause, orderByClause // token labels: // rule labels: retval // token list labels: @@ -715,7 +715,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: valueExpression, columnName + // elements: columnName, valueExpression // token labels: // rule labels: retval // token list labels: @@ -869,12 +869,12 @@ public class CMISParser extends Parser { { int LA8_1 = input.LA(2); - if ( (LA8_1==EOF||(LA8_1>=COMMA && LA8_1<=AS)||LA8_1==DOT||LA8_1==FROM||LA8_1==EQUALS||(LA8_1>=NOTEQUALS && LA8_1<=GREATERTHANOREQUALS)||(LA8_1>=ID && LA8_1<=DOUBLE_QUOTE)) ) { - alt8=1; - } - else if ( (LA8_1==LPAREN) ) { + if ( (LA8_1==LPAREN) ) { alt8=2; } + else if ( (LA8_1==EOF||(LA8_1>=COMMA && LA8_1<=AS)||LA8_1==DOT||LA8_1==FROM||LA8_1==EQUALS||(LA8_1>=NOTEQUALS && LA8_1<=GREATERTHANOREQUALS)||(LA8_1>=ID && LA8_1<=DOUBLE_QUOTE)) ) { + alt8=1; + } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = @@ -1104,7 +1104,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: qualifier, columnName + // elements: columnName, qualifier // token labels: // rule labels: retval // token list labels: @@ -1306,7 +1306,7 @@ public class CMISParser extends Parser { }; // $ANTLR start valueFunction - // W:\\workspace-cmis2\\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 LPAREN ( functionArgument )* RPAREN ) ; public final CMISParser.valueFunction_return valueFunction() throws RecognitionException { CMISParser.valueFunction_return retval = new CMISParser.valueFunction_return(); retval.start = input.LT(1); @@ -1327,7 +1327,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); RewriteRuleSubtreeStream stream_functionArgument=new RewriteRuleSubtreeStream(adaptor,"rule functionArgument"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:2: (functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName ( functionArgument )* ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:2: (functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g:195:4: functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN { pushFollow(FOLLOW_keyWordOrId_in_valueFunction470); @@ -1375,7 +1375,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: functionName, functionArgument + // elements: LPAREN, RPAREN, functionName, functionArgument // token labels: // rule labels: retval, functionName // token list labels: @@ -1386,20 +1386,22 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_functionName=new RewriteRuleSubtreeStream(adaptor,"token functionName",functionName!=null?functionName.tree:null); root_0 = (Object)adaptor.nil(); - // 196:3: -> ^( FUNCTION $functionName ( functionArgument )* ) + // 196:3: -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:196:6: ^( FUNCTION $functionName ( functionArgument )* ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:196:6: ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { 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-cmis2\\ANTLR\\CMIS.g:196:31: ( functionArgument )* + adaptor.addChild(root_1, stream_LPAREN.nextNode()); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:196:38: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); } stream_functionArgument.reset(); + adaptor.addChild(root_1, stream_RPAREN.nextNode()); adaptor.addChild(root_0, root_1); } @@ -1567,16 +1569,16 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:200:9: qualifier DOT columnName { - pushFollow(FOLLOW_qualifier_in_functionArgument508); + pushFollow(FOLLOW_qualifier_in_functionArgument512); qualifier28=qualifier(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_qualifier.add(qualifier28.getTree()); - DOT29=(Token)match(input,DOT,FOLLOW_DOT_in_functionArgument510); if (state.failed) return retval; + DOT29=(Token)match(input,DOT,FOLLOW_DOT_in_functionArgument514); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOT.add(DOT29); - pushFollow(FOLLOW_columnName_in_functionArgument512); + pushFollow(FOLLOW_columnName_in_functionArgument516); columnName30=columnName(); state._fsp--; @@ -1585,7 +1587,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: qualifier, columnName + // elements: columnName, qualifier // token labels: // rule labels: retval // token list labels: @@ -1618,7 +1620,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_identifier_in_functionArgument536); + pushFollow(FOLLOW_identifier_in_functionArgument540); identifier31=identifier(); state._fsp--; @@ -1632,7 +1634,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_literalOrParameterName_in_functionArgument546); + pushFollow(FOLLOW_literalOrParameterName_in_functionArgument550); literalOrParameterName32=literalOrParameterName(); state._fsp--; @@ -1782,7 +1784,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:4: ( tableName )=> tableName { - pushFollow(FOLLOW_tableName_in_qualifier567); + pushFollow(FOLLOW_tableName_in_qualifier571); tableName33=tableName(); state._fsp--; @@ -1813,7 +1815,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:209:5: correlationName { - pushFollow(FOLLOW_correlationName_in_qualifier579); + pushFollow(FOLLOW_correlationName_in_qualifier583); correlationName34=correlationName(); state._fsp--; @@ -1887,10 +1889,10 @@ public class CMISParser extends Parser { // 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; + FROM35=(Token)match(input,FROM,FOLLOW_FROM_in_fromClause620); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FROM.add(FROM35); - pushFollow(FOLLOW_tableReference_in_fromClause618); + pushFollow(FOLLOW_tableReference_in_fromClause622); tableReference36=tableReference(); state._fsp--; @@ -1964,7 +1966,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_singleTable_in_tableReference640); singleTable37=singleTable(); state._fsp--; @@ -2015,7 +2017,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:17: ( joinedTable )=> joinedTable { - pushFollow(FOLLOW_joinedTable_in_tableReference645); + pushFollow(FOLLOW_joinedTable_in_tableReference649); joinedTable38=joinedTable(); state._fsp--; @@ -2139,7 +2141,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:4: tableName ( ( AS )? correlationName )? { - pushFollow(FOLLOW_tableName_in_singleTable674); + pushFollow(FOLLOW_tableName_in_singleTable678); tableName39=tableName(); state._fsp--; @@ -2167,7 +2169,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:229:16: AS { - AS40=(Token)match(input,AS,FOLLOW_AS_in_singleTable678); if (state.failed) return retval; + AS40=(Token)match(input,AS,FOLLOW_AS_in_singleTable682); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS40); @@ -2176,7 +2178,7 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_correlationName_in_singleTable681); + pushFollow(FOLLOW_correlationName_in_singleTable685); correlationName41=correlationName(); state._fsp--; @@ -2227,16 +2229,16 @@ public class CMISParser extends Parser { case 2 : // 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; + LPAREN42=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_singleTable706); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN42); - pushFollow(FOLLOW_joinedTables_in_singleTable704); + pushFollow(FOLLOW_joinedTables_in_singleTable708); joinedTables43=joinedTables(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_joinedTables.add(joinedTables43.getTree()); - RPAREN44=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_singleTable706); if (state.failed) return retval; + RPAREN44=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_singleTable710); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN44); @@ -2331,7 +2333,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:4: joinType { - pushFollow(FOLLOW_joinType_in_joinedTable728); + pushFollow(FOLLOW_joinType_in_joinedTable732); joinType45=joinType(); state._fsp--; @@ -2343,10 +2345,10 @@ public class CMISParser extends Parser { } - JOIN46=(Token)match(input,JOIN,FOLLOW_JOIN_in_joinedTable731); if (state.failed) return retval; + JOIN46=(Token)match(input,JOIN,FOLLOW_JOIN_in_joinedTable735); if (state.failed) return retval; if ( state.backtracking==0 ) stream_JOIN.add(JOIN46); - pushFollow(FOLLOW_tableReference_in_joinedTable733); + pushFollow(FOLLOW_tableReference_in_joinedTable737); tableReference47=tableReference(); state._fsp--; @@ -2367,7 +2369,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:35: ( joinSpecification )=> joinSpecification { - pushFollow(FOLLOW_joinSpecification_in_joinedTable742); + pushFollow(FOLLOW_joinSpecification_in_joinedTable746); joinSpecification48=joinSpecification(); state._fsp--; @@ -2382,7 +2384,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: JOIN, joinSpecification, tableReference, joinType + // elements: tableReference, joinSpecification, JOIN, joinType // token labels: // rule labels: retval // token list labels: @@ -2464,7 +2466,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_singleTable_in_joinedTables777); singleTable49=singleTable(); state._fsp--; @@ -2486,7 +2488,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:242:16: joinedTable { - pushFollow(FOLLOW_joinedTable_in_joinedTables775); + pushFollow(FOLLOW_joinedTable_in_joinedTables779); joinedTable50=joinedTable(); state._fsp--; @@ -2509,7 +2511,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: singleTable, joinedTable + // elements: joinedTable, singleTable // token labels: // rule labels: retval // token list labels: @@ -2609,7 +2611,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:247:4: INNER { - INNER51=(Token)match(input,INNER,FOLLOW_INNER_in_joinType802); if (state.failed) return retval; + INNER51=(Token)match(input,INNER,FOLLOW_INNER_in_joinType806); if (state.failed) return retval; if ( state.backtracking==0 ) stream_INNER.add(INNER51); @@ -2637,7 +2639,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:5: LEFT ( OUTER )? { - LEFT52=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType814); if (state.failed) return retval; + LEFT52=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType818); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LEFT.add(LEFT52); // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:10: ( OUTER )? @@ -2651,7 +2653,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:249:10: OUTER { - OUTER53=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType816); if (state.failed) return retval; + OUTER53=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType820); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OUTER.add(OUTER53); @@ -2738,34 +2740,34 @@ public class CMISParser extends Parser { // 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; + ON54=(Token)match(input,ON,FOLLOW_ON_in_joinSpecification840); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ON.add(ON54); - LPAREN55=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_joinSpecification838); if (state.failed) return retval; + LPAREN55=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_joinSpecification842); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN55); - pushFollow(FOLLOW_columnReference_in_joinSpecification842); + pushFollow(FOLLOW_columnReference_in_joinSpecification846); lhs=columnReference(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(lhs.getTree()); - EQUALS56=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_joinSpecification844); if (state.failed) return retval; + EQUALS56=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_joinSpecification848); if (state.failed) return retval; if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS56); - pushFollow(FOLLOW_columnReference_in_joinSpecification848); + pushFollow(FOLLOW_columnReference_in_joinSpecification852); rhs=columnReference(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(rhs.getTree()); - RPAREN57=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_joinSpecification850); if (state.failed) return retval; + RPAREN57=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_joinSpecification854); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN57); // AST REWRITE - // elements: ON, EQUALS, rhs, lhs + // elements: rhs, ON, lhs, EQUALS // token labels: // rule labels: retval, rhs, lhs // token list labels: @@ -2840,10 +2842,10 @@ public class CMISParser extends Parser { // 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; + WHERE58=(Token)match(input,WHERE,FOLLOW_WHERE_in_whereClause904); if (state.failed) return retval; if ( state.backtracking==0 ) stream_WHERE.add(WHERE58); - pushFollow(FOLLOW_searchOrCondition_in_whereClause902); + pushFollow(FOLLOW_searchOrCondition_in_whereClause906); searchOrCondition59=searchOrCondition(); state._fsp--; @@ -2919,7 +2921,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition926); searchAndCondition60=searchAndCondition(); state._fsp--; @@ -2940,10 +2942,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:273:24: OR searchAndCondition { - OR61=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition925); if (state.failed) return retval; + OR61=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition929); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OR.add(OR61); - pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition927); + pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition931); searchAndCondition62=searchAndCondition(); state._fsp--; @@ -3040,7 +3042,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition959); searchNotCondition63=searchNotCondition(); state._fsp--; @@ -3061,10 +3063,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:282:24: AND searchNotCondition { - AND64=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition958); if (state.failed) return retval; + AND64=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition962); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AND.add(AND64); - pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition960); + pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition964); searchNotCondition65=searchNotCondition(); state._fsp--; @@ -3165,10 +3167,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:287:4: NOT searchTest { - NOT66=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition987); if (state.failed) return retval; + NOT66=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition991); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT66); - pushFollow(FOLLOW_searchTest_in_searchNotCondition989); + pushFollow(FOLLOW_searchTest_in_searchNotCondition993); searchTest67=searchTest(); state._fsp--; @@ -3207,7 +3209,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:289:4: searchTest { - pushFollow(FOLLOW_searchTest_in_searchNotCondition1004); + pushFollow(FOLLOW_searchTest_in_searchNotCondition1008); searchTest68=searchTest(); state._fsp--; @@ -3304,7 +3306,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:294:4: predicate { - pushFollow(FOLLOW_predicate_in_searchTest1022); + pushFollow(FOLLOW_predicate_in_searchTest1026); predicate69=predicate(); state._fsp--; @@ -3335,16 +3337,16 @@ public class CMISParser extends Parser { case 2 : // 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; + LPAREN70=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_searchTest1037); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN70); - pushFollow(FOLLOW_searchOrCondition_in_searchTest1035); + pushFollow(FOLLOW_searchOrCondition_in_searchTest1039); searchOrCondition71=searchOrCondition(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchOrCondition.add(searchOrCondition71.getTree()); - RPAREN72=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_searchTest1037); if (state.failed) return retval; + RPAREN72=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_searchTest1041); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN72); @@ -3431,7 +3433,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_comparisonPredicate_in_predicate1054); + pushFollow(FOLLOW_comparisonPredicate_in_predicate1058); comparisonPredicate73=comparisonPredicate(); state._fsp--; @@ -3445,7 +3447,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_inPredicate_in_predicate1059); + pushFollow(FOLLOW_inPredicate_in_predicate1063); inPredicate74=inPredicate(); state._fsp--; @@ -3459,7 +3461,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_likePredicate_in_predicate1064); + pushFollow(FOLLOW_likePredicate_in_predicate1068); likePredicate75=likePredicate(); state._fsp--; @@ -3473,7 +3475,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_nullPredicate_in_predicate1069); + pushFollow(FOLLOW_nullPredicate_in_predicate1073); nullPredicate76=nullPredicate(); state._fsp--; @@ -3487,7 +3489,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_quantifiedComparisonPredicate_in_predicate1075); + pushFollow(FOLLOW_quantifiedComparisonPredicate_in_predicate1079); quantifiedComparisonPredicate77=quantifiedComparisonPredicate(); state._fsp--; @@ -3501,7 +3503,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_quantifiedInPredicate_in_predicate1080); + pushFollow(FOLLOW_quantifiedInPredicate_in_predicate1084); quantifiedInPredicate78=quantifiedInPredicate(); state._fsp--; @@ -3515,7 +3517,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_textSearchPredicate_in_predicate1085); + pushFollow(FOLLOW_textSearchPredicate_in_predicate1089); textSearchPredicate79=textSearchPredicate(); state._fsp--; @@ -3529,7 +3531,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_folderPredicate_in_predicate1090); + pushFollow(FOLLOW_folderPredicate_in_predicate1094); folderPredicate80=folderPredicate(); state._fsp--; @@ -3586,19 +3588,19 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_valueExpression_in_comparisonPredicate1106); valueExpression81=valueExpression(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_valueExpression.add(valueExpression81.getTree()); - pushFollow(FOLLOW_compOp_in_comparisonPredicate1104); + pushFollow(FOLLOW_compOp_in_comparisonPredicate1108); compOp82=compOp(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_compOp.add(compOp82.getTree()); - pushFollow(FOLLOW_literalOrParameterName_in_comparisonPredicate1106); + pushFollow(FOLLOW_literalOrParameterName_in_comparisonPredicate1110); literalOrParameterName83=literalOrParameterName(); state._fsp--; @@ -3607,7 +3609,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: compOp, literalOrParameterName, valueExpression + // elements: valueExpression, compOp, literalOrParameterName // token labels: // rule labels: retval // token list labels: @@ -3756,7 +3758,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_literal_in_literalOrParameterName1172); + pushFollow(FOLLOW_literal_in_literalOrParameterName1176); literal85=literal(); state._fsp--; @@ -3770,7 +3772,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_parameterName_in_literalOrParameterName1177); + pushFollow(FOLLOW_parameterName_in_literalOrParameterName1181); parameterName86=parameterName(); state._fsp--; @@ -3843,7 +3845,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_signedNumericLiteral_in_literal1190); + pushFollow(FOLLOW_signedNumericLiteral_in_literal1194); signedNumericLiteral87=signedNumericLiteral(); state._fsp--; @@ -3857,7 +3859,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_characterStringLiteral_in_literal1195); + pushFollow(FOLLOW_characterStringLiteral_in_literal1199); characterStringLiteral88=characterStringLiteral(); state._fsp--; @@ -3923,7 +3925,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_columnReference_in_inPredicate1211); columnReference89=columnReference(); state._fsp--; @@ -3940,7 +3942,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:336:20: NOT { - NOT90=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate1209); if (state.failed) return retval; + NOT90=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate1213); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT90); @@ -3949,25 +3951,25 @@ public class CMISParser extends Parser { } - IN91=(Token)match(input,IN,FOLLOW_IN_in_inPredicate1212); if (state.failed) return retval; + IN91=(Token)match(input,IN,FOLLOW_IN_in_inPredicate1216); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN.add(IN91); - LPAREN92=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_inPredicate1214); if (state.failed) return retval; + LPAREN92=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_inPredicate1218); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN92); - pushFollow(FOLLOW_inValueList_in_inPredicate1216); + pushFollow(FOLLOW_inValueList_in_inPredicate1220); inValueList93=inValueList(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_inValueList.add(inValueList93.getTree()); - RPAREN94=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_inPredicate1218); if (state.failed) return retval; + RPAREN94=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_inPredicate1222); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN94); // AST REWRITE - // elements: columnReference, inValueList, NOT + // elements: columnReference, NOT, inValueList // token labels: // rule labels: retval // token list labels: @@ -4047,7 +4049,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_literalOrParameterName_in_inValueList1251); literalOrParameterName95=literalOrParameterName(); state._fsp--; @@ -4068,10 +4070,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:341:28: COMMA literalOrParameterName { - COMMA96=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList1250); if (state.failed) return retval; + COMMA96=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList1254); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA96); - pushFollow(FOLLOW_literalOrParameterName_in_inValueList1252); + pushFollow(FOLLOW_literalOrParameterName_in_inValueList1256); literalOrParameterName97=literalOrParameterName(); state._fsp--; @@ -4172,7 +4174,7 @@ public class CMISParser extends Parser { // 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); + pushFollow(FOLLOW_columnReference_in_likePredicate1282); columnReference98=columnReference(); state._fsp--; @@ -4189,7 +4191,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis2\\ANTLR\\CMIS.g:346:20: NOT { - NOT99=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate1280); if (state.failed) return retval; + NOT99=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate1284); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT99); @@ -4198,10 +4200,10 @@ public class CMISParser extends Parser { } - LIKE100=(Token)match(input,LIKE,FOLLOW_LIKE_in_likePredicate1283); if (state.failed) return retval; + LIKE100=(Token)match(input,LIKE,FOLLOW_LIKE_in_likePredicate1287); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LIKE.add(LIKE100); - pushFollow(FOLLOW_characterStringLiteral_in_likePredicate1285); + pushFollow(FOLLOW_characterStringLiteral_in_likePredicate1289); characterStringLiteral101=characterStringLiteral(); state._fsp--; @@ -4210,7 +4212,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: characterStringLiteral, NOT, columnReference + // elements: columnReference, characterStringLiteral, NOT // token labels: // rule labels: retval // token list labels: @@ -4269,7 +4271,7 @@ public class CMISParser extends Parser { }; // $ANTLR start nullPredicate - // W:\\workspace-cmis2\\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 NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) ); public final CMISParser.nullPredicate_return nullPredicate() throws RecognitionException { CMISParser.nullPredicate_return retval = new CMISParser.nullPredicate_return(); retval.start = input.LT(1); @@ -4277,210 +4279,364 @@ public class CMISParser extends Parser { Object root_0 = null; Token IS104=null; - Token NOT105=null; - Token NULL106=null; + Token NULL105=null; + Token IS108=null; + Token NOT109=null; + Token NULL110=null; CMISParser.columnReference_return columnReference102 = null; CMISParser.multiValuedColumnReference_return multiValuedColumnReference103 = null; + CMISParser.columnReference_return columnReference106 = null; + + CMISParser.multiValuedColumnReference_return multiValuedColumnReference107 = null; + Object IS104_tree=null; - Object NOT105_tree=null; - Object NULL106_tree=null; + Object NULL105_tree=null; + Object IS108_tree=null; + Object NOT109_tree=null; + Object NULL110_tree=null; RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleTokenStream stream_IS=new RewriteRuleTokenStream(adaptor,"token IS"); RewriteRuleTokenStream stream_NULL=new RewriteRuleTokenStream(adaptor,"token NULL"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // 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-cmis2\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) - int alt33=2; - int LA33_0 = input.LA(1); - - if ( (LA33_0==ID) ) { - int LA33_1 = input.LA(2); - - if ( (synpred5_CMIS()) ) { - alt33=1; - } - else if ( (true) ) { - alt33=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 1, input); - - throw nvae; - } - } - else if ( (LA33_0==DOUBLE_QUOTE) ) { - int LA33_2 = input.LA(2); - - if ( (LA33_2==SELECT||LA33_2==AS||(LA33_2>=FROM && LA33_2<=ON)||(LA33_2>=WHERE && LA33_2<=NOT)||(LA33_2>=IN && LA33_2<=DESC)||(LA33_2>=UPPER && LA33_2<=SCORE)) ) { - int LA33_5 = input.LA(3); - - if ( (LA33_5==DOUBLE_QUOTE) ) { - int LA33_7 = input.LA(4); - - if ( (synpred5_CMIS()) ) { - alt33=1; - } - else if ( (true) ) { - alt33=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 7, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 5, input); - - throw nvae; - } - } - else if ( (LA33_2==ID) ) { - int LA33_6 = input.LA(3); - - if ( (LA33_6==DOUBLE_QUOTE) ) { - int LA33_7 = input.LA(4); - - if ( (synpred5_CMIS()) ) { - alt33=1; - } - else if ( (true) ) { - alt33=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 7, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 6, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 2, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 33, 0, input); - - throw nvae; - } - switch (alt33) { + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:2: ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) ) + int alt35=2; + alt35 = dfa35.predict(input); + switch (alt35) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:6: ( columnReference )=> columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL { - pushFollow(FOLLOW_columnReference_in_nullPredicate1319); - columnReference102=columnReference(); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) + int alt33=2; + int LA33_0 = input.LA(1); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference102.getTree()); + if ( (LA33_0==ID) ) { + int LA33_1 = input.LA(2); + if ( (synpred5_CMIS()) ) { + alt33=1; + } + else if ( (true) ) { + alt33=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 1, input); + + throw nvae; + } + } + else if ( (LA33_0==DOUBLE_QUOTE) ) { + int LA33_2 = input.LA(2); + + if ( (LA33_2==SELECT||LA33_2==AS||(LA33_2>=FROM && LA33_2<=ON)||(LA33_2>=WHERE && LA33_2<=NOT)||(LA33_2>=IN && LA33_2<=DESC)||(LA33_2>=UPPER && LA33_2<=SCORE)) ) { + int LA33_5 = input.LA(3); + + if ( (LA33_5==DOUBLE_QUOTE) ) { + int LA33_7 = input.LA(4); + + if ( (synpred5_CMIS()) ) { + alt33=1; + } + else if ( (true) ) { + alt33=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 7, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 5, input); + + throw nvae; + } + } + else if ( (LA33_2==ID) ) { + int LA33_6 = input.LA(3); + + if ( (LA33_6==DOUBLE_QUOTE) ) { + int LA33_7 = input.LA(4); + + if ( (synpred5_CMIS()) ) { + alt33=1; + } + else if ( (true) ) { + alt33=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 7, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 6, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 2, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 33, 0, input); + + throw nvae; + } + switch (alt33) { + case 1 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:6: ( columnReference )=> columnReference + { + pushFollow(FOLLOW_columnReference_in_nullPredicate1323); + columnReference102=columnReference(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_columnReference.add(columnReference102.getTree()); + + } + break; + case 2 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:44: multiValuedColumnReference + { + pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1327); + multiValuedColumnReference103=multiValuedColumnReference(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference103.getTree()); + + } + break; + + } + + IS104=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1330); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IS.add(IS104); + + NULL105=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate1332); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NULL.add(NULL105); + + + + // AST REWRITE + // elements: columnReference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 352:3: -> ^( 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()); + adaptor.addChild(root_1, (Object)adaptor.create(NOT, "NOT")); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;retval.tree = root_0;} } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:44: multiValuedColumnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:9: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL { - pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1323); - multiValuedColumnReference103=multiValuedColumnReference(); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:9: ( ( columnReference )=> columnReference | multiValuedColumnReference ) + int alt34=2; + int LA34_0 = input.LA(1); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference103.getTree()); + if ( (LA34_0==ID) ) { + int LA34_1 = input.LA(2); + if ( (synpred6_CMIS()) ) { + alt34=1; + } + else if ( (true) ) { + alt34=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 1, input); + + throw nvae; + } + } + else if ( (LA34_0==DOUBLE_QUOTE) ) { + int LA34_2 = input.LA(2); + + if ( (LA34_2==SELECT||LA34_2==AS||(LA34_2>=FROM && LA34_2<=ON)||(LA34_2>=WHERE && LA34_2<=NOT)||(LA34_2>=IN && LA34_2<=DESC)||(LA34_2>=UPPER && LA34_2<=SCORE)) ) { + int LA34_5 = input.LA(3); + + if ( (LA34_5==DOUBLE_QUOTE) ) { + int LA34_7 = input.LA(4); + + if ( (synpred6_CMIS()) ) { + alt34=1; + } + else if ( (true) ) { + alt34=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 7, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 5, input); + + throw nvae; + } + } + else if ( (LA34_2==ID) ) { + int LA34_6 = input.LA(3); + + if ( (LA34_6==DOUBLE_QUOTE) ) { + int LA34_7 = input.LA(4); + + if ( (synpred6_CMIS()) ) { + alt34=1; + } + else if ( (true) ) { + alt34=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 7, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 6, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 2, input); + + throw nvae; + } + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 34, 0, input); + + throw nvae; + } + switch (alt34) { + case 1 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:11: ( columnReference )=> columnReference + { + pushFollow(FOLLOW_columnReference_in_nullPredicate1361); + columnReference106=columnReference(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_columnReference.add(columnReference106.getTree()); + + } + break; + case 2 : + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:49: multiValuedColumnReference + { + pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1365); + multiValuedColumnReference107=multiValuedColumnReference(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference107.getTree()); + + } + break; + + } + + IS108=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1368); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IS.add(IS108); + + NOT109=(Token)match(input,NOT,FOLLOW_NOT_in_nullPredicate1370); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NOT.add(NOT109); + + NULL110=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate1372); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NULL.add(NULL110); + + + + // AST REWRITE + // elements: columnReference + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 354:9: -> ^( PRED_EXISTS columnReference ) + { + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:354:12: ^( PRED_EXISTS columnReference ) + { + 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()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;retval.tree = root_0;} } break; } - - IS104=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1326); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IS.add(IS104); - - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:75: ( NOT )? - int alt34=2; - int LA34_0 = input.LA(1); - - if ( (LA34_0==NOT) ) { - alt34=1; - } - switch (alt34) { - case 1 : - // 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); - - - } - break; - - } - - NULL106=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate1331); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NULL.add(NULL106); - - - - // AST REWRITE - // elements: columnReference, NOT - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 352:3: -> ^( 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-cmis2\\ANTLR\\CMIS.g:352:36: ( NOT )? - if ( stream_NOT.hasNext() ) { - adaptor.addChild(root_1, stream_NOT.nextNode()); - - } - stream_NOT.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;retval.tree = root_0;} - } - retval.stop = input.LT(-1); if ( state.backtracking==0 ) { @@ -4506,55 +4662,55 @@ public class CMISParser extends Parser { }; // $ANTLR start quantifiedComparisonPredicate - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:355:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:357: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); Object root_0 = null; - Token ANY109=null; - CMISParser.literalOrParameterName_return literalOrParameterName107 = null; + Token ANY113=null; + CMISParser.literalOrParameterName_return literalOrParameterName111 = null; - CMISParser.compOp_return compOp108 = null; + CMISParser.compOp_return compOp112 = null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference110 = null; + CMISParser.multiValuedColumnReference_return multiValuedColumnReference114 = null; - Object ANY109_tree=null; + Object ANY113_tree=null; RewriteRuleTokenStream stream_ANY=new RewriteRuleTokenStream(adaptor,"token ANY"); RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:358:2: ( literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:358:4: literalOrParameterName compOp ANY multiValuedColumnReference { - pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1356); - literalOrParameterName107=literalOrParameterName(); + pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1400); + literalOrParameterName111=literalOrParameterName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName107.getTree()); - pushFollow(FOLLOW_compOp_in_quantifiedComparisonPredicate1358); - compOp108=compOp(); + if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName111.getTree()); + pushFollow(FOLLOW_compOp_in_quantifiedComparisonPredicate1402); + compOp112=compOp(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_compOp.add(compOp108.getTree()); - ANY109=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedComparisonPredicate1360); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ANY.add(ANY109); + if ( state.backtracking==0 ) stream_compOp.add(compOp112.getTree()); + ANY113=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedComparisonPredicate1404); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ANY.add(ANY113); - pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1362); - multiValuedColumnReference110=multiValuedColumnReference(); + pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1406); + multiValuedColumnReference114=multiValuedColumnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference110.getTree()); + if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference114.getTree()); // AST REWRITE - // elements: compOp, multiValuedColumnReference, literalOrParameterName, ANY + // elements: ANY, multiValuedColumnReference, compOp, literalOrParameterName // token labels: // rule labels: retval // token list labels: @@ -4564,9 +4720,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 357:2: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) + // 359:2: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:357:5: ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:359: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,28 +4765,28 @@ public class CMISParser extends Parser { }; // $ANTLR start quantifiedInPredicate - // W:\\workspace-cmis2\\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:363: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); Object root_0 = null; - Token ANY111=null; - Token NOT113=null; - Token IN114=null; - Token LPAREN115=null; - Token RPAREN117=null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference112 = null; + Token ANY115=null; + Token NOT117=null; + Token IN118=null; + Token LPAREN119=null; + Token RPAREN121=null; + CMISParser.multiValuedColumnReference_return multiValuedColumnReference116 = null; - CMISParser.inValueList_return inValueList116 = null; + CMISParser.inValueList_return inValueList120 = null; - Object ANY111_tree=null; - Object NOT113_tree=null; - Object IN114_tree=null; - Object LPAREN115_tree=null; - Object RPAREN117_tree=null; + Object ANY115_tree=null; + Object NOT117_tree=null; + Object IN118_tree=null; + Object LPAREN119_tree=null; + Object RPAREN121_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_ANY=new RewriteRuleTokenStream(adaptor,"token ANY"); RewriteRuleTokenStream stream_IN=new RewriteRuleTokenStream(adaptor,"token IN"); @@ -4639,31 +4795,31 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:364:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:364: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); + ANY115=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate1435); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ANY.add(ANY115); - pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1393); - multiValuedColumnReference112=multiValuedColumnReference(); + pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1437); + multiValuedColumnReference116=multiValuedColumnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference112.getTree()); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:35: ( NOT )? - int alt35=2; - int LA35_0 = input.LA(1); + if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference116.getTree()); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:364:35: ( NOT )? + int alt36=2; + int LA36_0 = input.LA(1); - if ( (LA35_0==NOT) ) { - alt35=1; + if ( (LA36_0==NOT) ) { + alt36=1; } - switch (alt35) { + switch (alt36) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:362:35: NOT + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:364:35: NOT { - NOT113=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate1395); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NOT.add(NOT113); + NOT117=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate1439); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NOT.add(NOT117); } @@ -4671,25 +4827,25 @@ public class CMISParser extends Parser { } - IN114=(Token)match(input,IN,FOLLOW_IN_in_quantifiedInPredicate1398); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IN.add(IN114); + IN118=(Token)match(input,IN,FOLLOW_IN_in_quantifiedInPredicate1442); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN.add(IN118); - LPAREN115=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_quantifiedInPredicate1401); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN115); + LPAREN119=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_quantifiedInPredicate1445); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN119); - pushFollow(FOLLOW_inValueList_in_quantifiedInPredicate1403); - inValueList116=inValueList(); + pushFollow(FOLLOW_inValueList_in_quantifiedInPredicate1447); + inValueList120=inValueList(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_inValueList.add(inValueList116.getTree()); - RPAREN117=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedInPredicate1405); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN117); + if ( state.backtracking==0 ) stream_inValueList.add(inValueList120.getTree()); + RPAREN121=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedInPredicate1449); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN121); // AST REWRITE - // elements: ANY, multiValuedColumnReference, inValueList, NOT + // elements: multiValuedColumnReference, ANY, NOT, inValueList // token labels: // rule labels: retval // token list labels: @@ -4699,9 +4855,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 363:3: -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) + // 365:3: -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:363:6: ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:365: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 +4865,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-cmis2\\ANTLR\\CMIS.g:363:59: ( NOT )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:365:59: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4749,28 +4905,28 @@ public class CMISParser extends Parser { }; // $ANTLR start textSearchPredicate - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:366:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:368: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); Object root_0 = null; - Token CONTAINS118=null; - Token LPAREN119=null; - Token COMMA121=null; - Token COMMA122=null; - Token RPAREN124=null; - CMISParser.qualifier_return qualifier120 = null; + Token CONTAINS122=null; + Token LPAREN123=null; + Token COMMA125=null; + Token COMMA126=null; + Token RPAREN128=null; + CMISParser.qualifier_return qualifier124 = null; - CMISParser.textSearchExpression_return textSearchExpression123 = null; + CMISParser.textSearchExpression_return textSearchExpression127 = null; - Object CONTAINS118_tree=null; - Object LPAREN119_tree=null; - Object COMMA121_tree=null; - Object COMMA122_tree=null; - Object RPAREN124_tree=null; + Object CONTAINS122_tree=null; + Object LPAREN123_tree=null; + Object COMMA125_tree=null; + Object COMMA126_tree=null; + Object RPAREN128_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_CONTAINS=new RewriteRuleTokenStream(adaptor,"token CONTAINS"); @@ -4778,46 +4934,46 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_textSearchExpression=new RewriteRuleSubtreeStream(adaptor,"rule textSearchExpression"); try { - // 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:369:2: ( CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:369: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); + CONTAINS122=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate1478); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CONTAINS.add(CONTAINS122); - LPAREN119=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate1436); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN119); + LPAREN123=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate1480); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN123); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:20: ( qualifier COMMA | COMMA )? - int alt36=3; - int LA36_0 = input.LA(1); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:369:20: ( qualifier COMMA | COMMA )? + int alt37=3; + int LA37_0 = input.LA(1); - if ( ((LA36_0>=ID && LA36_0<=DOUBLE_QUOTE)) ) { - alt36=1; + if ( ((LA37_0>=ID && LA37_0<=DOUBLE_QUOTE)) ) { + alt37=1; } - else if ( (LA36_0==COMMA) ) { - alt36=2; + else if ( (LA37_0==COMMA) ) { + alt37=2; } - switch (alt36) { + switch (alt37) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:21: qualifier COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:369:21: qualifier COMMA { - pushFollow(FOLLOW_qualifier_in_textSearchPredicate1439); - qualifier120=qualifier(); + pushFollow(FOLLOW_qualifier_in_textSearchPredicate1483); + qualifier124=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier120.getTree()); - COMMA121=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1441); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA121); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier124.getTree()); + COMMA125=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1485); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA125); } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:367:39: COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:369:39: COMMA { - COMMA122=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1445); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA122); + COMMA126=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1489); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA126); } @@ -4825,14 +4981,14 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_textSearchExpression_in_textSearchPredicate1449); - textSearchExpression123=textSearchExpression(); + pushFollow(FOLLOW_textSearchExpression_in_textSearchPredicate1493); + textSearchExpression127=textSearchExpression(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_textSearchExpression.add(textSearchExpression123.getTree()); - RPAREN124=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_textSearchPredicate1451); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN124); + if ( state.backtracking==0 ) stream_textSearchExpression.add(textSearchExpression127.getTree()); + RPAREN128=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_textSearchPredicate1495); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN128); @@ -4847,15 +5003,15 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 368:3: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) + // 370:3: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:368:6: ^( PRED_FTS textSearchExpression ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:370: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-cmis2\\ANTLR\\CMIS.g:368:38: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:370:38: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -4895,56 +5051,56 @@ public class CMISParser extends Parser { }; // $ANTLR start folderPredicate - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:371:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:373: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); Object root_0 = null; - Token IN_FOLDER125=null; - Token IN_TREE127=null; - CMISParser.folderPredicateArgs_return folderPredicateArgs126 = null; + Token IN_FOLDER129=null; + Token IN_TREE131=null; + CMISParser.folderPredicateArgs_return folderPredicateArgs130 = null; - CMISParser.folderPredicateArgs_return folderPredicateArgs128 = null; + CMISParser.folderPredicateArgs_return folderPredicateArgs132 = null; - Object IN_FOLDER125_tree=null; - Object IN_TREE127_tree=null; + Object IN_FOLDER129_tree=null; + Object IN_TREE131_tree=null; RewriteRuleTokenStream stream_IN_TREE=new RewriteRuleTokenStream(adaptor,"token IN_TREE"); RewriteRuleTokenStream stream_IN_FOLDER=new RewriteRuleTokenStream(adaptor,"token IN_FOLDER"); RewriteRuleSubtreeStream stream_folderPredicateArgs=new RewriteRuleSubtreeStream(adaptor,"rule folderPredicateArgs"); try { - // 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); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:374:2: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) + int alt38=2; + int LA38_0 = input.LA(1); - if ( (LA37_0==IN_FOLDER) ) { - alt37=1; + if ( (LA38_0==IN_FOLDER) ) { + alt38=1; } - else if ( (LA37_0==IN_TREE) ) { - alt37=2; + else if ( (LA38_0==IN_TREE) ) { + alt38=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 37, 0, input); + new NoViableAltException("", 38, 0, input); throw nvae; } - switch (alt37) { + switch (alt38) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:372:4: IN_FOLDER folderPredicateArgs + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:374: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); + IN_FOLDER129=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate1520); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER129); - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1479); - folderPredicateArgs126=folderPredicateArgs(); + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1523); + folderPredicateArgs130=folderPredicateArgs(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs126.getTree()); + if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs130.getTree()); // AST REWRITE @@ -4958,9 +5114,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 373:3: -> ^( PRED_CHILD folderPredicateArgs ) + // 375:3: -> ^( PRED_CHILD folderPredicateArgs ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:373:6: ^( PRED_CHILD folderPredicateArgs ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:375: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,17 +5132,17 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:374:10: IN_TREE folderPredicateArgs + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:376: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); + IN_TREE131=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate1544); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE131); - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1502); - folderPredicateArgs128=folderPredicateArgs(); + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1546); + folderPredicateArgs132=folderPredicateArgs(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs128.getTree()); + if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs132.getTree()); // AST REWRITE @@ -5000,9 +5156,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 375:3: -> ^( PRED_DESCENDANT folderPredicateArgs ) + // 377:3: -> ^( PRED_DESCENDANT folderPredicateArgs ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:375:6: ^( PRED_DESCENDANT folderPredicateArgs ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:377: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,69 +5200,69 @@ public class CMISParser extends Parser { }; // $ANTLR start folderPredicateArgs - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:378:1: folderPredicateArgs : LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:380: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); Object root_0 = null; - Token LPAREN129=null; - Token COMMA131=null; - Token COMMA132=null; - Token RPAREN134=null; - CMISParser.qualifier_return qualifier130 = null; + Token LPAREN133=null; + Token COMMA135=null; + Token COMMA136=null; + Token RPAREN138=null; + CMISParser.qualifier_return qualifier134 = null; - CMISParser.folderId_return folderId133 = null; + CMISParser.folderId_return folderId137 = null; - Object LPAREN129_tree=null; - Object COMMA131_tree=null; - Object COMMA132_tree=null; - Object RPAREN134_tree=null; + Object LPAREN133_tree=null; + Object COMMA135_tree=null; + Object COMMA136_tree=null; + Object RPAREN138_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_folderId=new RewriteRuleSubtreeStream(adaptor,"rule folderId"); try { - // 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:381:2: ( LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:381: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); + LPAREN133=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs1568); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN133); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:11: ( qualifier COMMA | COMMA )? - int alt38=3; - int LA38_0 = input.LA(1); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:381:11: ( qualifier COMMA | COMMA )? + int alt39=3; + int LA39_0 = input.LA(1); - if ( ((LA38_0>=ID && LA38_0<=DOUBLE_QUOTE)) ) { - alt38=1; + if ( ((LA39_0>=ID && LA39_0<=DOUBLE_QUOTE)) ) { + alt39=1; } - else if ( (LA38_0==COMMA) ) { - alt38=2; + else if ( (LA39_0==COMMA) ) { + alt39=2; } - switch (alt38) { + switch (alt39) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:12: qualifier COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:381:12: qualifier COMMA { - pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1527); - qualifier130=qualifier(); + pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1571); + qualifier134=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier130.getTree()); - COMMA131=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1529); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA131); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier134.getTree()); + COMMA135=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1573); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA135); } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:379:30: COMMA + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:381:30: COMMA { - COMMA132=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1533); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA132); + COMMA136=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1577); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA136); } @@ -5114,19 +5270,19 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_folderId_in_folderPredicateArgs1537); - folderId133=folderId(); + pushFollow(FOLLOW_folderId_in_folderPredicateArgs1581); + folderId137=folderId(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_folderId.add(folderId133.getTree()); - RPAREN134=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs1539); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN134); + if ( state.backtracking==0 ) stream_folderId.add(folderId137.getTree()); + RPAREN138=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs1583); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN138); // AST REWRITE - // elements: folderId, qualifier + // elements: qualifier, folderId // token labels: // rule labels: retval // token list labels: @@ -5136,10 +5292,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 380:3: -> folderId ( qualifier )? + // 382:3: -> folderId ( qualifier )? { adaptor.addChild(root_0, stream_folderId.nextTree()); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:380:15: ( qualifier )? + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:382:15: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_0, stream_qualifier.nextTree()); @@ -5176,82 +5332,82 @@ public class CMISParser extends Parser { }; // $ANTLR start orderByClause - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:383:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:385: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); Object root_0 = null; - Token ORDER135=null; - Token BY136=null; - Token COMMA138=null; - CMISParser.sortSpecification_return sortSpecification137 = null; + Token ORDER139=null; + Token BY140=null; + Token COMMA142=null; + CMISParser.sortSpecification_return sortSpecification141 = null; - CMISParser.sortSpecification_return sortSpecification139 = null; + CMISParser.sortSpecification_return sortSpecification143 = null; - Object ORDER135_tree=null; - Object BY136_tree=null; - Object COMMA138_tree=null; + Object ORDER139_tree=null; + Object BY140_tree=null; + Object COMMA142_tree=null; RewriteRuleTokenStream stream_BY=new RewriteRuleTokenStream(adaptor,"token BY"); RewriteRuleTokenStream stream_ORDER=new RewriteRuleTokenStream(adaptor,"token ORDER"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_sortSpecification=new RewriteRuleSubtreeStream(adaptor,"rule sortSpecification"); paraphrases.push("in order by"); try { - // 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 )* + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:388:2: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:388: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); + ORDER139=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause1622); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ORDER.add(ORDER139); - BY136=(Token)match(input,BY,FOLLOW_BY_in_orderByClause1580); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_BY.add(BY136); + BY140=(Token)match(input,BY,FOLLOW_BY_in_orderByClause1624); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BY.add(BY140); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1582); - sortSpecification137=sortSpecification(); + pushFollow(FOLLOW_sortSpecification_in_orderByClause1626); + sortSpecification141=sortSpecification(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification137.getTree()); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:31: ( COMMA sortSpecification )* - loop39: + if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification141.getTree()); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:388:31: ( COMMA sortSpecification )* + loop40: do { - int alt39=2; - int LA39_0 = input.LA(1); + int alt40=2; + int LA40_0 = input.LA(1); - if ( (LA39_0==COMMA) ) { - alt39=1; + if ( (LA40_0==COMMA) ) { + alt40=1; } - switch (alt39) { + switch (alt40) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:386:33: COMMA sortSpecification + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:388: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); + COMMA142=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause1630); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA142); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1588); - sortSpecification139=sortSpecification(); + pushFollow(FOLLOW_sortSpecification_in_orderByClause1632); + sortSpecification143=sortSpecification(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification139.getTree()); + if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification143.getTree()); } break; default : - break loop39; + break loop40; } } while (true); // AST REWRITE - // elements: sortSpecification, ORDER + // elements: ORDER, sortSpecification // token labels: // rule labels: retval // token list labels: @@ -5261,9 +5417,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 387:3: -> ^( ORDER ( sortSpecification )+ ) + // 389:3: -> ^( ORDER ( sortSpecification )+ ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:387:6: ^( ORDER ( sortSpecification )+ ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:389:6: ^( ORDER ( sortSpecification )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ORDER.nextNode(), root_1); @@ -5313,7 +5469,7 @@ public class CMISParser extends Parser { }; // $ANTLR start sortSpecification - // W:\\workspace-cmis2\\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:392: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); @@ -5321,9 +5477,9 @@ public class CMISParser extends Parser { Object root_0 = null; Token by=null; - CMISParser.columnReference_return columnReference140 = null; + CMISParser.columnReference_return columnReference144 = null; - CMISParser.columnReference_return columnReference141 = null; + CMISParser.columnReference_return columnReference145 = null; Object by_tree=null; @@ -5331,19 +5487,19 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DESC=new RewriteRuleTokenStream(adaptor,"token DESC"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // 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) { + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:2: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) + int alt42=2; + alt42 = dfa42.predict(input); + switch (alt42) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:391:4: columnReference + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:4: columnReference { - pushFollow(FOLLOW_columnReference_in_sortSpecification1614); - columnReference140=columnReference(); + pushFollow(FOLLOW_columnReference_in_sortSpecification1658); + columnReference144=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference140.getTree()); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference144.getTree()); // AST REWRITE @@ -5357,9 +5513,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 392:3: -> ^( SORT_SPECIFICATION columnReference ASC ) + // 394:3: -> ^( SORT_SPECIFICATION columnReference ASC ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:392:6: ^( SORT_SPECIFICATION columnReference ASC ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:394: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,45 +5532,45 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:4: columnReference (by= ASC | by= DESC ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:395:4: columnReference (by= ASC | by= DESC ) { - pushFollow(FOLLOW_columnReference_in_sortSpecification1632); - columnReference141=columnReference(); + pushFollow(FOLLOW_columnReference_in_sortSpecification1676); + columnReference145=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference141.getTree()); - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:20: (by= ASC | by= DESC ) - int alt40=2; - int LA40_0 = input.LA(1); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference145.getTree()); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:395:20: (by= ASC | by= DESC ) + int alt41=2; + int LA41_0 = input.LA(1); - if ( (LA40_0==ASC) ) { - alt40=1; + if ( (LA41_0==ASC) ) { + alt41=1; } - else if ( (LA40_0==DESC) ) { - alt40=2; + else if ( (LA41_0==DESC) ) { + alt41=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 40, 0, input); + new NoViableAltException("", 41, 0, input); throw nvae; } - switch (alt40) { + switch (alt41) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:22: by= ASC + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:395:22: by= ASC { - by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1638); if (state.failed) return retval; + by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1682); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASC.add(by); } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:393:31: by= DESC + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:395:31: by= DESC { - by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1644); if (state.failed) return retval; + by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1688); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DESC.add(by); @@ -5437,9 +5593,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 394:3: -> ^( SORT_SPECIFICATION columnReference $by) + // 396:3: -> ^( SORT_SPECIFICATION columnReference $by) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:394:6: ^( SORT_SPECIFICATION columnReference $by) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:396: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,29 +5638,29 @@ public class CMISParser extends Parser { }; // $ANTLR start correlationName - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:397:1: correlationName : identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:399:1: correlationName : identifier ; public final CMISParser.correlationName_return correlationName() throws RecognitionException { CMISParser.correlationName_return retval = new CMISParser.correlationName_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.identifier_return identifier142 = null; + CMISParser.identifier_return identifier146 = null; try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:398:2: ( identifier ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:398:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:400:2: ( identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:400:4: identifier { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_identifier_in_correlationName1671); - identifier142=identifier(); + pushFollow(FOLLOW_identifier_in_correlationName1715); + identifier146=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier142.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier146.getTree()); } @@ -5533,27 +5689,27 @@ public class CMISParser extends Parser { }; // $ANTLR start tableName - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:405:1: tableName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:407: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); Object root_0 = null; - CMISParser.identifier_return identifier143 = null; + CMISParser.identifier_return identifier147 = null; RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:406:2: ( identifier -> identifier ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:406:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:408:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:408:4: identifier { - pushFollow(FOLLOW_identifier_in_tableName1685); - identifier143=identifier(); + pushFollow(FOLLOW_identifier_in_tableName1729); + identifier147=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier143.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier147.getTree()); // AST REWRITE @@ -5567,7 +5723,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 407:3: -> identifier + // 409:3: -> identifier { adaptor.addChild(root_0, stream_identifier.nextTree()); @@ -5601,27 +5757,27 @@ public class CMISParser extends Parser { }; // $ANTLR start columnName - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:410:1: columnName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:412: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); Object root_0 = null; - CMISParser.identifier_return identifier144 = null; + CMISParser.identifier_return identifier148 = null; RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:411:2: ( identifier -> identifier ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:411:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:413:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:413:4: identifier { - pushFollow(FOLLOW_identifier_in_columnName1703); - identifier144=identifier(); + pushFollow(FOLLOW_identifier_in_columnName1747); + identifier148=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier144.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier148.getTree()); // AST REWRITE @@ -5635,7 +5791,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 412:3: -> identifier + // 414:3: -> identifier { adaptor.addChild(root_0, stream_identifier.nextTree()); @@ -5669,27 +5825,27 @@ public class CMISParser extends Parser { }; // $ANTLR start multiValuedColumnName - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:415:1: multiValuedColumnName : identifier -> identifier ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:417: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); Object root_0 = null; - CMISParser.identifier_return identifier145 = null; + CMISParser.identifier_return identifier149 = null; RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:416:2: ( identifier -> identifier ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:416:4: identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:418:2: ( identifier -> identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:418:4: identifier { - pushFollow(FOLLOW_identifier_in_multiValuedColumnName1722); - identifier145=identifier(); + pushFollow(FOLLOW_identifier_in_multiValuedColumnName1766); + identifier149=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier145.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier149.getTree()); // AST REWRITE @@ -5703,7 +5859,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 417:3: -> identifier + // 419:3: -> identifier { adaptor.addChild(root_0, stream_identifier.nextTree()); @@ -5737,33 +5893,33 @@ public class CMISParser extends Parser { }; // $ANTLR start parameterName - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:420:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:422: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); Object root_0 = null; - Token COLON146=null; - CMISParser.identifier_return identifier147 = null; + Token COLON150=null; + CMISParser.identifier_return identifier151 = null; - Object COLON146_tree=null; + Object COLON150_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:421:2: ( COLON identifier -> ^( PARAMETER identifier ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:421:4: COLON identifier + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:423:2: ( COLON identifier -> ^( PARAMETER identifier ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:423: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); + COLON150=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName1784); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON150); - pushFollow(FOLLOW_identifier_in_parameterName1742); - identifier147=identifier(); + pushFollow(FOLLOW_identifier_in_parameterName1786); + identifier151=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier147.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier151.getTree()); // AST REWRITE @@ -5777,9 +5933,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 422:3: -> ^( PARAMETER identifier ) + // 424:3: -> ^( PARAMETER identifier ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:422:6: ^( PARAMETER identifier ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:424:6: ^( PARAMETER identifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER, "PARAMETER"), root_1); @@ -5819,27 +5975,27 @@ public class CMISParser extends Parser { }; // $ANTLR start folderId - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:425:1: folderId : characterStringLiteral -> characterStringLiteral ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:427: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); Object root_0 = null; - CMISParser.characterStringLiteral_return characterStringLiteral148 = null; + CMISParser.characterStringLiteral_return characterStringLiteral152 = null; RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:426:3: ( characterStringLiteral -> characterStringLiteral ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:426:5: characterStringLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:428:3: ( characterStringLiteral -> characterStringLiteral ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:428:5: characterStringLiteral { - pushFollow(FOLLOW_characterStringLiteral_in_folderId1765); - characterStringLiteral148=characterStringLiteral(); + pushFollow(FOLLOW_characterStringLiteral_in_folderId1809); + characterStringLiteral152=characterStringLiteral(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_characterStringLiteral.add(characterStringLiteral148.getTree()); + if ( state.backtracking==0 ) stream_characterStringLiteral.add(characterStringLiteral152.getTree()); // AST REWRITE @@ -5853,7 +6009,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 427:4: -> characterStringLiteral + // 429:4: -> characterStringLiteral { adaptor.addChild(root_0, stream_characterStringLiteral.nextTree()); @@ -5887,27 +6043,27 @@ public class CMISParser extends Parser { }; // $ANTLR start textSearchExpression - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:430:1: textSearchExpression : QUOTED_STRING ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:432: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); Object root_0 = null; - Token QUOTED_STRING149=null; + Token QUOTED_STRING153=null; - Object QUOTED_STRING149_tree=null; + Object QUOTED_STRING153_tree=null; try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:431:2: ( QUOTED_STRING ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:431:4: QUOTED_STRING + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:433:2: ( QUOTED_STRING ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:433:4: QUOTED_STRING { root_0 = (Object)adaptor.nil(); - QUOTED_STRING149=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression1786); if (state.failed) return retval; + QUOTED_STRING153=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression1830); if (state.failed) return retval; if ( state.backtracking==0 ) { - QUOTED_STRING149_tree = (Object)adaptor.create(QUOTED_STRING149); - adaptor.addChild(root_0, QUOTED_STRING149_tree); + QUOTED_STRING153_tree = (Object)adaptor.create(QUOTED_STRING153); + adaptor.addChild(root_0, QUOTED_STRING153_tree); } } @@ -5937,49 +6093,49 @@ public class CMISParser extends Parser { }; // $ANTLR start identifier - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:434:1: identifier : ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:436: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); Object root_0 = null; - Token ID150=null; - Token DOUBLE_QUOTE151=null; - Token DOUBLE_QUOTE153=null; - CMISParser.keyWordOrId_return keyWordOrId152 = null; + Token ID154=null; + Token DOUBLE_QUOTE155=null; + Token DOUBLE_QUOTE157=null; + CMISParser.keyWordOrId_return keyWordOrId156 = null; - Object ID150_tree=null; - Object DOUBLE_QUOTE151_tree=null; - Object DOUBLE_QUOTE153_tree=null; + Object ID154_tree=null; + Object DOUBLE_QUOTE155_tree=null; + Object DOUBLE_QUOTE157_tree=null; RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleTokenStream stream_DOUBLE_QUOTE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_QUOTE"); RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); try { - // 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); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:437:2: ( ID -> ID | DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) + int alt43=2; + int LA43_0 = input.LA(1); - if ( (LA42_0==ID) ) { - alt42=1; + if ( (LA43_0==ID) ) { + alt43=1; } - else if ( (LA42_0==DOUBLE_QUOTE) ) { - alt42=2; + else if ( (LA43_0==DOUBLE_QUOTE) ) { + alt43=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 42, 0, input); + new NoViableAltException("", 43, 0, input); throw nvae; } - switch (alt42) { + switch (alt43) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:435:4: ID + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:437:4: ID { - ID150=(Token)match(input,ID,FOLLOW_ID_in_identifier1798); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ID.add(ID150); + ID154=(Token)match(input,ID,FOLLOW_ID_in_identifier1842); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ID.add(ID154); @@ -5994,7 +6150,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 436:3: -> ID + // 438:3: -> ID { adaptor.addChild(root_0, stream_ID.nextNode()); @@ -6004,19 +6160,19 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:437:4: DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:439: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); + DOUBLE_QUOTE155=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1853); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE155); - pushFollow(FOLLOW_keyWordOrId_in_identifier1811); - keyWordOrId152=keyWordOrId(); + pushFollow(FOLLOW_keyWordOrId_in_identifier1855); + keyWordOrId156=keyWordOrId(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_keyWordOrId.add(keyWordOrId152.getTree()); - DOUBLE_QUOTE153=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1813); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE153); + if ( state.backtracking==0 ) stream_keyWordOrId.add(keyWordOrId156.getTree()); + DOUBLE_QUOTE157=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1857); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE157); @@ -6031,9 +6187,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 438:3: -> ^( keyWordOrId ) + // 440:3: -> ^( keyWordOrId ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:438:6: ^( keyWordOrId ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:440:6: ^( keyWordOrId ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_keyWordOrId.nextNode(), root_1); @@ -6073,44 +6229,44 @@ public class CMISParser extends Parser { }; // $ANTLR start signedNumericLiteral - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:441:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:443: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); Object root_0 = null; - Token FLOATING_POINT_LITERAL154=null; - CMISParser.integerLiteral_return integerLiteral155 = null; + Token FLOATING_POINT_LITERAL158=null; + CMISParser.integerLiteral_return integerLiteral159 = null; - Object FLOATING_POINT_LITERAL154_tree=null; + Object FLOATING_POINT_LITERAL158_tree=null; RewriteRuleTokenStream stream_FLOATING_POINT_LITERAL=new RewriteRuleTokenStream(adaptor,"token FLOATING_POINT_LITERAL"); RewriteRuleSubtreeStream stream_integerLiteral=new RewriteRuleSubtreeStream(adaptor,"rule integerLiteral"); try { - // 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); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:444:2: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) + int alt44=2; + int LA44_0 = input.LA(1); - if ( (LA43_0==FLOATING_POINT_LITERAL) ) { - alt43=1; + if ( (LA44_0==FLOATING_POINT_LITERAL) ) { + alt44=1; } - else if ( (LA43_0==DECIMAL_INTEGER_LITERAL) ) { - alt43=2; + else if ( (LA44_0==DECIMAL_INTEGER_LITERAL) ) { + alt44=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 43, 0, input); + new NoViableAltException("", 44, 0, input); throw nvae; } - switch (alt43) { + switch (alt44) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:442:4: FLOATING_POINT_LITERAL + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:444: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); + FLOATING_POINT_LITERAL158=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1877); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL158); @@ -6125,9 +6281,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 443:3: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // 445:3: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:443:6: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:445: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,14 +6299,14 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:444:4: integerLiteral + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:446:4: integerLiteral { - pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral1848); - integerLiteral155=integerLiteral(); + pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral1892); + integerLiteral159=integerLiteral(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_integerLiteral.add(integerLiteral155.getTree()); + if ( state.backtracking==0 ) stream_integerLiteral.add(integerLiteral159.getTree()); // AST REWRITE @@ -6164,7 +6320,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 445:3: -> integerLiteral + // 447:3: -> integerLiteral { adaptor.addChild(root_0, stream_integerLiteral.nextTree()); @@ -6200,24 +6356,24 @@ public class CMISParser extends Parser { }; // $ANTLR start integerLiteral - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:448:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:450: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); Object root_0 = null; - Token DECIMAL_INTEGER_LITERAL156=null; + Token DECIMAL_INTEGER_LITERAL160=null; - Object DECIMAL_INTEGER_LITERAL156_tree=null; + Object DECIMAL_INTEGER_LITERAL160_tree=null; RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); try { - // 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 + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:451:2: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:451: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); + DECIMAL_INTEGER_LITERAL160=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1911); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL160); @@ -6232,9 +6388,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 450:3: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // 452:3: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:450:6: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:452: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,24 +6430,24 @@ public class CMISParser extends Parser { }; // $ANTLR start characterStringLiteral - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:453:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:455: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); Object root_0 = null; - Token QUOTED_STRING157=null; + Token QUOTED_STRING161=null; - Object QUOTED_STRING157_tree=null; + Object QUOTED_STRING161_tree=null; RewriteRuleTokenStream stream_QUOTED_STRING=new RewriteRuleTokenStream(adaptor,"token QUOTED_STRING"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:454:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:454:4: QUOTED_STRING + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:456:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:456: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); + QUOTED_STRING161=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral1934); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING161); @@ -6306,9 +6462,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 455:3: -> ^( STRING_LITERAL QUOTED_STRING ) + // 457:3: -> ^( STRING_LITERAL QUOTED_STRING ) { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:455:6: ^( STRING_LITERAL QUOTED_STRING ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:457: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,27 +6504,27 @@ public class CMISParser extends Parser { }; // $ANTLR start keyWord - // 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 ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:461: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); Object root_0 = null; - Token set158=null; + Token set162=null; - Object set158_tree=null; + Object set162_tree=null; try { - // 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:461: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(); - set158=(Token)input.LT(1); + set162=(Token)input.LT(1); if ( input.LA(1)==SELECT||input.LA(1)==AS||(input.LA(1)>=FROM && input.LA(1)<=ON)||(input.LA(1)>=WHERE && input.LA(1)<=NOT)||(input.LA(1)>=IN && input.LA(1)<=DESC)||(input.LA(1)>=UPPER && input.LA(1)<=SCORE) ) { input.consume(); - if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set158)); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set162)); state.errorRecovery=false;state.failed=false; } else { @@ -6405,48 +6561,48 @@ public class CMISParser extends Parser { }; // $ANTLR start keyWordOrId - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:488:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:490: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); Object root_0 = null; - Token ID160=null; - CMISParser.keyWord_return keyWord159 = null; + Token ID164=null; + CMISParser.keyWord_return keyWord163 = null; - Object ID160_tree=null; + Object ID164_tree=null; RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleSubtreeStream stream_keyWord=new RewriteRuleSubtreeStream(adaptor,"rule keyWord"); try { - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:489:2: ( keyWord -> keyWord | ID -> ID ) - int alt44=2; - int LA44_0 = input.LA(1); + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:491:2: ( keyWord -> keyWord | ID -> ID ) + int alt45=2; + int LA45_0 = input.LA(1); - if ( (LA44_0==SELECT||LA44_0==AS||(LA44_0>=FROM && LA44_0<=ON)||(LA44_0>=WHERE && LA44_0<=NOT)||(LA44_0>=IN && LA44_0<=DESC)||(LA44_0>=UPPER && LA44_0<=SCORE)) ) { - alt44=1; + if ( (LA45_0==SELECT||LA45_0==AS||(LA45_0>=FROM && LA45_0<=ON)||(LA45_0>=WHERE && LA45_0<=NOT)||(LA45_0>=IN && LA45_0<=DESC)||(LA45_0>=UPPER && LA45_0<=SCORE)) ) { + alt45=1; } - else if ( (LA44_0==ID) ) { - alt44=2; + else if ( (LA45_0==ID) ) { + alt45=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 44, 0, input); + new NoViableAltException("", 45, 0, input); throw nvae; } - switch (alt44) { + switch (alt45) { case 1 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:489:4: keyWord + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:491:4: keyWord { - pushFollow(FOLLOW_keyWord_in_keyWordOrId2099); - keyWord159=keyWord(); + pushFollow(FOLLOW_keyWord_in_keyWordOrId2143); + keyWord163=keyWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_keyWord.add(keyWord159.getTree()); + if ( state.backtracking==0 ) stream_keyWord.add(keyWord163.getTree()); // AST REWRITE @@ -6460,7 +6616,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 490:3: -> keyWord + // 492:3: -> keyWord { adaptor.addChild(root_0, stream_keyWord.nextTree()); @@ -6470,10 +6626,10 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis2\\ANTLR\\CMIS.g:491:4: ID + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:493:4: ID { - ID160=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2111); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ID.add(ID160); + ID164=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2155); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ID.add(ID164); @@ -6488,7 +6644,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 492:3: -> ID + // 494:3: -> ID { adaptor.addChild(root_0, stream_ID.nextNode()); @@ -6538,7 +6694,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:4: ( tableName ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g:207:5: tableName { - pushFollow(FOLLOW_tableName_in_synpred2_CMIS562); + pushFollow(FOLLOW_tableName_in_synpred2_CMIS566); tableName(); state._fsp--; @@ -6553,7 +6709,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:17: ( joinedTable ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g:221:18: joinedTable { - pushFollow(FOLLOW_joinedTable_in_synpred3_CMIS640); + pushFollow(FOLLOW_joinedTable_in_synpred3_CMIS644); joinedTable(); state._fsp--; @@ -6568,7 +6724,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:35: ( joinSpecification ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g:236:36: joinSpecification { - pushFollow(FOLLOW_joinSpecification_in_synpred4_CMIS737); + pushFollow(FOLLOW_joinSpecification_in_synpred4_CMIS741); joinSpecification(); state._fsp--; @@ -6583,7 +6739,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:6: ( columnReference ) // W:\\workspace-cmis2\\ANTLR\\CMIS.g:351:7: columnReference { - pushFollow(FOLLOW_columnReference_in_synpred5_CMIS1315); + pushFollow(FOLLOW_columnReference_in_synpred5_CMIS1319); columnReference(); state._fsp--; @@ -6593,6 +6749,21 @@ public class CMISParser extends Parser { } // $ANTLR end synpred5_CMIS + // $ANTLR start synpred6_CMIS + public final void synpred6_CMIS_fragment() throws RecognitionException { + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:11: ( columnReference ) + // W:\\workspace-cmis2\\ANTLR\\CMIS.g:353:12: columnReference + { + pushFollow(FOLLOW_columnReference_in_synpred6_CMIS1357); + columnReference(); + + state._fsp--; + if (state.failed) return ; + + } + } + // $ANTLR end synpred6_CMIS + // Delegated rules public final boolean synpred2_CMIS() { @@ -6609,6 +6780,20 @@ public class CMISParser extends Parser { state.failed=false; return success; } + public final boolean synpred6_CMIS() { + state.backtracking++; + int start = input.mark(); + try { + synpred6_CMIS_fragment(); // can never throw exception + } catch (RecognitionException re) { + System.err.println("impossible: "+re); + } + boolean success = !state.failed; + input.rewind(start); + state.backtracking--; + state.failed=false; + return success; + } public final boolean synpred4_CMIS() { state.backtracking++; int start = input.mark(); @@ -6669,7 +6854,8 @@ public class CMISParser extends Parser { protected DFA25 dfa25 = new DFA25(this); protected DFA27 dfa27 = new DFA27(this); - protected DFA41 dfa41 = new DFA41(this); + protected DFA35 dfa35 = new DFA35(this); + protected DFA42 dfa42 = new DFA42(this); static final String DFA25_eotS = "\31\uffff"; static final String DFA25_eofS = @@ -6766,14 +6952,14 @@ public class CMISParser extends Parser { "\uffff\1\106\1\111\1\106\1\uffff\1\106\1\111\1\106\4\104\1\75\2"+ "\104\1\75\2\104\1\75\1\67\3\106"; static final String DFA27_acceptS = - "\4\uffff\1\5\3\uffff\1\1\1\uffff\1\2\1\3\1\uffff\1\4\2\uffff\1"+ + "\4\uffff\1\5\3\uffff\1\1\1\uffff\1\2\1\4\1\uffff\1\3\2\uffff\1"+ "\6\11\uffff\1\7\3\uffff\1\10\22\uffff"; static final String DFA27_specialS = "\61\uffff}>"; static final String[] DFA27_transitionS = { "\1\10\2\uffff\1\10\4\uffff\6\10\1\uffff\4\10\5\uffff\4\10\1"+ "\3\1\5\1\6\1\7\4\10\2\4\1\1\1\2\2\4\3\10", - "\1\14\1\10\7\uffff\1\10\3\uffff\1\11\5\10\1\12\1\13\1\15", + "\1\14\1\10\7\uffff\1\10\3\uffff\1\11\5\10\1\12\1\15\1\13", "\1\16\2\uffff\1\16\4\uffff\6\16\1\uffff\4\16\5\uffff\14\16"+ "\2\uffff\1\17\3\uffff\3\16", "\1\10\37\uffff\2\20", @@ -6782,7 +6968,7 @@ public class CMISParser extends Parser { "\1\22", "\1\23", "", - "\1\12\1\13", + "\1\12\1\15", "", "", "\1\24\1\25", @@ -6793,10 +6979,10 @@ public class CMISParser extends Parser { "\1\32\4\uffff\1\10\34\uffff\1\10\1\31\1\27\1\30\2\10", "\1\36\4\uffff\1\10\34\uffff\1\10\1\35\1\33\1\34\2\10", "\1\36\4\uffff\1\10\34\uffff\1\10\1\41\1\37\1\40\2\10", - "\1\10\3\uffff\1\11\5\10\1\12\1\13\1\15", + "\1\10\3\uffff\1\11\5\10\1\12\1\15\1\13", "\1\42\2\uffff\1\42\4\uffff\6\42\1\uffff\4\42\5\uffff\14\42"+ "\2\uffff\1\43\3\uffff\3\42", - "\1\14\10\uffff\1\10\3\uffff\1\11\5\10\1\12\1\13\1\15", + "\1\14\10\uffff\1\10\3\uffff\1\11\5\10\1\12\1\15\1\13", "\1\32\2\uffff\1\10\1\uffff\1\10\34\uffff\6\10", "\1\44\2\uffff\1\44\4\uffff\6\44\1\uffff\4\44\5\uffff\14\44"+ "\2\uffff\1\45\3\uffff\3\44", @@ -6822,7 +7008,7 @@ public class CMISParser extends Parser { "\1\60", "\1\60", "\1\36\6\uffff\1\10\1\uffff\2\36\1\uffff\5\10\10\uffff\1\36", - "\1\10\3\uffff\1\11\5\10\1\12\1\13\1\15", + "\1\10\3\uffff\1\11\5\10\1\12\1\15\1\13", "\1\32\2\uffff\1\10\1\uffff\1\10\34\uffff\6\10", "\1\36\2\uffff\1\10\1\uffff\1\10\34\uffff\6\10", "\1\36\2\uffff\1\10\1\uffff\1\10\34\uffff\6\10" @@ -6861,69 +7047,137 @@ public class CMISParser extends Parser { return "300:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate );"; } } - static final String DFA41_eotS = - "\16\uffff"; - static final String DFA41_eofS = - "\1\uffff\1\4\6\uffff\1\4\1\uffff\1\4\2\uffff\1\4"; - static final String DFA41_minS = - "\1\103\1\37\1\35\1\103\2\uffff\2\104\1\37\1\35\1\37\2\104\1\37"; - static final String DFA41_maxS = - "\1\104\1\100\1\111\1\104\2\uffff\2\104\1\100\1\111\1\100\2\104"+ - "\1\100"; - static final String DFA41_acceptS = - "\4\uffff\1\1\1\2\10\uffff"; - static final String DFA41_specialS = - "\16\uffff}>"; - static final String[] DFA41_transitionS = { + static final String DFA35_eotS = + "\17\uffff"; + static final String DFA35_eofS = + "\17\uffff"; + static final String DFA35_minS = + "\1\103\1\42\1\35\1\103\1\57\2\104\1\67\1\35\2\uffff\1\42\2\104"+ + "\1\67"; + static final String DFA35_maxS = + "\1\104\1\67\1\111\1\104\1\70\2\104\1\67\1\111\2\uffff\1\67\2\104"+ + "\1\67"; + static final String DFA35_acceptS = + "\11\uffff\1\1\1\2\4\uffff"; + static final String DFA35_specialS = + "\17\uffff}>"; + static final String[] DFA35_transitionS = { "\1\1\1\2", - "\1\4\2\uffff\1\3\34\uffff\2\5", - "\1\6\2\uffff\1\6\4\uffff\6\6\1\uffff\4\6\5\uffff\14\6\2\uffff"+ - "\1\7\3\uffff\3\6", - "\1\10\1\11", + "\1\3\24\uffff\1\4", + "\1\5\2\uffff\1\5\4\uffff\6\5\1\uffff\4\5\5\uffff\14\5\2\uffff"+ + "\1\6\3\uffff\3\5", + "\1\7\1\10", + "\1\12\10\uffff\1\11", + "\1\13", + "\1\13", + "\1\4", + "\1\14\2\uffff\1\14\4\uffff\6\14\1\uffff\4\14\5\uffff\14\14"+ + "\2\uffff\1\15\3\uffff\3\14", "", "", - "\1\12", - "\1\12", - "\1\4\37\uffff\2\5", - "\1\13\2\uffff\1\13\4\uffff\6\13\1\uffff\4\13\5\uffff\14\13"+ - "\2\uffff\1\14\3\uffff\3\13", - "\1\4\2\uffff\1\3\34\uffff\2\5", - "\1\15", - "\1\15", - "\1\4\37\uffff\2\5" + "\1\3\24\uffff\1\4", + "\1\16", + "\1\16", + "\1\4" }; - static final short[] DFA41_eot = DFA.unpackEncodedString(DFA41_eotS); - static final short[] DFA41_eof = DFA.unpackEncodedString(DFA41_eofS); - static final char[] DFA41_min = DFA.unpackEncodedStringToUnsignedChars(DFA41_minS); - static final char[] DFA41_max = DFA.unpackEncodedStringToUnsignedChars(DFA41_maxS); - static final short[] DFA41_accept = DFA.unpackEncodedString(DFA41_acceptS); - static final short[] DFA41_special = DFA.unpackEncodedString(DFA41_specialS); - static final short[][] DFA41_transition; + static final short[] DFA35_eot = DFA.unpackEncodedString(DFA35_eotS); + static final short[] DFA35_eof = DFA.unpackEncodedString(DFA35_eofS); + static final char[] DFA35_min = DFA.unpackEncodedStringToUnsignedChars(DFA35_minS); + static final char[] DFA35_max = DFA.unpackEncodedStringToUnsignedChars(DFA35_maxS); + static final short[] DFA35_accept = DFA.unpackEncodedString(DFA35_acceptS); + static final short[] DFA35_special = DFA.unpackEncodedString(DFA35_specialS); + static final short[][] DFA35_transition; static { - int numStates = DFA41_transitionS.length; - DFA41_transition = new short[numStates][]; + int numStates = DFA35_transitionS.length; + DFA35_transition = new short[numStates][]; for (int i=0; i ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) );"; + return "350:1: nullPredicate : ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) );"; + } + } + static final String DFA42_eotS = + "\16\uffff"; + static final String DFA42_eofS = + "\1\uffff\1\5\6\uffff\1\5\1\uffff\1\5\2\uffff\1\5"; + static final String DFA42_minS = + "\1\103\1\37\1\35\1\uffff\1\103\1\uffff\2\104\1\37\1\35\1\37\2\104"+ + "\1\37"; + static final String DFA42_maxS = + "\1\104\1\100\1\111\1\uffff\1\104\1\uffff\2\104\1\100\1\111\1\100"+ + "\2\104\1\100"; + static final String DFA42_acceptS = + "\3\uffff\1\2\1\uffff\1\1\10\uffff"; + static final String DFA42_specialS = + "\16\uffff}>"; + static final String[] DFA42_transitionS = { + "\1\1\1\2", + "\1\5\2\uffff\1\4\34\uffff\2\3", + "\1\6\2\uffff\1\6\4\uffff\6\6\1\uffff\4\6\5\uffff\14\6\2\uffff"+ + "\1\7\3\uffff\3\6", + "", + "\1\10\1\11", + "", + "\1\12", + "\1\12", + "\1\5\37\uffff\2\3", + "\1\13\2\uffff\1\13\4\uffff\6\13\1\uffff\4\13\5\uffff\14\13"+ + "\2\uffff\1\14\3\uffff\3\13", + "\1\5\2\uffff\1\4\34\uffff\2\3", + "\1\15", + "\1\15", + "\1\5\37\uffff\2\3" + }; + + static final short[] DFA42_eot = DFA.unpackEncodedString(DFA42_eotS); + static final short[] DFA42_eof = DFA.unpackEncodedString(DFA42_eofS); + static final char[] DFA42_min = DFA.unpackEncodedStringToUnsignedChars(DFA42_minS); + static final char[] DFA42_max = DFA.unpackEncodedStringToUnsignedChars(DFA42_maxS); + static final short[] DFA42_accept = DFA.unpackEncodedString(DFA42_acceptS); + static final short[] DFA42_special = DFA.unpackEncodedString(DFA42_specialS); + static final short[][] DFA42_transition; + + static { + int numStates = DFA42_transitionS.length; + DFA42_transition = new short[numStates][]; + for (int i=0; i ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) );"; } } @@ -6956,147 +7210,152 @@ public class CMISParser extends Parser { public static final BitSet FOLLOW_LPAREN_in_valueFunction472 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); public static final BitSet FOLLOW_functionArgument_in_valueFunction474 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); public static final BitSet FOLLOW_RPAREN_in_valueFunction477 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qualifier_in_functionArgument508 = new BitSet(new long[]{0x0000000400000000L}); - public static final BitSet FOLLOW_DOT_in_functionArgument510 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_columnName_in_functionArgument512 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_functionArgument536 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_functionArgument546 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_tableName_in_qualifier567 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_correlationName_in_qualifier579 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FROM_in_fromClause616 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_tableReference_in_fromClause618 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_singleTable_in_tableReference636 = new BitSet(new long[]{0x000001C000000002L}); - public static final BitSet FOLLOW_joinedTable_in_tableReference645 = new BitSet(new long[]{0x000001C000000002L}); - public static final BitSet FOLLOW_tableName_in_singleTable674 = new BitSet(new long[]{0xFFE0F7E160000002L,0x0000000000000399L}); - public static final BitSet FOLLOW_AS_in_singleTable678 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_correlationName_in_singleTable681 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_singleTable702 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_joinedTables_in_singleTable704 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_singleTable706 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_joinType_in_joinedTable728 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_JOIN_in_joinedTable731 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_tableReference_in_joinedTable733 = new BitSet(new long[]{0x0000040000000002L}); - public static final BitSet FOLLOW_joinSpecification_in_joinedTable742 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_singleTable_in_joinedTables773 = new BitSet(new long[]{0x000001C000000000L}); - public static final BitSet FOLLOW_joinedTable_in_joinedTables775 = new BitSet(new long[]{0x000001C000000002L}); - public static final BitSet FOLLOW_INNER_in_joinType802 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LEFT_in_joinType814 = new BitSet(new long[]{0x0000020000000002L}); - public static final BitSet FOLLOW_OUTER_in_joinType816 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ON_in_joinSpecification836 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_LPAREN_in_joinSpecification838 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_columnReference_in_joinSpecification842 = new BitSet(new long[]{0x0000080000000000L}); - public static final BitSet FOLLOW_EQUALS_in_joinSpecification844 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_columnReference_in_joinSpecification848 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_joinSpecification850 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_WHERE_in_whereClause900 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_searchOrCondition_in_whereClause902 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition922 = new BitSet(new long[]{0x0000200000000002L}); - public static final BitSet FOLLOW_OR_in_searchOrCondition925 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition927 = new BitSet(new long[]{0x0000200000000002L}); - public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition955 = new BitSet(new long[]{0x0000400000000002L}); - public static final BitSet FOLLOW_AND_in_searchAndCondition958 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition960 = new BitSet(new long[]{0x0000400000000002L}); - public static final BitSet FOLLOW_NOT_in_searchNotCondition987 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_searchTest_in_searchNotCondition989 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_searchTest_in_searchNotCondition1004 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_predicate_in_searchTest1022 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_searchTest1033 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_searchOrCondition_in_searchTest1035 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_searchTest1037 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_comparisonPredicate_in_predicate1054 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_inPredicate_in_predicate1059 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_likePredicate_in_predicate1064 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_nullPredicate_in_predicate1069 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_quantifiedComparisonPredicate_in_predicate1075 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_quantifiedInPredicate_in_predicate1080 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_textSearchPredicate_in_predicate1085 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_folderPredicate_in_predicate1090 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_valueExpression_in_comparisonPredicate1102 = new BitSet(new long[]{0x001F080000000000L}); - public static final BitSet FOLLOW_compOp_in_comparisonPredicate1104 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_literalOrParameterName_in_comparisonPredicate1106 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_qualifier_in_functionArgument512 = new BitSet(new long[]{0x0000000400000000L}); + public static final BitSet FOLLOW_DOT_in_functionArgument514 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_columnName_in_functionArgument516 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_functionArgument540 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_functionArgument550 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_tableName_in_qualifier571 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_correlationName_in_qualifier583 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FROM_in_fromClause620 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_tableReference_in_fromClause622 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_singleTable_in_tableReference640 = new BitSet(new long[]{0x000001C000000002L}); + public static final BitSet FOLLOW_joinedTable_in_tableReference649 = new BitSet(new long[]{0x000001C000000002L}); + public static final BitSet FOLLOW_tableName_in_singleTable678 = new BitSet(new long[]{0xFFE0F7E160000002L,0x0000000000000399L}); + public static final BitSet FOLLOW_AS_in_singleTable682 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_correlationName_in_singleTable685 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_singleTable706 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_joinedTables_in_singleTable708 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_singleTable710 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_joinType_in_joinedTable732 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_JOIN_in_joinedTable735 = new BitSet(new long[]{0xFFE0F7E960000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_tableReference_in_joinedTable737 = new BitSet(new long[]{0x0000040000000002L}); + public static final BitSet FOLLOW_joinSpecification_in_joinedTable746 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_singleTable_in_joinedTables777 = new BitSet(new long[]{0x000001C000000000L}); + public static final BitSet FOLLOW_joinedTable_in_joinedTables779 = new BitSet(new long[]{0x000001C000000002L}); + public static final BitSet FOLLOW_INNER_in_joinType806 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LEFT_in_joinType818 = new BitSet(new long[]{0x0000020000000002L}); + public static final BitSet FOLLOW_OUTER_in_joinType820 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ON_in_joinSpecification840 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_LPAREN_in_joinSpecification842 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_columnReference_in_joinSpecification846 = new BitSet(new long[]{0x0000080000000000L}); + public static final BitSet FOLLOW_EQUALS_in_joinSpecification848 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_columnReference_in_joinSpecification852 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_joinSpecification854 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_WHERE_in_whereClause904 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_searchOrCondition_in_whereClause906 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition926 = new BitSet(new long[]{0x0000200000000002L}); + public static final BitSet FOLLOW_OR_in_searchOrCondition929 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition931 = new BitSet(new long[]{0x0000200000000002L}); + public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition959 = new BitSet(new long[]{0x0000400000000002L}); + public static final BitSet FOLLOW_AND_in_searchAndCondition962 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition964 = new BitSet(new long[]{0x0000400000000002L}); + public static final BitSet FOLLOW_NOT_in_searchNotCondition991 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_searchTest_in_searchNotCondition993 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_searchTest_in_searchNotCondition1008 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_predicate_in_searchTest1026 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_searchTest1037 = new BitSet(new long[]{0xFFE0F7F960000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_searchOrCondition_in_searchTest1039 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_searchTest1041 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_comparisonPredicate_in_predicate1058 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_inPredicate_in_predicate1063 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_likePredicate_in_predicate1068 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_nullPredicate_in_predicate1073 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_quantifiedComparisonPredicate_in_predicate1079 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_quantifiedInPredicate_in_predicate1084 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_textSearchPredicate_in_predicate1089 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_folderPredicate_in_predicate1094 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_valueExpression_in_comparisonPredicate1106 = new BitSet(new long[]{0x001F080000000000L}); + public static final BitSet FOLLOW_compOp_in_comparisonPredicate1108 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_literalOrParameterName_in_comparisonPredicate1110 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_compOp0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literal_in_literalOrParameterName1172 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_parameterName_in_literalOrParameterName1177 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_signedNumericLiteral_in_literal1190 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_characterStringLiteral_in_literal1195 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_inPredicate1207 = new BitSet(new long[]{0x0020800000000000L}); - public static final BitSet FOLLOW_NOT_in_inPredicate1209 = new BitSet(new long[]{0x0020000000000000L}); - public static final BitSet FOLLOW_IN_in_inPredicate1212 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_LPAREN_in_inPredicate1214 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_inValueList_in_inPredicate1216 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_inPredicate1218 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1247 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_COMMA_in_inValueList1250 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1252 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_columnReference_in_likePredicate1278 = new BitSet(new long[]{0x0040800000000000L}); - public static final BitSet FOLLOW_NOT_in_likePredicate1280 = new BitSet(new long[]{0x0040000000000000L}); - public static final BitSet FOLLOW_LIKE_in_likePredicate1283 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000064L}); - public static final BitSet FOLLOW_characterStringLiteral_in_likePredicate1285 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_nullPredicate1319 = new BitSet(new long[]{0x0080000000000000L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_nullPredicate1323 = new BitSet(new long[]{0x0080000000000000L}); - public static final BitSet FOLLOW_IS_in_nullPredicate1326 = new BitSet(new long[]{0x0100800000000000L}); - public static final BitSet FOLLOW_NOT_in_nullPredicate1328 = new BitSet(new long[]{0x0100000000000000L}); - public static final BitSet FOLLOW_NULL_in_nullPredicate1331 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1356 = new BitSet(new long[]{0x001F080000000000L}); - public static final BitSet FOLLOW_compOp_in_quantifiedComparisonPredicate1358 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_ANY_in_quantifiedComparisonPredicate1360 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1362 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ANY_in_quantifiedInPredicate1391 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1393 = new BitSet(new long[]{0x0020800000000000L}); - public static final BitSet FOLLOW_NOT_in_quantifiedInPredicate1395 = new BitSet(new long[]{0x0020000000000000L}); - public static final BitSet FOLLOW_IN_in_quantifiedInPredicate1398 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_LPAREN_in_quantifiedInPredicate1401 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); - public static final BitSet FOLLOW_inValueList_in_quantifiedInPredicate1403 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_quantifiedInPredicate1405 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CONTAINS_in_textSearchPredicate1434 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_LPAREN_in_textSearchPredicate1436 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); - public static final BitSet FOLLOW_qualifier_in_textSearchPredicate1439 = new BitSet(new long[]{0x0000000080000000L}); - public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1441 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); - public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1445 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); - public static final BitSet FOLLOW_textSearchExpression_in_textSearchPredicate1449 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_textSearchPredicate1451 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate1476 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1479 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_TREE_in_folderPredicate1500 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1502 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs1524 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs1527 = new BitSet(new long[]{0x0000000080000000L}); - public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1529 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1533 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_folderId_in_folderPredicateArgs1537 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs1539 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ORDER_in_orderByClause1578 = new BitSet(new long[]{0x4000000000000000L}); - public static final BitSet FOLLOW_BY_in_orderByClause1580 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1582 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_COMMA_in_orderByClause1586 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1588 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_columnReference_in_sortSpecification1614 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_sortSpecification1632 = new BitSet(new long[]{0x8000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_ASC_in_sortSpecification1638 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DESC_in_sortSpecification1644 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_correlationName1671 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_tableName1685 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_columnName1703 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_multiValuedColumnName1722 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_COLON_in_parameterName1740 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_identifier_in_parameterName1742 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_characterStringLiteral_in_folderId1765 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression1786 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_identifier1798 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1809 = new BitSet(new long[]{0xFFE0F7E120000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_keyWordOrId_in_identifier1811 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1813 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1833 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral1848 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1867 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral1890 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literal_in_literalOrParameterName1176 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parameterName_in_literalOrParameterName1181 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_signedNumericLiteral_in_literal1194 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_characterStringLiteral_in_literal1199 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_inPredicate1211 = new BitSet(new long[]{0x0020800000000000L}); + public static final BitSet FOLLOW_NOT_in_inPredicate1213 = new BitSet(new long[]{0x0020000000000000L}); + public static final BitSet FOLLOW_IN_in_inPredicate1216 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_LPAREN_in_inPredicate1218 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_inValueList_in_inPredicate1220 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_inPredicate1222 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1251 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_COMMA_in_inValueList1254 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1256 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_columnReference_in_likePredicate1282 = new BitSet(new long[]{0x0040800000000000L}); + public static final BitSet FOLLOW_NOT_in_likePredicate1284 = new BitSet(new long[]{0x0040000000000000L}); + public static final BitSet FOLLOW_LIKE_in_likePredicate1287 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000064L}); + public static final BitSet FOLLOW_characterStringLiteral_in_likePredicate1289 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_nullPredicate1323 = new BitSet(new long[]{0x0080000000000000L}); + public static final BitSet FOLLOW_multiValuedColumnReference_in_nullPredicate1327 = new BitSet(new long[]{0x0080000000000000L}); + public static final BitSet FOLLOW_IS_in_nullPredicate1330 = new BitSet(new long[]{0x0100000000000000L}); + public static final BitSet FOLLOW_NULL_in_nullPredicate1332 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_nullPredicate1361 = new BitSet(new long[]{0x0080000000000000L}); + public static final BitSet FOLLOW_multiValuedColumnReference_in_nullPredicate1365 = new BitSet(new long[]{0x0080000000000000L}); + public static final BitSet FOLLOW_IS_in_nullPredicate1368 = new BitSet(new long[]{0x0000800000000000L}); + public static final BitSet FOLLOW_NOT_in_nullPredicate1370 = new BitSet(new long[]{0x0100000000000000L}); + public static final BitSet FOLLOW_NULL_in_nullPredicate1372 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1400 = new BitSet(new long[]{0x001F080000000000L}); + public static final BitSet FOLLOW_compOp_in_quantifiedComparisonPredicate1402 = new BitSet(new long[]{0x0200000000000000L}); + public static final BitSet FOLLOW_ANY_in_quantifiedComparisonPredicate1404 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1406 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ANY_in_quantifiedInPredicate1435 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1437 = new BitSet(new long[]{0x0020800000000000L}); + public static final BitSet FOLLOW_NOT_in_quantifiedInPredicate1439 = new BitSet(new long[]{0x0020000000000000L}); + public static final BitSet FOLLOW_IN_in_quantifiedInPredicate1442 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_LPAREN_in_quantifiedInPredicate1445 = new BitSet(new long[]{0xFFE0F7F160000000L,0x00000000000003FFL}); + public static final BitSet FOLLOW_inValueList_in_quantifiedInPredicate1447 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_quantifiedInPredicate1449 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CONTAINS_in_textSearchPredicate1478 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_LPAREN_in_textSearchPredicate1480 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); + public static final BitSet FOLLOW_qualifier_in_textSearchPredicate1483 = new BitSet(new long[]{0x0000000080000000L}); + public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1485 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); + public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1489 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); + public static final BitSet FOLLOW_textSearchExpression_in_textSearchPredicate1493 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_textSearchPredicate1495 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate1520 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1523 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_TREE_in_folderPredicate1544 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1546 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs1568 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs1571 = new BitSet(new long[]{0x0000000080000000L}); + public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1573 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1577 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_folderId_in_folderPredicateArgs1581 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs1583 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ORDER_in_orderByClause1622 = new BitSet(new long[]{0x4000000000000000L}); + public static final BitSet FOLLOW_BY_in_orderByClause1624 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause1626 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_COMMA_in_orderByClause1630 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause1632 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification1658 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification1676 = new BitSet(new long[]{0x8000000000000000L,0x0000000000000001L}); + public static final BitSet FOLLOW_ASC_in_sortSpecification1682 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DESC_in_sortSpecification1688 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_correlationName1715 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_tableName1729 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_columnName1747 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_multiValuedColumnName1766 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_COLON_in_parameterName1784 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_identifier_in_parameterName1786 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_characterStringLiteral_in_folderId1809 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression1830 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_identifier1842 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1853 = new BitSet(new long[]{0xFFE0F7E120000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_keyWordOrId_in_identifier1855 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1857 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1877 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral1892 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1911 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral1934 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_keyWord0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_keyWord_in_keyWordOrId2099 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_keyWordOrId2111 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_keyWord_in_keyWordOrId2143 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_keyWordOrId2155 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_valueExpression_in_synpred1_CMIS287 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_tableName_in_synpred2_CMIS562 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_joinedTable_in_synpred3_CMIS640 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_joinSpecification_in_synpred4_CMIS737 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_synpred5_CMIS1315 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_tableName_in_synpred2_CMIS566 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_joinedTable_in_synpred3_CMIS644 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_joinSpecification_in_synpred4_CMIS741 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_synpred5_CMIS1319 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_synpred6_CMIS1357 = new BitSet(new long[]{0x0000000000000002L}); } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/Argument.java b/source/java/org/alfresco/repo/search/impl/querymodel/Argument.java index b3f3ac8da9..9186ed6553 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/Argument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/Argument.java @@ -36,5 +36,5 @@ public interface Argument { public String getName(); - public Serializable getValue(); + public Serializable getValue(FunctionEvaluationContext context); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java index b368ecac1c..18f2ea1c7b 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java @@ -27,9 +27,12 @@ package org.alfresco.repo.search.impl.querymodel; import java.io.Serializable; import java.util.Map; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.QName; +import org.apache.lucene.search.Query; /** * @author andyh @@ -44,4 +47,10 @@ public interface FunctionEvaluationContext public Serializable getProperty(NodeRef nodeRef, QName propertyQName); public NodeService getNodeService(); + + public Float getScore(); + + public Query buildLuceneEquality(LuceneQueryParser lqp, QName propertyQName, Serializable value) throws ParseException; + + public Query buildLuceneExists(LuceneQueryParser lqp, QName propertyQName, Boolean not) throws ParseException; } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/LiteralArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/LiteralArgument.java index dd196b31cb..65678484eb 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/LiteralArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/LiteralArgument.java @@ -24,8 +24,6 @@ */ package org.alfresco.repo.search.impl.querymodel; -import java.io.Serializable; - import org.alfresco.service.namespace.QName; /** @@ -34,6 +32,4 @@ import org.alfresco.service.namespace.QName; public interface LiteralArgument extends StaticArgument { public QName getType(); - - public Serializable getValue(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/QueryEngine.java b/source/java/org/alfresco/repo/search/impl/querymodel/QueryEngine.java index 4543b21814..bbeb0d00e8 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/QueryEngine.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/QueryEngine.java @@ -24,8 +24,6 @@ */ package org.alfresco.repo.search.impl.querymodel; -import java.io.IOException; - import org.alfresco.service.cmr.search.ResultSet; /** @@ -34,7 +32,7 @@ import org.alfresco.service.cmr.search.ResultSet; */ public interface QueryEngine { - public ResultSet executeQuery(Query query, String selectorName, QueryOptions options) throws IOException; + public ResultSet executeQuery(Query query, String selectorName, QueryOptions options, FunctionEvaluationContext functionContext); public QueryModelFactory getQueryModelFactory(); } 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 index f4d34bc099..04e7212407 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunctionArgument.java @@ -30,6 +30,7 @@ import java.util.Map; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Function; import org.alfresco.repo.search.impl.querymodel.FunctionArgument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; /** * @author andyh @@ -52,9 +53,9 @@ public class BaseFunctionArgument extends BaseDynamicArgument implements Functio /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + return function.getValue(arguments, context); } /* (non-Javadoc) diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java index bcbea8f1d3..b10626b6b6 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java @@ -25,9 +25,11 @@ package org.alfresco.repo.search.impl.querymodel.impl; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.ListArgument; /** @@ -58,9 +60,16 @@ public class BaseListArgument extends BaseStaticArgument implements ListArgument /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + ArrayList answer = new ArrayList(arguments.size()); + for(Argument argument : arguments) + { + Serializable value = argument.getValue(context); + answer.add(value); + } + return answer; + } public String toString() diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseLiteralArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseLiteralArgument.java index b80d2d4008..e505aa025c 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseLiteralArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseLiteralArgument.java @@ -26,6 +26,7 @@ package org.alfresco.repo.search.impl.querymodel.impl; import java.io.Serializable; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.LiteralArgument; import org.alfresco.service.namespace.QName; @@ -50,7 +51,7 @@ public class BaseLiteralArgument extends BaseStaticArgument implements LiteralAr /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.LiteralArgument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { return value; } @@ -69,7 +70,7 @@ public class BaseLiteralArgument extends BaseStaticArgument implements LiteralAr builder.append("BaseLiteralArgument["); builder.append("name=").append(getName()).append(", "); builder.append("type=").append(getType()).append(", "); - builder.append("value=").append(getValue()).append(", "); + builder.append("value=").append(getValue(null)).append(", "); builder.append("]"); return builder.toString(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseParameterArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseParameterArgument.java index f522541b04..c395db4ac8 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseParameterArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseParameterArgument.java @@ -26,6 +26,7 @@ package org.alfresco.repo.search.impl.querymodel.impl; import java.io.Serializable; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.ParameterArgument; /** @@ -56,7 +57,7 @@ public class BaseParameterArgument extends BaseStaticArgument implements Paramet /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { throw new UnsupportedOperationException(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BasePropertyArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BasePropertyArgument.java index 45889c377b..582d4ac7d0 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BasePropertyArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BasePropertyArgument.java @@ -26,7 +26,9 @@ package org.alfresco.repo.search.impl.querymodel.impl; import java.io.Serializable; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.PropertyArgument; +import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; /** @@ -74,9 +76,10 @@ public class BasePropertyArgument extends BaseDynamicArgument implements Propert * * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + NodeRef nodeRef = context.getNodeRefs().get(getSelector()); + return context.getProperty(nodeRef, getPropertyName()); } public String toString() diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseSelectorArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseSelectorArgument.java index dbae43657e..9d82d2ce45 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseSelectorArgument.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseSelectorArgument.java @@ -26,6 +26,7 @@ package org.alfresco.repo.search.impl.querymodel.impl; import java.io.Serializable; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.SelectorArgument; /** @@ -60,9 +61,9 @@ public class BaseSelectorArgument extends BaseStaticArgument implements Selecto /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() */ - public Serializable getValue() + public Serializable getValue(FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + return getSelector(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java index d98f5a020b..9eb087abbe 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java @@ -77,9 +77,9 @@ public class Child extends BaseFunction public Serializable getValue(Map args, FunctionEvaluationContext context) { Argument selectorArgument = args.get(ARG_SELECTOR); - String selectorName = DefaultTypeConverter.INSTANCE.convert(String.class, selectorArgument.getValue()); + String selectorName = DefaultTypeConverter.INSTANCE.convert(String.class, selectorArgument.getValue(context)); Argument parentArgument = args.get(ARG_PARENT); - NodeRef parent = DefaultTypeConverter.INSTANCE.convert(NodeRef.class, parentArgument.getValue()); + NodeRef parent = DefaultTypeConverter.INSTANCE.convert(NodeRef.class, parentArgument.getValue(context)); NodeRef child = context.getNodeRefs().get(selectorName); diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Lower.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Lower.java index df27f3a65a..cc95344281 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Lower.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Lower.java @@ -32,9 +32,12 @@ import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.PropertyArgument; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; /** * @author andyh @@ -70,7 +73,14 @@ public class Lower extends BaseFunction */ public Serializable getValue(Map args, FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + Argument arg = args.get(ARG_PROPERTY); + if(!(arg instanceof PropertyArgument)) + { + throw new QueryModelException("Function "+NAME+" requires a property argument"); + } + Serializable value = arg.getValue(context); + String stringValue = DefaultTypeConverter.INSTANCE.convert(String.class, value); + return stringValue.toLowerCase(); } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java index df9f3d3648..52118bf3d0 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java @@ -37,8 +37,6 @@ import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.namespace.QName; /** * @author andyh @@ -79,13 +77,7 @@ public class PropertyAccessor extends BaseFunction { throw new QueryModelException("Function "+NAME+" requires a property argument"); } - PropertyArgument propertyArgument = (PropertyArgument)arg; - String selectorName = propertyArgument.getSelector(); - QName propertyQName = propertyArgument.getPropertyName(); - - NodeRef nodeRef = context.getNodeRefs().get(selectorName); - return context.getProperty(nodeRef, propertyQName); - + return arg.getValue(context); } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java index 888d1721a0..1923641914 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java @@ -70,7 +70,15 @@ public class Score extends BaseFunction */ public Serializable getValue(Map args, FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + Argument qualifier = args.get(ARG_QUALIFIER); + if(qualifier != null) + { + return context.getScores().get(qualifier.getValue(context)); + } + else + { + return context.getScore(); + } } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java index c572975cbb..fa393d5fa9 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java @@ -32,9 +32,12 @@ import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.PropertyArgument; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; /** * @author andyh @@ -70,7 +73,14 @@ public class Upper extends BaseFunction */ public Serializable getValue(Map args, FunctionEvaluationContext context) { - throw new UnsupportedOperationException(); + Argument arg = args.get(ARG_PROPERTY); + if(!(arg instanceof PropertyArgument)) + { + throw new QueryModelException("Function "+NAME+" requires a property argument"); + } + Serializable value = arg.getValue(context); + String stringValue = DefaultTypeConverter.INSTANCE.convert(String.class, value); + return stringValue.toUpperCase(); } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java index ea2c03fc63..fc3e8c8265 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java @@ -25,15 +25,22 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.util.List; +import java.util.Map; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.Negation; import org.alfresco.repo.search.impl.querymodel.impl.BaseConjunction; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.BooleanClause.Occur; /** * @author andyh - * */ -public class LuceneConjunction extends BaseConjunction +public class LuceneConjunction extends BaseConjunction implements LuceneQueryBuilderComponent { /** @@ -44,4 +51,42 @@ public class LuceneConjunction extends BaseConjunction super(constraints); } + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.lang.String, + * java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, + * org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + BooleanQuery query = new BooleanQuery(); + for (Constraint constraint : getConstraints()) + { + if (constraint instanceof LuceneQueryBuilderComponent) + { + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) constraint; + Query constraintQuery = luceneQueryBuilderComponent.addComponent(selector, functionArgs, luceneContext, functionContext); + if (constraintQuery != null) + { + if (constraint instanceof Negation) + { + query.add(constraintQuery, Occur.MUST_NOT); + } + else + { + query.add(constraintQuery, Occur.MUST); + } + } + } + else + { + throw new UnsupportedOperationException(); + } + } + return query; + + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java index f3856e5b46..9cf8789d8b 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java @@ -25,15 +25,23 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.util.List; +import java.util.Map; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.Negation; import org.alfresco.repo.search.impl.querymodel.impl.BaseDisjunction; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.BooleanClause.Occur; /** * @author andyh * */ -public class LuceneDisjunction extends BaseDisjunction +public class LuceneDisjunction extends BaseDisjunction implements LuceneQueryBuilderComponent { /** @@ -44,4 +52,39 @@ public class LuceneDisjunction extends BaseDisjunction super(constraints); } + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.lang.String, java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + BooleanQuery query = new BooleanQuery(); + for(Constraint constraint : getConstraints()) + { + if (constraint instanceof LuceneQueryBuilderComponent) + { + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) constraint; + Query constraintQuery = luceneQueryBuilderComponent.addComponent(selector, functionArgs, luceneContext, functionContext); + if (constraintQuery != null) + { + if (constraint instanceof Negation) + { + query.add(constraintQuery, Occur.MUST_NOT); + } + else + { + query.add(constraintQuery, Occur.SHOULD); + } + } + } + else + { + throw new UnsupportedOperationException(); + } + } + return query; + + + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionalConstraint.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionalConstraint.java index f69d78515f..8c79be136f 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionalConstraint.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneFunctionalConstraint.java @@ -26,15 +26,18 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.util.Map; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Function; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.BaseFunctionalConstraint; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneFunctionalConstraint extends BaseFunctionalConstraint +public class LuceneFunctionalConstraint extends BaseFunctionalConstraint implements LuceneQueryBuilderComponent { /** @@ -46,4 +49,25 @@ public class LuceneFunctionalConstraint extends BaseFunctionalConstraint super(function, arguments); } + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) throws ParseException + { + Function function = getFunction(); + if(function != null) + { + if(function instanceof LuceneQueryBuilderComponent) + { + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent)function; + return luceneQueryBuilderComponent.addComponent(selector, getFunctionArguments(), luceneContext, functionContext); + } + else + { + throw new UnsupportedOperationException(); + } + } + return null; + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java index e337dafef3..9f88b39d27 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java @@ -24,14 +24,20 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.BaseNegation; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneNegation extends BaseNegation +public class LuceneNegation extends BaseNegation implements LuceneQueryBuilderComponent { /** @@ -42,4 +48,22 @@ public class LuceneNegation extends BaseNegation super(constraint); } + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.lang.String, java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + if (getConstraint() instanceof LuceneQueryBuilderComponent) + { + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) getConstraint(); + Query constraintQuery = luceneQueryBuilderComponent.addComponent(selector, functionArgs, luceneContext, functionContext); + return constraintQuery; + } + else + { + throw new UnsupportedOperationException(); + } + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java index 64c3335675..62dd58eee1 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java @@ -26,14 +26,18 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.util.List; +import org.alfresco.repo.search.impl.lucene.ParseException; import org.alfresco.repo.search.impl.querymodel.Column; import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.Negation; import org.alfresco.repo.search.impl.querymodel.Ordering; import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.repo.search.impl.querymodel.Source; import org.alfresco.repo.search.impl.querymodel.impl.BaseQuery; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.BooleanClause.Occur; /** * @author andyh @@ -52,21 +56,26 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder super(columns, source, constraint, orderings); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilder#buildQuery() */ - public BooleanQuery buildQuery(String selectorName, DictionaryService dictionaryService) + public Query buildQuery(String selectorName, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) throws ParseException { + BooleanQuery luceneQuery = new BooleanQuery(); - BooleanQuery current = luceneQuery; Selector selector = getSource().getSelector(selectorName); - if(selector != null) + if (selector != null) { - if(selector instanceof LuceneQueryBuilderComponent) + if (selector instanceof LuceneQueryBuilderComponent) { - LuceneQueryBuilderComponent LuceneQueryBuilderComponent = (LuceneQueryBuilderComponent)selector; - current = LuceneQueryBuilderComponent.addComponent(luceneQuery, current, dictionaryService); - return luceneQuery; + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) selector; + Query selectorQuery = luceneQueryBuilderComponent.addComponent(selectorName, null, luceneContext, functionContext); + if (selectorQuery != null) + { + luceneQuery.add(selectorQuery, Occur.MUST); + } } else { @@ -77,7 +86,34 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder { throw new UnsupportedOperationException(); } - + + Constraint constraint = getConstraint(); + if (constraint != null) + { + if (constraint instanceof LuceneQueryBuilderComponent) + { + LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) constraint; + Query constraintQuery = luceneQueryBuilderComponent.addComponent(selectorName, null, luceneContext, functionContext); + if (constraintQuery != null) + { + if (constraint instanceof Negation) + { + luceneQuery.add(constraintQuery, Occur.MUST_NOT); + } + else + { + luceneQuery.add(constraintQuery, Occur.MUST); + } + } + } + else + { + throw new UnsupportedOperationException(); + } + } + + return luceneQuery; + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilder.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilder.java index 8140ba3940..554f0e215b 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilder.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilder.java @@ -24,13 +24,14 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.apache.lucene.search.BooleanQuery; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.apache.lucene.search.Query; /** * @author andyh */ public interface LuceneQueryBuilder { - public BooleanQuery buildQuery(String selectorName, DictionaryService dictionaryService); + public Query buildQuery(String selectorName, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) throws ParseException; } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderComponent.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderComponent.java index 57b726b4e1..7b71d065af 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderComponent.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderComponent.java @@ -24,14 +24,17 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.apache.lucene.search.BooleanQuery; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.apache.lucene.search.Query; /** * @author andyh - * */ public interface LuceneQueryBuilderComponent { - public BooleanQuery addComponent(BooleanQuery base, BooleanQuery current, DictionaryService dictionaryService); + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) throws ParseException; } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderContext.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderContext.java new file mode 100644 index 0000000000..ddcc271b06 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryBuilderContext.java @@ -0,0 +1,77 @@ +/* + * 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 org.alfresco.repo.search.impl.lucene.LuceneAnalyser; +import org.alfresco.repo.search.impl.lucene.LuceneConfig; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.QueryParser; +import org.alfresco.repo.tenant.TenantService; +import org.alfresco.service.cmr.dictionary.DictionaryService; +import org.alfresco.service.cmr.search.SearchParameters; +import org.alfresco.service.namespace.NamespacePrefixResolver; + +/** + * @author andyh + */ +public class LuceneQueryBuilderContext +{ + private LuceneQueryParser lqp; + + private NamespacePrefixResolver namespacePrefixResolver; + + public LuceneQueryBuilderContext(DictionaryService dictionaryService, NamespacePrefixResolver namespacePrefixResolver, TenantService tenantService, + SearchParameters searchParameters, LuceneConfig config) + { + LuceneAnalyser analyzer = new LuceneAnalyser(dictionaryService, searchParameters.getMlAnalaysisMode() == null ? config.getDefaultMLSearchAnalysisMode() : searchParameters + .getMlAnalaysisMode()); + lqp = new LuceneQueryParser("TEXT", analyzer); + lqp.setDefaultOperator(QueryParser.OR_OPERATOR); + lqp.setDictionaryService(dictionaryService); + lqp.setNamespacePrefixResolver(namespacePrefixResolver); + lqp.setTenantService(tenantService); + lqp.setSearchParameters(searchParameters); + lqp.setLuceneConfig(config); + + this.namespacePrefixResolver = namespacePrefixResolver; + } + + /** + * @return + */ + public LuceneQueryParser getLuceneQueryParser() + { + return lqp; + } + + /** + * @return + */ + public NamespacePrefixResolver getNamespacePrefixResolver() + { + return namespacePrefixResolver; + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java index 4ab25ca9c3..0b02ec02cf 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java @@ -26,10 +26,13 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.io.IOException; +import org.alfresco.repo.search.SearcherException; import org.alfresco.repo.search.impl.lucene.ClosingIndexSearcher; import org.alfresco.repo.search.impl.lucene.LuceneIndexerAndSearcher; import org.alfresco.repo.search.impl.lucene.LuceneResultSet; import org.alfresco.repo.search.impl.lucene.LuceneSearcher; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.Query; import org.alfresco.repo.search.impl.querymodel.QueryEngine; import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; @@ -42,7 +45,7 @@ import org.alfresco.service.cmr.search.LimitBy; import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.SearchParameters; import org.alfresco.service.cmr.search.SearchService; -import org.apache.lucene.search.BooleanQuery; +import org.alfresco.service.namespace.NamespaceService; import org.apache.lucene.search.Hits; /** @@ -58,6 +61,8 @@ public class LuceneQueryEngine implements QueryEngine private TenantService tenantService; + private NamespaceService namespaceService; + /** * @param dictionaryService * the dictionaryService to set @@ -94,47 +99,69 @@ public class LuceneQueryEngine implements QueryEngine this.tenantService = tenantService; } + /** + * @param namespaceService + * the namespaceService to set + */ + public void setNamespaceService(NamespaceService namespaceService) + { + this.namespaceService = namespaceService; + } + public QueryModelFactory getQueryModelFactory() { return new LuceneQueryModelFactory(); } - public ResultSet executeQuery(Query query, String selectorName, QueryOptions options) throws IOException + public ResultSet executeQuery(Query query, String selectorName, QueryOptions options, FunctionEvaluationContext functionContext) { - StoreRef storeRef = options.getStores().get(0); - if (query instanceof LuceneQueryBuilder) + SearchParameters searchParameters = new SearchParameters(); + searchParameters.setBulkFetch(options.getFetchSize() > 0); + searchParameters.setBulkFetchSize(options.getFetchSize()); + if (options.getMaxItems() > 0) { - SearchService searchService = indexAndSearcher.getSearcher(storeRef, options.isIncludeInTransactionData()); - if (searchService instanceof LuceneSearcher) + searchParameters.setLimit(options.getMaxItems() + options.getSkipCount()); + } + else + { + searchParameters.setLimitBy(LimitBy.UNLIMITED); + } + LuceneQueryBuilderContext luceneContext = new LuceneQueryBuilderContext(dictionaryService, namespaceService, tenantService, searchParameters, indexAndSearcher); + try + { + StoreRef storeRef = options.getStores().get(0); + if (query instanceof LuceneQueryBuilder) { - LuceneSearcher luceneSearcher = (LuceneSearcher) searchService; - ClosingIndexSearcher searcher = luceneSearcher.getClosingIndexSearcher(); - LuceneQueryBuilder builder = (LuceneQueryBuilder) query; - BooleanQuery luceneQuery = builder.buildQuery(selectorName, dictionaryService); - System.out.println(luceneQuery); - SearchParameters sp = new SearchParameters(); - sp.setBulkFetch(options.getFetchSize() > 0); - sp.setBulkFetchSize(options.getFetchSize()); - if (options.getMaxItems() > 0) + SearchService searchService = indexAndSearcher.getSearcher(storeRef, options.isIncludeInTransactionData()); + if (searchService instanceof LuceneSearcher) { - sp.setLimit(options.getMaxItems() + options.getSkipCount()); + LuceneSearcher luceneSearcher = (LuceneSearcher) searchService; + ClosingIndexSearcher searcher = luceneSearcher.getClosingIndexSearcher(); + LuceneQueryBuilder builder = (LuceneQueryBuilder) query; + org.apache.lucene.search.Query luceneQuery = builder.buildQuery(selectorName, luceneContext, functionContext); + System.out.println(luceneQuery); + + Hits hits = searcher.search(luceneQuery); + return new LuceneResultSet(hits, searcher, nodeService, tenantService, null, searchParameters, indexAndSearcher); + } else { - sp.setLimitBy(LimitBy.UNLIMITED); + throw new UnsupportedOperationException(); } - Hits hits = searcher.search(luceneQuery); - return new LuceneResultSet(hits, searcher, nodeService, tenantService, null, sp, indexAndSearcher); - } else { throw new UnsupportedOperationException(); } } - else + catch (ParseException e) { - throw new UnsupportedOperationException(); + throw new SearcherException("Failed to parse query: " + e); + } + catch (IOException e) + { + throw new SearcherException("IO exception during search", e); } } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneSelector.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneSelector.java index f3b2fc1756..e2eaa98711 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneSelector.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneSelector.java @@ -24,15 +24,15 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene; -import java.util.Collection; +import java.util.Map; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.BaseSelector; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.namespace.QName; -import org.apache.lucene.index.Term; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.BooleanClause.Occur; +import org.apache.lucene.search.Query; /** * @author andyh @@ -53,20 +53,11 @@ public class LuceneSelector extends BaseSelector implements LuceneQueryBuilderCo /* (non-Javadoc) * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, org.apache.lucene.search.BooleanQuery) */ - public BooleanQuery addComponent(BooleanQuery base, BooleanQuery current, DictionaryService dictionaryService) + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) throws ParseException { - Collection subclasses = dictionaryService.getSubTypes(getType(), true); - BooleanQuery booleanQuery = new BooleanQuery(); - for (QName qname : subclasses) - { - TermQuery termQuery = new TermQuery(new Term("TYPE", qname.toString())); - if (termQuery != null) - { - booleanQuery.add(termQuery, Occur.SHOULD); - } - } - base.add(booleanQuery, Occur.MUST); - return current; + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + return lqp.getFieldQuery("TYPE", getType().toString()); + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java index 56401ee28b..021ad6453a 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java @@ -24,13 +24,27 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.io.Serializable; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneChild extends Child +public class LuceneChild extends Child implements LuceneQueryBuilderComponent { /** @@ -40,5 +54,51 @@ public class LuceneChild extends Child { super(); } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument argument = functionArgs.get(ARG_PARENT); + String id = (String) argument.getValue(functionContext); + NodeRef nodeRef; + if(NodeRef.isNodeRef(id)) + { + nodeRef = new NodeRef(id); + } + else + { + int lastIndex = id.lastIndexOf('/'); + String versionLabel = id.substring(lastIndex+1); + String actualId = id.substring(0, lastIndex); + if(NodeRef.isNodeRef(actualId)) + { + nodeRef = new NodeRef(actualId); + Serializable value = functionContext.getNodeService().getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL); + if (value != null) + { + String actualVersionLabel = DefaultTypeConverter.INSTANCE.convert(String.class, value); + if(!actualVersionLabel.equals(versionLabel)) + { + throw new QueryModelException("Object id does not refer to the current version"+id); + } + } + } + else + { + throw new QueryModelException("Invalid Object Id "+id); + } + } + Query query = lqp.getFieldQuery("PARENT", nodeRef.toString()); + return query; + + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java index ba191154cd..d1c8d6491c 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java @@ -24,13 +24,28 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.io.Serializable; +import java.util.Map; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.Path; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneDescendant extends Descendant +public class LuceneDescendant extends Descendant implements LuceneQueryBuilderComponent { /** @@ -41,4 +56,53 @@ public class LuceneDescendant extends Descendant super(); } + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument argument = functionArgs.get(ARG_ANCESTOR); + String id = (String) argument.getValue(functionContext); + NodeRef nodeRef; + if(NodeRef.isNodeRef(id)) + { + nodeRef = new NodeRef(id); + } + else + { + int lastIndex = id.lastIndexOf('/'); + String versionLabel = id.substring(lastIndex+1); + String actualId = id.substring(0, lastIndex); + if(NodeRef.isNodeRef(actualId)) + { + nodeRef = new NodeRef(actualId); + Serializable value = functionContext.getNodeService().getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL); + if (value != null) + { + String actualVersionLabel = DefaultTypeConverter.INSTANCE.convert(String.class, value); + if(!actualVersionLabel.equals(versionLabel)) + { + throw new QueryModelException("Object id does not refer to the current version"+id); + } + } + } + else + { + throw new QueryModelException("Invalid Object Id "+id); + } + } + Path path = functionContext.getNodeService().getPath(nodeRef); + StringBuilder builder = new StringBuilder(path.toPrefixString(luceneContext.getNamespacePrefixResolver())); + builder.append("//*"); + Query query = lqp.getFieldQuery("PATH", builder.toString()); + return query; + + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneEquals.java index 7e1b73f2e3..d1e3c7ceb7 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneEquals.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneEquals.java @@ -24,16 +24,89 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.PropertyArgument; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; +import org.alfresco.repo.search.impl.querymodel.StaticArgument; import org.alfresco.repo.search.impl.querymodel.impl.functions.Equals; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneEquals extends Equals +public class LuceneEquals extends Equals implements LuceneQueryBuilderComponent { public LuceneEquals() { super(); } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument lhs = functionArgs.get(ARG_LHS); + Argument rhs = functionArgs.get(ARG_RHS); + + PropertyArgument propertyArgument; + StaticArgument staticArgument; + + if(lhs instanceof PropertyArgument) + { + if(rhs instanceof PropertyArgument) + { + throw new QueryModelException("Implicit join is not supported"); + } + else if(rhs instanceof StaticArgument) + { + propertyArgument = (PropertyArgument)lhs; + staticArgument = (StaticArgument) rhs; + } + else + { + throw new QueryModelException("Argument of type "+rhs.getClass().getName()+" is not supported"); + } + } + else if(rhs instanceof PropertyArgument) + { + if(lhs instanceof StaticArgument) + { + propertyArgument = (PropertyArgument)rhs; + staticArgument = (StaticArgument) lhs; + } + else + { + throw new QueryModelException("Argument of type "+lhs.getClass().getName()+" is not supported"); + } + } + else + { + throw new QueryModelException("Equals must have one property argument"); + } + + Query query = functionContext.buildLuceneEquality(lqp, propertyArgument.getPropertyName(), staticArgument.getValue(functionContext)); + + if(query == null) + { + throw new QueryModelException("No query time mapping for property "+propertyArgument.getPropertyName()+", it should not be allowed in predicates"); + } + + return query; + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java index 74502a7f25..5610bea4bb 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java @@ -24,13 +24,24 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.PropertyArgument; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.apache.lucene.search.Query; /** * @author andyh - * */ -public class LuceneExists extends Exists +public class LuceneExists extends Exists implements LuceneQueryBuilderComponent { /** @@ -41,4 +52,21 @@ public class LuceneExists extends Exists super(); } + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + PropertyArgument propertyArgument = (PropertyArgument) functionArgs.get(ARG_PROPERTY); + Argument inverseArgument = functionArgs.get(ARG_NOT); + Boolean not = DefaultTypeConverter.INSTANCE.convert(Boolean.class, inverseArgument.getValue(functionContext)); + + Query query = functionContext.buildLuceneExists(lqp, propertyArgument.getPropertyName(), not); + + if (query == null) + { + throw new QueryModelException("No query time mapping for property " + propertyArgument.getPropertyName() + ", it should not be allowed in predicates"); + } + + return query; + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java index 5ee213debe..02762b388a 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java @@ -24,13 +24,21 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.search.Query; /** * @author andyh - * */ -public class LuceneFTSExactTerm extends FTSExactTerm +public class LuceneFTSExactTerm extends FTSExactTerm implements LuceneQueryBuilderComponent { /** @@ -40,4 +48,23 @@ public class LuceneFTSExactTerm extends FTSExactTerm { super(); } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument argument = functionArgs.get(ARG_TERM); + String term = (String) argument.getValue(functionContext); + + Query query = lqp.getFieldQuery("TEXT", term); + return query; + + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java index ce125aa377..06cba4bfa5 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java @@ -24,13 +24,22 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneFTSPhrase extends FTSPhrase +public class LuceneFTSPhrase extends FTSPhrase implements LuceneQueryBuilderComponent { /** * @@ -39,4 +48,23 @@ public class LuceneFTSPhrase extends FTSPhrase { super(); } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument argument = functionArgs.get(ARG_PHRASE); + String term = (String) argument.getValue(functionContext); + + Query query = lqp.getFieldQuery("TEXT", term); + return query; + + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java index 67a25a72e2..d7f17d57c2 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java @@ -24,13 +24,21 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; + +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.ParseException; +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.search.Query; /** * @author andyh - * */ -public class LuceneFTSTerm extends FTSTerm +public class LuceneFTSTerm extends FTSTerm implements LuceneQueryBuilderComponent { /** * @@ -39,4 +47,24 @@ public class LuceneFTSTerm extends FTSTerm { super(); } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, + * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, + * java.lang.String) + */ + public Query addComponent(String selector, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); + Argument argument = functionArgs.get(ARG_TERM); + String term = (String) argument.getValue(functionContext); + + Query query = lqp.getFieldQuery("TEXT", term); + return query; + + } + }