[jboss-cvs] JBossAS SVN: r107537 - in projects/jboss-jca/trunk/common/src: main/java/org/jboss/jca/common/api/metadata/ra and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Aug 11 10:28:11 EDT 2010


Author: maeste
Date: 2010-08-11 10:28:09 -0400 (Wed, 11 Aug 2010)
New Revision: 107537

Added:
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyUtil.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyableMetaData.java
   projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/CopyableMetaDataTestCase.java
Modified:
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AdminObject.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AuthenticationMechanism.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConfigProperty.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConnectionDefinition.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Connector.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Icon.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/InboundResourceAdapter.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LicenseType.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LocalizedXsdString.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/MessageListener.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Messageadapter.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/OutboundResourceAdapter.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Path.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/RequiredConfigProperty.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ResourceAdapter.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/SecurityPermission.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/XsdString.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ra15/Activationspec15.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AdminObjectImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AuthenticationMechanismImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConfigPropertyImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectionDefinitionImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectorAbstractmpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/InboundResourceAdapterImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageAdapterImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageListenerImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/OutboundResourceAdapterImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ResourceAdapter1516Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/SecurityPermissionImpl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/Connector10Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/ResourceAdapter10Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Activationspec15Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Connector15Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Activationspec16Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/ConfigProperty16Impl.java
   projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Connector16Impl.java
   projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/RaParserTestCase.java
Log:
JBJCA-385: adding copy capabilities

Added: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyUtil.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyUtil.java	                        (rev 0)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyUtil.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -0,0 +1,104 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.common.api.metadata;
+
+import org.jboss.jca.common.api.metadata.ra.XsdString;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * A CopyUtil.
+ *
+ * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
+ *
+ */
+public class CopyUtil
+{
+
+   /**
+    *
+    * clone a list of IdDecoratedMetadata and deep into the elements
+    *
+    * @param <T> type extending {@link CopyableMetaData}
+    * @param list the list to clone
+    * @return cloned list
+    */
+
+   public static <T extends CopyableMetaData> List<T> cloneList(List<T> list)
+   {
+      List<T> clone = new ArrayList<T>(list.size());
+      for (T item : list)
+         clone.add(clone(item));
+      return clone;
+   }
+
+   /**
+    *
+    * clone a list of string deep into elements
+    *
+    * @param list the list to clone
+    * @return cloned list
+    */
+   public static List<String> cloneListOfStrings(List<String> list)
+   {
+      List<String> clone = new ArrayList<String>(list.size());
+      for (String item : list)
+         clone.add(cloneString(item));
+      return clone;
+   }
+
+   /**
+    *
+    * clone a String
+    *
+    * @param input the input
+    * @return cloned String
+    */
+   public static String cloneString(String input)
+   {
+      return input;
+   }
+
+   /**
+    *
+    * Clone an IDDecoratedMetadata taking care of null cheks
+    *
+    * @param <T> type extending {@link CopyableMetaData}
+    * @param input type extending IdDecoratedMetadata
+    * @return cloned input
+    *
+    */
+   public static <T extends CopyableMetaData> T clone(T input)
+   {
+      if (input instanceof XsdString)
+      {
+         return XsdString.isNull((XsdString) input) ? (T) XsdString.NULL_XSDSTRING : (T) input.copy();
+      }
+      else
+      {
+         return input == null ? null : (T) input.copy();
+      }
+   }
+
+}

Copied: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyableMetaData.java (from rev 107533, projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ResourceAdapter.java)
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyableMetaData.java	                        (rev 0)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/CopyableMetaData.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -0,0 +1,47 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.common.api.metadata;
+
+/**
+ *
+ * A CopyableMetaData.
+ * This interface force implementors to override {@link #copy()} method.
+ * On the presence of this method are based some assumption to use generics during clone deep into the metadatas
+ * members.
+ *
+ * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
+ *
+ */
+public interface CopyableMetaData extends Cloneable
+{
+
+   /**
+    * Creates and returns a copy of this object.  Ther copy is done in deep of all elements.
+    * It isn't formally a clone of the instance since it does not respect the assumption for which returned
+    * clone of cloneMethod are instance of Object
+    *
+    * @return     a copy of this instance.
+    */
+
+   public CopyableMetaData copy();
+
+}

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AdminObject.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AdminObject.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AdminObject.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface AdminObject extends IdDecoratedMetadata
+public interface AdminObject extends IdDecoratedMetadata, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AuthenticationMechanism.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AuthenticationMechanism.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/AuthenticationMechanism.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface AuthenticationMechanism extends IdDecoratedMetadata
+public interface AuthenticationMechanism extends IdDecoratedMetadata, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConfigProperty.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConfigProperty.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConfigProperty.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.List;
 
 /**
@@ -31,7 +33,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface ConfigProperty
+public interface ConfigProperty extends IdDecoratedMetadata, CopyableMetaData
 {
 
    /**
@@ -59,6 +61,7 @@
     *
     * @see IdDecoratedMetadata#getId()
     */
