Add support for OpenStack V3 Identity Service

replaced ServiceCatalog with a factory to select correct version
ServiceCatalogV2 contains code previously found in ServiceCatalog
add ServiceCatalogV3 implementation of V3 connector

Issue-ID: APPC-259
Change-Id: Iba7d98cfc9e50914b8063be0b35494a9d0fea793
Signed-off-by: RY303T <RY303T@att.com>
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/AppcProviderAdapterActivator.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/AppcProviderAdapterActivator.java
index 75dadae..f17584e 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/AppcProviderAdapterActivator.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/AppcProviderAdapterActivator.java
@@ -32,7 +32,6 @@
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
-
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -83,12 +82,10 @@
      * This method must complete and return to its caller in a timely manner.
      * </p>
      * 
-     * @param context
-     *            The execution context of the bundle being started.
-     * @throws java.lang.Exception
-     *             If this method throws an exception, this bundle is marked as stopped and the Framework will remove
-     *             this bundle's listeners, unregister all services registered by this bundle, and release all services
-     *             used by this bundle.
+     * @param context The execution context of the bundle being started.
+     * @throws java.lang.Exception If this method throws an exception, this bundle is marked as stopped and the
+     *         Framework will remove this bundle's listeners, unregister all services registered by this bundle, and
+     *         release all services used by this bundle.
      * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
      */
     @Override
@@ -100,14 +97,14 @@
         logger.info(Msg.COMPONENT_INITIALIZING, appName, "IAAS adapter");
         try {
             adapter = new ProviderAdapterImpl(configuration.getProperties());
-        } catch(Exception e){
-            logger.error("Error initializing APPC IAAS ProviderAdapterImpl",e);
+        } catch (Exception e) {
+            logger.error("Error initializing APPC IAAS ProviderAdapterImpl", e);
             throw e;
         }
-         
+
         if (registration == null) {
             logger.info(Msg.REGISTERING_SERVICE, appName, adapter.getAdapterName(),
-                ProviderAdapter.class.getSimpleName());
+                    ProviderAdapter.class.getSimpleName());
             registration = context.registerService(ProviderAdapter.class, adapter, null);
         }
 
@@ -123,12 +120,10 @@
      * This method must complete and return to its caller in a timely manner.
      * </p>
      * 
-     * @param context
-     *            The execution context of the bundle being stopped.
-     * @throws java.lang.Exception
-     *             If this method throws an exception, the bundle is still marked as stopped, and the Framework will
-     *             remove the bundle's listeners, unregister all services registered by the bundle, and release all
-     *             services used by the bundle. *
+     * @param context The execution context of the bundle being stopped.
+     * @throws java.lang.Exception If this method throws an exception, the bundle is still marked as stopped, and the
+     *         Framework will remove the bundle's listeners, unregister all services registered by the bundle, and
+     *         release all services used by the bundle. *
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
      */
     @Override
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/ProviderAdapter.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/ProviderAdapter.java
index 5135243..06a190c 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/ProviderAdapter.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/ProviderAdapter.java
@@ -25,7 +25,6 @@
 package org.openecomp.appc.adapter.iaas;
 
 import java.util.Map;
-
 import org.openecomp.appc.exceptions.APPCException;
 import org.openecomp.appc.exceptions.UnknownProviderException;
 import com.att.cdp.zones.model.Image;
@@ -68,17 +67,17 @@
      * The fully-qualified URL of the instance to be manipulated as it is known to the provider.
      */
     static final String PROPERTY_IDENTITY_URL = "org.openecomp.appc.identity.url";
-    
+
     /**
      * The Rebuild VM flag is an optional payload parameter for the Evacuate API.
      */
     static final String PROPERTY_REBUILD_VM = "org.openecomp.appc.rebuildvm";
-    
+
     /**
      * The target host id is an optional payload parameter for the Evacuate API.
      */
     static final String PROPERTY_TARGETHOST_ID = "org.openecomp.appc.targethost.id";
-    
+
     /**
      * heat stack id to perform operation on stack
      */
@@ -89,7 +88,7 @@
     static final String PROPERTY_INPUT_SNAPSHOT_ID = "org.openecomp.appc.snapshot.id";
 
     static final String DG_OUTPUT_PARAM_NAMESPACE = "output.";
-    
+
     static final String SKIP_HYPERVISOR_CHECK = "org.openecomp.appc.skiphypervisorcheck";
 
     /**
@@ -109,16 +108,13 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being restarted. The returned server object can be
      *         inspected for the final state of the server once the restart has been completed. The method does not
      *         return until the restart has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be restarted for some reason
+     * @throws APPCException If the server cannot be restarted for some reason
      */
     Server restartServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
@@ -139,16 +135,13 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being stopped. The returned server object can be
      *         inspected for the final state of the server once the stop has been completed. The method does not return
      *         until the stop has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be stopped for some reason
+     * @throws APPCException If the server cannot be stopped for some reason
      */
     Server stopServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
@@ -169,16 +162,13 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being started. The returned server object can be
      *         inspected for the final state of the server once the start has been completed. The method does not return
      *         until the start has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be started for some reason
+     * @throws APPCException If the server cannot be started for some reason
      */
     Server startServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
@@ -199,16 +189,13 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being rebuilt. The returned server object can be
      *         inspected for the final state of the server once the rebuild has been completed. The method does not
      *         return until the rebuild has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be rebuilt for some reason
+     * @throws APPCException If the server cannot be rebuilt for some reason
      */
     Server rebuildServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
@@ -229,16 +216,13 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being rebuilt. The returned server object can be
      *         inspected for the final state of the server once the rebuild has been completed. The method does not
      *         return until the rebuild has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be terminate for some reason
+     * @throws APPCException If the server cannot be terminate for some reason
      */
     Server terminateServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
@@ -278,32 +262,26 @@
      * </dl>
      * </p>
      *
-     * @param properties
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param context
-     *            The service logic context of the graph being executed.
+     * @param properties A map of name-value pairs that supply the parameters needed by this method. The properties
+     *        needed are defined above.
+     * @param context The service logic context of the graph being executed.
      * @return The <code>Server</code> object that represents the VM being rebuilt. The returned server object can be
      *         inspected for the final state of the server once the rebuild has been completed. The method does not
      *         return until the rebuild has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be found for some reason
+     * @throws APPCException If the server cannot be found for some reason
      */
     Server lookupServer(Map<String, String> properties, SvcLogicContext context) throws APPCException;
 
     /**
      * The
      *
-     * @param params
-     *            A map of name-value pairs that supply the parameters needed by this method. The properties needed are
-     *            defined above.
-     * @param ctx
-     *            The service logic context of the graph being executed.
+     * @param params A map of name-value pairs that supply the parameters needed by this method. The properties needed
+     *        are defined above.
+     * @param ctx The service logic context of the graph being executed.
      * @return The <code>Image</code> object that represents the VM being restarted. The returned server object can be
      *         inspected for the final state of the server once the restart has been completed. The method does not
      *         return until the restart has either completed or has failed.
-     * @throws APPCException
-     *             If the server cannot be restarted for some reason
+     * @throws APPCException If the server cannot be restarted for some reason
      */
     Image createSnapshot(Map<String, String> params, SvcLogicContext ctx) throws APPCException;
 
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/IdentityURL.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/IdentityURL.java
index 327191a..038b8de 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/IdentityURL.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/IdentityURL.java
@@ -75,15 +75,14 @@
      * This static method is used to parse the provided server URL string and return a parse results object (VMURL)
      * which represents the state of the parse.
      * 
-     * @param serverUrl
-     *            The server URL to be parsed
+     * @param serverUrl The server URL to be parsed
      * @return The VMURL parse results object, or null if the URL was not valid or null.
      */
-    public static IdentityURL parseURL(String serverUrl) {
+    public static IdentityURL parseURL(String identUrl) {
         IdentityURL obj = null;
-        if (serverUrl != null) {
-            Matcher matcher = pattern.matcher(serverUrl.trim());
-            if (matcher.matches()) {
+        if (identUrl != null) {
+            Matcher matcher = pattern.matcher(identUrl.trim()); // http://msb.onap.org:80/api/multicloud/v0/cloudowner_region/identity/v3
+            if (matcher.matches()) { // (\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?(/.*)?/(v[0-9\\.]+)/?"
                 obj = new IdentityURL();
                 obj.scheme = matcher.group(1);
                 obj.host = matcher.group(2);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderAdapterImpl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderAdapterImpl.java
index 37ff3d7..95e8e27 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderAdapterImpl.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderAdapterImpl.java
@@ -43,7 +43,6 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -58,6 +57,10 @@
  */
 @SuppressWarnings("javadoc")
 public class ProviderAdapterImpl implements ProviderAdapter {
+    /**
+     * The default domain name for authentication
+     */
+    public static final String DEFAULT_DOMAIN_NAME = "Default";
 
     /**
      * The logger to be used
@@ -79,10 +82,11 @@
     private Map<String /* provider name */, ProviderCache> providerCache;
 
     /**
-     * The username and password to use for dynamically created connections
+     * The username, password, and domain to use for dynamically created connections
      */
     private static String DEFAULT_USER;
     private static String DEFAULT_PASS;
+    private static String DEFAULT_DOMAIN;
 
 
     /**
@@ -98,8 +102,7 @@
      * This constructor is used primarily in the test cases to bypass initialization of the adapter for isolated,
      * disconnected testing
      *
-     * @param initialize
-     *            True if the adapter is to be initialized, can false if not
+     * @param initialize True if the adapter is to be initialized, can false if not
      */
     @SuppressWarnings("all")
     public ProviderAdapterImpl(boolean initialize) {
@@ -110,8 +113,7 @@
     }
 
     /**
-     * @param props
-     *            not used
+     * @param props not used
      */
     public ProviderAdapterImpl(@SuppressWarnings("unused") Properties props) {
         initialize();
@@ -125,6 +127,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -135,6 +138,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -145,6 +149,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -155,6 +160,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -165,6 +171,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -175,6 +182,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         // pass this object's reference to EvacuateServer to allow rebuild after evacuate
         ((EvacuateServer) op).setProvideAdapterRef(this);
         return (Server) op.doOperation(params, context);
@@ -187,6 +195,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -197,6 +206,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -207,6 +217,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Stack) op.doOperation(params, context);
     }
 
@@ -217,6 +228,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Stack) op.doOperation(params, context);
     }
 
@@ -227,6 +239,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Stack) op.doOperation(params, context);
     }
 
@@ -237,6 +250,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Server) op.doOperation(params, context);
     }
 
@@ -247,6 +261,7 @@
         op.setProviderCache(this.providerCache);
         op.setDefaultPass(DEFAULT_PASS);
         op.setDefaultUser(DEFAULT_USER);
+        op.setDefaultDomain(DEFAULT_DOMAIN);
         return (Image) op.doOperation(params, context);
     }
 
@@ -273,27 +288,15 @@
          * property set, where the names form a hierarchical name space (dotted notation, such as one.two.three). Each
          * name in the name space can also be serialized by appending a sequence number. All nodes at the same level
          * with the same serial number are grouped together in the namespace hierarchy. This allows a hierarchical
-         * multi-valued property to be defined, which can then be used to setup the provider and tenant caches.
-         * <p>
-         * For example, the following definitions show how the namespace hierarchy is defined for two providers, with
-         * two tenants on the first provider and a single tenant for the second provider. <pre>
-         * provider1.type=OpenStackProvider
-         * provider1.name=ILAB
-         * provider1.identity=http://provider1:5000/v2.0
-         * provider1.tenant1.name=CDP-ONAP-APPC
-         * provider1.tenant1.userid=testUser
-         * provider1.tenant1.password=testPassword
-         * provider1.tenant2.name=TEST-TENANT
-         * provider1.tenant2.userid=testUser
-         * provider1.tenant2.password=testPassword
-         * provider2.type=OpenStackProvider
-         * provider2.name=PDK1
-         * provider2.identity=http://provider2:5000/v2.0
-         * provider2.tenant1.name=someName
-         * provider2.tenant1.userid=someUser
-         * provider2.tenant1.password=somePassword
-         * </pre>
-         * </p>
+         * multi-valued property to be defined, which can then be used to setup the provider and tenant caches. <p> For
+         * example, the following definitions show how the namespace hierarchy is defined for two providers, with two
+         * tenants on the first provider and a single tenant for the second provider. <pre>
+         * provider1.type=OpenStackProvider provider1.name=ILAB provider1.identity=http://provider1:5000/v2.0
+         * provider1.tenant1.name=CDP-ONAP-APPC provider1.tenant1.userid=testUser
+         * provider1.tenant1.password=testPassword provider1.tenant2.name=TEST-TENANT provider1.tenant2.userid=testUser
+         * provider1.tenant2.password=testPassword provider2.type=OpenStackProvider provider2.name=PDK1
+         * provider2.identity=http://provider2:5000/v2.0 provider2.tenant1.name=someName
+         * provider2.tenant1.userid=someUser provider2.tenant1.password=somePassword </pre> </p>
          */
         providerCache = new HashMap<>();
         Properties properties = configuration.getProperties();
@@ -312,6 +315,8 @@
                     String tenantName = null;
                     String userId = null;
                     String password = null;
+                    // domain is not required so set a default
+                    String domain = DEFAULT_DOMAIN_NAME;
                     for (Node node2 : node.getChildren()) {
                         switch (node2.getName()) {
                             case Property.PROVIDER_TENANT_NAME:
@@ -325,10 +330,14 @@
                                 password = node2.getValue();
                                 DEFAULT_PASS = node2.getValue();
                                 break;
+                            case Property.PROVIDER_TENANT_DOMAIN:
+                                domain = node2.getValue();
+                                DEFAULT_DOMAIN = node2.getValue();
+                                break;
                         }
                     }
