You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by fa...@apache.org on 2013/04/08 17:19:09 UTC
svn commit: r1465662 [11/26] - in /qpid/trunk/qpid/tools/src/java: ./ bin/
bin/qpid-web/ bin/qpid-web/authentication/ bin/qpid-web/web/
bin/qpid-web/web/itablet/ bin/qpid-web/web/itablet/css/
bin/qpid-web/web/itablet/images/ bin/qpid-web/web/itablet/im...
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,221 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This class represents the base class for all Boolean Expressions created by expanding the Query predicate.
+ *
+ * @author Fraser Adams
+ */
+public abstract class BooleanExpression extends Expression
+{
+ private static Map<String, BooleanExpression> _factories = new HashMap<String, BooleanExpression>();
+ protected String[] _operands;
+ private String[] _keys;
+
+ /**
+ * Initialise the _factories Map, which contains the prototype instances of each concrete BooleanExpression
+ * keyed by the operator String.
+ */
+ static
+ {
+ _factories.put("eq", new BooleanEquals());
+ _factories.put("ne", new BooleanNotEquals());
+ _factories.put("lt", new BooleanLessThan());
+ _factories.put("le", new BooleanLessEqual());
+ _factories.put("gt", new BooleanGreaterThan());
+ _factories.put("ge", new BooleanGreaterEqual());
+ _factories.put("re_match", new BooleanRegexMatch());
+ _factories.put("exists", new BooleanExists());
+ _factories.put("true", new BooleanTrue());
+ _factories.put("false", new BooleanFalse());
+ }
+
+ /**
+ * Factory method to create concrete Expression instances based on the operator name extracted from the expression List.
+ * This method will create a BooleanExpression from an "eq", "ne", "lt" etc. operator using the prototype
+ * obtained from the _factories Map.
+ *
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public static Expression createExpression(final List expr) throws QmfException
+ {
+ Iterator iter = expr.listIterator();
+ if (!iter.hasNext())
+ {
+ throw new QmfException("Missing operator in predicate expression");
+ }
+
+ String op = (String)iter.next();
+ BooleanExpression factory = _factories.get(op);
+ if (factory == null)
+ {
+ throw new QmfException("Unknown operator in predicate expression");
+ }
+
+ return factory.create(expr);
+ }
+
+ /**
+ * Factory method to create a concrete instance of BooleanExpression
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public abstract Expression create(final List expr) throws QmfException;
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ protected BooleanExpression()
+ {
+ }
+
+ /**
+ * Main Constructor, used to populate unevaluated operands. This loops through the input expression list. If the
+ * Object is a String is is treated as a key such that when the expression is evaluated the key will be used to
+ * obtain a propery from the QmfData object. If the Object is a sub-List it is checked to see if it's a quoted
+ * String, if it is the quoted String is stored as the operand. If it's neither of these the actual object from
+ * the expression List is used as the operand.
+ *
+ * @param operandCount the number of operands in this Expression, the value is generally passed by the subclass.
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ protected BooleanExpression(final int operandCount, final List expr) throws QmfException
+ {
+ Iterator iter = expr.listIterator();
+ String op = (String)iter.next(); // We've already tested for hasNext() in the factory
+
+ _operands = new String[operandCount];
+ _keys = new String[operandCount];
+
+ for (int i = 0; i < operandCount; i++)
+ {
+ if (!iter.hasNext())
+ {
+ throw new QmfException("Too few operands for operation: " + op);
+ }
+
+ Object object = iter.next();
+ _operands[i] = object.toString();
+
+ if (object instanceof String)
+ {
+ _keys[i] = _operands[i];
+ _operands[i] = null;
+ }
+ else if (object instanceof List)
+ {
+ List sublist = (List)object;
+ Iterator subiter = sublist.listIterator();
+
+ if (subiter.hasNext() && ((String)subiter.next()).equals("quote"))
+ {
+ if (subiter.hasNext())
+ {
+ _operands[i] = subiter.next().toString();
+ if (subiter.hasNext())
+ {
+ throw new QmfException("Extra tokens at end of 'quote'");
+ }
+ }
+ }
+ else
+ {
+ throw new QmfException("Expected '[quote, <token>]'");
+ }
+ }
+ }
+
+ if (iter.hasNext())
+ {
+ throw new QmfException("Too many operands for operation: " + op);
+ }
+ }
+
+ /**
+ * Populates operands that are obtained at evaluation time. In other words operands that are obtained by using
+ * the key obtained from the static operand evaluation to look up an associated property from the QmfData object.
+ * @param data the object to extract the operand(s) from
+ */
+ protected void populateOperands(final QmfData data)
+ {
+ for (int i = 0; i < _operands.length; i++)
+ {
+ String key = _keys[i];
+ if (key != null)
+ {
+ String value = null;
+
+ if (data.hasValue(key))
+ { // If there's a property of the data object named key look it up as a String
+ value = data.getStringValue(key);
+ }
+ else
+ { // If there's no property of the data object named key look up its Described/Managed metadata
+ if (data instanceof QmfManaged)
+ {
+ QmfManaged managedData = (QmfManaged)data;
+ if (key.equals("_schema_id"))
+ {
+ value = managedData.getSchemaClassId().toString();
+ }
+ else if (key.equals("_object_id"))
+ {
+ value = managedData.getObjectId().toString();
+ }
+ else if (managedData.getSchemaClassId().hasValue(key))
+ { // If it's not _schema_id or _object_id check the SchemaClassId properties e.g.
+ // _package_name, _class_name, _type or _hash
+ value = managedData.getSchemaClassId().getStringValue(key);
+ }
+ }
+
+ if (value == null)
+ { // If a value still can't be found for the key check if it's available in the mapEncoded form
+ Map m = data.mapEncode();
+ if (m.containsKey(key))
+ {
+ value = QmfData.getString(m.get(key));
+ }
+ }
+ }
+
+ _operands[i] = value;
+ }
+//System.out.println("key: " + key + ", operand = " + _operands[i]);
+ }
+ }
+
+ /**
+ * Evaluate expression against a QmfData instance.
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public abstract boolean evaluate(final QmfData data);
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanExpression.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanFalse Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanFalse extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanFalse
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanFalse();
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanFalse()
+ {
+ }
+
+ /**
+ * Evaluate "false" expression against a QmfData instance.
+ * @param data the object to evaluate the expression against
+ * @return false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ return false;
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanFalse.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanGreaterEqual Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanGreaterEqual extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanGreaterEqual
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanGreaterEqual(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanGreaterEqual()
+ {
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanGreaterEqual(final List expr) throws QmfException
+ {
+ super(2, expr);
+ }
+
+ /**
+ * Evaluate "greater than or equal to" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null)
+ {
+ return false;
+ }
+
+ try
+ {
+ double l = Double.parseDouble(_operands[0]);
+ double r = Double.parseDouble(_operands[1]);
+ return l >= r;
+ }
+ catch (NumberFormatException nfe)
+ {
+ // If converting to double fails try a lexicographic comparison
+ return _operands[0].compareTo(_operands[1]) >= 0;
+ }
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterEqual.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanGreaterThan Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanGreaterThan extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanGreaterThan
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanGreaterThan(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanGreaterThan()
+ {
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanGreaterThan(final List expr) throws QmfException
+ {
+ super(2, expr);
+ }
+
+ /**
+ * Evaluate "greater than" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null)
+ {
+ return false;
+ }
+
+ try
+ {
+ double l = Double.parseDouble(_operands[0]);
+ double r = Double.parseDouble(_operands[1]);
+ return l > r;
+ }
+ catch (NumberFormatException nfe)
+ {
+ // If converting to double fails try a lexicographic comparison
+ return _operands[0].compareTo(_operands[1]) > 0;
+ }
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanGreaterThan.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanLessEqual Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanLessEqual extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanLessEqual
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanLessEqual(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanLessEqual()
+ {
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanLessEqual(final List expr) throws QmfException
+ {
+ super(2, expr);
+ }
+
+ /**
+ * Evaluate "less than or equal to" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null)
+ {
+ return false;
+ }
+
+ try
+ {
+ double l = Double.parseDouble(_operands[0]);
+ double r = Double.parseDouble(_operands[1]);
+ return l <= r;
+ }
+ catch (NumberFormatException nfe)
+ {
+ // If converting to double fails try a lexicographic comparison
+ return _operands[0].compareTo(_operands[1]) <= 0;
+ }
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessEqual.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,89 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanLessThan Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanLessThan extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanLessThan
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanLessThan(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanLessThan()
+ {
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanLessThan(final List expr) throws QmfException
+ {
+ super(2, expr);
+ }
+
+ /**
+ * Evaluate "less than" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null)
+ {
+ return false;
+ }
+
+ try
+ {
+ double l = Double.parseDouble(_operands[0]);
+ double r = Double.parseDouble(_operands[1]);
+ return l < r;
+ }
+ catch (NumberFormatException nfe)
+ {
+ // If converting to double fails try a lexicographic comparison
+ return _operands[0].compareTo(_operands[1]) < 0;
+ }
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanLessThan.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,79 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanNotEquals Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanNotEquals extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanNotEquals
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanNotEquals(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanNotEquals()
+ {
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanNotEquals(final List expr) throws QmfException
+ {
+ super(2, expr);
+ }
+
+ /**
+ * Evaluate "not equal to" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null)
+ {
+ return false;
+ }
+
+ return !_operands[0].equals(_operands[1]);
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanNotEquals.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,95 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * A class to create and evaluate the BooleanRegexMatch Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanRegexMatch extends BooleanExpression
+{
+ private final Pattern _pattern;
+
+ /**
+ * Factory method to create an instance of BooleanRegexMatch
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanRegexMatch(expr);
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanRegexMatch()
+ {
+ _pattern = null;
+ }
+
+ /**
+ * Main Constructor, uses base class constructor to populate unevaluated operands
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public BooleanRegexMatch(final List expr) throws QmfException
+ {
+ super(2, expr);
+
+ try
+ {
+ _pattern = Pattern.compile(_operands[1]);
+ }
+ catch (PatternSyntaxException pse)
+ {
+ throw new QmfException("Error in regular expression " + pse.getMessage());
+ }
+ }
+
+ /**
+ * Evaluate "regex match" expression against a QmfData instance.
+ * N.B. to avoid complexities with types this class treats operands as Strings performing an appropriate evaluation
+ * of the String that makes sense for a given expression e.g. parsing as a double for >, >=, <, <=
+ *
+ * @param data the object to evaluate the expression against
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ populateOperands(data);
+
+ if (_operands[0] == null || _operands[1] == null || _pattern == null)
+ {
+ return false;
+ }
+
+ Matcher matcher = _pattern.matcher(_operands[0]);
+ return matcher.find();
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanRegexMatch.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,60 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to create and evaluate the BooleanTrue Expression
+ *
+ * @author Fraser Adams
+ */
+public final class BooleanTrue extends BooleanExpression
+{
+ /**
+ * Factory method to create an instance of BooleanTrue
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ * @return an instance of the concrete BooleanExpression
+ */
+ public Expression create(final List expr) throws QmfException
+ {
+ return new BooleanTrue();
+ }
+
+ /**
+ * Basic Constructor primarily used by the prototype instance of each concrete BooleanExpression
+ */
+ public BooleanTrue()
+ {
+ }
+
+ /**
+ * Evaluate "true" expression against a QmfData instance.
+ * @param data the object to evaluate the expression against
+ * @return true.
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ return true;
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/BooleanTrue.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,77 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * This class represents the base class for all Expressions created by expanding the Query predicate.
+ * <p>
+ * Depending on the structure of the expression list there might be a nested structure of Expressions comprising
+ * a mixture of LogicalExpressions and BooleanExpressions.
+ * <p>
+ * The Expression structure is illustrated below in the context of its relationship with QmfQuery.
+ * <img src="doc-files/QmfQuery.png"/>
+ *
+ * @author Fraser Adams
+ */
+public abstract class Expression
+{
+ /**
+ * Factory method to create concrete Expression instances base on the operator name extracted from the expression List.
+ * This method will create a LogicalExpression from an "and", "or" or "not" operator otherwise it will create
+ * a BooleanExpression.
+ *
+ * @param expr the List of Expressions extracted by parsing the Query predicate
+ */
+ public static Expression createExpression(final List expr) throws QmfException
+ {
+ Iterator iter = expr.listIterator();
+ if (!iter.hasNext())
+ {
+ throw new QmfException("Missing operator in predicate expression");
+ }
+
+ String op = (String)iter.next();
+ if (op.equals("not"))
+ {
+ return new LogicalNot(expr);
+ }
+ if (op.equals("and"))
+ {
+ return new LogicalAnd(expr);
+ }
+ if (op.equals("or"))
+ {
+ return new LogicalOr(expr);
+ }
+ return BooleanExpression.createExpression(expr);
+ }
+
+ /**
+ * Evaluate expression against a QmfData instance.
+ * @return true if query matches the QmfData instance, else false.
+ */
+ public abstract boolean evaluate(final QmfData data);
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Expression.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,107 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// JMS Imports
+import javax.jms.Destination; // Needed for replyTo
+import javax.jms.JMSException;
+
+/**
+ * This class represents the reply Handle used for asynchronous operations
+ *
+ * @author Fraser Adams
+ */
+public final class Handle
+{
+ private final String _correlationId;
+ private final Destination _replyTo;
+
+ /**
+ * Construct a Handle containing only a correlationId
+ *
+ * @param correlationId - a String used to tie together requests and responses
+ */
+ public Handle(final String correlationId)
+ {
+ _correlationId = correlationId;
+ _replyTo = null;
+ }
+
+ /**
+ * Construct a Handle containing a correlationId and a replyTo.
+ *
+ * @param correlationId - a String used to tie together requests and responses
+ * @param replyTo - the JMS replyTo
+ */
+ public Handle(final String correlationId, final Destination replyTo)
+ {
+ _correlationId = correlationId;
+ _replyTo = replyTo;
+ }
+
+ /**
+ * Returns the correlationId String.
+ * @return the correlationId String
+ */
+ public String getCorrelationId()
+ {
+ return _correlationId;
+ }
+
+ /**
+ * Return the replyTo Destination.
+ * @return the replyTo Destination
+ */
+ public Destination getReplyTo()
+ {
+ return _replyTo;
+ }
+
+ /**
+ * Returns the Routing Key for the replyTo as a String
+ * <p>
+ * All things being equal it probably makes most logical sense to use the replyTo obtained from the JMS
+ * Message when replying to a request however..... for Qpid up to version 0.12 at least there seems to be
+ * a bug with the replyTo whereby invoking send() on the replyTo causes spurious exchangeDeclares to occur.
+ * The exchangeDeclare is apparently to validate the destination however there is supposed to be a cache
+ * that should prevent this from occurring if the replyTo Destination is reused, but that's broken.
+ * <p>
+ * As an alternative we get hold of the Routing Key of the replyTo which, is sneakily available from getTopicName()
+ * the Routing Key can then be used as the subject of the returned message to enable delivery of the Message
+ * to the appropriate address.
+ * <p>
+ * org.apache.qpid.client.AMQTopic.getTopicName() returns "getRoutingKey().asString()" so this seems an OK
+ * way to get the Routing Key from the replyTo using the pure JMS API.
+ *
+ * @return the Routing Key for the replyTo
+ */
+ public String getRoutingKey()
+ {
+ try
+ {
+ return ((javax.jms.Topic)_replyTo).getTopicName();
+ }
+ catch (JMSException jmse)
+ {
+ return "";
+ }
+ }
+}
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Handle.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to evaluate the LogicalAnd Expression
+ *
+ * @author Fraser Adams
+ */
+
+public final class LogicalAnd extends LogicalExpression
+{
+ /**
+ * This method iterates through collecting the sub-expressions of the Logical Expression
+ *
+ * @param expr the List of sub-expressions extracted by parsing the Query predicate, the first one should be
+ * the Logical Expression's operator name
+ */
+ public LogicalAnd(final List expr) throws QmfException
+ {
+ super(expr);
+ }
+
+ /**
+ * Evaluate the Logical And expression against a QmfData instance.
+ * @return false if any of the sub-expressions is false otherwise returns true
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ for (Expression e : _subExpressions)
+ {
+ if (!e.evaluate(data))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalAnd.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,64 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/*
+ * This class represents the base class for all Logical Expressions (and, or, not) created by expanding the Query predicate.
+ *
+ * @author Fraser Adams
+ */
+public abstract class LogicalExpression extends Expression
+{
+ protected List<Expression> _subExpressions = new ArrayList<Expression>();
+
+ /**
+ * Constructor. This method iterates through collecting the sub-expressions of the Logical Expression
+ *
+ * @param expr the List of sub-expressions extracted by parsing the Query predicate, the first one should be
+ * the Logical Expression's operator name
+ */
+ public LogicalExpression(final List expr) throws QmfException
+ {
+ Iterator iter = expr.listIterator();
+ String op = (String)iter.next();
+//System.out.println("LogicalExpression, op = " + op);
+
+ // Collect sub-expressions
+ while (iter.hasNext())
+ {
+ Object object = iter.next();
+ if (object instanceof List)
+ {
+ _subExpressions.add(createExpression((List)object));
+ }
+ else
+ {
+ throw new QmfException("Operands of " + op + " must be Lists");
+ }
+ }
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalExpression.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to evaluate the LogicalNot Expression
+ *
+ * @author Fraser Adams
+ */
+
+public final class LogicalNot extends LogicalExpression
+{
+ /**
+ * This method iterates through collecting the sub-expressions of the Logical Expression
+ *
+ * @param expr the List of sub-expressions extracted by parsing the Query predicate, the first one should be
+ * the Logical Expression's operator name
+ */
+ public LogicalNot(final List expr) throws QmfException
+ {
+ super(expr);
+ }
+
+ /**
+ * Evaluate the Logical Not expression against a QmfData instance.
+ * @return false if any of the sub-expressions is true otherwise returns true
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ for (Expression e : _subExpressions)
+ {
+ if (e.evaluate(data))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalNot.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,62 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.List;
+
+/**
+ * A class to evaluate the LogicalOr Expression
+ *
+ * @author Fraser Adams
+ */
+
+public final class LogicalOr extends LogicalExpression
+{
+ /**
+ * This method iterates through collecting the sub-expressions of the Logical Expression
+ *
+ * @param expr the List of sub-expressions extracted by parsing the Query predicate, the first one should be
+ * the Logical Expression's operator name
+ */
+ public LogicalOr(final List expr) throws QmfException
+ {
+ super(expr);
+ }
+
+ /**
+ * Evaluate the Logical Or expression against a QmfData instance.
+ * @return true if any of the sub-expressions is true otherwise returns false
+ */
+ public boolean evaluate(final QmfData data)
+ {
+ for (Expression e : _subExpressions)
+ {
+ if (e.evaluate(data))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/LogicalOr.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,67 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+/**
+ * The QMF2 API has a work-queue Callback approach. All asynchronous events are represented by a WorkItem object.
+ * When a QMF event occurs it is translated into a WorkItem object and placed in a FIFO queue. It is left to the
+ * application to drain this queue as needed.
+ * <p>
+ * This new API does require the application to provide a single callback. The callback is used to notify the
+ * application that WorkItem object(s) are pending on the work queue. This callback is invoked by QMF when one or
+ * more new WorkItem objects are added to the queue. To avoid any potential threading issues, the application is
+ * not allowed to call any QMF API from within the context of the callback. The purpose of the callback is to
+ * notify the application to schedule itself to drain the work queue at the next available opportunity.
+ * <p>
+ * For example, a console application may be designed using a select() loop. The application waits in the select()
+ * for any of a number of different descriptors to become ready. In this case, the callback could be written to
+ * simply make one of the descriptors ready, and then return. This would cause the application to exit the wait state,
+ * and start processing pending events.
+ * <p>
+ * The callback is represented by the Notifier virtual base class. This base class contains a single method. An
+ * application derives a custom notification handler from this class, and makes it available to the Console or Agent object.
+ * <p>
+ * The following diagram illustrates the Notifier and WorkQueue QMF2 API Event model.
+ * <p>
+ * Notes
+ * <ol>
+ * <li>There is an alternative (simpler but not officially QMF2) API based on implementing the QmfEventListener.</li>
+ * <li>BlockingNotifier is not part of QMF2 either but is how most people would probably write a Notifier.</li>
+ * <li>It's generally not necessary to use a Notifier as the Console provides a blocking getNextWorkitem() method.</li>
+ * </ol>
+ * <p>
+ * <img src="doc-files/WorkQueueEventModel.png"/>
+ *
+ * @author Fraser Adams
+ */
+public interface Notifier extends QmfCallback
+{
+ /**
+ * Called when the Console internal work queue becomes non-empty due to the arrival of one or more WorkItems.
+ * <p>
+ * This method will be called by the internal QMF management thread. It is illegal to invoke any QMF APIs
+ * from within this callback. The purpose of this callback is to indicate that the application should schedule
+ * itself to process the work items. A common implementation would be to call notify() to unblock a waiting Thread.
+ *
+ */
+ public void indication();
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/Notifier.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+/**
+ * Implementation of QmfEventListener that wraps a Notifier instance. This class populates the WorkItem
+ * queue then invokes the Notifier's indication() method to notify clients of available data.
+ * <p>
+ * This approach allows us to support two separate asynchronous notification APIs without too much effort.
+ *
+ * @author Fraser Adams
+ */
+public final class NotifierWrapper implements QmfEventListener
+{
+ private final Notifier _notifier;
+ private final WorkQueue _workQueue;
+
+ /**
+ * Wraps a Notifier and WorkQueue so that they me be triggered by a QmfEventListener onEvent() call.
+ * @param notifier the Notifier instance that will be triggered when NotifierWrapper receives a WorkItem.
+ * @param workQueue the WorkQueue instance that the WorkItem will be placed on.
+ */
+ public NotifierWrapper(final Notifier notifier, final WorkQueue workQueue)
+ {
+ _notifier = notifier;
+ _workQueue = workQueue;
+ }
+
+ /**
+ * This method adds the WorkItem to the WorkQueue then notifies any clients through the Notifier.indication().
+ *
+ * @param item the WorkItem to add to the queue
+ */
+ public void onEvent(final WorkItem item)
+ {
+ _workQueue.addWorkItem(item);
+ _notifier.indication();
+ }
+}
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NotifierWrapper.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+/**
+ * Implementation of QmfEventListener with an empty onEvent().
+ * <p>
+ * Agent or Console instantiate this class if no QmfCallback is supplied so they can avoid lots of ugly tests for
+ * _eventListener == null.
+ *
+ * @author Fraser Adams
+ */
+public final class NullQmfEventListener implements QmfEventListener
+{
+ /**
+ * Passes a WorkItem to the listener. This class provides a null implementation
+ *
+ * @param item the WorkItem passed to the listener
+ */
+ public void onEvent(final WorkItem item)
+ {
+ // Null implementation
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/NullQmfEventListener.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,159 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+// Misc Imports
+import java.util.Map;
+
+/**
+ * This class provides a wrapper for QMF Object IDs to enable easier comparisons.
+ * <p>
+ * QMF Object IDs are Maps and <i>in theory</i> equals should work, but strings in QMF are actually often returned
+ * as byte[] due to inconsistent binary and UTF-8 encodings being used and byte[].equals() compares the address not a
+ * bytewise comparison.
+ * <p>
+ * This class creates a String from the internal ObjectId state information to enable easier comparison and rendering.
+ *
+ * @author Fraser Adams
+ */
+public final class ObjectId extends QmfData
+{
+ private final String _agentName;
+ private final String _objectName;
+ private final long _agentEpoch;
+
+ /**
+ * Create an ObjectId given the ID created via ObjectId.toString().
+ * @param oid a string created via ObjectId.toString().
+ */
+ public ObjectId(String oid)
+ {
+ String[] split = oid.split("@");
+
+ _agentName = split.length == 3 ? split[0] : "";
+ _agentEpoch = split.length == 3 ? Long.parseLong(split[1]) : 0;
+ _objectName = split.length == 3 ? split[2] : "";
+
+ setValue("_agent_name", _agentName);
+ setValue("_agent_epoch", _agentEpoch);
+ setValue("_object_name", _objectName);
+ }
+
+ /**
+ * Create an ObjectId given an agentName, objectName and agentEpoch.
+ * @param agentName the name of the Agent managing the object.
+ * @param objectName the name of the managed object.
+ * @param agentEpoch a count used to identify if an Agent has been restarted.
+ */
+ public ObjectId(String agentName, String objectName, long agentEpoch)
+ {
+ _agentName = agentName;
+ _objectName = objectName;
+ _agentEpoch = agentEpoch;
+ setValue("_agent_name", _agentName);
+ setValue("_object_name", _objectName);
+ setValue("_agent_epoch", _agentEpoch);
+ }
+
+ /**
+ * Create an ObjectId from a Map. In essence it "deserialises" its state from the Map.
+ * @param m the Map the Object is retrieving its state from.
+ */
+ public ObjectId(Map m)
+ {
+ super(m);
+ _agentName = getStringValue("_agent_name");
+ _objectName = getStringValue("_object_name");
+ _agentEpoch = getLongValue("_agent_epoch");
+ }
+
+ /**
+ * Create an ObjectId from a QmfData object. In essence it "deserialises" its state from the QmfData object.
+ * @param qmfd the QmfData the Object is retrieving its state from.
+ */
+ public ObjectId(QmfData qmfd)
+ {
+ this(qmfd.mapEncode());
+ }
+
+ /**
+ * Returns the name of the Agent managing the object.
+ * @return the name of the Agent managing the object.
+ */
+ public String getAgentName()
+ {
+ return _agentName;
+ }
+
+ /**
+ * Returns the name of the managed object.
+ * @return the name of the managed object.
+ */
+ public String getObjectName()
+ {
+ return _objectName;
+ }
+
+ /**
+ * Returns the Epoch count.
+ * @return the Epoch count.
+ */
+ public long getAgentEpoch()
+ {
+ return _agentEpoch;
+ }
+
+ /**
+ * Compares two ObjectId objects for equality.
+ * @param rhs the right hands side ObjectId in the comparison.
+ * @return true if the two ObjectId objects are equal otherwise returns false.
+ */
+ @Override
+ public boolean equals(Object rhs)
+ {
+ if (rhs instanceof ObjectId)
+ {
+ return toString().equals(rhs.toString());
+ }
+ return false;
+ }
+
+ /**
+ * Returns the ObjectId hashCode.
+ * @return the ObjectId hashCode.
+ */
+ @Override
+ public int hashCode()
+ {
+ return toString().hashCode();
+ }
+
+ /**
+ * Returns a String representation of the ObjectId.
+ * @return a String representation of the ObjectId.
+ */
+ @Override
+ public String toString()
+ {
+ return _agentName + "@" + _agentEpoch + "@" + _objectName;
+ }
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/ObjectId.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java?rev=1465662&view=auto
==============================================================================
--- qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java (added)
+++ qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java Mon Apr 8 15:19:04 2013
@@ -0,0 +1,33 @@
+/*
+ *
+ * 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.qpid.qmf2.common;
+
+/**
+ * QmfCallback is a "marker interface" used to specify objects that will be notified of a particular
+ * condition by the Console. This interface is extended by the QmfEventListener and Notifier interfaces
+ * in order to provide two different types of callback semantic.
+ *
+ * @author Fraser Adams
+ */
+public interface QmfCallback
+{
+}
+
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/trunk/qpid/tools/src/java/src/main/java/org/apache/qpid/qmf2/common/QmfCallback.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org