+   @Override
    public abstract String getId();
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConnectionDefinition.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConnectionDefinition.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ConnectionDefinition.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,11 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface ConnectionDefinition extends IdDecoratedMetadata, MergeableMetadata<ConnectionDefinition>
+public interface ConnectionDefinition
+      extends
+         IdDecoratedMetadata,
+         MergeableMetadata<ConnectionDefinition>,
+         CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Connector.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Connector.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Connector.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.List;
 
 /**
@@ -30,7 +32,12 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface Connector extends IdDecoratedMetadata, ValidatableMetadata, MergeableMetadata<Connector>
+public interface Connector
+      extends
+         IdDecoratedMetadata,
+         ValidatableMetadata,
+         MergeableMetadata<Connector>,
+         CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Icon.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Icon.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Icon.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,9 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -29,7 +32,7 @@
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
  */
-public class Icon implements IdDecoratedMetadata, LocalizedMetadata
+public class Icon implements IdDecoratedMetadata, LocalizedMetadata, CopyableMetaData
 {
    /**
     */
@@ -325,4 +328,10 @@
       }
 
    }
+
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Icon(CopyUtil.clone(smallIcon), CopyUtil.clone(largeIcon), CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/InboundResourceAdapter.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/InboundResourceAdapter.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/InboundResourceAdapter.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -31,7 +33,11 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface InboundResourceAdapter extends IdDecoratedMetadata, MergeableMetadata<InboundResourceAdapter>
+public interface InboundResourceAdapter
+      extends
+         IdDecoratedMetadata,
+         MergeableMetadata<InboundResourceAdapter>,
+         CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LicenseType.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LicenseType.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LicenseType.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -23,6 +23,8 @@
 
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 
 import java.util.ArrayList;
@@ -35,7 +37,7 @@
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
  */
-public class LicenseType implements IdDecoratedMetadata, MergeableMetadata<LicenseType>
+public class LicenseType implements IdDecoratedMetadata, MergeableMetadata<LicenseType>, CopyableMetaData
 {
 
    /**
@@ -307,6 +309,10 @@
       }
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new LicenseType(CopyUtil.cloneList(description), licenseRequired, CopyUtil.cloneString(id));
+   }
 
-
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LocalizedXsdString.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LocalizedXsdString.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/LocalizedXsdString.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,7 +21,10 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 
+
 /**
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
@@ -126,4 +129,11 @@
       return "LocalizedXsdString [lang=" + lang + ", value=" + value + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new LocalizedXsdString(CopyUtil.cloneString(value), CopyUtil.cloneString(id),
+            CopyUtil.cloneString(lang));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/MessageListener.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/MessageListener.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/MessageListener.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.ra15.Activationspec15;
 
 import java.util.HashMap;
@@ -33,7 +34,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface MessageListener extends IdDecoratedMetadata
+public interface MessageListener extends IdDecoratedMetadata, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Messageadapter.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Messageadapter.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Messageadapter.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface Messageadapter extends IdDecoratedMetadata, MergeableMetadata<Messageadapter>
+public interface Messageadapter extends IdDecoratedMetadata, MergeableMetadata<Messageadapter>, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/OutboundResourceAdapter.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/OutboundResourceAdapter.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/OutboundResourceAdapter.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,11 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface OutboundResourceAdapter extends IdDecoratedMetadata, MergeableMetadata<OutboundResourceAdapter>
+public interface OutboundResourceAdapter
+      extends
+         IdDecoratedMetadata,
+         MergeableMetadata<OutboundResourceAdapter>,
+         CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Path.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Path.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/Path.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.JCAMetadata;
 
 import java.security.InvalidParameterException;
@@ -29,7 +31,7 @@
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
  */
-public class Path implements JCAMetadata
+public class Path implements JCAMetadata, CopyableMetaData
 {
    /**
     */
@@ -132,4 +134,11 @@
    {
       return "Path [value=" + value + "]";
    }
+
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Path(CopyUtil.cloneString(value));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/RequiredConfigProperty.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/RequiredConfigProperty.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/RequiredConfigProperty.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,9 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -32,7 +35,7 @@
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
  */
-public class RequiredConfigProperty implements IdDecoratedMetadata
+public class RequiredConfigProperty implements IdDecoratedMetadata, CopyableMetaData
 {
    /**
     */
@@ -49,10 +52,18 @@
     * @param configPropertyName name of the property
     * @param id XML ID
     */
-   public RequiredConfigProperty(ArrayList<LocalizedXsdString> description, XsdString configPropertyName, String id)
+   public RequiredConfigProperty(List<LocalizedXsdString> description, XsdString configPropertyName, String id)
    {
       super();
-      this.description = description;
+      if (description != null)
+      {
+         this.description = new ArrayList<LocalizedXsdString>(description.size());
+         this.description.addAll(description);
+      }
+      else
+      {
+         this.description = new ArrayList<LocalizedXsdString>(0);
+      }
       this.configPropertyName = configPropertyName;
       this.id = id;
    }
@@ -285,4 +296,11 @@
 
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new RequiredConfigProperty(CopyUtil.cloneList(description), CopyUtil.clone(configPropertyName),
+            CopyUtil.cloneString(id));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ResourceAdapter.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ResourceAdapter.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ResourceAdapter.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.List;
 
 /**
@@ -30,7 +32,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface ResourceAdapter extends IdDecoratedMetadata, ValidatableMetadata
+public interface ResourceAdapter extends IdDecoratedMetadata, ValidatableMetadata, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/SecurityPermission.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/SecurityPermission.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/SecurityPermission.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.api.metadata.ra;
 
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -33,7 +35,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface SecurityPermission extends IdDecoratedMetadata
+public interface SecurityPermission extends IdDecoratedMetadata, CopyableMetaData
 {
 
    /**

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/XsdString.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/XsdString.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/XsdString.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,13 +21,16 @@
  */
 package org.jboss.jca.common.api.metadata.ra;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 
 
+
 /**
  * @author <a href="mailto:stefano.maestri at jboss.org">Stefano Maestri</a>
  *
  */
-public class XsdString implements IdDecoratedMetadata
+public class XsdString implements IdDecoratedMetadata, CopyableMetaData
 {
 
    /**
@@ -162,4 +165,9 @@
       return (xsdString == null || xsdString.equals(NULL_XSDSTRING));
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new XsdString(CopyUtil.cloneString(value), CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ra15/Activationspec15.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ra15/Activationspec15.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ra/ra15/Activationspec15.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.common.api.metadata.ra.ra15;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.IdDecoratedMetadata;
 import org.jboss.jca.common.api.metadata.ra.RequiredConfigProperty;
@@ -35,7 +36,7 @@
  * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
  *
  */
-public interface Activationspec15 extends IdDecoratedMetadata
+public interface Activationspec15 extends IdDecoratedMetadata, CopyableMetaData
 {
    /**
     * @return configProperty

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AdminObjectImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AdminObjectImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AdminObjectImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.metadata.ra.common;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.AdminObject;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
@@ -106,11 +108,6 @@
       return id;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#hashCode()
-    */
    @Override
    public int hashCode()
    {
@@ -123,71 +120,44 @@
       return result;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#equals(java.lang.Object)
-    */
    @Override
-   public boolean equals(final Object obj)
+   public boolean equals(Object obj)
    {
       if (this == obj)
-      {
          return true;
-      }
       if (obj == null)
-      {
          return false;
-      }
       if (!(obj instanceof AdminObjectImpl))
-      {
          return false;
-      }
-      final AdminObjectImpl other = (AdminObjectImpl) obj;
+      AdminObjectImpl other = (AdminObjectImpl) obj;
       if (adminobjectClass == null)
       {
          if (other.adminobjectClass != null)
-         {
             return false;
-         }
       }
       else if (!adminobjectClass.equals(other.adminobjectClass))
-      {
          return false;
-      }
       if (adminobjectInterface == null)
       {
          if (other.adminobjectInterface != null)
-         {
             return false;
-         }
       }
       else if (!adminobjectInterface.equals(other.adminobjectInterface))
-      {
          return false;
-      }
       if (configProperty == null)
       {
          if (other.configProperty != null)
-         {
             return false;
-         }
       }
       else if (!configProperty.equals(other.configProperty))
-      {
          return false;
-      }
       if (id == null)
       {
          if (other.id != null)
-         {
             return false;
-         }
       }
       else if (!id.equals(other.id))
-      {
          return false;
-      }
       return true;
    }
 
@@ -203,5 +173,11 @@
             + ", configProperty=" + configProperty + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new AdminObjectImpl(CopyUtil.clone(adminobjectInterface), CopyUtil.clone(adminobjectClass),
+            CopyUtil.cloneList(configProperty), CopyUtil.cloneString(id));
+   }
 
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AuthenticationMechanismImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AuthenticationMechanismImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/AuthenticationMechanismImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.AuthenticationMechanism;
 import org.jboss.jca.common.api.metadata.ra.CredentialInterfaceEnum;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
@@ -205,4 +207,12 @@
             + authenticationMechanismType + ", credentialInterface=" + credentialInterface + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new AuthenticationMechanismImpl(CopyUtil.cloneList(description),
+            CopyUtil.clone(authenticationMechanismType), credentialInterface,
+            CopyUtil.cloneString(id));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConfigPropertyImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConfigPropertyImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConfigPropertyImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.metadata.ra.common;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.IdDecoratedMetadata;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
@@ -151,4 +153,71 @@
             .getConfigPropertyValue().getValue().trim().equals(""));
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new ConfigPropertyImpl(CopyUtil.cloneList(description), CopyUtil.clone(configPropertyName),
+            CopyUtil.clone(configPropertyType), CopyUtil.clone(configPropertyValue), CopyUtil.cloneString(id));
+   }
+
+   @Override
+   public int hashCode()
+   {
+      final int prime = 31;
+      int result = 1;
+      result = prime * result + ((configPropertyName == null) ? 0 : configPropertyName.hashCode());
+      result = prime * result + ((configPropertyType == null) ? 0 : configPropertyType.hashCode());
+      result = prime * result + ((configPropertyValue == null) ? 0 : configPropertyValue.hashCode());
+      result = prime * result + ((description == null) ? 0 : description.hashCode());
+      result = prime * result + ((id == null) ? 0 : id.hashCode());
+      return result;
+   }
+
+   @Override
+   public boolean equals(Object obj)
+   {
+      if (this == obj)
+         return true;
+      if (obj == null)
+         return false;
+      if (!(obj instanceof ConfigPropertyImpl))
+         return false;
+      ConfigPropertyImpl other = (ConfigPropertyImpl) obj;
+      if (configPropertyName == null)
+      {
+         if (other.configPropertyName != null)
+            return false;
+      }
+      else if (!configPropertyName.equals(other.configPropertyName))
+         return false;
+      if (configPropertyType == null)
+      {
+         if (other.configPropertyType != null)
+            return false;
+      }
+      else if (!configPropertyType.equals(other.configPropertyType))
+         return false;
+      if (configPropertyValue == null)
+      {
+         if (other.configPropertyValue != null)
+            return false;
+      }
+      else if (!configPropertyValue.equals(other.configPropertyValue))
+         return false;
+      if (description == null)
+      {
+         if (other.description != null)
+            return false;
+      }
+      else if (!description.equals(other.description))
+         return false;
+      if (id == null)
+      {
+         if (other.id != null)
+            return false;
+      }
+      else if (!id.equals(other.id))
+         return false;
+      return true;
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectionDefinitionImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectionDefinitionImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectionDefinitionImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.metadata.ra.common;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.ConnectionDefinition;
@@ -321,4 +323,12 @@
       }
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new ConnectionDefinitionImpl(CopyUtil.clone(managedconnectionfactoryClass),
+            CopyUtil.cloneList(configProperty), CopyUtil.clone(connectionfactoryInterface),
+            CopyUtil.clone(connectionfactoryImplClass), CopyUtil.clone(connectionInterface),
+            CopyUtil.clone(connectionImplClass), CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectorAbstractmpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectorAbstractmpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ConnectorAbstractmpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,7 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.jbossra.JbossRa;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.Connector;
@@ -462,4 +463,7 @@
       }
    }
 
+   @Override
+   public abstract CopyableMetaData copy();
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/InboundResourceAdapterImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/InboundResourceAdapterImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/InboundResourceAdapterImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.InboundResourceAdapter;
 import org.jboss.jca.common.api.metadata.ra.MergeableMetadata;
 import org.jboss.jca.common.api.metadata.ra.MessageListener;
@@ -180,4 +182,10 @@
       }
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new InboundResourceAdapterImpl(CopyUtil.clone(messageadapter), CopyUtil.cloneString(id));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageAdapterImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageAdapterImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageAdapterImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -22,6 +22,8 @@
 package org.jboss.jca.common.metadata.ra.common;
 
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 import org.jboss.jca.common.api.metadata.ra.MergeableMetadata;
 import org.jboss.jca.common.api.metadata.ra.MessageListener;
@@ -176,4 +178,9 @@
       }
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new MessageAdapterImpl(CopyUtil.cloneList(messagelisteners), CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageListenerImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageListenerImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/MessageListenerImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.MessageListener;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
 import org.jboss.jca.common.api.metadata.ra.ra15.Activationspec15;
@@ -167,5 +169,12 @@
             + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new MessageListenerImpl(CopyUtil.clone(messagelistenerType), CopyUtil.clone(activationspec),
+            CopyUtil.cloneString(id));
+   }
 
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/OutboundResourceAdapterImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/OutboundResourceAdapterImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/OutboundResourceAdapterImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 import org.jboss.jca.common.api.metadata.ra.AuthenticationMechanism;
 import org.jboss.jca.common.api.metadata.ra.ConnectionDefinition;
@@ -287,4 +289,10 @@
       }
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new OutboundResourceAdapterImpl(CopyUtil.cloneList(connectionDefinition), transactionSupport,
+            CopyUtil.cloneList(authenticationMechanism), reauthenticationSupport, CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ResourceAdapter1516Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ResourceAdapter1516Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/ResourceAdapter1516Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 import org.jboss.jca.common.api.metadata.ra.AdminObject;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
@@ -166,11 +168,6 @@
       return id;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#hashCode()
-    */
    @Override
    public int hashCode()
    {
@@ -186,104 +183,65 @@
       return result;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#equals(java.lang.Object)
-    */
    @Override
    public boolean equals(Object obj)
    {
       if (this == obj)
-      {
          return true;
-      }
       if (obj == null)
-      {
          return false;
-      }
       if (!(obj instanceof ResourceAdapter1516Impl))
-      {
          return false;
-      }
       ResourceAdapter1516Impl other = (ResourceAdapter1516Impl) obj;
       if (adminobjects == null)
       {
          if (other.adminobjects != null)
-         {
             return false;
-         }
       }
       else if (!adminobjects.equals(other.adminobjects))
-      {
          return false;
-      }
       if (configProperties == null)
       {
          if (other.configProperties != null)
-         {
             return false;
-         }
       }
       else if (!configProperties.equals(other.configProperties))
-      {
          return false;
-      }
       if (id == null)
       {
          if (other.id != null)
-         {
             return false;
-         }
       }
       else if (!id.equals(other.id))
-      {
          return false;
-      }
       if (inboundResourceadapter == null)
       {
          if (other.inboundResourceadapter != null)
-         {
             return false;
-         }
       }
       else if (!inboundResourceadapter.equals(other.inboundResourceadapter))
-      {
          return false;
-      }
       if (outboundResourceadapter == null)
       {
          if (other.outboundResourceadapter != null)
-         {
             return false;
-         }
       }
       else if (!outboundResourceadapter.equals(other.outboundResourceadapter))
-      {
          return false;
-      }
       if (resourceadapterClass == null)
       {
          if (other.resourceadapterClass != null)
-         {
             return false;
-         }
       }
       else if (!resourceadapterClass.equals(other.resourceadapterClass))
-      {
          return false;
-      }
       if (securityPermissions == null)
       {
          if (other.securityPermissions != null)
-         {
             return false;
-         }
       }
       else if (!securityPermissions.equals(other.securityPermissions))
-      {
          return false;
-      }
       return true;
    }
 
@@ -349,4 +307,14 @@
          return this;
       }
    }
