You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ar...@apache.org on 2008/09/29 14:02:56 UTC

svn commit: r700077 [2/4] - in /incubator/qpid/trunk/qpid/java: client/src/main/java/org/apache/qpid/management/ client/src/main/java/org/apache/qpid/management/configuration/ client/src/main/java/org/apache/qpid/management/domain/ client/src/main/java...

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownAccessCodeException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownAccessCodeException.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownAccessCodeException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownAccessCodeException.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,53 @@
+/*
+ *
+ * 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.management.configuration;
+
+/**
+ * Thrown when no access mode is found in configuration associated to the given code.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class UnknownAccessCodeException extends Exception
+{
+    private static final long serialVersionUID = 2350963503092509119L;
+    private final int _code;
+    
+    /**
+     * Builds a new UnknownAccessCodeException with the given code.
+     * 
+     * @param code the access code.
+     */
+    UnknownAccessCodeException(int code)
+    {
+        super(String.valueOf(code));
+        this._code = code;
+    }
+
+    /**
+     * Returns the unknown code.
+     * 
+     * @return the unknown code.
+     */
+    public int getCode ()
+    {
+        return _code;
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownBrokerException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownBrokerException.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownBrokerException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownBrokerException.java Mon Sep 29 05:02:54 2008
@@ -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.management.configuration;
+
+import java.util.UUID;
+
+/**
+ * Thrown when someone requests connection data for an unknown broker.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class UnknownBrokerException extends Exception
+{
+    private static final long serialVersionUID = 4965395428832158924L;
+
+    /**
+     * Builds a new UnknownBrokerException with the given broker id.
+     * 
+     * @param brokerId the broker identifier.
+     */
+    UnknownBrokerException(UUID brokerId)
+    {
+        super(String.valueOf(brokerId));
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownTypeCodeException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownTypeCodeException.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownTypeCodeException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/configuration/UnknownTypeCodeException.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,53 @@
+/*
+ *
+ * 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.management.configuration;
+
+/**
+ * Thrown when no type is found in configuration associated to the given code.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class UnknownTypeCodeException extends Exception
+{
+    private static final long serialVersionUID = 5440934037645111591L;
+    private int _code;
+
+    /**
+     * Builds a new UnknownTypeCodeException with the given code.
+     * 
+     * @param code the access code.
+     */
+    UnknownTypeCodeException(int code)
+    {
+        super(String.valueOf(code));
+        this._code = code;
+    }
+
+    /**
+     * Returns the unknown code.
+     * 
+     * @return the unknown code.
+     */
+    public int getCode ()
+    {
+        return _code;
+    }
+}

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/BaseMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/BaseMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/BaseMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/BaseMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,54 @@
+/*
+ *
+ * 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.management.domain.handler.base;
+
+import org.apache.qpid.management.domain.model.DomainModel;
+import org.apache.qpid.transport.util.Logger;
+
+/**
+ * Base class for all message handlers. 
+ * A message handler is an handler for a specific type of message.
+ * Message type is defined by the opcode.
+ * 
+ * @author Andrea Gazzarini
+ */
+public abstract class BaseMessageHandler implements IMessageHandler
+{
+    /**
+     * Logger used for logging.
+     */
+    protected final Logger _logger = Logger.get(getClass());
+    
+    /**
+     * Managed broker domain model. 
+     */
+    protected DomainModel _domainModel;
+    
+    /**
+     * Sets the broker domain model.
+     * 
+     * @param domainModel the broker domain model.
+     */
+    public void setDomainModel(DomainModel domainModel)
+    {
+        this._domainModel = domainModel;
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/ContentIndicationMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/ContentIndicationMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/ContentIndicationMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/ContentIndicationMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,116 @@
+/*
+ *
+ * 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.management.domain.handler.base;
+
+import org.apache.qpid.management.domain.model.type.Binary;
+import org.apache.qpid.transport.codec.ManagementDecoder;
+
+/**
+ * Base class for content indication message handlers.
+ * 
+ * @author Andrea Gazzarini
+ */
+public abstract class ContentIndicationMessageHandler extends BaseMessageHandler
+{
+    /**
+     * Processes the income message.
+     * 
+     * @param decoder the decoder used to parse the message.
+     * @param sequenceNumber the sequence number of the message.
+     */
+    public final void process (ManagementDecoder decoder, int sequenceNumber)
+    {      
+        String packageName = decoder.readStr8();
+        String className = decoder.readStr8();
+        Binary classHash = new Binary(decoder.readBin128());
+    
+        long timeStampOfCurrentSample = decoder.readDatetime();
+        long timeObjectWasCreated = decoder.readDatetime();
+        long timeObjectWasDeleted = decoder.readDatetime();
+        
+       
+        
+        Binary objectId = new Binary(decoder.readBin128());
+                
+        if (objectHasBeenRemoved(timeObjectWasDeleted, timeStampOfCurrentSample))
+        {
+            removeObjectInstance(packageName,className,classHash,objectId);
+        } else 
+        {
+            updateDomainModel(
+                    packageName,
+                    className,
+                    classHash,
+                    objectId,
+                    timeStampOfCurrentSample,
+                    timeObjectWasCreated,
+                    timeObjectWasDeleted,
+                    decoder.readReaminingBytes());
+        }
+    }
+    
+    /**
+     * Removes an object instance from the domain model.
+     * 
+     * @param packageName the package name.
+     * @param className the class name.
+     * @param classHash the class hash.
+     * @param objectId the object identifier.
+     */
+    void removeObjectInstance(String packageName, String className,Binary classHash, Binary objectId)
+    {
+        _domainModel.removeObjectInstance(packageName,className,classHash,objectId);        
+    }
+    
+    /**
+     * Checks if the timestamps contained in the message indicate that the object has been removed.
+     *  
+     * @param deletionTimestamp time object was deleted.
+     * @param now timestamp of the current message.
+     * @return true if the object has been removed, false otherwise.
+     */
+    boolean objectHasBeenRemoved(long deletionTimestamp, long now) {
+        return (deletionTimestamp != 0) && (now > deletionTimestamp);
+    }
+    
+    /**
+     * Updates domain model with the incoming data.
+     *  This is a template method that each concrete subclass must implement in order to update the domain model
+     *  with the incoming data.
+     *  
+     * @param packageName the name of the package.
+     * @param className the name of the class.
+     * @param objectId the object identifier.
+     * @param timeStampOfCurrentSample timestamp of current sample.
+     * @param timeObjectWasCreated time object was created.
+     * @param timeObjectWasDeleted time object was deleted.
+     * @param contentData object instance incoming data.
+     */
+    protected abstract void updateDomainModel(
+            String packageName, 
+            String className, 
+            Binary classHash,
+            Binary objectId, 
+            long timeStampOfCurrentSample,
+            long timeObjectWasCreated,
+            long timeObjectWasDeleted,
+            byte []contentData );
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/IMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/IMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/IMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/base/IMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.management.domain.handler.base;
+
+import org.apache.qpid.management.domain.model.DomainModel;
+import org.apache.qpid.transport.codec.ManagementDecoder;
+
+/**
+ * Interface definition for a processor able to deal with a specific message.
+ * The concrete implementor must define what has to be done with the supplied (incoming) stream and the sequence 
+ * number.
+ * 
+ * @author Andrea Gazzarini.
+ */
+public interface IMessageHandler
+{
+    /**
+     * Processes the (incoming) stream message.
+     * Note that the main controller (the component that is controlling this handler) has already read the magic number and 
+     * the sequence number so here concrete implementors must start from that point (that is, just after the  sequence 
+     * number).
+     * 
+     * @param decoder the stream decoder.
+     * @param sequenceNumber the sequence number of the message.
+     */
+    void process (ManagementDecoder decoder, int sequenceNumber);
+    
+    /**
+     * Injects the domain model into this handler.
+     * 
+     * @param domainModel the domain model.
+     */
+    void setDomainModel(DomainModel domainModel);
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/ConfigurationMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/ConfigurationMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/ConfigurationMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/ConfigurationMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,58 @@
+/*
+ *
+ * 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.management.domain.handler.impl;
+
+import org.apache.qpid.management.domain.handler.base.ContentIndicationMessageHandler;
+import org.apache.qpid.management.domain.model.type.Binary;
+
+/**
+ * Schema Response message handler.
+ * This handler is responsible to process 'c'(opcode) messages sent by the management broker.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class ConfigurationMessageHandler extends ContentIndicationMessageHandler
+{  
+    /**
+     * Broker domain model is going to be updated with incoming configuration data.
+     * 
+     * @param packageName the name of the package.
+     * @param className the name of the class.
+     * @param objectId the object identifier.
+     * @param timeStampOfCurrentSample the timestamp of incoming data.
+     * @param timeObjectWasCreated time object was created.
+     * @param timeObjectWasDeleted time object was deleted.
+     */
+    @Override
+    protected void updateDomainModel (
+            String packageName, 
+            String className, 
+            Binary classHash,
+            Binary objectId,
+            long timeStampOfCurrentSample, 
+            long timeObjectWasCreated, 
+            long timeObjectWasDeleted, 
+            byte[] contentData)
+    {
+        // TODO : deal with timestamps, too
+        _domainModel.addConfigurationRawData(packageName,className,classHash,objectId,contentData);        
+    }
+ }
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/InstrumentationMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/InstrumentationMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/InstrumentationMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/InstrumentationMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,58 @@
+/*
+ *
+ * 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.management.domain.handler.impl;
+
+import org.apache.qpid.management.domain.handler.base.ContentIndicationMessageHandler;
+import org.apache.qpid.management.domain.model.type.Binary;
+
+/**
+ * Schema Response message handler.
+ * This handler is responsible to process 'i'(opcode) messages sent by the management broker.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class InstrumentationMessageHandler extends ContentIndicationMessageHandler
+{  
+    /**
+     * Broker domain model is going to be updated with incoming instrumentation data.
+     * 
+     * @param packageName the name of the package.
+     * @param className the name of the class.
+     * @param objectId the object identifier.
+     * @param timeStampOfCurrentSample the timestamp of incoming data.
+     * @param timeObjectWasCreated time object was created.
+     * @param timeObjectWasDeleted time object was deleted.
+     */
+    @Override
+    protected void updateDomainModel (
+            String packageName, 
+            String className, 
+            Binary classHash,
+            Binary objectId,
+            long timeStampOfCurrentSample, 
+            long timeObjectWasCreated, 
+            long timeObjectWasDeleted, 
+            byte[] contentData)
+    {
+        // TODO : deal with timestamps, too
+        _domainModel.addInstrumentationRawData(packageName,className,classHash,objectId,contentData);        
+    }
+ }
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodOrEventDataTransferObject.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodOrEventDataTransferObject.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodOrEventDataTransferObject.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodOrEventDataTransferObject.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,68 @@
+/*
+ *
+ * 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.management.domain.handler.impl;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Simple transfer object used for holding method / event definition data.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class MethodOrEventDataTransferObject
+{
+    private final Map<String, Object> _definition;
+    private List<Map<String, Object>> _argumentDefinitions;
+    
+    /**
+     * Builds a new trasfer object with the given parameters.
+     * 
+     * @param definition the method definition.
+     * @param argumentDefinitions the arguments definitions.
+     */
+    public MethodOrEventDataTransferObject(
+            Map<String, Object> definition,
+            List<Map<String, Object>> argumentDefinitions)
+    {
+        this._definition = definition;
+        this._argumentDefinitions = argumentDefinitions;
+    }
+    
+    /**
+     * Returns the method definition.
+     * 
+     * @return the method definition.
+     */
+    public Map<String, Object> getDefinition() {
+        return _definition;
+    }
+    
+    /**
+     * Returns the arguemnts definitions.
+     * 
+     * @return the arguemnts definitions.
+     */
+    public List<Map<String, Object>> getArgumentsDefinitions() 
+    {
+        return _argumentDefinitions;
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodResponseMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodResponseMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodResponseMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/MethodResponseMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,41 @@
+/*
+ *
+ * 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.management.domain.handler.impl;
+
+import org.apache.qpid.management.domain.handler.base.BaseMessageHandler;
+import org.apache.qpid.transport.codec.ManagementDecoder;
+import org.apache.qpid.transport.util.Logger;
+
+public class MethodResponseMessageHandler extends BaseMessageHandler
+{
+    private final static Logger LOGGER = Logger.get(MethodResponseMessageHandler.class);
+    
+    public void process (ManagementDecoder decoder, int sequenceNumber)
+    {
+        LOGGER.debug("<QMAN-200009> : Incoming method response message.");
+        
+        long statusCode = decoder.readUint32();
+        String statusText = decoder.readStr8();
+        
+        LOGGER.debug("<QMAN-200010> : Status code : %s", statusCode);
+        LOGGER.debug("<QMAN-200011> : Status text : %s", statusText);
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/SchemaResponseMessageHandler.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/SchemaResponseMessageHandler.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/SchemaResponseMessageHandler.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/handler/impl/SchemaResponseMessageHandler.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,158 @@
+/*
+ *
+ * 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.management.domain.handler.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.management.Names;
+import org.apache.qpid.management.domain.handler.base.BaseMessageHandler;
+import org.apache.qpid.management.domain.model.type.Binary;
+import org.apache.qpid.transport.codec.ManagementDecoder;
+
+/**
+ * Schema Response message handler.
+ * This handler is responsible to process 'S'(opcode) messages sent by the management broker containing the full
+ * schema details for a class.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class SchemaResponseMessageHandler extends BaseMessageHandler
+{  
+    /**
+     * Processes an incoming  schema response.
+     * This will be used for building the corresponding class definition.
+     * 
+     *  @param decoder the decoder used for parsing the incoming stream.
+     *  @param sequenceNumber the sequence number of the incoming message.
+     */
+    public void process (ManagementDecoder decoder, int sequenceNumber)
+    {        
+        try 
+        {
+            String packageName = decoder.readStr8();
+            String className = decoder.readStr8();
+            
+            Binary schemaHash = new Binary(decoder.readBin128());
+            
+            int howManyProperties = decoder.readUint16();
+            int howManyStatistics = decoder.readUint16();
+            int howManyMethods = decoder.readUint16();
+            int howManyEvents = decoder.readUint16();
+                                    
+            // FIXME : Divide between schema error and raw data conversion error!!!!
+            _domainModel.addSchema(
+                    packageName, 
+                    className, 
+                    schemaHash,
+                    getProperties(decoder, howManyProperties), 
+                    getStatistics(decoder, howManyStatistics), 
+                    getMethods(decoder, howManyMethods), 
+                    getEvents(decoder, howManyEvents));
+        } catch(Exception exception) 
+        {
+            _logger.error(exception,"<QMAN-100007> : Q-Man was unable to process the schema response message.");
+        }
+    }
+    
+    /**
+     * Reads from the incoming message stream the properties definitions.
+     * 
+     * @param decoder the decoder used for decode incoming data.
+     * @param howManyProperties the number of properties to read. 
+     * @return a list of maps. Each map contains a property definition.
+     */
+    List<Map<String, Object>> getProperties(ManagementDecoder decoder,int howManyProperties) 
+    {
+        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(howManyProperties);        
+        for (int i = 0; i < howManyProperties; i++ )
+        {
+            result.add(decoder.readMap());
+        }
+        return result;
+    }
+    
+    /**
+     * Reads the statistics definitions from the incoming message stream.
+     * 
+     * @param decoder the decoder used for decode incoming data.
+     * @param howManyProperties the number of statistics to read. 
+     * @return a list of maps. Each map contains a statistic definition.
+     */
+    List<Map<String, Object>> getStatistics(ManagementDecoder decoder,int howManyStatistics) 
+    {
+        List<Map<String, Object>> result = new ArrayList<Map<String, Object>>(howManyStatistics);        
+        for (int i = 0; i < howManyStatistics; i++ )
+        {
+            result.add(decoder.readMap());
+        }
+        return result;
+    }
+
+    /**
+     * Reads the methods definitions from the incoming message stream.
+     * 
+     * @param decoder the decoder used for decode incoming data.
+     * @param howManyMethods the number of methods to read. 
+     * @return a list method definitions.
+     */
+    List<MethodOrEventDataTransferObject> getMethods(ManagementDecoder decoder, int howManyMethods)
+    {
+        List<MethodOrEventDataTransferObject> result = new ArrayList<MethodOrEventDataTransferObject>(howManyMethods);
+        for (int i  = 0; i < howManyMethods; i++) 
+        {   
+            Map<String,Object> method = decoder.readMap();
+            int howManyArguments = (Integer) method.get(Names.ARG_COUNT_PARAM_NAME);
+
+            List<Map<String,Object>> arguments = new ArrayList<Map<String,Object>>(howManyArguments);
+            for (int argIndex = 0; argIndex < howManyArguments; argIndex++){
+                arguments.add(decoder.readMap());
+            }
+            result.add(new MethodOrEventDataTransferObject(method,arguments));
+        }        
+        return result;
+    }
+    
+    /**
+     * Reads the events definitions from the incoming message stream.
+     * 
+     * @param decoder the decoder used for decode incoming data.
+     * @param howManyEvents the number of events to read. 
+     * @return a list event definitions.
+     */
+    List<MethodOrEventDataTransferObject> getEvents(ManagementDecoder decoder, int howManyEvents)
+    {
+        List<MethodOrEventDataTransferObject> result = new ArrayList<MethodOrEventDataTransferObject>(howManyEvents);
+        for (int i  = 0; i < howManyEvents; i++) 
+        {   
+            Map<String,Object> method = decoder.readMap();
+            int howManyArguments = (Integer) method.get(Names.ARG_COUNT_PARAM_NAME);
+
+            List<Map<String,Object>> arguments = new ArrayList<Map<String,Object>>(howManyArguments);
+            for (int argIndex = 0; argIndex < howManyArguments; argIndex++){
+                arguments.add(decoder.readMap());
+            }
+            result.add(new MethodOrEventDataTransferObject(method,arguments));
+        }        
+        return result;
+    }
+ }
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/AccessMode.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/AccessMode.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/AccessMode.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/AccessMode.java Mon Sep 29 05:02:54 2008
@@ -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.management.domain.model;
+
+/**
+ * Enumeration for Access modes.
+ * 
+ * @author Andrea Gazzarini
+ */
+public enum AccessMode 
+{
+    RC { @Override public String toString() { return "Read-Create"; }},
+    RO { @Override public String toString() { return "Read-Only"; }},
+    RW { @Override public String toString() { return "Read-Write"; }}
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/Direction.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/Direction.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/Direction.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/Direction.java Mon Sep 29 05:02:54 2008
@@ -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.management.domain.model;
+
+/**
+ * Enumeration of allowed method argument direction codes.
+ * 
+ * @author Andrea Gazzarini
+ */
+public enum Direction
+{
+    I{ @Override public String toString() { return "Input"; }},
+    O{ @Override public String toString() { return "Output"; }},
+    IO{ @Override public String toString() { return "Input-Output"; }};
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/DomainModel.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/DomainModel.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/DomainModel.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/DomainModel.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,174 @@
+/*
+ *
+ * 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.management.domain.model;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.management.domain.handler.impl.MethodOrEventDataTransferObject;
+import org.apache.qpid.management.domain.model.type.Binary;
+
+/**
+ * Broker domain model.
+ * This is the local representation of a remote broker domain model.
+ * 
+ * @author Andrea Gazzarini
+ */
+public class DomainModel
+{
+    private final UUID _id;
+    
+    /** Here the known packages of the remote broker are stored. */
+    Map<String,QpidPackage> _packages = new HashMap<String, QpidPackage>();
+    
+    /**
+     * Builds a new domain model with the given broker identifier.
+     * 
+     * @param brokerId the broker identifier.
+     */
+    public DomainModel(UUID brokerId)
+    {
+        this._id = brokerId;
+    }
+
+    /**
+     * Returns the identifier of the broker associated with this domain model.
+     * 
+     * @return the identifier of the broker associated with this domain model.
+     */
+    public UUID getBrokerId()
+    {
+        return _id;
+    }
+    
+    /**
+     * Adds the specified schema to this domain model.
+     * 
+     * @param packageName the package name.
+     * @param className the class name.
+     * @param classHash the class schema hash.
+     * @param properties the class properties.
+     * @param statistics the class statistics.
+     * @param methods the class methods.
+     * @param events the class events.
+     * @throws UnableToBuildFeatureException 
+     */
+    public void addSchema(
+            String packageName, 
+            String className, 
+            Binary classHash,
+            List<Map<String, Object>> properties,
+            List<Map<String, Object>> statistics,
+            List<MethodOrEventDataTransferObject> methods, 
+            List<MethodOrEventDataTransferObject> events) throws UnableToBuildFeatureException
+    {
+        QpidPackage qpidPackage = getPackageByName(packageName);
+        qpidPackage.addClassDefinition(className,classHash,properties,statistics,methods, events);
+    }
+
+    /**
+     * Gets the package with the specified name.
+     * Note that if the package doesn't exist a new one will be created and returned.
+     * 
+     * @param packageName the name of the package.
+     * @return the package.
+     */
+    QpidPackage getPackageByName (String packageName)
+    {
+        QpidPackage qpidPackage = _packages.get(packageName);
+        if (qpidPackage == null) 
+        {
+            qpidPackage = new QpidPackage(packageName,this);
+            _packages.put(packageName, qpidPackage);
+        } 
+        return qpidPackage;
+    }
+
+    /**
+     * Returns true if a package with the specified name already exists on this domain model.
+     * 
+     * @param packageName the name of the package.
+     * @return true if the package exists, false otherwise.
+     */
+    boolean containsPackage (String packageName)
+    {
+        return _packages.containsKey(packageName);
+    }
+
+    /**
+     * Adds the given instrumentation data (raw format) to this domain model.
+     * Note that this data is belonging to a specific object instance.
+     * 
+     * @param packageName the name of the ower package.
+     * @param className the name of the owner class.
+     * @param classHash the schema hash for this class.
+     * @param objectId the object instance identifier.
+     * @param rawData the instrumentation data.
+     */
+    public void addInstrumentationRawData (String packageName, String className,Binary classHash, Binary objectId, byte[] rawData)
+    {
+        QpidPackage qpidPackage = getPackageByName(packageName);
+        qpidPackage.setObjectInstanceInstrumentationRawData(className,classHash,objectId,rawData);
+    }
+    
+    /**
+     * Adds the given configuration data (raw format) to this domain model.
+     * Note that this data is belonging to a specific object instance.
+     * 
+     * @param packageName the name of the ower package.
+     * @param className the name of the owner class.
+     * @param classHash the schema hash for this class.
+     * @param objectId the object instance identifier.
+     * @param rawData the configuration data.
+     */
+    public void addConfigurationRawData (String packageName, String className, Binary classHash,Binary objectId, byte[] rawData)
+    {
+        QpidPackage qpidPackage = getPackageByName(packageName);
+        qpidPackage.setObjectInstanceConfigurationRawData(className,classHash,objectId,rawData);
+    }
+
+    /**
+     * Removes the object instance associated to the given parameters.
+     * 
+     * @param packageName the owner package.
+     * @param className the class definition of the object instance.
+     * @param classHash the class hash
+     * @param objectId the object identifier.
+     */
+    public void removeObjectInstance (String packageName, String className, Binary classHash, Binary objectId)
+    {
+        QpidPackage qpidPackage = getPackageByName(packageName);
+        qpidPackage.removeObjectInstance(className, classHash, objectId);
+    }
+
+    /**
+     * Releases all the resources kept by domain model entitiies.
+     */
+    public void releaseResources()
+    {
+        for (QpidPackage qpidPackage : _packages.values())
+        {
+            qpidPackage.releaseResources();
+        }
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/IValidator.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/IValidator.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/IValidator.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/IValidator.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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.management.domain.model;
+
+/**
+ * Interface definition for attribute validators.
+ * 
+ * @author Andrea Gazzarini
+ */
+interface IValidator
+{
+    /**
+     * Validates the given value according to the rules definied by this validator.
+     * 
+     * @param value the value be checked.
+     * 
+     * @throws ValidationException when the value is violating validator's rules.
+     */
+    void validate(Object value) throws  ValidationException;
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/JmxService.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,158 @@
+/*
+ *
+ * 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.management.domain.model;
+
+import java.lang.management.ManagementFactory;
+import java.util.UUID;
+
+import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.apache.qpid.management.Names;
+import org.apache.qpid.management.domain.model.QpidClass.QpidManagedObject;
+import org.apache.qpid.management.domain.model.type.Binary;
+import org.apache.qpid.transport.util.Logger;
+
+/**
+ * A simple facade used to perform operations on Mbean server.
+ * 
+ * @author Andrea Gazzarini
+ */
+class JmxService
+{
+    private final static Logger LOGGER = Logger.get(JmxService.class);
+    private MBeanServer _mxServer = ManagementFactory.getPlatformMBeanServer();
+    
+    
+    /**
+     * Registers a pre-existing object instance as an MBean with the MBean
+     * server. 
+     * 
+     * @param instance the object instance.
+     * @param brokerId the broker identifier.
+     * @param packageName the name of the package containing this instance.
+     * @param className the name of the owner class of this instance.
+     * @param objectId the object instance identifier.
+     */
+    void registerObjectInstance(
+            QpidManagedObject instance,
+            UUID brokerId,
+            String packageName, 
+            String className, 
+            Binary objectId)
+    {    
+            ObjectName name = createObjectName(brokerId, packageName, className, objectId);
+            if (!_mxServer.isRegistered(name)) 
+            {
+                try
+                {
+                    _mxServer.registerMBean(instance, name);
+
+                    LOGGER.debug(
+                            "<QMAN-200026> : Object instance %s::%s::%s:%s successfully registered with MBean Server with name %s", 
+                            brokerId,
+                            packageName,
+                            className,
+                            objectId,
+                            name);
+                }  catch (Exception exception)
+                {
+                    throw new RuntimeException(exception);
+                } 
+            }
+    }
+
+    /**
+     * Removes / unregisters a managed object instance from the MBean Server.
+     * 
+     * @param brokerId the broker identifier.
+     * @param packageName the name of the package containing this instance.
+     * @param className the name of the owner class of this instance.
+     * @param objectId the object instance identifier.
+     */
+    void unregisterObjectInstance(
+            UUID brokerId,
+            String packageName, 
+            String className, 
+            Binary objectId)
+    {    
+            ObjectName name = createObjectName(brokerId, packageName, className, objectId);
+            if (_mxServer.isRegistered(name)) 
+            {
+                try
+                {
+                    _mxServer.unregisterMBean(name);
+
+                    LOGGER.debug(
+                            "<QMAN-200012> : Object instance %s::%s::%s:%s successfully unregistered from MBean Server. " +
+                            "Name was %s", 
+                            brokerId,
+                            packageName,
+                            className,
+                            objectId,
+                            name);
+                }  catch (Exception exception)
+                {
+                    LOGGER.error(exception,"<QMAN-100010> : Unable to unregister object instance %s.",name);
+                } 
+            }
+    }    
+    
+    /**
+     * Factory method for ObjectNames.
+     * 
+     * @param brokerId the broker identifier.
+     * @param packageName the name of the package containing this instance.
+     * @param className the name of the owner class of this instance.
+     * @param objectId the object instance identifier.
+     * @return the object name built according to the given parameters.
+     */
+    private ObjectName createObjectName(UUID brokerId, String packageName, String className, Binary objectId) 
+    {
+        String asString = new StringBuilder()
+            .append(Names.DOMAIN_NAME)
+            .append(':')
+            .append(Names.BROKER_ID)
+            .append('=')
+            .append(brokerId)
+            .append(',')
+            .append(Names.PACKAGE)
+            .append('=')
+            .append(packageName)
+            .append(',')
+            .append(Names.CLASS)
+            .append('=')
+            .append(className)
+            .append(',')
+            .append(Names.OBJECT_ID)
+            .append('=')
+            .append(objectId)
+            .toString();
+        try
+        {
+            return new ObjectName(asString);
+        } catch (MalformedObjectNameException exception)
+        {
+            throw new RuntimeException(exception);
+        } 
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/MissingFeatureAttributesException.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/MissingFeatureAttributesException.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/MissingFeatureAttributesException.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/MissingFeatureAttributesException.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,35 @@
+/*
+ *
+ * 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.management.domain.model;
+
+import java.util.List;
+
+import org.apache.qpid.management.domain.model.QpidFeatureBuilder.Attribute;
+
+public class MissingFeatureAttributesException extends UnableToBuildFeatureException
+{
+    private static final long serialVersionUID = 671471705085787235L;
+
+    public MissingFeatureAttributesException(List<Attribute> missingAttributeList)
+    {
+        super(String.valueOf(missingAttributeList));
+    }
+}

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidArgument.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidArgument.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidArgument.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidArgument.java Mon Sep 29 05:02:54 2008
@@ -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.management.domain.model;
+
+import org.apache.qpid.transport.codec.ManagementEncoder;
+import org.apache.qpid.transport.util.Logger;
+
+class QpidArgument extends QpidProperty
+{
+    private final static Logger LOGGER = Logger.get(QpidArgument.class);
+    
+    private Object _defaultValue;
+    
+    private Direction _direction;
+    
+    public void setDirection(String code) 
+    {
+        this._direction = Direction.valueOf(code);
+    }
+    
+    public Direction getDirection()
+    {
+        return _direction;
+    }
+    
+    public void setDefaultValue(Object defaultValue)
+    {
+        this._defaultValue = defaultValue;
+    }
+
+    public Object getDefaultValue()
+    {
+        return _defaultValue;
+    }
+    
+    public boolean isInput(){
+        return _direction != Direction.O;
+    }
+    
+    @Override
+    public String toString ()
+    {
+        return new StringBuilder()
+            .append(getJavaType().getName())
+            .append(' ')
+            .append(_name)
+            .append("(")
+            .append(_direction)
+            .append(")")
+            .toString();
+    }
+
+    public void validateAndEncode (Object value,ManagementEncoder encoder) throws ValidationException
+    {
+        validate(value);
+        _type.encode(value, encoder);
+        LOGGER.debug("Encoded value %S for argument %s. Type is %s",value,_name,_type);
+    }
+}
\ No newline at end of file

Added: incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidAttribute.java
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidAttribute.java?rev=700077&view=auto
==============================================================================
--- incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidAttribute.java (added)
+++ incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/management/domain/model/QpidAttribute.java Mon Sep 29 05:02:54 2008
@@ -0,0 +1,104 @@
+/*
+ *
+ * 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.management.domain.model;
+
+import org.apache.qpid.management.domain.model.type.Type;
+import org.apache.qpid.transport.codec.ManagementDecoder;
+import org.apache.qpid.transport.util.Logger;
+
+/**
+ * Layer supertype for qpid properties and statistics. 
+ * 
+ * @author Andrea Gazzarini
+ */
+class QpidAttribute extends QpidFeature
+{
+    private final static Logger LOGGER = Logger.get(QpidAttribute.class);
+    
+    /** feature type */
+    protected Type _type;
+    
+    /** feature unit */
+    protected String _unit;
+
+    /**
+     * Returns the units used for numeric values (i.e. seconds, bytes, etc.)
+     * 
+     * @return the units used for numeric values (i.e. seconds, bytes, etc.)
+     */
+    String getUnit ()
+    {
+        return _unit;
+    }
+
+    /**
+     * Sets the unit for this property.
+     * 
+     * @param unit the unit of this property.
+     */
+    void setUnit (String unit)
+    {
+        this._unit = unit;
+        LOGGER.debug("Unit : %s", unit);
+    }
+    
+    /**
+     * Returns the java type (class) of this feature.
+     * 
+     * @return the java type (class) of this feature.
+     */
+    Class<?> getJavaType ()
+    {
+        return _type.getJavaType();
+    }
+
+    /**
+     * Sets the type of this feature.
+     * 
+     * @param type the type of this feature.
+     */
+    void setType (Type type)
+    {
+        this._type = type;
+    }
+    
+    /**
+     * Gets the value of this feature according to its type definition.
+     * 
+     * @param decoder the decoder used to extract the value.
+     * @return the value of this feature according to its type definition
+     */
+    Object decodeValue(ManagementDecoder decoder)
+    {
+        try {
+            return _type.decode(decoder);
+        } catch(RuntimeException exception) {
+            LOGGER.error(exception,"Unable to decode value for attribute %s",this);
+            throw exception;
+        }
+    }
+    
+    @Override
+    public String toString ()
+    {
+        return super.toString()+",type="+_type;
+    }
+}
\ No newline at end of file