[teiid-commits] teiid SVN: r1882 - in branches/JCA: build/kit-jboss-container/deployers/teiid.deployer and 13 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Mon Mar 1 15:46:02 EST 2010


Author: rareddy
Date: 2010-03-01 15:45:58 -0500 (Mon, 01 Mar 2010)
New Revision: 1882

Added:
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
   branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
Removed:
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java
Modified:
   branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh
   branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
   branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java
   branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
   branches/JCA/client/src/main/resources/vdb-deployer.xsd
   branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
   branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
   branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
   branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
   branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
   branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java
   branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
   branches/JCA/jboss-integration/src/test/resources/TransactionsRevisited.vdb
   branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
   branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
Log:
TEIID-998: Removed data roles from schema; renamed few properties in the schema; made models and properties access to be hash based;started adding in code for update of the deployment file.

Modified: branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh
===================================================================
--- branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/adminshell/src/main/resources/scripts/adminapi.bsh	2010-03-01 20:45:58 UTC (rev 1882)
@@ -100,24 +100,30 @@
 /**
  * Assign a {@link ConnectorBinding} to a {@link VDB}'s Model
  *
- * @param connectorBindingName
- *            Name of the ConnectorBinding
  * @param vdbName
  *            Name of the VDB
  * @param vdbVersion
  *            Version of the VDB
  * @param modelName
  *            Name of the Model to map Connector Binding
+ * @param connectorBindingName
+ *            Name of the ConnectorBinding
  * @throws AdminException
  *             if there's a system error or if there's a user input error.
  * @since 4.3
  */
-void assignBindingToModel(String connectorBindingName, String vdbName, String vdbVersion, String modelName) {
+void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String connectorBindingName) {
     debug("Assigning Connector Binding " + connectorBindingName + " to Model " + modelName + " in VDB " + vdbName + " version " + vdbVersion);
     checkAdmin();
-    internalAdmin.assignBindingToModel(connectorBindingName, vdbName, vdbVersion, modelName);
+    internalAdmin.assignBindingToModel(vdbName, vdbVersion, modelName, connectorBindingName);
 }
 
+void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String[] connectorBindingNames) {
+    debug("Assigning Connector Bindings " + connectorBindingNames + " to Model " + modelName + " in VDB " + vdbName + " version " + vdbVersion);
+    checkAdmin();
+    internalAdmin.assignBindingToModel(vdbName, vdbVersion, modelName, connectorBindingNames);
+}
+
 /**
  * Adds JDBC XA Data Source in the container.
  * @param dsName - name of the source
@@ -298,6 +304,20 @@
 }
 
 /**
+ * Get the VDB
+ * @param vdbName
+ * @param vbdVersion
+ * @throws AdminException if there's a system error.
+ * @return
+ */
+VDB getVDB(String vdbName, int version) {
+    checkAdmin();
+    result = internalAdmin.getVDB(vdbName, version);
+    debug(result);
+    return result;
+}
+
+/**
  * Get all the Connector Bindings for the given VDB identifier pattern
  * @param vdbName - Name of the VDB
  * @param vdbVersion - version of the VDB

Modified: branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml
===================================================================
--- branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/build/kit-jboss-container/deployers/teiid.deployer/teiid-deployer-jboss-beans.xml	2010-03-01 20:45:58 UTC (rev 1882)
@@ -56,6 +56,10 @@
         <property name="managedObjectFactory"><inject bean="ManagedObjectFactory"/></property>
     </bean>
     
+    <!-- Persistence class for the VDB deployment file -->
+   <bean name="VDBMetadataComponentMapper" class="org.teiid.jboss.deployers.VDBMetadataComponentMapper">
+        <constructor><parameter><inject bean="PersistenceFactory" /></parameter></constructor>
+   </bean>    
         
    <!--  JBOSS Cache -->
    <!-- Uncomment for JBoss Cache -->

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/Admin.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -46,15 +46,15 @@
      * @throws AdminException
      *             if there's a system error or if there's a user input error.
      */
-    void assignBindingToModel(String connectorBindingName,
-                              String vdbName,
-                              String vdbVersion,
-                              String modelName) throws AdminException;
+    void assignBindingToModel(String vdbName,
+                              int vdbVersion,
+                              String modelName,
+                              String connectorBindingName) throws AdminException;
     
-    void assignBindingsToModel(String[] connectorBindingName,
-            String vdbName,
-            String vdbVersion,
-            String modelName) throws AdminException;    
+    void assignBindingsToModel(String vdbName,
+            int vdbVersion,
+            String modelName,
+            String[] connectorBindingName) throws AdminException;    
 
     /**
      * Set/update the property for the Connector Binding identified by the given deployed name.

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/Model.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,7 +22,6 @@
 
 package org.teiid.adminapi;
 
-import java.util.List;
 
 /** 
  * Represents a metadata model in the Teiid system.
@@ -32,12 +31,6 @@
 public interface Model extends AdminObject {
 
     /**
-     * Return the connector binding names for this Virtual Database.
-     * @return connector bindings bound to this model. 
-     */
-    List<String> getConnectorBindingNames();
-
-    /**
      * Determine if this model is a Source model.
      * 
      * @return <code>true</code> if it contains physical group(s).
@@ -54,13 +47,12 @@
 
     /**
      * Retrieve the model type.
-     * TODO: one of ...
      * @return model type
      */
     String getModelType();
 
     /**
-     * Retrive the model URI.
+     * Retrieve the model URI.
      * 
      * @return model URI
      */
@@ -73,8 +65,21 @@
      */
     boolean isSupportsMultiSourceBindings();
     
+    /**
+     * Path of the model inside the VDB (optional)
+     * @return String
+     */
     String getPath();
     
+    /**
+     * UUID of the Model (optional)
+     * @return String
+     */
     String getUuid();
         
+    /**
+     * Associated connector binding's reference name
+     * @return String
+     */
+    String getConnectorReference();
 }