+
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new ResourceAdapter1516Impl(CopyUtil.cloneString(resourceadapterClass),
+            CopyUtil.cloneList(configProperties), CopyUtil.clone(outboundResourceadapter),
+            CopyUtil.clone(inboundResourceadapter), CopyUtil.cloneList(adminobjects),
+            CopyUtil.cloneList(securityPermissions), CopyUtil.cloneString(id));
+
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/SecurityPermissionImpl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/SecurityPermissionImpl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/common/SecurityPermissionImpl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.common;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
 import org.jboss.jca.common.api.metadata.ra.SecurityPermission;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
@@ -175,4 +177,11 @@
             + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new SecurityPermissionImpl(CopyUtil.cloneList(description), CopyUtil.clone(securityPermissionSpec),
+            CopyUtil.cloneString(id));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/Connector10Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/Connector10Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/Connector10Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra10;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.Icon;
 import org.jboss.jca.common.api.metadata.ra.LicenseType;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
@@ -44,6 +46,8 @@
 
    private final String moduleName;
 
+   private final XsdString resourceadapterVersion;
+
    /**
     * @param moduleName name of the module
     * @param description descriptions of this connector
@@ -63,6 +67,7 @@
    {
       super(vendorName, eisType, license, resourceadapter, description, displayName, icon, id);
       this.moduleName = moduleName;
+      this.resourceadapterVersion = resourceadapterVersion;
 
 
    }
@@ -134,7 +139,15 @@
             + description + ", displayName=" + displayName + ", icon=" + icon + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Connector10Impl(CopyUtil.cloneString(moduleName), CopyUtil.clone(vendorName),
+            CopyUtil.clone(eisType), CopyUtil.clone(resourceadapterVersion), CopyUtil.clone(license),
+            CopyUtil.clone(resourceadapter),
+            CopyUtil.cloneList(description), CopyUtil.cloneList(displayName), CopyUtil.cloneList(icon),
+            CopyUtil.cloneString(id));
+   }
 
 
-
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/ResourceAdapter10Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/ResourceAdapter10Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra10/ResourceAdapter10Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra10;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.AuthenticationMechanism;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.SecurityPermission;
@@ -374,4 +376,15 @@
 
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new ResourceAdapter10Impl(CopyUtil.clone(managedConnectionFactoryClass),
+            CopyUtil.clone(connectionFactoryInterface),
+            CopyUtil.clone(connectionFactoryImplClass), CopyUtil.clone(connectionInterface),
+            CopyUtil.clone(connectionImplClass), transactionSupport,
+            CopyUtil.cloneList(authenticationMechanism), CopyUtil.cloneList(configProperties),
+            reauthenticationSupport, CopyUtil.cloneList(securityPermissions), CopyUtil.cloneString(id));
+   }
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Activationspec15Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Activationspec15Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Activationspec15Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra15;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.RequiredConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
@@ -171,4 +173,10 @@
       return null;
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Activationspec15Impl(CopyUtil.clone(activationspecClass),
+            CopyUtil.cloneList(requiredConfigProperty), CopyUtil.cloneString(id));
+   }
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Connector15Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Connector15Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra15/Connector15Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra15;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.Icon;
 import org.jboss.jca.common.api.metadata.ra.LicenseType;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
@@ -125,5 +127,15 @@
             + ", description=" + description + ", displayName=" + displayName + ", icon=" + icon + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Connector15Impl(CopyUtil.clone(resourceadapterVersion), CopyUtil.clone(resourceadapterVersion),
+            CopyUtil.clone(resourceadapterVersion), CopyUtil.clone(license),
+            CopyUtil.clone((ResourceAdapter1516) resourceadapter), CopyUtil.cloneList(description),
+            CopyUtil.cloneList(displayName),
+            CopyUtil.cloneList(icon), CopyUtil.cloneString(id));
+   }
 
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Activationspec16Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Activationspec16Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Activationspec16Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra16;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.ConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.RequiredConfigProperty;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
@@ -109,5 +111,13 @@
             + ", requiredConfigProperty=" + requiredConfigProperty + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new Activationspec16Impl(CopyUtil.clone(activationspecClass),
+            CopyUtil.cloneList(requiredConfigProperty),
+            CopyUtil.cloneList(configProperties),
+            CopyUtil.cloneString(id));
+   }
 
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/ConfigProperty16Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/ConfigProperty16Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/ConfigProperty16Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra16;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.ra.LocalizedXsdString;
 import org.jboss.jca.common.api.metadata.ra.XsdString;
 import org.jboss.jca.common.api.metadata.ra.ra16.ConfigProperty16;
@@ -159,137 +161,57 @@
       return configPropertyConfidential;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#hashCode()
-    */
    @Override
    public int hashCode()
    {
       final int prime = 31;
-      int result = 1;
+      int result = super.hashCode();
+      result = prime * result + ((attachedClassName == null) ? 0 : attachedClassName.hashCode());
       result = prime * result + ((configPropertyConfidential == null) ? 0 : configPropertyConfidential.hashCode());
       result = prime * result + ((configPropertyIgnore == null) ? 0 : configPropertyIgnore.hashCode());
-      result = prime * result + ((configPropertyName == null) ? 0 : configPropertyName.hashCode());
       result = prime * result
             + ((configPropertySupportsDynamicUpdates == null) ? 0 : configPropertySupportsDynamicUpdates.hashCode());
-      result = prime * result + ((configPropertyType == null) ? 0 : configPropertyType.hashCode());
-      result = prime * result + ((configPropertyValue == null) ? 0 : configPropertyValue.hashCode());
-      result = prime * result + ((description == null) ? 0 : description.hashCode());
-      result = prime * result + ((id == null) ? 0 : id.hashCode());
       return result;
    }
 
