[Mulgara-svn] r1891 - trunk/src/jar/query/java/org/mulgara/query/filter

pag at mulgara.org pag at mulgara.org
Wed Jan 27 18:29:33 UTC 2010


Author: pag
Date: 2010-01-27 10:29:32 -0800 (Wed, 27 Jan 2010)
New Revision: 1891

Added:
   trunk/src/jar/query/java/org/mulgara/query/filter/Inverse.java
Log:
New method for testing truth of a value, and returning false on error, rather than propagating an exception. Used for Optional Joins

Added: trunk/src/jar/query/java/org/mulgara/query/filter/Inverse.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/filter/Inverse.java	                        (rev 0)
+++ trunk/src/jar/query/java/org/mulgara/query/filter/Inverse.java	2010-01-27 18:29:32 UTC (rev 1891)
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2010 Duraspace.
+ *
+ * Licensed 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.mulgara.query.filter;
+
+import org.mulgara.query.QueryException;
+import org.mulgara.query.filter.value.Bool;
+
+
+/**
+ * An inversion of a test.
+ * This is different to NOT in that it will pass if the test fails with an exception.
+ *
+ * @created Jan 8, 2010
+ * @author Paul Gearon
+ */
+public class Inverse extends AbstractFilterValue implements Filter {
+
+  /** Generated Serialization ID for RMI */
+  private static final long serialVersionUID = -246496920520897841L;
+
+  /** The filter to invert. Local storage of operands[0]. */
+  Filter operand;
+
+  /**
+   * Create an inversion of a filter
+   * @param operand The filter to invert
+   */
+  public Inverse(Filter operand) {
+    super(operand);
+    this.operand = operand;
+  }
+
+  /**
+   * @see org.mulgara.query.filter.Filter#test(Context)
+   */
+  public boolean test(Context context) throws QueryException {
+    setCurrentContext(context);
+    try {
+      return !operand.test(context);
+    } catch (QueryException e) {
+      return true;
+    }
+  }
+
+  /** @see org.mulgara.query.filter.AbstractFilterValue#resolve() */
+  protected RDFTerm resolve() throws QueryException {
+    try {
+      return operand.test(getCurrentContext()) ? Bool.FALSE : Bool.TRUE;
+    } catch (QueryException e) {
+      return Bool.TRUE;
+    }
+  }
+
+}




More information about the Mulgara-svn mailing list