\ No newline at end of file

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/TeiidAdmin.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -29,22 +29,13 @@
 public abstract class TeiidAdmin implements Admin, Serializable {
 
 	@Override
-	public void assignBindingToModel(String connectorBindingName,
-			String vdbName, String vdbVersion, String modelName)
+	public void assignBindingToModel(String vdbName, int vdbVersion, String modelName, String connectorBindingName)
 			throws AdminException {
 		// rameshTODO Auto-generated method stub
 		
 	}
 
-	@Override
-	public void assignBindingsToModel(String[] connectorBindingName,
-			String vdbName, String vdbVersion, String modelName)
-			throws AdminException {
-		// rameshTODO Auto-generated method stub
-		
-	}
 
-
 	@Override
 	public Collection<ProcessObject> getProcesses(String processIdentifier) throws AdminException {
 		ArrayList<ProcessObject> list = new ArrayList<ProcessObject>();

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/AdminObjectImpl.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -41,7 +42,7 @@
 	
 	private String name;
 		
-	private List<PropertyMetadata> properties;
+	private LinkedHashMap<String, PropertyMetadata> properties = new LinkedHashMap<String, PropertyMetadata>();
 	
 	private transient Map<String, Object> attachments = Collections.synchronizedMap(new HashMap<String, Object>());
 		
@@ -56,50 +57,36 @@
 
 	@Override
 	public Properties getProperties() {
-		if (this.properties == null) {
-			return null;
-		}
-		
 		Properties props = new Properties();
-		for (PropertyMetadata p:this.properties) {
+		for (PropertyMetadata p:this.properties.values()) {
 			props.setProperty(p.getName(), p.getValue());
 		}
 		return props;
 	}
 	
+	public void setProperties(Properties props) {
+		this.properties.clear();
+		for (String key:props.stringPropertyNames()) {
+			addProperty(key, props.getProperty(key));
+		}
+	}	
+	
 	protected List<PropertyMetadata> getPropertiesDirect(){
-		return this.properties;
+		return new ListOverMap<PropertyMetadata>(this.properties, new KeyBuilder<PropertyMetadata>() {
+			@Override
+			public String getKey(PropertyMetadata entry) {
+				return entry.getName();
+			}
+		});
 	}
 	
-	protected void setPropertiesDirect(List<PropertyMetadata> props){
-		this.properties = props;
-	}	
-
 	@Override
 	public String getPropertyValue(String name) {
-		if (this.properties == null) {
-			return null;
-		}
-		
-		for (PropertyMetadata p:this.properties) {
-			if (p.getName().equals(name)) {
-				return p.getValue();
-			}
-		}
-		return null;
+		return this.properties.get(name).getValue();
 	}
 
-	public void setProperties(Properties props) {
-		for (String key:props.stringPropertyNames()) {
-			addProperty(key, props.getProperty(key));
-		}
-	}
-	
 	public void addProperty(String key, String value) {
-		if (this.properties == null) {
-			this.properties = new ArrayList<PropertyMetadata>();
-		}
-		this.properties.add(new PropertyMetadata(key, value));
+		this.properties.put(key, new PropertyMetadata(key, value));
 	}
 	
 	   /**

Deleted: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/DataRoleMetadata.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -1,164 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * See the COPYRIGHT.txt file distributed with this work for information
- * regarding copyright ownership.  Some portions may be licensed
- * to Red Hat, Inc. under one or more contributor license agreements.
- * 
- * This library 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 library 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 library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301 USA.
- */
-package org.teiid.adminapi.impl;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlType;
-
-import org.jboss.managed.api.annotation.ManagementObject;
-
-
-/**
- * <pre>
- * &lt;complexType>
- *   &lt;complexContent>
- *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       &lt;sequence>
- *         &lt;element name="description" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
- *         &lt;element name="resource-name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         &lt;element name="allow-create" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- *         &lt;element name="allow-read" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- *         &lt;element name="allow-update" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- *         &lt;element name="allow-delete" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
- *         &lt;choice minOccurs="0">
- *           &lt;element name="security-role-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *           &lt;element name="security-role-ref" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         &lt;/choice>
- *       &lt;/sequence>
- *       &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *     &lt;/restriction>
- *   &lt;/complexContent>
- * &lt;/complexType>
- * </pre>
- * 
- */
- at XmlAccessorType(XmlAccessType.FIELD)
- at XmlType(name = "", propOrder = {
-    "description",
-    "resourceName",
-    "allowCreate",
-    "allowRead",
-    "allowUpdate",
-    "allowDelete",
-    "securityRoleNames",
-    "securityRoleRef"
-})
- at ManagementObject
-public class DataRoleMetadata implements Serializable {
-
-    @XmlAttribute(name = "name", required = true)
-    protected String name;
-	@XmlElement(name = "description")
-    protected String description;
-    @XmlElement(name = "resource-name", required = true)
-    protected String resourceName;
-    @XmlElement(name = "allow-create")
-    protected Boolean allowCreate;
-    @XmlElement(name = "allow-read")
-    protected Boolean allowRead;
-    @XmlElement(name = "allow-update")
-    protected Boolean allowUpdate;
-    @XmlElement(name = "allow-delete")
-    protected Boolean allowDelete;
-    @XmlElement(name = "security-role-name")
-    protected List<String> securityRoleNames;
-    @XmlElement(name = "security-role-ref")
-    protected String securityRoleRef;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String value) {
-        this.name = value;
-    }
-    
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String value) {
-        this.description = value;
-    }
-
-    public String getResourceName() {
-        return resourceName;
-    }
-
-    public void setResourceName(String value) {
-        this.resourceName = value;
-    }
-
-    public Boolean isAllowCreate() {
-        return allowCreate;
-    }
-
-    public void setAllowCreate(Boolean value) {
-        this.allowCreate = value;
-    }
-
-    public Boolean isAllowRead() {
-        return allowRead;
-    }
-
-    public void setAllowRead(Boolean value) {
-        this.allowRead = value;
-    }
-
-    public Boolean isAllowUpdate() {
-        return allowUpdate;
-    }
-
-    public void setAllowUpdate(Boolean value) {
-        this.allowUpdate = value;
-    }
-
-    public Boolean isAllowDelete() {
-        return allowDelete;
-    }
-
-    public void setAllowDelete(Boolean value) {
-        this.allowDelete = value;
-    }
-
-    public List<String> getSecurityRoleNames() {
-        if (this.securityRoleNames == null) {
-            this.securityRoleNames = new ArrayList<String>();
-        }
-        return this.securityRoleNames;
-    }
-
-    public String getSecurityRoleRef() {
-        return securityRoleRef;
-    }
-
-    public void setSecurityRoleRef(String value) {
-        this.securityRoleRef = value;
-    }
-}

Added: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java	                        (rev 0)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,84 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright (C) 2008 Red Hat, Inc.
+ * Copyright (C) 2000-2007 MetaMatrix, Inc.
+ * Licensed to Red Hat, Inc. under one or more contributor 
+ * license agreements.  See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ * 
+ * This library 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 library 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 library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.adminapi.impl;
+
+import java.util.AbstractList;
+import java.util.LinkedHashMap;
+import java.util.Set;
+
+final class ListOverMap<E> extends AbstractList<E> {
+	
+	private LinkedHashMap<String, E> parent;
+	private KeyBuilder builder;
+	
+	public ListOverMap(LinkedHashMap<String, E> parent, KeyBuilder builder) {
+		this.parent = parent;
+		this.builder = builder;
+	}
+	
+	@Override
+	public void add(int index, E element) {
+		this.parent.put(builder.getKey(element), element);
+	}
+
+	@Override
+	public E remove(int index) {
+		String key = getKey(index);
+		if (key == null) {
+			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());					
+		}
+		return this.parent.remove(key);
+	}
+
+	@Override
+	public E get(int index) {
+		String key = getKey(index);
+		if (key == null) {
+			throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size());					
+		}
+		return this.parent.get(key);
+	}
+
+	private String getKey(int index) {
+		Set<String> keys = this.parent.keySet();
+		int i = 0;
+		for (String key:keys) {
+			if (i == index) {
+				return key;
+			}
+			i++;
+		}
+		return null;
+	}
+
+	@Override
+	public int size() {
+		return this.parent.size();
+	}	
+}
+
+interface KeyBuilder<E> {
+	String getKey(E entry);
+}
+


Property changes on: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ListOverMap.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetaData.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,7 +22,6 @@
 
 package org.teiid.adminapi.impl;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
 
@@ -41,52 +40,37 @@
 
 import com.metamatrix.core.vdb.ModelType;
 
