summaryrefslogtreecommitdiff
path: root/qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java')
-rw-r--r--qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java277
1 files changed, 277 insertions, 0 deletions
diff --git a/qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java b/qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java
new file mode 100644
index 0000000000..10d764d3d0
--- /dev/null
+++ b/qpid/tools/src/java/qpid-qmf2/src/main/java/org/apache/qpid/qmf2/console/QmfConsoleData.java
@@ -0,0 +1,277 @@
+/*
+ *
+ * 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.console;
+
+// Misc Imports
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+// QMF2 Imports
+import org.apache.qpid.qmf2.common.ObjectId;
+import org.apache.qpid.qmf2.common.QmfData;
+import org.apache.qpid.qmf2.common.QmfException;
+import org.apache.qpid.qmf2.common.QmfManaged;
+import org.apache.qpid.qmf2.common.SchemaClassId;
+
+/**
+ * Subclass of QmfManaged to provide a Console specific representation of management data.
+ * <p>
+ * The Console application represents a managed data object by the QmfConsoleData class. The Console has "read only"
+ * access to the data values in the data object via this class. The Console can also invoke the methods defined by
+ * the object via this class.
+ * <p>
+ * The actual data stored in this object is cached from the Agent. In order to update the cached values,
+ * the Console invokes the instance's refresh() method.
+ * <p>
+ * Note that the refresh() and invokeMethod() methods require communication with the remote Agent. As such, they
+ * may block. For these two methods, the Console has the option of blocking in the call until the call completes.
+ * Optionally, the Console can receive a notification asynchronously when the operation is complete.
+ *
+ * @author Fraser Adams
+ */
+public class QmfConsoleData extends QmfManaged
+{
+ private final Agent _agent;
+ private long _updateTimestamp;
+ private long _createTimestamp;
+ private long _deleteTimestamp;
+
+ /**
+ * The main constructor, taking a java.util.Map as a parameter. In essence it "deserialises" its state from the Map.
+ *
+ * @param m the map used to construct the SchemaClass.
+ * @param a the Agent that manages this object.
+ */
+ public QmfConsoleData(final Map m, final Agent a)
+ {
+ super(m);
+ long currentTime = System.currentTimeMillis()*1000000l;
+ _updateTimestamp = m.containsKey("_update_ts") ? getLong(m.get("_update_ts")) : currentTime;
+ _createTimestamp = m.containsKey("_create_ts") ? getLong(m.get("_create_ts")) : currentTime;
+ _deleteTimestamp = m.containsKey("_delete_ts") ? getLong(m.get("_delete_ts")) : currentTime;
+ _agent = a;
+ }
+
+ /**
+ * Sets the state of the QmfConsoleData, used as an assignment operator.
+ *
+ * @param m the Map used to initialise the QmfConsoleData
+ */
+ @SuppressWarnings("unchecked")
+ public void initialise(final Map m)
+ {
+ Map<String, Object> values = (Map<String, Object>)m.get("_values");
+ _values = (values == null) ? m : values;
+
+ Map<String, String> subtypes = (Map<String, String>)m.get("_subtypes");
+ _subtypes = subtypes;
+
+ setSchemaClassId(new SchemaClassId((Map)m.get("_schema_id")));
+ setObjectId(new ObjectId((Map)m.get("_object_id")));
+
+ long currentTime = System.currentTimeMillis()*1000000l;
+ _updateTimestamp = m.containsKey("_update_ts") ? getLong(m.get("_update_ts")) : currentTime;
+ _createTimestamp = m.containsKey("_create_ts") ? getLong(m.get("_create_ts")) : currentTime;
+ _deleteTimestamp = m.containsKey("_delete_ts") ? getLong(m.get("_delete_ts")) : currentTime;
+ }
+
+ /**
+ * Sets the state of the QmfConsoleData, used as an assignment operator.
+ *
+ * @param rhs the QmfConsoleData used to initialise the QmfConsoleData
+ */
+ public void initialise(final QmfConsoleData rhs)
+ {
+ _values = rhs._values;
+ _subtypes = rhs._subtypes;
+ setSchemaClassId(rhs.getSchemaClassId());
+ setObjectId(rhs.getObjectId());
+ _updateTimestamp = rhs._updateTimestamp;
+ _createTimestamp = rhs._createTimestamp;
+ _deleteTimestamp = rhs._deleteTimestamp;
+ }
+
+ /**
+ * Return a list of timestamps describing the lifecycle of the object.
+ * @return a list of timestamps describing the lifecycle of the object.
+ * <p>
+ * All timestamps are represented by the AMQP timestamp type recorded in nanoseconds since the epoch.
+ * <pre>
+ * [0] = time of last update from Agent,
+ * [1] = creation timestamp
+ * [2] = deletion timestamp, or zero if not deleted.
+ * </pre>
+ */
+ public final long[] getTimestamps()
+ {
+ long[] timestamps = {_updateTimestamp, _createTimestamp, _deleteTimestamp};
+ return timestamps;
+ }
+
+ /**
+ * Return the creation timestamp.
+ * @return the creation timestamp. Timestamps are recorded in nanoseconds since the epoch.
+ */
+ public final long getCreateTime()
+ {
+ return _createTimestamp;
+ }
+
+ /**
+ * Return the update timestamp.
+ * @return the update timestamp. Timestamps are recorded in nanoseconds since the epoch.
+ */
+ public final long getUpdateTime()
+ {
+ return _updateTimestamp;
+ }
+
+ /**
+ * Return the deletion timestamp, or zero if not deleted.
+ * @return the deletion timestamp, or zero if not deleted. Timestamps are recorded in nanoseconds since the epoch.
+ */
+ public final long getDeleteTime()
+ {
+ return _deleteTimestamp;
+ }
+
+ /**
+ * Return true if deletion timestamp not zero.
+ * @return true if deletion timestamp not zero.
+ */
+ public final boolean isDeleted()
+ {
+ return getDeleteTime() != 0;
+ }
+
+ /**
+ * Request that the Agent updates the value of this object's contents.
+ */
+ public final void refresh() throws QmfException
+ {
+ refresh(-1);
+ }
+
+ /**
+ * Request that the Agent updates the value of this object's contents.
+ *
+ * @param timeout the maximum time in seconds to wait for a response, overrides default replyTimeout.
+ */
+ public final void refresh(final int timeout) throws QmfException
+ {
+ if (_agent == null)
+ {
+ throw new QmfException("QmfConsoleData.refresh() called with null Agent");
+ }
+ QmfConsoleData newContents = _agent.refresh(getObjectId(), null, timeout);
+ if (newContents == null)
+ {
+ _deleteTimestamp = System.currentTimeMillis()*1000000l;
+ }
+ else
+ {
+ // Save the original values of create and delete timestamps as the ManagementAgent doesn't return
+ // these on a call to getObjects(ObjectId);
+ long createTimestamp = _createTimestamp;
+ long deleteTimestamp = _deleteTimestamp;
+ initialise(newContents);
+ _createTimestamp = createTimestamp;
+ _deleteTimestamp = deleteTimestamp;
+ }
+ }
+
+ /**
+ * Request that the Agent updates the value of this object's contents asynchronously.
+ *
+ * @param replyHandle the correlation handle used to tie asynchronous refresh requests with responses.
+ */
+ public final void refresh(final String replyHandle) throws QmfException
+ {
+ if (_agent == null)
+ {
+ throw new QmfException("QmfConsoleData.refresh() called with null Agent");
+ }
+ _agent.refresh(getObjectId(), replyHandle, -1);
+ }
+
+ /**
+ * Invoke the named method on this instance.
+ *
+ * @param name name of the method to invoke.
+ * @param inArgs inArgs an unordered set of key/value pairs comprising the method arguments.
+ * @return the MethodResult.
+ */
+ public final MethodResult invokeMethod(final String name, final QmfData inArgs) throws QmfException
+ {
+ if (_agent == null)
+ {
+ throw new QmfException("QmfConsoleData.invokeMethod() called with null Agent");
+ }
+ return _agent.invokeMethod(getObjectId(), name, inArgs, -1);
+ }
+
+ /**
+ * Invoke the named method on this instance.
+ *
+ * @param name name of the method to invoke.
+ * @param inArgs inArgs an unordered set of key/value pairs comprising the method arguments.
+ * @param timeout the maximum time in seconds to wait for a response, overrides default replyTimeout.
+ * @return the MethodResult.
+ */
+ public final MethodResult invokeMethod(final String name, final QmfData inArgs, final int timeout) throws QmfException
+ {
+ if (_agent == null)
+ {
+ throw new QmfException("QmfConsoleData.invokeMethod() called with null Agent");
+ }
+ return _agent.invokeMethod(getObjectId(), name, inArgs, timeout);
+ }
+
+ /**
+ * Invoke the named method asynchronously on this instance.
+ *
+ * @param name name of the method to invoke.
+ * @param inArgs inArgs an unordered set of key/value pairs comprising the method arguments.
+ * @param replyHandle the correlation handle used to tie asynchronous method requests with responses.
+ */
+ public final void invokeMethod(final String name, final QmfData inArgs, final String replyHandle) throws QmfException
+ {
+ if (_agent == null)
+ {
+ throw new QmfException("QmfConsoleData.invokeMethod() called with null Agent");
+ }
+ _agent.invokeMethod(getObjectId(), name, inArgs, replyHandle);
+ }
+
+ /**
+ * Helper/debug method to list the QMF Object properties and their type.
+ */
+ @Override
+ public void listValues()
+ {
+ super.listValues();
+ System.out.println("_create_ts: " + new Date(getCreateTime()/1000000l));
+ System.out.println("_update_ts: " + new Date(getUpdateTime()/1000000l));
+ System.out.println("_delete_ts: " + new Date(getDeleteTime()/1000000l));
+ }
+}
+