-   /**
-    * {@inheritDoc}
-    *
-    * @see java.lang.Object#equals(java.lang.Object)
-    */
    @Override
    public boolean equals(Object obj)
    {
       if (this == obj)
-      {
          return true;
-      }
-      if (obj == null)
-      {
+      if (!super.equals(obj))
          return false;
-      }
       if (!(obj instanceof ConfigProperty16Impl))
-      {
          return false;
-      }
       ConfigProperty16Impl other = (ConfigProperty16Impl) obj;
+      if (attachedClassName == null)
+      {
+         if (other.attachedClassName != null)
+            return false;
+      }
+      else if (!attachedClassName.equals(other.attachedClassName))
+         return false;
       if (configPropertyConfidential == null)
       {
          if (other.configPropertyConfidential != null)
-         {
             return false;
-         }
       }
       else if (!configPropertyConfidential.equals(other.configPropertyConfidential))
-      {
          return false;
-      }
       if (configPropertyIgnore == null)
       {
          if (other.configPropertyIgnore != null)
-         {
             return false;
-         }
       }
       else if (!configPropertyIgnore.equals(other.configPropertyIgnore))
-      {
          return false;
-      }
-      if (configPropertyName == null)
-      {
-         if (other.configPropertyName != null)
-         {
-            return false;
-         }
-      }
-      else if (!configPropertyName.equals(other.configPropertyName))
-      {
-         return false;
-      }
       if (configPropertySupportsDynamicUpdates == null)
       {
          if (other.configPropertySupportsDynamicUpdates != null)
-         {
             return false;
-         }
       }
       else if (!configPropertySupportsDynamicUpdates.equals(other.configPropertySupportsDynamicUpdates))
-      {
          return false;
-      }
-      if (configPropertyType == null)
-      {
-         if (other.configPropertyType != null)
-         {
-            return false;
-         }
-      }
-      else if (!configPropertyType.equals(other.configPropertyType))
-      {
-         return false;
-      }
-      if (configPropertyValue == null)
-      {
-         if (other.configPropertyValue != null)
-         {
-            return false;
-         }
-      }
-      else if (!configPropertyValue.equals(other.configPropertyValue))
-      {
-         return false;
-      }
-      if (description == null)
-      {
-         if (other.description != null)
-         {
-            return false;
-         }
-      }
-      else if (!description.equals(other.description))
-      {
-         return false;
-      }
-      if (id == null)
-      {
-         if (other.id != null)
-         {
-            return false;
-         }
-      }
-      else if (!id.equals(other.id))
-      {
-         return false;
-      }
       return true;
    }
 