-/**
- * <pre>
- * &lt;complexType>
- *   &lt;complexContent>
- *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
- *       &lt;sequence>
- *         &lt;element name="property" type="{}property" maxOccurs="unbounded" minOccurs="0"/>
- *         &lt;choice minOccurs="0">
- *           &lt;element name="connector-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
- *           &lt;element name="connector-ref" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         &lt;/choice>
- *       &lt;/sequence>
- *       &lt;attribute name="name" use="required" type="{http://www.w3.org/2001/XMLSchema}string" />
- *     &lt;/restriction>
- *   &lt;/complexContent>
- * &lt;/complexType>
- * </pre>
- * 
- */
+
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlType(name = "", propOrder = {
     "propertiesDirect",
-    "connectorBindings",
     "connectorReference"
 })
 @ManagementObject(componentType=@ManagementComponent(type="teiid",subtype="model"))
 public class ModelMetaData extends AdminObjectImpl implements Model {
 	
 	private static final String SUPPORTS_MULTI_SOURCE_BINDINGS_KEY = "supports-multi-source-bindings"; //$NON-NLS-1$
-	private static final String VISIBILITY_KEY = "visibility"; //$NON-NLS-1$
 
 	private static final long serialVersionUID = 3714234763056162230L;
 	
-	@XmlElement(name = "connector-name")
-	private List<String> connectorBindings = new ArrayList<String>(); 
+	@XmlElement(name = "connector-ref")
+	private String connectorReference; 
 	
-    @XmlElement(name = "connector-ref")
-    protected String connectorReference;	
-    
-    @XmlAttribute(name = "type", required = true)
+	@XmlAttribute(name = "type", required = true)
 	private String modelType; //$NON-NLS-1$
     
-	private String modelURI = ""; //$NON-NLS-1$
+    @XmlAttribute(name = "uri")
+	private String modelURI; //$NON-NLS-1$
+    
+    @XmlAttribute(name = "path")
     private String path;
+    
+    @XmlAttribute(name = "uuid")
     private String uuid;
     
+    @XmlAttribute(name = "visible")
+    private Boolean visible = true;
+    
 	@ManagementProperty(description="Model Name", readOnly=true)
 	@ManagementObjectID(type="model")
 	@XmlAttribute(name = "name", required = true)
@@ -99,21 +83,6 @@
 		super.setName(name);
 	}
 	
-    @ManagementProperty(description="Connector Bindings for model")
-    public List<String> getConnectorBindingNames(){
-		return this.connectorBindings;
-	}
-    
-    @ManagementProperty(description="Connector Binding Reference")
-    public String getConnectorReference() {
-		return connectorReference;
-	}
-
-
-	public void setConnectorReference(String connectorReference) {
-		this.connectorReference = connectorReference;
-	}    
-
 	@Override
 	@ManagementProperty(description = "Is Model Source model", readOnly=true)
     public boolean isSource() {
@@ -126,7 +95,7 @@
 	@Override
 	@ManagementProperty(description = "Is Model Visible", readOnly=true)
 	public boolean isVisible() {
-		return getVisibility() == Visibility.PUBLIC;
+		return this.visible;
 	}
 
 	@Override
@@ -172,21 +141,6 @@
 		return super.getPropertiesDirect();
 	}
 	
-	// This is needed by the JAXB
-	protected void setPropertiesDirect(List<PropertyMetadata> props){
-		super.setPropertiesDirect(props);
-	}	
-	
-	public void addConnectorBinding(String binding) {
-		this.connectorBindings.add(binding);
-	}
-	
-	public void setConnectorBinding(List<String> bindings) {
-		this.connectorBindings.clear();
-		this.connectorBindings.addAll(bindings);
-	}
-	
-    
     public void setSupportsMultiSourceBindings(boolean supports) {
         addProperty(SUPPORTS_MULTI_SOURCE_BINDINGS_KEY, Boolean.toString(supports));
     }
@@ -208,19 +162,31 @@
     }      
     
     public String toString() {
-    	return getName() + connectorBindings;
+    	if (this.connectorReference != null)
+    		return getName() + "["+this.connectorReference+"]";
+    	
+    	return getName();
     }
     
     public Visibility getVisibility(){
-		String visibility = getPropertyValue(VISIBILITY_KEY);
-		if (visibility != null) {
-			Visibility v = Visibility.valueOf(visibility);
-			return v;
-		}
-		return Visibility.PUBLIC;
+		return this.visible?Visibility.PUBLIC:Visibility.PRIVATE;
     }  
     
-    public void setVisibility(Visibility visibility) {
-        addProperty(VISIBILITY_KEY, visibility.name());
+    public void setVisibility(Visibility visibility){
+		this.visible = (visibility == Visibility.PUBLIC);
+    }     
+    
+    public void setVisible(Boolean value) {
+    	this.visible = value;
     }    
+    
+    @Override
+    @ManagementProperty(description = "Connector Binding Reference Name", readOnly=true)
+    public String getConnectorReference() {
+		return connectorReference;
+	}
+
+	public void setConnectorReference(String refName) {
+		this.connectorReference = refName;
+	}    
 }

Added: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java	                        (rev 0)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,111 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library 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 library 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 library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.adminapi.impl;
+
+import java.lang.reflect.Type;
+import java.util.Properties;
+
+import org.jboss.metatype.api.types.CompositeMetaType;
+import org.jboss.metatype.api.types.MetaType;
+import org.jboss.metatype.api.types.PropertiesMetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
+import org.jboss.metatype.api.values.CompositeValue;
+import org.jboss.metatype.api.values.CompositeValueSupport;
+import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.MetaValueFactory;
+import org.jboss.metatype.api.values.PropertiesMetaValue;
+import org.jboss.metatype.api.values.SimpleValueSupport;
+import org.jboss.metatype.plugins.types.MutableCompositeMetaType;
+import org.jboss.metatype.spi.values.MetaMapper;
+
+public class ModelMetadataMapper extends MetaMapper<ModelMetaData> {
+	private static final MutableCompositeMetaType metaType;
+	private static final MetaValueFactory metaValueFactory = MetaValueFactory.getInstance();
+	
+	static {
+		metaType = new MutableCompositeMetaType(ModelMetaData.class.getName(), "The Model meta data");
+		metaType.addItem("connectorReference", "connectorReference", SimpleMetaType.STRING);
+		metaType.addItem("modelType", "modelType", SimpleMetaType.STRING);
+		metaType.addItem("modelURI", "modelURI", SimpleMetaType.STRING);
+		metaType.addItem("path", "path", SimpleMetaType.STRING);
+		metaType.addItem("uuid", "uuid", SimpleMetaType.STRING);
+		metaType.addItem("visible", "visible", SimpleMetaType.BOOLEAN_PRIMITIVE);
+		metaType.addItem("name", "name", SimpleMetaType.STRING);
+		metaType.addItem("properties", "properties", PropertiesMetaType.INSTANCE);
+		metaType.freeze();
+	}
+	
+	@Override
+	public Type mapToType() {
+		return ModelMetaData.class;
+	}
+	
+	@Override
+	public MetaType getMetaType() {
+		return metaType;
+	}
+	
+	@Override
+	public MetaValue createMetaValue(MetaType metaType, ModelMetaData object) {
+		if (object == null)
+			return null;
+		if (metaType instanceof CompositeMetaType) {
+			CompositeMetaType composite = (CompositeMetaType) metaType;
+			CompositeValueSupport request = new CompositeValueSupport(composite);
+			
+			request.set("connectorReference", SimpleValueSupport.wrap(object.getConnectorReference()));
+			request.set("modelType", SimpleValueSupport.wrap(object.getModelType()));
+			request.set("modelURI", SimpleValueSupport.wrap(object.getModelURI()));
+			request.set("path", SimpleValueSupport.wrap(object.getPath()));
+			request.set("uuid", SimpleValueSupport.wrap(object.getUuid()));
+			request.set("visible", SimpleValueSupport.wrap(object.isVisible()));
+			request.set("name",SimpleValueSupport.wrap(object.getName()));
+			request.set("properties", new PropertiesMetaValue(object.getProperties()));
+			
+			return request;
+		}
+		throw new IllegalArgumentException("Cannot convert request " + object);
+	}
+
+	@Override
+	public ModelMetaData unwrapMetaValue(MetaValue metaValue) {
+		if (metaValue == null)
+			return null;
+
+		if (metaValue instanceof CompositeValue) {
+			CompositeValue compositeValue = (CompositeValue) metaValue;
+			
+			ModelMetaData model = new ModelMetaData();
+			model.setConnectorReference((String) metaValueFactory.unwrap(compositeValue.get("connectorReference")));
+			model.setModelType((String) metaValueFactory.unwrap(compositeValue.get("modelType")));
+			model.setModelURI((String) metaValueFactory.unwrap(compositeValue.get("modelURI")));
+			model.setPath((String) metaValueFactory.unwrap(compositeValue.get("path")));
+			model.setUuid((String) metaValueFactory.unwrap(compositeValue.get("sourceRequest")));
+			model.setVisible((Boolean) metaValueFactory.unwrap(compositeValue.get("visible")));
+			model.setName((String) metaValueFactory.unwrap(compositeValue.get("name")));
+			model.setProperties((Properties) metaValueFactory.unwrap(compositeValue.get("properties")));
+			return model;
+		}
+		throw new IllegalStateException("Unable to unwrap request " + metaValue);
+	}
+
+}


