http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/PropertyExprFunction.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/PropertyExprFunction.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/PropertyExprFunction.java deleted file mode 100644 index 83df4f1..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/PropertyExprFunction.java +++ /dev/null @@ -1,512 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import org.apache.hedwig.jms.message.MessageImpl; - -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; - -/** - * Handles property (and header) dereference against message evaluation (based on identifier specified). - */ -public abstract class PropertyExprFunction implements ExprFunction { - - public static class LookupExpr extends PropertyExprFunction { - private final String identifier; - - public LookupExpr(String identifier) { - this.identifier = identifier; - } - - @Override - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - // No (stack) params required ... - - SelectorConstant result = doEvaluate(state.getMessage()); - if (MyNode.logger.isTraceEnabled()) MyNode.logger.trace(getClass() + ": identifier '" + - identifier + "' -> " + result); - state.getStack().push(result); - return; - } - - private SelectorConstant doEvaluate(final MessageImpl message) throws SelectorEvaluationException { - - - if (!message.propertyExists(identifier)) { - // defaulting to String, does it matter ? - return new SelectorConstant((String) null); - } - - final Object val = message.getSelectorProcessingPropertyValue(identifier); - - if (val instanceof Byte) { - return new SelectorConstant((int) (Byte) val); - } - if (val instanceof Short) { - return new SelectorConstant((int) (Short) val); - } - if (val instanceof Integer) { - return new SelectorConstant((Integer) val); - } - if (val instanceof Long) { - long lval = (Long) val; - if (lval >= (long) Integer.MAX_VALUE || lval <= (long) Integer.MIN_VALUE) - throw new SelectorEvaluationException(getClass() + " long value " + lval + - " out of range for an int"); - - return new SelectorConstant((int) lval); - } - if (val instanceof Boolean) { - return new SelectorConstant((Boolean) val); - } - if (val instanceof Float) { - return new SelectorConstant((double) (Float) val); - } - if (val instanceof Double) { - return new SelectorConstant((Double) val); - } - if (val instanceof String) { - return new SelectorConstant((String) val); - } - - - throw new SelectorEvaluationException(getClass() + " Unable to interpret value '" + val + - "' for identifier " + identifier); - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("LookupExpr"); - sb.append("{identifier='").append(identifier).append('\''); - sb.append('}'); - return sb.toString(); - } - } - - public static class IsNullExpr extends PropertyExprFunction { - - private final boolean negate; - - public IsNullExpr(boolean negate) { - this.negate = negate; - } - - @Override - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - - final SelectorConstant result = doEvaluate(state); - if (MyNode.logger.isTraceEnabled()) MyNode.logger.trace(getClass() + " -> " + result); - state.getStack().push(result); - } - - private SelectorConstant doEvaluate(SelectorEvalState state) throws SelectorEvaluationException { - - if (state.getStack().isEmpty()) - throw new SelectorEvaluationException(getClass() + " stack corruption ? " + state.getStack()); - - final SelectorConstant value = state.getStack().pop(); - - boolean result = value.isNull(); - if (negate) result = !result; - return new SelectorConstant(result); - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("IsNullExpr"); - sb.append("{negate=").append(negate); - sb.append('}'); - return sb.toString(); - } - } - - public static class InExpr extends PropertyExprFunction { - - private final boolean negate; - - public InExpr(boolean negate) { - this.negate = negate; - } - - @Override - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - if (state.getStack().size() < 2) - throw new SelectorEvaluationException(getClass() + " stack corruption ? " + state.getStack()); - - final SelectorConstant paramSet = state.getStack().pop(); - final SelectorConstant checkFor = state.getStack().pop(); - - final SelectorConstant result = doEvaluate(paramSet, checkFor); - if (MyNode.logger.isTraceEnabled()) MyNode.logger.trace(getClass() + ": checkFor '" + - checkFor + "', paramSet '" + paramSet+ "' -> " + result); - - state.getStack().push(result); - return ; - - } - - private SelectorConstant doEvaluate(SelectorConstant paramSet, SelectorConstant checkFor) - throws SelectorEvaluationException { - - if (checkFor.isNull()){ - return new SelectorConstant((String) null); - } - - if (SelectorConstant.SelectorDataType.STRING_SET != paramSet.type) { - throw new SelectorEvaluationException(getClass() + " Expected string list, found : " + - paramSet.type + ", for " + paramSet); - } - if (SelectorConstant.SelectorDataType.STRING != checkFor.type){ - throw new SelectorEvaluationException(getClass() + " Expected string , found : " + - checkFor.type + ", for " + checkFor); - } - - boolean result = paramSet.getStringSet().contains(checkFor.getStringValue()); - if (negate) result = !result; - return new SelectorConstant(result); - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("InExpr"); - sb.append("{negate=").append(negate); - sb.append('}'); - return sb.toString(); - } - } - - public static class LikeExpr extends PropertyExprFunction { - - private final Pattern likePattern; - private final String likePatternStr; - private final boolean negate; - - public LikeExpr(String likeExpression, String escapeCharacter, boolean negate) throws ParseException { - if (null != escapeCharacter && 1 != escapeCharacter.length()) { - throw new ParseException(getClass() + " Escape character must be a single character : '" + - escapeCharacter + "'"); - } - this.likePatternStr = generateRegexpPattern(likeExpression, escapeCharacter); - try { - this.likePattern = Pattern.compile(this.likePatternStr, Pattern.DOTALL); - } catch (PatternSyntaxException psEx){ - throw new ParseException(LikeExpr.class + " Unable to compile '" + likeExpression + - "' into regexp Pattern using '" + this.likePatternStr+ "'"); - } - this.negate = negate; - } - - private static String generateRegexpWithoutWildcard(final String expression){ - int indxOffset = 0; - int substringOffset = 0; - StringBuilder sb = new StringBuilder(); - while (indxOffset < expression.length()){ - final int indxUnder = expression.indexOf('_', indxOffset); - final int indxMod = expression.indexOf('%', indxOffset); - if (-1 == indxUnder && -1 == indxMod) break; - - final int indx; - - if (-1 != indxUnder && -1 != indxMod) indx = Math.min(indxUnder, indxMod); - else if (-1 != indxUnder) indx = indxUnder; - else indx = indxMod; - - if (indx != substringOffset) { - sb.append(Pattern.quote(expression.substring(substringOffset, indx))); - } - sb.append(indx == indxUnder ? "." : ".*"); - substringOffset = indx + 1; - indxOffset = indx + 1; - } - if (expression.length() != substringOffset) { - sb.append(Pattern.quote(expression.substring(substringOffset))); - } - - return sb.toString(); - } - - // If wildcard if prefixed with escapeChar, ignore it. - private static String generateRegexpWithWildcard(final String expression, char escapeChar){ - int indxOffset = 0; - int substringOffset = 0; - StringBuilder sb = new StringBuilder(); - while (indxOffset < expression.length()){ - final int indxUnder = expression.indexOf('_', indxOffset); - final int indxMod = expression.indexOf('%', indxOffset); - if (-1 == indxUnder && -1 == indxMod) break; - - final int indx; - - if (-1 != indxUnder && -1 != indxMod) indx = Math.min(indxUnder, indxMod); - else if (-1 != indxUnder) indx = indxUnder; - else indx = indxMod; - - if (indx > 0 && escapeChar == expression.charAt(indx - 1)) { - // ignore it. - indxOffset = indx + 1; - continue; - } - - if (indx != substringOffset) { - sb.append(Pattern.quote(expression.substring(substringOffset, indx))); - } - sb.append(indx == indxUnder ? "." : ".*"); - substringOffset = indx + 1; - indxOffset = indx + 1; - } - if (expression.length() != substringOffset) { - sb.append(Pattern.quote(expression.substring(substringOffset))); - } - - return sb.toString(); - } - - private static String generateRegexpPattern(final String likeExpression, - final String escapeCharacterStr) throws ParseException { - - if (null == escapeCharacterStr){ - // Ok, hand-generating the pattern seems to be the only generic way to handle this, sigh :-( - - String rpat = generateRegexpWithoutWildcard(likeExpression); - return rpat; - } - - // expect this to be there ... - final char escapeChar = escapeCharacterStr.charAt(0); - - // Test when escapeChar == ']', '[' and '^'. done ! - String rpat = generateRegexpWithWildcard(likeExpression, escapeChar); - - rpat = rpat.replace(escapeChar + "%", "%"); - rpat = rpat.replace(escapeChar + "_", "_"); - - return rpat; - } - - @Override - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - - if (state.getStack().isEmpty()) throw new SelectorEvaluationException(getClass() + - " stack corruption ? " + state.getStack()); - - final SelectorConstant checkFor = state.getStack().pop(); - - final SelectorConstant result = doEvaluate(checkFor); - if (MyNode.logger.isTraceEnabled()) MyNode.logger.trace(getClass() + ": checkFor '" + - checkFor + "' -> " + result); - - state.getStack().push(result); - return ; - } - - private SelectorConstant doEvaluate(SelectorConstant checkFor) throws SelectorEvaluationException { - if (checkFor.isNull()){ - return new SelectorConstant((String) null); - } - - if (SelectorConstant.SelectorDataType.STRING != checkFor.type){ - throw new SelectorEvaluationException(getClass() + " Expected string , found : " + - checkFor.type + ", for " + checkFor); - } - - - final String value = checkFor.getStringValue(); - - if (null == value) { - return new SelectorConstant((Boolean) null); - } - - boolean result = likePattern.matcher(value).matches(); - if (negate) result = !result; - return new SelectorConstant(result); - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("LikeExpr"); - sb.append("{likePatternStr=").append(likePatternStr); - sb.append(", negate=").append(negate); - sb.append('}'); - return sb.toString(); - } - } - - public static class BetweenExpr extends PropertyExprFunction { - - private final boolean negate; - - public BetweenExpr(boolean negate) { - this.negate = negate; - } - - @Override - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - if (state.getStack().size() < 3){ - throw new SelectorEvaluationException(getClass() + " stack corruption ? " + state.getStack()); - } - - final SelectorConstant right = state.getStack().pop(); - final SelectorConstant left = state.getStack().pop(); - - final SelectorConstant checkFor = state.getStack().pop(); - - final SelectorConstant result = doEvaluate(checkFor, left, right); - if (MyNode.logger.isTraceEnabled()) MyNode.logger.trace(getClass() + ": left '" + left + - "', right '" + right + "', checkFor '" + checkFor + "' -> " + result); - state.getStack().push(result); - } - - private SelectorConstant doEvaluate(final SelectorConstant checkFor, final SelectorConstant left, - final SelectorConstant right) throws SelectorEvaluationException { - - if (left.isNull() || right.isNull()) { - // Unexpected for a bound to be null ... - throw new SelectorEvaluationException(getClass() + " Unexpected for left or right bound to be null " + - left + ", " + right); - } - - if (checkFor.isNull()){ - // If checkFor is null, then it cant be between anyway - return unknown. - return new SelectorConstant((Boolean) null); - } - - final Boolean result; - - // Between left and right ... - switch (left.type) { - case INT: { - switch (right.type) { - case INT: { - result = handleBetweenIntAndInt(checkFor, left.getIntValue(), - right.getIntValue()); - break; - } - case DOUBLE: { - result = handleBetweenIntAndDouble(checkFor, left.getIntValue(), - right.getDoubleValue()); - break; - } - default: - throw new SelectorEvaluationException(getClass() + " Unsupported type for right " + - right.type); - } - break; - } - case DOUBLE: { - switch (right.type) { - case INT: { - result = handleBetweenIntAndDouble(checkFor, right.getIntValue(), - left.getDoubleValue()); - break; - } - case DOUBLE: { - result = handleBetweenDoubleAndDouble(checkFor, left.getDoubleValue(), - right.getDoubleValue()); - break; - } - default: - throw new SelectorEvaluationException(getClass() + - " Unsupported type for right " + right.type); - } - break; - } - default: - throw new SelectorEvaluationException(getClass() + " Unsupported type for left " + right.type); - } - - if (null == result) { - // Cannot find the result as the type we expected. - return new SelectorConstant((Boolean) null); - } - - - return new SelectorConstant(negate ? !result : result); - } - - private Boolean handleBetweenIntAndInt(SelectorConstant checkFor, int intBound, - int otherIntBound) throws SelectorEvaluationException { - final int low = Math.min(intBound, otherIntBound); - final int high = Math.max(intBound, otherIntBound); - - assert ! checkFor.isNull(); - - - switch (checkFor.type){ - case INT: - return checkFor.getIntValue() >= low && checkFor.getIntValue() <= high; - case DOUBLE: - return checkFor.getDoubleValue() >= low && checkFor.getDoubleValue() <= high; - default: - throw new SelectorEvaluationException(getClass() + - " Identifier value is of illegal type " + checkFor.type + " ... " + checkFor); - } - } - - private Boolean handleBetweenIntAndDouble(SelectorConstant checkFor, int intBound, - double doubleBound) throws SelectorEvaluationException { - final double low = Math.min((double) intBound, doubleBound); - final double high = Math.max((double) intBound, doubleBound); - - assert ! checkFor.isNull(); - - - switch (checkFor.type){ - case INT: - return checkFor.getIntValue() >= low && checkFor.getIntValue() <= high; - case DOUBLE: - return checkFor.getDoubleValue() >= low && checkFor.getDoubleValue() <= high; - default: - throw new SelectorEvaluationException(getClass() + - " Identifier value is of illegal type " + checkFor.type + " ... " + checkFor); - } - } - - private Boolean handleBetweenDoubleAndDouble(SelectorConstant checkFor, double doubleBound, - double otherDoubleBound) throws SelectorEvaluationException { - final double low = Math.min(doubleBound, otherDoubleBound); - final double high = Math.max(doubleBound, otherDoubleBound); - - assert ! checkFor.isNull(); - - - switch (checkFor.type){ - case INT: - return checkFor.getIntValue() >= low && checkFor.getIntValue() <= high; - case DOUBLE: - return checkFor.getDoubleValue() >= low && checkFor.getDoubleValue() <= high; - default: - throw new SelectorEvaluationException(getClass() + - " Identifier value is of illegal type " + checkFor.type + " ... " + checkFor); - } - } - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder(); - sb.append("BetweenExpr"); - sb.append("{negate=").append(negate); - sb.append('}'); - return sb.toString(); - } - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorConstant.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorConstant.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorConstant.java deleted file mode 100644 index e4af1c7..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorConstant.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import java.util.Collections; -import java.util.Set; - -/** - * A constant in the AST ends up getting pushed into the stack as this. - */ -public class SelectorConstant { - - public enum SelectorDataType {BOOLEAN, INT, DOUBLE, STRING, STRING_SET} - - public final SelectorDataType type; - - private final Boolean boolValue; - private final Integer intValue; - private final Double doubleValue; - private final String stringValue; - - private final Set<String> stringSet; - - public SelectorConstant(Boolean boolValue) { - this.type = SelectorDataType.BOOLEAN; - this.boolValue = boolValue; - this.intValue = null; - this.doubleValue = null; - this.stringValue = null; - this.stringSet = null; - } - - public SelectorConstant(Integer intValue) { - this.type = SelectorDataType.INT; - this.boolValue = null; - this.intValue = intValue; - this.doubleValue = null; - this.stringValue = null; - this.stringSet = null; - } - - public SelectorConstant(Double doubleValue) { - this.type = SelectorDataType.DOUBLE; - this.boolValue = null; - this.intValue = null; - this.doubleValue = doubleValue; - this.stringValue = null; - this.stringSet = null; - } - - public SelectorConstant(String stringValue) { - this.type = SelectorDataType.STRING; - this.boolValue = null; - this.intValue = null; - this.doubleValue = null; - this.stringValue = stringValue; - this.stringSet = null; - } - - public SelectorConstant(Set<String> stringSet) { - this.type = SelectorDataType.STRING_SET; - this.boolValue = null; - this.intValue = null; - this.doubleValue = null; - this.stringValue = null; - this.stringSet = stringSet; - } - - public void addToStringSet(String value) throws ParseException { - if (SelectorDataType.STRING_SET != type) - throw new ParseException(getClass() + " Attempting to add to a non-string_list type : " + type); - if (null == this.stringSet) throw new ParseException(getClass() + - " Attempting to add to a null string_list : " + stringSet); - this.stringSet.add(value); - } - - public boolean isNull() { - switch (type) { - case BOOLEAN: - return null == boolValue; - case INT: - return null == intValue; - case DOUBLE: - return null == doubleValue; - case STRING: - return null == stringValue; - case STRING_SET: - return null == stringSet; - default: - throw new IllegalStateException(getClass() + " Unknown type ? " + type); - } - } - - public boolean isTrue() throws SelectorEvaluationException { - switch (type) { - case BOOLEAN: - return null != boolValue && Boolean.TRUE.equals(boolValue); - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type " + type + - ", value " + getValueAsString()); - } - } - - public String getValueAsString() throws SelectorEvaluationException { - switch (type) { - case BOOLEAN: - return Boolean.toString(boolValue); - case INT: - return Integer.toString(intValue); - case DOUBLE: - return Double.toString(doubleValue); - case STRING: - return stringValue; - case STRING_SET: - return null != stringSet ? stringSet.toString() : "null"; - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type : " + type); - } - } - - public String toString() { - try { - switch (type) { - case BOOLEAN: - return "boolean : " + getValueAsString(); - case INT: - return "int : " + getValueAsString(); - case DOUBLE: - return "double : " + getValueAsString(); - case STRING: - return "string : " + getValueAsString(); - case STRING_SET: - return "string_list : " + getValueAsString(); - default: - throw new IllegalStateException(getClass() + " Unexpected type"); - } - } catch (SelectorEvaluationException seEx) { - throw new IllegalStateException(getClass() + " Unexpected exception", seEx); - } - } - - public Boolean getBoolValue() throws SelectorEvaluationException { - if (SelectorDataType.BOOLEAN != type) - throw new SelectorEvaluationException(getClass() + " Illegal access to boolean for type " + type); - return boolValue; - } - - public Integer getIntValue() throws SelectorEvaluationException { - if (SelectorDataType.INT != type) - throw new SelectorEvaluationException(getClass() + " Illegal access to boolean for type " + type); - return intValue; - } - - public Double getDoubleValue() throws SelectorEvaluationException { - if (SelectorDataType.DOUBLE != type) - throw new SelectorEvaluationException(getClass() + " Illegal access to boolean for type " + type); - return doubleValue; - } - - public String getStringValue() throws SelectorEvaluationException { - if (SelectorDataType.STRING != type) - throw new SelectorEvaluationException(getClass() + " Illegal access to boolean for type " + type); - return stringValue; - } - - public Set<String> getStringSet() throws SelectorEvaluationException { - if (SelectorDataType.STRING_SET != type) - throw new SelectorEvaluationException(getClass() + " Illegal access to boolean for type " + type); - // wrap to prevent changes ... - return Collections.unmodifiableSet(stringSet); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvalState.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvalState.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvalState.java deleted file mode 100644 index d760e0c..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvalState.java +++ /dev/null @@ -1,56 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import org.apache.hedwig.jms.message.MessageImpl; - -import java.util.ArrayDeque; -import java.util.Deque; - -/** - * Holds (any) state data required to evaluate a Selector. - */ -public class SelectorEvalState { - private final MessageImpl message; - private final Deque<SelectorConstant> stack; - - // Used ONLY for debugging ... it is sad that this is part of SelectorEvalState - but I dont - // have time to do anything else right now ! - private int debugIndentCount = 0; - - public SelectorEvalState(MessageImpl message) { - this.message = message; - this.stack = new ArrayDeque<SelectorConstant>(32); - } - - public MessageImpl getMessage() { - return message; - } - - public Deque<SelectorConstant> getStack() { - return stack; - } - - public int getDebugIndentCount() { - return debugIndentCount; - } - - public void setDebugIndentCount(int debugIndentCount) { - this.debugIndentCount = debugIndentCount; - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvaluationException.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvaluationException.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvaluationException.java deleted file mode 100644 index 7425189..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/SelectorEvaluationException.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -/** - * Thrown when evaluating a selector. - */ -public class SelectorEvaluationException extends Exception { - - public SelectorEvaluationException() { - } - - public SelectorEvaluationException(String message) { - super(message); - } - - public SelectorEvaluationException(String message, Throwable cause) { - super(message, cause); - } - - public SelectorEvaluationException(Throwable cause) { - super(cause); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/TreeDumperSelectorParserVisitor.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/TreeDumperSelectorParserVisitor.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/TreeDumperSelectorParserVisitor.java deleted file mode 100644 index dedda05..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/TreeDumperSelectorParserVisitor.java +++ /dev/null @@ -1,261 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -/** - * To dump the AST - used ONLY for debugging - */ -public class TreeDumperSelectorParserVisitor implements SelectorParserVisitor{ - - private static final int INDENT_PER_LEVEL = 4; - - private static void emitDebug(SimpleNode node, SelectorEvalState data, boolean start) - throws SelectorEvaluationException { - - if (!start && 0 == node.jjtGetNumChildren()) return ; - - final StringBuilder sb = new StringBuilder(); - int count = data.getDebugIndentCount(); - for (int i = 0;i < count * INDENT_PER_LEVEL; i ++){ - sb.append(' '); - } - - sb.append(node.getClass().getName()).append(" -> ").append(node); - sb.append(", Constant -> ").append(node.getConstantValueInternal()); - sb.append(", Func -> ").append(node.getExprFunctionInternal()); - if (0 != node.jjtGetNumChildren()) sb.append(start ? " OPEN" : " CLOSE"); - - MyNode.logger.trace(sb.toString()); - } - - @Override - public Object visit(SimpleNode node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTOrExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTAndExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTNotExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTGreaterThan node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTLessThan node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTLessThanEqualTo node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTGreaterThanEqualTo node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTEqualTo node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTNotEqualTo node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTIsNullExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTBetweenExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTInExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTLikeExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTAddExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTSubExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTDivideExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTMultiplyExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTNegateExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTLookupExpr node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - data.setDebugIndentCount(data.getDebugIndentCount() + 1); - node.childrenAccept(this, data); - data.setDebugIndentCount(data.getDebugIndentCount() - 1); - emitDebug(node, data, false); - return null; - } - - @Override - public Object visit(ASTConstant node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - if (0 != node.jjtGetNumChildren()) throw new SelectorEvaluationException(getClass() + - " parse error ? " + node); - return null; - } - - @Override - public Object visit(ASTStringVarargParams node, SelectorEvalState data) throws SelectorEvaluationException { - emitDebug(node, data, true); - if (0 != node.jjtGetNumChildren()) throw new SelectorEvaluationException(getClass() + - " parse error ? " + node); - return null; - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryArithmeticFunction.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryArithmeticFunction.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryArithmeticFunction.java deleted file mode 100644 index 59170e7..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryArithmeticFunction.java +++ /dev/null @@ -1,73 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import org.apache.hedwig.jms.message.MessageImpl; - -/** - * Unary arithematic operations - */ -public abstract class UnaryArithmeticFunction implements ExprFunction { - - public static final UnaryArithmeticFunction NEGATE_FUNCTION = new UnaryArithmeticFunction() { - - @Override - protected SelectorConstant evaluateImpl(SelectorConstant value, MessageImpl message) - throws SelectorEvaluationException { - - switch (value.type) { - case INT: { - Integer val = value.getIntValue(); - if (null == val) return new SelectorConstant((Integer) null); - return new SelectorConstant(-(int) val); - } - case DOUBLE: { - Double val = value.getDoubleValue(); - if (null == val) return new SelectorConstant((Double) null); - return new SelectorConstant(-(double) val); - } - default: - throw new SelectorEvaluationException(getClass() + " Invalid value type ? " + value); - } - } - }; - - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - if (state.getStack().size() < 1) - throw new SelectorEvaluationException(getClass() + " stack corruption ? " + state.getStack()); - - SelectorConstant value = state.getStack().pop(); - - SelectorConstant result = evaluateImpl(value, state.getMessage()); - - if (null != result) state.getStack().push(result); - else - throw new SelectorEvaluationException(getClass() + - " Unexpected to return a null response in binary function evaluation"); - } - - protected abstract SelectorConstant evaluateImpl(SelectorConstant value, MessageImpl message) - throws SelectorEvaluationException; - - - - @Override - public String toString(){ - return getClass().getName(); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryExprFunction.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryExprFunction.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryExprFunction.java deleted file mode 100644 index c50514b..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/UnaryExprFunction.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import org.apache.hedwig.jms.message.MessageImpl; - -/** - * Unary function's. - */ -public abstract class UnaryExprFunction implements ExprFunction { - - public static final UnaryExprFunction NOT_FUNCTION = new UnaryExprFunction() { - - @Override - protected SelectorConstant evaluateImpl(SelectorConstant value, MessageImpl message) - throws SelectorEvaluationException { - if (SelectorConstant.SelectorDataType.BOOLEAN != value.type) { - throw new SelectorEvaluationException(getClass() + " Invalid value type ? " + value); - } - - final Boolean boolValue = value.getBoolValue(); - final Boolean result = null == boolValue ? null : !boolValue; - return new SelectorConstant(result); - } - }; - - public void evaluate(SelectorEvalState state) throws SelectorEvaluationException { - if (state.getStack().size() < 1) - throw new SelectorEvaluationException(getClass() + " stack corruption ? " + state.getStack()); - - SelectorConstant value = state.getStack().pop(); - - SelectorConstant result = evaluateImpl(value, state.getMessage()); - - if (null != result) state.getStack().push(result); - else - throw new SelectorEvaluationException(getClass() + - " Unexpected to return a null response in binary function evaluation"); - } - - protected abstract SelectorConstant evaluateImpl(SelectorConstant value, MessageImpl message) - throws SelectorEvaluationException; - - - - @Override - public String toString(){ - return getClass().getName(); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/ValueComparisonFunction.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/ValueComparisonFunction.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/ValueComparisonFunction.java deleted file mode 100644 index 24957d3..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/ValueComparisonFunction.java +++ /dev/null @@ -1,329 +0,0 @@ -/** - * 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.hedwig.jms.selector; - -import org.apache.hedwig.jms.message.MessageImpl; - -/** - * Comparison of values .. - */ -public abstract class ValueComparisonFunction extends BinaryExprFunction { - - protected SelectorConstant evaluateImpl(SelectorConstant left, SelectorConstant right, - MessageImpl message) throws SelectorEvaluationException { - - switch (left.type) { - case INT: { - switch (right.type) { - case INT: - return new SelectorConstant(compareWithInt(left.getIntValue(), right.getIntValue())); - case DOUBLE: - return new SelectorConstant(compareWithInt(left.getIntValue(), right.getDoubleValue())); - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type : " + - right.type + ". left : " + left + ", right : " + right); - } - } - case DOUBLE: { - switch (right.type) { - case INT: - return new SelectorConstant(compareWithDouble(left.getDoubleValue(), right.getIntValue())); - case DOUBLE: - return new SelectorConstant(compareWithDouble(left.getDoubleValue(), right.getDoubleValue())); - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type : " + - right.type + ". left : " + left + ", right : " + right); - } - } - case BOOLEAN: { - switch (right.type) { - case BOOLEAN: - return new SelectorConstant(compareWithBoolean(left.getBoolValue(), right.getBoolValue())); - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type : " + - right.type + ". left : " + left + ", right : " + right); - } - } - - case STRING: { - switch (right.type) { - case STRING: - return new SelectorConstant(compareWithString(left.getStringValue(), right.getStringValue())); - default: - throw new SelectorEvaluationException(getClass() + " Unexpected type : " + - right.type + ". left : " + left + ", right : " + right); - } - } - - default: - throw new SelectorEvaluationException(getClass() + " Unsupported type : " + - left.type + ". left : " + left + ", right : " + right); - } - } - - protected abstract Boolean compareWithInt(Integer left, Double right) throws SelectorEvaluationException; - - protected abstract Boolean compareWithInt(Integer left, Integer right) throws SelectorEvaluationException; - - protected abstract Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException; - - protected abstract Boolean compareWithDouble(Double left, Integer right) throws SelectorEvaluationException; - - protected abstract Boolean compareWithString(String left, String right) throws SelectorEvaluationException; - - protected abstract Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException; - - - public static final ValueComparisonFunction GREATER_THAN_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left > right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return left > right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left > right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left > (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() - + " Unsupported string comparison for greater_than operator"); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() - + " Unsupported boolean comparison for greater_than operator"); - } - }; - - - public static final ValueComparisonFunction GREATER_THAN_EQUAL_TO_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left >= right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return left >= right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left >= right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left >= (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported string comparison for greater_than operator"); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported boolean comparison for greater_than operator"); - } - }; - - public static final ValueComparisonFunction LESS_THAN_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left < right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return left < right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left < right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left < (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported string comparison for greater_than operator"); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported boolean comparison for greater_than operator"); - } - }; - - - public static final ValueComparisonFunction LESS_THAN_EQUAL_TO_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left <= right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return left <= right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left <= right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left <= (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported string comparison for greater_than operator"); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - throw new SelectorEvaluationException(getClass() + - " Unsupported boolean comparison for greater_than operator"); - } - }; - - public static final ValueComparisonFunction EQUAL_TO_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left == right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return (int) left == right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return (double) left == right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left == (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left.equals(right); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return left.equals(right); - } - }; - - - public static final ValueComparisonFunction NOT_EQUAL_TO_FUNCTION = new ValueComparisonFunction() { - @Override - protected Boolean compareWithInt(Integer left, Double right) { - if (null == left || null == right) return null; - return (double) left != right; - } - - @Override - protected Boolean compareWithInt(Integer left, Integer right) { - if (null == left || null == right) return null; - return (int) left != right; - } - - @Override - protected Boolean compareWithDouble(Double left, Double right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return (double) left != right; - } - - @Override - protected Boolean compareWithDouble(Double left, Integer right) { - if (null == left || null == right) return null; - return left != (double) right; - } - - @Override - protected Boolean compareWithString(String left, String right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return !left.equals(right); - } - - @Override - protected Boolean compareWithBoolean(Boolean left, Boolean right) throws SelectorEvaluationException { - if (null == left || null == right) return null; - return !left.equals(right); - } - }; - - - - @Override - public String toString(){ - return getClass().getName(); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/package-info.html ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/package-info.html b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/package-info.html deleted file mode 100644 index e426eb8..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/selector/package-info.html +++ /dev/null @@ -1,35 +0,0 @@ -<!-- - 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. ---> - - -Contains implementation of the selector, associated files and interpreter. <br/> -This depends on files generated by the grammar at $HEDWIG_CLIENT_JMS/src/main/grammar/javacc/selector_grammar.jjt <br/> -<p/> -This package depends on message package to pull headers, etc. <br/> -<p/> -<p/> -The code essentially is split into three things : -<ul> - <li>Basic implementation of the selector, interpreter and grammar interface code : split between this - package and the generated package (of same name).</li> - <li>State objects, visitor implementation, etc to help evaluate the generated AST based on the message. - MyNode, SelectorConstant, SelectorEvalState, etc.</li> - <li>The functions to evaluate and implement functionality - expose constructs to interpreter to evaluate. - *Function classes.</li> -</ul> - -The code relies heavily on the javacc grammar and the interpreter generated based on it : so please modify with care ! http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionFactoryImpl.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionFactoryImpl.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionFactoryImpl.java deleted file mode 100644 index 6ef0970..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionFactoryImpl.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * 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.hedwig.jms.spi; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.naming.NamingException; -import javax.naming.Reference; -import javax.naming.Referenceable; -import java.io.Serializable; - -/** - * Implementation of jmx ConnectionFactory - * MUST be MT-safe (2.8) - */ -public class HedwigConnectionFactoryImpl implements ConnectionFactory, TopicConnectionFactory, - Referenceable, Serializable { - private static final long serialVersionUID = 1L; - - @Override - public HedwigConnectionImpl createConnection() throws JMSException { - HedwigConnectionImpl retval = new HedwigConnectionImpl(); - return retval; - } - - @Override - public HedwigConnectionImpl createConnection(String user, String password) throws JMSException { - HedwigConnectionImpl retval = new HedwigConnectionImpl(user, password); - return retval; - } - - @Override - public Reference getReference() throws NamingException { - return new Reference(getClass().getName()); - } - - @Override - public TopicConnection createTopicConnection() throws JMSException { - return new HedwigConnectionImpl(); - } - - @Override - public TopicConnection createTopicConnection(String user, String password) throws JMSException { - return new HedwigConnectionImpl(user, password); - } -} http://git-wip-us.apache.org/repos/asf/bookkeeper/blob/9a8d62b1/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionImpl.java ---------------------------------------------------------------------- diff --git a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionImpl.java b/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionImpl.java deleted file mode 100644 index 98f4273..0000000 --- a/hedwig-client-jms/src/main/java/org/apache/hedwig/jms/spi/HedwigConnectionImpl.java +++ /dev/null @@ -1,164 +0,0 @@ -/** - * 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.hedwig.jms.spi; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.hedwig.client.conf.ClientConfiguration; -import org.apache.hedwig.jms.ConnectionImpl; -import org.apache.hedwig.jms.MessagingSessionFacade; -import org.apache.hedwig.jms.SessionImpl; - -import javax.jms.JMSException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; - -/** - * Returns the hedwig specific functionality of the Connection - which is tied to this spi impl. - * Coupled with HedwigMessagingSessionFacade. - * - */ -public class HedwigConnectionImpl extends ConnectionImpl { - - private ClientConfiguration hedwigClientConfig; - - public HedwigConnectionImpl() throws JMSException { - super(); - init(getUser(), getPassword()); - } - - public HedwigConnectionImpl(String user, String password) throws JMSException { - super (user, password); - init(getUser(), getPassword()); - } - - @Override - protected SessionImpl createSessionInstance(boolean transacted, int acknowledgeMode, - MessagingSessionFacade.DestinationType type) throws JMSException { - if (null == type) return new SessionImpl(this, transacted, acknowledgeMode); - switch (type){ - case QUEUE: - return new QueueSessionImpl(this, transacted, acknowledgeMode); - case TOPIC: - return new TopicSessionImpl(this, transacted, acknowledgeMode); - default: - throw new JMSException("Unknown type " + type); - } - } - - @Override - protected void doStart(String user, String password) throws JMSException { - // noop for now ... - } - - protected void init(String user, String password) throws JMSException { - // load to check sanity. - hedwigClientConfig = loadConfig(); - - // TODO: Set configuration options specified by the user of api - user/passwd/etc. - } - - // copied from earlier code ... - private ClientConfiguration loadConfig() throws JMSException { - ClientConfiguration config = new ClientConfiguration(); - - // TODO: This is not very extensible and useful ... we need to pick the info from - // configuration specified by user, NOT only from static files ! - // Also, we need to be able to support multiple configuration in a single client ! - // We need a better solution .... - - try { - // 1. try to load the client configuration as specified from a - // system property - if (System.getProperty(HEDWIG_CLIENT_CONFIG_FILE) != null) { - File configFile = new File(System.getProperty(HEDWIG_CLIENT_CONFIG_FILE)); - if (!configFile.exists()) { - throw new JMSException( - "Cannot create connection: cannot find Hedwig client configuration file specified as [" - + System.getProperty(HEDWIG_CLIENT_CONFIG_FILE) + "]"); - } - config.loadConf(configFile.toURI().toURL()); - } else { - // 2. try to load a "hedwig-client.cfg" file from the classpath - config.loadConf(new URL(null, "classpath://hedwig-client.cfg", new URLStreamHandler() { - protected URLConnection openConnection(URL u) throws IOException { - // rely on the relevant classloader - not system classloader. - final URL resourceUrl = HedwigConnectionImpl.this.getClass().getClassLoader(). - getResource(u.getPath()); - return resourceUrl.openConnection(); - } - })); - } - - } catch (MalformedURLException e) { - JMSException je = new JMSException("Cannot load Hedwig client configuration file " + e); - je.setLinkedException(e); - throw je; - } catch (ConfigurationException e) { - JMSException je = new JMSException("Cannot load Hedwig client configuration " + e); - je.setLinkedException(e); - throw je; - } - - /* - System.out.println("getConsumedMessagesBufferSize : " + config.getConsumedMessagesBufferSize()); - System.out.println("getDefaultServerHost : " + config.getDefaultServerHost()); - System.out.println("isSSLEnabled : " + config.isSSLEnabled()); - System.out.println("getMaximumMessageSize : " + config.getMaximumMessageSize()); - System.out.println("getMaximumOutstandingMessages : " + config.getMaximumOutstandingMessages()); - System.out.println("getMaximumServerRedirects : " + config.getMaximumServerRedirects()); - System.out.println("getServerAckResponseTimeout : " + config.getServerAckResponseTimeout()); - */ - - return config; - } - - public ClientConfiguration getHedwigClientConfig() { - return hedwigClientConfig; - } - - @Override - protected void doStop() { - // nothing specific to be done. - } - - @Override - protected void doClose(){ - // nothing specific to be done. - } - - @Override - protected MessagingSessionFacade createMessagingSessionFacade(SessionImpl session) throws JMSException { - return new HedwigMessagingSessionFacade(this, session); - } - - @Override - public TopicSessionImpl createTopicSession(boolean transacted, int acknowledgeMode) throws JMSException { - return (TopicSessionImpl) createSessionImpl(transacted, acknowledgeMode, - MessagingSessionFacade.DestinationType.TOPIC); - } - - @Override - public QueueSessionImpl createQueueSession(boolean transacted, int acknowledgeMode) throws JMSException { - return (QueueSessionImpl) createSessionImpl(transacted, acknowledgeMode, - MessagingSessionFacade.DestinationType.QUEUE); - } -}