@@ -308,5 +230,15 @@
             + ", id=" + id + "]";
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      return new ConfigProperty16Impl(CopyUtil.cloneList(description), CopyUtil.clone(configPropertyName),
+            CopyUtil.clone(configPropertyType),
+            CopyUtil.clone(configPropertyValue), configPropertyIgnore,
+            configPropertySupportsDynamicUpdates,
+            configPropertyConfidential, CopyUtil.cloneString(id), CopyUtil.cloneString(attachedClassName));
+   }
 
+
 }

Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Connector16Impl.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Connector16Impl.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/metadata/ra/ra16/Connector16Impl.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jca.common.metadata.ra.ra16;
 
+import org.jboss.jca.common.api.metadata.CopyUtil;
+import org.jboss.jca.common.api.metadata.CopyableMetaData;
 import org.jboss.jca.common.api.metadata.MergeUtil;
 import org.jboss.jca.common.api.metadata.jbossra.JbossRa;
 import org.jboss.jca.common.api.metadata.ra.Connector;
@@ -228,4 +230,23 @@
 
    }
 
+   @Override
+   public CopyableMetaData copy()
+   {
+      XsdString newResourceadapterVersion = CopyUtil.clone(this.resourceadapterVersion);
+      XsdString newEisType = XsdString.isNull(this.eisType) ? null : (XsdString) this.eisType.copy();
+      List<String> newRequiredWorkContexts = CopyUtil.cloneListOfStrings(this.requiredWorkContexts);
+      String newModuleName = CopyUtil.cloneString(this.moduleName);
+      List<Icon> newIcons = CopyUtil.cloneList(this.icon);
+      boolean newMetadataComplete = this.metadataComplete;
+      LicenseType newLicense = CopyUtil.clone(this.license);
+      List<LocalizedXsdString> newDescriptions = CopyUtil.cloneList(this.description);
+      List<LocalizedXsdString> newDisplayNames = CopyUtil.cloneList(this.displayName);
+      XsdString newVendorName = CopyUtil.clone(this.vendorName);
+      ResourceAdapter1516 newResourceadapter = CopyUtil.clone((ResourceAdapter1516) this.resourceadapter);
+      return new Connector16Impl(newModuleName, newVendorName, newEisType, newResourceadapterVersion, newLicense,
+            newResourceadapter, newRequiredWorkContexts, newMetadataComplete, newDescriptions, newDisplayNames,
+            newIcons, CopyUtil.cloneString(id));
+   }
+
 }