Property changes on: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ModelMetadataMapper.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/ReferenceMappingMetadata.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -30,6 +30,7 @@
 import javax.xml.bind.annotation.XmlType;
 
 import org.jboss.managed.api.annotation.ManagementObject;
+import org.jboss.managed.api.annotation.ManagementProperty;
 
 
 /**
@@ -39,7 +40,7 @@
  *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
  *       &lt;sequence>
  *         &lt;element name="ref-name" type="{http://www.w3.org/2001/XMLSchema}string"/>
- *         &lt;element name="name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
+ *         &lt;element name="resource-name" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded"/>
  *       &lt;/sequence>
  *     &lt;/restriction>
  *   &lt;/complexContent>
@@ -51,7 +52,7 @@
 @XmlAccessorType(XmlAccessType.NONE)
 @XmlType(name = "reference-mapping", propOrder = {
     "refName",
-    "names"
+    "resourceNames"
 })
 @ManagementObject
 public class ReferenceMappingMetadata implements Serializable {
@@ -59,9 +60,23 @@
     @XmlElement(name = "ref-name", required = true)
     protected String refName;
  
-    @XmlElement(name = "name", required = true)
-    protected List<String> names;
+    @XmlElement(name = "resource-name", required = true)
+    protected List<String> resourceNames;
 
+    public ReferenceMappingMetadata() {
+    }
+    
+    public ReferenceMappingMetadata(String refName, String resourceName) {
+    	setRefName(refName);
+    	addResourceName(resourceName);
+    }
+    
+    public ReferenceMappingMetadata(String refName, List<String> resourceNames) {
+    	setRefName(refName);
+    	this.resourceNames = new ArrayList<String>(resourceNames);
+    }    
+    
+    @ManagementProperty(description="Reference Name", readOnly=true)
     public String getRefName() {
         return refName;
     }
@@ -70,14 +85,46 @@
         this.refName = value;
     }
 
-    public List<String> getNames() {
-        if (this.names == null) {
-            this.names = new ArrayList<String>();
+    public List<String> getResourceNames() {
+        if (this.resourceNames == null) {
+            this.resourceNames = new ArrayList<String>();
         }
-        return this.names;
+        return this.resourceNames;
     }
     
-    public void addName(String name) {
-    	getNames().add(name);
+    @ManagementProperty(description="Resource Names")
+    public void setResourceNames(List<String> names) {
+    	this.resourceNames = new ArrayList<String>(names);
     }
+    
+    public void addResourceName(String name) {
+    	getResourceNames().add(name);
+    }
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((refName == null) ? 0 : refName.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		ReferenceMappingMetadata other = (ReferenceMappingMetadata) obj;
+		if (refName == null) {
+			if (other.refName != null)
+				return false;
+		} else if (!refName.equals(other.refName))
+			return false;
+		return true;
+	}
+    
+  
 }

Modified: branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java
===================================================================
--- branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/java/org/teiid/adminapi/impl/VDBMetaData.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -21,9 +21,11 @@
  */
 package org.teiid.adminapi.impl;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -34,6 +36,7 @@
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlValue;
 
 import org.jboss.managed.api.annotation.ManagementComponent;
 import org.jboss.managed.api.annotation.ManagementObject;
@@ -41,7 +44,6 @@
 import org.jboss.managed.api.annotation.ManagementOperation;
 import org.jboss.managed.api.annotation.ManagementProperty;
 import org.teiid.adminapi.VDB;
-import org.teiid.adminapi.Visibility;
 
 import com.metamatrix.core.CoreConstants;
 import com.metamatrix.core.vdb.ModelType;
@@ -51,10 +53,10 @@
 @XmlType(name = "", propOrder = {
     "description",
     "propertiesDirect",
-    "models",
+    "modelsDirect",
     "connectorMappings",
-    "dataRoles",
-    "securityRoleMappings"
+    "securityRoleMappings",
+    "problemMarkers"
 })
 @XmlRootElement(name = "vdb")
 public class VDBMetaData extends AdminObjectImpl implements VDB {
@@ -62,8 +64,7 @@
 
 	private static final long serialVersionUID = -4723595252013356436L;
 	
-	@XmlElement(name = "model", required = true, type = ModelMetaData.class)
-	private HashSet<ModelMetaData> models = new HashSet<ModelMetaData>();
+	private LinkedHashMap<String, ModelMetaData> models = new LinkedHashMap<String, ModelMetaData>();
 	 
 	@XmlAttribute(name = "version", required = true)
 	private int version = 1;
@@ -74,25 +75,26 @@
     @XmlElement(name = "connector-mapping")
     protected List<ReferenceMappingMetadata> connectorMappings;
     
-	@XmlElement(name = "data-role")
-    protected List<DataRoleMetadata> dataRoles;
-    
     @XmlElement(name = "security-role-mapping")
     protected List<ReferenceMappingMetadata> securityRoleMappings;	
+    
+    @XmlElement(name = "problem-marker")
+    protected List<ProblemMarker> problemMarkers;    
 	
-    private List<String> errors;
 	private String fileUrl = null;
 	
 	public VDBMetaData() {
 		// auto add sytem model.
 		ModelMetaData system = new ModelMetaData();
 		system.setName(CoreConstants.SYSTEM_MODEL);
-		system.setVisibility(Visibility.PUBLIC);
+		system.setVisible(true);
 		system.setModelType(ModelType.getString(ModelType.PHYSICAL));
-		system.addConnectorBinding("system");
+		system.setConnectorReference("system");
 		system.setSupportsMultiSourceBindings(false);
 		system.setPath("builtin");
 		
+		addConnectorMapping(new ReferenceMappingMetadata("system", "system"));
+		
 		addModel(system);
 	}
 
@@ -109,7 +111,7 @@
 	} 
 	
 	@Override