-                    
-                    cache.addTenant(null, tenantName, userId, password);
+
+                    cache.addTenant(null, tenantName, userId, password, domain);
                 }
             }
 
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderCache.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderCache.java
index ffbdaf0..bbf85a7 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderCache.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ProviderCache.java
@@ -72,14 +72,13 @@
      * discover all of the regions supported on the provider, and load all of the service catalogs for each provider.
      */
     public void initialize() {
-        for (Map.Entry<String, TenantCache> entry: tenants.entrySet()) { 
-            entry.getValue().initialize(); 
+        for (Map.Entry<String, TenantCache> entry : tenants.entrySet()) {
+            entry.getValue().initialize();
         }
     }
 
     /**
-     * @param providerType
-     *            the value for providerType
+     * @param providerType the value for providerType
      */
     public void setProviderType(String providerType) {
         this.providerType = providerType;
@@ -93,8 +92,7 @@
     }
 
     /**
-     * @param identityURL
-     *            the value for identityURL
+     * @param identityURL the value for identityURL
      */
     public void setIdentityURL(String identityURL) {
         this.identityURL = identityURL;
@@ -108,8 +106,7 @@
     }
 
     /**
-     * @param providerName
-     *            the value for providerName
+     * @param providerName the value for providerName
      */
     public void setProviderName(String providerName) {
         this.providerName = providerName;
@@ -121,42 +118,43 @@
     public Map<String, TenantCache> getTenants() {
         return tenants;
     }
-    
+
     /**
      * This method is a helper to return a specific TenantCache
      * 
-        * @param tenantId
-        * @return
+     * @param tenantId
+     * @return
      */
-    public TenantCache getTenant(String tenantId){        
-        return tenants.get(tenantId);       
+    public TenantCache getTenant(String tenantId) {
+        return tenants.get(tenantId);
     }
-    
+
     // Previously there was no way to add additional tenants to the tenant cache
     /**
      * This method is used to add a tenant to the provider cache
      * 
-        * @param tenantId
-        * @param UserId
-        * @param password
-        * @return the new initialized TenantCache or null if unsuccessful
-        */
-    public TenantCache addTenant(String tenantId, String tenantName, String userId, String password){
-        if(tenantId != null || tenantName != null && userId != null && password != null){        
+     * @param tenantId
+     * @param UserId
+     * @param password
+     * @return the new initialized TenantCache or null if unsuccessful
+     */
+    public TenantCache addTenant(String tenantId, String tenantName, String userId, String password, String domain) {
+        if (tenantId != null || tenantName != null && userId != null && password != null) {
             TenantCache tenant = new TenantCache(this);
-            if(tenantId != null){
+            if (tenantId != null) {
                 tenant.setTenantId(tenantId);
             }
-            if(tenantName != null){
+            if (tenantName != null) {
                 tenant.setTenantName(tenantName);
             }
             tenant.setUserid(userId);
             tenant.setPassword(password);
-            
-            if(identityURL != null){
+            tenant.setDomain(domain);
+
+            if (identityURL != null) {
                 tenant.initialize();
             }
-            
+
             if (tenant.isInitialized()) {
                 tenants.put(tenant.getTenantId(), tenant);
                 return tenant;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestContext.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestContext.java
index f96002f..cec0926 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestContext.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestContext.java
@@ -91,8 +91,7 @@
     /**
      * Creates the request context
      * 
-     * @param context
-     *            The service logic (SLI) context associated with the current DG
+     * @param context The service logic (SLI) context associated with the current DG
      */
     public RequestContext(SvcLogicContext context) {
         setSvcLogicContext(context);
@@ -219,8 +218,7 @@
     /**
      * Sets the time to live to the value, expressed in seconds
      * 
-     * @param time
-     *            The time to live, in seconds
+     * @param time The time to live, in seconds
      */
     public void setTimeToLiveSeconds(int time) {
         setTimeToLiveMS(time * 1000L);
@@ -229,8 +227,7 @@
     /**
      * Sets the time to live to the value, expressed in milliseconds
      * 
-     * @param time
-     *            The time to live, in milliseconds
+     * @param time The time to live, in milliseconds
      */
     public void setTimeToLiveMS(long time) {
         this.timeToLive = time;
@@ -244,8 +241,7 @@
     }
 
     /**
-     * @param svcLogicContext
-     *            The service logic context to be associated with this request
+     * @param svcLogicContext The service logic context to be associated with this request
      */
     public void setSvcLogicContext(SvcLogicContext svcLogicContext) {
         this.svcLogicContext = svcLogicContext;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestFailedException.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestFailedException.java
index 32ff302..614f4bb 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestFailedException.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/RequestFailedException.java
@@ -81,8 +81,7 @@
     }
 
     /**
-     * @param message
-     *            The error message
+     * @param message The error message
      */
     public RequestFailedException(String message) {
         super(message);
@@ -92,14 +91,10 @@
      * Construct the request failed exception with the operation being performed, reason for the failure, http status
      * code that is most appropriate, and the server we were processing.
      * 
-     * @param operation
-     *            The operation being performed
-     * @param reason
-     *            The reason that the operation was failed
-     * @param status
-     *            The http status code that is most appropriate
-     * @param server
-     *            The server that we were processing
+     * @param operation The operation being performed
+     * @param reason The reason that the operation was failed
+     * @param status The http status code that is most appropriate
+     * @param server The server that we were processing
      */
     @SuppressWarnings("nls")
     public RequestFailedException(String operation, String reason, HttpStatus status, Server server) {
@@ -118,14 +113,10 @@
      * Construct the request failed exception with the operation being performed, reason for the failure, http status
      * code that is most appropriate, and the stack we were processing.
      *
-     * @param operation
-     *            The operation being performed
-     * @param reason
-     *            The reason that the operation was failed
-     * @param status
-     *            The http status code that is most appropriate
-     * @param stack
-     *            The stack that we were processing
+     * @param operation The operation being performed
+     * @param reason The reason that the operation was failed
+     * @param status The http status code that is most appropriate
+     * @param stack The stack that we were processing
      */
     @SuppressWarnings("nls")
     public RequestFailedException(String operation, String reason, HttpStatus status, Stack stack) {
@@ -143,16 +134,11 @@
      * Construct the request failed exception with the operation being performed, reason for the failure, http status
      * code that is most appropriate, and the server we were processing.
      * 
-     * @param ex
-     *            The exception that we are wrapping
-     * @param operation
-     *            The operation being performed
-     * @param reason
-     *            The reason that the operation was failed
-     * @param status
-     *            The http status code that is most appropriate
-     * @param server
-     *            The server that we were processing
+     * @param ex The exception that we are wrapping
+     * @param operation The operation being performed
+     * @param reason The reason that the operation was failed
+     * @param status The http status code that is most appropriate
+     * @param server The server that we were processing
      */
     @SuppressWarnings("nls")
     public RequestFailedException(Throwable ex, String operation, String reason, HttpStatus status, Server server) {
@@ -167,33 +153,27 @@
     }
 
     /**
-     * @param message
-     *            The error message
-     * @param cause
-     *            A nested exception
+     * @param message The error message
+     * @param cause A nested exception
      */
     public RequestFailedException(String message, Throwable cause) {
         super(message, cause);
     }
 
     /**
-     * @param message
-     *            The error message
-     * @param cause
-     *            A nested exception
-     * @param enableSuppression
-     *            whether or not suppression is enabled or disabled
-     * @param writableStackTrace
-     *            whether or not the stack trace should be writable
+     * @param message The error message
+     * @param cause A nested exception
+     * @param enableSuppression whether or not suppression is enabled or disabled
+     * @param writableStackTrace whether or not the stack trace should be writable
      */
-    public RequestFailedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+    public RequestFailedException(String message, Throwable cause, boolean enableSuppression,
+            boolean writableStackTrace) {
         super(message, cause, enableSuppression, writableStackTrace);
     }
 
     /**
-     * @param cause
-     *            the cause (which is saved for later retrieval by the {@link #getCause()} method). (A null value is
-     *            permitted, and indicates that the cause is nonexistent or unknown.)
+     * @param cause the cause (which is saved for later retrieval by the {@link #getCause()} method). (A null value is
+     *        permitted, and indicates that the cause is nonexistent or unknown.)
      */
     public RequestFailedException(Throwable cause) {
         super(cause);
@@ -235,24 +215,21 @@
     }
 
     /**
-     * @param operation
-     *            The operation being performed
+     * @param operation The operation being performed
      */
     public void setOperation(String operation) {
         this.operation = operation;
     }
 
     /**
-     * @param reason
-     *            The reason for the failure
+     * @param reason The reason for the failure
      */
     public void setReason(String reason) {
         this.reason = reason;
     }
 
     /**
-     * @param server
-     *            The server being operated upon
+     * @param server The server being operated upon
      */
     public void setServer(Server server) {
         this.server = server;
@@ -262,16 +239,14 @@
     }
 
     /**
-     * @param serverId
-     *            The id of the server being operated upon
+     * @param serverId The id of the server being operated upon
      */
     public void setServerId(String serverId) {
         this.serverId = serverId;
     }
 
     /**
-     * @param status
-     *            The status of the request
+     * @param status The status of the request
      */
     public void setStatus(HttpStatus status) {
         this.status = status;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalog.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalog.java
index 702542d..917d6f4 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalog.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalog.java
@@ -38,7 +38,6 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
-
 import com.att.cdp.exceptions.ContextConnectionException;
 import com.att.cdp.exceptions.ZoneException;
 import com.att.cdp.openstack.util.ExceptionMapper;
@@ -46,8 +45,9 @@
 import com.att.cdp.zones.ContextFactory;
 import com.att.cdp.zones.spi.AbstractService;
 import com.att.cdp.zones.spi.RequestState;
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
 import com.att.cdp.zones.spi.AbstractService.State;
-
 import com.woorea.openstack.base.client.OpenStackBaseException;
 import com.woorea.openstack.base.client.OpenStackClientConnector;
 import com.woorea.openstack.base.client.OpenStackResponseException;
@@ -87,7 +87,11 @@
  * caching the full service catalog since there is no way to list only a portion of it.
  * </p>
  */
-public class ServiceCatalog {
+public abstract class ServiceCatalog {
+    /**
+     * The openstack connector version to use
+     */
+    public static final String CLIENT_CONNECTOR_CLASS = "com.woorea.openstack.connector.JaxRs20Connector";
 
     /**
      * The service name for the compute service endpoint
@@ -95,6 +99,10 @@
     public static final String COMPUTE_SERVICE = "compute"; //$NON-NLS-1$
 
     /**
+     * The default domain for authentication
+     */
+    public static final String DEFAULT_DOMAIN = "Default";
+    /**
      * The service name for the identity service endpoint
      */
     public static final String IDENTITY_SERVICE = "identity"; //$NON-NLS-1$
@@ -105,11 +113,21 @@
     public static final String IMAGE_SERVICE = "image"; //$NON-NLS-1$
 
     /**
+     * The service name for the metering service endpoint
+     */
+    public static final String METERING_SERVICE = "metering"; //$NON-NLS-1$
+
+    /**
      * The service name for the network service endpoint
      */
     public static final String NETWORK_SERVICE = "network"; //$NON-NLS-1$
 
     /**
+     * The service name for the persistent object service endpoint
+     */
+    public static final String OBJECT_SERVICE = "object-store"; //$NON-NLS-1$
+
+    /**
      * The service name for the orchestration service endpoint
      */
     public static final String ORCHESTRATION_SERVICE = "orchestration"; //$NON-NLS-1$
@@ -120,176 +138,98 @@
     public static final String VOLUME_SERVICE = "volume"; //$NON-NLS-1$
 
     /**
-     * The service name for the persistent object service endpoint
+     * The logger to be used
      */
-    public static final String OBJECT_SERVICE = "object-store"; //$NON-NLS-1$
+    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(ServiceCatalog.class);
 
     /**
-     * The service name for the metering service endpoint
+     * The password for authentication
      */
-    public static final String METERING_SERVICE = "metering"; //$NON-NLS-1$
+    protected String credential;
 
     /**
-     * The Openstack Access object that manages the authenticated token and access control
+     * The domain for authentication
      */
-    private Access access;
-
+    protected String domain;
     /**
      * The time (local) that the token expires and we need to re-authenticate
      */
-    @SuppressWarnings("unused")
-    private long expiresLocal;
+    protected long expiresLocal;
+
+    /**
+     * The url of the identity service
+     */
+    protected String identityURL;
+
+    /**
+     * The user id for authentication
+     */
+    protected String principal;
+
+    /**
+     * The project or tenant identifier
+     */
+    protected String projectIdentifier;
+
+    /**
+     * Properties for proxy information
+     */
+    protected Properties properties;
 
     /**
      * The set of all regions that have been defined
      */
-    private Set<String> regions;
+    protected Set<String> regions;
 
     /**
      * The read/write lock used to protect the cache contents
      */
-    private ReadWriteLock rwLock;
+    protected ReadWriteLock rwLock;
 
     /**
-     * A map of endpoints for each service organized by service type
-     */
-    private Map<String /* Service Type */, List<Service.Endpoint>> serviceEndpoints;
-
-    /**
-     * A map of service types that are published
-     */
-    private Map<String /* Service Type */, Service> serviceTypes;
-
-    /**
-     * The tenant that we are accessing
-     */
-    private Tenant tenant;
-
-    /**
-     * A "token provider" that manages the authentication token that we obtain when logging in
-     */
-    private OpenStackSimpleTokenProvider tokenProvider;
-
-    public static final String CLIENT_CONNECTOR_CLASS = "com.woorea.openstack.connector.JaxRs20Connector";
-
-    /**
-     * Create the ServiceCatalog cache and load it from the specified provider
+     * Create the ServiceCatalog cache
      * 
-     * @param identityURL
-     *            The identity service URL to connect to
-     * @param tenantIdentifier
-     *            The name or id of the tenant to authenticate with. If the ID is a UUID format (32-character
-     *            hexadecimal string), then the authentication is done using the tenant ID, otherwise it is done using
-     *            the name.
-     * @param principal
-     *            The user id to authenticate to the provider
-     * @param credential
-     *            The password to authenticate to the provider
-     * @param properties
-     *            Additional properties used to configure the connection, such as proxy and trusted hosts lists
+     * @param identityURL The identity service URL to connect to
+     * @param tenantIdentifier The name or id of the tenant to authenticate with. If the ID is a UUID format
+     *        (32-character hexadecimal string), then the authentication is done using the tenant ID, otherwise it is
+     *        done using the name.
+     * @param principal The user id to authenticate to the provider
+     * @param credential The password to authenticate to the provider
+     * @param properties Additional properties used to configure the connection, such as proxy and trusted hosts lists
      * @throws ZoneException
      * @throws ClassNotFoundException
      * @throws IllegalAccessException
      * @throws InstantiationException
      */
-    public ServiceCatalog(String identityURL, String tenantIdentifier, String principal, String credential,
-                          Properties properties) throws ZoneException {
+    public ServiceCatalog(String identityURL, String projectIdentifier, String principal, String credential,
+            String domain, Properties properties) {
+        this.identityURL = identityURL;
+        this.projectIdentifier = projectIdentifier;
+        this.principal = principal;
+        this.credential = credential;
+        this.domain = domain;
+        this.properties = properties;
         rwLock = new ReentrantReadWriteLock();
-        serviceTypes = new HashMap<>();
-        serviceEndpoints = new HashMap<>();
         regions = new HashSet<>();
-
-        Class<?> connectorClass;
-        OpenStackClientConnector connector;
-        try {
-            connectorClass = Class.forName(CLIENT_CONNECTOR_CLASS);
-            connector = (OpenStackClientConnector) connectorClass.newInstance();
-        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
-            e.printStackTrace();
-            return;
-        }
-        Keystone keystone = new Keystone(identityURL, connector);
-
-        String proxyHost = properties.getProperty(ContextFactory.PROPERTY_PROXY_HOST);
-        String proxyPort = properties.getProperty(ContextFactory.PROPERTY_PROXY_PORT);
-        String trustedHosts = properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, ""); //$NON-NLS-1$
-        if (proxyHost != null && proxyHost.length() > 0) {
-            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_HOST, proxyHost);
-            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_PORT, proxyPort);
-        }
-        if (trustedHosts != null) {
-            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.TRUST_HOST_LIST,
-                trustedHosts);
-        }
-
-        Authentication authentication = new UsernamePassword(principal, credential);
-        TokensResource tokens = keystone.tokens();
-        TokensResource.Authenticate authenticate = tokens.authenticate(authentication);
-        if (tenantIdentifier.length() == 32 && tenantIdentifier.matches("[0-9a-fA-F]+")) { //$NON-NLS-1$
-            authenticate = authenticate.withTenantId(tenantIdentifier);
-        } else {
-            authenticate = authenticate.withTenantName(tenantIdentifier);
-        }
-
-        /*
-         * We have to set up the TrackRequest TLS collection for the ExceptionMapper
-         */
-        trackRequest();
-        RequestState.put(RequestState.PROVIDER, "OpenStackProvider");
-        RequestState.put(RequestState.TENANT, tenantIdentifier);
-        RequestState.put(RequestState.PRINCIPAL, principal);
-
-        try {
-            access = authenticate.execute();
-            expiresLocal = getLocalExpiration(access);
-            tenant = access.getToken().getTenant();
-            tokenProvider = new OpenStackSimpleTokenProvider(access.getToken().getId());
-            keystone.setTokenProvider(tokenProvider);
-            parseServiceCatalog(access.getServiceCatalog());
-        } catch (OpenStackBaseException e) {
-            ExceptionMapper.mapException(e);
-        } catch (Exception ex) {
-            throw new ContextConnectionException(ex.getMessage());
-        }
     }
 
     /**
      * Returns the list of service endpoints for the published service type
      * 
-     * @param serviceType
-     *            The service type to obtain the endpoints for
+     * @param serviceType The service type to obtain the endpoints for
      * @return The list of endpoints for the service type, or null if none exist
      */
-    public List<Service.Endpoint> getEndpoints(String serviceType) {
-        Lock readLock = rwLock.readLock();
-        readLock.lock();
-        try {
-            return serviceEndpoints.get(serviceType);
-        } finally {
-            readLock.unlock();
-        }
-    }
+    public abstract List<?> getEndpoints(String serviceType);
 
     /**
-     * Computes the local time when the access token will expire, after which we will need to re-login to access the
-     * provider.
-     * 
-     * @param accessKey
-     *            The access key used to access the provider
-     * @return The local time the key expires
+     * @return The project or tenant id
      */
-    private static long getLocalExpiration(Access accessKey) {
-        Date now = Time.getCurrentUTCDate();
-        if (accessKey != null && accessKey.getToken() != null) {
-            Calendar issued = accessKey.getToken().getIssued_at();
-            Calendar expires = accessKey.getToken().getExpires();
-            if (issued != null && expires != null) {
-                long tokenLife = expires.getTimeInMillis() - issued.getTimeInMillis();
-                return now.getTime() + tokenLife;
-            }
-        }
-        return now.getTime();
-    }
+    public abstract String getProjectId();
+
+    /**
+     * @return The project or tenant name
+     */
+    public abstract String getProjectName();
 
     /**
      * @return The set of all regions that are defined
@@ -307,98 +247,31 @@
     /**
      * @return A list of service types that are published
      */
-    public List<String> getServiceTypes() {
-        Lock readLock = rwLock.readLock();
-        readLock.lock();
-        try {
-            ArrayList<String> result = new ArrayList<>();
-            result.addAll(serviceTypes.keySet());
-            return result;
-        } finally {
-            readLock.unlock();
-        }
-    }
+    public abstract List<String> getServiceTypes();
 
     /**
-     * @return The tenant id
+     * This method accepts a fully qualified compute node URL and uses that to determine which region of the provider
+     * hosts that compute node.
+     *
+     * @param url The parsed URL of the compute node
+     * @return The region name, or null if no region of this tenant hosts that compute node.
      */
-    public String getTenantId() {
-        Lock readLock = rwLock.readLock();
-        readLock.lock();
-        try {
-            return tenant.getId();
-        } finally {
-            readLock.unlock();
-        }
-    }
-
-    /**
-     * @return The tenant name
-     */
-    public String getTenantName() {
-        Lock readLock = rwLock.readLock();
-        readLock.lock();
-        try {
-            return tenant.getName();
-        } finally {
-            readLock.unlock();
-        }
-    }
+    public abstract String getVMRegion(VMURL url);
 
     /**
      * Returns an indication if the specified service type is published by this provider
      * 
-     * @param serviceType
-     *            The service type to check for
+     * @param serviceType The service type to check for
      * @return True if a service of that type is published
      */
-    public boolean isServicePublished(String serviceType) {
-        Lock readLock = rwLock.readLock();
-        readLock.lock();
-        try {
-            return serviceTypes.containsKey(serviceType);
-        } finally {
-            readLock.unlock();
-        }
-    }
+    public abstract boolean isServicePublished(String serviceType);
 
     /**
-     * Parses the service catalog and caches the results
+     * Load the Service Catalog from the specified provider
      * 
-     * @param services
-     *            The list of services published by this provider
+     * @throws ZoneException
      */
-    private void parseServiceCatalog(List<Service> services) {
-        Lock lock = rwLock.writeLock();
-        lock.lock();
-        try {
-            serviceTypes.clear();
-            serviceEndpoints.clear();
-            regions.clear();
-
-            for (Service service : services) {
-                String type = service.getType();
-                serviceTypes.put(type, service);
-
-                List<Service.Endpoint> endpoints = service.getEndpoints();
-                for (Service.Endpoint endpoint : endpoints) {
-                    List<Service.Endpoint> endpointList = serviceEndpoints.get(type);
-                    if (endpointList == null) {
-                        endpointList = new ArrayList<>();
-                        serviceEndpoints.put(type, endpointList);
-                    }
-                    endpointList.add(endpoint);
-
-                    String region = endpoint.getRegion();
-                    if (!regions.contains(region)) {
-                        regions.add(region);
-                    }
-                }
-            }
-        } finally {
-            lock.unlock();
-        }
-    }
+    public abstract void init() throws ZoneException;
 
     /**
      * This method is used to provide a diagnostic listing of the service catalog
@@ -406,38 +279,7 @@
      * @see java.lang.Object#toString()
      */
     @Override
-    public String toString() {
-
-        StringBuilder builder = new StringBuilder();
-        Lock lock = rwLock.readLock();
-        lock.lock();
-        try {
-            builder.append(String.format("Service Catalog: tenant %s, id[%s], description[%s]\n", tenant.getName(), //$NON-NLS-1$
-                tenant.getId(), tenant.getDescription()));
-            if (regions != null && !regions.isEmpty()) {
-                builder.append(String.format("%d regions:\n", regions.size())); //$NON-NLS-1$
-                for (String region : regions) {
-                    builder.append("\t" + region + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-                }
-            }
-            builder.append(String.format("%d services:\n", serviceEndpoints.size())); //$NON-NLS-1$
-            for (String serviceType : serviceEndpoints.keySet()) {
-                List<Endpoint> endpoints = serviceEndpoints.get(serviceType);
-                Service service = serviceTypes.get(serviceType);
-
-                builder.append(String.format("\t%s [%s] - %d endpoints\n", service.getType(), service.getName(), //$NON-NLS-1$
-                    endpoints.size()));
-                for (Endpoint endpoint : endpoints) {
-                    builder.append(String.format("\t\tRegion [%s], public URL [%s]\n", endpoint.getRegion(), //$NON-NLS-1$
-                        endpoint.getPublicURL()));
-                }
-            }
-        } finally {
-            lock.unlock();
-        }
-
-        return builder.toString();
-    }
+    public abstract String toString();
 
     /**
      * Initializes the request state for the current requested service.
@@ -451,9 +293,8 @@
      * up one more call and assumes that method is the request that we are "tracking".
      * </p>
      * 
-     * @param states
-     *            A variable argument list of additional state values that the caller wants to add to the request state
-     *            thread-local object to track the context.
+     * @param states A variable argument list of additional state values that the caller wants to add to the request
+     *        state thread-local object to track the context.
      */
     protected void trackRequest(State... states) {
         RequestState.clear();
@@ -469,7 +310,7 @@
             StackTraceElement element = null;
             for (; index < stack.length; index++) {
                 element = stack[index];
-                if ("trackRequest".equals(element.getMethodName())) {  //$NON-NLS-1$
+                if ("trackRequest".equals(element.getMethodName())) { //$NON-NLS-1$
                     break;
                 }
             }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogFactory.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogFactory.java
new file mode 100644
index 0000000..63d4a31
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogFactory.java
@@ -0,0 +1,57 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import java.util.Properties;

+

+public class ServiceCatalogFactory {

+

+    /**

+     * This method accepts a fully qualified identity service URL and uses that to determine which version of the

+     * serviceCatalog to load.

+     *

+     * @param url The parsed URL of the identity service

+     * @param projectIdentifier The project or tenant to be used to connect to the service

+     * @param principal The principal or user to be used to connect to the service

+     * @param ceredential The credential or password to be used to connect to the service

+     * @param properties Properties object for proxy information

+     * @return The serviceCatalog for identity service version specified in the url, null if not supported.

+     */

+    public static ServiceCatalog getServiceCatalog(String url, String projectIdentifier, String principal,

+            String credential, String domain, Properties properties) {

+        String version = IdentityURL.parseURL(url).getVersion();

+        String prefix = version.split("\\.")[0];

+

+        if (prefix != null) {

+            switch (prefix) {

+                case "v2":

+                    return new ServiceCatalogV2(url, projectIdentifier, principal, credential, properties);

+                case "v3":

+                    return new ServiceCatalogV3(url, projectIdentifier, principal, credential, domain, properties);

+            }

+        }

+        return null;

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV2.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV2.java
new file mode 100644
index 0000000..8890355
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV2.java
@@ -0,0 +1,380 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import com.att.cdp.exceptions.ContextConnectionException;

+import com.att.cdp.exceptions.ZoneException;

+import com.att.cdp.openstack.util.ExceptionMapper;

+import com.att.cdp.pal.util.Time;

+import com.att.cdp.zones.ContextFactory;

+import com.att.cdp.zones.spi.RequestState;

+import com.woorea.openstack.base.client.OpenStackBaseException;

+import com.woorea.openstack.base.client.OpenStackClientConnector;

+import com.woorea.openstack.base.client.OpenStackSimpleTokenProvider;

+import com.woorea.openstack.keystone.Keystone;

+import com.woorea.openstack.keystone.api.TokensResource;

+import com.woorea.openstack.keystone.model.Access;

+import com.woorea.openstack.keystone.model.Access.Service;

+import com.woorea.openstack.keystone.model.Access.Service.Endpoint;

+import com.woorea.openstack.keystone.model.Authentication;

+import com.woorea.openstack.keystone.model.Tenant;

+import com.woorea.openstack.keystone.model.authentication.UsernamePassword;

+import java.util.ArrayList;

+import java.util.Calendar;

+import java.util.Date;

+import java.util.HashMap;

+import java.util.List;

+import java.util.Map;

+import java.util.Properties;

+import java.util.Set;

+import java.util.concurrent.locks.Lock;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+

+/**

+ * This class is used to capture and cache the service catalog for a specific OpenStack provider.

+ * <p>

+ * This is needed because the way the servers are represented in the ECOMP product is as their fully qualified URL's.

+ * This is very problematic, because we cant identify their region from the URL, URL's change, and we cant identify the

+ * versions of the service implementations. In otherwords, the URL does not provide us enough information.

+ * </p>

+ * <p>

+ * The zone abstraction layer is designed to detect the versions of the services dynamically, and step up or down to

+ * match those reported versions. In order to do that, we need to know before hand what region we are accessing (since

+ * the supported versions may be different by regions). We will need to authenticate to the identity service in order to

+ * do this, plus we have to duplicate the code supporting proxies and trusted hosts that exists in the abstraction

+ * layer, but that cant be helped.

+ * </p>

+ * <p>

+ * What we do to circumvent this is connect to the provider using the lowest supported identity api, and read the entire

+ * service catalog into this object. Then, we parse the vm URL to extract the host and port and match that to the

+ * compute services defined in the catalog. When we find a compute service that has the same host name and port,

+ * whatever region that service is supporting is the region for that server.

+ * </p>

+ * <p>

+ * While we really only need to do this for compute nodes, there is no telling what other situations may arise where the

+ * full service catalog may be needed. Also, there is very little additional cost (additional RAM) associated with

+ * caching the full service catalog since there is no way to list only a portion of it.

+ * </p>

+ */

+public class ServiceCatalogV2 extends ServiceCatalog {

+

+    /**

+     * The Openstack Access object that manages the authenticated token and access control

+     */

+    private Access access;

+

+    /**

+     * A map of endpoints for each service organized by service type

+     */

+    private Map<String /* Service Type */, List<Service.Endpoint>> serviceEndpoints;

+

+    /**

+     * A map of service types that are published

+     */

+    private Map<String /* Service Type */, Service> serviceTypes;

+

+    /**

+     * The tenant that we are accessing

+     */

+    private Tenant tenant;

+

+    /**

+     * A "token provider" that manages the authentication token that we obtain when logging in

+     */

+    private OpenStackSimpleTokenProvider tokenProvider;

+

+    public ServiceCatalogV2(String identityURL, String tenantIdentifier, String principal, String credential,

+            Properties properties) {

+        super(identityURL, tenantIdentifier, principal, credential, null, properties);

+    }

+

+    @Override

+    public void init() throws ZoneException {

+        serviceTypes = new HashMap<>();

+        serviceEndpoints = new HashMap<>();

+        Class<?> connectorClass;

+        OpenStackClientConnector connector;

+        try {

+            connectorClass = Class.forName(CLIENT_CONNECTOR_CLASS);

+            connector = (OpenStackClientConnector) connectorClass.newInstance();

+        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {

+            e.printStackTrace();

+            return;

+        }

+        Keystone keystone = new Keystone(identityURL, connector);

+

+        String proxyHost = properties.getProperty(ContextFactory.PROPERTY_PROXY_HOST);

+        String proxyPort = properties.getProperty(ContextFactory.PROPERTY_PROXY_PORT);

+        String trustedHosts = properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, ""); //$NON-NLS-1$

+        if (proxyHost != null && proxyHost.length() > 0) {

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_HOST, proxyHost);

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_PORT, proxyPort);

+        }

+        if (trustedHosts != null) {

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.TRUST_HOST_LIST,

+                    trustedHosts);

+        }

+

+        Authentication authentication = new UsernamePassword(principal, credential);

+        TokensResource tokens = keystone.tokens();

+        TokensResource.Authenticate authenticate = tokens.authenticate(authentication);

+        if (projectIdentifier.length() == 32 && projectIdentifier.matches("[0-9a-fA-F]+")) { //$NON-NLS-1$

+            authenticate = authenticate.withTenantId(projectIdentifier);

+        } else {

+            authenticate = authenticate.withTenantName(projectIdentifier);

+        }

+

+        /*

+         * We have to set up the TrackRequest TLS collection for the ExceptionMapper

+         */

+        trackRequest();

+        RequestState.put(RequestState.PROVIDER, "OpenStackProvider");

+        RequestState.put(RequestState.TENANT, projectIdentifier);

+        RequestState.put(RequestState.PRINCIPAL, principal);

+

+        try {

+            access = authenticate.execute();

+            expiresLocal = getLocalExpiration(access);

+            tenant = access.getToken().getTenant();

+            tokenProvider = new OpenStackSimpleTokenProvider(access.getToken().getId());

+            keystone.setTokenProvider(tokenProvider);

+            parseServiceCatalog(access.getServiceCatalog());

+        } catch (OpenStackBaseException e) {

+            ExceptionMapper.mapException(e);

+        } catch (Exception ex) {

+            throw new ContextConnectionException(ex.getMessage());

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public List<Service.Endpoint> getEndpoints(String serviceType) {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return serviceEndpoints.get(serviceType);

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getProjectId() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return tenant.getId();

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getProjectName() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return tenant.getName();

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public Set<String> getRegions() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return regions;

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public List<String> getServiceTypes() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            ArrayList<String> result = new ArrayList<>();

+            result.addAll(serviceTypes.keySet());

+            return result;

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getVMRegion(VMURL url) {

+        String region = null;

+        Pattern urlPattern = Pattern.compile("[^:]+://([^:/]+)(?::([0-9]+)).*");

+

+        if (url != null) {

+            for (Endpoint endpoint : getEndpoints(ServiceCatalog.COMPUTE_SERVICE)) {

+                String endpointUrl = endpoint.getPublicURL();

+                Matcher matcher = urlPattern.matcher(endpointUrl);

+                if (matcher.matches()) {

+                    if (url.getHost().equals(matcher.group(1))) {

+                        if (url.getPort() != null) {

+                            if (!url.getPort().equals(matcher.group(2))) {

+                                continue;

+                            }

+                        }

+

+                        region = endpoint.getRegion();

+                        break;

+                    }

+                }

+            }

+        }

+        return region;

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public boolean isServicePublished(String serviceType) {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return serviceTypes.containsKey(serviceType);

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String toString() {

+

+        StringBuilder builder = new StringBuilder();

+        Lock lock = rwLock.readLock();

+        lock.lock();

+        try {

+            builder.append(String.format("Service Catalog: tenant %s, id[%s], description[%s]\n", tenant.getName(), //$NON-NLS-1$

+                    tenant.getId(), tenant.getDescription()));

+            if (regions != null && !regions.isEmpty()) {

+                builder.append(String.format("%d regions:\n", regions.size())); //$NON-NLS-1$

+                for (String region : regions) {

+                    builder.append("\t" + region + "\n"); //$NON-NLS-1$ //$NON-NLS-2$

+                }

+            }

+            builder.append(String.format("%d services:\n", serviceEndpoints.size())); //$NON-NLS-1$

+            for (String serviceType : serviceEndpoints.keySet()) {

+                List<Service.Endpoint> endpoints = serviceEndpoints.get(serviceType);

+                Service service = serviceTypes.get(serviceType);

+

+                builder.append(String.format("\t%s [%s] - %d endpoints\n", service.getType(), service.getName(), //$NON-NLS-1$

+                        endpoints.size()));

+                for (Service.Endpoint endpoint : endpoints) {

+                    builder.append(String.format("\t\tRegion [%s], public URL [%s]\n", endpoint.getRegion(), //$NON-NLS-1$

+                            endpoint.getPublicURL()));

+                }

+            }

+        } finally {

+            lock.unlock();

+        }

+

+        return builder.toString();

+    }

+

+    /**

+     * Parses the service catalog and caches the results

+     * 

+     * @param services The list of services published by this provider

+     */

+    private void parseServiceCatalog(List<Service> services) {

+        Lock lock = rwLock.writeLock();

+        lock.lock();

+        try {

+            serviceTypes.clear();

+            serviceEndpoints.clear();

+            regions.clear();

+

+            for (Service service : services) {

+                String type = service.getType();

+                serviceTypes.put(type, service);

+

+                List<Service.Endpoint> endpoints = service.getEndpoints();

+                for (Service.Endpoint endpoint : endpoints) {

+                    List<Service.Endpoint> endpointList = serviceEndpoints.get(type);

+                    if (endpointList == null) {

+                        endpointList = new ArrayList<>();

+                        serviceEndpoints.put(type, endpointList);

+                    }

+                    endpointList.add(endpoint);

+

+                    String region = endpoint.getRegion();

+                    if (!regions.contains(region)) {

+                        regions.add(region);

+                    }

+                }

+            }

+        } finally {

+            lock.unlock();

+        }

+    }

+

+    /**

+     * Computes the local time when the access token will expire, after which we will need to re-login to access the

+     * provider.

+     * 

+     * @param accessKey The access key used to access the provider

+     * @return The local time the key expires

+     */

+    private static long getLocalExpiration(Access accessKey) {

+        Date now = Time.getCurrentUTCDate();

+        if (accessKey != null && accessKey.getToken() != null) {

+            Calendar issued = accessKey.getToken().getIssued_at();

+            Calendar expires = accessKey.getToken().getExpires();

+            if (issued != null && expires != null) {

+                long tokenLife = expires.getTimeInMillis() - issued.getTimeInMillis();

+                return now.getTime() + tokenLife;

+            }

+        }

+        return now.getTime();

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV3.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV3.java
new file mode 100644
index 0000000..9cd6799
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/ServiceCatalogV3.java
@@ -0,0 +1,402 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import com.att.cdp.exceptions.ContextConnectionException;

+import com.att.cdp.exceptions.ZoneException;

+import com.att.cdp.openstack.util.ExceptionMapper;

+import com.att.cdp.pal.util.Time;

+import com.att.cdp.zones.ContextFactory;

+import com.att.cdp.zones.spi.RequestState;

+import com.woorea.openstack.base.client.OpenStackBaseException;

+import com.woorea.openstack.base.client.OpenStackClientConnector;

+import com.woorea.openstack.base.client.OpenStackSimpleTokenProvider;

+import com.woorea.openstack.keystone.v3.Keystone;

+import com.woorea.openstack.keystone.v3.api.TokensResource;

+import com.woorea.openstack.keystone.v3.model.Authentication;

+import com.woorea.openstack.keystone.v3.model.Authentication.Identity;

+import com.woorea.openstack.keystone.v3.model.Authentication.Scope;

+import com.woorea.openstack.keystone.v3.model.Token;

+import com.woorea.openstack.keystone.v3.model.Token.Project;

+import com.woorea.openstack.keystone.v3.model.Token.Service;

+import com.woorea.openstack.keystone.v3.model.Token.Service.Endpoint;

+import java.util.ArrayList;

+import java.util.Calendar;

+import java.util.Date;

+import java.util.HashMap;

+import java.util.HashSet;

+import java.util.List;

+import java.util.Map;

+import java.util.Properties;

+import java.util.Set;

+import java.util.concurrent.locks.Lock;

+import java.util.concurrent.locks.ReentrantReadWriteLock;

+import java.util.regex.Matcher;

+import java.util.regex.Pattern;

+

+/**

+ * This class is used to capture and cache the service catalog for a specific OpenStack provider.

+ * <p>

+ * This is needed because the way the servers are represented in the ECOMP product is as their fully qualified URL's.

+ * This is very problematic, because we cant identify their region from the URL, URL's change, and we cant identify the

+ * versions of the service implementations. In otherwords, the URL does not provide us enough information.

+ * </p>

+ * <p>

+ * The zone abstraction layer is designed to detect the versions of the services dynamically, and step up or down to

+ * match those reported versions. In order to do that, we need to know before hand what region we are accessing (since

+ * the supported versions may be different by regions). We will need to authenticate to the identity service in order to

+ * do this, plus we have to duplicate the code supporting proxies and trusted hosts that exists in the abstraction

+ * layer, but that cant be helped.

+ * </p>

+ * <p>

+ * What we do to circumvent this is connect to the provider using the lowest supported identity api, and read the entire

+ * service catalog into this object. Then, we parse the vm URL to extract the host and port and match that to the

+ * compute services defined in the catalog. When we find a compute service that has the same host name and port,

+ * whatever region that service is supporting is the region for that server.

+ * </p>

+ * <p>

+ * While we really only need to do this for compute nodes, there is no telling what other situations may arise where the

+ * full service catalog may be needed. Also, there is very little additional cost (additional RAM) associated with

+ * caching the full service catalog since there is no way to list only a portion of it.

+ * </p>

+ */

+public class ServiceCatalogV3 extends ServiceCatalog {

+

+    /**

+     * The project that we are accessing

+     */

+    private Project project;

+

+    /**

+     * A map of endpoints for each service organized by service type

+     */

+    private Map<String /* Service Type */, List<Service.Endpoint>> serviceEndpoints;

+

+    /**

+     * A map of service types that are published

+     */

+    private Map<String /* Service Type */, Service> serviceTypes;

+

+    /**

+     * The Openstack Access object that manages the authenticated token and access control

+     */

+    private Token token;

+

+    /**

+     * A "token provider" that manages the authentication token that we obtain when logging in

+     */

+    private OpenStackSimpleTokenProvider tokenProvider;

+

+    /**

+     * {@inheritDoc}

+     */

+    public ServiceCatalogV3(String identityURL, String projectIdentifier, String principal, String credential,

+            String domain, Properties properties) {

+        super(identityURL, projectIdentifier, principal, credential, domain, properties);

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public void init() throws ZoneException {

+        rwLock = new ReentrantReadWriteLock();

+        serviceTypes = new HashMap<>();

+        serviceEndpoints = new HashMap<>();

+        regions = new HashSet<>();

+        Class<?> connectorClass;

+        OpenStackClientConnector connector;

+        try {

+            connectorClass = Class.forName(CLIENT_CONNECTOR_CLASS);

+            connector = (OpenStackClientConnector) connectorClass.newInstance();

+        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {

+            e.printStackTrace();

+            return;

+        }

+        Keystone keystone = new Keystone(identityURL, connector);

+

+        String proxyHost = properties.getProperty(ContextFactory.PROPERTY_PROXY_HOST);

+        String proxyPort = properties.getProperty(ContextFactory.PROPERTY_PROXY_PORT);

+        String trustedHosts = properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, ""); //$NON-NLS-1$

+        if (proxyHost != null && proxyHost.length() > 0) {

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_HOST, proxyHost);

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.PROXY_PORT, proxyPort);

+        }

+        if (trustedHosts != null) {

+            keystone.getProperties().setProperty(com.woorea.openstack.common.client.Constants.TRUST_HOST_LIST,

+                    trustedHosts);

+        }

+

+        // create identity

+        Identity identity = Identity.password(domain, principal, credential);

+

+        // create scope

+        Scope scope = null;

+        if (projectIdentifier.length() == 32 && projectIdentifier.matches("[0-9a-fA-F]+")) { //$NON-NLS-1$

+            // authenticate = authenticate.withTenantId(projectIdentifier);

+            scope = Scope.project(projectIdentifier);

+        } else {

+            // authenticate = authenticate.withTenantName(projectIdentifier);

+            scope = Scope.project(domain, projectIdentifier);

+        }

+

+        Authentication authentication = new Authentication();

+        authentication.setIdentity(identity);

+        authentication.setScope(scope);

+

+        TokensResource tokens = keystone.tokens();

+        TokensResource.Authenticate authenticate = tokens.authenticate(authentication);

+

+        /*

+         * We have to set up the TrackRequest TLS collection for the ExceptionMapper

+         */

+        trackRequest();

+        RequestState.put(RequestState.PROVIDER, "OpenStackProvider");

+        RequestState.put(RequestState.TENANT, projectIdentifier);

+        RequestState.put(RequestState.PRINCIPAL, principal);

+

+        try {

+            token = authenticate.execute();

+            expiresLocal = getLocalExpiration(token);

+            project = token.getProject();

+            tokenProvider = new OpenStackSimpleTokenProvider(token.getId());

+            keystone.setTokenProvider(tokenProvider);

+            parseServiceCatalog(token.getCatalog());

+        } catch (OpenStackBaseException e) {

+            ExceptionMapper.mapException(e);

+        } catch (Exception ex) {

+            throw new ContextConnectionException(ex.getMessage());

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public List<Service.Endpoint> getEndpoints(String serviceType) {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return serviceEndpoints.get(serviceType);

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getProjectId() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return project.getId();

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getProjectName() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return project.getName();

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public Set<String> getRegions() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return regions;

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public List<String> getServiceTypes() {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            ArrayList<String> result = new ArrayList<>();

+            result.addAll(serviceTypes.keySet());

+            return result;

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String getVMRegion(VMURL url) {

+        String region = null;

+        Pattern urlPattern = Pattern.compile("[^:]+://([^:/]+)(?::([0-9]+)).*");

+

+        if (url != null) {

+            for (Endpoint endpoint : getEndpoints(ServiceCatalog.COMPUTE_SERVICE)) {

+                String endpointUrl = endpoint.getUrl();

+                Matcher matcher = urlPattern.matcher(endpointUrl);

+                if (matcher.matches()) {

+                    if (url.getHost().equals(matcher.group(1))) {

+                        if (url.getPort() != null) {

+                            if (!url.getPort().equals(matcher.group(2))) {

+                                continue;

+                            }

+                        }

+

+                        region = endpoint.getRegion();

+                        break;

+                    }

+                }

+            }

+        }

+        return region;

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public boolean isServicePublished(String serviceType) {

+        Lock readLock = rwLock.readLock();

+        readLock.lock();

+        try {

+            return serviceTypes.containsKey(serviceType);

+        } finally {

+            readLock.unlock();

+        }

+    }

+

+    /**

+     * {@inheritDoc}

+     */

+    @Override

+    public String toString() {

+

+        StringBuilder builder = new StringBuilder();

+        Lock lock = rwLock.readLock();

+        lock.lock();

+        try {

+            builder.append(String.format("Service Catalog: tenant %s, id[%s]\n", project.getName(), //$NON-NLS-1$

+                    project.getId()));

+            if (regions != null && !regions.isEmpty()) {

+                builder.append(String.format("%d regions:\n", regions.size())); //$NON-NLS-1$

+                for (String region : regions) {

+                    builder.append("\t" + region + "\n"); //$NON-NLS-1$ //$NON-NLS-2$

+                }

+            }

+            builder.append(String.format("%d services:\n", serviceEndpoints.size())); //$NON-NLS-1$

+            for (String serviceType : serviceEndpoints.keySet()) {

+                List<Service.Endpoint> endpoints = serviceEndpoints.get(serviceType);

+                Service service = serviceTypes.get(serviceType);

+

+                builder.append(String.format("\t%s - %d endpoints\n", service.getType(), //$NON-NLS-1$

+                        endpoints.size()));

+                for (Service.Endpoint endpoint : endpoints) {

+                    builder.append(String.format("\t\tRegion [%s], public URL [%s]\n", endpoint.getRegion(), //$NON-NLS-1$

+                            endpoint.getUrl()));

+                }

+            }

+        } finally {

+            lock.unlock();

+        }

+

+        return builder.toString();

+    }

+

+    /**

+     * Parses the service catalog and caches the results

+     * 

+     * @param services The list of services published by this provider

+     */

+    private void parseServiceCatalog(List<Service> services) {

+        Lock lock = rwLock.writeLock();

+        lock.lock();

+        try {

+            serviceTypes.clear();

+            serviceEndpoints.clear();

+            regions.clear();

+

+            for (Service service : services) {

+                String type = service.getType();

+                serviceTypes.put(type, service);

+

+                List<Service.Endpoint> endpoints = service.getEndpoints();

+                for (Service.Endpoint endpoint : endpoints) {

+                    List<Service.Endpoint> endpointList = serviceEndpoints.get(type);

+                    if (endpointList == null) {

+                        endpointList = new ArrayList<>();

+                        serviceEndpoints.put(type, endpointList);

+                    }

+                    endpointList.add(endpoint);

+

+                    String region = endpoint.getRegion();

+                    if (!regions.contains(region)) {

+                        regions.add(region);

+                    }

+                }

+            }

+        } finally {

+            lock.unlock();

+        }

+    }

+

+    /**

+     * Computes the local time when the access token will expire, after which we will need to re-login to access the

+     * provider.

+     * 

+     * @param accessKey The access key used to access the provider

+     * @return The local time the key expires

+     */

+    private static long getLocalExpiration(Token accessToken) {

+        Date now = Time.getCurrentUTCDate();

+        if (accessToken != null) {

+            Calendar issued = accessToken.getIssuedAt();

+            Calendar expires = accessToken.getExpiresAt();

+            if (issued != null && expires != null) {

+                long tokenLife = expires.getTimeInMillis() - issued.getTimeInMillis();

+                return now.getTime() + tokenLife;

+            }

+        }

+        return now.getTime();

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/TenantCache.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/TenantCache.java
index db04948..ff349c7 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/TenantCache.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/TenantCache.java
@@ -30,7 +30,6 @@
 import java.util.Properties;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
 import org.openecomp.appc.Constants;
 import org.openecomp.appc.configuration.Configuration;
 import org.openecomp.appc.configuration.ConfigurationFactory;
@@ -47,7 +46,7 @@
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.woorea.openstack.connector.JaxRs20Connector;
-//import com.sun.jersey.api.client.ClientHandlerException;
+// import com.sun.jersey.api.client.ClientHandlerException;
 import com.woorea.openstack.keystone.model.Access.Service.Endpoint;
 
 /**
@@ -63,9 +62,15 @@
 
     public static final String POOL_PROVIDER_NAME = "pool.provider.name";
     public static final String POOL_TENANT_NAME = "pool.tenant.name";
-    //public static final String CLIENT_CONNECTOR_CLASS = "com.woorea.openstack.connector.JerseyConnector";
+    // public static final String CLIENT_CONNECTOR_CLASS =
+    // "com.woorea.openstack.connector.JerseyConnector";
     public static final String CLIENT_CONNECTOR_CLASS = "com.woorea.openstack.connector.JaxRs20Connector";
     /**
+     * The domain to use to authenticate
+     */
+    private String domain;
+
+    /**
      * The provider we are part of
      */
     private ProviderCache provider;
@@ -118,8 +123,7 @@
     /**
      * Construct the cache of tenants for the specified provider
      *
-     * @param provider
-     *            The provider
+     * @param provider The provider
      */
     public TenantCache(ProviderCache provider) {
         configuration = ConfigurationFactory.getConfiguration();
@@ -165,13 +169,19 @@
         String url = provider.getIdentityURL();
         String tenant = tenantName == null ? tenantId : tenantName;
         Properties properties = configuration.getProperties();
+        catalog = ServiceCatalogFactory.getServiceCatalog(url, tenant, userid, password, domain, properties);
+
+        if (catalog == null) {
+            logger.error(Msg.IAAS_UNSUPPORTED_IDENTITY_SERVICE, url);
+            return;
+        }
 
         int attempt = 1;
         while (attempt <= limit) {
             try {
-                catalog = new ServiceCatalog(url, tenant, userid, password, properties);
-                tenantId = catalog.getTenantId();
-                tenantName = catalog.getTenantName();
+                catalog.init();
+                tenantId = catalog.getProjectId();
+                tenantName = catalog.getProjectName();
 
                 for (String region : catalog.getRegions()) {
                     try {
@@ -180,13 +190,13 @@
                         pool.setProperty(ContextFactory.PROPERTY_TENANT, tenantName);
                         pool.setProperty(ContextFactory.PROPERTY_CLIENT_CONNECTOR_CLASS, CLIENT_CONNECTOR_CLASS);
                         pool.setProperty(ContextFactory.PROPERTY_RETRY_DELAY,
-                            configuration.getProperty(Constants.PROPERTY_RETRY_DELAY));
+                                configuration.getProperty(Constants.PROPERTY_RETRY_DELAY));
                         pool.setProperty(ContextFactory.PROPERTY_RETRY_LIMIT,
-                            configuration.getProperty(Constants.PROPERTY_RETRY_LIMIT));
+                                configuration.getProperty(Constants.PROPERTY_RETRY_LIMIT));
                         pool.setProperty(ContextFactory.PROPERTY_REGION, region);
                         if (properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS) != null) {
                             pool.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS,
-                                properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS));
+                                    properties.getProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS));
                         }
                         pool.setAllocator(this);
                         pool.setDestructor(this);
@@ -202,7 +212,8 @@
             } catch (ContextConnectionException e) {
                 attempt++;
                 if (attempt <= limit) {
-                    logger.error(Msg.CONNECTION_FAILED_RETRY, provider.getProviderName(), url, tenantName, tenantId, e.getMessage(), Integer.toString(delay), Integer.toString(attempt),
+                    logger.error(Msg.CONNECTION_FAILED_RETRY, provider.getProviderName(), url, tenantName, tenantId,
+                            e.getMessage(), Integer.toString(delay), Integer.toString(attempt),
                             Integer.toString(limit));
 
                     try {
@@ -211,7 +222,7 @@
                         // ignore
                     }
                 }
-            } catch ( ZoneException e) {
+            } catch (ZoneException e) {
                 logger.error(e.getMessage());
                 break;
             }
@@ -226,38 +237,31 @@
      * This method accepts a fully qualified compute node URL and uses that to determine which region of the provider
      * hosts that compute node.
      *
-     * @param url
-     *            The parsed URL of the compute node
+     * @param url The parsed URL of the compute node
      * @return The region name, or null if no region of this tenant hosts that compute node.
      */
     public String determineRegion(VMURL url) {
         logger.debug(String.format("Attempting to determine VM region for %s", url));
-        String region = null;
-        Pattern urlPattern = Pattern.compile("[^:]+://([^:/]+)(?::([0-9]+)).*");
-
-        if (url != null) {
-            for (Endpoint endpoint : catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE)) {
-                String endpointUrl = endpoint.getPublicURL();
-                Matcher matcher = urlPattern.matcher(endpointUrl);
-                if (matcher.matches()) {
-                    if (url.getHost().equals(matcher.group(1))) {
-                        if (url.getPort() != null) {
-                            if (!url.getPort().equals(matcher.group(2))) {
-                                continue;
-                            }
-                        }
-
-                        region = endpoint.getRegion();
-                        break;
-                    }
-                }
-            }
-        }
+        String region = catalog.getVMRegion(url);
         logger.debug(String.format("Region for %s is %s", url, region));
         return region;
     }
 
     /**
+     * @return the value of the domain
+     */
+    public String getDomain() {
+        return domain;
+    }
+
+    /**
+     * @param domain the value for domain
+     */
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    /**
      * @return the value of provider
      */
     public ProviderCache getProvider() {
@@ -265,8 +269,7 @@
     }
 
     /**
-     * @param provider
-     *            the value for provider
+     * @param provider the value for provider
      */
     public void setProvider(ProviderCache provider) {
         this.provider = provider;
@@ -280,8 +283,7 @@
     }
 
     /**
-     * @param password
-     *            the value for password
+     * @param password the value for password
      */
     public void setPassword(String password) {
         this.password = password;
@@ -295,8 +297,7 @@
     }
 
     /**
-     * @param tenantId
-     *            the value for tenantId
+     * @param tenantId the value for tenantId
      */
     public void setTenantId(String tenantId) {
         this.tenantId = tenantId;
@@ -310,8 +311,7 @@
     }
 
     /**
-     * @param tenantName
-     *            the value for tenantName
+     * @param tenantName the value for tenantName
      */
     public void setTenantName(String tenantName) {
         this.tenantName = tenantName;
@@ -325,8 +325,7 @@
     }
 
     /**
-     * @param userid
-     *            the value for userid
+     * @param userid the value for userid
      */
     public void setUserid(String userid) {
         this.userid = userid;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/VMURL.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/VMURL.java
index d9c9c7b..2860b5a 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/VMURL.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/impl/VMURL.java
@@ -36,8 +36,8 @@
      * The regular expression pattern used to parse the URL. Capturing groups are used to identify and extract the
      * various component parts of the URL.
      */
-    private static Pattern pattern = Pattern
-        .compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?(/.*)?/(v[0-9\\.]+)/([^/]+)/servers/([^/]+)");
+    private static Pattern pattern =
+            Pattern.compile("(\\p{Alnum}+)://([^/:]+)(?::([0-9]+))?(/.*)?/(v[0-9\\.]+)/([^/]+)/servers/([^/]+)");
 
     /**
      * The URL scheme or protocol, such as HTTP or HTTPS
@@ -87,8 +87,7 @@
      * This static method is used to parse the provided server URL string and return a parse results object (VMURL)
      * which represents the state of the parse.
      * 
-     * @param serverUrl
-     *            The server URL to be parsed
+     * @param serverUrl The server URL to be parsed
      * @return The VMURL parse results object, or null if the URL was not valid or null.
      */
     public static VMURL parseURL(String serverUrl) {
@@ -153,7 +152,7 @@
     }
 
     /**
-     * @return The version of the service 
+     * @return The version of the service
      */
     public String getVersion() {
         return version;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/IProviderOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/IProviderOperation.java
index 349fa19..6a14597 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/IProviderOperation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/IProviderOperation.java
@@ -28,7 +28,6 @@
 import org.openecomp.appc.exceptions.APPCException;
 import com.att.cdp.zones.model.ModelObject;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import java.util.Map;
 
 /**
@@ -38,26 +37,37 @@
 
     /**
      * perform specific provider operation
+     * 
      * @param params
      * @param context
      * @return Object represents Stack, Server Or Image
      */
-    ModelObject doOperation(Map<String,String> params, SvcLogicContext context) throws APPCException;
+    ModelObject doOperation(Map<String, String> params, SvcLogicContext context) throws APPCException;
 
     /**
      * sets a cache of providers that are predefined.
+     * 
      * @param providerCache
      */
     void setProviderCache(Map<String /* provider name */, ProviderCache> providerCache);
 
     /**
      * should be initialized by user
+     * 
+     * @param defaultDomain
+     */
+    void setDefaultDomain(String defaultDomain);
+
+    /**
+     * should be initialized by user
+     * 
      * @param defaultUser
      */
     void setDefaultUser(String defaultUser);
 
     /**
      * should be initialized by user
+     * 
      * @param defaultPass
      */
     void setDefaultPass(String defaultPass);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/ProviderOperationFactory.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/ProviderOperationFactory.java
index 22109a4..39ef4a8 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/ProviderOperationFactory.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/api/ProviderOperationFactory.java
@@ -27,12 +27,12 @@
 import org.openecomp.appc.adapter.iaas.provider.operation.impl.*;
 import org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation;
 import org.openecomp.appc.exceptions.APPCException;
-
 import java.util.HashMap;
 import java.util.Map;
 
 /**
  * Singleton factory of provider operations objects with cache
+ * 
  * @since September 26, 2016
  */
 public class ProviderOperationFactory {
@@ -115,7 +115,7 @@
                 default:
                     throw new APPCException("Unsupported provider operation.");
             }
-            operations.put(op,opObject);
+            operations.put(op, opObject);
         }
         return opObject;
     }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/constants/Property.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/constants/Property.java
index de1cf81..9a02494 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/constants/Property.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/constants/Property.java
@@ -32,6 +32,7 @@
     public static final String PROVIDER = "provider";
     public static final String PROVIDER_IDENTITY = "identity";
     public static final String PROVIDER_TENANT = "tenant";
+    public static final String PROVIDER_TENANT_DOMAIN = "Default";
     public static final String PROVIDER_TENANT_NAME = "name";
     public static final String PROVIDER_TENANT_PASSWORD = "password";
     public static final String PROVIDER_TENANT_USERID = "userid";
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Operation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Operation.java
index 759d8e8..857c7a7 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Operation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Operation.java
@@ -29,67 +29,67 @@
  */
 public enum Operation {
     EVACUATE_SERVICE {
-        public String toString(){
+        public String toString() {
             return "evacuateServer";
         }
     },
     MIGRATE_SERVICE {
-        public String toString(){
+        public String toString() {
             return "migrateServer";
         }
     },
     REBUILD_SERVICE {
-        public String toString(){
+        public String toString() {
             return "rebuildServer";
         }
     },
     RESTART_SERVICE {
-        public String toString(){
+        public String toString() {
             return "restartServer";
         }
     },
     VMSTATUSCHECK_SERVICE {
-        public String toString(){
+        public String toString() {
             return "vmStatuschecker";
         }
     },
     SNAPSHOT_SERVICE {
-        public String toString(){
+        public String toString() {
             return "createSnapshot";
         }
     },
     TERMINATE_STACK {
-        public String toString(){
+        public String toString() {
             return "terminateStack";
         }
     },
     SNAPSHOT_STACK {
-        public String toString(){
+        public String toString() {
             return "snapshotStack";
         }
     },
     START_SERVICE {
-        public String toString(){
+        public String toString() {
             return "startServer";
         }
     },
     STOP_SERVICE {
-        public String toString(){
+        public String toString() {
             return "stopServer";
         }
     },
     TERMINATE_SERVICE {
-        public String toString(){
+        public String toString() {
             return "terminateServer";
         }
     },
     LOOKUP_SERVICE {
-        public String toString(){
+        public String toString() {
             return "lookupServer";
         }
     },
-    RESTORE_STACK{
-        public String toString(){
+    RESTORE_STACK {
+        public String toString() {
             return "restoreStack";
         }
     }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Outcome.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Outcome.java
index 4007b26..c62c1b2 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Outcome.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/common/enums/Outcome.java
@@ -29,12 +29,12 @@
  */
 public enum Outcome {
     FAILURE {
-        public String toString(){
+        public String toString() {
             return "failure";
         }
     },
     SUCCESS {
-        public String toString(){
+        public String toString() {
             return "success";
         }
     }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/CreateSnapshot.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/CreateSnapshot.java
index e54ed86..b4c5525 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/CreateSnapshot.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/CreateSnapshot.java
@@ -51,13 +51,11 @@
 import org.openecomp.appc.exceptions.APPCException;
 import org.openecomp.appc.i18n.Msg;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.constants.Constants.DATE_FORMAT;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -72,7 +70,7 @@
 
         SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
         metricsLogger.info("Snapshot Name Generated: Snapshot of %s at %s", server, df.format(new Date()));
-        
+
         return String.format("Snapshot of %s at %s", server, df.format(new Date()));
     }
 
@@ -85,10 +83,10 @@
 
         setTimeForMetricsLogger();
 
-        logger.info(String.format("Creating snapshot of server %s (%s) with name %s",
-                server.getName(), server.getId(), snapshotName));
-        metricsLogger.info(String.format("Creating snapshot of server %s (%s) with name %s",
-                server.getName(), server.getId(), snapshotName));
+        logger.info(String.format("Creating snapshot of server %s (%s) with name %s", server.getName(), server.getId(),
+                snapshotName));
+        metricsLogger.info(String.format("Creating snapshot of server %s (%s) with name %s", server.getName(),
+                server.getId(), snapshotName));
 
         // Request Snapshot
         String msg;
@@ -161,7 +159,8 @@
             String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -177,8 +176,8 @@
                         snapshot = createSnapshot(rc, server);
                         doSuccess(rc);
                     } else {
-                        msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED,
-                                server.getName(), server.getId(), "Accessing Image Service Failed");
+                        msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED, server.getName(), server.getId(),
+                                "Accessing Image Service Failed");
                         logger.error(msg);
                         metricsLogger.error(msg);
                         doFailure(rc, HttpStatus.FORBIDDEN_403, msg);
@@ -212,7 +211,7 @@
         setTimeForMetricsLogger();
 
         metricsLogger.info("Executing Provider Operation: Create Snapshot");
-        
+
         return createSnapshot(params, context);
     }
 
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/EvacuateServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/EvacuateServer.java
index f2466d3..45473e3 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/EvacuateServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/EvacuateServer.java
@@ -55,7 +55,6 @@
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -63,7 +62,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
 public class EvacuateServer extends ProviderServerOperation {
@@ -92,7 +90,8 @@
                         Server.Status.SUSPENDED, Server.Status.PAUSED);
             }
         } catch (RequestFailedException e) {
-            // evacuate is a special case. If the server is still in a Pending state, we want to continue with evacuate
+            // evacuate is a special case. If the server is still in a Pending state, we want to
+            // continue with evacuate
             logger.info("Evacuate server - ignore RequestFailedException from waitForStateChange() ...");
         }
 
@@ -105,8 +104,8 @@
                     logger.debug("Calling CDP moveServer - server id = " + server.getId());
                     service.moveServer(server.getId(), target_host);
                     // Wait for completion, expecting the server to go to a non pending state
-                    waitForStateChange(rc, server, Server.Status.READY, Server.Status.RUNNING,
-                            Server.Status.ERROR, Server.Status.SUSPENDED, Server.Status.PAUSED);
+                    waitForStateChange(rc, server, Server.Status.READY, Server.Status.RUNNING, Server.Status.ERROR,
+                            Server.Status.SUSPENDED, Server.Status.PAUSED);
                     break;
                 } catch (ContextConnectionException e) {
                     msg = EELFResourceManager.format(Msg.CONNECTION_FAILED_RETRY, provider.getName(), service.getURL(),
@@ -120,8 +119,8 @@
             }
 
         } catch (ZoneException e) {
-            msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED,
-                    server.getName(), server.getId(), e.getMessage());
+            msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(), server.getId(),
+                    e.getMessage());
             logger.error(msg);
             metricsLogger.error(msg);
             throw new RequestFailedException("Evacute Server", msg, HttpStatus.BAD_GATEWAY_502, server);
@@ -138,7 +137,8 @@
 
 
     /**
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#evacuateServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#evacuateServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     private Server evacuateServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         Server server = null;
@@ -156,7 +156,8 @@
             String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -175,8 +176,8 @@
 
                     // check target host status
                     if (isComputeNodeDown(context, targethost_id)) {
-                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(),
-                                server.getId(), "Target host " + targethost_id + " status is not UP/ENABLED");
+                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(), server.getId(),
+                                "Target host " + targethost_id + " status is not UP/ENABLED");
                         logger.error(msg);
                         metricsLogger.error(msg);
                         throw new RequestFailedException("Evacuate Server", msg, HttpStatus.BAD_REQUEST_400, server);
@@ -192,34 +193,35 @@
                     logger.debug("Hostname before evacuate: " + hypervisor + ", After evacuate: "
                             + hypervisor_after_evacuate);
 
-                    // check hypervisor host name after evacuate. If it is unchanged, the evacuate failed.
+                    // check hypervisor host name after evacuate. If it is unchanged, the evacuate
+                    // failed.
                     if ((hypervisor != null) && (hypervisor.equals(hypervisor_after_evacuate))) {
-                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(),
-                                server.getId(), "Hypervisor host " + hypervisor
+                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(), server.getId(),
+                                "Hypervisor host " + hypervisor
                                         + " after evacuate is the same as before evacuate. Provider (ex. Openstack) recovery actions may be needed.");
                         logger.error(msg);
                         metricsLogger.error(msg);
-                        throw new RequestFailedException("Evacuate Server", msg,
-                                HttpStatus.INTERNAL_SERVER_ERROR_500, server);
+                        throw new RequestFailedException("Evacuate Server", msg, HttpStatus.INTERNAL_SERVER_ERROR_500,
+                                server);
 
                     }
 
                     // check VM status after evacuate
                     if (server.getStatus() == Server.Status.ERROR) {
-                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(),
-                                server.getId(),
+                        msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_FAILED, server.getName(), server.getId(),
                                 "VM is in ERROR state after evacuate. Provider (ex. Openstack) recovery actions may be needed.");
                         logger.error(msg);
                         metricsLogger.error(msg);
-                        throw new RequestFailedException("Evacuate Server", msg,
-                                HttpStatus.INTERNAL_SERVER_ERROR_500, server);
+                        throw new RequestFailedException("Evacuate Server", msg, HttpStatus.INTERNAL_SERVER_ERROR_500,
+                                server);
                     }
 
                     context.close();
                     doSuccess(rc);
                     ctx.setAttribute("EVACUATE_STATUS", "SUCCESS");
 
-                    // If a snapshot exists, do a rebuild to apply the latest snapshot to the evacuated server.
+                    // If a snapshot exists, do a rebuild to apply the latest snapshot to the
+                    // evacuated server.
                     // This is the default behavior unless the optional parameter is set to FALSE.
                     if ((rebuild_vm == null) || !(rebuild_vm.equalsIgnoreCase("false"))) {
                         List<Image> snapshots = server.getSnapshots();
@@ -238,14 +240,15 @@
                                     if (error_code != HttpStatus.OK_200.getStatusCode()) {
                                         logger.debug("Rebuild after evacuate failed - error code=" + error_code
                                                 + ", message=" + ctx.getAttribute(
-                                                org.openecomp.appc.Constants.ATTRIBUTE_ERROR_MESSAGE));
+                                                        org.openecomp.appc.Constants.ATTRIBUTE_ERROR_MESSAGE));
                                         msg = EELFResourceManager.format(Msg.EVACUATE_SERVER_REBUILD_FAILED,
                                                 server.getName(), hypervisor, hypervisor_after_evacuate,
                                                 ctx.getAttribute(org.openecomp.appc.Constants.ATTRIBUTE_ERROR_MESSAGE));
                                         logger.error(msg);
                                         metricsLogger.error(msg);
                                         ctx.setAttribute("EVACUATE_STATUS", "ERROR");
-                                        // update error message while keeping the error code the same as before
+                                        // update error message while keeping the error code the
+                                        // same as before
                                         doFailure(rc, HttpStatus.getHttpStatus(error_code), msg);
                                     }
                                 } catch (NumberFormatException e) {
@@ -265,8 +268,8 @@
                 doFailure(rc, e.getStatus(), e.getMessage());
             } catch (Exception e1) {
                 msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
-                        Operation.EVACUATE_SERVICE.toString(),
-                        vm_url, context == null ? "Unknown" : context.getTenantName());
+                        Operation.EVACUATE_SERVICE.toString(), vm_url,
+                        context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 metricsLogger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
@@ -284,14 +287,13 @@
     /*
      * Check if a Compute node is down.
      * 
-     * This method attempts to find a given host in the list of hypervisors for a given
-     * context. The only case where a node is considered down is if a matching hypervisor
-     * is found and it's state and status are not UP/ENABLED.
+     * This method attempts to find a given host in the list of hypervisors for a given context. The only case where a
+     * node is considered down is if a matching hypervisor is found and it's state and status are not UP/ENABLED.
      * 
-     * @param context
-     *             The current context
-     * @param host
-     *             The host name (short or fully qualified) of a compute node
+     * @param context The current context
+     * 
+     * @param host The host name (short or fully qualified) of a compute node
+     * 
      * @return true if the node is determined as down, false for all other cases
      */
     private boolean isComputeNodeDown(Context context, String host) throws ZoneException {
@@ -299,7 +301,7 @@
         boolean node_down = false;
 
         // Check host status. A node is considered down only if a matching target host is
-        //  found and it's state/status is not UP/ENABLED.
+        // found and it's state/status is not UP/ENABLED.
         if ((host != null) && !(host.isEmpty())) {
             List<Hypervisor> hypervisors = service.getHypervisors();
             logger.debug("List of Hypervisors retrieved: " + Arrays.toString(hypervisors.toArray()));
@@ -308,8 +310,8 @@
                     // host matches one of the hypervisors
                     State hstate = h.getState();
                     Status hstatus = h.getStatus();
-                    logger.debug("Host matching hypervisor: " + h.getHostName() + ", State/Status: "
-                            + hstate.toString() + "/" + hstatus.toString());
+                    logger.debug("Host matching hypervisor: " + h.getHostName() + ", State/Status: " + hstate.toString()
+                            + "/" + hstatus.toString());
                     if (hstate != State.UP || hstatus != Status.ENABLED) {
                         node_down = true;
                     }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/LookupServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/LookupServer.java
index 0152fc6..4c5c616 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/LookupServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/LookupServer.java
@@ -44,10 +44,8 @@
 import com.att.eelf.i18n.EELFResourceManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
-
 import java.io.IOException;
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
 public class LookupServer extends ProviderServerOperation {
@@ -59,11 +57,11 @@
     public Server lookupServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         Server server = null;
         RequestContext rc = new RequestContext(ctx);
-        rc.isAlive(); //should we test the return and fail if false?
+        rc.isAlive(); // should we test the return and fail if false?
 
         String vm_url = null;
         try {
-            //process vm_url
+            // process vm_url
             validateParametersExist(params, ProviderAdapter.PROPERTY_INSTANCE_URL,
                     ProviderAdapter.PROPERTY_PROVIDER_NAME);
 
@@ -74,33 +72,31 @@
                 return null;
             }
 
-            //use try with resource to ensure context is closed (returned to pool)
+            // use try with resource to ensure context is closed (returned to pool)
             try (Context context = resolveContext(rc, params, appName, vm_url)) {
-                //resloveContext & getContext call doFailure and log errors before returning null
-                if (context != null){
+                // resloveContext & getContext call doFailure and log errors before returning null
+                if (context != null) {
                     rc.reset();
                     server = lookupServer(rc, context, vm.getServerId());
                     logger.debug(Msg.SERVER_FOUND, vm_url, context.getTenantName(), server.getStatus().toString());
                     ctx.setAttribute("serverFound", "success");
-                    String msg =
-                            EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "LookupServer", vm_url);
+                    String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "LookupServer", vm_url);
                     ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
                     doSuccess(rc);
                 }
             } catch (ZoneException e) {
-                //server not found
+                // server not found
                 String msg = EELFResourceManager.format(Msg.SERVER_NOT_FOUND, e, vm_url);
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
                 ctx.setAttribute("serverFound", "failure");
-            }  catch (IOException e) {
-                //exception closing context
+            } catch (IOException e) {
+                // exception closing context
                 String msg = EELFResourceManager.format(Msg.CLOSE_CONTEXT_FAILED, e, vm_url);
                 logger.error(msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION,
-                        e1, e1.getClass().getSimpleName(),
-                        Operation.LOOKUP_SERVICE.toString(), vm_url,  "Unknown" );
+                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1,
+                        e1.getClass().getSimpleName(), Operation.LOOKUP_SERVICE.toString(), vm_url, "Unknown");
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/MigrateServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/MigrateServer.java
index e45bdfa..2477c9a 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/MigrateServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/MigrateServer.java
@@ -49,7 +49,6 @@
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
@@ -57,7 +56,6 @@
 import java.util.Date;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.MIGRATE_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -104,8 +102,8 @@
         setTimeForMetricsLogger();
 
         // Is the skip Hypervisor check attribute populated?
-        String skipHypervisorCheck = null;
-        if (svcCtx != null) {
+        String skipHypervisorCheck = configuration.getProperty("org.openecomp.appc.iaas.skiphypervisorchek");
+        if (skipHypervisorCheck == null && svcCtx != null) {
             skipHypervisorCheck = svcCtx.getAttribute(ProviderAdapter.SKIP_HYPERVISOR_CHECK);
         }
 
@@ -154,7 +152,8 @@
     }
 
     /**
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#migrateServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#migrateServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     private Server migrateServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
         Server server = null;
@@ -171,7 +170,8 @@
 
             String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RebuildServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RebuildServer.java
index 0f089b1..ad7d15b 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RebuildServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RebuildServer.java
@@ -54,14 +54,12 @@
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.STOP_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -75,10 +73,9 @@
      * Rebuild the indicated server with the indicated image. This method assumes the server has been determined to be
      * in the correct state to do the rebuild.
      *
-     * @param rc     The request context that manages the state and recovery of the request for the life of
-     *               its processing.
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
      * @param server the server to be rebuilt
-     * @param image  The image to be used (or snapshot)
+     * @param image The image to be used (or snapshot)
      * @throws RequestFailedException if the server does not change state in the allotted time
      */
     @SuppressWarnings("nls")
@@ -88,8 +85,8 @@
         String msg;
         Context context = server.getContext();
         Provider provider = context.getProvider();
-        ComputeService service = context.getComputeService();  
-        
+        ComputeService service = context.getComputeService();
+
         /*
          * Set Time for Metrics Logger
          */
@@ -121,8 +118,8 @@
                 metricsLogger.trace("Sleep threw interrupted exception, should never occur");
             }
         } catch (ZoneException e) {
-            msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED,
-                    server.getName(), server.getId(), e.getMessage());
+            msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED, server.getName(), server.getId(),
+                    e.getMessage());
             logger.error(msg);
             metricsLogger.error(msg);
             throw new RequestFailedException("Rebuild Server", msg, HttpStatus.BAD_GATEWAY_502, server);
@@ -151,10 +148,9 @@
      * a VM from a bootable volume, where the bootable volume itself is not rebuilt, serves no purpose.
      * </p>
      *
-     * @param rc     The request context that manages the state and recovery of the request for the life of
-     *               its processing.
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
      * @param server The server to be rebuilt
-     * @throws ZoneException          When error occurs
+     * @throws ZoneException When error occurs
      * @throws RequestFailedException When server status is error
      */
     @SuppressWarnings("nls")
@@ -179,11 +175,9 @@
         }
 
         /*
-         * Pending is a bit of a special case. If we find the server is in a
-         * pending state, then the provider is in the process of changing state
-         * of the server. So, lets try to wait a little bit and see if the state
-         * settles down to one we can deal with. If not, then we have to fail
-         * the request.
+         * Pending is a bit of a special case. If we find the server is in a pending state, then the provider is in the
+         * process of changing state of the server. So, lets try to wait a little bit and see if the state settles down
+         * to one we can deal with. If not, then we have to fail the request.
          */
         Context context = server.getContext();
         Provider provider = context.getProvider();
@@ -195,8 +189,8 @@
         }
 
         // Is the skip Hypervisor check attribute populated?
-        String skipHypervisorCheck = null;
-        if (ctx != null) {
+        String skipHypervisorCheck = configuration.getProperty("org.openecomp.appc.iaas.skiphypervisorchek");
+        if (skipHypervisorCheck == null && ctx != null) {
             skipHypervisorCheck = ctx.getAttribute(ProviderAdapter.SKIP_HYPERVISOR_CHECK);
         }
 
@@ -208,10 +202,8 @@
         }
 
         /*
-         * Get the image to use. This is determined by the presence or
-         * absence of snapshot images. If any snapshots exist, then the
-         * latest snapshot is used, otherwise the image used to construct
-         * the VM is used.
+         * Get the image to use. This is determined by the presence or absence of snapshot images. If any snapshots
+         * exist, then the latest snapshot is used, otherwise the image used to construct the VM is used.
          */
         List<Image> snapshots = server.getSnapshots();
         String imageToUse;
@@ -225,16 +217,16 @@
                 while (rc.attempt()) {
                     try {
                         /*
-                         * We are just trying to make sure that the image exists.
-                         * We arent interested in the details at this point.
+                         * We are just trying to make sure that the image exists. We arent interested in the details at
+                         * this point.
                          */
                         imageService.getImage(imageToUse);
                         break;
                     } catch (ContextConnectionException e) {
                         msg = EELFResourceManager.format(Msg.CONNECTION_FAILED_RETRY, provider.getName(),
                                 imageService.getURL(), context.getTenant().getName(), context.getTenant().getId(),
-                                e.getMessage(), Long.toString(rc.getRetryDelay()),
-                                Integer.toString(rc.getAttempts()), Integer.toString(rc.getRetryLimit()));
+                                e.getMessage(), Long.toString(rc.getRetryDelay()), Integer.toString(rc.getAttempts()),
+                                Integer.toString(rc.getRetryLimit()));
                         logger.error(msg, e);
                         metricsLogger.error(msg);
                         rc.delay();
@@ -335,7 +327,8 @@
     }
 
     /**
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#rebuildServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#rebuildServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     @SuppressWarnings("nls")
     public Server rebuildServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
@@ -353,7 +346,8 @@
             String appName = configuration.getProperty(Constants.PROPERTY_APPLICATION_NAME);
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -373,8 +367,8 @@
                         doSuccess(rc);
                         ctx.setAttribute("REBUILD_STATUS", "SUCCESS");
                     } else {
-                        msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED,
-                                server.getName(), server.getId(), "Accessing Image Service Failed");
+                        msg = EELFResourceManager.format(Msg.REBUILD_SERVER_FAILED, server.getName(), server.getId(),
+                                "Accessing Image Service Failed");
                         logger.error(msg);
                         metricsLogger.error(msg);
                         doFailure(rc, HttpStatus.FORBIDDEN_403, msg);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestartServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestartServer.java
index 33c4c6b..5adb7f3 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestartServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestartServer.java
@@ -45,13 +45,11 @@
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.RESTART_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -65,8 +63,7 @@
      * This method handles the case of restarting a server once we have found the server and have obtained the abstract
      * representation of the server via the context (i.e., the "Server" object from the CDP-Zones abstraction).
      *
-     * @param rc     The request context that manages the state and recovery of the request for the life of
-     *               its processing.
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
      * @param server The server object representing the server we want to operate on
      * @throws ZoneException when error occurs.
      * @throws RequestFailedException when server status is error.
@@ -75,11 +72,9 @@
     private void restartServer(RequestContext rc, Server server, SvcLogicContext ctx)
             throws ZoneException, RequestFailedException {
         /*
-         * Pending is a bit of a special case. If we find the server is in a
-         * pending state, then the provider is in the process of changing state
-         * of the server. So, lets try to wait a little bit and see if the state
-         * settles down to one we can deal with. If not, then we have to fail
-         * the request.
+         * Pending is a bit of a special case. If we find the server is in a pending state, then the provider is in the
+         * process of changing state of the server. So, lets try to wait a little bit and see if the state settles down
+         * to one we can deal with. If not, then we have to fail the request.
          */
         String msg;
         if (server.getStatus().equals(Server.Status.PENDING)) {
@@ -89,8 +84,8 @@
 
         setTimeForMetricsLogger("restart server");
 
-        String skipHypervisorCheck = null;
-        if (ctx != null) {
+        String skipHypervisorCheck = configuration.getProperty("org.openecomp.appc.iaas.skiphypervisorchek");
+        if (skipHypervisorCheck == null && ctx != null) {
             skipHypervisorCheck = ctx.getAttribute(ProviderAdapter.SKIP_HYPERVISOR_CHECK);
         }
 
@@ -168,16 +163,20 @@
      * This method is used to restart an existing virtual machine given the fully qualified URL of the machine.
      * <p>
      * The fully qualified URL contains enough information to locate the appropriate server. The URL is of the form
+     * 
      * <pre>
      *  [scheme]://[host[:port]] / [path] / [tenant_id] / servers / [vm_id]
-     * </pre> Where the various parts of the URL can be parsed and extracted and used to locate the appropriate service
-     * in the provider service catalog. This then allows us to open a context using the CDP abstraction, obtain the
-     * server by its UUID, and then perform the restart.
+     * </pre>
+     * 
+     * Where the various parts of the URL can be parsed and extracted and used to locate the appropriate service in the
+     * provider service catalog. This then allows us to open a context using the CDP abstraction, obtain the server by
+     * its UUID, and then perform the restart.
      * </p>
      *
      * @throws UnknownProviderException If the provider cannot be found
      * @throws IllegalArgumentException if the expected argument(s) are not defined or are invalid
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#restartServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#restartServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     @SuppressWarnings("nls")
     private Server restartServer(Map<String, String> params, SvcLogicContext ctx)
@@ -201,7 +200,8 @@
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
 
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -218,8 +218,7 @@
                     context.close();
                     doSuccess(rc);
                     ctx.setAttribute("RESTART_STATUS", "SUCCESS");
-                    String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE,
-                            "RestartServer", vm_url);
+                    String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "RestartServer", vm_url);
                     ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
                 }
             } catch (RequestFailedException e) {
@@ -230,8 +229,9 @@
                 metricsLogger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
-                        RESTART_SERVICE.toString(), vm_url, context == null ? "Unknown" : context.getTenantName());
+                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1,
+                        e1.getClass().getSimpleName(), RESTART_SERVICE.toString(), vm_url,
+                        context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 metricsLogger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestoreStack.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestoreStack.java
index 83dfb92..397f63a 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestoreStack.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/RestoreStack.java
@@ -50,9 +50,7 @@
 import org.openecomp.appc.exceptions.APPCException;
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
 public class RestoreStack extends ProviderStackOperation {
@@ -62,10 +60,10 @@
     private void restoreStack(Stack stack, String snapshotId) throws ZoneException, RequestFailedException {
         Context context = stack.getContext();
 
-        OpenStackContext osContext = (OpenStackContext)context;
+        OpenStackContext osContext = (OpenStackContext) context;
 
         final HeatConnector heatConnector = osContext.getHeatConnector();
-        ((OpenStackContext)context).refreshIfStale(heatConnector);
+        ((OpenStackContext) context).refreshIfStale(heatConnector);
 
         trackRequest(context);
         RequestState.put("SERVICE", "Orchestration");
@@ -105,10 +103,8 @@
 
         try {
 
-            validateParametersExist(params,
-                    ProviderAdapter.PROPERTY_INSTANCE_URL,
-                    ProviderAdapter.PROPERTY_PROVIDER_NAME,
-                    ProviderAdapter.PROPERTY_STACK_ID,
+            validateParametersExist(params, ProviderAdapter.PROPERTY_INSTANCE_URL,
+                    ProviderAdapter.PROPERTY_PROVIDER_NAME, ProviderAdapter.PROPERTY_STACK_ID,
                     ProviderAdapter.PROPERTY_INPUT_SNAPSHOT_ID);
 
             String stackId = params.get(ProviderAdapter.PROPERTY_STACK_ID);
@@ -118,13 +114,13 @@
             context = resolveContext(rc, params, appName, vm_url);
 
             if (context != null) {
-                    stack = lookupStack(rc, context, stackId);
-                    logger.debug(Msg.STACK_FOUND, vm_url, context.getTenantName(), stack.getStatus().toString());
-                    logger.info(EELFResourceManager.format(Msg.TERMINATING_STACK, stack.getName()));
-                    restoreStack(stack, snapshotId);
-                    logger.info(EELFResourceManager.format(Msg.TERMINATE_STACK, stack.getName()));
-                    context.close();
-                    doSuccess(rc);
+                stack = lookupStack(rc, context, stackId);
+                logger.debug(Msg.STACK_FOUND, vm_url, context.getTenantName(), stack.getStatus().toString());
+                logger.info(EELFResourceManager.format(Msg.TERMINATING_STACK, stack.getName()));
+                restoreStack(stack, snapshotId);
+                logger.info(EELFResourceManager.format(Msg.TERMINATE_STACK, stack.getName()));
+                context.close();
+                doSuccess(rc);
             } else {
                 ctx.setAttribute(Constants.DG_ATTRIBUTE_STATUS, "failure");
             }
@@ -134,12 +130,10 @@
             logger.error(msg);
             doFailure(rc, HttpStatus.NOT_FOUND_404, msg, e);
         } catch (RequestFailedException e) {
-            logger.error(EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST,
-                    e.getReason(), "restoreStack"));
+            logger.error(EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST, e.getReason(), "restoreStack"));
             doFailure(rc, e.getStatus(), e.getMessage(), e);
         } catch (Exception e1) {
-            String msg = EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION,
-                    e1, e1.getClass().getSimpleName(),
+            String msg = EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
                     "restoreStack", vm_url, null == context ? "n/a" : context.getTenantName());
             logger.error(msg, e1);
             doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg, e1);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/SnapshotStack.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/SnapshotStack.java
index c53b9c1..97ac5c8 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/SnapshotStack.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/SnapshotStack.java
@@ -53,13 +53,11 @@
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.slf4j.MDC;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
 import java.util.TimeZone;
-
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
 public class SnapshotStack extends ProviderStackOperation {
@@ -73,10 +71,10 @@
         Snapshot snapshot = new Snapshot();
         Context context = stack.getContext();
 
-        OpenStackContext osContext = (OpenStackContext)context;
+        OpenStackContext osContext = (OpenStackContext) context;
 
         final HeatConnector heatConnector = osContext.getHeatConnector();
-        ((OpenStackContext)context).refreshIfStale(heatConnector);
+        ((OpenStackContext) context).refreshIfStale(heatConnector);
 
         trackRequest(context);
         RequestState.put("SERVICE", "Orchestration");
@@ -133,8 +131,8 @@
 
                 Snapshot snapshot = snapshotStack(rc, stack);
 
-                ctx.setAttribute(ProviderAdapter.DG_OUTPUT_PARAM_NAMESPACE +
-                        ProviderAdapter.PROPERTY_SNAPSHOT_ID, snapshot.getId());
+                ctx.setAttribute(ProviderAdapter.DG_OUTPUT_PARAM_NAMESPACE + ProviderAdapter.PROPERTY_SNAPSHOT_ID,
+                        snapshot.getId());
 
                 logger.info(EELFResourceManager.format(Msg.STACK_SNAPSHOTED, stack.getName(), snapshot.getId()));
                 metricsLogger.info(EELFResourceManager.format(Msg.STACK_SNAPSHOTED, stack.getName(), snapshot.getId()));
@@ -150,14 +148,12 @@
             metricsLogger.error(msg);
             doFailure(rc, HttpStatus.NOT_FOUND_404, msg, e);
         } catch (RequestFailedException e) {
-            logger.error(EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST,
-                    e.getReason(), "snapshotStack"));
-            metricsLogger.error(EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST,
-                    e.getReason(), "snapshotStack"));
+            logger.error(EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST, e.getReason(), "snapshotStack"));
+            metricsLogger.error(
+                    EELFResourceManager.format(Msg.MISSING_PARAMETER_IN_REQUEST, e.getReason(), "snapshotStack"));
             doFailure(rc, e.getStatus(), e.getMessage(), e);
         } catch (Exception e1) {
-            String msg = EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION,
-                    e1, e1.getClass().getSimpleName(),
+            String msg = EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
                     "snapshotStack", vm_url, null == context ? "n/a" : context.getTenantName());
             logger.error(msg, e1);
             metricsLogger.error(msg);
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StartServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StartServer.java
index b5379b8..09781a2 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StartServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StartServer.java
@@ -43,9 +43,7 @@
 import com.att.eelf.i18n.EELFResourceManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.START_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -54,7 +52,8 @@
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(StartServer.class);
 
     /**
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#startServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#startServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     @SuppressWarnings("nls")
     public Server startServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
@@ -71,7 +70,8 @@
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
 
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -91,11 +91,9 @@
                      */
 
                     /*
-                     * Pending is a bit of a special case. If we find the server is in a
-                     * pending state, then the provider is in the process of changing state
-                     * of the server. So, lets try to wait a little bit and see if the state
-                     * settles down to one we can deal with. If not, then we have to fail
-                     * the request.
+                     * Pending is a bit of a special case. If we find the server is in a pending state, then the
+                     * provider is in the process of changing state of the server. So, lets try to wait a little bit and
+                     * see if the state settles down to one we can deal with. If not, then we have to fail the request.
                      */
 
                     if (server.getStatus().equals(Server.Status.PENDING)) {
@@ -106,11 +104,11 @@
                     switch (server.getStatus()) {
                         case DELETED:
                             // Nothing to do, the server is gone
-                            msg = EELFResourceManager.format(Msg.SERVER_DELETED,
-                                    server.getName(), server.getId(), server.getTenantId(), "started");
+                            msg = EELFResourceManager.format(Msg.SERVER_DELETED, server.getName(), server.getId(),
+                                    server.getTenantId(), "started");
                             logger.error(msg);
-                            throw new RequestFailedException(
-                                    "Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
 
                         case RUNNING:
                             // Nothing to do, the server is already running
@@ -119,11 +117,11 @@
 
                         case ERROR:
                             // Server is in error state
-                            msg = EELFResourceManager.format(Msg.SERVER_ERROR_STATE,
-                                    server.getName(), server.getId(), server.getTenantId(), "start");
+                            msg = EELFResourceManager.format(Msg.SERVER_ERROR_STATE, server.getName(), server.getId(),
+                                    server.getTenantId(), "start");
                             logger.error(msg);
-                            throw new RequestFailedException(
-                                    "Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
 
                         case READY:
                             // Server is stopped attempt to start the server
@@ -149,15 +147,13 @@
                                     server.getTenantId(), server.getStatus().name());
                             generateEvent(rc, false, msg);
                             logger.error(msg);
-                            throw new RequestFailedException(
-                                    "Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Start Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
                     }
                     context.close();
                     doSuccess(rc);
                     ctx.setAttribute("START_STATUS", "SUCCESS");
-                }
-                else
-                {
+                } else {
                     ctx.setAttribute("START_STATUS", "CONTEXT_NOT_FOUND");
                 }
             } catch (ResourceNotFoundException e) {
@@ -165,8 +161,9 @@
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
-                        START_SERVICE.toString(), vm_url, context == null ? "Unknown" : context.getTenantName());
+                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1,
+                        e1.getClass().getSimpleName(), START_SERVICE.toString(), vm_url,
+                        context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StopServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StopServer.java
index ae61099..0587061 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StopServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/StopServer.java
@@ -43,9 +43,7 @@
 import com.att.eelf.i18n.EELFResourceManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.STOP_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -55,7 +53,8 @@
     private static EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger();
 
     /**
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#stopServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#stopServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     @SuppressWarnings("nls")
     public Server stopServer(Map<String, String> params, SvcLogicContext ctx) throws APPCException {
@@ -73,7 +72,8 @@
             ctx.setAttribute("STOP_STATUS", "SUCCESS");
 
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -86,18 +86,16 @@
                     rc.reset();
                     server = lookupServer(rc, context, vm.getServerId());
                     logger.debug(Msg.SERVER_FOUND, vm_url, context.getTenantName(), server.getStatus().toString());
-                    
+
                     String msg;
                     /*
                      * We determine what to do based on the current state of the server
                      */
 
                     /*
-                     * Pending is a bit of a special case. If we find the server is in a
-                     * pending state, then the provider is in the process of changing state
-                     * of the server. So, lets try to wait a little bit and see if the state
-                     * settles down to one we can deal with. If not, then we have to fail
-                     * the request.
+                     * Pending is a bit of a special case. If we find the server is in a pending state, then the
+                     * provider is in the process of changing state of the server. So, lets try to wait a little bit and
+                     * see if the state settles down to one we can deal with. If not, then we have to fail the request.
                      */
 
                     if (server.getStatus().equals(Server.Status.PENDING)) {
@@ -108,13 +106,13 @@
                     switch (server.getStatus()) {
                         case DELETED:
                             // Nothing to do, the server is gone
-                            msg = EELFResourceManager.format(Msg.SERVER_DELETED,
-                                    server.getName(), server.getId(), server.getTenantId(), "stopped");
+                            msg = EELFResourceManager.format(Msg.SERVER_DELETED, server.getName(), server.getId(),
+                                    server.getTenantId(), "stopped");
                             generateEvent(rc, false, msg);
                             logger.error(msg);
                             metricsLogger.error(msg);
-                            throw new RequestFailedException(
-                                    "Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
 
                         case RUNNING:
                             // Attempt to stop the server
@@ -125,13 +123,13 @@
 
                         case ERROR:
                             // Server is in error state
-                            msg = EELFResourceManager.format(Msg.SERVER_ERROR_STATE,
-                                    server.getName(), server.getId(), server.getTenantId(), "stop");
+                            msg = EELFResourceManager.format(Msg.SERVER_ERROR_STATE, server.getName(), server.getId(),
+                                    server.getTenantId(), "stop");
                             generateEvent(rc, false, msg);
                             logger.error(msg);
                             metricsLogger.error(msg);
-                            throw new RequestFailedException(
-                                    "Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
 
                         case READY:
                             // Nothing to do, the server was already stopped
@@ -158,13 +156,13 @@
 
                         default:
                             // Hmmm, unknown status, should never occur
-                            msg = EELFResourceManager.format(Msg.UNKNOWN_SERVER_STATE,
-                                    server.getName(), server.getId(), server.getTenantId(), server.getStatus().name());
+                            msg = EELFResourceManager.format(Msg.UNKNOWN_SERVER_STATE, server.getName(), server.getId(),
+                                    server.getTenantId(), server.getStatus().name());
                             generateEvent(rc, false, msg);
                             logger.error(msg);
                             metricsLogger.error(msg);
-                            throw new RequestFailedException(
-                                    "Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405, server);
+                            throw new RequestFailedException("Stop Server", msg, HttpStatus.METHOD_NOT_ALLOWED_405,
+                                    server);
                     }
                     context.close();
                     doSuccess(rc);
@@ -172,7 +170,7 @@
                     msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "StopServer", vm_url);
                     ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
 
-                }else{
+                } else {
                     ctx.setAttribute("STOP_STATUS", "CONTEXT_NOT_FOUND");
                 }
             } catch (ResourceNotFoundException e) {
@@ -180,14 +178,14 @@
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
-                        STOP_SERVICE.toString(), vm_url, context == null ? "Unknown" : context.getTenantName());
+                String msg =
+                        EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
+                                STOP_SERVICE.toString(), vm_url, context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
         } catch (RequestFailedException e) {
-            logger.error(EELFResourceManager.format(Msg.STOP_SERVER_FAILED,
-                    appName, "n/a", "n/a", e.getMessage()));
+            logger.error(EELFResourceManager.format(Msg.STOP_SERVER_FAILED, appName, "n/a", "n/a", e.getMessage()));
             doFailure(rc, e.getStatus(), e.getMessage());
         }
 
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateServer.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateServer.java
index b3d34bc..5100060 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateServer.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateServer.java
@@ -47,9 +47,7 @@
 import org.openecomp.appc.exceptions.UnknownProviderException;
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.RESTART_SERVICE;
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.TERMINATE_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
@@ -61,10 +59,8 @@
     /**
      * Start the server and wait for it to enter a running state
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to be started
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to be started
      * @throws ZoneException when error occurs
      * @throws RequestFailedException when request failed
      */
@@ -100,10 +96,8 @@
      * This method handles the case of restarting a server once we have found the server and have obtained the abstract
      * representation of the server via the context (i.e., the "Server" object from the CDP-Zones abstraction).
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server object representing the server we want to operate on
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server object representing the server we want to operate on
      * @throws ZoneException when error occurs
      */
     @SuppressWarnings("nls")
@@ -167,18 +161,20 @@
      * This method is used to delete an existing virtual machine given the fully qualified URL of the machine.
      * <p>
      * The fully qualified URL contains enough information to locate the appropriate server. The URL is of the form
+     * 
      * <pre>
      *  [scheme]://[host[:port]] / [path] / [tenant_id] / servers / [vm_id]
-     * </pre> Where the various parts of the URL can be parsed and extracted and used to locate the appropriate service
-     * in the provider service catalog. This then allows us to open a context using the CDP abstraction, obtain the
-     * server by its UUID, and then perform the restart.
+     * </pre>
+     * 
+     * Where the various parts of the URL can be parsed and extracted and used to locate the appropriate service in the
+     * provider service catalog. This then allows us to open a context using the CDP abstraction, obtain the server by
+     * its UUID, and then perform the restart.
      * </p>
      *
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
-     * @throws IllegalArgumentException
-     *             if the expected argument(s) are not defined or are invalid
-     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#terminateServer(java.util.Map, org.openecomp.sdnc.sli.SvcLogicContext)
+     * @throws UnknownProviderException If the provider cannot be found
+     * @throws IllegalArgumentException if the expected argument(s) are not defined or are invalid
+     * @see org.openecomp.appc.adapter.iaas.ProviderAdapter#terminateServer(java.util.Map,
+     *      org.openecomp.sdnc.sli.SvcLogicContext)
      */
     @SuppressWarnings("nls")
     public Server terminateServer(Map<String, String> params, SvcLogicContext ctx)
@@ -197,7 +193,8 @@
             ctx.setAttribute("TERMINATE_STATUS", "SUCCESS");
 
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -222,15 +219,15 @@
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
                 ctx.setAttribute("TERMINATE_STATUS", "SERVER_NOT_FOUND");
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION,
-                        e1, e1.getClass().getSimpleName(), RESTART_SERVICE.toString(),
-                        vm_url, context == null ? "Unknown" : context.getTenantName());
+                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1,
+                        e1.getClass().getSimpleName(), RESTART_SERVICE.toString(), vm_url,
+                        context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
         } catch (RequestFailedException e) {
-            logger.error(EELFResourceManager.format(Msg.TERMINATE_SERVER_FAILED,
-                    appName, "n/a", "n/a", e.getMessage()));
+            logger.error(
+                    EELFResourceManager.format(Msg.TERMINATE_SERVER_FAILED, appName, "n/a", "n/a", e.getMessage()));
             doFailure(rc, e.getStatus(), e.getMessage());
             ctx.setAttribute("TERMINATE_STATUS", "ERROR");
         }
@@ -243,6 +240,6 @@
             throws UnknownProviderException {
         setMDC(TERMINATE_SERVICE.toString(), "App-C IaaS Adapter:Terminate", ADAPTER_NAME);
         logOperation(Msg.TERMINATING_SERVER, params, context);
-        return terminateServer(params,context);
+        return terminateServer(params, context);
     }
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateStack.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateStack.java
index a8987bb..a9ee122 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateStack.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/TerminateStack.java
@@ -43,9 +43,7 @@
 import com.att.eelf.i18n.EELFResourceManager;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
 public class TerminateStack extends ProviderStackOperation {
@@ -99,8 +97,7 @@
                     logger.info(EELFResourceManager.format(Msg.TERMINATE_STACK, stack.getName()));
                     context.close();
                     doSuccess(rc);
-                    String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE,
-                            "TerminateStack", vm_url);
+                    String msg = EELFResourceManager.format(Msg.SUCCESS_EVENT_MESSAGE, "TerminateStack", vm_url);
                     ctx.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_SUCCESS_MESSAGE, msg);
                 }
             } catch (ResourceNotFoundException e) {
@@ -108,8 +105,9 @@
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
-                        Operation.TERMINATE_STACK.toString(), vm_url, context.getTenantName());
+                String msg =
+                        EELFResourceManager.format(Msg.STACK_OPERATION_EXCEPTION, e1, e1.getClass().getSimpleName(),
+                                Operation.TERMINATE_STACK.toString(), vm_url, context.getTenantName());
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/VmStatuschecker.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/VmStatuschecker.java
index 68fa454..8175a14 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/VmStatuschecker.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/VmStatuschecker.java
@@ -46,9 +46,7 @@
 import org.openecomp.appc.exceptions.UnknownProviderException;
 import org.openecomp.appc.i18n.Msg;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import java.util.Map;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.enums.Operation.RESTART_SERVICE;
 import static org.openecomp.appc.adapter.utils.Constants.ADAPTER_NAME;
 
@@ -75,7 +73,8 @@
             String vm_url = params.get(ProviderAdapter.PROPERTY_INSTANCE_URL);
 
             VMURL vm = VMURL.parseURL(vm_url);
-            if (validateVM(rc, appName, vm_url, vm)) return null;
+            if (validateVM(rc, appName, vm_url, vm))
+                return null;
 
             IdentityURL ident = IdentityURL.parseURL(params.get(ProviderAdapter.PROPERTY_IDENTITY_URL));
             String identStr = (ident == null) ? null : ident.toString();
@@ -137,9 +136,9 @@
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
             } catch (Exception e1) {
-                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION,
-                        e1, e1.getClass().getSimpleName(), RESTART_SERVICE.toString(),
-                        vm_url, context == null ? "Unknown" : context.getTenantName());
+                String msg = EELFResourceManager.format(Msg.SERVER_OPERATION_EXCEPTION, e1,
+                        e1.getClass().getSimpleName(), RESTART_SERVICE.toString(), vm_url,
+                        context == null ? "Unknown" : context.getTenantName());
                 logger.error(msg, e1);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
             }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderOperation.java
index 8ae0753..02226bb 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderOperation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderOperation.java
@@ -44,19 +44,14 @@
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.glassfish.grizzly.http.util.HttpStatus;
 import org.slf4j.MDC;
-
 import java.net.URI;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.constants.Constants.MDC_ADAPTER;
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.constants.Constants.MDC_SERVICE;
 import static com.att.eelf.configuration.Configuration.MDC_SERVICE_NAME;
 
-/**
- * @since September 26, 2016
- */
 public abstract class ProviderOperation implements IProviderOperation {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(ProviderOperation.class);
@@ -80,20 +75,27 @@
         DEFAULT_PASS = defaultPass;
     }
 
+    @Override
+    public void setDefaultDomain(String defaultDomain) {
+        DEFAULT_DOMAIN = defaultDomain;
+    }
+
     /**
      * The username and password to use for dynamically created connections
      */
     private static String DEFAULT_USER;
     private static String DEFAULT_PASS;
+    private static String DEFAULT_DOMAIN;
 
 
     /**
      * set MDC props
+     * 
      * @param service
      * @param serviceName
      * @param adapterName
      */
-    protected void setMDC(String service, String serviceName, String adapterName){
+    protected void setMDC(String service, String serviceName, String adapterName) {
         MDC.put(MDC_ADAPTER, adapterName);
         MDC.put(MDC_SERVICE, service);
         MDC.put(MDC_SERVICE_NAME, serviceName);
@@ -101,11 +103,12 @@
 
     /**
      * initial log of the operation
+     * 
      * @param msg
      * @param params
      * @param context
      */
-    protected void logOperation(Msg msg, Map<String, String> params, SvcLogicContext context){
+    protected void logOperation(Msg msg, Map<String, String> params, SvcLogicContext context) {
 
         String appName = configuration.getProperty(org.openecomp.appc.Constants.PROPERTY_APPLICATION_NAME);
         logger.info(msg, appName);
@@ -117,8 +120,7 @@
     /**
      * This method is used to dump the value of the parameters to the log for debugging purposes.
      *
-     * @param parameters
-     *            The parameters to be printed to the log
+     * @param parameters The parameters to be printed to the log
      */
     private void debugParameters(Map<String, String> parameters) {
         for (String key : parameters.keySet()) {
@@ -129,12 +131,9 @@
     /**
      * This method is used to create a diagnostic dump of the context for the log
      *
-     * @param context
-     *            The context to be dumped
+     * @param context The context to be dumped
      */
-    @SuppressWarnings({
-            "nls", "static-method"
-    })
+    @SuppressWarnings({"nls", "static-method"})
     private void debugContext(SvcLogicContext context) {
         Set<String> keys = context.getAttributeKeySet();
         StringBuilder builder = new StringBuilder();
@@ -171,17 +170,15 @@
      * This method is used to validate that the parameters contain all required property names, and that the values are
      * non-null and non-empty strings. We are still not ensured that the value is valid, but at least it exists.
      *
-     * @param parameters
-     *            The parameters to be checked
-     * @param propertyNames
-     *            The list of property names that are required to be present.
-     * @throws RequestFailedException
-     *             If the parameters are not valid
+     * @param parameters The parameters to be checked
+     * @param propertyNames The list of property names that are required to be present.
+     * @throws RequestFailedException If the parameters are not valid
      */
     protected void validateParametersExist(Map<String, String> parameters, String... propertyNames)
             throws RequestFailedException {
         boolean success = true;
-        StringBuilder msg = new StringBuilder(EELFResourceManager.format(Msg.MISSING_REQUIRED_PROPERTIES, MDC.get(MDC_SERVICE)));
+        StringBuilder msg =
+                new StringBuilder(EELFResourceManager.format(Msg.MISSING_REQUIRED_PROPERTIES, MDC.get(MDC_SERVICE)));
         msg.append(Constants.NL);
         for (String propertyName : propertyNames) {
             String value = parameters.get(propertyName);
@@ -196,20 +193,21 @@
 
         if (!success) {
             logger.error(msg.toString());
-            throw new RequestFailedException("Check Parameters", msg.toString(), HttpStatus.BAD_REQUEST_400, (Server)null);
+            throw new RequestFailedException("Check Parameters", msg.toString(), HttpStatus.BAD_REQUEST_400,
+                    (Server) null);
         }
     }
 
     /**
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
      * @param code
      * @param message
      */
     protected void doFailure(RequestContext rc, HttpStatus code, String message) {
         try {
             doFailure(rc, code, message, null);
-        } catch (APPCException ignored) {/* never happens */}
+        } catch (APPCException ignored) {
+            /* never happens */}
     }
 
     protected void doFailure(RequestContext rc, HttpStatus code, String message, Throwable cause) throws APPCException {
@@ -228,18 +226,19 @@
         svcLogic.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_ERROR_CODE, status);
         svcLogic.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_ERROR_MESSAGE, msg);
 
-        if (null != cause) throw new APPCException(cause);
+        if (null != cause)
+            throw new APPCException(cause);
     }
 
     /**
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
      */
     @SuppressWarnings("static-method")
     protected void doSuccess(RequestContext rc) {
         SvcLogicContext svcLogic = rc.getSvcLogicContext();
         svcLogic.setStatus(Outcome.SUCCESS.toString());
-        svcLogic.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_ERROR_CODE, Integer.toString(HttpStatus.OK_200.getStatusCode()));
+        svcLogic.setAttribute(org.openecomp.appc.Constants.ATTRIBUTE_ERROR_CODE,
+                Integer.toString(HttpStatus.OK_200.getStatusCode()));
     }
 
     protected boolean validateVM(RequestContext rc, String appName, String vm_url, VMURL vm)
@@ -265,7 +264,7 @@
         // This will probably never get hit bc of an earlier check while parsing
         // the string to a VMURL
         try {
-            //noinspection ResultOfMethodCallIgnored
+            // noinspection ResultOfMethodCallIgnored
             URI.create(vm.toString());
         } catch (Exception e) {
             throw new RequestFailedException(
@@ -294,7 +293,7 @@
             cache.setProviderName(ident.toString());
             // cache.setProviderType("OpenStack");
 
-            TenantCache tenant = cache.addTenant(vm.getTenantId(),null, DEFAULT_USER, DEFAULT_PASS);
+            TenantCache tenant = cache.addTenant(vm.getTenantId(), null, DEFAULT_USER, DEFAULT_PASS, DEFAULT_DOMAIN);
 
             // Make sure we could initialize the the cache otherwise return null
             if (tenant != null && tenant.isInitialized()) {
@@ -309,12 +308,9 @@
      * supported provider, regardless of region(s), and to return an opened context that can be used to access that
      * server.
      *
-     * @param rc
-     *            The request context that wraps and manages the state of the request
-     * @param selfLinkURL
-     *            The fully-qualified self-link URL of the server
-     * @param providerName
-     *            The name of the provider to be searched
+     * @param rc The request context that wraps and manages the state of the request
+     * @param selfLinkURL The fully-qualified self-link URL of the server
+     * @param providerName The name of the provider to be searched
      * @return The context that can be used to access the server, or null if not found.
      */
     @SuppressWarnings("nls")
@@ -346,8 +342,8 @@
             if (cache != null) {
                 providerCache.put(cache.getProviderName(), cache);
             } else {
-                String msg =
-                        EELFResourceManager.format(Msg.UNKNOWN_PROVIDER, providerName, providerCache.keySet().toString());
+                String msg = EELFResourceManager.format(Msg.UNKNOWN_PROVIDER, providerName,
+                        providerCache.keySet().toString());
                 logger.error(msg);
                 doFailure(rc, HttpStatus.INTERNAL_SERVER_ERROR_500, msg);
                 return null;
@@ -355,8 +351,8 @@
         }
 
         if (providerName == null) {
-            logger
-                    .debug(String.format("Using the default provider cache [%s] since no valid identity url was passed in.",
+            logger.debug(
+                    String.format("Using the default provider cache [%s] since no valid identity url was passed in.",
                             cache.getIdentityURL()));
         }
 
@@ -364,12 +360,12 @@
         String identityURL = cache.getIdentityURL();
         TenantCache tenantCache = cache.getTenant(vm.getTenantId());
 
-        if(tenantCache == null){
-            //no tenantCache matching tenant, add tenant to the provider cache
-            tenantCache = cache.addTenant(vm.getTenantId(),null,DEFAULT_USER, DEFAULT_PASS);
+        if (tenantCache == null) {
+            // no tenantCache matching tenant, add tenant to the provider cache
+            tenantCache = cache.addTenant(vm.getTenantId(), null, DEFAULT_USER, DEFAULT_PASS, DEFAULT_DOMAIN);
 
-            if(tenantCache == null){
-                //tenant not found
+            if (tenantCache == null) {
+                // tenant not found
                 String msg = EELFResourceManager.format(Msg.SERVER_NOT_FOUND, selfLinkURL);
                 logger.error(msg);
                 doFailure(rc, HttpStatus.NOT_FOUND_404, msg);
@@ -377,7 +373,7 @@
             }
         }
 
-        //reserve the context
+        // reserve the context
         String tenantName = tenantCache.getTenantName();
         String tenantId = tenantCache.getTenantId();
         String region = tenantCache.determineRegion(vm);
@@ -390,8 +386,8 @@
                     Context context = pool.reserve();
 
                     /*
-                     * Insert logic here to test the context for connectivity because we may have gotten one from
-                     * the pool that was previously created.
+                     * Insert logic here to test the context for connectivity because we may have gotten one from the
+                     * pool that was previously created.
                      */
                     if (context.isStale()) {
                         context.relogin();
@@ -446,15 +442,12 @@
 
 
 
-
-
-
-
-    protected abstract ModelObject executeProviderOperation(Map<String, String> params, SvcLogicContext context) throws APPCException;
+    protected abstract ModelObject executeProviderOperation(Map<String, String> params, SvcLogicContext context)
+            throws APPCException;
 
     @Override
     public ModelObject doOperation(Map<String, String> params, SvcLogicContext context) throws APPCException {
 
-        return executeProviderOperation(params,context);
+        return executeProviderOperation(params, context);
     }
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderServerOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderServerOperation.java
index b7ad626..d2c34d0 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderServerOperation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderServerOperation.java
@@ -52,24 +52,19 @@
 /**
  * @since September 29, 2016
  */
-public abstract class ProviderServerOperation extends ProviderOperation{
+public abstract class ProviderServerOperation extends ProviderOperation {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(ProviderServerOperation.class);
 
     /**
      * Looks up the indicated server using the provided context and returns the server to the caller
      *
-     * @param rc
-     *            The request context
-     * @param context
-     *            The provider context
-     * @param id
-     *            The id of the server
+     * @param rc The request context
+     * @param context The provider context
+     * @param id The id of the server
      * @return The server, or null if there is a problem
-     * @throws ZoneException
-     *             If the server cannot be found
-     * @throws RequestFailedException
-     *             If the server cannot be found because we cant connect to the provider
+     * @throws ZoneException If the server cannot be found
+     * @throws RequestFailedException If the server cannot be found because we cant connect to the provider
      */
     @SuppressWarnings("nls")
     protected Server lookupServer(RequestContext rc, Context context, String id)
@@ -106,10 +101,8 @@
     /**
      * Resume a suspended server and wait for it to enter a running state
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to be resumed
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to be resumed
      * @throws ZoneException
      * @throws RequestFailedException
      */
@@ -167,14 +160,10 @@
      * exceptions are thrown from this method.
      * </p>
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param image
-     *            The server to wait on
-     * @param desiredStates
-     *            A variable list of desired states, any one of which is allowed.
-     * @throws RequestFailedException
-     *             If the request times out or fails for some reason
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param image The server to wait on
+     * @param desiredStates A variable list of desired states, any one of which is allowed.
+     * @throws RequestFailedException If the request times out or fails for some reason
      * @throws NotLoggedInException
      */
     @SuppressWarnings("nls")
@@ -246,14 +235,10 @@
      * exceptions are thrown from this method.
      * </p>
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to wait on
-     * @param desiredStates
-     *            A variable list of desired states, any one of which is allowed.
-     * @throws RequestFailedException
-     *             If the request times out or fails for some reason
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to wait on
+     * @param desiredStates A variable list of desired states, any one of which is allowed.
+     * @throws RequestFailedException If the request times out or fails for some reason
      */
     @SuppressWarnings("nls")
     protected void waitForStateChange(RequestContext rc, Server server, Server.Status... desiredStates)
@@ -291,8 +276,8 @@
                     list.add(desiredState.name());
                 }
                 String reason = EELFResourceManager.format(Msg.STATE_CHANGE_EXCEPTION, e.getClass().getSimpleName(),
-                        "server", server.getName(), server.getId(), StringHelper.asList(list), server.getStatus().name(),
-                        e.getMessage());
+                        "server", server.getName(), server.getId(), StringHelper.asList(list),
+                        server.getStatus().name(), e.getMessage());
                 logger.error(reason);
                 logger.error(EELFResourceManager.format(e));
 
@@ -317,10 +302,8 @@
     /**
      * Stop the specified server and wait for it to stop
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to be stopped
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to be stopped
      * @throws ZoneException
      * @throws RequestFailedException
      */
@@ -357,10 +340,8 @@
     /**
      * Start the server and wait for it to enter a running state
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to be started
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to be started
      * @throws ZoneException
      * @throws RequestFailedException
      */
@@ -397,10 +378,8 @@
     /**
      * Un-Pause a paused server and wait for it to enter a running state
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *            The server to be un-paused
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server to be un-paused
      * @throws ZoneException
      * @throws RequestFailedException
      */
@@ -438,153 +417,143 @@
     /**
      * Generates the event indicating what happened
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param success
-     *            True if the event represents a successful outcome
-     * @param msg
-     *            The detailed message
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param success True if the event represents a successful outcome
+     * @param msg The detailed message
      */
-    protected void generateEvent(@SuppressWarnings("unused") RequestContext rc, @SuppressWarnings("unused") boolean success, @SuppressWarnings("unused") String msg) {
+    protected void generateEvent(@SuppressWarnings("unused") RequestContext rc,
+            @SuppressWarnings("unused") boolean success, @SuppressWarnings("unused") String msg) {
         // indication to the DG to generate the event?
     }
-    
+
     /**
      * Checks if the VM is connected to the Virtual Network and reachable
      *
-     * @param rc
-     *            The request context that manages the state and recovery of the request for the life of its processing.
-     * @param server
-     *             The server object representing the server we want to operate on
-     * @param context
-     *            The interface cloud service provider to access services or the object model, or both
-
+     * @param rc The request context that manages the state and recovery of the request for the life of its processing.
+     * @param server The server object representing the server we want to operate on
+     * @param context The interface cloud service provider to access services or the object model, or both
+     * 
      */
-	protected void checkVirtualMachineNetworkStatus(RequestContext rc, Server server, Context context)
-			throws ZoneException, RequestFailedException {
+    protected void checkVirtualMachineNetworkStatus(RequestContext rc, Server server, Context context)
+            throws ZoneException, RequestFailedException {
 
-		logger.info("Performing the VM Server networking status checks...");
-		List<Port> ports = server.getPorts();
+        logger.info("Performing the VM Server networking status checks...");
+        List<Port> ports = server.getPorts();
 
-		NetworkService netSvc = context.getNetworkService();
+        NetworkService netSvc = context.getNetworkService();
 
-		String msg;
-		for (Port port : ports) {
+        String msg;
+        for (Port port : ports) {
 
-			switch (port.getPortState().toString().toUpperCase()) {
-			/**
-			 * The port is connected, configured, and usable for communication
-			 */
-			case "ONLINE":
-				Network network = netSvc.getNetworkById(port.getNetwork());
-				// Subnet subnet = netSvc.getSubnetById(port.getSubnetId());
-				if (!network.getStatus().equals(Network.Status.ACTIVE.toString())) {
-					msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
-					logger.error(msg);
-					doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
-					throw new RequestFailedException("VM Server Network is DOWN", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-							server);
-				}
-				break;
+            switch (port.getPortState().toString().toUpperCase()) {
+                /**
+                 * The port is connected, configured, and usable for communication
+                 */
+                case "ONLINE":
+                    Network network = netSvc.getNetworkById(port.getNetwork());
+                    // Subnet subnet = netSvc.getSubnetById(port.getSubnetId());
+                    if (!network.getStatus().equals(Network.Status.ACTIVE.toString())) {
+                        msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
+                        logger.error(msg);
+                        doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
+                        throw new RequestFailedException("VM Server Network is DOWN", msg.toString(),
+                                HttpStatus.PRECONDITION_FAILED_412, server);
+                    }
+                    break;
 
-			/**
-			 * The port is disconnected or powered-off and cannot be used for
-			 * communication
-			 */
-			case "OFFLINE":
-				msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
-				logger.error(msg);
-				doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
-				throw new RequestFailedException("VM Server Port status is OFFLINE", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-						server);
+                /**
+                 * The port is disconnected or powered-off and cannot be used for communication
+                 */
+                case "OFFLINE":
+                    msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
+                    logger.error(msg);
+                    doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
+                    throw new RequestFailedException("VM Server Port status is OFFLINE", msg.toString(),
+                            HttpStatus.PRECONDITION_FAILED_412, server);
 
-			/**
-			 * The port's status is changing because of some event or operation.
-			 * The final state is yet to be determined.
-			 */
-			case "PENDING":
-				msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
-				logger.error(msg);
-				doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
-				throw new RequestFailedException("VM Server Port status is PENDING", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-						server);
+                    /**
+                     * The port's status is changing because of some event or operation. The final state is yet to be
+                     * determined.
+                     */
+                case "PENDING":
+                    msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
+                    logger.error(msg);
+                    doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
+                    throw new RequestFailedException("VM Server Port status is PENDING", msg.toString(),
+                            HttpStatus.PRECONDITION_FAILED_412, server);
 
-			/**
-			 * The port is in an unknown state and cannot be used.
-			 */
-			case "UNKNOWN":
-				msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
-				logger.error(msg);
-				doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
-				throw new RequestFailedException("VM Server Port status is UNKNOWN", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-						server);
-			}
+                    /**
+                     * The port is in an unknown state and cannot be used.
+                     */
+                case "UNKNOWN":
+                    msg = EELFResourceManager.format(Msg.SERVER_NETWORK_ERROR, server.getName(), port.getId());
+                    logger.error(msg);
+                    doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
+                    throw new RequestFailedException("VM Server Port status is UNKNOWN", msg.toString(),
+                            HttpStatus.PRECONDITION_FAILED_412, server);
+            }
 
-		}
-		logger.info("Passed the VM Server the Hypervisor status checks..");
+        }
+        logger.info("Passed the VM Server the Hypervisor status checks..");
 
-	}
-    
-	/**
+    }
+
+    /**
      * Checks if the VM is connected to the Virtual Network and reachable
      *
-     * @param server
-     *             The server object representing the server we want to operate on
+     * @param server The server object representing the server we want to operate on
      */
-	protected void checkHypervisor(Server server)
-			throws ZoneException, RequestFailedException {
+    protected void checkHypervisor(Server server) throws ZoneException, RequestFailedException {
 
-		logger.info("Performing the Hypervisor status checks..");
-		
-		String msg = null;
-		if(server.getHypervisor() != null && server.getHypervisor().getStatus() != null && server.getHypervisor().getState() != null)
-		{
-			String status = null, state = null;
-		
-			status = server.getHypervisor().getStatus().toString();
-			state = server.getHypervisor().getState().toString();
-		
-			if (!status.equals(Hypervisor.Status.ENABLED.toString()) || !state.equals(Hypervisor.State.UP.toString())) 
-			{
-				msg = EELFResourceManager.format(Msg.HYPERVISOR_DOWN_ERROR, server.getHypervisor().getHostName(), server.getName());
-				logger.error(msg.toString());
-		
-				//doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
-				throw new RequestFailedException("Hypervisor status DOWN or NOT ENABLED", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-					server);
+        logger.info("Performing the Hypervisor status checks..");
 
-			}
-		}
-		else
-		{
-			msg = EELFResourceManager.format(Msg.HYPERVISOR_STATUS_UKNOWN, server.getName());
-			logger.error(msg.toString());
-	
-			throw new RequestFailedException("Unable to determine Hypervisor status", msg.toString(), HttpStatus.PRECONDITION_FAILED_412,
-				server);
-		}
-		
-		logger.info("Passed the Hypervisor status checks..");
-		
-	}
+        String msg = null;
+        if (server.getHypervisor() != null && server.getHypervisor().getStatus() != null
+                && server.getHypervisor().getState() != null) {
+            String status = null, state = null;
 
-	/**
+            status = server.getHypervisor().getStatus().toString();
+            state = server.getHypervisor().getState().toString();
+
+            if (!status.equals(Hypervisor.Status.ENABLED.toString()) || !state.equals(Hypervisor.State.UP.toString())) {
+                msg = EELFResourceManager.format(Msg.HYPERVISOR_DOWN_ERROR, server.getHypervisor().getHostName(),
+                        server.getName());
+                logger.error(msg.toString());
+
+                // doFailure(rc, HttpStatus.PRECONDITION_FAILED_412, msg);
+                throw new RequestFailedException("Hypervisor status DOWN or NOT ENABLED", msg.toString(),
+                        HttpStatus.PRECONDITION_FAILED_412, server);
+
+            }
+        } else {
+            msg = EELFResourceManager.format(Msg.HYPERVISOR_STATUS_UKNOWN, server.getName());
+            logger.error(msg.toString());
+
+            throw new RequestFailedException("Unable to determine Hypervisor status", msg.toString(),
+                    HttpStatus.PRECONDITION_FAILED_412, server);
+        }
+
+        logger.info("Passed the Hypervisor status checks..");
+
+    }
+
+    /**
      * Checks if a Host machine is reachable
      *
-     * @param ipAddress
-     *            IP Address of the Host Machine.
-     * @param server
-     *             The server object representing the Virtual Machine server
+     * @param ipAddress IP Address of the Host Machine.
+     * @param server The server object representing the Virtual Machine server
      * @return boolean
-     *            
+     * 
      */
-	/*private boolean isHostReachable(String ipAddress) throws IOException {
-		
-		InetAddress address = InetAddress.getByName(ipAddress);
-		
-		return address.isReachable(15000); 
-		
+    /*
+     * private boolean isHostReachable(String ipAddress) throws IOException {
+     * 
+     * InetAddress address = InetAddress.getByName(ipAddress);
+     * 
+     * return address.isReachable(15000);
+     * 
+     * 
+     * }
+     */
 
-	}*/
-    
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderStackOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderStackOperation.java
index 9579fec..fa59ffb 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderStackOperation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/iaas/provider/operation/impl/base/ProviderStackOperation.java
@@ -45,13 +45,9 @@
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import com.woorea.openstack.base.client.OpenStackBaseException;
 import org.glassfish.grizzly.http.util.HttpStatus;
-
 import java.util.List;
 
-/**
- * @since September 29, 2016
- */
-public abstract class ProviderStackOperation extends ProviderOperation{
+public abstract class ProviderStackOperation extends ProviderOperation {
 
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(ProviderStackOperation.class);
 
@@ -59,7 +55,8 @@
     protected void trackRequest(Context context, AbstractService.State... states) {
         RequestState.clear();
 
-        if (null == states) return;
+        if (null == states)
+            return;
         for (AbstractService.State state : states) {
             RequestState.put(state.getName(), state.getValue());
         }
@@ -71,7 +68,7 @@
             StackTraceElement element;
             for (; index < stack.length; index++) {
                 element = stack[index];
-                if ("trackRequest".equals(element.getMethodName())) {  //$NON-NLS-1$
+                if ("trackRequest".equals(element.getMethodName())) { //$NON-NLS-1$
                     break;
                 }
             }
@@ -90,7 +87,9 @@
         }
     }
 
-/* Changed the 'pollInterval' type as long. Thread.sleep method needs 'long millis' as an argument */
+    /*
+     * Changed the 'pollInterval' type as long. Thread.sleep method needs 'long millis' as an argument
+     */
     private boolean checkStatus(String expectedStatus, long pollInterval, String actualStatus) {
         if (actualStatus.toUpperCase().equals(expectedStatus)) {
             return true;
@@ -112,8 +111,10 @@
         while (System.currentTimeMillis() < maxTimeToWait) {
             String stackStatus = stackResource.show(stack.getName(), stack.getId()).execute().getStackStatus();
             logger.debug("Stack status : " + stackStatus);
-            if (stackStatus.toUpperCase().contains("FAILED")) return false;
-            if(checkStatus(expectedStatus, pollInterval, stackStatus)) return true;
+            if (stackStatus.toUpperCase().contains("FAILED"))
+                return false;
+            if (checkStatus(expectedStatus, pollInterval, stackStatus))
+                return true;
         }
         throw new TimeoutException("Timeout waiting for stack status change");
     }
@@ -158,11 +159,14 @@
     }
 
 
-    protected boolean waitForStackStatus(RequestContext rc, Stack stack, Stack.Status expectedStatus) throws ZoneException, RequestFailedException {
+    protected boolean waitForStackStatus(RequestContext rc, Stack stack, Stack.Status expectedStatus)
+            throws ZoneException, RequestFailedException {
         SvcLogicContext ctx = rc.getSvcLogicContext();
         Context context = stack.getContext();
         StackService stackService = context.getStackService();
-/* Changed the 'pollInterval' type as long. Thread.sleep method needs 'long millis' as an argument */
+        /*
+         * Changed the 'pollInterval' type as long. Thread.sleep method needs 'long millis' as an argument
+         */
         long pollInterval = configuration.getIntegerProperty(Constants.PROPERTY_OPENSTACK_POLL_INTERVAL);
         int timeout = configuration.getIntegerProperty(Constants.PROPERTY_STACK_STATE_CHANGE_TIMEOUT);
         long maxTimeToWait = System.currentTimeMillis() + (long) timeout * 1000;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/SnapshotResource.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/SnapshotResource.java
index ff3f95d..0446818 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/SnapshotResource.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/SnapshotResource.java
@@ -26,7 +26,6 @@
 
 import org.openecomp.appc.adapter.openstack.heat.model.CreateSnapshotParams;
 import org.openecomp.appc.adapter.openstack.heat.model.Snapshot;
-
 import com.woorea.openstack.base.client.Entity;
 import com.woorea.openstack.base.client.HttpMethod;
 import com.woorea.openstack.base.client.OpenStackClient;
@@ -55,19 +54,22 @@
 
     public class CreateSnapshot extends OpenStackRequest<Snapshot> {
         public CreateSnapshot(String stackName, String stackID, CreateSnapshotParams params) {
-            super(client, HttpMethod.POST, "/stacks/" + stackName + "/" + stackID + "/snapshots", Entity.json(params), Snapshot.class);
+            super(client, HttpMethod.POST, "/stacks/" + stackName + "/" + stackID + "/snapshots", Entity.json(params),
+                    Snapshot.class);
         }
     }
 
     public class RestoreSnapshot extends OpenStackRequest<Void> {
         public RestoreSnapshot(String stackName, String stackID, String snapshotID) {
-            super(client, HttpMethod.POST, "/stacks/" + stackName + "/" + stackID + "/snapshots/" + snapshotID + "/restore", null, Void.class);
+            super(client, HttpMethod.POST,
+                    "/stacks/" + stackName + "/" + stackID + "/snapshots/" + snapshotID + "/restore", null, Void.class);
         }
     }
 
     public class ShowSnapshot extends OpenStackRequest<Snapshot> {
         public ShowSnapshot(String stackName, String stackID, String snapshotID) {
-            super(client, HttpMethod.GET, "/stacks/" + stackName + "/" + stackID + "/snapshots/" + snapshotID, null, Snapshot.class);
+            super(client, HttpMethod.GET, "/stacks/" + stackName + "/" + stackID + "/snapshots/" + snapshotID, null,
+                    Snapshot.class);
         }
     }
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/StackResource.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/StackResource.java
index b9b7bcc..a559b04 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/StackResource.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/StackResource.java
@@ -26,7 +26,6 @@
 
 import org.openecomp.appc.adapter.openstack.heat.model.CreateSnapshotParams;
 import org.openecomp.appc.adapter.openstack.heat.model.Snapshot;
-
 import com.woorea.openstack.base.client.Entity;
 import com.woorea.openstack.base.client.HttpMethod;
 import com.woorea.openstack.base.client.OpenStackClient;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/CreateSnapshotParams.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/CreateSnapshotParams.java
index 22c677c..4d8901c 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/CreateSnapshotParams.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/CreateSnapshotParams.java
@@ -32,9 +32,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "name"
-})
+@JsonPropertyOrder({"name"})
 public class CreateSnapshotParams {
 
     @JsonProperty("name")
@@ -42,8 +40,7 @@
 
     /**
      * 
-     * @return
-     *     The name
+     * @return The name
      */
     @JsonProperty("name")
     public String getName() {
@@ -52,8 +49,7 @@
 
     /**
      * 
-     * @param name
-     *     The name
+     * @param name The name
      */
     @JsonProperty("name")
     public void setName(String name) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Data.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Data.java
index c7aa5d2..3581818 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Data.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Data.java
@@ -33,17 +33,8 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "status",
-    "name",
-    "stack_user_project_id",
-    "environment",
-    "template",
-    "action",
-    "project_id",
-    "id",
-    "resources"
-})
+@JsonPropertyOrder({"status", "name", "stack_user_project_id", "environment", "template", "action", "project_id", "id",
+        "resources"})
 public class Data {
 
     @JsonProperty("status")
@@ -70,8 +61,7 @@
 
     /**
      * 
-     * @return
-     *     The status
+     * @return The status
      */
     @JsonProperty("status")
     public String getStatus() {
@@ -80,8 +70,7 @@
 
     /**
      * 
-     * @param status
-     *     The status
+     * @param status The status
      */
     @JsonProperty("status")
     public void setStatus(String status) {
@@ -90,8 +79,7 @@
 
     /**
      * 
-     * @return
-     *     The name
+     * @return The name
      */
     @JsonProperty("name")
     public String getName() {
@@ -100,8 +88,7 @@
 
     /**
      * 
-     * @param name
-     *     The name
+     * @param name The name
      */
     @JsonProperty("name")
     public void setName(String name) {
@@ -110,8 +97,7 @@
 
     /**
      * 
-     * @return
-     *     The stackUserProjectId
+     * @return The stackUserProjectId
      */
     @JsonProperty("stack_user_project_id")
     public String getStackUserProjectId() {
@@ -120,8 +106,7 @@
 
     /**
      * 
-     * @param stackUserProjectId
-     *     The stack_user_project_id
+     * @param stackUserProjectId The stack_user_project_id
      */
     @JsonProperty("stack_user_project_id")
     public void setStackUserProjectId(String stackUserProjectId) {
@@ -130,8 +115,7 @@
 
     /**
      * 
-     * @return
-     *     The environment
+     * @return The environment
      */
     @JsonProperty("environment")
     public Environment getEnvironment() {
@@ -140,8 +124,7 @@
 
     /**
      * 
-     * @param environment
-     *     The environment
+     * @param environment The environment
      */
     @JsonProperty("environment")
     public void setEnvironment(Environment environment) {
@@ -150,8 +133,7 @@
 
     /**
      * 
-     * @return
-     *     The template
+     * @return The template
      */
     @JsonProperty("template")
     public Template getTemplate() {
@@ -160,8 +142,7 @@
 
     /**
      * 
-     * @param template
-     *     The template
+     * @param template The template
      */
     @JsonProperty("template")
     public void setTemplate(Template template) {
@@ -170,8 +151,7 @@
 
     /**
      * 
-     * @return
-     *     The action
+     * @return The action
      */
     @JsonProperty("action")
     public String getAction() {
@@ -180,8 +160,7 @@
 
     /**
      * 
-     * @param action
-     *     The action
+     * @param action The action
      */
     @JsonProperty("action")
     public void setAction(String action) {
@@ -190,8 +169,7 @@
 
     /**
      * 
-     * @return
-     *     The projectId
+     * @return The projectId
      */
     @JsonProperty("project_id")
     public String getProjectId() {
@@ -200,8 +178,7 @@
 
     /**
      * 
-     * @param projectId
-     *     The project_id
+     * @param projectId The project_id
      */
     @JsonProperty("project_id")
     public void setProjectId(String projectId) {
@@ -210,8 +187,7 @@
 
     /**
      * 
-     * @return
-     *     The id
+     * @return The id
      */
     @JsonProperty("id")
     public String getId() {
@@ -220,8 +196,7 @@
 
     /**
      * 
-     * @param id
-     *     The id
+     * @param id The id
      */
     @JsonProperty("id")
     public void setId(String id) {
@@ -230,8 +205,7 @@
 
     /**
      * 
-     * @return
-     *     The resources
+     * @return The resources
      */
     @JsonProperty("resources")
     public Resources__ getResources() {
@@ -240,8 +214,7 @@
 
     /**
      * 
-     * @param resources
-     *     The resources
+     * @param resources The resources
      */
     @JsonProperty("resources")
     public void setResources(Resources__ resources) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Environment.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Environment.java
index ea16620..10adaed 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Environment.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Environment.java
@@ -33,10 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "parameters",
-    "resource_registry"
-})
+@JsonPropertyOrder({"parameters", "resource_registry"})
 public class Environment {
 
     @JsonProperty("parameters")
@@ -48,8 +45,7 @@
 
     /**
      * 
-     * @return
-     *     The parameters
+     * @return The parameters
      */
     @JsonProperty("parameters")
     public Parameters getParameters() {
@@ -58,8 +54,7 @@
 
     /**
      * 
-     * @param parameters
-     *     The parameters
+     * @param parameters The parameters
      */
     @JsonProperty("parameters")
     public void setParameters(Parameters parameters) {
@@ -68,8 +63,7 @@
 
     /**
      * 
-     * @return
-     *     The resourceRegistry
+     * @return The resourceRegistry
      */
     @JsonProperty("resource_registry")
     public ResourceRegistry getResourceRegistry() {
@@ -78,8 +72,7 @@
 
     /**
      * 
-     * @param resourceRegistry
-     *     The resource_registry
+     * @param resourceRegistry The resource_registry
      */
     @JsonProperty("resource_registry")
     public void setResourceRegistry(ResourceRegistry resourceRegistry) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Properties.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Properties.java
index d04d241..3be9461 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Properties.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Properties.java
@@ -32,9 +32,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "size"
-})
+@JsonPropertyOrder({"size"})
 public class Properties {
 
     @JsonProperty("size")
@@ -42,8 +40,7 @@
 
     /**
      * 
-     * @return
-     *     The size
+     * @return The size
      */
     @JsonProperty("size")
     public int getSize() {
@@ -52,8 +49,7 @@
 
     /**
      * 
-     * @param size
-     *     The size
+     * @param size The size
      */
     @JsonProperty("size")
     public void setSize(int size) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceData.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceData.java
index 8df4d8b..8ac70e3 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceData.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceData.java
@@ -32,9 +32,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "backup_id"
-})
+@JsonPropertyOrder({"backup_id"})
 public class ResourceData {
 
     @JsonProperty("backup_id")
@@ -42,8 +40,7 @@
 
     /**
      * 
-     * @return
-     *     The backupId
+     * @return The backupId
      */
     @JsonProperty("backup_id")
     public String getBackupId() {
@@ -52,8 +49,7 @@
 
     /**
      * 
-     * @param backupId
-     *     The backup_id
+     * @param backupId The backup_id
      */
     @JsonProperty("backup_id")
     public void setBackupId(String backupId) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceRegistry.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceRegistry.java
index ad421b3..c214c41 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceRegistry.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/ResourceRegistry.java
@@ -33,9 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "resources"
-})
+@JsonPropertyOrder({"resources"})
 public class ResourceRegistry {
 
     @JsonProperty("resources")
@@ -44,8 +42,7 @@
 
     /**
      * 
-     * @return
-     *     The resources
+     * @return The resources
      */
     @JsonProperty("resources")
     public Resources getResources() {
@@ -54,8 +51,7 @@
 
     /**
      * 
-     * @param resources
-     *     The resources
+     * @param resources The resources
      */
     @JsonProperty("resources")
     public void setResources(Resources resources) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources_.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources_.java
index 45f67c7..cbacd77 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources_.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources_.java
@@ -33,9 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "volume"
-})
+@JsonPropertyOrder({"volume"})
 public class Resources_ {
 
     @JsonProperty("volume")
@@ -44,8 +42,7 @@
 
     /**
      * 
-     * @return
-     *     The volume
+     * @return The volume
      */
     @JsonProperty("volume")
     public Volume getVolume() {
@@ -54,8 +51,7 @@
 
     /**
      * 
-     * @param volume
-     *     The volume
+     * @param volume The volume
      */
     @JsonProperty("volume")
     public void setVolume(Volume volume) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources__.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources__.java
index 4b5cbc7..b389c2d 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources__.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Resources__.java
@@ -33,9 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "volume"
-})
+@JsonPropertyOrder({"volume"})
 public class Resources__ {
 
     @JsonProperty("volume")
@@ -44,8 +42,7 @@
 
     /**
      * 
-     * @return
-     *     The volume
+     * @return The volume
      */
     @JsonProperty("volume")
     public Volume_ getVolume() {
@@ -54,8 +51,7 @@
 
     /**
      * 
-     * @param volume
-     *     The volume
+     * @param volume The volume
      */
     @JsonProperty("volume")
     public void setVolume(Volume_ volume) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Snapshot.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Snapshot.java
index 062ce1d..5480356 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Snapshot.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Snapshot.java
@@ -33,14 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "id",
-    "name",
-    "status",
-    "status_reason",
-    "creation_time",
-    "data"
-})
+@JsonPropertyOrder({"id", "name", "status", "status_reason", "creation_time", "data"})
 public class Snapshot {
 
     @JsonProperty("id")
@@ -59,8 +52,7 @@
 
     /**
      * 
-     * @return
-     *     The id
+     * @return The id
      */
     @JsonProperty("id")
     public String getId() {
@@ -69,8 +61,7 @@
 
     /**
      * 
-     * @param id
-     *     The id
+     * @param id The id
      */
     @JsonProperty("id")
     public void setId(String id) {
@@ -79,8 +70,7 @@
 
     /**
      * 
-     * @return
-     *     The name
+     * @return The name
      */
     @JsonProperty("name")
     public String getName() {
@@ -89,8 +79,7 @@
 
     /**
      * 
-     * @param name
-     *     The name
+     * @param name The name
      */
     @JsonProperty("name")
     public void setName(String name) {
@@ -99,8 +88,7 @@
 
     /**
      * 
-     * @return
-     *     The status
+     * @return The status
      */
     @JsonProperty("status")
     public String getStatus() {
@@ -109,8 +97,7 @@
 
     /**
      * 
-     * @param status
-     *     The status
+     * @param status The status
      */
     @JsonProperty("status")
     public void setStatus(String status) {
@@ -119,8 +106,7 @@
 
     /**
      * 
-     * @return
-     *     The statusReason
+     * @return The statusReason
      */
     @JsonProperty("status_reason")
     public String getStatusReason() {
@@ -129,8 +115,7 @@
 
     /**
      * 
-     * @param statusReason
-     *     The status_reason
+     * @param statusReason The status_reason
      */
     @JsonProperty("status_reason")
     public void setStatusReason(String statusReason) {
@@ -139,8 +124,7 @@
 
     /**
      * 
-     * @return
-     *     The creationTime
+     * @return The creationTime
      */
     @JsonProperty("creation_time")
     public String getCreationTime() {
@@ -149,8 +133,7 @@
 
     /**
      * 
-     * @param creationTime
-     *     The creation_time
+     * @param creationTime The creation_time
      */
     @JsonProperty("creation_time")
     public void setCreationTime(String creationTime) {
@@ -159,8 +142,7 @@
 
     /**
      * 
-     * @return
-     *     The data
+     * @return The data
      */
     @JsonProperty("data")
     public Data getData() {
@@ -169,8 +151,7 @@
 
     /**
      * 
-     * @param data
-     *     The data
+     * @param data The data
      */
     @JsonProperty("data")
     public void setData(Data data) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotDetails.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotDetails.java
index 816a8d4..172072d 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotDetails.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotDetails.java
@@ -33,9 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "snapshot"
-})
+@JsonPropertyOrder({"snapshot"})
 public class SnapshotDetails {
 
     @JsonProperty("snapshot")
@@ -44,8 +42,7 @@
 
     /**
      * 
-     * @return
-     *     The snapshot
+     * @return The snapshot
      */
     @JsonProperty("snapshot")
     public Snapshot getSnapshot() {
@@ -54,8 +51,7 @@
 
     /**
      * 
-     * @param snapshot
-     *     The snapshot
+     * @param snapshot The snapshot
      */
     @JsonProperty("snapshot")
     public void setSnapshot(Snapshot snapshot) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotRestoreResponse.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotRestoreResponse.java
index 6dae3bd..5e829ba 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotRestoreResponse.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/SnapshotRestoreResponse.java
@@ -32,11 +32,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "code",
-    "message",
-    "title"
-})
+@JsonPropertyOrder({"code", "message", "title"})
 public class SnapshotRestoreResponse {
 
     @JsonProperty("code")
@@ -48,8 +44,7 @@
 
     /**
      * 
-     * @return
-     *     The code
+     * @return The code
      */
     @JsonProperty("code")
     public String getCode() {
@@ -58,8 +53,7 @@
 
     /**
      * 
-     * @param code
-     *     The code
+     * @param code The code
      */
     @JsonProperty("code")
     public void setCode(String code) {
@@ -68,8 +62,7 @@
 
     /**
      * 
-     * @return
-     *     The message
+     * @return The message
      */
     @JsonProperty("message")
     public String getMessage() {
@@ -78,8 +71,7 @@
 
     /**
      * 
-     * @param message
-     *     The message
+     * @param message The message
      */
     @JsonProperty("message")
     public void setMessage(String message) {
@@ -88,8 +80,7 @@
 
     /**
      * 
-     * @return
-     *     The title
+     * @return The title
      */
     @JsonProperty("title")
     public String getTitle() {
@@ -98,8 +89,7 @@
 
     /**
      * 
-     * @param title
-     *     The title
+     * @param title The title
      */
     @JsonProperty("title")
     public void setTitle(String title) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Template.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Template.java
index 08ab747..fd762dc 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Template.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Template.java
@@ -33,10 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "heat_template_version",
-    "resources"
-})
+@JsonPropertyOrder({"heat_template_version", "resources"})
 public class Template {
 
     @JsonProperty("heat_template_version")
@@ -47,8 +44,7 @@
 
     /**
      * 
-     * @return
-     *     The heatTemplateVersion
+     * @return The heatTemplateVersion
      */
     @JsonProperty("heat_template_version")
     public String getHeatTemplateVersion() {
@@ -57,8 +53,7 @@
 
     /**
      * 
-     * @param heatTemplateVersion
-     *     The heat_template_version
+     * @param heatTemplateVersion The heat_template_version
      */
     @JsonProperty("heat_template_version")
     public void setHeatTemplateVersion(String heatTemplateVersion) {
@@ -67,8 +62,7 @@
 
     /**
      * 
-     * @return
-     *     The resources
+     * @return The resources
      */
     @JsonProperty("resources")
     public Resources_ getResources() {
@@ -77,8 +71,7 @@
 
     /**
      * 
-     * @param resources
-     *     The resources
+     * @param resources The resources
      */
     @JsonProperty("resources")
     public void setResources(Resources_ resources) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume.java
index 9f34710..9173fe8 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume.java
@@ -33,10 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "type",
-    "properties"
-})
+@JsonPropertyOrder({"type", "properties"})
 public class Volume {
 
     @JsonProperty("type")
@@ -47,8 +44,7 @@
 
     /**
      * 
-     * @return
-     *     The type
+     * @return The type
      */
     @JsonProperty("type")
     public String getType() {
@@ -57,8 +53,7 @@
 
     /**
      * 
-     * @param type
-     *     The type
+     * @param type The type
      */
     @JsonProperty("type")
     public void setType(String type) {
@@ -67,8 +62,7 @@
 
     /**
      * 
-     * @return
-     *     The properties
+     * @return The properties
      */
     @JsonProperty("properties")
     public Properties getProperties() {
@@ -77,8 +71,7 @@
 
     /**
      * 
-     * @param properties
-     *     The properties
+     * @param properties The properties
      */
     @JsonProperty("properties")
     public void setProperties(Properties properties) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume_.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume_.java
index 9fd08b6..abad08f 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume_.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/main/java/org/openecomp/appc/adapter/openstack/heat/model/Volume_.java
@@ -33,15 +33,7 @@
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Generated("org.jsonschema2pojo")
-@JsonPropertyOrder({
-    "status",
-    "name",
-    "resource_data",
-    "resource_id",
-    "action",
-    "type",
-    "metadata"
-})
+@JsonPropertyOrder({"status", "name", "resource_data", "resource_id", "action", "type", "metadata"})
 public class Volume_ {
 
     @JsonProperty("status")
@@ -63,8 +55,7 @@
 
     /**
      * 
-     * @return
-     *     The status
+     * @return The status
      */
     @JsonProperty("status")
     public String getStatus() {
@@ -73,8 +64,7 @@
 
     /**
      * 
-     * @param status
-     *     The status
+     * @param status The status
      */
     @JsonProperty("status")
     public void setStatus(String status) {
@@ -83,8 +73,7 @@
 
     /**
      * 
-     * @return
-     *     The name
+     * @return The name
      */
     @JsonProperty("name")
     public String getName() {
@@ -93,8 +82,7 @@
 
     /**
      * 
-     * @param name
-     *     The name
+     * @param name The name
      */
     @JsonProperty("name")
     public void setName(String name) {
@@ -103,8 +91,7 @@
 
     /**
      * 
-     * @return
-     *     The resourceData
+     * @return The resourceData
      */
     @JsonProperty("resource_data")
     public ResourceData getResourceData() {
@@ -113,8 +100,7 @@
 
     /**
      * 
-     * @param resourceData
-     *     The resource_data
+     * @param resourceData The resource_data
      */
     @JsonProperty("resource_data")
     public void setResourceData(ResourceData resourceData) {
@@ -123,8 +109,7 @@
 
     /**
      * 
-     * @return
-     *     The resourceId
+     * @return The resourceId
      */
     @JsonProperty("resource_id")
     public String getResourceId() {
@@ -133,8 +118,7 @@
 
     /**
      * 
-     * @param resourceId
-     *     The resource_id
+     * @param resourceId The resource_id
      */
     @JsonProperty("resource_id")
     public void setResourceId(String resourceId) {
@@ -143,8 +127,7 @@
 
     /**
      * 
-     * @return
-     *     The action
+     * @return The action
      */
     @JsonProperty("action")
     public String getAction() {
@@ -153,8 +136,7 @@
 
     /**
      * 
-     * @param action
-     *     The action
+     * @param action The action
      */
     @JsonProperty("action")
     public void setAction(String action) {
@@ -163,8 +145,7 @@
 
     /**
      * 
-     * @return
-     *     The type
+     * @return The type
      */
     @JsonProperty("type")
     public String getType() {
@@ -173,8 +154,7 @@
 
     /**
      * 
-     * @param type
-     *     The type
+     * @param type The type
      */
     @JsonProperty("type")
     public void setType(String type) {
@@ -183,8 +163,7 @@
 
     /**
      * 
-     * @return
-     *     The metadata
+     * @return The metadata
      */
     @JsonProperty("metadata")
     public Metadata getMetadata() {
@@ -193,8 +172,7 @@
 
     /**
      * 
-     * @param metadata
-     *     The metadata
+     * @param metadata The metadata
      */
     @JsonProperty("metadata")
     public void setMetadata(Metadata metadata) {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestIdentityUrl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestIdentityUrl.java
index 1694529..d7dc2a8 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestIdentityUrl.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestIdentityUrl.java
@@ -28,9 +28,7 @@
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-
 import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openecomp.appc.adapter.iaas.impl.IdentityURL;
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderAdapterImpl.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderAdapterImpl.java
index 1e827b7..cbca170 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderAdapterImpl.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderAdapterImpl.java
@@ -29,7 +29,6 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
-
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.util.HashMap;
@@ -37,7 +36,6 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
-
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
@@ -61,7 +59,6 @@
 import com.att.cdp.zones.model.Server;
 import com.att.cdp.zones.model.Server.Status;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import com.woorea.openstack.keystone.model.Access.Service.Endpoint;
 
 /**
@@ -100,15 +97,12 @@
     private ProviderAdapterImpl adapter;
 
     /**
-     * Use reflection to locate fields and methods so that they can be manipulated during the test to change the
-     * internal state accordingly.
+     * Use reflection to locate fields and methods so that they can be manipulated during the test
+     * to change the internal state accordingly.
      * 
-     * @throws NoSuchFieldException
-     *             if the field(s) dont exist
-     * @throws SecurityException
-     *             if reflective access is not allowed
-     * @throws NoSuchMethodException
-     *             If the method(s) dont exist
+     * @throws NoSuchFieldException if the field(s) dont exist
+     * @throws SecurityException if reflective access is not allowed
+     * @throws NoSuchMethodException If the method(s) dont exist
      */
     @SuppressWarnings("nls")
     @BeforeClass
@@ -135,16 +129,14 @@
     /**
      * Setup the test environment.
      * 
-     * @throws IllegalAccessException
-     *             if this Field object is enforcing Java language access control and the underlying field is either
-     *             inaccessible or final.
-     * @throws IllegalArgumentException
-     *             if the specified object is not an instance of the class or interface declaring the underlying field
-     *             (or a subclass or implementor thereof), or if an unwrapping conversion fails.
-     * @throws NullPointerException
-     *             if the specified object is null and the field is an instance field.
-     * @throws ExceptionInInitializerError
-     *             if the initialization provoked by this method fails.
+     * @throws IllegalAccessException if this Field object is enforcing Java language access control
+     *         and the underlying field is either inaccessible or final.
+     * @throws IllegalArgumentException if the specified object is not an instance of the class or
+     *         interface declaring the underlying field (or a subclass or implementor thereof), or
+     *         if an unwrapping conversion fails.
+     * @throws NullPointerException if the specified object is null and the field is an instance
+     *         field.
+     * @throws ExceptionInInitializerError if the initialization provoked by this method fails.
      */
     @Before
     public void setup() throws IllegalArgumentException, IllegalAccessException {
@@ -154,19 +146,16 @@
     }
 
     /**
-     * This method inspects the provider adapter implementation to make sure that the cache of providers and tenants, as
-     * well as the service catalog, and all pools of contexts have been set up correctly.
+     * This method inspects the provider adapter implementation to make sure that the cache of
+     * providers and tenants, as well as the service catalog, and all pools of contexts have been
+     * set up correctly.
      * 
-     * @throws IllegalAccessException
-     *             if this Field object is enforcing Java language access control and the underlying field is
-     *             inaccessible.
-     * @throws IllegalArgumentException
-     *             if the specified object is not an instance of the class or interface declaring the underlying field
-     *             (or a subclass or implementor thereof).
+     * @throws IllegalAccessException if this Field object is enforcing Java language access control
+     *         and the underlying field is inaccessible.
+     * @throws IllegalArgumentException if the specified object is not an instance of the class or
+     *         interface declaring the underlying field (or a subclass or implementor thereof).
      */
-    @SuppressWarnings({
-        "unchecked"
-    })
+    @SuppressWarnings({"unchecked"})
     @Ignore
     @Test
     public void validateCacheIsCreatedCorrectly() throws IllegalArgumentException, IllegalAccessException {
@@ -199,18 +188,18 @@
         assertNotNull(serviceTypes);
         assertEquals(12, serviceTypes.size());
 
-        assertEquals(TENANT_NAME, catalog.getTenantName());
-        assertEquals(TENANT_ID, catalog.getTenantId());
+        assertEquals(TENANT_NAME, catalog.getProjectName());
+        assertEquals(TENANT_ID, catalog.getProjectId());
 
         Set<String> regionNames = catalog.getRegions();
         assertNotNull(regionNames);
         assertEquals(1, regionNames.size());
         assertTrue(regionNames.contains(REGION_NAME));
 
-        List<Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.IDENTITY_SERVICE);
+        List<?> endpoints = catalog.getEndpoints(ServiceCatalog.IDENTITY_SERVICE);
         assertNotNull(endpoints);
         assertEquals(1, endpoints.size());
-        Endpoint endpoint = endpoints.get(0);
+        Endpoint endpoint = (Endpoint) endpoints.get(0);
         assertNotNull(endpoint);
         assertEquals(REGION_NAME, endpoint.getRegion());
         assertEquals(IDENTITY_URL, endpoint.getPublicURL());
@@ -218,28 +207,28 @@
         endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);
         assertNotNull(endpoints);
         assertEquals(1, endpoints.size());
-        endpoint = endpoints.get(0);
+        endpoint = (Endpoint) endpoints.get(0);
         assertNotNull(endpoint);
         assertEquals(REGION_NAME, endpoint.getRegion());
 
         endpoints = catalog.getEndpoints(ServiceCatalog.VOLUME_SERVICE);
         assertNotNull(endpoints);
         assertEquals(1, endpoints.size());
-        endpoint = endpoints.get(0);
+        endpoint = (Endpoint) endpoints.get(0);
         assertNotNull(endpoint);
         assertEquals(REGION_NAME, endpoint.getRegion());
 
         endpoints = catalog.getEndpoints(ServiceCatalog.IMAGE_SERVICE);
         assertNotNull(endpoints);
         assertEquals(1, endpoints.size());
-        endpoint = endpoints.get(0);
+        endpoint = (Endpoint) endpoints.get(0);
         assertNotNull(endpoint);
         assertEquals(REGION_NAME, endpoint.getRegion());
 
         endpoints = catalog.getEndpoints(ServiceCatalog.NETWORK_SERVICE);
         assertNotNull(endpoints);
         assertEquals(1, endpoints.size());
-        endpoint = endpoints.get(0);
+        endpoint = (Endpoint) endpoints.get(0);
         assertNotNull(endpoint);
         assertEquals(REGION_NAME, endpoint.getRegion());
 
@@ -251,23 +240,21 @@
     }
 
     /**
-     * This test case is used to actually validate that a server has been restarted from an already running state
+     * This test case is used to actually validate that a server has been restarted from an already
+     * running state
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException 
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException
      */
     // @Ignore
     @Test
     public void testRestartRunningServer()
-        throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException {
+            throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -297,27 +284,24 @@
         }
     }
 
-    
+
     /****************************************/
     /**
-     * Tests that the vmStatuschecker method works and returns the correct status of the VM requested
+     * Tests that the vmStatuschecker method works and returns the correct status of the VM
+     * requested
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws IOException if an I/O error occurs
+     * @throws UnknownProviderException If the provider cannot be found
      */
     // @Ignore
     @Test
     public void testVmStatuschecker() throws IllegalStateException, IllegalArgumentException, ZoneException,
-        UnknownProviderException, IOException {
+            UnknownProviderException, IOException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -333,33 +317,32 @@
             Server server = computeService.getServer(vm.getServerId());
             if (!server.getStatus().equals(Status.RUNNING)) {
                 server.start();
-                assertTrue(waitForStateChange(server, Status.RUNNING));}
-            //or instead of the if-block, can ensureRunning(server) be used?
+                assertTrue(waitForStateChange(server, Status.RUNNING));
+            }
+            // or instead of the if-block, can ensureRunning(server) be used?
             ensureRunning(server);
             assertEquals(Server.Status.RUNNING, server.getStatus());
-        }   
+        }
     }
+
     /****************************************/
-    
-    
+
+
     /**
      * Tests that we can restart a server that is already stopped
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid.
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException 
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid.
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException
      */
     // @Ignore
     @Test
     public void testRestartStoppedServer()
-        throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException {
+            throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -392,24 +375,19 @@
     /**
      * Tests that we can rebuild a running server (not created from a bootable volume)
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid.
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException
-     *             If the server cannot be rebuilt for some reason
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid.
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws UnknownProviderException If the provider cannot be found
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException If the server cannot be rebuilt for some reason
      */
     // @Ignore
     @Test
     public void testRebuildRunningServer()
-        throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
+            throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -438,24 +416,19 @@
     /**
      * Tests that we can rebuild a paused server (not created from a bootable volume)
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid.
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException
-     *             If the server cannot be rebuilt for some reason
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid.
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws UnknownProviderException If the provider cannot be found
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException If the server cannot be rebuilt for some reason
      */
     // @Ignore
     @Test
     public void testRebuildPausedServer()
-        throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
+            throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -483,24 +456,19 @@
     /**
      * Tests that we can rebuild a paused server (not created from a bootable volume)
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid.
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException
-     *             If the server cannot be rebuilt for some reason
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid.
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws UnknownProviderException If the provider cannot be found
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException If the server cannot be rebuilt for some reason
      */
     // @Ignore
     @Test
     public void testRebuildSuspendedServer()
-        throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
+            throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -528,24 +496,19 @@
     /**
      * Tests that we can rebuild a paused server (not created from a bootable volume)
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid.
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws UnknownProviderException
-     *             If the provider cannot be found
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException
-     *             If the server cannot be rebuilt for some reason
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid.
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws UnknownProviderException If the provider cannot be found
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException If the server cannot be rebuilt for some reason
      */
     // @Ignore
     @Test
     public void testRebuildStoppedServer()
-        throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
+            throws IOException, IllegalStateException, IllegalArgumentException, ZoneException, APPCException {
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
         properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
@@ -571,98 +534,97 @@
     }
 
     /**
-     * Test subsequent action on second vm in different Tenant resulting in {"itemNotFound": {"message": "Instance could not be found", "code": 404}}
+     * Test subsequent action on second vm in different Tenant resulting in {"itemNotFound":
+     * {"message": "Instance could not be found", "code": 404}}
      * 
-     * @throws ZoneException
-     *             If the login cannot be performed because the principal and/or credentials are invalid.
-     * @throws IllegalArgumentException
-     *             If the principal and/or credential are null or empty, or if the expected argument(s) are not defined
-     *             or are invalid
-     * @throws IllegalStateException
-     *             If the identity service is not available or cannot be created
-     * @throws IOException
-     *             if an I/O error occurs
-     * @throws APPCException 
+     * @throws ZoneException If the login cannot be performed because the principal and/or
+     *         credentials are invalid.
+     * @throws IllegalArgumentException If the principal and/or credential are null or empty, or if
+     *         the expected argument(s) are not defined or are invalid
+     * @throws IllegalStateException If the identity service is not available or cannot be created
+     * @throws IOException if an I/O error occurs
+     * @throws APPCException
      */
 
     @Test
-    public void testTenantVerification() throws IllegalStateException, IllegalArgumentException, ZoneException,
-        IOException, APPCException {
-        
+    public void testTenantVerification()
+            throws IllegalStateException, IllegalArgumentException, ZoneException, IOException, APPCException {
+
         Properties properties = new Properties();
         properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, "http://example.com:5000");
         properties.setProperty(ContextFactory.PROPERTY_TENANT, "APP-C");
         properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*");
 
         String vmUrl =
-            "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+                "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
 
-        //try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) {
-        //    context.login("AppC", "AppC");
-            
-            // call lookupServer on vm in defined tenant "APP-C_TLV"
-            VMURL vm = VMURL.parseURL(vmUrl);
+        // try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) {
+        // context.login("AppC", "AppC");
 
-            Map<String, String> params = new HashMap<>();
-            params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
-            params.put(ProviderAdapter.PROPERTY_IDENTITY_URL, "http://example.com:5000/v2.0");
-            params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, "http://example.com:5000/v2.0");
-            SvcLogicContext svcContext = new SvcLogicContext();
-            
-            long start, end = 0;
+        // call lookupServer on vm in defined tenant "APP-C_TLV"
+        VMURL vm = VMURL.parseURL(vmUrl);
 
-            System.out.println("\n--------------------Begin lookupServer on tenant 1--------------------");          
-            start = System.currentTimeMillis();
-            Server server = adapter.lookupServer(params, svcContext);
-            end = System.currentTimeMillis();
-            
-            System.out.println(String.format("lookupServer on tenant 1 took %ds", (end - start) / 1000));
-            System.out.println("----------------------------------------------------------------------\n");
-            assertNotNull(server);
-            
-            //repeat to show that context is reused for second request
-            System.out.println("\n-----------------Begin repeat lookupServer on tenant 1----------------");               
-            start = System.currentTimeMillis();
-            server = adapter.lookupServer(params, svcContext);
-            end = System.currentTimeMillis();
-            
-            System.out.println(String.format("Repeat lookupServer on tenant 1 took %ds", (end - start) / 1000));
-            System.out.println("----------------------------------------------------------------------\n");
-            assertNotNull(server);
-            
-            // call lookupServer on vm in second tenant "Play"
-            // This is where we would fail due to using the previous
-            // tenants context
-            vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
-            vm = VMURL.parseURL(vmUrl);
-            params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
-            
-            System.out.println("\n--------------------Begin lookupServer on tenant 2--------------------");
-            start = System.currentTimeMillis();
-            server = adapter.lookupServer(params, svcContext);
-            end = System.currentTimeMillis();
-            System.out.println(String.format("\nlookupServer on tenant 2 took %ds", (end - start) / 1000));
-            System.out.println("----------------------------------------------------------------------\n");
-            assertNotNull(server);
-            
-            // call lookupServer on vm in non-existing tenant
-            vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
-            vm = VMURL.parseURL(vmUrl);
-            params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
-            
-            System.out.println("\n--------------Begin lookupServer on non-existant tenant--------------");
-            start = System.currentTimeMillis();
-            server = adapter.lookupServer(params, svcContext);
-            end = System.currentTimeMillis();            
-            System.out.println(String.format("\nlookupServer on tenant 3 took %ds", (end - start) / 1000));
-            System.out.println("----------------------------------------------------------------------\n");
-            assertNull(server);
-            
-        //}
+        Map<String, String> params = new HashMap<>();
+        params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
+        params.put(ProviderAdapter.PROPERTY_IDENTITY_URL, "http://example.com:5000/v2.0");
+        params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, "http://example.com:5000/v2.0");
+        SvcLogicContext svcContext = new SvcLogicContext();
+
+        long start, end = 0;
+
+        System.out.println("\n--------------------Begin lookupServer on tenant 1--------------------");
+        start = System.currentTimeMillis();
+        Server server = adapter.lookupServer(params, svcContext);
+        end = System.currentTimeMillis();
+
+        System.out.println(String.format("lookupServer on tenant 1 took %ds", (end - start) / 1000));
+        System.out.println("----------------------------------------------------------------------\n");
+        assertNotNull(server);
+
+        // repeat to show that context is reused for second request
+        System.out.println("\n-----------------Begin repeat lookupServer on tenant 1----------------");
+        start = System.currentTimeMillis();
+        server = adapter.lookupServer(params, svcContext);
+        end = System.currentTimeMillis();
+
+        System.out.println(String.format("Repeat lookupServer on tenant 1 took %ds", (end - start) / 1000));
+        System.out.println("----------------------------------------------------------------------\n");
+        assertNotNull(server);
+
+        // call lookupServer on vm in second tenant "Play"
+        // This is where we would fail due to using the previous
+        // tenants context
+        vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+        vm = VMURL.parseURL(vmUrl);
+        params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
+
+        System.out.println("\n--------------------Begin lookupServer on tenant 2--------------------");
+        start = System.currentTimeMillis();
+        server = adapter.lookupServer(params, svcContext);
+        end = System.currentTimeMillis();
+        System.out.println(String.format("\nlookupServer on tenant 2 took %ds", (end - start) / 1000));
+        System.out.println("----------------------------------------------------------------------\n");
+        assertNotNull(server);
+
+        // call lookupServer on vm in non-existing tenant
+        vmUrl = "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+        vm = VMURL.parseURL(vmUrl);
+        params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, vmUrl);
+
+        System.out.println("\n--------------Begin lookupServer on non-existant tenant--------------");
+        start = System.currentTimeMillis();
+        server = adapter.lookupServer(params, svcContext);
+        end = System.currentTimeMillis();
+        System.out.println(String.format("\nlookupServer on tenant 3 took %ds", (end - start) / 1000));
+        System.out.println("----------------------------------------------------------------------\n");
+        assertNull(server);
+
+        // }
     }
+
     /****************************************/
 
-    
+
     @Test
     public void testSnapshotServer() throws Exception {
         Properties properties = new Properties();
@@ -672,7 +634,7 @@
         properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*");
 
         String vmUrl =
-            "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
+                "http://192.168.1.2:8774/v2/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
 
         try (Context context = ContextFactory.getContext(PROVIDER_TYPE, properties)) {
             context.login("AppC", "AppC");
@@ -704,10 +666,8 @@
     /**
      * Ensures that the server is in stopped (shutdown) state prior to test
      * 
-     * @param server
-     *            The server to ensure is stopped
-     * @throws ZoneException
-     *             If the server can't be operated upon for some reason
+     * @param server The server to ensure is stopped
+     * @throws ZoneException If the server can't be operated upon for some reason
      */
     @SuppressWarnings("nls")
     private static void ensureStopped(Server server) throws ZoneException {
@@ -717,7 +677,7 @@
 
             case PENDING:
                 waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED,
-                    Server.Status.SUSPENDED, Server.Status.ERROR);
+                        Server.Status.SUSPENDED, Server.Status.ERROR);
                 ensureSuspended(server);
                 break;
 
@@ -750,10 +710,8 @@
     /**
      * Ensures that the server is in suspended state prior to test
      * 
-     * @param server
-     *            The server to ensure is suspended
-     * @throws ZoneException
-     *             If the server can't be operated upon for some reason
+     * @param server The server to ensure is suspended
+     * @throws ZoneException If the server can't be operated upon for some reason
      */
     @SuppressWarnings("nls")
     private static void ensureSuspended(Server server) throws ZoneException {
@@ -763,7 +721,7 @@
 
             case PENDING:
                 waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED,
-                    Server.Status.SUSPENDED, Server.Status.ERROR);
+                        Server.Status.SUSPENDED, Server.Status.ERROR);
                 ensureSuspended(server);
                 break;
 
@@ -796,10 +754,8 @@
     /**
      * This method makes sure that the indicated server is running before performing a test
      * 
-     * @param server
-     *            The server to ensure is running
-     * @throws ZoneException
-     *             If the server can't be operated upon
+     * @param server The server to ensure is running
+     * @throws ZoneException If the server can't be operated upon
      */
     @SuppressWarnings("nls")
     private static void ensureRunning(Server server) throws ZoneException {
@@ -809,7 +765,7 @@
 
             case PENDING:
                 waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED,
-                    Server.Status.SUSPENDED, Server.Status.ERROR);
+                        Server.Status.SUSPENDED, Server.Status.ERROR);
                 ensureRunning(server);
                 break;
 
@@ -838,10 +794,8 @@
     /**
      * This method will make sure that the server we are testing is paused
      * 
-     * @param server
-     *            The server to make sure is paused for the test
-     * @throws ZoneException
-     *             If anything fails
+     * @param server The server to make sure is paused for the test
+     * @throws ZoneException If anything fails
      */
     @SuppressWarnings("nls")
     private static void ensurePaused(Server server) throws ZoneException {
@@ -851,7 +805,7 @@
 
             case PENDING:
                 waitForStateChange(server, Server.Status.READY, Server.Status.RUNNING, Server.Status.PAUSED,
-                    Server.Status.SUSPENDED, Server.Status.ERROR);
+                        Server.Status.SUSPENDED, Server.Status.ERROR);
                 ensurePaused(server);
                 break;
 
@@ -882,23 +836,24 @@
     }
 
     /**
-     * Enter a pool-wait loop checking the server state to see if it has entered one of the desired states or not.
+     * Enter a pool-wait loop checking the server state to see if it has entered one of the desired
+     * states or not.
      * <p>
-     * This method checks the state of the server periodically for one of the desired states. When the server enters one
-     * of the desired states, the method returns a successful indication (true). If the server never enters one of the
-     * desired states within the alloted timeout period, then the method returns a failed response (false). No
-     * exceptions are thrown from this method.
+     * This method checks the state of the server periodically for one of the desired states. When
+     * the server enters one of the desired states, the method returns a successful indication
+     * (true). If the server never enters one of the desired states within the alloted timeout
+     * period, then the method returns a failed response (false). No exceptions are thrown from this
+     * method.
      * </p>
      * 
-     * @param server
-     *            The server to wait on
-     * @param desiredStates
-     *            A variable list of desired states, any one of which is allowed.
-     * @return True if the server entered one of the desired states, and false if not and the wait loop timed out.
+     * @param server The server to wait on
+     * @param desiredStates A variable list of desired states, any one of which is allowed.
+     * @return True if the server entered one of the desired states, and false if not and the wait
+     *         loop timed out.
      */
     private static boolean waitForStateChange(Server server, Server.Status... desiredStates) {
-        int timeout =
-            ConfigurationFactory.getConfiguration().getIntegerProperty(Constants.PROPERTY_SERVER_STATE_CHANGE_TIMEOUT);
+        int timeout = ConfigurationFactory.getConfiguration()
+                .getIntegerProperty(Constants.PROPERTY_SERVER_STATE_CHANGE_TIMEOUT);
         long limit = System.currentTimeMillis() + (timeout * 1000);
         Server vm = server;
 
@@ -925,20 +880,22 @@
     }
 
     /*
-     * @Test public void testTerminateStack() throws IllegalStateException, IllegalArgumentException, ZoneException,
-     * UnknownProviderException, IOException { Properties properties = new Properties();
-     * properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL, IDENTITY_URL);
-     * properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
+     * @Test public void testTerminateStack() throws IllegalStateException,
+     * IllegalArgumentException, ZoneException, UnknownProviderException, IOException { Properties
+     * properties = new Properties(); properties.setProperty(ContextFactory.PROPERTY_IDENTITY_URL,
+     * IDENTITY_URL); properties.setProperty(ContextFactory.PROPERTY_REGION, REGION_NAME);
      * properties.setProperty(ContextFactory.PROPERTY_TENANT, TENANT_NAME);
      * properties.setProperty(ContextFactory.PROPERTY_TRUSTED_HOSTS, "*");
      * properties.setProperty(ContextFactory.PROPERTY_DISABLE_PROXY, "true"); try (Context context =
-     * ContextFactory.getContext(PROVIDER_TYPE, properties)) { context.login(PRINCIPAL, CREDENTIAL); VMURL vm =
-     * VMURL.parseURL(SERVER_URL); ComputeService computeService = context.getComputeService(); Server server =
-     * computeService.getServer(vm.getServerId()); if (!server.getStatus().equals(Status.RUNNING)) { server.start();
-     * assertTrue(waitForStateChange(server, Status.RUNNING)); } Map<String, String> params = new HashMap<>();
-     * params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL); params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME,
-     * PROVIDER_NAME); SvcLogicContext svcContext = new SvcLogicContext(); Stack stack = adapter.terminateStack(params,
-     * svcContext); assertNotNull(stack); } }
+     * ContextFactory.getContext(PROVIDER_TYPE, properties)) { context.login(PRINCIPAL, CREDENTIAL);
+     * VMURL vm = VMURL.parseURL(SERVER_URL); ComputeService computeService =
+     * context.getComputeService(); Server server = computeService.getServer(vm.getServerId()); if
+     * (!server.getStatus().equals(Status.RUNNING)) { server.start();
+     * assertTrue(waitForStateChange(server, Status.RUNNING)); } Map<String, String> params = new
+     * HashMap<>(); params.put(ProviderAdapter.PROPERTY_INSTANCE_URL, SERVER_URL);
+     * params.put(ProviderAdapter.PROPERTY_PROVIDER_NAME, PROVIDER_NAME); SvcLogicContext svcContext
+     * = new SvcLogicContext(); Stack stack = adapter.terminateStack(params, svcContext);
+     * assertNotNull(stack); } }
      */
 
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderOperation.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderOperation.java
index a954a70..56c67dd 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderOperation.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestProviderOperation.java
@@ -26,7 +26,6 @@
 
 import java.lang.reflect.Field;
 import java.util.Map;
-
 import org.openecomp.appc.adapter.iaas.provider.operation.impl.base.ProviderOperation;
 import org.openecomp.appc.exceptions.APPCException;
 import com.att.cdp.zones.model.ModelObject;
@@ -34,21 +33,19 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.slf4j.MDC;
-
 import org.openecomp.appc.configuration.ConfigurationFactory;
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
-
 import static org.openecomp.appc.adapter.iaas.provider.operation.common.constants.Constants.MDC_SERVICE;
 
 /**
- * This class is used to test methods and functions of the adapter implementation that do not require and do not set up
- * connections to any providers.
+ * This class is used to test methods and functions of the adapter implementation that do not
+ * require and do not set up connections to any providers.
  *
  * @since Jan 20, 2016
  * @version $Id$
  */
 
-public class TestProviderOperation extends ProviderOperation{
+public class TestProviderOperation extends ProviderOperation {
 
     private static Class<?> providerAdapterImplClass;
     private static Class<?> configurationFactoryClass;
@@ -56,15 +53,12 @@
     private static Field configField;
 
     /**
-     * Use reflection to locate fields and methods so that they can be manipulated during the test to change the
-     * internal state accordingly.
+     * Use reflection to locate fields and methods so that they can be manipulated during the test
+     * to change the internal state accordingly.
      *
-     * @throws NoSuchFieldException
-     *             if the field(s) dont exist
-     * @throws SecurityException
-     *             if reflective access is not allowed
-     * @throws NoSuchMethodException
-     *             If the method(s) dont exist
+     * @throws NoSuchFieldException if the field(s) dont exist
+     * @throws SecurityException if reflective access is not allowed
+     * @throws NoSuchMethodException If the method(s) dont exist
      */
     @SuppressWarnings("nls")
     @BeforeClass
@@ -82,8 +76,7 @@
     /**
      * This test expects a failure because the value to be validated is a null URL
      *
-     * @throws RequestFailedException
-     *             Expected
+     * @throws RequestFailedException Expected
      */
     @SuppressWarnings("nls")
     @Test(expected = RequestFailedException.class)
@@ -99,8 +92,7 @@
     /**
      * This test expects a failure because the value to be validated is an empty URL
      *
-     * @throws RequestFailedException
-     *             Expected
+     * @throws RequestFailedException Expected
      */
     @SuppressWarnings("nls")
     @Test(expected = RequestFailedException.class)
@@ -116,8 +108,7 @@
     /**
      * This test expects a failure because the value to be validated is a blank URL
      *
-     * @throws RequestFailedException
-     *             Expected
+     * @throws RequestFailedException Expected
      */
     @SuppressWarnings("nls")
     @Test(expected = RequestFailedException.class)
@@ -133,8 +124,7 @@
     /**
      * This test expects a failure because the value to be validated is a bad URL
      *
-     * @throws RequestFailedException
-     *             Expected
+     * @throws RequestFailedException Expected
      */
     @SuppressWarnings("nls")
     @Test(expected = RequestFailedException.class)
@@ -150,8 +140,7 @@
     /**
      * This test expects to pass
      *
-     * @throws RequestFailedException
-     *             Un-Expected
+     * @throws RequestFailedException Un-Expected
      */
     @SuppressWarnings("nls")
     @Test
@@ -160,13 +149,14 @@
         SvcLogicContext svcContext = new SvcLogicContext();
         RequestContext rc = new RequestContext(svcContext);
         String link =
-            "http://some.host:1234/v2/01d82c08594a4b23a0f9260c94be0c4d/servers/f888f89f-096b-421e-ba36-34f714071551";
+                "http://some.host:1234/v2/01d82c08594a4b23a0f9260c94be0c4d/servers/f888f89f-096b-421e-ba36-34f714071551";
 
         validateVMURL(VMURL.parseURL(link));
     }
 
     @Override
-    protected ModelObject executeProviderOperation(Map<String, String> params, SvcLogicContext context) throws APPCException {
+    protected ModelObject executeProviderOperation(Map<String, String> params, SvcLogicContext context)
+            throws APPCException {
         return null;
     }
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestRequestContext.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestRequestContext.java
index 1c67e2d..efb40df 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestRequestContext.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestRequestContext.java
@@ -26,7 +26,6 @@
 package org.openecomp.appc.adapter.iaas.impl;
 
 import static org.junit.Assert.*;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.openecomp.appc.Constants;
@@ -37,7 +36,8 @@
 /**
  * Test the RequestContext object
  * <p>
- * The request context is used to track retries, recovery attempts, and time to live of the processing of a request.
+ * The request context is used to track retries, recovery attempts, and time to live of the
+ * processing of a request.
  * </p>
  */
 
@@ -47,8 +47,8 @@
     private Configuration config = ConfigurationFactory.getConfiguration();
 
     /**
-     * Set up the test environment by forcing the retry delay and limit to small values for the test and setting up the
-     * request context object.
+     * Set up the test environment by forcing the retry delay and limit to small values for the test
+     * and setting up the request context object.
      */
     @Before
     public void setup() {
@@ -95,8 +95,8 @@
     }
 
     /**
-     * The RequestContext tracks the number of retry attempts against the limit. This test verifies that tracking logic
-     * works correctly.
+     * The RequestContext tracks the number of retry attempts against the limit. This test verifies
+     * that tracking logic works correctly.
      */
     @Test
     public void testCanRetry() {
@@ -116,10 +116,10 @@
     }
 
     /**
-     * The same RequestContext is used throughout the processing, and retries need to be reset once successfully
-     * connected so that any earlier (successful) recoveries are not considered when performing any new future
-     * recoveries. This test ensures that a reset clears the retry counter and that we can attempt retries again up to
-     * the limit.
+     * The same RequestContext is used throughout the processing, and retries need to be reset once
+     * successfully connected so that any earlier (successful) recoveries are not considered when
+     * performing any new future recoveries. This test ensures that a reset clears the retry counter
+     * and that we can attempt retries again up to the limit.
      */
     @Test
     public void testResetAndCanRetry() {
@@ -137,10 +137,10 @@
     }
 
     /**
-     * This test is used to test tracking of time to live for the request context. Because time is inexact, the
-     * assertions can only be ranges of values, such as at least some value or greater. The total duration tracking in
-     * the request context is only updated on each call to {@link RequestContext#isAlive()}. Also, durations are NOT
-     * affected by calls to reset.
+     * This test is used to test tracking of time to live for the request context. Because time is
+     * inexact, the assertions can only be ranges of values, such as at least some value or greater.
+     * The total duration tracking in the request context is only updated on each call to
+     * {@link RequestContext#isAlive()}. Also, durations are NOT affected by calls to reset.
      */
     @Test
     public void testTimeToLive() {
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalog.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalog.java
index 7dbe374..be769a0 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalog.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalog.java
@@ -30,28 +30,27 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-
+import java.util.HashSet;
 import java.util.List;
 import java.util.Properties;
-
+import java.util.Set;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
-import org.openecomp.appc.adapter.iaas.impl.ServiceCatalog;
+import org.mockito.Mockito;
 import org.openecomp.appc.configuration.ConfigurationFactory;
 import com.att.cdp.exceptions.ZoneException;
-
 import com.woorea.openstack.keystone.model.Access.Service;
 
 /**
  * This class tests the service catalog against a known provider.
  */
-@Ignore
 public class TestServiceCatalog {
 
     // Number
-    private static int EXPECTED_REGIONS = 1;
+    private static int EXPECTED_REGIONS = 2;
     private static int EXPECTED_ENDPOINTS = 1;
 
     private static String PRINCIPAL;
@@ -72,12 +71,11 @@
         PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc");
         CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc");
         TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc");
-        TENANT_ID =
-            props.getProperty("provider1.tenant1.id",
+        TENANT_ID = props.getProperty("provider1.tenant1.id",
                 props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst"));
         REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne");
 
-        EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "0"));
+        EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "2"));
         EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0"));
     }
 
@@ -89,16 +87,12 @@
     @Before
     public void setup() throws ZoneException {
         properties = new Properties();
-        catalog = new ServiceCatalog(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, properties);
-    }
+        catalog = Mockito.mock(ServiceCatalog.class, Mockito.CALLS_REAL_METHODS);
+        catalog.rwLock = new ReentrantReadWriteLock();
 
-    /**
-     * Test that the tenant name and ID are returned correctly
-     */
-    @Test
-    public void testKnownTenant() {
-        assertEquals(TENANT_NAME, catalog.getTenantName());
-        assertEquals(TENANT_ID, catalog.getTenantId());
+        Set<String> testdata = new HashSet<>();
+        testdata.add("RegionOne");
+        catalog.regions = testdata;
     }
 
     /**
@@ -107,44 +101,5 @@
     @Test
     public void testKnownRegions() {
         assertEquals(EXPECTED_REGIONS, catalog.getRegions().size());
-        // assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);
-    }
-
-    /**
-     * Test that we can check for published services correctly
-     */
-    @Test
-    public void testServiceTypesPublished() {
-        assertTrue(catalog.isServicePublished("compute"));
-        assertFalse(catalog.isServicePublished("bogus"));
-    }
-
-    /**
-     * Check that we can get the list of published services
-     */
-    @Test
-    public void testPublishedServicesList() {
-        List<String> services = catalog.getServiceTypes();
-
-        assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));
-        assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));
-        assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));
-        assertTrue(services.contains(ServiceCatalog.NETWORK_SERVICE));
-        assertTrue(services.contains(ServiceCatalog.VOLUME_SERVICE));
-    }
-
-    /**
-     * Test that we can get the endpoint(s) for a service
-     */
-    @Test
-    public void testEndpointList() {
-        List<Service.Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);
-
-        assertNotNull(endpoints);
-        assertFalse(endpoints.isEmpty());
-        assertEquals(EXPECTED_ENDPOINTS, endpoints.size());
-
-        Service.Endpoint endpoint = endpoints.get(0);
-        // assertEquals(REGION_NAME, endpoint.getRegion());
     }
 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogFactory.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogFactory.java
new file mode 100644
index 0000000..e97e64d
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogFactory.java
@@ -0,0 +1,89 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import java.util.Properties;

+import org.junit.Assert;

+import org.junit.Test;

+

+public class TestServiceCatalogFactory {

+

+    @Test

+    public void testGetServiceCatalogV2() {

+        String tenantIdentifier = null;

+        String principal = null;

+        String credential = null;

+        String domain = null;

+        Properties properties = null;

+

+        String url = "http://192.168.1.1:5000/v2.0/";

+        ServiceCatalog catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential,

+                domain, properties);

+        Assert.assertNotNull(catalog);

+        Assert.assertEquals(catalog.getClass(), ServiceCatalogV2.class);

+

+        url = "http://192.168.1.1:5000/v2/";

+        catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential, domain,

+                properties);

+        Assert.assertNotNull(catalog);

+        Assert.assertEquals(catalog.getClass(), ServiceCatalogV2.class);

+

+        url = "http://192.168.1.1:5000/v2.1/";

+        catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential, domain,

+                properties);

+        Assert.assertNotNull(catalog);

+        Assert.assertEquals(catalog.getClass(), ServiceCatalogV2.class);

+

+    }

+

+    @Test

+    public void testGetServiceCatalogV3() {

+        String url = "http://192.168.1.1:5000/v3.0/";

+        String tenantIdentifier = null;

+        String principal = null;

+        String credential = null;

+        String domain = null;

+        Properties properties = null;

+        ServiceCatalog catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential,

+                domain, properties);

+

+        Assert.assertNotNull(catalog);

+        Assert.assertEquals(catalog.getClass(), ServiceCatalogV3.class);

+    }

+

+    @Test

+    public void testGetServiceCatalogOther() {

+        String url = "http://192.168.1.1:5000/v4.0/";

+        String tenantIdentifier = null;

+        String principal = null;

+        String credential = null;

+        String domain = null;

+        Properties properties = null;

+        ServiceCatalog catalog = ServiceCatalogFactory.getServiceCatalog(url, tenantIdentifier, principal, credential,

+                domain, properties);

+

+        Assert.assertNull(catalog);

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV2.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV2.java
new file mode 100644
index 0000000..c26b3be
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV2.java
@@ -0,0 +1,174 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import static org.junit.Assert.assertEquals;

+import static org.junit.Assert.assertFalse;

+import static org.junit.Assert.assertNotNull;

+import static org.junit.Assert.assertTrue;

+import com.att.cdp.exceptions.ZoneException;

+import com.woorea.openstack.keystone.model.Access.Service;

+import java.util.List;

+import java.util.Properties;

+import org.junit.Before;

+import org.junit.BeforeClass;

+import org.junit.Ignore;

+import org.junit.Test;

+import org.openecomp.appc.configuration.ConfigurationFactory;

+

+/**

+ * This class tests the service catalog against a known provider.

+ */

+@Ignore

+public class TestServiceCatalogV2 {

+

+    // Number

+    private static int EXPECTED_REGIONS = 1;

+    private static int EXPECTED_ENDPOINTS = 1;

+

+    private static String PRINCIPAL;

+    private static String CREDENTIAL;

+    private static String TENANT_NAME;

+    private static String TENANT_ID;

+    private static String IDENTITY_URL;

+    private static String REGION_NAME;

+

+    private ServiceCatalogV2 catalog;

+

+    private Properties properties;

+

+    @BeforeClass

+    public static void before() {

+        Properties props = ConfigurationFactory.getConfiguration().getProperties();

+        IDENTITY_URL = props.getProperty("provider1.identity", "appc");

+        PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc");

+        CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc");

+        TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc");

+        TENANT_ID = props.getProperty("provider1.tenant1.id",

+                props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst"));

+        REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne");

+

+        EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "0"));

+        EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0"));

+    }

+

+    /**

+     * Setup the test environment by loading a new service catalog for each test

+     * 

+     * @throws ZoneException

+     */

+    @Before

+    public void setup() throws ZoneException {

+        properties = new Properties();

+        catalog = new ServiceCatalogV2(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, properties);

+        catalog.init();

+    }

+

+    /**

+     * Test that the tenant name and ID are returned correctly

+     */

+    @Test

+    public void testKnownTenant() {

+        assertEquals(TENANT_NAME, catalog.getProjectName());

+        assertEquals(TENANT_ID, catalog.getProjectId());

+    }

+

+    /**

+     * Test that we find all of the expected region(s)

+     */

+    @Test

+    public void testKnownRegions() {

+        assertEquals(EXPECTED_REGIONS, catalog.getRegions().size());

+        // assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);

+    }

+

+    /**

+     * Test that we can check for published services correctly

+     */

+    @Test

+    public void testServiceTypesPublished() {

+        assertTrue(catalog.isServicePublished("compute"));

+        assertFalse(catalog.isServicePublished("bogus"));

+    }

+

+    /**

+     * Check that we can get the list of published services

+     */

+    @Test

+    public void testPublishedServicesList() {

+        // List<String> services = catalog.getServiceTypes();

+

+        // assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));

+        // assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));

+        // assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));

+        // assertTrue(services.contains(ServiceCatalog.NETWORK_SERVICE));

+        // assertTrue(services.contains(ServiceCatalog.VOLUME_SERVICE));

+    }

+

+    /**

+     * Test that we can get the endpoint(s) for a service

+     */

+    @Test

+    public void testEndpointList() {

+        List<Service.Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);

+

+        assertNotNull(endpoints);

+        assertFalse(endpoints.isEmpty());

+        assertEquals(EXPECTED_ENDPOINTS, endpoints.size());

+

+        Service.Endpoint endpoint = endpoints.get(0);

+        // assertEquals(REGION_NAME, endpoint.getRegion());

+    }

+

+    @Test

+    public void testToString() {

+        String testString = catalog.toString();

+        assertNotNull(testString);

+    }

+

+    @Ignore

+    @Test

+    public void liveConnectionTest() {

+        // this test should only be used by developers when testing against a live Openstack

+        // instance, otherwise it should be ignored

+        properties = new Properties();

+        String identity = "http://192.168.0.1:5000/v2.0";

+        String tenantName = "Tenant";

+        String user = "user";

+        String pass = "pass";

+

+        ServiceCatalogV2 catalog = new ServiceCatalogV2(identity, tenantName, user, pass, properties);

+

+        try {

+            catalog.init();

+        } catch (ZoneException e) {

+            // TODO Auto-generated catch block

+            e.printStackTrace();

+        }

+

+        String out = catalog.toString();

+        System.out.println(out);

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV3.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV3.java
new file mode 100644
index 0000000..14f44d1
--- /dev/null
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestServiceCatalogV3.java
@@ -0,0 +1,167 @@
+/*-

+ * ============LICENSE_START=======================================================

+ * ONAP : APPC

+ * ================================================================================

+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.

+ * ================================================================================

+ * Copyright (C) 2017 Amdocs

+ * =============================================================================

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ * 

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ * 

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ * 

+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.

+ * ============LICENSE_END=========================================================

+ */

+

+

+

+package org.openecomp.appc.adapter.iaas.impl;

+

+import static org.junit.Assert.assertEquals;

+import static org.junit.Assert.assertFalse;

+import static org.junit.Assert.assertNotNull;

+import static org.junit.Assert.assertTrue;

+import com.att.cdp.exceptions.ZoneException;

+import com.woorea.openstack.keystone.v3.model.Token.Service.Endpoint;

+import java.util.List;

+import java.util.Properties;

+import org.junit.Before;

+import org.junit.BeforeClass;

+import org.junit.Ignore;

+import org.junit.Test;

+import org.openecomp.appc.configuration.ConfigurationFactory;

+

+/**

+ * This class tests the service catalog against a known provider.

+ */

+@Ignore

+public class TestServiceCatalogV3 {

+

+    // Number

+    private static int EXPECTED_REGIONS = 1;

+    private static int EXPECTED_ENDPOINTS = 1;

+

+    private static String PRINCIPAL;

+    private static String CREDENTIAL;

+    private static String DOMAIN;

+    private static String TENANT_NAME;

+    private static String TENANT_ID;

+    private static String IDENTITY_URL;

+    private static String REGION_NAME;

+

+    private ServiceCatalogV3 catalog;

+

+    private Properties properties;

+

+    @BeforeClass

+    public static void before() {

+        Properties props = ConfigurationFactory.getConfiguration().getProperties();

+        IDENTITY_URL = props.getProperty("provider1.identity");

+        PRINCIPAL = props.getProperty("provider1.tenant1.userid", "appc");

+        CREDENTIAL = props.getProperty("provider1.tenant1.password", "appc");

+        DOMAIN = props.getProperty("provider1.tenant1.domain", "Default");

+        TENANT_NAME = props.getProperty("provider1.tenant1.name", "appc");

+        TENANT_ID = props.getProperty("provider1.tenant1.id",

+                props.getProperty("test.tenantid", "abcde12345fghijk6789lmnopq123rst"));

+        REGION_NAME = props.getProperty("provider1.tenant1.region", "RegionOne");

+

+        EXPECTED_REGIONS = Integer.valueOf(props.getProperty("test.expected-regions", "0"));

+        EXPECTED_ENDPOINTS = Integer.valueOf(props.getProperty("test.expected-endpoints", "0"));

+    }

+

+    /**

+     * Setup the test environment by loading a new service catalog for each test

+     * 

+     * @throws ZoneException

+     */

+    @Before

+    public void setup() throws ZoneException {

+        properties = new Properties();

+        catalog = new ServiceCatalogV3(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, DOMAIN, properties);

+    }

+

+    /**

+     * Test that the tenant name and ID are returned correctly

+     */

+    @Test

+    public void testKnownTenant() {

+        assertEquals(TENANT_NAME, catalog.getProjectName());

+        assertEquals(TENANT_ID, catalog.getProjectId());

+    }

+

+    /**

+     * Test that we find all of the expected region(s)

+     */

+    @Test

+    public void testKnownRegions() {

+        assertEquals(EXPECTED_REGIONS, catalog.getRegions().size());

+        // assertEquals(REGION_NAME, catalog.getRegions().toArray()[0]);

+    }

+

+    /**

+     * Test that we can check for published services correctly

+     */

+    @Test

+    public void testServiceTypesPublished() {

+        assertTrue(catalog.isServicePublished("compute"));

+        assertFalse(catalog.isServicePublished("bogus"));

+    }

+

+    /**

+     * Check that we can get the list of published services

+     */

+    @Test

+    public void testPublishedServicesList() {

+        List<String> services = catalog.getServiceTypes();

+

+        assertTrue(services.contains(ServiceCatalog.COMPUTE_SERVICE));

+        assertTrue(services.contains(ServiceCatalog.IDENTITY_SERVICE));

+        assertTrue(services.contains(ServiceCatalog.IMAGE_SERVICE));

+        assertTrue(services.contains(ServiceCatalog.NETWORK_SERVICE));

+        assertTrue(services.contains(ServiceCatalog.VOLUME_SERVICE));

+    }

+

+    /**

+     * Test that we can get the endpoint(s) for a service

+     */

+    @Test

+    public void testEndpointList() {

+        List<Endpoint> endpoints = catalog.getEndpoints(ServiceCatalog.COMPUTE_SERVICE);

+

+        assertNotNull(endpoints);

+        assertFalse(endpoints.isEmpty());

+        assertEquals(EXPECTED_ENDPOINTS, endpoints.size());

+

+        Endpoint endpoint = endpoints.get(0);

+        // assertEquals(REGION_NAME, endpoint.getRegion());

+    }

+

+    @Test

+    public void testToString() {

+        String testString = catalog.toString();

+        assertNotNull(testString);

+    }

+

+    @Ignore

+    @Test

+    public void liveConnectionTest() {

+        // this test should only be used by developers when testing against a live Openstack

+        // instance, otherwise it should be ignored

+        properties = new Properties();

+        String identity = "";

+        String tenantName = "";

+        String user = "";

+        String pass = "";

+

+        catalog = new ServiceCatalogV3(IDENTITY_URL, TENANT_NAME, PRINCIPAL, CREDENTIAL, DOMAIN, properties);

+    }

+}

diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestVMURL.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestVMURL.java
index 46dd5ee..5986fdd 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestVMURL.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/adapter/iaas/impl/TestVMURL.java
@@ -29,9 +29,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-
 import java.util.Properties;
-
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openecomp.appc.adapter.iaas.impl.VMURL;
@@ -94,22 +92,6 @@
         assertEquals("/api/multicloud/v0/cloudowner_region", url.getPath());
         assertEquals(TENANTID, url.getTenantId());
         assertEquals(VMID, url.getServerId());
-        assertEquals("v2",url.getVersion());
-        assertEquals(url.toString(), URL);
-    }
-
-    @Test
-    public void testValidURL4() {
-        URL = "http://msb.onap.org:80/api/multicloud/v0/cloudowner_region/v2.1/abcde12345fghijk6789lmnopq123rst/servers/abc12345-1234-5678-890a-abcdefg12345";
-        VMURL url = VMURL.parseURL(URL);
-        assertNotNull(url);
-        assertEquals("http", url.getScheme());
-        assertEquals("msb.onap.org", url.getHost());
-        assertEquals("80", url.getPort());
-        assertEquals("/api/multicloud/v0/cloudowner_region", url.getPath());
-        assertEquals(TENANTID, url.getTenantId());
-        assertEquals(VMID, url.getServerId());
-        assertEquals("v2.1",url.getVersion());
         assertEquals(url.toString(), URL);
     }
 
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/ExecutorHarness.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/ExecutorHarness.java
index 9dc3938..a05474a 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/ExecutorHarness.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/ExecutorHarness.java
@@ -32,9 +32,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import org.openecomp.appc.test.InterceptLogger;
-
 import org.onap.ccsdk.sli.core.sli.SvcLogicContext;
 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
 
@@ -55,38 +53,39 @@
     private Map<String, Method> methods;
 
     /**
-     * The field of the class being tested that contains the reference to the logger to be used. This is modified to
-     * point to our interception logger for the test.
+     * The field of the class being tested that contains the reference to the logger to be used.
+     * This is modified to point to our interception logger for the test.
      */
     private Field contextLogger;
 
     /**
-     * The interception logger that buffers all messages logged and allows us to look at them as part of the test case.
+     * The interception logger that buffers all messages logged and allows us to look at them as
+     * part of the test case.
      */
     private InterceptLogger logger;
 
     /**
      * Create the harness and initialize it
      * 
-     * @throws SecurityException
-     *             If a security manager, s, is present and any of the following conditions is met:
-     *             <ul>
-     *             <li>invocation of s.checkMemberAccess(this, Member.DECLARED) denies access to the declared field</li>
-     *             <li>the caller's class loader is not the same as or an ancestor of the class loader for the current
-     *             class and invocation of s.checkPackageAccess() denies access to the package of this class</li>
-     *             </ul>
-     * @throws NoSuchFieldException
-     *             if a field with the specified name is not found.
-     * @throws IllegalAccessException
-     *             if this Field object is enforcing Java language access control and the underlying field is either
-     *             inaccessible or final.
-     * @throws IllegalArgumentException
-     *             if the specified object is not an instance of the class or interface declaring the underlying field
-     *             (or a subclass or implementor thereof), or if an unwrapping conversion fails.
+     * @throws SecurityException If a security manager, s, is present and any of the following
+     *         conditions is met:
+     *         <ul>
+     *         <li>invocation of s.checkMemberAccess(this, Member.DECLARED) denies access to the
+     *         declared field</li>
+     *         <li>the caller's class loader is not the same as or an ancestor of the class loader
+     *         for the current class and invocation of s.checkPackageAccess() denies access to the
+     *         package of this class</li>
+     *         </ul>
+     * @throws NoSuchFieldException if a field with the specified name is not found.
+     * @throws IllegalAccessException if this Field object is enforcing Java language access control
+     *         and the underlying field is either inaccessible or final.
+     * @throws IllegalArgumentException if the specified object is not an instance of the class or
+     *         interface declaring the underlying field (or a subclass or implementor thereof), or
+     *         if an unwrapping conversion fails.
      */
     @SuppressWarnings("nls")
-    public ExecutorHarness() throws NoSuchFieldException, SecurityException, IllegalArgumentException,
-                    IllegalAccessException {
+    public ExecutorHarness()
+            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
         methods = new HashMap<>();
         new SvcLogicContext();
 
@@ -100,33 +99,31 @@
     /**
      * Convenience constructor
      * 
-     * @param executor
-     *            The executor to be tested by the harness
-     * @throws SecurityException
-     *             If a security manager, s, is present and any of the following conditions is met:
-     *             <ul>
-     *             <li>invocation of s.checkMemberAccess(this, Member.DECLARED) denies access to the declared field</li>
-     *             <li>the caller's class loader is not the same as or an ancestor of the class loader for the current
-     *             class and invocation of s.checkPackageAccess() denies access to the package of this class</li>
-     *             </ul>
-     * @throws NoSuchFieldException
-     *             if a field with the specified name is not found.
-     * @throws IllegalAccessException
-     *             if this Field object is enforcing Java language access control and the underlying field is either
-     *             inaccessible or final.
-     * @throws IllegalArgumentException
-     *             if the specified object is not an instance of the class or interface declaring the underlying field
-     *             (or a subclass or implementor thereof), or if an unwrapping conversion fails.
+     * @param executor The executor to be tested by the harness
+     * @throws SecurityException If a security manager, s, is present and any of the following
+     *         conditions is met:
+     *         <ul>
+     *         <li>invocation of s.checkMemberAccess(this, Member.DECLARED) denies access to the
+     *         declared field</li>
+     *         <li>the caller's class loader is not the same as or an ancestor of the class loader
+     *         for the current class and invocation of s.checkPackageAccess() denies access to the
+     *         package of this class</li>
+     *         </ul>
+     * @throws NoSuchFieldException if a field with the specified name is not found.
+     * @throws IllegalAccessException if this Field object is enforcing Java language access control
+     *         and the underlying field is either inaccessible or final.
+     * @throws IllegalArgumentException if the specified object is not an instance of the class or
+     *         interface declaring the underlying field (or a subclass or implementor thereof), or
+     *         if an unwrapping conversion fails.
      */
-    public ExecutorHarness(SvcLogicJavaPlugin executor) throws NoSuchFieldException, SecurityException,
-                    IllegalArgumentException, IllegalAccessException {
+    public ExecutorHarness(SvcLogicJavaPlugin executor)
+            throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
         this();
         setExecutor(executor);
     }
 
     /**
-     * @param executor
-     *            The java plugin class to be executed
+     * @param executor The java plugin class to be executed
      */
     public void setExecutor(SvcLogicJavaPlugin executor) {
         this.executor = executor;
@@ -150,20 +147,20 @@
     }
 
     /**
-     * Returns an indication if the named method is a valid executor method that could be called from a DG execute node
+     * Returns an indication if the named method is a valid executor method that could be called
+     * from a DG execute node
      * 
-     * @param methodName
-     *            The method name to be validated
-     * @return True if the method name meets the signature requirements, false if the method either does not exist or
-     *         does not meet the requirements.
+     * @param methodName The method name to be validated
+     * @return True if the method name meets the signature requirements, false if the method either
+     *         does not exist or does not meet the requirements.
      */
     public boolean isExecMethod(String methodName) {
         return methods.containsKey(methodName);
     }
 
     /**
-     * This method scans the executor class hierarchy to locate all methods that match the required signature of the
-     * executor and records these methods in a map.
+     * This method scans the executor class hierarchy to locate all methods that match the required
+     * signature of the executor and records these methods in a map.
      */
     private void scanExecutor() {
         methods.clear();
@@ -174,7 +171,7 @@
                 Class<?>[] paramTypes = method.getParameterTypes();
                 if (paramTypes.length == 2) {
                     if (Map.class.isAssignableFrom(paramTypes[0])
-                        && SvcLogicContext.class.isAssignableFrom(paramTypes[1])) {
+                            && SvcLogicContext.class.isAssignableFrom(paramTypes[1])) {
                         methods.put(method.getName(), method);
                     }
                 }
diff --git a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/InterceptLogger.java b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/InterceptLogger.java
index b0a8e82..efc84a1 100644
--- a/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/InterceptLogger.java
+++ b/appc-adapters/appc-iaas-adapter/appc-iaas-adapter-bundle/src/test/java/org/openecomp/appc/test/InterceptLogger.java
@@ -28,14 +28,13 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.slf4j.Marker;
-
 import ch.qos.logback.classic.Level;
 
 /**
- * This class is used as an intercept logger that can be used in testing to intercept and record all messages that are
- * logged, thus allowing a junit test case to examine the log output and make assertions.
+ * This class is used as an intercept logger that can be used in testing to intercept and record all
+ * messages that are logged, thus allowing a junit test case to examine the log output and make
+ * assertions.
  */
 public class InterceptLogger implements org.slf4j.Logger {
 
@@ -81,24 +80,21 @@
         }
 
         /**
-         * @param level
-         *            the value for level
+         * @param level the value for level
          */
         public void setLevel(Level level) {
             this.level = level;
         }
 
         /**
-         * @param message
-         *            the value for message
+         * @param message the value for message
          */
         public void setMessage(String message) {
             this.message = message;
         }
 
         /**
-         * @param timestamp
-         *            the value for timestamp
+         * @param timestamp the value for timestamp
          */
         public void setTimestamp(long timestamp) {
             this.timestamp = timestamp;
@@ -112,8 +108,7 @@
         }
 
         /**
-         * @param t
-         *            the value for t
+         * @param t the value for t
          */
         public void setThrowable(Throwable t) {
             this.t = t;
diff --git a/appc-common/src/main/java/org/openecomp/appc/i18n/Msg.java b/appc-common/src/main/java/org/openecomp/appc/i18n/Msg.java
index 5f0aa32..f4a393f 100644
--- a/appc-common/src/main/java/org/openecomp/appc/i18n/Msg.java
+++ b/appc-common/src/main/java/org/openecomp/appc/i18n/Msg.java
@@ -807,7 +807,13 @@
     /**
      * {0}
      */
-    OAM_OPERATION_INVALID_INPUT
+    OAM_OPERATION_INVALID_INPUT, 
+
+    /**
+     * Unsupported identity service version, unable to retrieve ServiceCatalog
+     * for identity service {0}
+     */
+    IAAS_UNSUPPORTED_IDENTITY_SERVICE
     ;
     /*
      * Static initializer to ensure the resource bundles for this class are loaded...
diff --git a/appc-common/src/main/resources/org/openecomp/appc/i18n/MessageResources.properties b/appc-common/src/main/resources/org/openecomp/appc/i18n/MessageResources.properties
index 86d9b55..354adff 100644
--- a/appc-common/src/main/resources/org/openecomp/appc/i18n/MessageResources.properties
+++ b/appc-common/src/main/resources/org/openecomp/appc/i18n/MessageResources.properties
@@ -1011,3 +1011,10 @@
   {0}|\
   No recovery required|\
   Fix the input parameter and retry.
+
+IAAS_UNSUPPORTED_IDENTITY_SERVICE=APPC0163E|\
+  Unsupported identity service version, unable to retrieve ServiceCatalog for identity service {0}|\
+  Verify the identity url provided is correct. Currently supported version of the OpenStack identity servicer\
+    are v2 and v3. If a support for a new version in required contact development.|\
+  This message indicates that a request was made to connect to an unsupported version of \
+    identity service.
\ No newline at end of file