Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id EA71598A3 for ; Tue, 20 Mar 2012 13:50:18 +0000 (UTC) Received: (qmail 31930 invoked by uid 500); 20 Mar 2012 13:50:18 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 31911 invoked by uid 500); 20 Mar 2012 13:50:18 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-commits@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 31902 invoked by uid 99); 20 Mar 2012 13:50:18 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Mar 2012 13:50:18 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Mar 2012 13:50:12 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id D672F2388978; Tue, 20 Mar 2012 13:49:50 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1302895 [2/2] - in /jackrabbit/oak/trunk/oak-jcr/src: main/java/org/apache/jackrabbit/oak/jcr/query/ main/java/org/apache/jackrabbit/oak/jcr/query/qom/ test/java/org/apache/jackrabbit/oak/jcr/query/ test/java/org/apache/jackrabbit/oak/jcr/... Date: Tue, 20 Mar 2012 13:49:49 -0000 To: oak-commits@jackrabbit.apache.org From: thomasm@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120320134950.D672F2388978@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/QueryObjectModelImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,142 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with this + * work for additional information regarding copyright ownership. The ASF + * licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law + * or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import java.util.ArrayList; +import java.util.HashMap; +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.jcr.Value; +import javax.jcr.ValueFactory; +import javax.jcr.query.InvalidQueryException; +import javax.jcr.query.QueryResult; +import javax.jcr.query.qom.Column; +import javax.jcr.query.qom.Constraint; +import javax.jcr.query.qom.Ordering; +import javax.jcr.query.qom.QueryObjectModel; +import javax.jcr.query.qom.Selector; +import javax.jcr.query.qom.Source; +import org.apache.jackrabbit.commons.SimpleValueFactory; + +/** + * The implementation of the corresponding JCR interface. + */ +public class QueryObjectModelImpl implements QueryObjectModel { + + final Source source; + final Constraint constraint; + final HashMap bindVariableMap = new HashMap(); + final ArrayList selectors = new ArrayList(); + + private final Ordering[] orderings; + private final Column[] columns; + private long limit; + private long offset; + private final ValueFactory valueFactory = new SimpleValueFactory(); + + public QueryObjectModelImpl(Source source, Constraint constraint, Ordering[] orderings, + Column[] columns) { + this.source = source; + this.constraint = constraint; + this.orderings = orderings; + this.columns = columns; + } + + public void bindVariables() { + ((ConstraintImpl) constraint).bindVariables(this); + } + + @Override + public Column[] getColumns() { + return columns; + } + + @Override + public Constraint getConstraint() { + return constraint; + } + + @Override + public Ordering[] getOrderings() { + return orderings; + } + + @Override + public Source getSource() { + return source; + } + + @Override + public String[] getBindVariableNames() { + String[] array = new String[bindVariableMap.size()]; + array = bindVariableMap.keySet().toArray(array); + return array; + } + + @Override + public void setLimit(long limit) { + this.limit = limit; + } + + @Override + public void setOffset(long offset) { + this.offset = offset; + } + + public ValueFactory getValueFactory() { + return valueFactory; + } + + @Override + public void bindValue(String arg0, javax.jcr.Value arg1) throws IllegalArgumentException, + RepositoryException { + // TODO Auto-generated method stub + + } + + @Override + public QueryResult execute() throws InvalidQueryException, RepositoryException { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getLanguage() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getStatement() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getStoredQueryPath() throws RepositoryException { + // TODO Auto-generated method stub + return null; + } + + @Override + public Node storeAsNode(String arg0) throws RepositoryException { + // TODO Auto-generated method stub + return null; + } + + public void addBindVariable(BindVariableValueImpl var) { + this.bindVariableMap.put(var.getBindVariableName(), null); + } + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,56 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.SameNode; + +/** + * The implementation of the corresponding JCR interface. + */ +public class SameNodeImpl extends ConstraintImpl implements SameNode { + + private final String path; + private final String selectorName; + + public SameNodeImpl(String selectorName, String path) { + this.selectorName = selectorName; + this.path = path; + } + + @Override + public String getSelectorName() { + return selectorName; + } + + @Override + public String getPath() { + return path; + } + + @Override + public String toString() { + return "ISSAMENODE(" + getSelectorName() + ", " + quotePath(path) + ')'; + } + + @Override + public void bindVariables(QueryObjectModelImpl qom) { + // ignore + } + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeJoinConditionImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeJoinConditionImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeJoinConditionImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SameNodeJoinConditionImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.SameNodeJoinCondition; + +/** + * The implementation of the corresponding JCR interface. + */ +public class SameNodeJoinConditionImpl extends JoinConditionImpl implements SameNodeJoinCondition { + + private final String selector1Name; + private final String selector2Name; + private final String selector2Path; + + public SameNodeJoinConditionImpl(String selector1Name, String selector2Name, + String selector2Path) { + this.selector1Name = selector1Name; + this.selector2Name = selector2Name; + this.selector2Path = selector2Path; + } + + @Override + public String getSelector1Name() { + return selector1Name; + } + + @Override + public String getSelector2Name() { + return selector2Name; + } + + @Override + public String getSelector2Path() { + return selector2Path; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ISSAMENODE("); + builder.append(getSelector1Name()); + builder.append(", "); + builder.append(getSelector2Name()); + if (selector2Path != null) { + builder.append(", "); + builder.append(quotePath(selector2Path)); + } + builder.append(')'); + return builder.toString(); + } + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SelectorImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SelectorImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SelectorImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SelectorImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,49 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.Selector; + +/** + * The implementation of the corresponding JCR interface. + */ +public class SelectorImpl extends SourceImpl implements Selector { + + private final String nodeTypeName, selectorName; + + public SelectorImpl(String nodeTypeName, String selectorName) { + this.nodeTypeName = nodeTypeName; + this.selectorName = selectorName; + } + + public String getNodeTypeName() { + return nodeTypeName; + } + + public String getSelectorName() { + return selectorName; + } + + @Override + public String toString() { + // TODO quote nodeTypeName? + return nodeTypeName + " AS " + getSelectorName(); + } + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SourceImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SourceImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SourceImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/SourceImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.Source; + +public abstract class SourceImpl extends QOMNode implements Source { + + // base class without methods + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/StaticOperandImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/StaticOperandImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/StaticOperandImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/StaticOperandImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.StaticOperand; + +public abstract class StaticOperandImpl extends QOMNode implements StaticOperand { + + public abstract void bindVariables(QueryObjectModelImpl qom); + +} Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/UpperCaseImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/UpperCaseImpl.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/UpperCaseImpl.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/query/qom/UpperCaseImpl.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import javax.jcr.query.qom.UpperCase; + +/** + * The implementation of the corresponding JCR interface. + */ +public class UpperCaseImpl extends DynamicOperandImpl implements UpperCase { + + private final DynamicOperandImpl operand; + + public UpperCaseImpl(DynamicOperandImpl operand) { + this.operand = operand; + } + + @Override + public DynamicOperandImpl getOperand() { + return operand; + } + + @Override + public String toString() { + return "UPPER(" + operand + ')'; + } + +} Added: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java?rev=1302895&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java (added) +++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/qom/QomTest.java Tue Mar 20 13:49:47 2012 @@ -0,0 +1,305 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.jackrabbit.oak.jcr.query.qom; + +import static org.junit.Assert.assertEquals; +import javax.jcr.RepositoryException; +import javax.jcr.Value; +import javax.jcr.ValueFactory; +import javax.jcr.query.qom.And; +import javax.jcr.query.qom.BindVariableValue; +import javax.jcr.query.qom.ChildNode; +import javax.jcr.query.qom.ChildNodeJoinCondition; +import javax.jcr.query.qom.Column; +import javax.jcr.query.qom.Comparison; +import javax.jcr.query.qom.Constraint; +import javax.jcr.query.qom.DescendantNode; +import javax.jcr.query.qom.DescendantNodeJoinCondition; +import javax.jcr.query.qom.EquiJoinCondition; +import javax.jcr.query.qom.FullTextSearch; +import javax.jcr.query.qom.FullTextSearchScore; +import javax.jcr.query.qom.Join; +import javax.jcr.query.qom.Length; +import javax.jcr.query.qom.Literal; +import javax.jcr.query.qom.LowerCase; +import javax.jcr.query.qom.NodeLocalName; +import javax.jcr.query.qom.NodeName; +import javax.jcr.query.qom.Not; +import javax.jcr.query.qom.Or; +import javax.jcr.query.qom.Ordering; +import javax.jcr.query.qom.PropertyExistence; +import javax.jcr.query.qom.PropertyValue; +import javax.jcr.query.qom.QueryObjectModel; +import javax.jcr.query.qom.QueryObjectModelConstants; +import javax.jcr.query.qom.QueryObjectModelFactory; +import javax.jcr.query.qom.SameNode; +import javax.jcr.query.qom.SameNodeJoinCondition; +import javax.jcr.query.qom.Selector; +import javax.jcr.query.qom.Source; +import javax.jcr.query.qom.UpperCase; +import org.apache.jackrabbit.commons.SimpleValueFactory; +import org.junit.Before; +import org.junit.Test; + +/** + * Tests the QueryObjectModelFactory and other QOM classes. + */ +public class QomTest { + + QueryObjectModelFactory f = new QueryObjectModelFactoryImpl(); + private ValueFactory vf; + + @Before + public void setup() { + vf = new SimpleValueFactory(); + } + + @Test + public void and() throws RepositoryException { + Constraint c0 = f.propertyExistence("x", "c0"); + Constraint c1 = f.propertyExistence("x", "c1"); + And and = f.and(c0, c1); + assertEquals(and.getConstraint1(), c0); + assertEquals(and.getConstraint2(), c1); + } + + @Test + public void ascending() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Ordering o = f.ascending(p); + assertEquals(p, o.getOperand()); + assertEquals(QueryObjectModelConstants.JCR_ORDER_ASCENDING, o.getOrder()); + } + + @Test + public void bindVariable() throws RepositoryException { + BindVariableValue b = f.bindVariable("bindVariableName"); + assertEquals("bindVariableName", b.getBindVariableName()); + } + + @Test + public void childNode() throws RepositoryException { + ChildNode cn = f.childNode("selectorName", "parentPath"); + assertEquals("selectorName", cn.getSelectorName()); + assertEquals("parentPath", cn.getParentPath()); + } + + @Test + public void childNodeJoinCondition() throws RepositoryException { + ChildNodeJoinCondition c = f.childNodeJoinCondition("childSelectorName", + "parentSelectorName"); + assertEquals("childSelectorName", c.getChildSelectorName()); + assertEquals("parentSelectorName", c.getParentSelectorName()); + } + + @Test + public void column() throws RepositoryException { + Column c = f.column("selectorName", "propertyName", "columnName"); + assertEquals("selectorName", c.getSelectorName()); + assertEquals("propertyName", c.getPropertyName()); + assertEquals("columnName", c.getColumnName()); + } + + @Test + public void comparison() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Literal l = f.literal(vf.createValue(1)); + Comparison c = f.comparison(p, QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, l); + assertEquals(p, c.getOperand1()); + assertEquals(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, c.getOperator()); + assertEquals(l, c.getOperand2()); + } + + @Test + public void descendantNode() throws RepositoryException { + DescendantNode d = f.descendantNode("selectorName", "path"); + assertEquals("selectorName", d.getSelectorName()); + assertEquals("path", d.getAncestorPath()); + } + + @Test + public void descendantNodeJoinCondition() throws RepositoryException { + DescendantNodeJoinCondition d = f.descendantNodeJoinCondition("descendantSelectorName", + "ancestorSelectorName"); + assertEquals("descendantSelectorName", d.getDescendantSelectorName()); + assertEquals("ancestorSelectorName", d.getAncestorSelectorName()); + } + + @Test + public void descending() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Ordering o = f.descending(p); + assertEquals(p, o.getOperand()); + assertEquals(QueryObjectModelConstants.JCR_ORDER_DESCENDING, o.getOrder()); + } + + @Test + public void equiJoinCondition() throws RepositoryException { + EquiJoinCondition e = f.equiJoinCondition("selector1Name", "property1Name", + "selector2Name", "property2Name"); + assertEquals("selector1Name", e.getSelector1Name()); + assertEquals("property1Name", e.getProperty1Name()); + assertEquals("selector2Name", e.getSelector2Name()); + assertEquals("property2Name", e.getProperty2Name()); + } + + @Test + public void fullTextSearch() throws RepositoryException { + Literal l = f.literal(vf.createValue(1)); + FullTextSearch x = f.fullTextSearch("selectorName", "propertyName", l); + assertEquals("selectorName", x.getSelectorName()); + assertEquals("propertyName", x.getPropertyName()); + assertEquals(l, x.getFullTextSearchExpression()); + } + + @Test + public void fullTextSearchScore() throws RepositoryException { + FullTextSearchScore x = f.fullTextSearchScore("selectorName"); + assertEquals("selectorName", x.getSelectorName()); + } + + @Test + public void join() throws RepositoryException { + Source left = f.selector("nodeTypeName", "selectorName"); + Source right = f.selector("nodeTypeName2", "selectorName2"); + ChildNodeJoinCondition jc = f.childNodeJoinCondition("childSelectorName", "parentSelectorName"); + Join j = f.join(left, right, QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, jc); + assertEquals(left, j.getLeft()); + assertEquals(right, j.getRight()); + assertEquals(QueryObjectModelConstants.JCR_JOIN_TYPE_INNER, j.getJoinType()); + assertEquals(jc, j.getJoinCondition()); + } + + @Test + public void length() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Length l = f.length(p); + assertEquals(p, l.getPropertyValue()); + } + + @Test + public void literal() throws RepositoryException { + Value v = vf.createValue(1); + Literal l = f.literal(v); + assertEquals(v, l.getLiteralValue()); + } + + @Test + public void lowerCase() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Length length = f.length(p); + LowerCase l = f.lowerCase(length); + assertEquals(length, l.getOperand()); + } + + @Test + public void nodeLocalName() throws RepositoryException { + NodeLocalName n = f.nodeLocalName("selectorName"); + assertEquals("selectorName", n.getSelectorName()); + } + + @Test + public void nodeName() throws RepositoryException { + NodeName n = f.nodeName("selectorName"); + assertEquals("selectorName", n.getSelectorName()); + } + + @Test + public void not() throws RepositoryException { + Constraint c = f.propertyExistence("x", "c0"); + Not n = f.not(c); + assertEquals(c, n.getConstraint()); + } + + @Test + public void or() throws RepositoryException { + Constraint c0 = f.propertyExistence("x", "c0"); + Constraint c1 = f.propertyExistence("x", "c1"); + Or or = f.or(c0, c1); + assertEquals(or.getConstraint1(), c0); + assertEquals(or.getConstraint2(), c1); + } + + @Test + public void propertyExistence() throws RepositoryException { + PropertyExistence pe = f.propertyExistence("selectorName", "propertyName"); + assertEquals("selectorName", pe.getSelectorName()); + assertEquals("propertyName", pe.getPropertyName()); + } + + @Test + public void propertyValue() throws RepositoryException { + PropertyValue pv = f.propertyValue("selectorName", "propertyName"); + assertEquals("selectorName", pv.getSelectorName()); + assertEquals("propertyName", pv.getPropertyName()); + } + + @Test + public void sameNode() throws RepositoryException { + SameNode s = f.sameNode("selectorName", "path"); + assertEquals("selectorName", s.getSelectorName()); + assertEquals("path", s.getPath()); + } + + @Test + public void sameNodeJoinCondition() throws RepositoryException { + SameNodeJoinCondition s = f.sameNodeJoinCondition("selector1Name", "selector2Name", "selector2Path"); + assertEquals("selector1Name", s.getSelector1Name()); + assertEquals("selector2Name", s.getSelector2Name()); + assertEquals("selector2Path", s.getSelector2Path()); + } + + @Test + public void selector() throws RepositoryException { + Selector s = f.selector("nodeTypeName", "selectorName"); + assertEquals("nodeTypeName", s.getNodeTypeName()); + assertEquals("selectorName", s.getSelectorName()); + } + + @Test + public void upperCase() throws RepositoryException { + PropertyValue p = f.propertyValue("selectorName", "propertyName"); + Length length = f.length(p); + UpperCase u = f.upperCase(length); + assertEquals(length, u.getOperand()); + } + + @Test + public void createQuery() throws RepositoryException { + Selector s = f.selector("nodeTypeName", "x"); + BindVariableValue b = f.bindVariable("var"); + Constraint c = f.propertyExistence("x", "c"); + PropertyValue p = f.propertyValue("x", "propertyName"); + c = f.and(f.comparison(p, QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, b), c); + Ordering o = f.ascending(p); + Column col = f.column("selectorName", "propertyName", "columnName"); + Ordering[] ords = new Ordering[]{o}; + Column[] cols = new Column[]{col}; + QueryObjectModel q = f.createQuery(s, c, ords, cols); + // assertEquals(Query.JCR_SQL2, q.getLanguage()); + String[] bv = q.getBindVariableNames(); + assertEquals(1, bv.length); + assertEquals("var", bv[0]); + assertEquals(s, q.getSource()); + assertEquals(c, q.getConstraint()); + assertEquals(o, q.getOrderings()[0]); + assertEquals(col, q.getColumns()[0]); + } + +}