-	@ManagementProperty(description="VDB Status", readOnly=true)
+	@ManagementProperty(description="VDB Status")
 	public Status getStatus() {
 		String status = getPropertyValue(STATUS_KEY);
 		if (status != null) {
@@ -141,14 +143,29 @@
 	public void setUrl(String url) {
 		this.fileUrl = url;
 	}
+
+	@ManagementProperty(description="Model list in a VDB", managed=true)
+	public List<ModelMetaData> getModels(){
+		return new ArrayList<ModelMetaData>(this.models.values());
+	}
 	
-	@ManagementProperty(description="Model list in a VDB", managed=true)
-	public Set<ModelMetaData> getModels(){
-		return models;
+	/**
+	 * This simulating a list over a map. JAXB requires a list and performance recommends
+	 * map and we would like to keep one variable to represent both. 
+	 * @return
+	 */
+	@XmlElement(name = "model", required = true, type = ModelMetaData.class)
+	protected List<ModelMetaData> getModelsDirect(){
+		return new ListOverMap(this.models, new KeyBuilder<ModelMetaData>() {
+			@Override
+			public String getKey(ModelMetaData entry) {
+				return entry.getName();
+			}
+		});
 	}	
 	
 	public void addModel(ModelMetaData m) {
-		this.models.add(m);
+		this.models.put(m.getName(), m);
 	}	
 
 	@Override
@@ -164,23 +181,18 @@
 	@Override
 	@ManagementProperty(description = "VDB validity errors", readOnly=true)		
 	public List<String> getValidityErrors(){
-		if (this.errors != null) {
-			return this.errors;
+		if (this.problemMarkers != null && !this.problemMarkers.isEmpty()) {
+			List<String> errors = new ArrayList<String>();
+			for (ProblemMarker m:this.problemMarkers) {
+				if (m.getSeverity().equalsIgnoreCase("ERROR")) {
+					errors.add(m.getValue());
+				}
+			}
+			return errors;
 		}
 		return Collections.EMPTY_LIST; 
 	}
 
-	public void addValidityError(String error) {
-		if (this.errors == null) {
-			errors = new ArrayList<String>();
-		}
-		this.errors.add(error);
-	}
-	
-	public void setValidityErrors(ArrayList<String> errors) {
-		this.errors = errors;
-	}	
-	
 	@Override
 	@ManagementProperty(description = "Is VDB Valid", readOnly=true)
     public boolean isValid() {
@@ -191,33 +203,34 @@
         if (getModels().isEmpty()) {
             return false;        	
         }
-        for(ModelMetaData m:getModels()) {
-        	if (m.isSource()) {
-        		if (m.getConnectorBindingNames().isEmpty()) {
-        			return false;
-        		}
-        	}
-        }
+    	for(ModelMetaData m: this.models.values()) {
+    		if (m.isSource()) {
+    			String connectorReference = m.getConnectorReference();
+    			if (connectorReference == null) {
+    				return false;
+    			}
+    			
+    			List<String> resourceNames = getConnectorBindingNames(connectorReference);
+    			if (resourceNames.isEmpty()) {
+    				return false;
+    			}
+    		}
+    	}
         return true;
     } 	
     
 	public String toString() {
-		return getName() + models;
+		return getName()+"."+getVersion()+ models;
 	}
 
 	@ManagementOperation(description = "Get the model with given name")		
 	public ModelMetaData getModel(String modelName) {
-		for(ModelMetaData m: models) {
-			if (m.getName().equalsIgnoreCase(modelName)) {
-				return m;
-			}
-		}
-		return null;
+		return this.models.get(modelName);
 	}
 	
 	public Set<String> getMultiSourceModelNames(){
 		Set<String> list = new HashSet<String>();
-		for(ModelMetaData m: models) {
+		for(ModelMetaData m: models.values()) {
 			if (m.isSupportsMultiSourceBindings()) {
 				list.add(m.getName());
 			}
@@ -225,10 +238,22 @@
 		return list;
 	}
 	
-	@ManagementProperty(description="Connector reference mappings", managed=true)
+	@ManagementProperty(description="Connector reference mappings")
     public List<ReferenceMappingMetadata> getConnectorMappings() {
 		return this.connectorMappings;
 	}	
+	
+	public List<String> getConnectorBindingNames(String referenceName) {
+		if (this.connectorMappings == null) {
+			return Collections.EMPTY_LIST;
+		}
+		for (ReferenceMappingMetadata data:this.connectorMappings) {
+			if (data.getRefName().equals(referenceName)) {
+				return data.getResourceNames();
+			}
+		}
+		return Collections.EMPTY_LIST;
+	}
     
     public void addConnectorMapping(ReferenceMappingMetadata data) {
     	if (this.connectorMappings == null) {
@@ -237,7 +262,7 @@
     	this.connectorMappings.add(data);
     }
     
-    @ManagementProperty(description="Security refrence mappings", managed=true)
+    @ManagementProperty(description="Security refrence mappings")
 	public List<ReferenceMappingMetadata> getSecurityRoleMappings() {
 		return securityRoleMappings;
 	}    
@@ -249,21 +274,58 @@
 		this.securityRoleMappings.add(data);
 	}
 	
+	// this one manages the Management API
 	@Override
 	@ManagementProperty(description = "Properties", readOnly=true)
     public Properties getProperties() {
-        return new Properties(super.getProperties());
+        return super.getProperties();
     }		
 	
+	// This one manages the JAXB binding
 	@Override
 	@XmlElement(name = "property", type = PropertyMetadata.class)
 	protected List<PropertyMetadata> getPropertiesDirect(){
 		return super.getPropertiesDirect();
 	}
 	
-	// This is needed by the JAXB
-	protected void setPropertiesDirect(List<PropertyMetadata> props){
-		super.setPropertiesDirect(props);
-	}	
-	
+    public void addProblemMarker(String severity, String message) {
+        if (this.problemMarkers == null) {
+            this.problemMarkers = new ArrayList<ProblemMarker>();
+        }
+        this.problemMarkers.add(new ProblemMarker(severity, message));
+    }	
+		
+    @XmlAccessorType(XmlAccessType.NONE)
+    @XmlType(name = "", propOrder = {
+        "value"
+    })
+    public static class ProblemMarker implements Serializable{
+        @XmlValue
+        protected String value;
+        @XmlAttribute(name = "severity")
+        protected String severity;
+
+        public ProblemMarker() {};
+        
+        public ProblemMarker(String severity, String msg) {
+        	this.severity = severity;
+        	this.value = msg;
+        }
+        
+        public String getValue() {
+            return value;
+        }
+
+        public void setValue(String value) {
+            this.value = value;
+        }
+
+        public String getSeverity() {
+            return severity;
+        }
+
+        public void setSeverity(String value) {
+            this.severity = value;
+        }
+    }
 }

Modified: branches/JCA/client/src/main/resources/vdb-deployer.xsd
===================================================================
--- branches/JCA/client/src/main/resources/vdb-deployer.xsd	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/main/resources/vdb-deployer.xsd	2010-03-01 20:45:58 UTC (rev 1882)
@@ -12,34 +12,27 @@
 					<xs:complexType>
 						<xs:sequence>
 							<xs:element name="property" type="property" minOccurs="0" maxOccurs="unbounded"/>
-							<xs:choice minOccurs="0">
-								<xs:element name="connector-name" type="xs:string" maxOccurs="unbounded"/>
-								<xs:element name="connector-ref" type="xs:string"/>
-							</xs:choice>
+							<xs:element name="connector-ref" type="xs:string" minOccurs="0"/>
 						</xs:sequence>
 						<xs:attribute name="name" type="xs:string" use="required"/>
                         <xs:attribute name="type" type="xs:string" use="required"/>
+                        <xs:attribute name="uri" type="xs:string"/>
+                        <xs:attribute name="path" type="xs:string"/>
+                        <xs:attribute name="visibility" type="xs:string"/>
+                        <xs:attribute name="uuid" type="xs:string"/>
 					</xs:complexType>
 				</xs:element>
 				<xs:element name="connector-mapping" type="reference-mapping" minOccurs="0" maxOccurs="unbounded"/>
-				<xs:element name="data-role" minOccurs="0" maxOccurs="unbounded">
-					<xs:complexType>
-						<xs:sequence>
-							<xs:element name="description" type="xs:string" minOccurs="0"/>
-							<xs:element name="resource-name" type="xs:string"/>
-							<xs:element name="allow-create" type="xs:boolean" minOccurs="0"/>
-							<xs:element name="allow-read" type="xs:boolean" minOccurs="0"/>
-							<xs:element name="allow-update" type="xs:boolean" minOccurs="0"/>
-							<xs:element name="allow-delete" type="xs:boolean" minOccurs="0"/>
-							<xs:choice minOccurs="0">
-								<xs:element name="security-role-name" type="xs:string" maxOccurs="unbounded"/>
-								<xs:element name="security-role-ref" type="xs:string"/>
-							</xs:choice>
-						</xs:sequence>
-						<xs:attribute name="name" type="xs:string" use="required"/>
-					</xs:complexType>
-				</xs:element>
 				<xs:element name="security-role-mapping" type="reference-mapping" minOccurs="0" maxOccurs="unbounded"/>
+                <xs:element name="problem-marker" minOccurs="0" maxOccurs="unbounded">
+                    <xs:complexType>
+                        <xs:simpleContent>
+                            <xs:extension base="xs:string">
+                                <xs:attribute name="severity" type="xs:string"/>
+                            </xs:extension>
+                        </xs:simpleContent>
+                    </xs:complexType>
+                </xs:element>
 			</xs:sequence>
 			<xs:attribute name="name" type="xs:string" use="required"/>
 			<xs:attribute name="version" type="xs:int" use="required"/>
@@ -55,7 +48,7 @@
 	<xs:complexType name="reference-mapping">
 		<xs:sequence>
 			<xs:element name="ref-name" type="xs:string"/>
-			<xs:element name="name" type="xs:string" maxOccurs="unbounded"/>
+			<xs:element name="resource-name" type="xs:string" maxOccurs="unbounded"/>
 		</xs:sequence>
 	</xs:complexType>
 </xs:schema>

Modified: branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java
===================================================================
--- branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/client/src/test/java/org/teiid/adminapi/impl/TestVDBMetaData.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
 
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -49,9 +50,11 @@
 		
 		ModelMetaData modelOne = new ModelMetaData();
 		modelOne.setName("model-one");
-		modelOne.addConnectorBinding("java:mybinding");
+		modelOne.setConnectorReference("java:mybinding");
 		modelOne.setModelType("physical");
 		modelOne.addProperty("model-prop", "model-value");
+		modelOne.addProperty("model-prop", "model-value-override");
+		modelOne.setVisible(false);
 		
 		vdb.addModel(modelOne);
 		
@@ -65,10 +68,12 @@
 		
 		ReferenceMappingMetadata ref = new ReferenceMappingMetadata();
 		ref.setRefName("binding-two-ref");
-		ref.addName("java:binding-one");
-		ref.addName("java:binding-two");
+		ref.addResourceName("java:binding-one");
+		ref.addResourceName("java:binding-two");
 		vdb.addConnectorMapping(ref);
 		
+		vdb.addProblemMarker("ERROR", "There is an error in VDB");
+		
 		JAXBContext jc = JAXBContext.newInstance(new Class<?>[] {VDBMetaData.class});
 		Marshaller marshell = jc.createMarshaller();
 		marshell.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,new Boolean(true));
@@ -92,24 +97,28 @@
 		
 		modelOne = vdb.getModel("model-one");
 		assertEquals("model-one", modelOne.getName());
-		assertTrue(modelOne.getConnectorBindingNames().contains("java:mybinding"));
+		assertEquals("java:mybinding", modelOne.getConnectorReference());
 		assertEquals("physical", modelOne.getModelType()); 
-		assertEquals("model-value", modelOne.getPropertyValue("model-prop"));
+		assertEquals("model-value-override", modelOne.getPropertyValue("model-prop"));
+		assertFalse(modelOne.isVisible());
 
 		
 		modelTwo = vdb.getModel("model-two");
 		assertEquals("model-two", modelTwo.getName());
-		assertTrue(modelTwo.getConnectorBindingNames().isEmpty());
 		assertEquals("binding-two-ref", modelTwo.getConnectorReference());
 		assertEquals("virtual", modelTwo.getModelType()); // this is not persisted in the XML
 		assertEquals("model-value", modelTwo.getPropertyValue("model-prop"));
 		
 		
-		assertTrue(vdb.getConnectorMappings().size()==1);
-		ref = vdb.getConnectorMappings().get(0);
+		assertTrue(vdb.getConnectorMappings().size()==2);
+		ref = vdb.getConnectorMappings().get(1);
 		
 		assertEquals("binding-two-ref", ref.getRefName());
-		assertTrue(ref.getNames().contains("java:binding-one"));
-		assertTrue(ref.getNames().contains("java:binding-two"));
+		assertTrue(ref.getResourceNames().contains("java:binding-one"));
+		assertTrue(ref.getResourceNames().contains("java:binding-two"));
+		assertEquals(2, vdb.getConnectorBindingNames("binding-two-ref").size());
+		assertTrue(vdb.getConnectorBindingNames("binding-two-ref").contains("java:binding-one"));
+		
+		assertTrue(vdb.getValidityErrors().contains("There is an error in VDB"));
 	}
 }

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/CachedFinder.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -69,7 +69,7 @@
         ConnectorException exception = null;
         VDBMetaData vdb = workContext.getVDB();
         ModelMetaData model = vdb.getModel(modelName);
-        for (String binding:model.getConnectorBindingNames()) {
+        for (String binding:vdb.getConnectorBindingNames(model.getConnectorReference())) {
         	try {
         		ConnectorManager mgr = this.connectorRepo.getConnectorManager(binding);
         		caps = mgr.getCapabilities();

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/DataTierManagerImpl.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -344,7 +344,7 @@
         if (connectorBindingId == null) {
         	VDBMetaData vdb = workItem.getDqpWorkContext().getVDB();
         	ModelMetaData model = vdb.getModel(modelName);
-        	List<String> bindings = model.getConnectorBindingNames();
+        	List<String> bindings = vdb.getConnectorBindingNames(model.getConnectorReference());
 	        if (bindings == null || bindings.size() != 1) {
 	            // this should not happen, but it did occur when setting up the SystemAdmin models
 	            throw new MetaMatrixComponentException(DQPPlugin.Util.getString("DataTierManager.could_not_obtain_connector_binding", new Object[]{modelName, workItem.getDqpWorkContext().getVdbName(), workItem.getDqpWorkContext().getVdbVersion() })); //$NON-NLS-1$

Modified: branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java
===================================================================
--- branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/main/java/org/teiid/dqp/internal/process/multisource/MultiSourcePlanToProcessConverter.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -27,6 +27,7 @@
 import java.util.Set;
 
 import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.dqp.internal.process.DQPWorkContext;
 
 import com.metamatrix.api.exception.MetaMatrixComponentException;
@@ -84,10 +85,11 @@
             return accessNode;
         }
         
-        ModelMetaData model = workContext.getVDB().getModel(modelName);
+		VDBMetaData vdb = workContext.getVDB();
+        ModelMetaData model = vdb.getModel(modelName);
         List<AccessNode> accessNodes = new ArrayList<AccessNode>();
         
-        for(String bindingName:model.getConnectorBindingNames()) {
+        for(String bindingName:vdb.getConnectorBindingNames(model.getConnectorReference())) {
             
             // Create a new cloned version of the access node and set it's model name to be the bindingUUID
             AccessNode instanceNode = (AccessNode) accessNode.clone();

Modified: branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java
===================================================================
--- branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/com/metamatrix/query/unittest/FakeMetadataFactory.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -160,7 +160,7 @@
     	}
     	model.setVisibility(Visibility.PUBLIC);
     	model.setSupportsMultiSourceBindings(false);
-    	model.addConnectorBinding(name);
+    	model.setConnectorReference(name);
     	
     	return model;
     }
@@ -2539,6 +2539,7 @@
     	model.setVisibility(Visibility.PUBLIC);
     	
     	model.setSupportsMultiSourceBindings(true);
+    	model.setConnectorReference("refname");
     	vdb.addModel(model);
     	vdb.addModel(createModel("Virt", false));
     	

Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/TestConnectorCapabilitiesFinder.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -65,7 +65,8 @@
         VDBMetaData vdb = Mockito.mock(VDBMetaData.class); 
         ModelMetaData model = Mockito.mock(ModelMetaData.class); 
         Mockito.stub(vdb.getModel(modelName)).toReturn(model);
-        Mockito.stub(model.getConnectorBindingNames()).toReturn(bindings);
+        Mockito.stub(model.getConnectorReference()).toReturn("ref-name");
+        Mockito.stub(vdb.getConnectorBindingNames("ref-name")).toReturn(bindings);
         workContext.setVdb(vdb);
         
         BasicSourceCapabilities basicSourceCapabilities = new BasicSourceCapabilities();

Modified: branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java
===================================================================
--- branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/engine/src/test/java/org/teiid/dqp/internal/process/multisource/TestMultiSourcePlanToProcessConverter.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Iterator;
@@ -33,6 +34,8 @@
 import java.util.Set;
 
 import org.junit.Test;
+import org.teiid.adminapi.impl.ModelMetaData;
+import org.teiid.adminapi.impl.ReferenceMappingMetadata;
 import org.teiid.adminapi.impl.VDBMetaData;
 import org.teiid.dqp.internal.process.DQPWorkContext;
 
@@ -98,11 +101,13 @@
         for (String model:multiSourceModels) {
             char sourceID = 'a';
             // by default every model has one binding associated, but for multi-source there were none assigned. 
-            int x = vdb.getModel(model).getConnectorBindingNames().size();
+            ModelMetaData m = vdb.getModel(model);
+            int x = vdb.getConnectorBindingNames(m.getConnectorReference()).size();
+            ArrayList<String> names = new ArrayList<String>();
             for(int i=x; i<sourceCount; i++, sourceID++) {
-            	vdb.getModel(model).addConnectorBinding("" + sourceID);
+            	names.add("" + sourceID);
             }
-        	
+            vdb.addConnectorMapping(new ReferenceMappingMetadata(m.getConnectorReference(), names));
         }
         
         MultiSourceMetadataWrapper wrapper = new MultiSourceMetadataWrapper(metadata, multiSourceModels); 

Modified: branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/Admin.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -47,8 +47,11 @@
 import org.jboss.managed.api.ManagedComponent;
 import org.jboss.managed.api.ManagedDeployment;
 import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.types.CollectionMetaType;
 import org.jboss.metatype.api.types.MapCompositeMetaType;
+import org.jboss.metatype.api.types.SimpleMetaType;
 import org.jboss.metatype.api.values.CollectionValueSupport;
+import org.jboss.metatype.api.values.CompositeValueSupport;
 import org.jboss.metatype.api.values.MapCompositeValueSupport;
 import org.jboss.metatype.api.values.MetaValue;
 import org.jboss.metatype.api.values.MetaValueFactory;
@@ -69,7 +72,6 @@
 import org.teiid.adminapi.TeiidAdmin;
 import org.teiid.adminapi.Transaction;
 import org.teiid.adminapi.VDB;
-import org.teiid.adminapi.Visibility;
 import org.teiid.adminapi.WorkerPoolStatistics;
 import org.teiid.adminapi.impl.ConnectionPoolStatisticsMetadata;
 import org.teiid.adminapi.impl.ConnectorBindingMetaData;
@@ -339,11 +341,11 @@
 	@Override
 	public Collection<ConnectorBinding> getConnectorBindingsInVDB(String vdbName, int vdbVersion) throws AdminException {
 		HashMap<String, ConnectorBinding> bindingMap = new HashMap<String, ConnectorBinding>();
-		VDB vdb = getVDB(vdbName, vdbVersion);
+		VDBMetaData vdb = (VDBMetaData) getVDB(vdbName, vdbVersion);
 		if (vdb != null) {
 			for (Model model:vdb.getModels()) {
 				if (model.isSource()) {
-					for (String bindingName : model.getConnectorBindingNames()) {
+					for (String bindingName : vdb.getConnectorBindingNames(model.getConnectorReference())) {
 						ConnectorBinding binding = getConnectorBinding(bindingName);
 						if (binding != null) {
 							bindingMap.put(bindingName, binding);
@@ -439,7 +441,7 @@
 		}
 	}
 	
-	private VDB buildVDB(ManagedComponent mc) {
+	private VDBMetaData buildVDB(ManagedComponent mc) {
 		VDBMetaData vdb = new VDBMetaData();
 		vdb.setName(ManagedUtil.getSimpleValue(mc, "name", String.class));
 		vdb.setDescription(ManagedUtil.getSimpleValue(mc, "description", String.class));
@@ -449,7 +451,9 @@
 		
 		ArrayList<String> errors = new ArrayList<String>();
 		ManagedUtil.getCollectionValue(mc, "validityErrors", errors, String.class);
-		vdb.setValidityErrors(errors);
+		for (String error:errors) {
+			vdb.addProblemMarker("ERROR", error);
+		}
 		
 		ManagedDeployment deployment = mc.getDeployment();
 		Collection<ManagedComponent> models = deployment.getComponents().values();
@@ -461,6 +465,11 @@
 				}
 			}
 		}
+		
+		// TODO: add the following
+		// ConnectorMappings
+		// SecurityRoleMappings
+		
 		return vdb;
 	}
 
@@ -471,13 +480,10 @@
 		model.setModelType(ManagedUtil.getSimpleValue(mc, "modelType", String.class));
 		model.setPath(ManagedUtil.getSimpleValue(mc, "path", String.class));
 		model.setUuid(ManagedUtil.getSimpleValue(mc, "uuid", String.class));
-		model.setSupportsMultiSourceBindings(ManagedUtil.getSimpleValue(mc, "supportsMultiSourceBindings", Boolean.class));
-		model.setVisibility(Visibility.valueOf(ManagedUtil.getSimpleValue(mc, "visibility", String.class)));
+		model.setVisible(ManagedUtil.getSimpleValue(mc, "visible", Boolean.class));
+		model.setConnectorReference(ManagedUtil.getSimpleValue(mc, "connectorReference", String.class));
+		model.setProperties(ManagedUtil.getPropertiesValue(mc, "properties"));
 		
-		ArrayList<String> bindings = new ArrayList<String>();
-		ManagedUtil.getCollectionValue(mc, "connectorBindingNames", bindings, String.class);
-		model.setConnectorBinding(bindings);
-		
 		return model;
 	}
 	
@@ -860,5 +866,50 @@
 		return jarFile;
 	}
 	
+	
+	@Override
+	public void assignBindingsToModel(String vdbName, int vdbVersion, String modelName, String[] connectorBindingNames) throws AdminException {
 
+		ManagedComponent mc = getVDBManagedComponent(vdbName, vdbVersion);
+		if (mc != null) {
+			VDBMetaData vdb = buildVDB(mc);
+			if (vdb == null) {
+				
+			}
+			
+			ModelMetaData model = vdb.getModel(modelName);
+			if (model == null) {
+				throw new AdminProcessingException("Model name = "+modelName+" not found in the VDB with name = "+vdbName + " version = "+ vdbVersion);
+			}
+
+			String referenceName = model.getConnectorReference();
+			ArrayList<MetaValue> newBindings = new ArrayList<MetaValue>();
+			for (String name:connectorBindingNames) {
+				newBindings.add(new SimpleValueSupport(SimpleMetaType.STRING, name));
+			}
+			
+			ManagedProperty mappings = mc.getProperty("connectorMappings");
+			MetaValue[] elements = ((CollectionValueSupport)mappings.getValue()).getElements();
+			ArrayList<MetaValue> modifiedElements = new ArrayList<MetaValue>();
+			for (MetaValue mv:elements) {
+				MetaValue value = ((CompositeValueSupport)mv).get("refName");
+				if (value != null && ManagedUtil.stringValue(value).equals(referenceName)) {
+					CollectionValueSupport bindings = (CollectionValueSupport)((CompositeValueSupport)mv).get("resourceNames");
+					bindings.setElements(newBindings.toArray(new MetaValue[newBindings.size()]));
+				}
+				else {
+					modifiedElements.add(mv);
+				}
+			}
+			
+			try {
+				getView().updateComponent(mc);
+			} catch (Exception e) {
+				throw new AdminComponentException(e.getMessage(), e);
+			}
+		}
+		
+		throw new AdminProcessingException("VDB with name = "+vdbName + " version = "+ vdbVersion + " not found in configuration");
+	}	
+
 }

Modified: branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/adminapi/jboss/ManagedUtil.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -30,6 +30,7 @@
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import org.jboss.deployers.spi.management.deploy.DeploymentManager;
 import org.jboss.deployers.spi.management.deploy.DeploymentProgress;
@@ -37,12 +38,14 @@
 import org.jboss.managed.api.ManagedComponent;
 import org.jboss.managed.api.ManagedOperation;
 import org.jboss.managed.api.ManagedProperty;
+import org.jboss.metatype.api.types.MapCompositeMetaType;
 import org.jboss.metatype.api.types.MetaType;
 import org.jboss.metatype.api.types.SimpleMetaType;
 import org.jboss.metatype.api.values.CollectionValue;
 import org.jboss.metatype.api.values.EnumValue;
 import org.jboss.metatype.api.values.MapCompositeValueSupport;
 import org.jboss.metatype.api.values.MetaValue;
+import org.jboss.metatype.api.values.PropertiesMetaValue;
 import org.jboss.metatype.api.values.SimpleValue;
 import org.jboss.metatype.api.values.SimpleValueSupport;
 import org.jboss.profileservice.spi.DeploymentOption;
@@ -115,6 +118,28 @@
 		 return null;
 	}	
 	
+	public static Properties getPropertiesValue(ManagedComponent mc, String prop) {
+		 ManagedProperty mp = mc.getProperty(prop);
+		 if (mp != null) {
+			 MetaType metaType = mp.getMetaType();
+			 if (metaType.isProperties()) {
+				 return (PropertiesMetaValue)mp.getValue();
+			 }
+			 else if (metaType.isComposite()) {
+				Properties props = new Properties();
+				MapCompositeValueSupport map = (MapCompositeValueSupport) mp.getValue();
+				MapCompositeMetaType type = map.getMetaType();
+				for (String key : type.keySet()) {
+					MetaValue value = map.get(key);
+					props.setProperty(key, stringValue(value));
+				}
+				return props;
+			 }
+			 throw new IllegalStateException(prop+ " is not a properties type");
+		 }
+		 return null;
+	}	
+	
 	public static <T> void getCollectionValue(ManagedComponent mc, String prop, Collection<T> list, Class<T> expectedType) {
 		 ManagedProperty mp = mc.getProperty(prop);
 		 if (mp != null) {

Added: branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
===================================================================
--- branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java	                        (rev 0)
+++ branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -0,0 +1,62 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * See the COPYRIGHT.txt file distributed with this work for information
+ * regarding copyright ownership.  Some portions may be licensed
+ * to Red Hat, Inc. under one or more contributor license agreements.
+ * 
+ * This library 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 library 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 library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA.
+ */
+package org.teiid.jboss.deployers;
+
+import org.jboss.managed.api.ManagedObject;
+import org.jboss.system.server.profileservice.persistence.PersistenceFactory;
+import org.jboss.system.server.profileservice.persistence.component.AbstractComponentMapper;
+import org.jboss.system.server.profileservice.persistence.xml.PersistedComponent;
+import org.teiid.adminapi.impl.VDBMetaData;
+
+public class VDBMetadataComponentMapper extends AbstractComponentMapper {
+
+	public VDBMetadataComponentMapper(PersistenceFactory persistenceFactory) {
+		super(persistenceFactory);
+	}
+
+	@Override
+	protected ManagedObject getComponent(Object attachment, PersistedComponent component, boolean create) {
+		VDBMetaData metadata = (VDBMetaData)attachment;
+		String vdbName = metadata.getName()+"_"+metadata.getVersion();
+		if (vdbName.equals(component.getOriginalName())) {
+			return getMOF().initManagedObject(metadata, VDBMetaData.class, vdbName, vdbName);
+		}
+		throw new IllegalStateException("could not find deployment " + component.getOriginalName());
+	}
+
+	@Override
+	protected void removeComponent(Object attachment,PersistedComponent component) {
+		//TODO: What needs to be done here?
+	}
+
+	@Override
+	protected void setComponentName(PersistedComponent component, ManagedObject mo) {
+		VDBMetaData metadata = (VDBMetaData)mo.getAttachment();
+		component.setName(metadata.getName()+"_"+metadata.getVersion());
+	}
+
+	@Override
+	public String getType() {
+		return VDBMetaData.class.getName();
+	}
+
+}


Property changes on: branches/JCA/jboss-integration/src/main/java/org/teiid/jboss/deployers/VDBMetadataComponentMapper.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: branches/JCA/jboss-integration/src/test/resources/TransactionsRevisited.vdb
===================================================================
(Binary files differ)

Modified: branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java
===================================================================
--- branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/runtime/src/main/java/org/teiid/deployers/DynamicVDBDeployer.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -77,7 +77,7 @@
 	}
 	
     private MetadataStore buildDynamicMetadataStore(VFSDeploymentUnit unit, VDBMetaData vdb, ModelMetaData model) throws DeploymentException{
-    	if (model.getConnectorBindingNames().isEmpty()) {
+    	if (vdb.getConnectorBindingNames(model.getConnectorReference()).isEmpty()) {
     		throw new DeploymentException(vdb.getName()+"-"+vdb.getVersion()+" Can not be deployed because model {"+model.getName()+"} is not fully configured.");
     	}
     	
@@ -98,7 +98,7 @@
     	
     	
     	Exception exception = null;
-    	for (String connectorName: model.getConnectorBindingNames()) {
+    	for (String connectorName: vdb.getConnectorBindingNames(model.getConnectorReference())) {
     		ConnectorManager cm = this.connectorManagerRepository.getConnectorManager(connectorName);
     		if (cm == null) {
     			continue;

Modified: branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java
===================================================================
--- branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java	2010-02-28 02:38:06 UTC (rev 1881)
+++ branches/JCA/runtime/src/main/java/org/teiid/deployers/VDBDeployer.java	2010-03-01 20:45:58 UTC (rev 1882)
@@ -22,6 +22,7 @@
 package org.teiid.deployers;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -111,9 +112,16 @@
 	public boolean isFullyConfiguredVDB(VDBMetaData vdb) {
     	for(ModelMetaData m: vdb.getModels()) {
     		if (m.isSource()) {
-    			if (m.getConnectorBindingNames().isEmpty()) {    				
+    			String connectorReference = m.getConnectorReference();
+    			if (connectorReference == null) {
+    				log.warn("VDB = "+vdb.getName() +" Model = "+m.getName()+"; No Connector Reference defined");
+    			}
+    			
+    			List<String> resourceNames = vdb.getConnectorBindingNames(connectorReference);
+    			if (resourceNames.isEmpty()) {
     				return false;
     			}
+    			log.warn("VDB = "+vdb.getName() +" Model = "+m.getName()+"; No Connector Bindings are mapped for Connector Reference = "+connectorReference);
     		}
     	}
         return true;



More information about the teiid-commits mailing list