Copied: projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/CopyableMetaDataTestCase.java (from rev 107533, projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/RaParserTestCase.java)
===================================================================
--- projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/CopyableMetaDataTestCase.java	                        (rev 0)
+++ projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/CopyableMetaDataTestCase.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -0,0 +1,175 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.common.metadata.ra;
+
+import org.jboss.jca.common.api.metadata.ra.Connector;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.junit.Test;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ *
+ * A RaParserTestCase.
+ *
+ * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
+ *
+ */
+public class CopyableMetaDataTestCase
+{
+   /**
+    * shouldCopyConnector16
+    * @throws Exception in case of error
+    */
+   @Test
+   public void shouldCopyConnector16() throws Exception
+   {
+
+      FileInputStream is = null;
+      try
+      {
+         //given
+         File xmlFile = new File(Thread.currentThread().getContextClassLoader()
+               .getResource("connector-1.6-sample.xml").toURI());
+         is = new FileInputStream(xmlFile);
+         RaParser parser = new RaParser();
+         //when
+         Connector connector = parser.parse(is);
+         Connector newConnector = (Connector) connector.copy();
+         //then
+         assertThat(connector == newConnector, is(false));
+         assertThat(connector.equals(newConnector), is(true));
+         assertThat(connector.hashCode(), is(newConnector.hashCode()));
+
+
+
+      }
+      finally
+      {
+         if (is != null)
+            is.close();
+      }
+
+   }
+
+   /**
+    * shouldCopyConnector16
+    * @throws Exception in case of error
+    */
+   @Test
+   public void shouldCopyConnector15() throws Exception
+   {
+
+      FileInputStream is = null;
+      try
+      {
+         //given
+         File xmlFile = new File(Thread.currentThread().getContextClassLoader()
+               .getResource("connector-1.5-sample.xml").toURI());
+         is = new FileInputStream(xmlFile);
+         RaParser parser = new RaParser();
+         //when
+         Connector connector = parser.parse(is);
+         Connector newConnector = (Connector) connector.copy();
+         //then
+         assertThat(connector == newConnector, is(false));
+         assertThat(connector.equals(newConnector), is(true));
+         assertThat(connector.hashCode(), is(newConnector.hashCode()));
+
+      }
+      finally
+      {
+         if (is != null)
+            is.close();
+      }
+
+   }
+
+   /**
+    * shouldCopyConnector16 more complex
+    * @throws Exception in case of error
+    */
+   @Test
+   public void shouldCopyConnector16MoreComplex() throws Exception
+   {
+      FileInputStream is = null;
+      try
+      {
+         //given
+         File xmlFile = new File(Thread.currentThread().getContextClassLoader()
+               .getResource("ra.xml").toURI());
+         is = new FileInputStream(xmlFile);
+         RaParser parser = new RaParser();
+         //when
+         Connector connector = parser.parse(is);
+         Connector newConnector = (Connector) connector.copy();
+         //then
+         assertThat(connector == newConnector, is(false));
+         assertThat(connector.equals(newConnector), is(true));
+         assertThat(connector.hashCode(), is(newConnector.hashCode()));
+
+
+      }
+      finally
+      {
+         if (is != null)
+            is.close();
+      }
+
+   }
+
+   /**
+    * shouldCopyConnector10
+    * @throws Exception in case of error
+    */
+   @Test
+   public void shouldCopyConnector10() throws Exception
+   {
+      FileInputStream is = null;
+      try
+      {
+         //given
+         File xmlFile = new File(Thread.currentThread().getContextClassLoader()
+               .getResource("connector-1.0-sample.xml").toURI());
+         is = new FileInputStream(xmlFile);
+         RaParser parser = new RaParser();
+         //when
+         Connector connector = parser.parse(is);
+         Connector newConnector = (Connector) connector.copy();
+         //then
+         assertThat(connector == newConnector, is(false));
+         assertThat(connector.equals(newConnector), is(true));
+         assertThat(connector.hashCode(), is(newConnector.hashCode()));
+      }
+      finally
+      {
+         if (is != null)
+            is.close();
+      }
+
+   }
+
+}

