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