Modified: projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/RaParserTestCase.java
===================================================================
--- projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/RaParserTestCase.java	2010-08-11 12:51:35 UTC (rev 107536)
+++ projects/jboss-jca/trunk/common/src/test/java/org/jboss/jca/common/metadata/ra/RaParserTestCase.java	2010-08-11 14:28:09 UTC (rev 107537)
@@ -82,11 +82,41 @@
    @Test
    public void shouldParseConnector15() throws Exception
    {
+
       FileInputStream is = null;
       try
       {
          //given
          File xmlFile = new File(Thread.currentThread().getContextClassLoader()
+               .getResource("connector-1.5-sample.xml").toURI());
+         is = new FileInputStream(xmlFile);
+         RaParser parser = new RaParser();
+         //when
+         Connector connector = parser.parse(is);
+         //then
+         assertThat(connector, instanceOf(Connector15.class));
+         assertThat(connector.getVersion(), is(Version.V_15));
+      }
+      finally
+      {
+         if (is != null)
+            is.close();
+      }
+
+   }
+
+   /**
+    * shouldParseConnector15MoreComplex
+    * @throws Exception in case of error
+    */
+   @Test
+   public void shouldParseConnector16MoreComplex() throws Exception
+   {
+      FileInputStream is = null;
+      try
+      {
+         //given
+         File xmlFile = new File(Thread.currentThread().getContextClassLoader()
                .getResource("ra.xml").toURI());
          is = new FileInputStream(xmlFile);
          RaParser parser = new RaParser();



More information about the jboss-cvs-commits mailing list