Initial OpenECOMP SDC commit

Change-Id: I0924d5a6ae9cdc161ae17c68d3689a30d10f407b
Signed-off-by: Michael Lando <ml636r@att.com>
diff --git a/ui-ci/.gitignore b/ui-ci/.gitignore
new file mode 100644
index 0000000..a3b2274
--- /dev/null
+++ b/ui-ci/.gitignore
@@ -0,0 +1,3 @@
+/bin/
+test-output/
+/target/
diff --git a/ui-ci/pom.xml b/ui-ci/pom.xml
new file mode 100644
index 0000000..f5236e4
--- /dev/null
+++ b/ui-ci/pom.xml
@@ -0,0 +1,260 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+	<modelVersion>4.0.0</modelVersion>
+
+	<artifactId>ui-ci</artifactId>
+	<description>Selenium tests for the SDnC Application</description>
+
+	<parent>
+		<groupId>org.openecomp.sdc</groupId>
+		<artifactId>sdc-main</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+		
+	</parent>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.seleniumhq.selenium</groupId>
+			<artifactId>selenium-java</artifactId>
+			<version>2.48.0</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.seleniumhq.selenium</groupId>
+			<artifactId>selenium-server</artifactId>
+			<version>2.53.1</version>
+			<scope>runtime</scope>
+		</dependency>
+		
+<!-- 		<dependency>
+    		<groupId>org.seleniumhq.selenium</groupId>
+   		 	<artifactId>selenium-firefox-driver</artifactId>
+    		<version>3.0.1</version>
+		</dependency> -->
+		
+		
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>asdc-tests</artifactId>
+			<version>${asdc-tests.version}</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.yaml</groupId>
+			<artifactId>snakeyaml</artifactId>
+			<version>1.14</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.google.code.gson</groupId>
+			<artifactId>gson</artifactId>
+			<version>2.3.1</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- http client -->
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpmime</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>2.5</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-logging</groupId>
+			<artifactId>commons-logging</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- http core -->
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<!-- TITAN -->
+		<dependency>
+			<groupId>com.thinkaurelius.titan</groupId>
+			<artifactId>titan-core</artifactId>
+			<version>${titan.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.thinkaurelius.titan</groupId>
+			<artifactId>titan-cassandra</artifactId>
+			<version>${titan.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.codehaus.jackson</groupId>
+			<artifactId>jackson-mapper-asl</artifactId>
+			<version>1.9.2</version>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-databind</artifactId>
+			<version>2.3.1</version>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.fasterxml.jackson.core</groupId>
+			<artifactId>jackson-core</artifactId>
+			<version>2.3.1</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.openecomp.sdc</groupId>
+			<artifactId>sdc-distribution-client</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.testng</groupId>
+			<artifactId>testng</artifactId>
+			<version>6.9.10</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>xml-apis</groupId>
+			<artifactId>xml-apis</artifactId>
+			<version>1.4.01</version>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+			<groupId>com.googlecode.json-simple</groupId>
+			<artifactId>json-simple</artifactId>
+			<version>1.1</version>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-jci-core</artifactId>
+			<scope>compile</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>commons-codec</groupId>
+			<artifactId>commons-codec</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		
+		<dependency>
+		    <groupId>com.relevantcodes</groupId>
+		    <artifactId>extentreports</artifactId>
+		    <version>2.41.1</version>
+		</dependency>
+		
+		
+	</dependencies>
+	
+	
+	
+	<build>
+		<plugins>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-deploy-plugin</artifactId>
+				<version>2.7</version>
+				<configuration>
+					<skip>true</skip>
+				</configuration>
+			</plugin>
+
+			<!-- ============================================= -->
+			<!-- Create the JAR file with its dependencies -->
+			<!-- ============================================= -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.5.5</version>
+				<executions>
+					<execution>
+						<id>create.jar.with.dependencies</id>
+						<phase>package</phase>
+						<goals>
+							<goal>single</goal>
+						</goals>
+						<configuration>
+							<archive>
+								<manifest>
+									<mainClass>org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest</mainClass>
+								</manifest>
+							</archive>
+							<descriptorRefs>
+								<descriptorRef>jar-with-dependencies</descriptorRef>
+							</descriptorRefs>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+
+
+	<profiles>
+		<profile>
+			<id>CI</id>
+			<activation>
+				<activeByDefault>false</activeByDefault>
+			</activation>
+
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-assembly-plugin</artifactId>
+						<version>2.5.5</version>
+						<executions>
+							<execution>
+								<id>tarball</id>
+								<phase>package</phase>
+								<goals>
+									<goal>single</goal>
+								</goals>
+								<configuration>
+									<finalName>${project.artifactId}-${full.release.version}${build.type}</finalName>
+									<appendAssemblyId>false</appendAssemblyId>
+									<descriptor>${project.basedir}/tarball.xml</descriptor>
+									<attach>false</attach>
+								</configuration>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ArtifactInfo.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ArtifactInfo.java
new file mode 100644
index 0000000..4de9ae8
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ArtifactInfo.java
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public class ArtifactInfo {
+
+	private String filepath;
+	private String filename;
+	private String description;
+	private String artifactType;
+	private String artifactLabel;
+
+	public ArtifactInfo(String filepath, String filename, String description, String artifactLabel,
+			String artifactType) {
+		super();
+		this.filepath = filepath;
+		this.filename = filename;
+		this.description = description;
+		this.artifactType = artifactType;
+		this.artifactLabel = artifactLabel;
+	}
+
+	public ArtifactInfo() {
+		super();
+	}
+
+	public String getFilepath() {
+		return filepath;
+	}
+
+	public void setFilepath(String filepath) {
+		this.filepath = filepath;
+	}
+
+	public String getFilename() {
+		return filename;
+	}
+
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getArtifactType() {
+		return artifactType;
+	}
+
+	public void setArtifactType(String artifactType) {
+		this.artifactType = artifactType;
+	}
+
+	public String getArtifactLabel() {
+		return artifactLabel;
+	}
+
+	public void setArtifactLabel(String artifactLabel) {
+		this.artifactLabel = artifactLabel;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/BreadCrumbsButtonsEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/BreadCrumbsButtonsEnum.java
new file mode 100644
index 0000000..21d5f25
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/BreadCrumbsButtonsEnum.java
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum BreadCrumbsButtonsEnum {
+
+	HOME("main-menu-button-home"), CATALOG("main-menu-button-catalog"), ON_BOARDING("main-menu-button-onboard");
+
+	private String value;
+	private String value2;
+
+	public String getButton() {
+		return value;
+	}
+
+	private BreadCrumbsButtonsEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasElement.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasElement.java
new file mode 100644
index 0000000..818b488
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasElement.java
@@ -0,0 +1,65 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+
+public final class CanvasElement {
+	private final String uniqueId;
+	private ImmutablePair<Integer, Integer> location;
+	private LeftPanelCanvasItems normativeElementType;
+	private String elementType;
+
+	CanvasElement(String name, ImmutablePair<Integer, Integer> location, LeftPanelCanvasItems canvasItem) {
+		super();
+		this.uniqueId = name;
+		this.location = location;
+		normativeElementType = canvasItem;
+	}
+
+	CanvasElement(String name, ImmutablePair<Integer, Integer> location, String canvasItem) {
+		super();
+		this.uniqueId = name;
+		this.location = location;
+		elementType = canvasItem;
+	}
+
+	public String getUniqueId() {
+		return uniqueId;
+	}
+
+	public ImmutablePair<Integer, Integer> getLocation() {
+		return location;
+	}
+
+	public void setLocation(ImmutablePair<Integer, Integer> location) {
+		this.location = location;
+	}
+
+	public LeftPanelCanvasItems getNormativeElementType() {
+		return normativeElementType;
+	}
+
+	public String getElementType() {
+		return elementType;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasManager.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasManager.java
new file mode 100644
index 0000000..d5c76d1
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CanvasManager.java
@@ -0,0 +1,250 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+import static org.testng.AssertJUnit.assertNotNull;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.verificator.VfVerificator;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
+import org.openqa.selenium.By;
+import org.openqa.selenium.StaleElementReferenceException;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.testng.Assert;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public final class CanvasManager {
+	private static final String LEFT_PANEL_ELEMENT_NAME_PREFIX = "leftbar-section-content-item-";
+	private Map<String, CanvasElement> canvasElements;
+	private Actions actions;
+	private WebElement canvas;
+	private int reduceCanvasWidthFactor;
+	// Offsets Are used to find upper right corner of canvas element in order to
+	// connect links
+	private static final int CANVAS_ELEMENT_Y_OFFSET = 40;
+	private static final int CANVAS_ELEMENT_X_OFFSET = 21; // 14 - 27
+
+	private CanvasManager() {
+		canvasElements = new HashMap<>();
+		actions = new Actions(GeneralUIUtils.getDriver());
+//		canvas = GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS.getValue());
+		canvas = GeneralUIUtils.waitForClassNameVisibility("w-sdc-designer-canvas");
+		try {
+			WebElement webElement = GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS_RIGHT_PANEL.getValue());
+			reduceCanvasWidthFactor = webElement.getSize().width;
+		} catch (Exception e) {
+			reduceCanvasWidthFactor = 0;
+		}
+	}
+	
+
+	public static CanvasManager getCanvasManager() {
+		return new CanvasManager();
+	}
+
+	public List<CanvasElement> getCanvasElements() {
+		return canvasElements.values().stream().collect(Collectors.toList());
+	}
+
+	private void addCanvasElement(CanvasElement element) {
+		canvasElements.put(element.getUniqueId(), element);
+	}
+
+	private void moveElementOnCanvas(CanvasElement canvasElement, ImmutablePair<Integer, Integer> newLocation)
+			throws Exception {
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.sleep(500);
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.clickAndHold();
+		actions.moveToElement(canvas, newLocation.left, newLocation.right);
+		actions.release();
+		actions.perform();
+		canvasElement.setLocation(newLocation);
+		GeneralUIUtils.waitForLoader();
+
+	}
+
+	public void moveToFreeLocation(String containerName) {
+		int maxWait = 5000;
+		int sumOfWaiting = 0;
+		int napPeriod = 200;
+		boolean isKeepWaiting = false;
+		while (!isKeepWaiting) {
+			ImmutablePair<Integer, Integer> freePosition = getFreePosition();
+			actions.moveToElement(canvas, freePosition.left, freePosition.right);
+			actions.clickAndHold();
+			actions.release();
+			actions.perform();
+			GeneralUIUtils.sleep(napPeriod);
+			isKeepWaiting = GeneralUIUtils.getWebElementWaitForVisible("selectedCompTitle").getText()
+					.equals(containerName);
+			sumOfWaiting += napPeriod;
+			if (sumOfWaiting > maxWait) {
+				Assert.fail("Can't click on VF");
+			}
+		}
+	}
+
+	public void clickOnCanvaElement(CanvasElement canvasElement) {
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.clickAndHold();
+		actions.release();
+		actions.perform();
+	}
+
+	public void moveElementOnCanvas(CanvasElement canvasElement) throws Exception {
+		moveElementOnCanvas(canvasElement, getFreePosition());
+	}
+
+	public void deleteElementFromCanvas(CanvasElement canvasElement) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.click();
+		actions.perform();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.DELETE_INSTANCE_BUTTON.getValue())
+				.click();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		canvasElements.remove(canvasElement.getUniqueId());
+		GeneralUIUtils.waitForLoader();
+	}
+
+	private WebElement findClickElement(String dataTestId) {
+		int attempts = 0;
+		while (attempts < 2) {
+			try {
+				return GeneralUIUtils.getWebElementWaitForVisible(dataTestId);
+			} catch (StaleElementReferenceException e) {
+			}
+			attempts++;
+		}
+		return null;
+	}
+
+	public CanvasElement createElementOnCanvas(String elementName) throws Exception {
+		final String elementDataTestId = LEFT_PANEL_ELEMENT_NAME_PREFIX + elementName;
+		try {
+			WebElement element = findClickElement(elementDataTestId);
+			ImmutablePair<Integer, Integer> freePosition = getFreePosition();
+			actions.moveToElement(element, 0, 0);
+			actions.clickAndHold();
+			actions.moveToElement(canvas, freePosition.left, freePosition.right);
+			actions.release();
+			actions.perform();
+			GeneralUIUtils.waitForLoader();
+			String uniqueId = elementDataTestId + "_" + UUID.randomUUID().toString();
+			CanvasElement canvasElement = new CanvasElement(uniqueId, freePosition, elementDataTestId);
+			addCanvasElement(canvasElement);
+			SetupCDTest.getExtendTest().log(LogStatus.PASS,
+					String.format("element %s is in canvas now..", elementName));
+			return canvasElement;
+		} catch (Exception e) {
+			System.out.println("Can't create element on canvas");
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public CanvasElement createElementOnCanvas(LeftPanelCanvasItems canvasItem) throws Exception {
+		return createElementOnCanvas(canvasItem.getValue());
+	}
+
+	private ImmutablePair<Integer, Integer> getFreePosition() {
+		ImmutablePair<Integer, Integer> randomPosition = null;
+		boolean freePosition = false;
+		int minSpace = 150;
+		while (!freePosition) {
+			ImmutablePair<Integer, Integer> tempRandomPosition = getRandomPosition();
+			freePosition = !canvasElements.values().stream().map(e -> e.getLocation())
+					.filter(e -> Math.abs(e.left - tempRandomPosition.left) < minSpace
+							&& Math.abs(e.right - tempRandomPosition.right) < minSpace)
+					.findAny().isPresent();
+			randomPosition = tempRandomPosition;
+		}
+		return randomPosition;
+	}
+
+	private ImmutablePair<Integer, Integer> getRandomPosition() {
+		int edgeBuffer = 50;
+		Random random = new Random();
+		int xElement = random.nextInt(canvas.getSize().width - 2 * edgeBuffer - reduceCanvasWidthFactor) + edgeBuffer;
+		int yElement = random.nextInt(canvas.getSize().height - 2 * edgeBuffer) + edgeBuffer;
+		return new ImmutablePair<Integer, Integer>(xElement, yElement);
+	}
+
+	public void linkElements(CanvasElement firstElement, CanvasElement secondElement) throws Exception {
+		drawSimpleLink(firstElement, secondElement);
+		selectReqAndCapAndConnect();
+	}
+
+	private void selectReqAndCapAndConnect() throws Exception {
+		// Select First Cap
+		GeneralUIUtils.getWebElementsListByDataTestId(DataTestIdEnum.LinkMenuItems.LINK_ITEM_CAP.getValue()).get(0)
+				.click();
+		// Select First Req
+		GeneralUIUtils.getWebElementsListByDataTestId(DataTestIdEnum.LinkMenuItems.LINK_ITEM_REQ.getValue()).get(0)
+				.click();
+		// Connect
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LinkMenuItems.CONNECT_BUTTON.getValue()).click();
+
+		GeneralUIUtils.waitForLoader();
+	}
+
+	private void drawSimpleLink(CanvasElement firstElement, CanvasElement secondElement) throws Exception {
+		int yOffset = CANVAS_ELEMENT_Y_OFFSET;
+		int xOffset = CANVAS_ELEMENT_X_OFFSET;
+
+		actions.moveToElement(canvas, firstElement.getLocation().left + xOffset, firstElement.getLocation().right - yOffset);
+		actions.clickAndHold();
+		actions.moveToElement(canvas, secondElement.getLocation().left + xOffset, secondElement.getLocation().right - yOffset);
+		actions.release();
+		actions.perform();
+		GeneralUIUtils.ultimateWait();
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, String.format("Elements %s and %s now connected", firstElement.getElementType().split("-")[4], secondElement.getElementType().split("-")[4]));
+	}
+
+	public String updateElementNameInCanvas(CanvasElement canvasElement, String newInstanceName) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.click();
+		actions.perform();
+		WebElement updateInstanceName = GeneralUIUtils.getDriver().findElement(By.id("editPencil"));
+		updateInstanceName.click();
+		WebElement instanceNameField = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.INSTANCE_NAME_FIELD.getValue());
+		String oldInstanceName = instanceNameField.getText();
+		instanceNameField.clear();
+		instanceNameField.sendKeys(newInstanceName);
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		return oldInstanceName;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CatalogFilterTitlesEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CatalogFilterTitlesEnum.java
new file mode 100644
index 0000000..1335b51
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CatalogFilterTitlesEnum.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum CatalogFilterTitlesEnum {
+
+	TYPE("typeFilterTitle"), CATEGORIES("categoriesFilterTitle"), STATUS("statusFilterTitle");
+
+	private String value;
+
+	public String getValue() {
+		return value;
+	}
+
+	private CatalogFilterTitlesEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CheckBoxStatusEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CheckBoxStatusEnum.java
new file mode 100644
index 0000000..ffa17ee
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CheckBoxStatusEnum.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum CheckBoxStatusEnum {
+	CHECKOUT("", "checkbox-checkout"), 
+	CHECKIN("", "checkbox-checkin"), 
+	READY_FOR_TESTING("checkbox-readyfortesting","checkbox-1"), 
+	IN_TESTING("checkbox-intesting", "checkbox-2"), 
+	WAITING_FOR_DISTRIBUTION("", "checkbox-waitingforapproval"), 
+	DISTRIBUTION_REJECTED("", "checkbox-distributionrejected"), 
+	DISTRIBUTION_APPROVED("", "checkbox-distributionapproved"), 
+	CERTIFIED("checkbox-certified", "checkbox-3"), 
+	DISTRIBUTED("", "checkbox-4"), 
+	IN_DESIGN("", "checkbox-0");
+
+	private String value;
+	private String value2;
+
+	public String getValue() {
+		return value;
+	}
+
+	public String getCatalogValue() {
+		return value2;
+	}
+
+	private CheckBoxStatusEnum(String value, String value2) {
+		this.value = value;
+		this.value2 = value2;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndImportButtonsEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndImportButtonsEnum.java
new file mode 100644
index 0000000..a49c502
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndImportButtonsEnum.java
@@ -0,0 +1,27 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum CreateAndImportButtonsEnum {
+
+	IMPORT_VF, IMPORT_VFC, IMPORT_CP, IMPORT_VL, CREATE_VF, CREATE_SERVICE, CREATE_PRODUCT;
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndUpdateStepsEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndUpdateStepsEnum.java
new file mode 100644
index 0000000..ffa7400
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/CreateAndUpdateStepsEnum.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+// public enum CreateAndUpdateStepsEnum {
+// GENERAL("Generalstep"),
+// ICON("Iconstep"),
+// DEPLOYMENT_ARTIFACT("Deployment Artifactstep"),
+// INFORMATION_ARTIFACT("Information Artifactstep"),
+// PROPERTIES("Propertiesstep"),
+// COMPOSITION("Compositionstep"),
+// ACTIVITY_LOG("Activity Logstep"),
+// DEPLOYMENT_VIEW("Deploymentstep");
+//
+//
+// private String value;
+//
+// public String getValue(){
+// return value;
+// }
+//
+// private CreateAndUpdateStepsEnum(String value) {
+// this.value = value;
+// }
+//
+//
+// }
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/DataTestIdEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/DataTestIdEnum.java
new file mode 100644
index 0000000..16593fc
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/DataTestIdEnum.java
@@ -0,0 +1,380 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public final class DataTestIdEnum {
+	private DataTestIdEnum() {
+	};
+
+	public enum Dashboard {
+		IMPORT_AREA("importButtonsArea"), 
+		BUTTON_ADD_VF("createResourceButton"), 
+		BUTTON_ADD_SERVICE("createServiceButton"), 
+		IMPORT_VFC("importVFCbutton"), 
+		IMPORT_VF("importVFbutton"), 
+		IMPORT_VFC_FILE("file-importVFCbutton"), 
+		IMPORT_VF_FILE("file-importVFbutton");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private Dashboard(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum LifeCyleChangeButtons {
+		CREATE("create/save"), CHECK_IN("check_in"), 
+		SUBMIT_FOR_TESTING("submit_for_testing"), 
+		START_TESTING("start_testing"), 
+		ACCEPT("accept");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private LifeCyleChangeButtons(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum DistributionChangeButtons {
+		APPROVE("approve"), REJECT("reject"), 
+		DISTRIBUTE("distribute"), 
+		MONITOR("monitor"), 
+		APPROVE_MESSAGE("checkindialog"), 
+		RE_DISTRIBUTE("redistribute");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private DistributionChangeButtons(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum InformationalArtifacts {
+		CLOUD_QUESTIONNAIRE("Cloud Questionnaire (completed)"), 
+		FEATURES("Features"), 
+		VENDOR_TEST_RESULT("Vendor Test Result"), 
+		TEST_SCRIPTS("Test Scripts"), 
+		RESOURCE_SECURITY_TEMPLATE("Resource Security Template"), 
+		HEAT_TEMPLATE_FROM_VENDOR("HEAT Template from Vendor"),
+		CAPACITY("Capacity");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private InformationalArtifacts(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum ModalItems {
+		BROWSE_BUTTON("browseButton"), 
+		ADD("Add"), 
+		DESCRIPTION("description"), 
+		SUMBIT_FOR_TESTING_MESSAGE("changeLifeCycleMessage"), 
+		OK("OK"), 
+		CANCEL("Cancel"), 
+		ACCEP_TESTING_MESSAGE("checkindialog");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private ModalItems(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum LeftPanelCanvasItems {
+		BLOCK_STORAGE("BlockStorage"), 
+		CINDER_VOLUME("CinderVolume"), 
+		COMPUTE("Compute"), 
+		LOAD_BALANCER("LoadBalancer"), 
+		NOVA_SERVER("NovaServer"), 
+		OBJECT_STORAGE("ObjectStorage"), 
+		NEUTRON_PORT("NeutronPort"), 
+		PORT("Port"), 
+		DATABASE("Database");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private LeftPanelCanvasItems(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum LinkMenuItems {
+		CANCEL_BUTTON("link-menu-button-cancel"), 
+		CONNECT_BUTTON("link-menu-button-connect"), 
+		LINK_ITEM_CAP("link-item-capabilities"), 
+		LINK_ITEM_REQ("link-item-requirements"), 
+		LINK_MENU("link-menu-open");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private LinkMenuItems(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum GeneralCanvasItems {
+		CANVAS("canvas"), 
+		CANVAS_RIGHT_PANEL("w-sdc-designer-sidebar-head"), 
+		DELETE_INSTANCE_BUTTON("e-sdc-small-icon-delete"), 
+		UPDATE_INSTANCE_NAME("e-sdc-small-icon-update"), 
+		INSTANCE_NAME_FIELD("instanceName");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private GeneralCanvasItems(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum ResourceMetadataEnum {
+		RESOURCE_NAME("name"), 
+		DESCRIPTION("description"), 
+		CATEGORY("selectGeneralCategory"), 
+		VENDOR_NAME("vendorName"),
+		VENDOR_RELEASE("vendorRelease"), 
+		TAGS("i-sdc-tag-input"), 
+		CONTACT_ID("contactId"), 
+		ICON(" iconBox");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private ResourceMetadataEnum(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum GeneralElementsEnum {
+		CREATE_BUTTON("create/save"), 
+		CHECKIN_BUTTON("check_in"), 
+		SUBMIT_FOR_TESTING_BUTTON("submit_for_testing"), 
+		DELETE_VERSION_BUTTON("delete_version"), 
+		REVERT_BUTTON("revert"), 
+		LIFECYCLE_STATE("lifecyclestate"), 
+		VERSION_HEADER("versionHeader");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private GeneralElementsEnum(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum ArtifactPageEnum {
+
+		ADD_INFORMATIONAL_ARTIFACT("add-information-artifact-button"), 
+		ADD_DEPLOYMENT_ARTIFACT("add-deployment-artifact-button"), 
+		ADD_ANOTHER_ARTIFACT("add-another-artifact-button"), 
+		EDIT_ARTIFACT("edit_"), 
+		DELETE_ARTIFACT("delete_"), 
+		DOWNLOAD_ARTIFACT("download_"), 
+		GET_DEPLOYMENT_ARTIFACT_DESCRIPTION("description"), 
+		GET_INFORMATIONAL_ARTIFACT_DESCRIPTION("Description")
+
+		;
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private ArtifactPageEnum(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum PropertiesPageEnum {
+
+		ADD_NEW_PROPERTY("addGrey"), 
+		EDIT_PROPERTY("edit_"), 
+		DELETE_PROPERTY("delete_"), 
+		PROPERTY_NAME("propertyName"), 
+		PROPERTY_VALUE("defaultvalue"), 
+		PROPERTY_DESCRIPTION("description"),
+		PROPERTY_TYPE("propertyType"), 
+		ADD("Add"), 
+		CANCEL("Cancel"), 
+		DONE("Done"), 
+		PROPERTY_ROW("propertyRow"), 
+		SAVE("Save");
+		
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private PropertiesPageEnum(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum MainMenuButtons {
+		HOME_BUTTON("main-menu-button-home"), 
+		CATALOG_BUTTON("main-menu-button-catalog"), 
+		ONBOARD_BUTTON("main-menu-button-onboard");
+		
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private MainMenuButtons(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum MenuOptionsEnum {
+		EDIT("Edit"), 
+		CHECK_IN("Check in"), 
+		CHECK_OUT("Check out"), 
+		VIEW("View"), 
+		SUBMIT_FOR_TEST("Submit For Test"), 
+		ACCEPT("Accept"), 
+		REJECT("Reject"), 
+		START_TEST("Start test"), 
+		DISTREBUTE("Distribute");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private MenuOptionsEnum(String value) {
+			this.value = value;
+		}
+	}
+
+	public enum StepsEnum {
+		GENERAL("Generalstep"), 
+		ICON("Iconstep"), 
+		DEPLOYMENT_ARTIFACT("Deployment Artifactstep"), 
+		INFORMATION_ARTIFACT("Information Artifactstep"), 
+		PROPERTIES("Propertiesstep"), 
+		COMPOSITION("Compositionstep"), 
+		ACTIVITY_LOG("Activity Logstep"), 
+		DEPLOYMENT_VIEW("Deploymentstep"), 
+		TOSCA_ARTIFACTS("TOSCA Artifactsstep"), 
+		MONITOR("Monitor step");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private StepsEnum(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum ArtifactPopup {
+
+		BROWSE("browseButton"), 
+		ARTIFACT_DESCRIPTION("description"), 
+		ARTIFACT_LABEL("selectArtifact"), 
+		ARTIFACT_TYPE("artifacttype"), 
+		ADD_BUTTON("Add"), 
+		CANCEL_BUTTON("Cancel"), 
+		UPDATE_BUTTON("Update");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private ArtifactPopup(String value) {
+			this.value = value;
+		}
+
+	}
+
+	public enum ServiceMetadataEnum {
+		SERVICE_NAME("name"), 
+		DESCRIPTION("description"), 
+		CATEGORY("selectGeneralCategory"), 
+		PROJECT_CODE("projectCode"), 
+		TAGS("i-sdc-tag-input"), 
+		CONTACT_ID("contactId"), 
+		ICON(" iconBox");
+
+		private String value;
+
+		public String getValue() {
+			return value;
+		}
+
+		private ServiceMetadataEnum(String value) {
+			this.value = value;
+		}
+
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/GeneralCanvasItemsEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/GeneralCanvasItemsEnum.java
new file mode 100644
index 0000000..0e8f9cb
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/GeneralCanvasItemsEnum.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum GeneralCanvasItemsEnum {
+	CANVAS("canvas"), CANVAS_RIGHT_PANEL("w-sdc-designer-sidebar-head"), DELETE_INSTANCE_BUTTON(
+			"e-sdc-small-icon-delete")
+
+	;
+
+	private String value;
+
+	public String getValue() {
+		return value;
+	}
+
+	private GeneralCanvasItemsEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/LifeCycleStateEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/LifeCycleStateEnum.java
new file mode 100644
index 0000000..2927417
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/LifeCycleStateEnum.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum LifeCycleStateEnum {
+
+	CHECKOUT("IN DESIGN CHECK OUT"), 
+	CHECKIN("IN DESIGN CHECK IN"), 
+	READY_FOR_TESTING("READY FOR TESTING"), 
+	IN_TESTING("IN TESTING"), 
+	WAITING_FOR_DISTRIBUTION("WAITING FOR DISTRIBUTION"), 
+	DISTRIBUTION_REJECTED("DISTRIBUTION REJECTED"), 
+	DISTRIBUTION_APPROVED("DISTRIBUTION APPROVED"), 
+	CERTIFIED("CERTIFIED"), 
+	DISTRIBUTED("DISTRIBUTED");
+
+	private String value;
+	private String value2;
+
+	public String getValue() {
+		return value;
+	}
+
+	private LifeCycleStateEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/MenuOptionsEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/MenuOptionsEnum.java
new file mode 100644
index 0000000..d23ab18
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/MenuOptionsEnum.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum MenuOptionsEnum {
+
+	EDIT("Edit"), 
+	CHECK_IN("Check in"), 
+	CHECK_OUT("Check out"), 
+	VIEW("View"), 
+	SUBMIT_FOR_TEST("Submit For Test"),
+    ACCEPT("Accept"), 
+    REJECT("Reject"), 
+    START_TEST("Start test"), 
+    DISTREBUTE("Distribute");
+
+	private String value;
+
+	public String getValue() {
+		return value;
+	}
+
+	private MenuOptionsEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/PropertyInfo.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/PropertyInfo.java
new file mode 100644
index 0000000..385093e
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/PropertyInfo.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+import org.openecomp.sdc.ci.tests.datatypes.enums.PropertyTypeEnum;
+
+public class PropertyInfo {
+
+	public PropertyInfo() {
+		super();
+	}
+
+	public PropertyInfo(String name, String value, String desc, PropertyTypeEnum type) {
+		super();
+		this.name = name;
+		this.value = value;
+		this.type = type;
+		this.description = desc;
+	}
+
+	private String name;
+	private String value;
+	private PropertyTypeEnum type;
+	private String description;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public PropertyTypeEnum getType() {
+		return type;
+	}
+
+	public void setType(PropertyTypeEnum type) {
+		this.type = type;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ResourceCategoriesNameEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ResourceCategoriesNameEnum.java
new file mode 100644
index 0000000..921493f
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ResourceCategoriesNameEnum.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum ResourceCategoriesNameEnum {
+	
+	GENERIC("checkbox-resourcenewcategory.generic"),
+	NETWORK_CONNECTIVITY("checkbox-resourcenewcategory.networkconnectivity"),
+	NETWORK_ELEMENTS("checkbox-resourcenewcategory.generic.networkelements"),
+	ABSTRACT("checkbox-resourcenewcategory.generic.abstract"),
+	DATABASE_GENERIC("checkbox-resourcenewcategory.generic.database"),
+	INFRASTRUCTURE("checkbox-resourcenewcategory.generic.infrastructure"),
+	VIRTUAL_LINKS("checkbox-resourcenewcategory.networkconnectivity.virtuallinks"),
+	CONNECTION_POINTS("checkbox-resourcenewcategory.networkconnectivity.connectionpoints"),
+	NETWORKL4("checkbox-resourcenewcategory.networkl4+"),
+	COMMON_NETWORK_RESOURCES("checkbox-resourcenewcategory.networkl4+.commonnetworkresources"),
+	APPLICATIONL4("checkbox-resourcenewcategory.applicationl4+"),
+	WEB_SERVER("checkbox-resourcenewcategory.applicationl4+.webserver"),
+	APPLICATION_SERVER("checkbox-resourcenewcategory.applicationl4+.applicationserver"),
+	CALL_CONTROL("checkbox-resourcenewcategory.applicationl4+.callcontrol"),
+	BORDER_ELEMENT("checkbox-resourcenewcategory.applicationl4+.borderelement"),
+	MEDIA_SERVERS("checkbox-resourcenewcategory.applicationl4+.mediaservers"),
+	DATABASE("checkbox-resourcenewcategory.applicationl4+.database"),
+	FIREWALL("checkbox-resourcenewcategory.applicationl4+.firewall"),
+	LOAD_BALANCER("checkbox-resourcenewcategory.applicationl4+.loadbalancer"),
+	NETWORK_L23("checkbox-resourcenewcategory.networkl2-3"),
+	Router("checkbox-resourcenewcategory.networkl2-3.router"),
+	WAN_Connectors("checkbox-resourcenewcategory.networkl2-3.wanconnectors"),
+	LAN_CONNECTORS("checkbox-resourcenewcategory.networkl2-3.lanconnectors"),
+	GATEWAY("checkbox-resourcenewcategory.networkl2-3.gateway"),
+	INFRASTRUCTUREL23("checkbox-resourcenewcategory.networkl2-3.infrastructure");
+	
+	
+	private String value;
+	
+	public String getValue(){
+		return value;
+	}
+	
+	private ResourceCategoriesNameEnum(String value) {
+		this.value = value;
+	}
+	
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ServiceCategoriesNameEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ServiceCategoriesNameEnum.java
new file mode 100644
index 0000000..d39bba5
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/ServiceCategoriesNameEnum.java
@@ -0,0 +1,39 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum ServiceCategoriesNameEnum {
+
+	NETWORK_L13("checkbox-servicenewcategory.networkl1-3"), 
+	VOIPCALL_CONTROL("checkbox-servicenewcategory.voipcallcontrol"), 
+	NETWORKL4("checkbox-servicenewcategory.networkl4+"),
+	MOBILITY("checkbox-servicenewcategory.mobility");
+
+	private String value;
+
+	public String getValue() {
+		return value;
+	}
+
+	private ServiceCategoriesNameEnum(String value) {
+		this.value = value;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/TypesEnum.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/TypesEnum.java
new file mode 100644
index 0000000..1bff4d5
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/TypesEnum.java
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum TypesEnum {
+
+	RESOURCE("checkbox-resource"), 
+	VF("checkbox-vf"), 
+	VFC("checkbox-vfc"), 
+	CP("checkbox-cp"), 
+	VL("checkbox-vl"), 
+	SERVICE("checkbox-service"), 
+	PRODUCT("checkbox-product");
+	
+	private String value;
+
+	public String getValue() {
+		return value;
+	}
+
+	private TypesEnum(String value) {
+		this.value = value;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/UserCredentials.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/UserCredentials.java
new file mode 100644
index 0000000..870d287
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/UserCredentials.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+import org.openecomp.sdc.be.model.User;
+
+public class UserCredentials extends User {
+
+	// private String userName;
+	private String password;
+
+	public UserCredentials(String userId, String password, String firstname, String lastname) {
+		super();
+		setUserId(userId);
+		// this.userName = userName;
+		this.password = password;
+		setFirstName(firstname);
+		setLastName(lastname);
+	}
+
+	public UserCredentials() {
+		super();
+	}
+
+	// public String getUserName() {
+	// return userName;
+	// }
+	// public void setUserName(String userName) {
+	// this.userName = userName;
+	// }
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/WorkMode.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/WorkMode.java
new file mode 100644
index 0000000..199fa69
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/WorkMode.java
@@ -0,0 +1,25 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.datatypes;
+
+public enum WorkMode {
+	DEV, CD;
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/environmentLocal b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/environmentLocal
new file mode 100644
index 0000000..ea93ddf
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/datatypes/environmentLocal
@@ -0,0 +1,10 @@
+//URL designer
+urlDesigner=http://172.20.43.136:8080/sdc1/proxy-designer1#/dashboard
+//URL tester
+urlTester=http://172.20.43.136:8080/sdc1/proxy-tester1
+//URL Vagrant
+urlDesignerVagrant=http://localhost:8181/sdc1/proxy-designer1#/dashboard
+//UrlStaging 
+UrlStaging=https://www.e-access.att.com/sdcpstage/sdc1/portal#/dashboard
+//UrlAdmin
+UrlAdmin=http://172.20.43.136:8080/sdc1/proxy-admin1#/adminDashboard
\ No newline at end of file
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/adminworkspace/AdminUserManagment.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/adminworkspace/AdminUserManagment.java
new file mode 100644
index 0000000..19a0d64
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/adminworkspace/AdminUserManagment.java
@@ -0,0 +1,141 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.adminworkspace;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.validation.constraints.AssertTrue;
+
+import org.junit.rules.TestName;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.AdminWorkspaceUIUtilies;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Ordering;
+
+public class AdminUserManagment extends SetupCDTest {
+	//
+	// public AdminUserManagment() {
+	// super(new TestName(), AdminUserManagment.class.getName());
+	// }
+
+	private WebDriver driver = GeneralUIUtils.getDriver();
+
+	// Create new USER_ID user
+	@Test
+	public void creatUserIdNewUserTest() throws Exception {
+		String userId = AdminWorkspaceUIUtilies.defineNewUserId("th0695");
+		String role = AdminWorkspaceUIUtilies.selectUserRole("designer");
+		AdminWorkspaceUIUtilies.deleteuser(userId);
+		GeneralUIUtils.getWebButton("creategreen").click();
+		AdminWorkspaceUIUtilies.typeToSearchBox(userId);
+		String createdUserUserId = GeneralUIUtils.getWebElementWaitForVisible("tdUSER_ID").getText();
+		userId.equals(createdUserUserId);
+		GeneralUIUtils.getWebElementWaitForVisible("tdLast Active").getText().equals("Waiting");
+		GeneralUIUtils.getWebElementWaitForVisible("tdRole").getText().equals(role);
+		AdminWorkspaceUIUtilies.deleteuser(userId);
+
+	}
+
+	// Create new MacId user
+	@Test
+	public void creatMacIdNewUserTest() throws Exception {
+
+		String macId = AdminWorkspaceUIUtilies.defineNewUserId("m12345");
+		String role = AdminWorkspaceUIUtilies.selectUserRole("designer");
+		AdminWorkspaceUIUtilies.deleteuser(macId);
+		GeneralUIUtils.getWebButton("creategreen").click();
+		AdminWorkspaceUIUtilies.typeToSearchBox(macId);
+		String createdUserUserId = GeneralUIUtils.getWebElementWaitForVisible("tdUSER_ID").getText();
+		macId.equals(createdUserUserId);
+		GeneralUIUtils.getWebElementWaitForVisible("tdLast Active").getText().equals("Waiting");
+		GeneralUIUtils.getWebElementWaitForVisible("tdRole").getText().equals(role);
+		AdminWorkspaceUIUtilies.deleteuser(macId);
+	}
+
+	// Create exist user and get error already exist .
+	@Test
+	public void createxistUserTest() throws Exception {
+		String userId = AdminWorkspaceUIUtilies.defineNewUserId("th0695");
+		String role = AdminWorkspaceUIUtilies.selectUserRole("designer");
+		AdminWorkspaceUIUtilies.deleteuser(userId);
+		GeneralUIUtils.getWebButton("creategreen").click();
+		AdminWorkspaceUIUtilies.defineNewUserId(userId);
+		AdminWorkspaceUIUtilies.selectUserRole("admin");
+		GeneralUIUtils.getWebButton("creategreen").click();
+		ResourceUIUtils.getErrorMessageText("w-sdc-modal-body-content")
+				.equals("User with '" + userId + "' ID already exists.");
+		GeneralUIUtils.clickOkButton();
+		AdminWorkspaceUIUtilies.deleteuser(userId);
+
+	}
+
+	// enter Special chars and the create button disabled.
+	@Test
+	public void insertSpacialcharsTest() throws Exception {
+		AdminWorkspaceUIUtilies.defineNewUserId("!@DER%");
+		AdminWorkspaceUIUtilies.selectUserRole("designer");
+		WebElement createbutton = GeneralUIUtils.getWebElementWaitForVisible("creategreen");
+		Assert.assertFalse(createbutton.isEnabled());
+	}
+
+	// enter invalid macid and create button shall be disabled.
+	@Test
+	public void insertInvalidUserMacidTest() throws Exception {
+		AdminWorkspaceUIUtilies.defineNewUserId("k12345");
+		AdminWorkspaceUIUtilies.selectUserRole("designer");
+		WebElement createbutton = GeneralUIUtils.getWebElementWaitForVisible("creategreen");
+		Assert.assertFalse(createbutton.isEnabled());
+	}
+
+	// enter invalid userId and create button shall be disabled.
+	@Test
+	public void insertInvalidUserUserIdTest() throws Exception {
+		AdminWorkspaceUIUtilies.defineNewUserId("ac1c23");
+		AdminWorkspaceUIUtilies.selectUserRole("designer");
+		WebElement createbutton = GeneralUIUtils.getWebElementWaitForVisible("creategreen");
+		Assert.assertFalse(createbutton.isEnabled());
+	}
+
+	// display users list and sort by column name.
+	@Test
+	public void displayuserslistandsorting() throws Exception {
+		GeneralUIUtils.getWebElementWaitForVisible("thFirst Name").click();
+		Collection<WebElement> usersFname = GeneralUIUtils.getWebElements("tdFirst Name");
+		for (WebElement webElement : usersFname) {
+			System.out.println(webElement.getText());
+		}
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.ADMIN;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogLeftFilterPanelCheckBoxTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogLeftFilterPanelCheckBoxTest.java
new file mode 100644
index 0000000..39755a9
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogLeftFilterPanelCheckBoxTest.java
@@ -0,0 +1,272 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.datatypes.BreadCrumbsButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CatalogFilterTitlesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CreateAndImportButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.TypesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.CatalogUIUtilitis;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.RestCDUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class CatalogLeftFilterPanelCheckBoxTest extends SetupCDTest {
+
+	public CatalogLeftFilterPanelCheckBoxTest() {
+		// TODO Auto-generated constructor stub
+	}
+
+	private ResourceReqDetails resourceDetails;
+	FileWriter filwriter = GeneralUIUtils.InitializeprintToTxt("CatalogLeftFilterPanelCheckBoxTest");
+
+	@BeforeMethod
+	public void beforTest() {
+		resourceDetails = ElementFactory.getDefaultResource();
+	}
+
+	// filter by Type Resource in catalog
+	@Test
+	public void filterByAssetTypeResource() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = Arrays.asList("VF", "VL", "CP", "VFC");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.RESOURCE);
+		GeneralUIUtils.getWorkspaceElements();
+		elements = GeneralUIUtils.waitForElementsListVisibilityTestMethod("asset-type");
+		for (WebElement webElement : elements) {
+			assertTrue(validValues.contains(webElement.getAttribute("class")));
+		}
+	}
+
+	@Test
+	public void filterByResourceTypeVF() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = Arrays.asList("VF");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.VF);
+		GeneralUIUtils.getWorkspaceElements();
+		elements = GeneralUIUtils.waitForElementsListVisibilityTestMethod("asset-type");
+		for (WebElement webElement : elements) {
+			assertTrue(validValues.contains(webElement.getAttribute("class")));
+		}
+	}
+
+	@Test
+	public void filterByResourceTypeVFC() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = Arrays.asList("VFC");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.VFC);
+		GeneralUIUtils.getWorkspaceElements();
+		elements = GeneralUIUtils.waitForElementsListVisibilityTestMethod("asset-type");
+		for (WebElement webElement : elements) {
+			assertTrue(validValues.contains(webElement.getAttribute("class")));
+		}
+	}
+
+	@Test
+	public void filterByResourceTypeCP() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = Arrays.asList("CP");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.CP);
+		GeneralUIUtils.getWorkspaceElements();
+		elements = GeneralUIUtils.waitForElementsListVisibilityTestMethod("asset-type");
+		for (WebElement webElement : elements) {
+			assertTrue(validValues.contains(webElement.getAttribute("class")));
+		}
+	}
+
+	@Test
+	public void filterByResourceTypeVL() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = Arrays.asList("VL");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.VL);
+		GeneralUIUtils.getWorkspaceElements();
+		elements = GeneralUIUtils.waitForElementsListVisibilityTestMethod("asset-type");
+		for (WebElement webElement : elements) {
+			assertTrue(validValues.contains(webElement.getAttribute("class")));
+		}
+	}
+
+	// @Test
+	// public void filterByProducTType() throws Exception{
+	// List<WebElement> elements = null;
+	// List<String> validValues = Arrays.asList("PRODUCT");
+	// GeneralUIUtils.checkIn();
+	// GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+	// GeneralUIUtils.catalogFilterTypeChecBox(TypesEnum.PRODUCT);
+	// GeneralUIUtils.getWorkspaceElements();
+	// try {
+	// elements =
+	// GeneralUIUtils.getEelementsByClassName1("w-sdc-dashboard-card-avatar");
+	// for (WebElement webElement : elements) {
+	// assertTrue(validValues.contains(webElement.findElement(By.xpath(".//*")).getAttribute("class")));
+	// }
+	// } catch (Exception e) {
+	// System.out.println("No Elements founds!");
+	// }
+	// }
+
+	@Test
+	public void filterByResourceCategories() throws Exception {
+		List<WebElement> elements = null;
+		List<String> validValues = null;
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		Thread.sleep(2000);
+		GeneralUIUtils.minimizeCatalogFilterByTitle(CatalogFilterTitlesEnum.TYPE);
+		List<String> categories = CatalogUIUtilitis.abcd();
+		for (String category : categories) {
+			validValues = CatalogUIUtilitis.getAllSubcategoriesByUniqueId(category);
+			boolean bool = false;
+			try {
+				GeneralUIUtils.getWebElementWaitForVisible(category).click();
+				bool = true;
+			} catch (Exception e) {
+				while (!bool) {
+					GeneralUIUtils.scrollDown();
+					try {
+						GeneralUIUtils.getWebElementWaitForVisible(category).click();
+						bool = true;
+					} catch (Exception e2) {
+
+					}
+				}
+			}
+			String checkBox = GeneralUIUtils.getWebElementWaitForVisible(category).findElement(By.xpath(".//input"))
+					.getAttribute("class");
+			if (checkBox.contains("ng-not-empty") && validValues != null) {
+				try {
+					GeneralUIUtils.getWorkspaceElements();
+					elements = GeneralUIUtils.getEelementsBycontainsClassName("sprite-resource-icons");
+					for (WebElement webElement : elements) {
+						String elementUniqueId = webElement.getAttribute("data-tests-id");
+						if (!validValues.contains(elementUniqueId)) {
+							System.out.println("assert error!");
+						}
+					}
+					GeneralUIUtils.getWebElementWaitForVisible(category).click();
+				} catch (Exception e) {
+					GeneralUIUtils.getWebElementWaitForVisible(category).click();
+					System.out.println("No Elements founds!");
+				}
+			}
+		}
+	}
+
+	@SuppressWarnings("null")
+	@Test
+	public void filterByStatus() throws Exception {
+
+		List<WebElement> elements = null;
+		List<String> validValues = null;
+		List<ResourceReqDetails> createdComponents = new ArrayList<ResourceReqDetails>();
+		List<String> catalogStatuses = Arrays.asList("IN_DESIGN", "READY_FOR_TESTING", "IN_TESTING", "CERTIFIED",
+				"DISTRIBUTED");
+		GeneralUIUtils.checkIn();
+		for (int i = 1; i < catalogStatuses.size() - 1; i++) {
+			GeneralUIUtils.sleep(3000);
+			GeneralUIUtils.createAndImportButtons(CreateAndImportButtonsEnum.CREATE_VF, GeneralUIUtils.getDriver());
+			resourceDetails.setName(getRandomComponentName("ResourceCDTest-"));
+			ResourceUIUtils.createResourceInUI(resourceDetails, getUser());
+			GeneralUIUtils.clickSubmitForTest();
+			if (catalogStatuses.get(i) == "IN_TESTING") {
+				GeneralUIUtils.testerUser(true, false, resourceDetails);
+				GeneralUIUtils.sleep(3000);
+				navigateToUrl(getUrl());
+
+			}
+			if (catalogStatuses.get(i) == "CERTIFIED") {
+				GeneralUIUtils.testerUser(true, true, resourceDetails);
+				GeneralUIUtils.sleep(3000);
+				navigateToUrl(getUrl());
+			}
+			if (catalogStatuses.get(i) == "DISTRIBUTED") {
+				GeneralUIUtils.testerUser(true, true, resourceDetails);
+				GeneralUIUtils.governorUser(false, true, resourceDetails);
+				GeneralUIUtils.opsUser(true, false, resourceDetails);
+				GeneralUIUtils.sleep(3000);
+				navigateToUrl(getUrl());
+
+			}
+			createdComponents.add(resourceDetails);
+		}
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		// get filters title close.
+		Thread.sleep(2000);
+		GeneralUIUtils.minimizeCatalogFilterByTitle(CatalogFilterTitlesEnum.TYPE);
+		GeneralUIUtils.minimizeCatalogFilterByTitle(CatalogFilterTitlesEnum.CATEGORIES);
+		for (CheckBoxStatusEnum statusEnum : CheckBoxStatusEnum.values()) {
+			if (catalogStatuses.contains(statusEnum.name().toString())) {
+				validValues = GeneralUIUtils.catalogFilterStatusChecBox(statusEnum);
+				if (GeneralUIUtils.getWorkspaceElements().size() > 0) {
+					String checkBox = GeneralUIUtils.getWebElementByName(statusEnum.getCatalogValue())
+							.getAttribute("class");
+					if (checkBox.contains("ng-not-empty") && validValues != null) {
+						try {
+							elements = GeneralUIUtils.getEelementsBycontainsClassName("w-sdc-dashboard-card-edit");
+							for (WebElement webElement : elements) {
+								String className = webElement.getAttribute("class");
+								String textCategory = className.substring(className.indexOf(" "));
+								assertTrue(validValues.contains(textCategory.replace(" ", "")));
+							}
+							GeneralUIUtils.catalogFilterStatusChecBox(statusEnum);
+						} catch (Exception e) {
+							GeneralUIUtils.catalogFilterStatusChecBox(statusEnum);
+							System.out.println("No Elements founds!");
+						}
+					}
+				} else {
+					break;
+				}
+			}
+		}
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogSearchBoxTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogSearchBoxTest.java
new file mode 100644
index 0000000..efdb953
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/CatalogSearchBoxTest.java
@@ -0,0 +1,130 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.io.FileWriter;
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.datatypes.BreadCrumbsButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openqa.selenium.WebElement;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class CatalogSearchBoxTest extends SetupCDTest {
+
+	private ResourceReqDetails resourceDetails;
+
+	@BeforeMethod
+	public void beforTest() {
+		resourceDetails = ElementFactory.getDefaultResource();
+	}
+
+	// search by ResourceName
+	@Test
+	public void searchResourceInCatalogMenuTest() throws Exception {
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getName());
+		Thread.sleep(500);
+		assertTrue(GeneralUIUtils.getWorkspaceElements().size() == 1);
+	}
+
+	// search by Description
+	@Test
+	public void searchResourceInCatalogMenuByDescriptionTest() throws Exception {
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getDescription());
+		Thread.sleep(2000);
+		List<WebElement> assets = GeneralUIUtils.getWorkspaceElements();
+
+		int count = 0;
+		for (WebElement webElement : assets) {
+			if (count != 0) {
+				GeneralUIUtils.catalogSearchBox(resourceDetails.getDescription());
+			}
+			if (count == 0) {
+				webElement.click();
+			} else {
+				List<WebElement> assets1 = GeneralUIUtils.getWorkspaceElements();
+				assets1.get(count).click();
+			}
+			GeneralUIUtils.getWebElementWaitForVisible("description").getText()
+					.equals(resourceDetails.getDescription());
+			GeneralUIUtils.clickExitSign();
+			Thread.sleep(500);
+			count++;
+		}
+	}
+
+	// search by tags
+	@Test
+	public void searchResourceInCatalogMenuBytagsTest() throws Exception {
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getTags().get(0));
+		Thread.sleep(500);
+		GeneralUIUtils.getWorkspaceElements().get(0).click();
+		List<WebElement> expectedTagsList = GeneralUIUtils.getWebElements("i-sdc-tag-text");
+		for (int i = 0; i < expectedTagsList.size(); i++) {
+			expectedTagsList.get(i).equals(resourceDetails.getTags().get(i));
+		}
+
+	}
+
+	// search by Version
+	@Test
+	public void searchResourceInCatalogMenuByVersionTest() throws Exception {
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getVersion().replace("V", ""));
+		Thread.sleep(500);
+		GeneralUIUtils.getWorkspaceElements().get(0).click();
+		GeneralUIUtils.getSelectList(null, "versionHeader").getFirstSelectedOption().getText()
+				.equals(resourceDetails.getVersion());
+	}
+
+	// search by SpecialCharacters
+	@Test
+	public void searchResourceInCatalogMenuBySpecialCharactersTest() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.GENERAL);
+		GeneralUIUtils.defineDescription(resourceDetails.getDescription() + "!@#$%^&*");
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox("!@#$%^&*");
+		Thread.sleep(500);
+		GeneralUIUtils.getWorkspaceElements().get(0).click();
+		GeneralUIUtils.getWebElementWaitForVisible("description").getText().equals(resourceDetails.getDescription());
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ChangeLifeCycleStatFromCatalogTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ChangeLifeCycleStatFromCatalogTest.java
new file mode 100644
index 0000000..a75240d
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ChangeLifeCycleStatFromCatalogTest.java
@@ -0,0 +1,103 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.datatypes.BreadCrumbsButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.LifeCycleStateEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openqa.selenium.WebElement;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class ChangeLifeCycleStatFromCatalogTest extends SetupCDTest {
+
+	public ChangeLifeCycleStatFromCatalogTest() {
+		// TODO Auto-generated constructor stub
+	}
+
+	// This test check the status filter .
+
+	private ResourceReqDetails resourceDetails;
+
+	@BeforeMethod
+	public void beforTest() {
+		resourceDetails = ElementFactory.getDefaultResource();
+	}
+
+	@Test
+	public void checkInFromCatalog() throws InterruptedException {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickASDCLogo();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getName());
+		List<WebElement> assets = GeneralUIUtils.getWorkspaceElements();
+		if (assets.isEmpty()) {
+			System.out.println("error elements not found.");
+		} else {
+			for (WebElement webElement : assets) {
+				webElement.click();
+				GeneralUIUtils.checkIn();
+				GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+				Thread.sleep(2000);
+				System.out.println(ResourceUIUtils.lifeCycleStateUI());
+				System.out.println(LifeCycleStateEnum.CHECKIN.getValue());
+				assertTrue(ResourceUIUtils.lifeCycleStateUI().contentEquals(LifeCycleStateEnum.CHECKIN.getValue()));
+
+			}
+		}
+
+	}
+
+	@Test
+	public void checkOutFromCatalog() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickASDCLogo();
+		GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		GeneralUIUtils.catalogSearchBox(resourceDetails.getName());
+		List<WebElement> assets = GeneralUIUtils.getWorkspaceElements();
+		if (assets.isEmpty()) {
+			System.out.println("error elements not found.");
+		} else {
+			for (WebElement webElement : assets) {
+				webElement.click();
+				GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+				assertTrue(ResourceUIUtils.lifeCycleStateUI().contentEquals(LifeCycleStateEnum.CHECKOUT.getValue()));
+
+			}
+		}
+
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ImportAssetInUITest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ImportAssetInUITest.java
new file mode 100644
index 0000000..8e9df40
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/ImportAssetInUITest.java
@@ -0,0 +1,480 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import static org.testng.Assert.assertNotEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.util.List;
+import java.util.Map;
+
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CreateAndImportButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.LifeCycleStateEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.ArtifactUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ImportAssetUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.PropertiesUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.RestCDUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.testng.AssertJUnit;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class ImportAssetInUITest extends SetupCDTest {
+
+	private ResourceReqDetails resourceDetails;
+
+	@BeforeMethod(alwaysRun = true)
+	public void inializeBeforeImportTest() {
+		GeneralUIUtils.fileName = "JDM_vfc.yml";
+		resourceDetails = ElementFactory.getDefaultResource();
+		resourceDetails.setResourceType(ResourceTypeEnum.VFC.toString());
+	}
+
+	@Test
+	public void importAssetFillGeneralInfoAndSelectIconTest() throws Exception {
+		ResourceUIUtils.importFileWithSendKey(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				CreateAndImportButtonsEnum.IMPORT_CP);
+		ResourceUIUtils.fillGeneralInfoValuesAndIcon(resourceDetails, getUser());
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		ResourceUIUtils.getVFCGeneralInfoAndValidate(resourceDetails, getUser());
+	}
+
+	@Test
+	public void changeImportedAssetFileTest() throws Exception {
+		ImportAssetUIUtils.importAsssetAndFillGeneralInfo(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		String firstFileName = GeneralUIUtils.getWebElementWaitForVisible("filename").getText();
+		AssertJUnit.assertTrue(firstFileName.equals(GeneralUIUtils.fileName));
+		String secondFileName = "Valid_tosca_ReplaceTest.yml";
+		ResourceUIUtils.importFileWithSendKeyBrowse(GeneralUIUtils.FILE_PATH, secondFileName);
+		String secondFileNameFromField = GeneralUIUtils.getWebElementWaitForVisible("filename").getText();
+		// assertThat(fileName, not(secondFileNameFromField));
+		assertNotEquals(GeneralUIUtils.fileName, secondFileNameFromField);
+	}
+
+	@Test
+	public void duplicateFileTest() throws Exception {
+		ResourceUIUtils.importFileWithSendKey(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				CreateAndImportButtonsEnum.IMPORT_CP);
+		ResourceUIUtils.fillGeneralInfoValuesAndIcon(resourceDetails, getUser());
+		String nameofresource = resourceDetails.getName();
+		resourceDetails.setName(getRandomComponentName("SecondImportCDTest"));
+		GeneralUIUtils.checkIn();
+		ImportAssetUIUtils.importAsssetAndFillGeneralInfo(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.clickSaveIcon();
+		equals(ResourceUIUtils.getErrorMessageText("w-sdc-modal-body-content") == GeneralUIUtils.allReadyExistErro);
+		GeneralUIUtils.clickOkButton();
+		resourceDetails.setName(nameofresource);
+
+	}
+
+	@Test
+	public void importInvalidFileTest() throws Exception {
+		GeneralUIUtils.fileName = "InValid_tosca_File .yml";
+		ImportAssetUIUtils.importAsssetAndFillGeneralInfo(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.clickSaveIcon();
+		equals(ResourceUIUtils.getErrorMessageText("w-sdc-modal-body-content") == GeneralUIUtils.toscaErrorMessage);
+		GeneralUIUtils.clickOkButton();
+	}
+	
+	@Test
+	public void deleteImportAssetFileTest() throws Exception {
+		ImportAssetUIUtils.importAsssetAndFillGeneralInfo(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		WebElement deleteFileButton = GeneralUIUtils.getDriver()
+				.findElement(By.className("i-sdc-form-file-upload-x-btn"));
+		deleteFileButton.click();
+		WebElement filefield = GeneralUIUtils.getWebElementWaitForVisible("filename");
+		AssertJUnit.assertEquals("", filefield.getText());
+	}
+
+	// Add artifact by Clicking the Place holders button.
+	@Test
+	public void importAssetAddInformationArtifactPlaceHoldersTest() throws Exception {
+		// fileName = "CP_WAN.yml";
+		String artifactByname = "placeHolder";
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.moveToStep(StepsEnum.INFORMATION_ARTIFACT);
+		GeneralUIUtils.getWebElementWaitForVisible("Features");
+		List<WebElement> Placholders = GeneralUIUtils.getDriver().findElements(By.className("add-button"));
+		for (WebElement element : Placholders) {
+			Thread.sleep(500);
+			element.click();
+			// Placholders.get(4).click();
+			System.out.println(element.getText());
+			if (element.getText().equalsIgnoreCase("Add Other Artifact")) {
+				ArtifactUIUtils.valideArtifact(ArtifactUIUtils.addInformationalArtifact("Create New Artifact"), false);
+			} else {
+				ArtifactUIUtils.valideArtifact(ArtifactUIUtils.addInformationalArtifact(null), false);
+			}
+		}
+	}
+
+	// Add information artifact by Clicking the Add button.
+	@Test
+	public void importAssetAddInformationArtifactAddButtonTest() throws Exception {
+		String type = "Create New Artifact";
+		// fileName = "CP_WAN.yml";
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.moveToStep(StepsEnum.INFORMATION_ARTIFACT);
+		GeneralUIUtils.actionBuild(GeneralUIUtils.getWebButton("add-information-artifact-button")).click();
+		;
+		;
+		Map<String, String> expected = ArtifactUIUtils.addInformationalArtifact(type);
+		Thread.sleep(1000);
+		ResourceUIUtils.scrollDownPage();
+		ArtifactUIUtils.valideArtifact(expected, false);
+	}
+
+	// Add New property String Type.
+	@Test
+	public void importAssetAddStringPropertyTest() throws Exception {
+		WebElement prop = null;
+		// fileName = "CP_WAN.yml";
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		Thread.sleep(500);
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+		GeneralUIUtils.getEelementBycontainsClassName("data-row");
+		GeneralUIUtils.getWebButton("addGrey").click();
+		Map<String, String> propertyValues = PropertiesUIUtils.addProperties("String-Property", "string",
+				"!This is strig123456@#$%$", "This is description.", null);
+		WebElement elementTohover = GeneralUIUtils.getEelementBycontainsClassName("table-arrow");
+		GeneralUIUtils.actionBuild(elementTohover).click();
+		int counter = 0;
+		try {
+			prop = GeneralUIUtils.getWebElementWaitForVisible(propertyValues.get("name"));
+		} catch (Exception e) {
+			ResourceUIUtils.scrollDownPage();
+			prop = GeneralUIUtils.getDriver()
+					.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+		} finally {
+			if (prop.isDisplayed()) {
+				counter++;
+			}
+		}
+		PropertiesUIUtils.vlidateProperties(propertyValues);
+	}
+
+	// Add New property Integer Type.
+	@Test
+	public void importAssetAddIntegerPropertyTest() throws Exception {
+		WebElement prop;
+		// fileName = "CP_WAN.yml";
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		Thread.sleep(500);
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+		GeneralUIUtils.getEelementBycontainsClassName("data-row");
+		GeneralUIUtils.getWebButton("addGrey").click();
+		Map<String, String> propertyValues = PropertiesUIUtils.addProperties("Integer-Property", "integer", "123456",
+				"This is description.", null);
+		WebElement elementTohover = GeneralUIUtils.getEelementBycontainsClassName("table-arrow");
+		GeneralUIUtils.actionBuild(elementTohover);
+		int counter = 0;
+		prop = GeneralUIUtils.getWebElementWaitForVisible(propertyValues.get("name"));
+		if (prop.isDisplayed()) {
+			counter++;
+		}
+		if (counter == 0) {
+			ResourceUIUtils.scrollDownPage();
+			prop = GeneralUIUtils.getDriver()
+					.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+			counter++;
+		}
+		PropertiesUIUtils.vlidateProperties(propertyValues);
+	}
+
+	// Add New property boolean Type.
+	@Test
+	public void importAssetAddBooleanPropertyTest() throws Exception {
+		// fileName = "CP_WAN.yml";
+		WebElement prop;
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+		GeneralUIUtils.getEelementBycontainsClassName("data-row");
+		GeneralUIUtils.getWebButton("addGrey").click();
+		Map<String, String> propertyValues = PropertiesUIUtils.addProperties("Boolean-Property", "boolean", "true",
+				"This is boolean description.", null);
+		int counter = 0;
+		WebElement elementTohover = GeneralUIUtils.getDriver().findElement(By.className("table-arrow"));
+		GeneralUIUtils.actionBuild(elementTohover);
+		prop = GeneralUIUtils.getDriver()
+				.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+		if (prop.isDisplayed()) {
+			counter++;
+		}
+		if (counter == 0) {
+			ResourceUIUtils.scrollDownPage();
+			prop = GeneralUIUtils.getDriver()
+					.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+			counter++;
+		}
+		AssertJUnit.assertEquals(1, counter);
+	}
+
+	// Add New property float Type.
+	@Test
+	public void importAssetAddFloatPropertyTest() throws Exception {
+		WebElement prop;
+		// fileName = "CP_WAN.yml";
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+		GeneralUIUtils.getEelementBycontainsClassName("data-row");
+		GeneralUIUtils.getWebButton("addGrey").click();
+		Map<String, String> propertyValues = PropertiesUIUtils.addProperties("floatProperty", "float", "22.5",
+				"This is description.", null);
+		int counter = 0;
+		WebElement elementTohover = GeneralUIUtils.getDriver().findElement(By.className("table-arrow"));
+		GeneralUIUtils.actionBuild(elementTohover);
+		prop = GeneralUIUtils.getDriver()
+				.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+		if (prop.isDisplayed()) {
+			counter++;
+		}
+		if (counter == 0) {
+			ResourceUIUtils.scrollDownPage();
+			prop = GeneralUIUtils.getDriver()
+					.findElement(By.xpath("//*[@data-tests-id='" + propertyValues.get("name") + "']"));
+			counter++;
+		}
+		PropertiesUIUtils.vlidateProperties(propertyValues);
+	}
+
+	// Edit property.
+	@Test
+	public void importAssetEditPropertiesTest() throws Exception {
+		// fileName = "CP_WAN.yml";
+		Map<String, String> expected = null;
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+		GeneralUIUtils.getEelementBycontainsClassName("table-col-general");
+		GeneralUIUtils.getWebButton("addGrey").click();
+		expected = PropertiesUIUtils.addProperties("BooleanProperty", "boolean", "true", "This is boolean description.",
+				null);
+		GeneralUIUtils.getWebElement(GeneralUIUtils.getDriver(), "table-edit-btn").click();
+		;
+		List<WebElement> properties = GeneralUIUtils.getDriver().findElements(By.xpath("//*[@*='table-edit-btn']"));
+		;
+		for (WebElement webElement : properties) {
+			webElement.click();
+			GeneralUIUtils.defineDescription("This is Property update");
+			GeneralUIUtils.getWebButton("Update").click();
+			break;
+		}
+		Thread.sleep(2000);
+		GeneralUIUtils.getDriver().findElement(By.xpath("//*[@data-tests-id='BooleanProperty']")).click();
+		Thread.sleep(1000);
+		String actual = GeneralUIUtils.getDriver()
+				.findElement(By.xpath("//*[@class='item-opened ng-binding ng-scope']")).getText();
+		assertNotEquals(expected.get("name"), actual);
+		// assertThat(expected.get("name"),not(actual));
+	}
+
+	// **************************************************************************************************
+	// change VFC version
+
+	// this test return error 500;
+	@Test(alwaysRun = false)
+	public void importAssetChangeVersionOfVFCTest() throws Exception {
+		// fileName = "VFC.yml";
+		// resourceDetails.setResourceType(ResourceTypeEnum.VFC.toString());
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+		resourceDetails.setVersion("0.2");
+		String version = GeneralUIUtils.getWebElementWaitForVisible("versionHeader").getText();
+		version.equals("0.2");
+	}
+
+	// change VL version
+	// this test return error 500;
+	@Test
+	public void importAssetChangeVersionOfVLTest() throws Exception {
+		GeneralUIUtils.fileName = "VL.yml";
+		resourceDetails.setResourceType(ResourceTypeEnum.VL.getValue());
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+		resourceDetails.setVersion("0.2");
+		String version = GeneralUIUtils.getWebElementWaitForVisible("versionHeader").getText();
+		version.equals("0.2");
+	}
+	// change CP version
+
+	@Test
+	public void importAssetChangeVersionOfCPTest() throws Exception {
+		GeneralUIUtils.fileName = "CP_LAN.yml";
+		resourceDetails.setResourceType(ResourceTypeEnum.CP.toString());
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+		resourceDetails.setVersion("0.2");
+		String version = GeneralUIUtils.getWebElementWaitForVisible("versionHeader").getText();
+		version.equals("0.2");
+	}
+
+	// @Test
+	// public void viewPageActivityLogTest() throws Exception {
+	// resourceDetails.setResourceType(ResourceTypeEnum.VF.toString());
+	// ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH,
+	// GeneralUIUtils.fileName , resourceDetails, getUser(),
+	// CreateAndImportButtonsEnum.IMPORT_CP);
+	// ResourceUIUtils.waitToFinishButtonEnabled().click();
+	// RestCDUtils.getResource(resourceDetails, getUser());
+	// GeneralUIUtils.checkIn();
+	// GeneralUIUtils.openObjectMenuAndSelectOption(resourceDetails.getUniqueId(),
+	// MenuOptionsEnum.VIEW);
+	// ResourceUIUtils.lifeCycleState();
+	// Thread.sleep(1000);
+	// ViewPageUIUtils.validateActivityLog("Action: Checkin Performed by: Carlos
+	// Santana(cs0008) Status: 200");
+	// }
+
+	// @Test
+	// public void downloadArtifactViewPaage() throws Exception {
+	// importAssetAddInformationArtifactAddButton();
+	// ResourceUIUtils.waitToFinishButtonEnabled().click();
+	// ViewPageUIUtils.openDropDownListOfObject(resourceDetails.getName(),
+	// ImportAssetUIUtils.getAllObjectsOnWorkspace(GeneralUIUtils.getDriver()),
+	// "View",
+	// ImportAssetUIUtils.scrollElement(GeneralUIUtils.getDriver()));
+	// ValidateViewPageParameters.ViewPagedownloadArtifact();
+	// String myheatfile="Heat-File.yaml";
+	// //Assert.assertTrue((GeneralUIUtils.FILE_PATH, "mailmerge.xls"), "Failed
+	// to download
+	// Expected document");
+	// String dowloadedfile=
+	// "C:\\Git_work\\ASDC\\d2-sdnc\\ui-ci\\src\\main\\resources\\Downloads\\"+fileName+"";
+	// int index=dowloadedfile.lastIndexOf("\\");
+	// System.out.println(dowloadedfile.substring(index+1));
+	// File getLatestFile = getLatestFilefromDir();
+	// String fileName = getLatestFile.getName();
+	// Assert.assertTrue(fileName.equals("mailmerge.xls"), "Downloaded file name
+	// is not matching with expected file name");
+	//
+	// }
+
+	@Test
+	public void importAssetcheckInVFCTest() throws Exception {
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.checkIn();
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		assertTrue(ResourceUIUtils.lifeCycleStateUI().contentEquals(LifeCycleStateEnum.CHECKIN.getValue()));
+	}
+
+	@Test
+	public void importAssetcheckOutVFCTest() throws Exception {
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+		GeneralUIUtils.clickASDCLogo();
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		assertTrue(ResourceUIUtils.lifeCycleStateUI().contentEquals(LifeCycleStateEnum.CHECKOUT.getValue()));
+	}
+
+	@Test
+	public void importAssetDeleteVFCVersionTest() throws Exception {
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		GeneralUIUtils.checkinCheckout(resourceDetails.getName());
+		GeneralUIUtils.deleteVersionInUI();
+		Thread.sleep(1000);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		String version = GeneralUIUtils.getWebElementWaitForVisible("versionHeader").getText();
+		AssertJUnit.assertEquals("0.1", version.replace("V", ""));
+	}
+
+	// @Test(enabled = false)
+	// public void importAssetVFCPrintScreenTest() throws Exception {
+	// ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH,
+	// GeneralUIUtils.fileName , resourceDetails, getUser());
+	// ResourceUIUtils.waitToFinishButtonEnabled().click();
+	// ResourceUIUtils.openDropDownListOfObject(resourceDetails.getName(),
+	// ResourceUIUtils.getAllObjectsOnWorkspace(driver,resourceDetails), "Edit",
+	// ResourceUIUtils.scrollElement(driver));
+	// ResourceUIUtils.waitfunctionforelements("sprite-resource-icons", 7);
+	// Thread.sleep(2000);
+	// WebElement element =
+	// GeneralUIUtils.getDriver().findElement(By.className("network"));
+	// WebElement target =
+	// GeneralUIUtils.getDriver().findElement(By.className("dropzone"));
+	// (new Actions(GeneralUIUtils.getDriver())).dragAndDrop(element,
+	// target).perform();
+	// WebElement element1 =
+	// GeneralUIUtils.getDriver().findElement(By.className("network"));
+	// (new Actions(GeneralUIUtils.getDriver())).dragAndDrop(element1,
+	// target).perform();
+	// ResourceUIUtils.clickPrintScreen();
+	//
+	// // the firefox not support print screen.
+	// }
+
+	@Test
+	public void importAssetVFCSubmitForTestingTest() throws Exception {
+		ImportAssetUIUtils.importAsssetFillGeneralInfoAndSelectIcon(GeneralUIUtils.FILE_PATH, GeneralUIUtils.fileName,
+				resourceDetails, getUser(), CreateAndImportButtonsEnum.IMPORT_CP);
+		String name = "";
+		GeneralUIUtils.clickSubmitForTest();
+		Thread.sleep(2000);
+		String url = "http://localhost:8181/sdc1/proxy-tester1#/dashboard";
+		navigateToUrl(url);
+		GeneralUIUtils.getWebElementWaitForVisible("w-sdc-dashboard-card-info");
+		int counter = 0;
+		for (WebElement object : ResourceUIUtils.getAllObjectsOnWorkspace(GeneralUIUtils.getDriver(),
+				resourceDetails)) {
+			if (object.getText().equals(resourceDetails.getName())) {
+				name = object.getText();
+				counter++;
+			}
+		}
+		AssertJUnit.assertEquals(1, counter);
+
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFCanvasTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFCanvasTest.java
new file mode 100644
index 0000000..5145417
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFCanvasTest.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Action;
+import org.openqa.selenium.interactions.Actions;
+import org.testng.annotations.Test;
+
+public class VFCanvasTest extends SetupCDTest {
+
+	public List<Integer> getposition(WebElement canvas, int width, int height) {
+
+		width = canvas.getSize().getWidth();
+		height = canvas.getSize().getHeight();
+		Random r = new Random();
+		int Resultx = r.nextInt(width);
+		int Resulty = r.nextInt(height);
+		List<Integer> position = new ArrayList<Integer>();
+		position.add(Resultx);
+		position.add(Resulty);
+		return position;
+	}
+
+	@Test
+	public void VFCanvasTest1() throws Exception {
+		// GeneralUIUtils.waitForContainsdataTestIdVisibility("left-sectioin-element-QA");
+
+		GeneralUIUtils.moveToStep(StepsEnum.COMPOSITION);
+		Thread.sleep(2000);
+		List<Integer> position = null;
+		WebElement canvas = GeneralUIUtils.getWebElementWaitForVisible("canvas");
+		int xPos = 0;
+		int yPos = 0;
+		position = getposition(canvas, xPos, yPos);
+		WebElement otherElement = GeneralUIUtils
+				.getWebElementWaitForVisible("left-sectioin-element-QA left-section-NeutronPort");
+		for (int i = 0; i < 8; i++) {
+			Actions builder = new Actions(GeneralUIUtils.getDriver());
+			Action dragAndDrop = builder.clickAndHold(otherElement)
+					.moveToElement(canvas, position.get(0), position.get(1)).release().build();
+			dragAndDrop.perform();
+			Thread.sleep(2000);
+		}
+		Thread.sleep(2000);
+		Actions builder = new Actions(GeneralUIUtils.getDriver());
+		builder.moveToElement(canvas, position.get(0), position.get(1));
+		builder.clickAndHold();
+		position = getposition(canvas, xPos, yPos);
+		builder.moveToElement(canvas, position.get(0), position.get(1));
+		builder.release();
+		builder.build();
+		builder.perform();
+		builder.moveToElement(canvas, 200, 300);
+		builder.release();
+		builder.perform();
+
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFUITest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFUITest.java
new file mode 100644
index 0000000..eec04bc
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VFUITest.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+
+public class VFUITest extends SetupCDTest {
+
+	public VFUITest() {
+		super();
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VfTests.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VfTests.java
new file mode 100644
index 0000000..5550287
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/VfTests.java
@@ -0,0 +1,33 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+
+public class VfTests extends SetupCDTest {
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/WorkspaceCheckBoxFilterTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/WorkspaceCheckBoxFilterTest.java
new file mode 100644
index 0000000..792d687
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/resourceui/WorkspaceCheckBoxFilterTest.java
@@ -0,0 +1,120 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.resourceui;
+
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.testng.AssertJUnit;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class WorkspaceCheckBoxFilterTest extends SetupCDTest {
+
+	// This test check the status filter .
+
+	private ResourceReqDetails resourceDetails;
+
+	@BeforeMethod
+	public void beforTest() {
+		resourceDetails = ElementFactory.getDefaultResource();
+	}
+
+	@Test
+	public void selectCheckOutMenuTest() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickASDCLogo();
+		String Status = GeneralUIUtils
+				.checkBoxLifeCyclestate(org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum.CHECKOUT);
+		Thread.sleep(500);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		AssertJUnit.assertEquals(Status, GeneralUIUtils.getWebElementWaitForVisible("lifecyclestate").getText());
+	}
+
+	@Test
+	public void selectCheckInMenuTest() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.checkIn();
+		String Status = GeneralUIUtils
+				.checkBoxLifeCyclestate(org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum.CHECKIN);
+		Thread.sleep(500);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		AssertJUnit.assertEquals(Status, GeneralUIUtils.getWebElementWaitForVisible("lifecyclestate").getText());
+	}
+
+	@Test
+	public void selectReadyForTestingMenuTest() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickSubmitForTest();
+		String Status = GeneralUIUtils
+				.checkBoxLifeCyclestate(org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum.READY_FOR_TESTING);
+		Thread.sleep(500);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+
+		AssertJUnit.assertEquals(Status, GeneralUIUtils.getWebElementWaitForVisible("lifecyclestate").getText());
+	}
+
+	@Test
+	public void selectInTestIngMenuTest() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickSubmitForTest();
+		GeneralUIUtils.waitForClassNameVisibility("w-sdc-dashboard-card-footer");
+		GeneralUIUtils.getDriver().navigate().to(SetupCDTest.getUrl().replace("designer", "tester"));
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		GeneralUIUtils.clickStartTesting();
+		GeneralUIUtils.clickASDCLogo();
+		GeneralUIUtils.waitForClassNameVisibility("w-sdc-dashboard-card-footer");
+		GeneralUIUtils.getDriver().navigate().to(SetupCDTest.getUrl().replace("tester", "designer"));
+		String Status = GeneralUIUtils
+				.checkBoxLifeCyclestate(org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum.IN_TESTING);
+		Thread.sleep(500);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+
+		AssertJUnit.assertEquals(Status, GeneralUIUtils.getWebElementWaitForVisible("lifecyclestate").getText());
+	}
+
+	@Test
+	public void selectCertifiedMenuTest() throws Exception {
+		GeneralUIUtils.clickSaveIcon();
+		GeneralUIUtils.clickSubmitForTest();
+		GeneralUIUtils.waitForClassNameVisibility("w-sdc-dashboard-card-footer");
+		GeneralUIUtils.getDriver().navigate().to(SetupCDTest.getUrl().replace("designer", "tester"));
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+		GeneralUIUtils.clickStartTesting();
+		GeneralUIUtils.clickAccept();
+		GeneralUIUtils.waitForClassNameVisibility("w-sdc-dashboard-card-footer");
+		GeneralUIUtils.getDriver().navigate().to(SetupCDTest.getUrl().replace("tester", "designer"));
+		String Status = GeneralUIUtils
+				.checkBoxLifeCyclestate(org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum.CERTIFIED);
+		Thread.sleep(500);
+		GeneralUIUtils.getWebElementWaitForVisible(resourceDetails.getName()).click();
+
+		AssertJUnit.assertEquals(Status, GeneralUIUtils.getWebElementWaitForVisible("lifecyclestate").getText());
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Import.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Import.java
new file mode 100644
index 0000000..c5017a4
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Import.java
@@ -0,0 +1,177 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.sanity;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.util.List;
+import java.util.function.Supplier;
+
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ArtifactInfo;
+import org.openecomp.sdc.ci.tests.datatypes.BreadCrumbsButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.InformationalArtifacts;
+import org.openecomp.sdc.ci.tests.datatypes.enums.NormativeTypesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.pages.GeneralPageElements;
+import org.openecomp.sdc.ci.tests.pages.InformationalArtifactPage;
+import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
+import org.openecomp.sdc.ci.tests.pages.TesterOperationPage;
+import org.openecomp.sdc.ci.tests.pages.ToscaArtifactsPage;
+import org.openecomp.sdc.ci.tests.utilities.ArtifactUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.FileHandling;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openqa.selenium.ElementNotVisibleException;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
+import org.testng.annotations.Test;
+
+public class Import extends SetupCDTest {
+
+	@Test
+	public void importResource() throws Exception {
+
+		String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "CPWithAttributes.yml";
+
+		// import Resource
+		ResourceReqDetails resourceMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VFC, getUser());
+		ResourceUIUtils.importVfc(resourceMetaData, filePath, fileName, getUser());
+
+	}
+
+	@Test
+	public void certifyVFC() throws Exception {
+		String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "CPWithAttributes.yml";
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+		ResourceGeneralPage.clickCheckinButton(atomicResourceMetaData.getName());
+		ResourceGeneralPage.clickSubmitForTestingButton(atomicResourceMetaData.getName());
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(atomicResourceMetaData.getName());
+		TesterOperationPage.certifyComponent(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+		// GeneralUIUtils.clickBreadCrumbs(BreadCrumbsButtonsEnum.CATALOG);
+		String cpVersion = GeneralUIUtils.getComponentVersion(atomicResourceMetaData.getName());
+		assertTrue("V 1.0".equals(cpVersion));
+	}
+
+	@Test
+	public void uploadAllInformationalArtifactPlaceholdersInVFC() throws Exception {
+		String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "CPWithAttributes.yml";
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToInformationalArtifactScreen();
+
+		for (InformationalArtifacts infoArtifact : InformationalArtifacts.values()) {
+			ArtifactUIUtils.fillPlaceHolderInformationalArtifact(infoArtifact, filePath, "Heat-File 1.yaml",
+					infoArtifact.name());
+		}
+
+		assertTrue(InformationalArtifactPage.checkElementsCountInTable(InformationalArtifacts.values().length,
+				() -> InformationalArtifactPage.getElemenetsFromTable()));
+
+		InformationalArtifactPage.clickAddNewArtifact();
+		Select artifactLabelList = InformationalArtifactPage.artifactPopup().defineArtifactLabel("");
+		assertEquals(1, artifactLabelList.getAllSelectedOptions().size());
+
+	}
+
+	@Test(expectedExceptions = ElementNotVisibleException.class)
+	public void uploadInformationaArtifactMetdataTest() throws Exception {
+		String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "CPWithAttributes.yml";
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToInformationalArtifactScreen();
+		assertTrue(InformationalArtifactPage.checkElementsCountInTable(0,
+				() -> InformationalArtifactPage.getElemenetsFromTable()));
+
+		ArtifactInfo artifactInfo = new ArtifactInfo(filePath, "Heat-File 1.yaml", "new artifact", "artifact1",
+				"OTHER");
+		InformationalArtifactPage.clickAddNewArtifact();
+		ArtifactUIUtils.fillAndAddNewArtifactParameters(artifactInfo);
+
+		assertTrue(InformationalArtifactPage.checkElementsCountInTable(1,
+				() -> InformationalArtifactPage.getElemenetsFromTable()));
+
+		String actulaArtifactDescription = InformationalArtifactPage
+				.getArtifactDescription(artifactInfo.getArtifactLabel());
+		assertTrue(artifactInfo.getDescription().equals(actulaArtifactDescription));
+
+		InformationalArtifactPage.clickEditArtifact(artifactInfo.getArtifactLabel());
+		InformationalArtifactPage.artifactPopup().defineArtifactLabel("artifact2");
+	}
+
+	// @Test()
+	// public void updateInformationalArtifact(){
+	// ArtifactInfo artifactInfo = new ArtifactInfo("", "", "new artifact",
+	// "artifact1", "");
+	// InformationalArtifactPage.clickEditArtifact("artifact1");
+	// String newDesc = "newDesc";
+	// InformationalArtifactPage.artifactPopup().insertDescription(newDesc);
+	// InformationalArtifactPage.artifactPopup().clickUpdateButton();
+	// String actulaArtifactDescription =
+	// InformationalArtifactPage.getArtifactDescription(artifactInfo.getArtifactLabel());
+	// assertTrue(newDesc.equals(actulaArtifactDescription));
+	// InformationalArtifactPage.clickEditArtifact(artifactInfo.getArtifactLabel());
+	// InformationalArtifactPage.artifactPopup().defineArtifactLabel("artifact2");
+	// InformationalArtifactPage.artifactPopup().selectArtifactType(artifactInfo.getArtifactType());
+	// }
+
+	@Test
+	public void verifyTwoToscaArtifacts() throws Exception {
+		String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "CPWithAttributes.yml";
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToToscaArtifactsScreen();
+
+		// List<WebElement> elemenetsFromTable =
+		// GeneralPageElements.getElemenetsFromTable();
+		// Supplier<List<WebElement>> supplier = () -> elemenetsFromTable;
+		// assertTrue(ToscaArtifactsPage.checkElementsCountInTable(2,
+		// supplier));
+		assertTrue(ToscaArtifactsPage.checkElementsCountInTable(2));
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Onboard.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Onboard.java
new file mode 100644
index 0000000..713bc4d
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Onboard.java
@@ -0,0 +1,222 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.sanity;
+
+import static org.testng.AssertJUnit.assertNotNull;
+
+import java.awt.AWTException;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.openecomp.sdc.ci.tests.datatypes.CanvasElement;
+import org.openecomp.sdc.ci.tests.datatypes.CanvasManager;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ServiceCategoriesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.pages.CompositionPage;
+import org.openecomp.sdc.ci.tests.pages.GeneralPageElements;
+import org.openecomp.sdc.ci.tests.pages.GovernorOperationPage;
+import org.openecomp.sdc.ci.tests.pages.OpsOperationPage;
+import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
+import org.openecomp.sdc.ci.tests.pages.ServiceGeneralPage;
+import org.openecomp.sdc.ci.tests.pages.TesterOperationPage;
+import org.openecomp.sdc.ci.tests.utilities.FileHandling;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.OnboardingUtils;
+import org.openecomp.sdc.ci.tests.utilities.ServiceUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openecomp.sdc.ci.tests.verificator.ServiceVerificator;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class Onboard extends SetupCDTest {
+	
+
+	public static Object[][] provideData(Object[] fileNamesFromFolder, String filepath) {
+		Object[][] arObject = new Object[fileNamesFromFolder.length][];
+
+		int index = 0;
+		for (Object obj : fileNamesFromFolder) {
+			arObject[index++] = new Object[] { filepath, obj };
+		}
+		return arObject;
+	}
+
+	@DataProvider(name = "VNF_List")
+	private static final Object[][] VnfList() throws Exception {
+		String filepath = getFilePath();
+		Object[] fileNamesFromFolder = OnboardingUtils.getZipFileNamesFromFolder(filepath);
+		System.out.println(String.format("There are %s zip file(s) to test", fileNamesFromFolder.length));
+		return provideData(fileNamesFromFolder, filepath);
+	}
+
+	@Test(dataProvider = "VNF_List")
+	public void onboardVNFTest(String filepath, String vnfFile) throws Exception, Throwable {
+		SetupCDTest.setScreenshotFile(vnfFile);
+		extendTest.setDescription(vnfFile);
+
+		String vspName = onboardVNF(filepath, vnfFile);
+
+		ResourceGeneralPage.clickSubmitForTestingButton(vspName);
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(vspName);
+		TesterOperationPage.certifyComponent(vspName);
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+		// create service
+		ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
+		ServiceUIUtils.createService(serviceMetadata, getUser());
+
+		ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
+		CompositionPage.searchForElement(vspName);
+		CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
+		CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vspName);
+		assertNotNull(vfElement);
+		ServiceVerificator.verifyNumOfComponentInstances(serviceMetadata, "0.1", 1, getUser());
+
+		ServiceGeneralPage.clickSubmitForTestingButton(serviceMetadata.getName());
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+		TesterOperationPage.certifyComponent(serviceMetadata.getName());
+
+		quitAndReLogin(UserRoleEnum.GOVERNOR);
+		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+		GovernorOperationPage.approveSerivce(serviceMetadata.getName());
+
+//		quitAndReLogin(UserRoleEnum.OPS);
+//		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+//		OpsOperationPage.distributeService();
+//		OpsOperationPage.displayMonitor();
+//
+//		List<WebElement> rowsFromMonitorTable = OpsOperationPage.getRowsFromMonitorTable();
+//		AssertJUnit.assertEquals(1, rowsFromMonitorTable.size());
+//
+//		OpsOperationPage.waitUntilArtifactsDistributed(0);
+//
+//		extendTest.log(LogStatus.PASS, String.format("onboarding %s test is passed ! ", vnfFile));
+	}
+
+	private String onboardVNF(String filepath, String vnfFile) throws Exception, Throwable {
+		extendTest.log(LogStatus.INFO, String.format("going to onboard the VNF %s......", vnfFile));
+		System.out.println(String.format("going to onboard the VNF %s......", vnfFile));
+
+		OnboardingUtils.createVendorLicense(getUser());
+		String vspName = OnboardingUtils.createVendorSoftwareProduct(vnfFile, filepath, getUser());
+		GeneralUIUtils.getWebButton("repository-icon").click();
+		extendTest.log(LogStatus.INFO, String.format("searching for onboarded %s", vnfFile));
+		GeneralUIUtils.getWebElementWaitForVisible("onboarding-search").sendKeys(vspName);
+		AssertJUnit.assertTrue(GeneralPageElements.checkElementsCountInTable(2));
+
+		List<WebElement> elemenetsFromTable = GeneralPageElements.getElemenetsFromTable();
+		GeneralUIUtils.waitForLoader();
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 30);
+		WebElement findElement = wait.until(ExpectedConditions.visibilityOf(elemenetsFromTable.get(1)));
+		findElement.click();
+		GeneralUIUtils.waitForLoader();
+		extendTest.log(LogStatus.INFO,
+				String.format("going to import %s......", vnfFile.substring(0, vnfFile.indexOf("."))));
+		GeneralUIUtils.getWebElementWaitForVisible("import-csar").click();
+		GeneralUIUtils.getWebButton("create/save").click();
+		GeneralUIUtils.waitForLoaderOnboarding();
+		WebDriverWait wait2 = new WebDriverWait(GeneralUIUtils.getDriver(), 2 * 60);
+		wait2.until(ExpectedConditions.visibilityOfElementLocated(
+				By.xpath("//*[@data-tests-id='" + DataTestIdEnum.LifeCyleChangeButtons.CHECK_IN.getValue() + "']")));
+		extendTest.log(LogStatus.PASS,
+				String.format("succeeded to import %s......", vnfFile.substring(0, vnfFile.indexOf("."))));
+		return vspName;
+	}
+	
+	public static String getFilePath() {
+		String filepath = System.getProperty("filepath");
+		if (filepath == null && System.getProperty("os.name").contains("Windows")) {
+			filepath = FileHandling.getResourcesFilesPath();
+		}
+		
+		else if(filepath.isEmpty() && !System.getProperty("os.name").contains("Windows")){
+				filepath = FileHandling.getBasePath() + File.separator + "Files";
+		}
+		return filepath;
+	}
+	
+	@Test
+	public void twoOnboardedVNFsInService() throws Exception, Throwable{
+		
+		String filepath = getFilePath();
+		
+		final String dnsScaling = "DNSscaling12.8.16.zip";
+		final String  vLB = "vLB12.8.16.zip";
+		
+		String[] onboardList = {dnsScaling, vLB};
+		
+		Map<String, String> vspMap = new HashMap<String,String>();
+		
+		for (String vnf : onboardList){
+			GeneralUIUtils.waitForElementsListInvisibility(By.className("ui-notification"));
+			String vspName = onboardVNF(filepath, vnf);
+			vspMap.put(vnf, vspName);
+			ResourceGeneralPage.clickSubmitForTestingButton(vspName);
+		}
+		
+		quitAndReLogin(UserRoleEnum.TESTER);
+		for (String vspName : vspMap.values()){
+			GeneralUIUtils.waitForElementsListInvisibility(By.className("ui-notification"));
+			GeneralUIUtils.findComponentAndClick(vspName);
+			TesterOperationPage.certifyComponent(vspName);
+		}
+		
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+		ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
+		ServiceUIUtils.createService(serviceMetadata, getUser());
+		ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
+		CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
+		
+		Map<String, CanvasElement> canvasElements = new HashMap<String,CanvasElement>();
+		for (String vspName : vspMap.values()){
+			CompositionPage.searchForElement(vspName);
+			CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vspName);
+			assertNotNull(vfElement);
+			canvasElements.put(vspName, vfElement);
+		}
+		ServiceVerificator.verifyNumOfComponentInstances(serviceMetadata, "0.1", 2, getUser());
+		
+	}
+	
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Vf.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Vf.java
new file mode 100644
index 0000000..96a22ef
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/sanity/Vf.java
@@ -0,0 +1,377 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.sanity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ArtifactInfo;
+import org.openecomp.sdc.ci.tests.datatypes.CanvasElement;
+import org.openecomp.sdc.ci.tests.datatypes.CanvasManager;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.InformationalArtifacts;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+import org.openecomp.sdc.ci.tests.datatypes.PropertyInfo;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.NormativeTypesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.PropertyTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.pages.CompositionPage;
+import org.openecomp.sdc.ci.tests.pages.DeploymentArtifactPage;
+import org.openecomp.sdc.ci.tests.pages.GovernorOperationPage;
+import org.openecomp.sdc.ci.tests.pages.InformationalArtifactPage;
+import org.openecomp.sdc.ci.tests.pages.OpsOperationPage;
+import org.openecomp.sdc.ci.tests.pages.PropertiesPage;
+import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
+import org.openecomp.sdc.ci.tests.pages.ServiceGeneralPage;
+import org.openecomp.sdc.ci.tests.pages.TesterOperationPage;
+import org.openecomp.sdc.ci.tests.utilities.ArtifactUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.FileHandling;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.PropertiesUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ServiceUIUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openecomp.sdc.ci.tests.verificator.ServiceVerificator;
+import org.openecomp.sdc.ci.tests.verificator.VfVerificator;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
+import org.testng.AssertJUnit;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+public class Vf extends SetupCDTest {
+
+	private String filePath;
+
+	@BeforeMethod
+	public void beforeTest() {
+		filePath = System.getProperty("filepath");
+		if (filePath == null) {
+			filePath = FileHandling.getResourcesFilesPath();
+		}
+	}
+
+	@Test
+	public void createVF() throws Exception {
+
+		// create Resource
+		ResourceReqDetails resourceMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(resourceMetaData, getUser());
+
+	}
+
+	@Test
+	public void updateVF() throws Exception {
+
+		// create Resource
+		ResourceReqDetails resourceMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(resourceMetaData, getUser());
+
+		// update Resource
+		String expectedDesc = "kuku";
+		resourceMetaData.setDescription(expectedDesc);
+		ResourceGeneralPage.defineDescription(expectedDesc);
+		GeneralUIUtils.clickUpdateButton();
+
+		VfVerificator.verifyVFUpdatedInUI(resourceMetaData);
+	}
+
+	@Test
+	public void vfcLinkedToComputeInVfWithArtifactsFlow() throws Exception {
+		// String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "vFW_VFC.yml";
+
+		// import Resource
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+		ResourceGeneralPage.getLeftMenu().moveToInformationalArtifactScreen();
+		ArtifactUIUtils.fillPlaceHolderInformationalArtifact(InformationalArtifacts.CAPACITY, filePath,
+				"asc_heat 0 2.yaml", "capacity");
+		ArtifactUIUtils.fillPlaceHolderInformationalArtifact(InformationalArtifacts.FEATURES, filePath,
+				"asc_heat 0 2.yaml", "features");
+		ResourceGeneralPage.clickSubmitForTestingButton(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(atomicResourceMetaData.getName());
+		TesterOperationPage.certifyComponent(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+
+		// create Resource
+		ResourceReqDetails vfMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(vfMetaData, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
+
+		ArtifactInfo artifact1 = new ArtifactInfo(filePath, "asc_heat 0 2.yaml", "kuku", "artifact1", "OTHER");
+		DeploymentArtifactPage.clickAddNewArtifact();
+		ArtifactUIUtils.fillAndAddNewArtifactParameters(artifact1);
+		ArtifactInfo artifact2 = new ArtifactInfo(filePath, "sample-xml-alldata-1-1.xml", "kuku", "artifact2",
+				"YANG_XML");
+		DeploymentArtifactPage.clickAddNewArtifact();
+		ArtifactUIUtils.fillAndAddNewArtifactParameters(artifact2);
+
+		DeploymentArtifactPage.getLeftMenu().moveToCompositionScreen();
+		CanvasManager canvasManager = CanvasManager.getCanvasManager();
+		CanvasElement computeElement = canvasManager.createElementOnCanvas(LeftPanelCanvasItems.COMPUTE);
+
+		CompositionPage.searchForElement(atomicResourceMetaData.getName());
+		CanvasElement cpElement = canvasManager.createElementOnCanvas(atomicResourceMetaData.getName());
+		AssertJUnit.assertNotNull(cpElement);
+		ServiceVerificator.verifyNumOfComponentInstances(vfMetaData, "0.1", 2, getUser());
+		canvasManager.linkElements(cpElement, computeElement);
+
+		vfMetaData.setVersion("0.1");
+		VfVerificator.verifyLinkCreated(vfMetaData, getUser(), 1);
+
+	}
+
+	@Test
+	public void addingDeploymentArtifactToVFInstanceInService() throws Exception {
+		// String filePath = FileHandling.getResourcesFilesPath();
+		// create Resource
+		ResourceReqDetails vfMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(vfMetaData, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
+
+		List<ArtifactInfo> deploymentArtifactList = new ArrayList<ArtifactInfo>();
+		deploymentArtifactList.add(new ArtifactInfo(filePath, "asc_heat 0 2.yaml", "kuku", "artifact1", "OTHER"));
+		deploymentArtifactList
+				.add(new ArtifactInfo(filePath, "sample-xml-alldata-1-1.xml", "cuku", "artifact2", "YANG_XML"));
+		for (ArtifactInfo deploymentArtifact : deploymentArtifactList) {
+			DeploymentArtifactPage.clickAddNewArtifact();
+			ArtifactUIUtils.fillAndAddNewArtifactParameters(deploymentArtifact);
+		}
+
+		ResourceGeneralPage.clickSubmitForTestingButton(vfMetaData.getName());
+		GeneralUIUtils.clickASDCLogo();
+
+		ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
+		ServiceUIUtils.createService(serviceMetadata, getUser());
+
+		ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
+		CompositionPage.searchForElement(vfMetaData.getName());
+		CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
+		CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vfMetaData.getName());
+
+		serviceCanvasManager.clickOnCanvaElement(vfElement);
+		GeneralUIUtils.waitFordataTestIdVisibility("deployment-artifact-tab").click();
+		GeneralUIUtils.waitFordataTestIdVisibility("add_Artifact_Button").click();
+		GeneralUIUtils.waitForLoader();
+		ArtifactInfo artifact3 = new ArtifactInfo(filePath, "Heat-File.yaml", "kuku", "artifact3",
+				"DCAE_INVENTORY_TOSCA");
+		deploymentArtifactList.add(artifact3);
+		GeneralUIUtils.getWebElementWaitForVisible("artifact-label").sendKeys(artifact3.getArtifactLabel());
+		DeploymentArtifactPage.artifactPopup().selectArtifactType(artifact3.getArtifactType());
+		DeploymentArtifactPage.artifactPopup().insertDescription(artifact3.getDescription());
+		DeploymentArtifactPage.artifactPopup().loadFile(artifact3.getFilepath(), artifact3.getFilename());
+		GeneralUIUtils.getWebElementWaitForVisible("Done").click();
+		GeneralUIUtils.waitForLoader();
+
+		List<WebElement> actualArtifactList = GeneralUIUtils
+				.waitForElementsListVisibility(By.className("i-sdc-designer-sidebar-section-content-item-artifact"));
+		AssertJUnit.assertEquals(deploymentArtifactList.size(), actualArtifactList.size());
+
+	}
+
+	@Test
+	public void distibuteVFCInVFInServiceTest() throws Exception {
+		// String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "vFW_VFC.yml";
+
+		// import Resource
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+		ResourceGeneralPage.getLeftMenu().moveToInformationalArtifactScreen();
+		ArtifactUIUtils.fillPlaceHolderInformationalArtifact(InformationalArtifacts.CAPACITY, filePath,
+				"asc_heat 0 2.yaml", "capacity");
+		ArtifactUIUtils.fillPlaceHolderInformationalArtifact(InformationalArtifacts.FEATURES, filePath,
+				"asc_heat 0 2.yaml", "features");
+		ResourceGeneralPage.clickSubmitForTestingButton(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(atomicResourceMetaData.getName());
+		TesterOperationPage.certifyComponent(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+
+		// create Resource
+		ResourceReqDetails vfMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(vfMetaData, getUser());
+
+		ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
+
+		List<ArtifactInfo> deploymentArtifactList = new ArrayList<ArtifactInfo>();
+		deploymentArtifactList.add(new ArtifactInfo(filePath, "asc_heat 0 2.yaml", "kuku", "artifact1", "OTHER"));
+		deploymentArtifactList
+				.add(new ArtifactInfo(filePath, "sample-xml-alldata-1-1.xml", "kuku", "artifact2", "YANG_XML"));
+		for (ArtifactInfo deploymentArtifact : deploymentArtifactList) {
+			DeploymentArtifactPage.clickAddNewArtifact();
+			ArtifactUIUtils.fillAndAddNewArtifactParameters(deploymentArtifact);
+		}
+
+		DeploymentArtifactPage.getLeftMenu().moveToCompositionScreen();
+		CanvasManager vfCanvasManager = CanvasManager.getCanvasManager();
+		CanvasElement computeElement = vfCanvasManager.createElementOnCanvas(LeftPanelCanvasItems.COMPUTE);
+		CompositionPage.searchForElement(atomicResourceMetaData.getName());
+		CanvasElement cpElement = vfCanvasManager.createElementOnCanvas(atomicResourceMetaData.getName());
+
+		vfCanvasManager.linkElements(cpElement, computeElement);
+
+		ResourceGeneralPage.clickSubmitForTestingButton(vfMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(vfMetaData.getName());
+		TesterOperationPage.certifyComponent(vfMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+
+		// create service
+		ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
+		ServiceUIUtils.createService(serviceMetadata, getUser());
+
+		ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
+		CompositionPage.searchForElement(vfMetaData.getName());
+		CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
+		CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vfMetaData.getName());
+
+		ServiceGeneralPage.clickSubmitForTestingButton(serviceMetadata.getName());
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+		TesterOperationPage.certifyComponent(serviceMetadata.getName());
+
+		quitAndReLogin(UserRoleEnum.GOVERNOR);
+		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+		GovernorOperationPage.approveSerivce(serviceMetadata.getName());
+
+		quitAndReLogin(UserRoleEnum.OPS);
+		GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
+		OpsOperationPage.distributeService();
+		OpsOperationPage.displayMonitor();
+
+		List<WebElement> rowsFromMonitorTable = OpsOperationPage.getRowsFromMonitorTable();
+		AssertJUnit.assertEquals(1, rowsFromMonitorTable.size());
+
+		String deploymentArtifactsSize = String.valueOf(deploymentArtifactList.size() + 1);
+
+		OpsOperationPage.waitUntilArtifactsDistributed(deploymentArtifactsSize, 0);
+
+	}
+
+	@Test
+	public void changesInVFCInstanceInVF() throws Exception {
+		// String filePath = FileHandling.getResourcesFilesPath();
+		String fileName = "vFW_VFC.yml";
+
+		// import Resource
+		ResourceReqDetails atomicResourceMetaData = ElementFactory.getDefaultResourceByTypeNormTypeAndCatregory(
+				ResourceTypeEnum.VFC, NormativeTypesEnum.ROOT, ResourceCategoryEnum.NETWORK_L2_3_ROUTERS, getUser());
+		ResourceUIUtils.importVfc(atomicResourceMetaData, filePath, fileName, getUser());
+		ResourceGeneralPage.getLeftMenu().moveToInformationalArtifactScreen();
+		ArtifactUIUtils.fillPlaceHolderInformationalArtifact(InformationalArtifacts.CAPACITY, filePath,
+				"asc_heat 0 2.yaml", "capacity");
+
+		InformationalArtifactPage.getLeftMenu().moveToPropertiesScreen();
+		int propertiesCount = PropertiesPage.getElemenetsFromTable().size();
+
+		PropertyInfo prop1 = new PropertyInfo("p1", "v1", "prop1", PropertyTypeEnum.STRING);
+
+		PropertiesPage.clickAddPropertyArtifact();
+		PropertiesUIUtils.addNewProperty(prop1);
+		AssertJUnit.assertTrue(PropertiesPage.checkElementsCountInTable(propertiesCount + 1,
+				() -> PropertiesPage.getElemenetsFromTable()));
+
+		ResourceGeneralPage.clickSubmitForTestingButton(atomicResourceMetaData.getName());
+
+		ResourceReqDetails vfMetaData = ElementFactory.getDefaultResourceByType(ResourceTypeEnum.VF, getUser());
+		ResourceUIUtils.createResource(vfMetaData, getUser());
+
+		DeploymentArtifactPage.getLeftMenu().moveToCompositionScreen();
+		CanvasManager vfCanvasManager = CanvasManager.getCanvasManager();
+		CompositionPage.searchForElement(atomicResourceMetaData.getName());
+		CanvasElement vfcElement = vfCanvasManager.createElementOnCanvas(atomicResourceMetaData.getName());
+
+		vfCanvasManager.clickOnCanvaElement(vfcElement);
+		CompositionPage.showPropertiesAndAttributesTab();
+		List<WebElement> properties = CompositionPage.getProperties();
+		for (int i = 0; i < 2; i++) {
+			// WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver()
+			// , 30);
+			// WebElement findElement =
+			// wait.until(ExpectedConditions.visibilityOf(properties.get(i).findElement(By.className("i-sdc-designer-sidebar-section-content-item-property-and-attribute-label"))));
+			WebElement findElement = properties.get(i).findElement(
+					By.className("i-sdc-designer-sidebar-section-content-item-property-and-attribute-label"));
+			findElement.click();
+			PropertiesPage.getPropertyPopup().insertPropertyDefaultValue("abc123");
+			PropertiesPage.getPropertyPopup().clickSave();
+			GeneralUIUtils.waitForInvisibileElement(DataTestIdEnum.PropertiesPageEnum.SAVE.getValue());
+		}
+		vfCanvasManager.moveToFreeLocation(vfMetaData.getName());
+		GeneralUIUtils.waitFordataTestIdVisibility("deployment-artifact-tab").click();
+		GeneralUIUtils.waitFordataTestIdVisibility("add_Artifact_Button").click();
+		GeneralUIUtils.waitForLoader();
+		ArtifactInfo artifact3 = new ArtifactInfo(filePath, "Heat-File.yaml", "kuku", "artifact3", "OTHER");
+		GeneralUIUtils.getWebElementWaitForVisible("artifact-label").sendKeys(artifact3.getArtifactLabel());
+		DeploymentArtifactPage.artifactPopup().selectArtifactType(artifact3.getArtifactType());
+		DeploymentArtifactPage.artifactPopup().insertDescription(artifact3.getDescription());
+		DeploymentArtifactPage.artifactPopup().loadFile(artifact3.getFilepath(), artifact3.getFilename());
+		GeneralUIUtils.getWebElementWaitForVisible("Done").click();
+		GeneralUIUtils.waitForLoader();
+
+		quitAndReLogin(UserRoleEnum.TESTER);
+		GeneralUIUtils.findComponentAndClick(atomicResourceMetaData.getName());
+		TesterOperationPage.certifyComponent(atomicResourceMetaData.getName());
+
+		quitAndReLogin(UserRoleEnum.DESIGNER);
+		GeneralUIUtils.findComponentAndClick(vfMetaData.getName());
+		ResourceGeneralPage.getLeftMenu().moveToCompositionScreen();
+		vfCanvasManager = CanvasManager.getCanvasManager();
+		vfCanvasManager.clickOnCanvaElement(vfcElement);
+		// change version
+		GeneralUIUtils.getWebElementByName("changeVersion");
+		Select selectlist = new Select(GeneralUIUtils.getWebElementByName("changeVersion"));
+		selectlist.selectByVisibleText("1.0");
+		GeneralUIUtils.waitForLoader();
+
+		// GeneralUIUtils.waitUntilClickableButton(DataTestIdEnum.LifeCyleChangeButtons.SUBMIT_FOR_TESTING.getValue()).click();
+		// ResourceGeneralPage.clickSubmitForTestingButton(vfMetaData.getName());
+		//
+		// vfMetaData.setVersion("0.1");
+		// VfVerificator.verifyVFLifecycle(vfMetaData, getUser(),
+		// LifecycleStateEnum.READY_FOR_CERTIFICATION);
+	}
+
+	@Override
+	protected UserRoleEnum getRole() {
+		return UserRoleEnum.DESIGNER;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/OnboardCSVReport.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/OnboardCSVReport.java
new file mode 100644
index 0000000..03c9b02
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/OnboardCSVReport.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.setup;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.PrintWriter;
+
+public class OnboardCSVReport {
+
+	private StringBuilder sb;
+	private PrintWriter pw;
+
+	public OnboardCSVReport(String filepath, String filename) {
+		sb = new StringBuilder();
+		try {
+			File csvFile = new File(filepath + filename);
+			pw = new PrintWriter(csvFile);
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+
+	}
+
+	public StringBuilder appendStringToFile(String content) {
+		return sb.append(content + ",");
+	}
+
+	public void openNewRow() {
+		sb.append("\n");
+	}
+
+	public void writeRow(String... content) {
+		for (String str : content) {
+			appendStringToFile(str);
+		}
+		openNewRow();
+	}
+
+	public void closeFile() {
+		pw.write(sb.toString());
+		pw.close();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/RemoteWebDriverTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/RemoteWebDriverTest.java
new file mode 100644
index 0000000..e5fcafb
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/RemoteWebDriverTest.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.setup;
+
+import java.net.URL;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.openqa.selenium.Platform;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.remote.RemoteWebDriver;
+
+public class RemoteWebDriverTest {
+
+	// @Test
+	public void remoteTest() throws Exception {
+		DesiredCapabilities cap = new DesiredCapabilities().firefox();
+		cap.setPlatform(Platform.WINDOWS);
+		cap.setBrowserName("firefox");
+
+		RemoteWebDriver remoteDriver = new RemoteWebDriver(new URL("http://1.2.3.4:5555/wd/hub"), cap);
+		remoteDriver.navigate().to("http://www.google.co.il");
+		remoteDriver.findElementByName("q").sendKeys("execute automation");
+		remoteDriver.findElementByName("btnK").click();
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/SetupCDTest.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/SetupCDTest.java
new file mode 100644
index 0000000..a72168e
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/setup/SetupCDTest.java
@@ -0,0 +1,538 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.setup;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.log4j.Logger;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.config.Config;
+import org.openecomp.sdc.ci.tests.datatypes.UserCredentials;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.run.StartTest;
+import org.openecomp.sdc.ci.tests.utilities.FileHandling;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utils.Utils;
+import org.openecomp.sdc.ci.tests.utils.rest.CatalogRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ProductRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
+import org.openecomp.sdc.ci.tests.utils.rest.ServiceRestUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testng.Assert;
+import org.testng.AssertJUnit;
+import org.testng.ITestResult;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeSuite;
+
+import com.relevantcodes.extentreports.ExtentReports;
+import com.relevantcodes.extentreports.ExtentTest;
+import com.relevantcodes.extentreports.LogStatus;
+
+public abstract class SetupCDTest {
+
+	public SetupCDTest() {
+		// LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
+		// lc.getLogger("org.apache").setLevel(Level.INFO);
+		//// System.setProperty("org.apache.commons.logging.Log",
+		// "org.apache.commons.logging.impl.SimpleLog");
+		//// System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire",
+		// "OFF");
+		//// System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient",
+		// "OFF");
+
+	}
+
+	public static Logger logger = Logger.getLogger(SetupCDTest.class.getName());
+
+	/**************** CONSTANTS ****************/
+	private static final String CREDENTIALS_FILE = "credentials.yaml";
+	private static final String REPORT_FILE_NAME = "ASDC_UI_Extent_Report.html";
+	public static final String REPORT_FOLDER = "./ExtentReport/";
+	public static final String SELENIUM_NODE_URL = "http://%s:%s/wd/hub";
+	private static final String SCREENSHOT_FOLDER = REPORT_FOLDER + "screenshots/";
+	private static final String SHORT_CSV_REPORT_FILE_NAME = "ShortReport.csv";
+	private static final int NUM_OF_ATTEMPTS_TO_REFTRESH = 2;
+
+	/**************** USERS ****************/
+	protected static User designerUser;
+	protected static User adminUser;
+	protected static User testerUser;
+	protected static User governorUser;
+	protected static User opsUser;
+	protected static User productManagerUser;
+
+	public static Config config;
+
+	/**************** PRIVATES ****************/
+	private Map<?, ?> credentialsYamlFileMap;
+	private static String url;
+	private User user;
+	private static boolean localEnv = true;
+	private int refreshAttempts = 0;
+
+	protected abstract UserRoleEnum getRole();
+
+	protected ExtentReports extentReport;
+	protected static ExtentTest extendTest;
+	private static String screenshotFile;
+
+	public static String getScreenshotFile() {
+		return screenshotFile;
+	}
+
+	public static void setScreenshotFile(String screenshotFile) {
+		SetupCDTest.screenshotFile = screenshotFile;
+	}
+
+	public static ExtentTest getExtendTest() {
+		return extendTest;
+	}
+
+	private OnboardCSVReport csvReport;
+
+	public OnboardCSVReport getCsvReport() {
+		return csvReport;
+	}
+
+	/**************** BEFORE ****************/
+
+	@BeforeSuite(alwaysRun = true)
+	public void setEnvParameters() throws Exception {
+
+		File dir = new File(REPORT_FOLDER);
+		try {
+			FileUtils.deleteDirectory(dir);
+		} catch (IOException e) {
+		}
+		extentReport = new ExtentReports(REPORT_FOLDER + REPORT_FILE_NAME);
+		csvReport = new OnboardCSVReport(REPORT_FOLDER, SHORT_CSV_REPORT_FILE_NAME);
+
+		System.out.println("Setup....");
+		config = Utils.getConfig();
+		setUrl();
+	}
+
+	@BeforeMethod(alwaysRun = true)
+	public void setBrowserBeforeTest(java.lang.reflect.Method method) throws Exception {
+		extendTest = extentReport.startTest(method.getName());
+		extendTest.log(LogStatus.INFO, "Test started");
+		setBrowserBeforeTest(getRole());
+	}
+
+	/**************** AFTER ****************/
+	@AfterMethod(alwaysRun = true)
+	public void quitAfterTest(ITestResult result) throws Exception {
+
+		StringBuilder sb = new StringBuilder();
+		if (result.getParameters().length != 0) {
+			for (int i = 0; i < result.getParameters().length - 1; i++) {
+				sb.append(result.getParameters()[i].toString() + ",");
+			}
+			sb.append(result.getParameters()[result.getParameters().length - 1].toString());
+		}
+
+		File imageFilePath = GeneralUIUtils.takeScreenshot(screenshotFile, SCREENSHOT_FOLDER, result.getName());
+		final String absolutePath = new File(REPORT_FOLDER).toURI().relativize(imageFilePath.toURI()).getPath();
+		if (result.getStatus() == ITestResult.SUCCESS) {
+			extendTest.log(LogStatus.PASS, "Test Result : <span class='label success'>Success</span>");
+			extendTest.log(LogStatus.PASS,
+					"Finished the test with the following screenshot : " + extendTest.addScreenCapture(absolutePath));
+			csvReport.writeRow(result.getName(), sb.toString(), "PASS");
+		} else if (result.getStatus() == ITestResult.FAILURE || result.getStatus() == ITestResult.SKIP) {
+			extendTest.log(LogStatus.ERROR, "ERROR - The following exepction occured");
+			extendTest.log(LogStatus.ERROR, result.getThrowable());
+			extendTest.log(LogStatus.ERROR,
+					"Failure is described in the following screenshot : " + extendTest.addScreenCapture(absolutePath));
+			extendTest.log(LogStatus.FAIL, "<span class='label failure'>Failure</span>");
+			csvReport.writeRow(result.getName(), sb.toString(), "FAIL");
+		}
+
+		extentReport.endTest(extendTest);
+		extentReport.flush();
+
+		quitBrowser();
+//		deleteCreatedComponents2(getCatalogAsMap());
+	}
+
+	@AfterClass(alwaysRun = true)
+	public void afterSuite() {
+		csvReport.closeFile();
+	}
+
+	/*************************************/
+
+	private Map<String, ArrayList<Component>> getCatalogAsMap() throws IOException {
+		RestResponse catalog = CatalogRestUtils.getCatalog(getUser().getUserId());
+		Map<String, ArrayList<Component>> convertCatalogResponseToJavaObject = ResponseParser
+				.convertCatalogResponseToJavaObject(catalog.getResponse());
+		return convertCatalogResponseToJavaObject;
+	}
+
+	private void deleteCreatedComponents2(Map<String, ArrayList<Component>> convertCatalogResponseToJavaObject)
+			throws IOException {
+		final String userId = getUser().getUserId();
+		ArrayList<Component> resourcesArrayList = convertCatalogResponseToJavaObject.get("resources");
+
+		List<String> collect = resourcesArrayList.stream().filter(s -> s.getName().startsWith("ci"))
+				.map(e -> e.getUniqueId()).collect(Collectors.toList());
+		for (String uId : collect) {
+			ResourceRestUtils.deleteResource(uId, userId);
+		}
+
+		resourcesArrayList = convertCatalogResponseToJavaObject.get("services");
+		collect = resourcesArrayList.stream().filter(s -> s.getName().startsWith("ci")).map(e -> e.getUniqueId())
+				.collect(Collectors.toList());
+		for (String uId : collect) {
+			ServiceRestUtils.deleteServiceById(uId, userId);
+		}
+
+		resourcesArrayList = convertCatalogResponseToJavaObject.get("products");
+		collect = resourcesArrayList.stream().filter(s -> s.getName().startsWith("ci")).map(e -> e.getUniqueId())
+				.collect(Collectors.toList());
+		for (String uId : collect) {
+			ProductRestUtils.deleteProduct(uId, userId);
+		}
+
+	}
+
+	/**************** MAIN ****************/
+	public static void main(String[] args) {
+		System.out.println("---------------------");
+		System.out.println("running test from CLI");
+		System.out.println("---------------------");
+
+		String attsdcFilePath = FileHandling.getBasePath() + File.separator + "conf" + File.separator + "sdc.yaml";
+		System.setProperty("config.resource", attsdcFilePath);
+		System.out.println("sdc.yaml file path is : " + attsdcFilePath);
+
+		Object[] testSuitsList = FileHandling
+				.getFileNamesFromFolder(FileHandling.getBasePath() + File.separator + "testSuites", ".xml");
+		if (testSuitsList != null) {
+			System.out.println(String.format("Found %s testSuite(s)", testSuitsList.length));
+			args = Arrays.copyOf(testSuitsList, testSuitsList.length, String[].class);
+			StartTest.main(args);
+		}
+	}
+
+	/***********************************************************************************/
+
+	protected static String setUrl() {
+		url = config.getUrl();
+		if (url == null) {
+			String message = "no URL found";
+			System.out.println(message);
+			Assert.fail(message);
+		} else if (!url.contains("localhost") && !url.contains("127.0.0.1")) {
+			localEnv = false;
+		}
+		return url;
+	}
+
+	private Map<String, String> loadCredentialsFile() throws Exception {
+		File credentialsFile = new File(
+				FileHandling.getBasePath() + File.separator + "conf" + File.separator + CREDENTIALS_FILE);
+		if (!credentialsFile.exists()) {
+			credentialsFile = new File(FileHandling.getConfFilesPath() + CREDENTIALS_FILE);
+		}
+		credentialsYamlFileMap = (Map<String, String>) FileHandling.parseYamlFile(credentialsFile.getAbsolutePath());
+		return (Map<String, String>) credentialsYamlFileMap;
+	}
+
+	protected UserCredentials getUserCredentialsFromFile(String userRole) throws Exception {
+		Map<String, String> credentialsMap = (Map<String, String>) credentialsYamlFileMap.get(userRole);
+		String user = (String) credentialsMap.get("username");
+		String password = (String) credentialsMap.get("password");
+		String firstname = (String) credentialsMap.get("firstname");
+		String lastname = (String) credentialsMap.get("lastname");
+
+		return new UserCredentials(user, password, firstname, lastname);
+	}
+
+	public UserCredentials updateUserUserId(String role) throws Exception {
+		System.out.println("updating...");
+		UserCredentials designerCredentialsFromFile = null;
+		UserCredentials testerCredentialsFromFile = null;
+		UserCredentials adminCredentialsFromFile = null;
+		UserCredentials opsCredentialsFromFile = null;
+		UserCredentials governorCredentialsFromFile = null;
+		UserCredentials productCredentialsFromFile = null;
+		UserCredentials productManagerCredentialsFromFile = null;
+
+		String lowerCaseRole = role.toLowerCase();
+		try {
+			if (lowerCaseRole.equals("designer")) {
+				designerCredentialsFromFile = getUserCredentialsFromFile("designer");
+				designerUser.setUserId(designerCredentialsFromFile.getUserId());
+				designerUser.setFirstName(designerCredentialsFromFile.getFirstName());
+				designerUser.setLastName(designerCredentialsFromFile.getLastName());
+				return designerCredentialsFromFile;
+			} else if (lowerCaseRole.equals("tester")) {
+				testerCredentialsFromFile = getUserCredentialsFromFile("tester");
+				testerUser.setUserId(testerCredentialsFromFile.getUserId());
+				testerUser.setFirstName(testerCredentialsFromFile.getFirstName());
+				testerUser.setLastName(testerCredentialsFromFile.getLastName());
+				return testerCredentialsFromFile;
+			} else if (lowerCaseRole.equals("admin")) {
+				adminCredentialsFromFile = getUserCredentialsFromFile("admin");
+				adminUser.setUserId(adminCredentialsFromFile.getUserId());
+				adminUser.setFirstName(adminCredentialsFromFile.getFirstName());
+				adminUser.setLastName(adminCredentialsFromFile.getLastName());
+				return adminCredentialsFromFile;
+			} else if (lowerCaseRole.equals("ops")) {
+				opsCredentialsFromFile = getUserCredentialsFromFile("ops");
+				opsUser.setUserId(opsCredentialsFromFile.getUserId());
+				opsUser.setFirstName(opsCredentialsFromFile.getFirstName());
+				opsUser.setLastName(opsCredentialsFromFile.getLastName());
+				return opsCredentialsFromFile;
+			} else if (lowerCaseRole == "governor") {
+				governorCredentialsFromFile = getUserCredentialsFromFile("governor");
+				governorUser.setUserId(governorCredentialsFromFile.getUserId());
+				governorUser.setFirstName(governorCredentialsFromFile.getFirstName());
+				governorUser.setLastName(governorCredentialsFromFile.getLastName());
+				return governorCredentialsFromFile;
+			} else if (lowerCaseRole == "product_local") {
+				productCredentialsFromFile = getUserCredentialsFromFile("product_local");
+				productManagerUser.setUserId(productCredentialsFromFile.getUserId());
+				productManagerUser.setFirstName(productCredentialsFromFile.getFirstName());
+				productManagerUser.setLastName(productCredentialsFromFile.getLastName());
+				return productCredentialsFromFile;
+			} else if (lowerCaseRole == "product_manager") {
+				productManagerCredentialsFromFile = getUserCredentialsFromFile("product_manager");
+				productManagerUser.setUserId(productManagerCredentialsFromFile.getUserId());
+				productManagerUser.setFirstName(productManagerCredentialsFromFile.getFirstName());
+				productManagerUser.setLastName(productManagerCredentialsFromFile.getLastName());
+				return productManagerCredentialsFromFile;
+			}
+		}
+
+		catch (Exception e) {
+			System.out.print("An exception occured...");
+			System.out.println("->exception message is : " + e.getMessage());
+		}
+
+		return null;
+	}
+
+	public static void navigateToUrl(String url) throws Exception {
+
+		try {
+			WebDriver driver = GeneralUIUtils.getDriver();
+			System.out.println("navigating to URL :" + url);
+			driver.manage().window().maximize();
+			driver.manage().deleteAllCookies();
+			driver.navigate().to(url);
+			GeneralUIUtils.windowZoomOut();
+			GeneralUIUtils.waitForLoader();
+		} catch (Exception e) {
+			System.out.println("browser is unreachable");
+			extendTest.log(LogStatus.ERROR, "browser is unreachable");
+			Assert.fail("browser is unreachable");
+		}
+	}
+
+	protected void loginToSystem(UserCredentials credentials, UserRoleEnum role) throws Exception {
+
+		sendUserAndPasswordKeys(credentials);
+		refreshAttempts = (refreshAttempts == 0) ? NUM_OF_ATTEMPTS_TO_REFTRESH : refreshAttempts;
+		if (!getRole().equals(UserRoleEnum.ADMIN)) {
+			try {
+				if(!localEnv){
+//					GeneralUIUtils.ultimateWait();
+					WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 3 * 60);
+					WebElement sdcApp = wait.until(ExpectedConditions.elementToBeClickable(By.id("app-image-SDC")));
+					sdcApp.click();
+					GeneralUIUtils.getDriver().switchTo().frame(1);
+					GeneralUIUtils.waitFordataTestIdVisibility("main-menu-input-search");
+				}
+				else{
+					enterToUserWorkspace();
+				}
+				
+			} catch (Exception e) {
+				refreshAttempts--;
+				if (refreshAttempts <= 0) {
+					System.out.println("ERR : Something is wrong with browser!");
+					Assert.fail("ERR : Something is wrong with browser!");
+				}
+				System.out.println("trying again...");
+				System.out.println(String.format("%s attempt(s) left", refreshAttempts));
+				extendTest.log(LogStatus.INFO, "trying again...");
+				extendTest.log(LogStatus.INFO, String.format("%s attempt(s) left", refreshAttempts));
+
+				quitAndReLogin(role);
+			}
+		}
+	}
+
+	private void sendUserAndPasswordKeys(UserCredentials userId) {
+		
+		if (localEnv){
+			System.out.println("Login with user : " + userId.getUserId());
+			WebElement userNameTextbox = GeneralUIUtils.waitForElementVisibility(By.name("userid"));
+			userNameTextbox.sendKeys(userId.getUserId());
+			WebElement passwordTextbox = GeneralUIUtils.waitForElementVisibility(By.name("password"));
+			passwordTextbox.sendKeys(userId.getPassword());
+			
+			WebElement submitButton = GeneralUIUtils.waitForElementVisibility(By.name("btnSubmit"));
+			submitButton.click();
+			WebElement buttonOK = GeneralUIUtils.waitForElementVisibility(By.name("successOK"));
+			AssertJUnit.assertTrue(buttonOK.isDisplayed());
+			buttonOK.click();
+		}
+		else
+		{
+			System.out.println("Login with user : " + userId.getUserId());
+			WebElement userNameTextbox = GeneralUIUtils.getDriver().findElement(By.cssSelector("input[type='text']"));
+			userNameTextbox.sendKeys(userId.getUserId());
+			WebElement passwordTextbox = GeneralUIUtils.getDriver().findElement(By.cssSelector("input[type='password']"));
+			passwordTextbox.sendKeys(userId.getPassword());
+			
+			GeneralUIUtils.getDriver().findElement(By.id("loginBtn")).click();
+		}
+		
+		
+	}
+
+	public static String getUrl() {
+		return url;
+	}
+
+	public static void setUrl(String url) {
+		SetupCDTest.url = url;
+	}
+
+	public static Config getConfig() {
+		return config;
+	}
+	
+	public void loginToSystem(UserRoleEnum role){
+		WebDriver driver = GeneralUIUtils.getDriver();
+		WebDriverWait wait = new WebDriverWait(driver, 30);
+		
+		wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//*[@method='" + "post" + "']"))));
+		
+		WebElement userIdTextbox = GeneralUIUtils.waitForElementVisibility(By.name("userId"));
+		userIdTextbox.sendKeys(role.getUserId());
+		WebElement passwordTextbox = GeneralUIUtils.waitForElementVisibility(By.name("password"));
+		passwordTextbox.sendKeys("123123a");
+		
+		wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//*[@value='" + "Submit" + "']")))).click();
+		
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void loginWithUser(UserRoleEnum role) {
+		setUser(role);
+		try {
+			navigateToUrl(url);
+			extendTest.log(LogStatus.INFO, String.format("login with user %s", role.name().toUpperCase()));
+			if (localEnv) {
+				loginToSystem(role);
+				enterToUserWorkspace();
+			}
+			else{
+				loadCredentialsFile();
+				UserCredentials credentials = getUserCredentialsFromFile(role.name().toLowerCase());
+				loginToSystem(credentials, role);
+				user = credentials;
+			}
+			
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	private void enterToUserWorkspace() {
+		WebElement enterToUserWorkspaceButton = GeneralUIUtils.waitForElementVisibility(By.className("asdc-welcome-main-back-btn"), 3 * 60);
+		enterToUserWorkspaceButton.click();
+		System.out.println("Entering to system...");
+		GeneralUIUtils.waitForLoader();
+	}
+
+	private void setUser(UserRoleEnum role) {
+		user = new User();
+		user.setUserId(role.getUserId());
+		user.setFirstName(role.getFirstName());
+		user.setRole(role.name());
+		user.setLastName(role.getLastName());
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	protected void setBrowserBeforeTest(UserRoleEnum role) {
+		refreshAttempts = 0;
+		System.out.println(String.format("Setup before test as %s", role.toString().toUpperCase()));
+		GeneralUIUtils.initDriver();
+		loginWithUser(role);
+	}
+
+	public User getUser(UserRoleEnum role) {
+		User user = new User();
+		user = new User();
+		user.setUserId(role.getUserId());
+		user.setFirstName(role.getFirstName());
+		user.setRole(role.name());
+		return user;
+	}
+
+	protected void quitAndReLogin(UserRoleEnum role) throws Exception {
+		quitBrowser();
+		if (localEnv) {
+			loginToSystem(role);
+		}
+		setBrowserBeforeTest(role);
+	}
+
+	private void quitBrowser() {
+		System.out.println("Closing browser...");
+		GeneralUIUtils.getDriver().quit();
+	}
+
+
+	protected String getRandomComponentName(String prefix) {
+		return prefix + randomNumber();
+	}
+
+	protected int randomNumber() {
+		Random r = new Random();
+		return r.nextInt(10000);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ComponentLeftMenu.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ComponentLeftMenu.java
new file mode 100644
index 0000000..d795599
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ComponentLeftMenu.java
@@ -0,0 +1,25 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+public interface ComponentLeftMenu {
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/CompositionPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/CompositionPage.java
new file mode 100644
index 0000000..e515ce9
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/CompositionPage.java
@@ -0,0 +1,56 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.WebElement;
+
+public class CompositionPage extends GeneralPageElements {
+
+	public CompositionPage() {
+		super();
+	}
+
+	public static void searchForElement(String elementName) {
+		WebElement searchField = GeneralUIUtils.getWebElementWaitForVisible("searchAsset");
+		searchField.clear();
+		searchField.sendKeys(elementName);
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.sleep(500);
+	}
+
+	public static void showDeploymentArtifactTab() {
+		GeneralUIUtils.waitFordataTestIdVisibility("deployment-artifact-tab").click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static void showPropertiesAndAttributesTab() {
+		GeneralUIUtils.waitFordataTestIdVisibility("properties-and-attributes-tab").click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static List<WebElement> getProperties() {
+		return PropertiesPage.getElemenetsFromTable();
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/DeploymentArtifactPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/DeploymentArtifactPage.java
new file mode 100644
index 0000000..4c4edd8
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/DeploymentArtifactPage.java
@@ -0,0 +1,91 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
+import org.openqa.selenium.WebElement;
+
+public class DeploymentArtifactPage extends GeneralPageElements {
+
+	public DeploymentArtifactPage() {
+		super();
+	}
+
+	public static ResourceLeftMenu getLeftPanel() {
+		return new ResourceLeftMenu();
+	}
+
+	public static UploadArtifactPopup artifactPopup() {
+		return new UploadArtifactPopup();
+	}
+
+	protected static void addNewArtifact(ArtifactGroupTypeEnum artifactGroupType) {
+		switch (artifactGroupType) {
+		case DEPLOYMENT:
+			GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.ADD_DEPLOYMENT_ARTIFACT.getValue()).click();
+			break;
+		case INFORMATIONAL:
+			GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.ADD_INFORMATIONAL_ARTIFACT.getValue()).click();
+			break;
+		default:
+			break;
+		}
+	}
+
+	public static void clickAddNewArtifact() {
+		addNewArtifact(ArtifactGroupTypeEnum.DEPLOYMENT);
+	}
+
+	public static void clickAddAnotherArtifact() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.ADD_ANOTHER_ARTIFACT.getValue()).click();
+	}
+
+	public static void clickEditArtifact(String artifactLabel) {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.EDIT_ARTIFACT.getValue() + artifactLabel).click();
+	}
+
+	public static void clickDeleteArtifact(String artifactLabel) {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.DELETE_ARTIFACT.getValue() + artifactLabel).click();
+	}
+
+	public static void clickDownloadArtifact(String artifactLabel) {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPageEnum.DOWNLOAD_ARTIFACT.getValue() + artifactLabel)
+				.click();
+	}
+
+	public static String getArtifactDescription(String artifactLabel) throws Exception {
+		clickOnArtifact(artifactLabel); // open artifact
+		WebElement artifactDescriptionElement = GeneralUIUtils.getWebElementWaitForVisible(
+				DataTestIdEnum.ArtifactPageEnum.GET_DEPLOYMENT_ARTIFACT_DESCRIPTION.getValue());
+		String artifactDesc = artifactDescriptionElement.getText();
+		clickOnArtifact(artifactLabel); // close artifact
+
+		return artifactDesc;
+	}
+
+	public static void clickOnArtifact(String artifactLabel) throws Exception {
+		GeneralUIUtils.getWebButton(artifactLabel).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GeneralPageElements.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GeneralPageElements.java
new file mode 100644
index 0000000..fea3843
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GeneralPageElements.java
@@ -0,0 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import static org.testng.AssertJUnit.assertTrue;
+import java.util.List;
+import java.util.function.Supplier;
+
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.LifeCycleStateEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class GeneralPageElements {
+
+	public GeneralPageElements() {
+		super();
+	}
+
+	public static ResourceLeftMenu getLeftMenu() {
+		return new ResourceLeftMenu();
+	}
+
+	public static void clickCreateButton() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "creating...");
+		GeneralUIUtils.getWebButton(DataTestIdEnum.GeneralElementsEnum.CREATE_BUTTON.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static void clickCheckinButton(String componentName) throws Exception {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "clicking on checkin");
+		GeneralUIUtils.getWebButton(DataTestIdEnum.GeneralElementsEnum.CHECKIN_BUTTON.getValue()).click();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.ACCEP_TESTING_MESSAGE.getValue())
+				.sendKeys("Checkin " + componentName);
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		assertTrue(GeneralUIUtils.getWebElementWaitForVisible("formlifecyclestate").getText()
+				.equals(LifeCycleStateEnum.CHECKIN.getValue()));
+	}
+
+	public static void clickSubmitForTestingButton(String componentName) throws Exception {
+		try {
+			SetupCDTest.getExtendTest().log(LogStatus.INFO, "submiting for testing");
+			GeneralUIUtils
+					.getWebElementWaitForVisible(DataTestIdEnum.LifeCyleChangeButtons.SUBMIT_FOR_TESTING.getValue())
+					.click();
+			GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.SUMBIT_FOR_TESTING_MESSAGE.getValue())
+					.sendKeys("Submit for testing for " + componentName);
+			GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+			GeneralUIUtils.waitForLoader();
+			GeneralUIUtils.sleep(2000);
+			GeneralUIUtils.getWebElementWaitForVisible("main-menu-input-search");
+		} catch (Exception e) {
+			throw e;
+		}
+	}
+
+	public static void clickDeleteVersionButton() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.GeneralElementsEnum.DELETE_VERSION_BUTTON.getValue()).click();
+	}
+
+	public static void clickRevertButton() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.GeneralElementsEnum.REVERT_BUTTON.getValue()).click();
+	}
+
+	public static String getLifeCycleState() {
+		return GeneralUIUtils.getWebButton(DataTestIdEnum.GeneralElementsEnum.LIFECYCLE_STATE.getValue()).getText();
+	}
+
+	public static void selectVersion(String version) {
+		GeneralUIUtils.getSelectList(version, DataTestIdEnum.GeneralElementsEnum.VERSION_HEADER.getValue());
+	}
+
+	public static List<WebElement> getElemenetsFromTable() {
+		GeneralUIUtils.waitForLoader();
+		return GeneralUIUtils.getElemenetsFromTable(By.className("flex-container"));
+	}
+
+	public static boolean checkElementsCountInTable(int expectedElementsCount) {
+		// int maxWaitingPeriodMS = 1000;
+		// int napPeriodMS = 100;
+		// int sumOfWaiting = 0;
+		// List<WebElement> elememts = null;
+		// boolean isKeepWaiting = false;
+		// while (!isKeepWaiting){
+		// GeneralUIUtils.sleep(napPeriodMS);
+		// sumOfWaiting += napPeriodMS;
+		// elememts = getElemenetsFromTable();
+		// isKeepWaiting = ( expectedElementsCount == elememts.size() );
+		// if (sumOfWaiting > maxWaitingPeriodMS)
+		// return false;
+		// }
+		//
+		// return true;
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "checking number of elements in table");
+		return checkElementsCountInTable(expectedElementsCount, () -> getElemenetsFromTable());
+	}
+
+	public static boolean checkElementsCountInTable(int expectedElementsCount, Supplier<List<WebElement>> func) {
+		int maxWaitingPeriodMS = 10000;
+		int napPeriodMS = 100;
+		int sumOfWaiting = 0;
+		List<WebElement> elements = null;
+		boolean isKeepWaiting = false;
+		while (!isKeepWaiting) {
+			GeneralUIUtils.sleep(napPeriodMS);
+			sumOfWaiting += napPeriodMS;
+			elements = func.get();
+			isKeepWaiting = (expectedElementsCount == elements.size());
+			if (sumOfWaiting > maxWaitingPeriodMS)
+				return false;
+		}
+		return true;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GovernorOperationPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GovernorOperationPage.java
new file mode 100644
index 0000000..9e7eaf1
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/GovernorOperationPage.java
@@ -0,0 +1,46 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class GovernorOperationPage {
+
+	public GovernorOperationPage() {
+		super();
+	}
+
+	public static void approveSerivce(String serviceName) {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "approving distrbution the service " + serviceName);
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.DistributionChangeButtons.APPROVE.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.DistributionChangeButtons.APPROVE_MESSAGE.getValue())
+				.sendKeys("service " + serviceName + " tested successfuly");
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.getWebElementWaitForVisible("main-menu-input-search");
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/IconPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/IconPage.java
new file mode 100644
index 0000000..240272a
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/IconPage.java
@@ -0,0 +1,51 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+
+public class IconPage extends GeneralPageElements {
+
+	public IconPage() {
+		super();
+	}
+
+	public static void clickOnIcon(ResourceCategoryEnum iconName) {
+		GeneralUIUtils.getWebButton(iconStringBuilder(iconName) + DataTestIdEnum.ServiceMetadataEnum.ICON.getValue())
+				.click();
+	}
+
+	private static String iconStringBuilder(ResourceCategoryEnum icon) {
+		String iconName = icon.getSubCategory();
+		String[] splitedIconName = iconName.split(" ");
+		splitedIconName[0] = splitedIconName[0].toLowerCase();
+
+		StringBuilder sb = new StringBuilder();
+		for (String word : splitedIconName) {
+			sb.append(word);
+		}
+
+		return sb.toString();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/InformationalArtifactPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/InformationalArtifactPage.java
new file mode 100644
index 0000000..1dbf4df
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/InformationalArtifactPage.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import java.util.List;
+
+import javax.lang.model.util.Elements;
+
+import org.openecomp.sdc.ci.tests.datatypes.ArtifactReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+public class InformationalArtifactPage extends DeploymentArtifactPage {
+
+	public InformationalArtifactPage() {
+		super();
+	}
+
+	public static void clickAddNewArtifact() {
+		addNewArtifact(ArtifactGroupTypeEnum.INFORMATIONAL);
+	}
+
+	public static String getArtifactDescription(String artifactName) throws Exception {
+		clickOnArtifact(artifactName);
+		String artifactDesc = GeneralUIUtils.getWebElementWaitForVisible(
+				artifactName + DataTestIdEnum.ArtifactPageEnum.GET_INFORMATIONAL_ARTIFACT_DESCRIPTION.getValue())
+				.getText();
+		clickOnArtifact(artifactName); // close artifact
+		return artifactDesc;
+	}
+
+	public static List<WebElement> getElemenetsFromTable() {
+		return GeneralUIUtils.getWebElementsListByDataTestId("InformationalArtifactRow");
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/OpsOperationPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/OpsOperationPage.java
new file mode 100644
index 0000000..e715107
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/OpsOperationPage.java
@@ -0,0 +1,183 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.junit.Assert;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class OpsOperationPage {
+
+	public OpsOperationPage() {
+		super();
+	}
+
+	public static void distributeService() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "distributing...");
+		clickOnButton(DataTestIdEnum.DistributionChangeButtons.DISTRIBUTE);
+		GeneralUIUtils.getWebButton(DataTestIdEnum.DistributionChangeButtons.MONITOR.getValue());
+	}
+
+	public static void displayMonitor() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "clicking on monitor button");
+		// clickOnButton(DataTestIdEnum.DistributionChangeButtons.MONITOR);
+		GeneralUIUtils.moveToStep(StepsEnum.MONITOR);
+	}
+
+	public static void re_distributeService() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "redistributing...");
+		clickOnButton(DataTestIdEnum.DistributionChangeButtons.RE_DISTRIBUTE);
+		GeneralUIUtils.getWebButton(DataTestIdEnum.DistributionChangeButtons.MONITOR.getValue());
+	}
+
+	private static void clickOnButton(DataTestIdEnum.DistributionChangeButtons button) {
+		GeneralUIUtils.getWebElementWaitForVisible(button.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static List<WebElement> getRowsFromMonitorTable() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "getting number of rows from distribution table");
+		GeneralPageElements.checkElementsCountInTable(1, () -> GeneralUIUtils.waitForElementsListVisibility("ditributionTable"));
+		List<WebElement> distributionRecords = GeneralUIUtils.waitForElementsListVisibility("ditributionTable");
+		List<WebElement> findElements = distributionRecords.get(0).findElements(By.className("w-sdc-distribute-parent-block"));
+		return findElements;
+		
+		
+
+	}
+
+	public static void showDistributionStatus(int rowIndex) {
+		GeneralUIUtils.getWebElementWaitForVisible("ShowRecordButton_" + String.valueOf(rowIndex)).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static String getTotalArtifactsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("totalArtifacts_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static String getNotifiedArtifactsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("notified_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static String getDownloadedArtifactsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("downloaded_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static String getDeployedArtifactsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("deployed_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static String getNotNotifiedArtifactsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("NotNotified_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static String getErrorsSum(int rowIndex) {
+		return GeneralUIUtils.waitFordataTestIdVisibility("errors_" + String.valueOf(rowIndex)).getText();
+	}
+
+	public static void clickRefreshTableButton(int rowIndex) {
+		// SetupCDTest.getExtendTest().log(LogStatus.INFO, "refreshing
+		// distribution table");
+		GeneralUIUtils.getWebElementWaitForVisible("refreshButton").click();
+
+		// wait until total artifacts field disappear
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 30);
+		wait.until(ExpectedConditions.invisibilityOfElementLocated(
+				By.xpath("//*[@data-tests-id='" + "totalArtifacts_" + String.valueOf(rowIndex) + "']")));
+	}
+
+	public static void waitUntilArtifactsDistributed(int rowIndex) throws Exception {
+		waitUntilArtifactsDistributed("0", 0);
+	}
+
+	public static void waitUntilArtifactsDistributed(String expectedArtifactsSum, int rowIndex) throws Exception {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "waiting until all artifacts distributed");
+		boolean isKeepWaiting = true;
+		int maxWaitingPeriodMS = 5 * 60 * 1000;
+		int sumWaitingTime = 0;
+		int napPeriod = 1000;
+		while (isKeepWaiting) {
+			showDistributionStatus(rowIndex);
+			String actualTotalArtifactsSize = getTotalArtifactsSum(rowIndex);
+			String actualNotifiedArtifactsSize = getNotifiedArtifactsSum(rowIndex);
+			String actualDownloadedArtifactsSize = getDownloadedArtifactsSum(rowIndex);
+			String actualDeployedArtifactsSize = getDeployedArtifactsSum(rowIndex);
+			String actualNotNotifedArtifactsSize = getNotNotifiedArtifactsSum(rowIndex);
+			isKeepWaiting = !actualTotalArtifactsSize.equals(actualDownloadedArtifactsSize)
+					|| !actualTotalArtifactsSize.equals(actualNotifiedArtifactsSize)
+					|| !actualTotalArtifactsSize.equals(actualDeployedArtifactsSize)
+					|| actualTotalArtifactsSize.equals("0") || actualDownloadedArtifactsSize.equals("0")
+					|| actualNotifiedArtifactsSize.equals("0") || actualDeployedArtifactsSize.equals("0");
+			// isKeepWaiting =
+			// !expectedArtifactsSum.equals(actualTotalArtifactsSize) &&
+			// !expectedArtifactsSum.equals(actualNotifiedArtifactsSize) &&
+			// !expectedArtifactsSum.equals(actualDownloadedArtifactsSize) &&
+			// !expectedArtifactsSum.equals(actualDeployedArtifactsSize) &&
+			// actualNotNotifedArtifactsSize.equals("0");
+			// if (Integer.valueOf(actualTotalArtifactsSize) >
+			// Integer.valueOf(expectedArtifactsSum)){
+			// isKeepWaiting = false;
+			// throw new Exception(String.format("MORE ARTIFACTS THEN EXPECTED -
+			// actual: %s, expected: %s", actualTotalArtifactsSize,
+			// expectedArtifactsSum));
+			//// Assert.fail(String.format("MORE ARTIFACTS THEN EXPECTED -
+			// actual: %s, expected: %s", actualTotalArtifactsSize,
+			// expectedArtifactsSum));
+			// }
+			if (isKeepWaiting) {
+
+				if (Integer.parseInt(actualNotNotifedArtifactsSize) > 1) {
+					SetupCDTest.getExtendTest().log(LogStatus.INFO, "Some artifacts are not notified...");
+					isKeepWaiting = false;
+					throw new Exception("Some artifacts are not notified... check distribution client");
+				}
+
+				GeneralUIUtils.sleep(napPeriod);
+				sumWaitingTime += napPeriod;
+
+				if (sumWaitingTime > maxWaitingPeriodMS) {
+					SetupCDTest.getExtendTest().log(LogStatus.FAIL, "not all artifacts are displayed");
+					isKeepWaiting = false;
+					throw new Exception(String.format("NOT ALL ARTIFACTS ARE DISPLAYED WITHIN %s SECONDS",
+							String.valueOf(maxWaitingPeriodMS / 1000)));
+				}
+
+				clickRefreshTableButton(rowIndex);
+			}
+		}
+
+		SetupCDTest.getExtendTest().log(LogStatus.PASS, "all artifacts are distributed successfully");
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertiesPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertiesPage.java
new file mode 100644
index 0000000..614fa0a
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertiesPage.java
@@ -0,0 +1,61 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+public class PropertiesPage extends GeneralPageElements {
+
+	public PropertiesPage() {
+		super();
+	}
+
+	public static List<WebElement> getElemenetsFromTable() {
+		return GeneralUIUtils.getWebElementsListByDataTestId(DataTestIdEnum.PropertiesPageEnum.PROPERTY_ROW.getValue());
+	}
+
+	public static void clickAddPropertyArtifact() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.ADD_NEW_PROPERTY.getValue()).click();
+	}
+
+	public static void clickEditPropertyArtifact(String propertyName) {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.EDIT_PROPERTY.getValue() + propertyName).click();
+	}
+
+	public static void clickDeletePropertyArtifact(String propertyName) {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.DELETE_PROPERTY.getValue() + propertyName)
+				.click();
+	}
+
+	public static void clickOnProperty(String propertyName) {
+		GeneralUIUtils.getWebButton(propertyName).click();
+	}
+
+	public static PropertyPopup getPropertyPopup() {
+		return new PropertyPopup();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertyPopup.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertyPopup.java
new file mode 100644
index 0000000..11cbea3
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/PropertyPopup.java
@@ -0,0 +1,77 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.WebElement;
+
+public class PropertyPopup {
+
+	public PropertyPopup() {
+	}
+
+	public void insertPropertyName(String name) {
+		WebElement propertyNameField = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.PropertiesPageEnum.PROPERTY_NAME.getValue());
+		propertyNameField.clear();
+		propertyNameField.sendKeys(name);
+	}
+
+	public void insertPropertyDefaultValue(String value) {
+		WebElement propertyValue = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.PropertiesPageEnum.PROPERTY_VALUE.getValue());
+		propertyValue.clear();
+		propertyValue.sendKeys(value);
+	}
+
+	public void insertPropertyDescription(String description) {
+		WebElement propertyDescription = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.PropertiesPageEnum.PROPERTY_DESCRIPTION.getValue());
+		propertyDescription.clear();
+		propertyDescription.sendKeys(description);
+	}
+
+	public void selectPropertyType(String propertyType) {
+		GeneralUIUtils.getSelectList(propertyType, DataTestIdEnum.PropertiesPageEnum.PROPERTY_TYPE.getValue());
+	}
+
+	public void clickAdd() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.ADD.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void clickSave() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.SAVE.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void clickCancel() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.CANCEL.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void clickDone() {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.PropertiesPageEnum.DONE.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceGeneralPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceGeneralPage.java
new file mode 100644
index 0000000..2494282
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceGeneralPage.java
@@ -0,0 +1,154 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ComponentReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ComponentType;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.Select;
+
+public class ResourceGeneralPage extends GeneralPageElements {
+
+	public ResourceGeneralPage() {
+		super();
+	}
+
+	private static WebElement getNameField() {
+		return GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ResourceMetadataEnum.RESOURCE_NAME.getValue());
+	}
+
+	private static WebElement getDescriptionField() {
+		return GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ServiceMetadataEnum.DESCRIPTION.getValue());
+	}
+
+	private static String getCategoryField() {
+		return DataTestIdEnum.ResourceMetadataEnum.CATEGORY.getValue();
+	}
+
+	private static WebElement getVendorNameField() {
+		return GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ResourceMetadataEnum.VENDOR_NAME.getValue());
+	}
+
+	private static WebElement getVendorReleaseField() {
+		return GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.ResourceMetadataEnum.VENDOR_RELEASE.getValue());
+	}
+
+	private static WebElement getTagsField() {
+		return GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ResourceMetadataEnum.TAGS.getValue());
+	}
+
+	private static WebElement getUserIdField() {
+		return GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ResourceMetadataEnum.CONTACT_ID.getValue());
+	}
+
+	/***************************************************************/
+
+	public static String getNameText() {
+		return getNameField().getAttribute("value");
+	}
+
+	public static void defineName(String resourceName) {
+		WebElement resourceNameTextbox = getNameField();
+		resourceNameTextbox.clear();
+		resourceNameTextbox.sendKeys(resourceName);
+	}
+
+	public static String getDescriptionText() {
+		return getDescriptionField().getAttribute("value");
+	}
+
+	public static void defineDescription(String description) {
+		WebElement descriptionTextbox = getDescriptionField();
+		descriptionTextbox.clear();
+		descriptionTextbox.sendKeys(description);
+	}
+
+	public static String getVendorNameText() {
+		return getVendorNameField().getAttribute("value");
+	}
+
+	public static void defineVendorName(String vendorName) {
+		WebElement vendorNameTextbox = getVendorNameField();
+		vendorNameTextbox.clear();
+		vendorNameTextbox.sendKeys(vendorName);
+	}
+
+	public static String getVendorReleaseText() {
+		return getVendorReleaseField().getAttribute("value");
+	}
+
+	public static void defineVendorRelease(String vendorRelease) {
+		WebElement vendorReleaseTextbox = getVendorReleaseField();
+		vendorReleaseTextbox.clear();
+		vendorReleaseTextbox.sendKeys(vendorRelease);
+	}
+
+	public static void defineTag(String resourceTags) {
+		WebElement tagTextbox = getTagsField();
+		tagTextbox.clear();
+		tagTextbox.sendKeys(resourceTags);
+		tagTextbox.sendKeys(Keys.ENTER);
+	}
+
+	public static void defineTagsList(ComponentReqDetails resource, String[] resourceTags) {
+		List<String> taglist = new ArrayList<String>();
+		;
+		WebElement resourceTagsTextbox = getTagsField();
+		for (String tag : resourceTags) {
+			resourceTagsTextbox.clear();
+			resourceTagsTextbox.sendKeys(tag);
+			GeneralUIUtils.sleep(1000);
+			resourceTagsTextbox.sendKeys(Keys.ENTER);
+			taglist.add(tag);
+		}
+		resource.setTags(taglist);
+	}
+
+	public static void defineCategory(String category) {
+//		GeneralUIUtils.getSelectList(category, getCategoryField());
+		
+		Actions action = new Actions(GeneralUIUtils.getDriver());
+		action.click(GeneralUIUtils.getWebElementByDataTestId(getCategoryField()));
+		action.sendKeys(category).perform();
+	}
+
+	public static String getUserIdContactText() {
+		return getUserIdField().getAttribute("value");
+	}
+
+	public static void defineUserIdContact(String userId) {
+		WebElement contactIdTextbox = getUserIdField();
+		contactIdTextbox.clear();
+		contactIdTextbox.sendKeys(userId);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceLeftMenu.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceLeftMenu.java
new file mode 100644
index 0000000..bd93f18
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ResourceLeftMenu.java
@@ -0,0 +1,63 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+
+public class ResourceLeftMenu implements ComponentLeftMenu {
+
+	public void moveToGeneralScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.GENERAL);
+	}
+
+	public void moveToIconScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.ICON);
+	}
+
+	public void moveToDeploymentArtifactScreen() {
+		GeneralUIUtils.moveToStep(StepsEnum.DEPLOYMENT_ARTIFACT);
+	}
+
+	public void moveToInformationalArtifactScreen() {
+		GeneralUIUtils.moveToStep(StepsEnum.INFORMATION_ARTIFACT);
+	}
+
+	public void moveToPropertiesScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.PROPERTIES);
+	}
+
+	public void moveToCompositionScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.COMPOSITION);
+	}
+
+	public void moveToActivityLogScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.ACTIVITY_LOG);
+	}
+
+	public void moveToDeploymentViewScreen() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.DEPLOYMENT_VIEW);
+	}
+
+	public void moveToToscaArtifactsScreen() {
+		GeneralUIUtils.moveToStep(StepsEnum.TOSCA_ARTIFACTS);
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ServiceGeneralPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ServiceGeneralPage.java
new file mode 100644
index 0000000..9e8c4b2
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ServiceGeneralPage.java
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.WebElement;
+
+public class ServiceGeneralPage extends ResourceGeneralPage {
+
+	public ServiceGeneralPage() {
+		super();
+	}
+
+	public static void defineName(String serviceName) {
+		WebElement serviceNameTextbox = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.ServiceMetadataEnum.SERVICE_NAME.getValue());
+		serviceNameTextbox.clear();
+		serviceNameTextbox.sendKeys(serviceName);
+	}
+
+	public static void defineProjectCode(String pmat) {
+		WebElement projectCodeTextbox = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.ServiceMetadataEnum.PROJECT_CODE.getValue());
+		projectCodeTextbox.clear();
+		projectCodeTextbox.sendKeys(pmat);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/TesterOperationPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/TesterOperationPage.java
new file mode 100644
index 0000000..6c18561
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/TesterOperationPage.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.interactions.Actions;
+import org.testng.annotations.Test;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class TesterOperationPage {
+
+	public TesterOperationPage() {
+		super();
+	}
+
+	public static void certifyComponent(String componentName) throws Exception {
+		clickStartTestingButton();
+		clickAccpetCertificationButton(componentName);
+
+	}
+
+	public static void clickAccpetCertificationButton(String componentName) {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "clicking on accept certification button");
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LifeCyleChangeButtons.ACCEPT.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.ACCEP_TESTING_MESSAGE.getValue())
+				.sendKeys(componentName + " tested successfuly");
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.sleep(2000);
+		GeneralUIUtils.getWebElementWaitForVisible("main-menu-input-search");
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, componentName + " is certifed ");
+	}
+
+	public static void clickStartTestingButton() {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "start testing");
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LifeCyleChangeButtons.START_TESTING.getValue())
+				.click();
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LifeCyleChangeButtons.ACCEPT.getValue());
+		GeneralUIUtils.sleep(1000);
+
+		// bug
+		// Actions actionObject = new Actions(GeneralUIUtils.getDriver());
+		// actionObject.keyDown(Keys.CONTROL).sendKeys(Keys.F5).perform();
+		//
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ToscaArtifactsPage.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ToscaArtifactsPage.java
new file mode 100644
index 0000000..dcc5f06
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/ToscaArtifactsPage.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import java.util.List;
+
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+public class ToscaArtifactsPage extends InformationalArtifactPage {
+
+	public ToscaArtifactsPage() {
+
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/UploadArtifactPopup.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/UploadArtifactPopup.java
new file mode 100644
index 0000000..5d27809
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/pages/UploadArtifactPopup.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.pages;
+
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.Select;
+
+public class UploadArtifactPopup {
+
+	public UploadArtifactPopup() {
+		super();
+	}
+
+	public void loadFile(String path, String filename) {
+		final WebElement browseWebElement = GeneralUIUtils
+				.getWebElementByDataTestId(DataTestIdEnum.ArtifactPopup.BROWSE.getValue());
+		browseWebElement.sendKeys(path + "\\" + filename);
+	}
+
+	public void insertDescription(String artifactDescriptoin) {
+		WebElement artifactDescriptionTextbox = GeneralUIUtils
+				.getWebElementWaitForVisible(DataTestIdEnum.ArtifactPopup.ARTIFACT_DESCRIPTION.getValue());
+		artifactDescriptionTextbox.clear();
+		artifactDescriptionTextbox.sendKeys(artifactDescriptoin);
+	}
+
+	public Select defineArtifactLabel(String requiredArtifactLabel) {
+		Select selectList = GeneralUIUtils.getSelectList("Create New Artifact",
+				DataTestIdEnum.ArtifactPopup.ARTIFACT_LABEL.getValue());
+		WebElement artifactLabelWebElement = GeneralUIUtils.getDriver().findElement(By.name("artifactLabel"));
+		artifactLabelWebElement.clear();
+		artifactLabelWebElement.sendKeys(requiredArtifactLabel);
+		return selectList;
+	}
+
+	public Select selectArtifactType(String artifactType) {
+		return GeneralUIUtils.getSelectList(artifactType, DataTestIdEnum.ArtifactPopup.ARTIFACT_TYPE.getValue());
+	}
+
+	public void clickAddButton() throws Exception {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPopup.ADD_BUTTON.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void clickCancelButton() throws Exception {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPopup.CANCEL_BUTTON.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public void clickUpdateButton() throws Exception {
+		GeneralUIUtils.getWebButton(DataTestIdEnum.ArtifactPopup.UPDATE_BUTTON.getValue()).click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdditionalConditions.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdditionalConditions.java
new file mode 100644
index 0000000..1b7f4c3
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdditionalConditions.java
@@ -0,0 +1,84 @@
+package org.openecomp.sdc.ci.tests.utilities;
+
+import org.openqa.selenium.JavascriptExecutor;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.ExpectedCondition;
+
+public class AdditionalConditions {
+		
+	public static ExpectedCondition<Boolean> jQueryAJAXCallsHaveCompleted() {
+	    return new ExpectedCondition<Boolean>() {
+	        @Override
+			public Boolean apply(WebDriver driver) {
+	        	return (Boolean) ((JavascriptExecutor)driver).
+	        			executeScript("return (window.jQuery!= null) && (jQuery.active === 0);");
+			}
+		};
+	}
+	
+	public static ExpectedCondition <Boolean> angularHasFinishedProcessing() {
+	   return new ExpectedCondition<Boolean>() {
+		   	@Override
+		   	public Boolean apply(WebDriver driver) {
+		   		String scriptJS = "return (window.angular !==undefined) &&"
+		   				+ " (angular.element(document).injector() !==undefined) &&"
+		   				+ " (angular.element(document).injector().get('$http').pendingRequests.length === 0)";
+		   		return Boolean.valueOf(( (JavascriptExecutor) driver).executeScript(scriptJS).toString());
+		   	}
+	   };
+	}
+	
+    public static ExpectedCondition <Boolean> pageLoadWait() {
+        return new ExpectedCondition<Boolean>() {
+                   @Override
+                   public Boolean apply(WebDriver driver) {
+                          String scriptJS = 
+                                       "try {\r\n" + 
+                                       "  if (document.readyState !== 'complete') {\r\n" + 
+                                       "    return false; // Page not loaded yet\r\n" + 
+                                       "  }\r\n" + 
+                                       "  if (window.jQuery) {\r\n" + 
+                                       "    if (window.jQuery.active) {\r\n" + 
+                                       "      return false;\r\n" + 
+                                       "    } else if (window.jQuery.ajax && window.jQuery.ajax.active) {\r\n" + 
+                                       "      return false;\r\n" + 
+                                       "    }\r\n" + 
+                                       "  }\r\n" + 
+                                       "  if (window.angular) {\r\n" + 
+                                       "    if (!window.qa) {\r\n" + 
+                                       "      // Used to track the render cycle finish after loading is complete\r\n" + 
+                                       "      window.qa = {\r\n" + 
+                                       "        doneRendering: false\r\n" + 
+                                       "      };\r\n" + 
+                                       "    }\r\n" + 
+                                       "    // Get the angular injector for this app (change element if necessary)\r\n" + 
+                                       "    var injector = window.angular.element('body').injector();\r\n" + 
+                                       "    // Store providers to use for these checks\r\n" + 
+                                       "    var $rootScope = injector.get('$rootScope');\r\n" + 
+                                       "    var $http = injector.get('$http');\r\n" + 
+                                       "    var $timeout = injector.get('$timeout');\r\n" + 
+                                       "    // Check if digest\r\n" + 
+                                       "    if ($rootScope.$$phase === '$apply' || $rootScope.$$phase === '$digest' || $http.pendingRequests.length !== 0) {\r\n" + 
+                                       "      window.qa.doneRendering = false;\r\n" + 
+                                       "      return false; // Angular digesting or loading data\r\n" + 
+                                       "    }\r\n" + 
+                                       "    if (!window.qa.doneRendering) {\r\n" + 
+                                       "      // Set timeout to mark angular rendering as finished\r\n" + 
+                                       "      $timeout(function() {\r\n" + 
+                                       "        window.qa.doneRendering = true;\r\n" + 
+                                       "      }, 0);\r\n" + 
+                                       "      return false;\r\n" + 
+                                       "    }\r\n" + 
+                                       "  }\r\n" + 
+                                       "  return true;\r\n" + 
+                                       "} catch (ex) {\r\n" + 
+                                       "  return false;\r\n" + 
+                                       "}";
+                          return Boolean.valueOf(( (JavascriptExecutor) driver).executeScript(scriptJS).toString());
+                   }
+        };
+     }
+
+	
+	
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdminWorkspaceUIUtilies.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdminWorkspaceUIUtilies.java
new file mode 100644
index 0000000..472b69f
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AdminWorkspaceUIUtilies.java
@@ -0,0 +1,71 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import org.junit.rules.TestName;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.support.ui.Select;
+
+public class AdminWorkspaceUIUtilies {
+
+	public AdminWorkspaceUIUtilies(TestName name, String className) {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+
+	protected static WebDriver driver;
+
+	public static void deleteuser(String userId) throws Exception {
+		typeToSearchBox(userId);
+		if (GeneralUIUtils.getWebElements("tdRow") != null) {
+			GeneralUIUtils.getWebElementWaitForVisible("delete" + userId + "").click();
+			GeneralUIUtils.clickOkButton();
+		}
+	}
+
+	public static String defineNewUserId(String userId) {
+		GeneralUIUtils.getWebElementWaitForVisible("newUserId").clear();
+		GeneralUIUtils.getWebElementWaitForVisible("newUserId").sendKeys(userId);
+		;
+		return userId;
+	}
+
+	public static String defineNewMacUid(String MacUid) {
+		GeneralUIUtils.getWebElementWaitForVisible("newUserId").clear();
+		GeneralUIUtils.getWebElementWaitForVisible("newUserId").sendKeys(MacUid);
+		;
+		return MacUid;
+	}
+
+	public static String selectUserRole(String Role) {
+		Select selectrole = new Select(GeneralUIUtils.getWebElementWaitForVisible("selectrole"));
+		selectrole.deselectByVisibleText(Role);
+		selectrole.selectByVisibleText(Role);
+		return Role;
+	}
+
+	public static void typeToSearchBox(String Text) throws Exception {
+		GeneralUIUtils.getWebElementWaitForVisible("searchbox").clear();
+		GeneralUIUtils.getWebElementWaitForVisible("searchbox").sendKeys(Text);
+		Thread.sleep(1000);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ArtifactUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ArtifactUIUtils.java
new file mode 100644
index 0000000..f22d52d
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ArtifactUIUtils.java
@@ -0,0 +1,302 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import static org.junit.Assert.assertEquals;
+
+import java.awt.AWTException;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.ArtifactInfo;
+import org.openecomp.sdc.ci.tests.datatypes.ArtifactReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.InformationalArtifacts;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.pages.DeploymentArtifactPage;
+import org.openecomp.sdc.ci.tests.pages.InformationalArtifactPage;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import com.thinkaurelius.titan.diskstorage.util.StaticArrayBuffer;
+
+public final class ArtifactUIUtils {
+
+	private ArtifactUIUtils() {
+	}
+
+	public static void fillAndAddNewArtifactParameters(ArtifactInfo artifactInfo) throws Exception {
+		DeploymentArtifactPage.artifactPopup().loadFile(artifactInfo.getFilepath(), artifactInfo.getFilename());
+		DeploymentArtifactPage.artifactPopup().insertDescription(artifactInfo.getDescription());
+		DeploymentArtifactPage.artifactPopup().defineArtifactLabel(artifactInfo.getArtifactLabel());
+		DeploymentArtifactPage.artifactPopup().selectArtifactType(artifactInfo.getArtifactType());
+		DeploymentArtifactPage.artifactPopup().clickAddButton();
+	}
+
+	public static void fillPlaceHolderInformationalArtifact(DataTestIdEnum.InformationalArtifacts artifactLabel,
+			String filepath, String filename, String description) throws Exception {
+		GeneralUIUtils.getWebButton(artifactLabel.getValue()).click();
+		InformationalArtifactPage.artifactPopup().loadFile(filepath, filename);
+		InformationalArtifactPage.artifactPopup().insertDescription(description);
+		InformationalArtifactPage.artifactPopup().clickAddButton();
+	}
+
+	public static RestResponse deploymentArtifactResourceInUI(ResourceReqDetails resource, User user,
+			ArtifactReqDetails artifact, String file) throws Exception {
+		Thread.sleep(1000);
+
+		List<WebElement> listFormInput = GeneralUIUtils.getDriver()
+				.findElements(By.className("i-sdc-designer-sidebar-tab"));
+		WebElement addArtifactElement = listFormInput.get(2);
+		addArtifactElement.click();
+
+		WebElement addArtifact = GeneralUIUtils.getDriver()
+				.findElement(By.className("i-sdc-designer-sidebar-section-content-item-artifact-details-name"));
+		addArtifact.click();
+
+		Thread.sleep(1000);
+		WebElement descriptionProperty = GeneralUIUtils.getDriver().findElement(By.className("i-sdc-form-textarea"));
+		descriptionProperty.clear();
+		descriptionProperty.sendKeys(artifact.getDescription());
+
+		WebElement uploadFile = GeneralUIUtils.getDriver().findElement(By.className("i-sdc-form-label-upload"));
+		uploadFile.click();
+
+		StringSelection sel = new StringSelection(file);
+		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, null);
+		// System.out.println("selection" + sel);
+		Thread.sleep(1000);
+
+		Robot robot = new Robot();
+		Thread.sleep(1000);
+
+		Thread.sleep(2000);
+
+		robot.keyPress(KeyEvent.VK_ENTER);
+
+		// Release Enter
+		robot.keyRelease(KeyEvent.VK_ENTER);
+
+		// Press CTRL+V
+		robot.keyPress(KeyEvent.VK_CONTROL);
+		robot.keyPress(KeyEvent.VK_V);
+
+		// Release CTRL+V
+		robot.keyRelease(KeyEvent.VK_CONTROL);
+		robot.keyRelease(KeyEvent.VK_V);
+		Thread.sleep(1000);
+
+		// Press Enter
+		robot.keyPress(KeyEvent.VK_ENTER);
+		robot.keyRelease(KeyEvent.VK_ENTER);
+		Thread.sleep(3000);
+
+		WebElement clickDone = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-form-action"));
+		clickDone.click();
+
+		Thread.sleep(3500);
+
+		GeneralUIUtils.getDriver().findElement(By.cssSelector("button[data-ng-click^=save]")).click();
+
+		RestResponse getResource = RestCDUtils.getResource(resource, user);
+		assertEquals("Did not succeed to get resource after create", 200, getResource.getErrorCode().intValue());
+		return getResource;
+	}
+
+	public static void addInformationArtifact(ArtifactReqDetails artifact, String filePath,
+			final InformationalArtifacts dataTestEnum) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.sleep(2000);
+		GeneralUIUtils.getWebElementWaitForVisible(dataTestEnum.getValue()).click();
+
+		final WebElement browseWebElement = GeneralUIUtils.retryMethodOnException(
+				() -> GeneralUIUtils.getWebElementByDataTestId(DataTestIdEnum.ModalItems.BROWSE_BUTTON.getValue()));
+		browseWebElement.sendKeys(filePath);
+
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.DESCRIPTION.getValue())
+				.sendKeys(artifact.getDescription());
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.ADD.getValue()).click();
+
+	}
+
+	private static void addFileToWindowBrowse(String file) throws InterruptedException, AWTException {
+		StringSelection sel = new StringSelection(file);
+		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, null);
+		// System.out.println("selection" + sel);
+		Thread.sleep(1000);
+
+		Robot robot = new Robot();
+
+		robot.keyPress(KeyEvent.VK_ENTER);
+
+		// Release Enter
+		robot.keyRelease(KeyEvent.VK_ENTER);
+
+		// Press CTRL+V
+		robot.keyPress(KeyEvent.VK_CONTROL);
+		robot.keyPress(KeyEvent.VK_V);
+
+		// Release CTRL+V
+		robot.keyRelease(KeyEvent.VK_CONTROL);
+		robot.keyRelease(KeyEvent.VK_V);
+		Thread.sleep(1000);
+
+		// Press Enter
+		robot.keyPress(KeyEvent.VK_ENTER);
+		robot.keyRelease(KeyEvent.VK_ENTER);
+		Thread.sleep(3000);
+	}
+
+	static WebElement ArtifactLabel;
+
+	public static Map<String, String> addInformationalArtifact(String artifactLabel) throws Exception {
+		String type = GeneralUIUtils.getSelectList(null, "artifacttype").getFirstSelectedOption().getText();
+		Map<String, String> artifactValues = new HashMap<String, String>();
+		String labelName = GeneralUIUtils.getSelectList(artifactLabel, "selectArtifact").getFirstSelectedOption()
+				.getText();
+		ArtifactLabel = GeneralUIUtils.getDriver().findElement(By.name("artifactLabel"));
+		if (ArtifactLabel.getAttribute("value").equals("")) {
+			labelName = "New-Test-Artifact";
+			ArtifactLabel.sendKeys(labelName);
+			type = GeneralUIUtils.getSelectList("HEAT", "artifacttype").getFirstSelectedOption().getText();
+		}
+		String description = "This is Description";
+		String fileName = "Heat-File.yaml";
+		GeneralUIUtils.defineDescription(description);
+		ResourceUIUtils.importFileWithSendKeyBrowse(GeneralUIUtils.FILE_PATH, fileName);
+		GeneralUIUtils.getWebButton("Add").click();
+		GeneralUIUtils.waitFordataTestIdVisibility(labelName);
+
+		artifactValues.put("type", type);
+		artifactValues.put("description", description);
+		artifactValues.put("name", labelName);
+		artifactValues.put("fileName", fileName);
+		return artifactValues;
+	}
+
+	public static Map<String, String> addDeploymentArtifact(String artifactLabel, String artifactType, String fileName)
+			throws Exception {
+		String type = null;
+		String labelName;
+		Map<String, String> artifactValues = new HashMap<String, String>();
+		try {
+			labelName = GeneralUIUtils.getSelectList(artifactLabel, "selectArtifact").getOptions().get(1).getText();
+			GeneralUIUtils.getSelectList(artifactLabel, "selectArtifact").selectByVisibleText(labelName);
+		} catch (Exception e) {
+			labelName = GeneralUIUtils.getWebElementByName(artifactLabel).getText();
+		}
+		ArtifactLabel = GeneralUIUtils.getDriver().findElement(By.name("artifactLabel"));
+		if (ArtifactLabel.getText().equals("")) {
+			labelName = "New-Test-Artifact";
+			ArtifactLabel.sendKeys(labelName);
+			type = GeneralUIUtils.getSelectList(artifactType, "artifacttype").getFirstSelectedOption().getText();
+		}
+		String description = "This is Description";
+		GeneralUIUtils.defineDescription(description);
+		ResourceUIUtils.importFileWithSendKeyBrowse(GeneralUIUtils.FILE_PATH, fileName);
+		try {
+			GeneralUIUtils.getWebButton("Add").click();
+		} catch (Exception e) {
+			GeneralUIUtils.getButtonByClassName("w-sdc-form-action add-property").click();
+		}
+
+		artifactValues.put("type", artifactType);
+		artifactValues.put("description", description);
+		artifactValues.put("name", labelName);
+		artifactValues.put("fileName", fileName);
+		return artifactValues;
+	}
+
+	public static Map<String, String> addDeploymentArtifactFromCanvas(String artifactLabel) throws Exception {
+		String type = null;
+		Map<String, String> artifactValues = new HashMap<String, String>();
+		String labelName = GeneralUIUtils.getSelectList(artifactLabel, "selectArtifact").getFirstSelectedOption()
+				.getText();
+		ArtifactLabel = GeneralUIUtils.getDriver().findElement(By.name("artifactLabel"));
+		if (ArtifactLabel.getText().equals("")) {
+			labelName = "New-Test-Artifact";
+			ArtifactLabel.sendKeys(labelName);
+			type = GeneralUIUtils.getSelectList("OTHER", "artifacttype").getFirstSelectedOption().getText();
+		}
+		String description = "This is Description";
+		String filePath = "C:\\Git_work\\ASDC\\d2-sdnc\\ui-ci\\src\\main\\resources\\Files\\";
+		String fileName = "Heat-File.yaml";
+		GeneralUIUtils.defineDescription(description);
+		ResourceUIUtils.importFileWithSendKeyBrowse(filePath, fileName);
+		GeneralUIUtils.getWebButton("Add").click();
+		artifactValues.put("type", type);
+		artifactValues.put("description", description);
+		artifactValues.put("name", labelName);
+		artifactValues.put("fileName", fileName);
+		return artifactValues;
+	}
+
+	public static Map<String, String> valideArtifact(Map<String, String> artifactValues, Boolean condition)
+			throws Exception {
+		if (condition) {
+			GeneralUIUtils.getEelementBycontainsClassName("table-edit-btn").click();
+		} else {
+			System.out.println(artifactValues.get("name"));
+			GeneralUIUtils.getWebElementWaitForVisible("edit_" + artifactValues.get("name")).click();
+		}
+		Thread.sleep(1000);
+		String labelname = GeneralUIUtils.getWebElementByName("artifactLabel").getAttribute("value");
+		String filename = GeneralUIUtils.getWebElementWaitForVisible("filename").getText();
+		String description = GeneralUIUtils.getWebElementWaitForVisible("description").getAttribute("value");
+		String type = GeneralUIUtils.getSelectList(null, "artifacttype").getFirstSelectedOption().getText();
+		labelname.compareToIgnoreCase(artifactValues.get("name").replaceAll("-", ""));
+		assertEquals(filename, artifactValues.get("fileName").replaceAll(" ", "-"));
+		assertEquals(type, artifactValues.get("type"));
+		assertEquals(description, artifactValues.get("description"));
+		GeneralUIUtils.getWebButton("Update").click();
+		return artifactValues;
+	}
+
+	public static void valideArtifactFromCanvas(Map<String, String> artifactValues) throws Exception {
+		GeneralUIUtils.getWebElementWaitForVisible("artifactDisplayName-" + artifactValues.get("name")).click();
+		Thread.sleep(1000);
+		String labelname = GeneralUIUtils.getWebElementByName("artifactLabel").getAttribute("value");
+		String filename = GeneralUIUtils.getWebElementWaitForVisible("filename").getText();
+		String description = GeneralUIUtils.getWebElementWaitForVisible("description").getAttribute("value");
+		String type = GeneralUIUtils.getSelectList(null, "artifacttype").getFirstSelectedOption().getText();
+		labelname.compareToIgnoreCase(artifactValues.get("name").replaceAll("-", ""));
+		assertEquals(filename, artifactValues.get("fileName"));
+		assertEquals(type, artifactValues.get("type"));
+		assertEquals(description, artifactValues.get("description"));
+	}
+
+	public static Map<String, Map<String, Object>> getArtifactsListFromResponse(String jsonResponse,
+			String fieldOfArtifactList) {
+		JSONObject object = (JSONObject) JSONValue.parse(jsonResponse);
+		Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) object.get(fieldOfArtifactList);
+		return map;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AuditCDUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AuditCDUtils.java
new file mode 100644
index 0000000..c53fef5
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/AuditCDUtils.java
@@ -0,0 +1,67 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import org.codehaus.jettison.json.JSONObject;
+import org.openecomp.sdc.be.model.LifecycleStateEnum;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.expected.ExpectedResourceAuditJavaObject;
+import org.openecomp.sdc.ci.tests.utils.general.Convertor;
+import org.openecomp.sdc.ci.tests.utils.validation.AuditValidationUtils;
+
+public class AuditCDUtils {
+
+	public static void validateResourceSuccessAudit(ResourceReqDetails resource, User user, String action)
+			throws Exception {
+		JSONObject auditBody = AuditValidationUtils.filterAuditByUuid(action, resource.getUUID());
+		ExpectedResourceAuditJavaObject expectedResourceAuditJavaObject = Convertor
+				.constructFieldsForAuditValidation(resource, resource.getVersion(), user);
+		String auditAction = "Create";
+		expectedResourceAuditJavaObject.setAction(auditAction);
+		expectedResourceAuditJavaObject.setPrevVersion("");
+		expectedResourceAuditJavaObject.setPrevState("");
+		expectedResourceAuditJavaObject.setStatus("201");
+		expectedResourceAuditJavaObject.setDesc("OK");
+		AuditValidationUtils.validateAudit(expectedResourceAuditJavaObject, auditAction, auditBody.toString(), false);
+	}
+
+	public static void validateServiceSuccessAudit(ServiceReqDetails service, User user, String action)
+			throws Exception {
+		validateServiceSuccessAudit(service, user, action, LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
+	}
+
+	public static void validateServiceSuccessAudit(ServiceReqDetails service, User user, String action,
+			LifecycleStateEnum lifecycleStatus) throws Exception {
+		ExpectedResourceAuditJavaObject expectedResourceAuditJavaObject = AuditValidationUtils
+				.constructFieldsForAuditValidation(service, service.getVersion(), user);
+		String body = AuditValidationUtils.filterAuditByUuid(action, service.getUUID()).toString();
+		expectedResourceAuditJavaObject.setAction(action);
+		expectedResourceAuditJavaObject.setPrevState("");
+		expectedResourceAuditJavaObject.setPrevVersion("");
+		expectedResourceAuditJavaObject.setCurrState(lifecycleStatus.toString());
+		expectedResourceAuditJavaObject.setStatus("201");
+		expectedResourceAuditJavaObject.setDesc("OK");
+		AuditValidationUtils.validateAudit(expectedResourceAuditJavaObject, action, body, false);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasElement.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasElement.java
new file mode 100644
index 0000000..fbe8c04
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasElement.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+import org.openqa.selenium.WebElement;
+
+public final class CanvasElement {
+	private final String uniqueId;
+	private ImmutablePair<Integer, Integer> location;
+	private WebElement elementType;
+
+	CanvasElement(String name, ImmutablePair<Integer, Integer> location, WebElement canvasItem) {
+		super();
+		this.uniqueId = name;
+		this.location = location;
+		elementType = canvasItem;
+	}
+
+	public String getUniqueId() {
+		return uniqueId;
+	}
+
+	public ImmutablePair<Integer, Integer> getLocation() {
+		return location;
+	}
+
+	public void setLocation(ImmutablePair<Integer, Integer> location) {
+		this.location = location;
+	}
+
+	public WebElement getElementType() {
+		return elementType;
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasManager.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasManager.java
new file mode 100644
index 0000000..a52367a
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CanvasManager.java
@@ -0,0 +1,181 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
+import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+public final class CanvasManager {
+	private Map<String, CanvasElement> canvasElements;
+	private Actions actions;
+	private WebElement canvas;
+	private int reduceCanvasWidthFactor;
+	// Offsets Are used to find upper right corner of canvas element in order to
+	// connect links
+	private static final int CANVAS_ELEMENT_Y_OFFSET = 40;
+	private static final int CANVAS_ELEMENT_X_OFFSET = 21; // 14 - 27
+
+	private CanvasManager() {
+		canvasElements = new HashMap<>();
+		actions = new Actions(GeneralUIUtils.getDriver());
+		canvas = GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS.getValue());
+		try {
+			WebElement webElement = GeneralUIUtils
+					.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS_RIGHT_PANEL.getValue());
+			reduceCanvasWidthFactor = webElement.getSize().width;
+		} catch (Exception e) {
+			reduceCanvasWidthFactor = 0;
+		}
+	}
+
+	public static CanvasManager getCanvasManager() {
+		return new CanvasManager();
+	}
+
+	public List<CanvasElement> getCanvasElements() {
+		return canvasElements.values().stream().collect(Collectors.toList());
+	}
+
+	private void addCanvasElement(CanvasElement element) {
+		canvasElements.put(element.getUniqueId(), element);
+	}
+
+	private void moveElementOnCanvas(CanvasElement canvasElement, ImmutablePair<Integer, Integer> newLocation)
+			throws Exception {
+		GeneralUIUtils.waitForLoader();
+		Thread.sleep(500);
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.clickAndHold();
+		actions.moveToElement(canvas, newLocation.left, newLocation.right);
+		actions.release();
+		actions.perform();
+		canvasElement.setLocation(newLocation);
+		GeneralUIUtils.waitForLoader();
+
+	}
+
+	public void moveElementOnCanvas(CanvasElement canvasElement) throws Exception {
+		moveElementOnCanvas(canvasElement, getFreePosition());
+	}
+
+	public void deleteElementFromCanvas(CanvasElement canvasElement) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
+		actions.click();
+		actions.perform();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.DELETE_INSTANCE_BUTTON.getValue())
+				.click();
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
+		canvasElements.remove(canvasElement.getUniqueId());
+		GeneralUIUtils.waitForLoader();
+	}
+
+	private String getItemName(WebElement canvasItem) {
+		String canvasItemName = canvasItem.getAttribute("data-tests-id");
+
+		return canvasItemName.substring(canvasItemName.lastIndexOf("-"));
+	}
+
+	public CanvasElement createElementOnCanvas(WebElement canvasItem) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		ImmutablePair<Integer, Integer> freePosition = getFreePosition();
+		actions.moveToElement(canvasItem, 0, 0);
+		actions.clickAndHold();
+		actions.moveToElement(canvas, freePosition.left, freePosition.right);
+		actions.release();
+		actions.perform();
+
+		String uniqueId = getItemName(canvasItem) + "_" + UUID.randomUUID().toString();
+		CanvasElement canvasElement = new CanvasElement(uniqueId, freePosition, canvasItem);
+		addCanvasElement(canvasElement);
+		GeneralUIUtils.waitForLoader();
+		return canvasElement;
+	}
+
+	private ImmutablePair<Integer, Integer> getFreePosition() {
+		// TODO mshitrit use better method
+		ImmutablePair<Integer, Integer> randomPosition = null;
+		boolean freePosition = false;
+		int minSpace = 150;
+		while (!freePosition) {
+			ImmutablePair<Integer, Integer> tempRandomPosition = getRandomPosition();
+			freePosition = !canvasElements.values().stream().map(e -> e.getLocation())
+					.filter(e -> Math.abs(e.left - tempRandomPosition.left) < minSpace
+							&& Math.abs(e.right - tempRandomPosition.right) < minSpace)
+					.findAny().isPresent();
+			randomPosition = tempRandomPosition;
+		}
+		return randomPosition;
+	}
+
+	private ImmutablePair<Integer, Integer> getRandomPosition() {
+		int edgeBuffer = 50;
+		Random random = new Random();
+		int xElement = random.nextInt(canvas.getSize().width - 2 * edgeBuffer - reduceCanvasWidthFactor) + edgeBuffer;
+		int yElement = random.nextInt(canvas.getSize().height - 2 * edgeBuffer) + edgeBuffer;
+		return new ImmutablePair<Integer, Integer>(xElement, yElement);
+	}
+
+	public void linkElements(CanvasElement firstElement, CanvasElement secondElement) throws Exception {
+		GeneralUIUtils.waitForLoader();
+		drawSimpleLink(firstElement, secondElement);
+
+		selectReqAndCapAndConnect();
+
+		GeneralUIUtils.waitForLoader();
+
+	}
+
+	private void selectReqAndCapAndConnect() {
+		// Select First Cap
+		GeneralUIUtils.getWebElements(DataTestIdEnum.LinkMenuItems.LINK_ITEM_CAP.getValue()).get(0).click();
+		// Select First Req
+		GeneralUIUtils.getWebElements(DataTestIdEnum.LinkMenuItems.LINK_ITEM_REQ.getValue()).get(0).click();
+		// Connect
+		GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LinkMenuItems.CONNECT_BUTTON.getValue()).click();
+	}
+
+	private void drawSimpleLink(CanvasElement firstElement, CanvasElement secondElement) {
+
+		int yOffset = CANVAS_ELEMENT_Y_OFFSET;
+		int xOffset = CANVAS_ELEMENT_X_OFFSET;
+
+		actions.moveToElement(canvas, firstElement.getLocation().left + xOffset,
+				firstElement.getLocation().right - yOffset);
+
+		actions.clickAndHold();
+		actions.moveToElement(canvas, secondElement.getLocation().left + xOffset,
+				secondElement.getLocation().right - yOffset);
+		actions.release();
+		actions.perform();
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CaptureFailedTests.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CaptureFailedTests.java
new file mode 100644
index 0000000..e2b2f88
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CaptureFailedTests.java
@@ -0,0 +1,54 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.testng.ITestResult;
+import org.testng.Reporter;
+import org.testng.TestListenerAdapter;
+
+public class CaptureFailedTests extends TestListenerAdapter {
+
+	@Override
+	public void onTestFailure(ITestResult tr) {
+
+		String testName = tr.getName();
+		String parameter = tr.getParameters().length == 1 ? tr.getParameters()[0].toString() : "";
+		File folder = new File(String.format("test-output\\failure_screenshots\\%s_%s.png", testName, parameter));
+
+		File scrFile = ((TakesScreenshot) GeneralUIUtils.getDriver()).getScreenshotAs(OutputType.FILE);
+
+		try {
+			FileUtils.copyFile(scrFile, folder);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		Reporter.setEscapeHtml(false);
+		String screenPath = String.format("<img src=%s />", folder.getAbsolutePath());
+		Reporter.log(screenPath);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CatalogUIUtilitis.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CatalogUIUtilitis.java
new file mode 100644
index 0000000..d204645
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/CatalogUIUtilitis.java
@@ -0,0 +1,148 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.json.Json;
+
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.utils.rest.CatalogRestUtils;
+import org.testng.annotations.Test;
+
+public class CatalogUIUtilitis {
+
+	// Get all Categories , Subcategories and Icons.
+	public void getAllCategoriesAndSubcategories() throws IOException, JSONException {
+		RestResponse allcategoriesJson = CatalogRestUtils.getAllCategoriesTowardsCatalogBe();
+		JSONArray categories = new JSONArray(allcategoriesJson.getResponse());
+		for (int i = 0; i < categories.length(); i++) {
+			String categoryname = (String) categories.getJSONObject(i).get("name");
+			JSONArray subcategories = (JSONArray) categories.getJSONObject(i).get("subcategories");
+			for (int j = 0; j < subcategories.length(); j++) {
+				String subcategoryname = (String) subcategories.getJSONObject(j).get("name");
+				System.out.println(subcategoryname);
+			}
+			for (int j = 0; j < subcategories.length(); j++) {
+				JSONArray icons = (JSONArray) subcategories.getJSONObject(j).get("icons");
+				for (int k = 0; k < icons.length(); k++) {
+					System.out.println(icons.get(k));
+				}
+			}
+			System.out.println("-------------------------------");
+		}
+	}
+
+	@Test
+	// FOr testing---delete.
+	public static List<String> abcd() throws IOException, JSONException {
+		RestResponse allcategoriesJson = CatalogRestUtils.getAllCategoriesTowardsCatalogBe();
+		JSONArray categories = new JSONArray(allcategoriesJson.getResponse());
+		List<String> allcat = new ArrayList<>();
+		String uniqueId = null;
+		for (int i = 0; i < categories.length(); i++) {
+			String categoryname = (String) categories.getJSONObject(i).get("name");
+			uniqueId = (String) categories.getJSONObject(i).get("uniqueId");
+			allcat.add(uniqueId);
+			JSONArray subcategories = (JSONArray) categories.getJSONObject(i).get("subcategories");
+			for (int j = 0; j < subcategories.length(); j++) {
+				String subcategoryname = (String) subcategories.getJSONObject(j).get("name");
+				uniqueId = (String) subcategories.getJSONObject(j).get("uniqueId");
+				allcat.add(uniqueId);
+			}
+		}
+		return allcat;
+
+	}
+
+	// Get all Categories uniqueID .//The parent categories.
+	public static List<String> getCategories() throws IOException, JSONException {
+		List<String> allCategoriesList = new ArrayList<>();
+		RestResponse allcategoriesJson = CatalogRestUtils.getAllCategoriesTowardsCatalogBe();
+		JSONArray categories = new JSONArray(allcategoriesJson.getResponse());
+		for (int i = 0; i < categories.length(); i++) {
+			String categoryname = (String) categories.getJSONObject(i).get("name");
+			System.out.println(categoryname);
+			allCategoriesList.add(categoryname);
+		}
+		return allCategoriesList;
+	}
+
+	@Test
+	// Get Subcategories by Category name
+	public static List<String> getAllSubcategoriesByUniqueId(String uniqueId) throws IOException, JSONException {
+
+		RestResponse allcategoriesJson = CatalogRestUtils.getAllCategoriesTowardsCatalogBe();
+		JSONArray categories = new JSONArray(allcategoriesJson.getResponse());
+		List<String> subCategories = new ArrayList<>();// subCategories to
+														// return.
+		JSONArray subcategories = null;
+
+		for (int i = 0; i < categories.length(); i++) {
+
+			String categoryuniqueId = (String) categories.getJSONObject(i).get("uniqueId");
+
+			if (categoryuniqueId.contentEquals(uniqueId)) {
+				subcategories = (JSONArray) categories.getJSONObject(i).get("subcategories");
+
+				for (int j = 0; j < subcategories.length(); j++) {
+
+					subCategories.add((String) subcategories.getJSONObject(j).get("uniqueId"));
+				}
+
+				break;
+			}
+		}
+		if (subcategories == null) {
+			subCategories.add(uniqueId);
+		}
+		return subCategories;
+	}
+
+	@Test
+	// Get icons by category name
+	public void getSubCategoryIcons() throws IOException, JSONException {
+		RestResponse allcategoriesJson = CatalogRestUtils.getAllCategoriesTowardsCatalogBe();
+
+		JSONArray categories = new JSONArray(allcategoriesJson.getResponse());
+		for (int i = 0; i < categories.length(); i++) {
+			String subcategoryname = (String) categories.getJSONObject(i).get("name");
+			if (subcategoryname.contentEquals("Generic")) {
+				JSONArray subcategories = (JSONArray) categories.getJSONObject(i).get("subcategories");
+				for (int j = 0; j < subcategories.length(); j++) {
+					JSONArray icons = (JSONArray) subcategories.getJSONObject(j).get("icons");
+					for (int k = 0; k < icons.length(); k++) {
+						System.out.println(icons.get(k));
+					}
+				}
+				break;
+			}
+		}
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/FileHandling.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/FileHandling.java
new file mode 100644
index 0000000..9533b64
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/FileHandling.java
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FilenameFilter;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.yaml.snakeyaml.Yaml;
+
+public class FileHandling {
+
+	public static Map<?, ?> parseYamlFile(String filePath) throws Exception {
+		Yaml yaml = new Yaml();
+		File file = new File(filePath);
+		InputStream inputStream = new FileInputStream(file);
+		Map<?, ?> map = (Map<?, ?>) yaml.load(inputStream);
+		return map;
+	}
+
+	public static String getBasePath() {
+		return System.getProperty("user.dir");
+	}
+
+	public static String getResourcesFilesPath() {
+		return getBasePath() + File.separator + "src" + File.separator + "main" + File.separator + "resources"
+				+ File.separator + "Files" + File.separator;
+	}
+
+	public static String getCiFilesPath() {
+		return getBasePath() + File.separator + "src" + File.separator + "main" + File.separator + "resources"
+				+ File.separator + "ci";
+	}
+
+	public static String getConfFilesPath() {
+		return getCiFilesPath() + File.separator + "conf" + File.separator;
+	}
+
+	public static String getTestSuitesFilesPath() {
+		return getCiFilesPath() + File.separator + "testSuites" + File.separator;
+	}
+
+	public static Object[] getFileNamesFromFolder(String filepath, String extension) {
+		try {
+			File dir = new File(filepath);
+			List<String> filenames = new ArrayList<String>();
+			if (dir.isDirectory()) {
+				for (File file : dir.listFiles(new FilenameFilter() {
+					@Override
+					public boolean accept(File dir, String name) {
+						return name.endsWith(extension);
+					}
+				})) {
+
+					filenames.add(file.getName());
+				}
+				return filenames.toArray();
+			}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/GeneralUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/GeneralUIUtils.java
new file mode 100644
index 0000000..4fd3695
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/GeneralUIUtils.java
@@ -0,0 +1,1081 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.awt.AWTException;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.KeyEvent;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.time.StopWatch;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.BreadCrumbsButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CatalogFilterTitlesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CreateAndImportButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.MenuOptionsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.TypesEnum;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.Platform;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.Select;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testng.Assert;
+import org.testng.Reporter;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public final class GeneralUIUtils {
+	
+	private static int timeOut=60*3;
+
+	public static final String FILE_NAME = "Valid_tosca_Mycompute.yml";
+
+	/**************** DRIVERS ****************/
+	private static WebDriver driver;
+
+	public static void findComponentAndClick(String componentName) throws Exception {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "finding component " + componentName);
+		waitFordataTestIdVisibility("main-menu-input-search").sendKeys(componentName);
+		WebElement foundComp = null;
+		try {
+			foundComp = waitFordataTestIdVisibility(componentName);
+			foundComp.click();
+			GeneralUIUtils.waitForLoader();
+			waitFordataTestIdVisibility("formlifecyclestate");
+		} catch (Exception e) {
+			String msg = String.format("DID NOT FIND A COMPONENT NAMED %s", componentName);
+			SetupCDTest.getExtendTest().log(LogStatus.FAIL, msg);
+			System.out.println(msg);
+			Assert.fail(msg);
+		}
+	}
+
+	public static List<WebElement> getElemenetsFromTable(By by) {
+		return GeneralUIUtils.getDriver().findElements(by);
+	}
+
+	private static List<WebElement> getNewButtonsList() {
+		WebElement createButtonsArea = driver.findElement(By.className("w-sdc-dashboard-card-new"));
+		createButtonsArea.click();
+		List<WebElement> buttonsList = driver.findElements(By.className("w-sdc-dashboard-card-new-button"));
+		return buttonsList;
+	}
+
+	public static final String FILE_PATH = System.getProperty("user.dir") + "\\src\\main\\resources\\Files\\";
+	public static String fileName = "JDM_vfc.yml";
+	public static final String toscaErrorMessage = "Invalid TOSCA template.";
+	public static final String yamlError = "Invalid YAML file.";
+	public static final String allReadyExistErro = "Imported resource already exists in ASDC Catalog.";
+
+	public static WebElement hoverOnArea(String areaId) {
+		Actions actions = new Actions(driver);
+		WebElement area = getWebElementWaitForVisible(areaId);
+		actions.moveToElement(area).perform();
+		return area;
+	}
+
+	public static WebElement actionBuild(WebElement element) throws InterruptedException {
+		// make an action on page//hover on element
+		Actions build = new Actions(driver); // here you state ActionBuider
+		build.moveToElement(element).build().perform();// hover the element.
+		Thread.sleep(1000);
+		return element;
+	}
+
+	public static File takeScreenshot(String zipFile, String dir, String testName) throws IOException {
+		if (zipFile == null) {
+			zipFile = testName;
+		}
+		try {
+			File scrFile = ((TakesScreenshot) GeneralUIUtils.getDriver()).getScreenshotAs(OutputType.FILE);
+			File filePath = new File(String.format("%s/%s.png", dir, zipFile));
+			new File(dir).mkdirs();
+			FileUtils.copyFile(scrFile, filePath);
+			return filePath;
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+		return null;
+	}
+
+	public static void errorMessagePopupHandle(@SuppressWarnings("rawtypes") Supplier func) throws Exception {
+		try {
+			WebElement errorMessagePopupHeader = getDriver().findElement(By.className("w-sdc-modal-head-text"));
+			if (errorMessagePopupHeader.getText().equals("Error")) {
+				WebElement okButton = getWebButton("OK");
+				if (okButton.isDisplayed()) {
+					okButton.click();
+					func.get();
+				}
+			}
+		} catch (Exception e) {
+			throw new Exception("something went wrong, can't do anything");
+		}
+	}
+
+	public static void waitForLoader() {
+		waitForElements(By.className("tlv-loader"), 200, 3 * 60 * 1000);
+	}
+
+	public static void waitForLoaderOnboarding() {
+		waitForElements(By.className("tlv-loader"), 200, 13 * 60 * 1000);
+	}
+
+	public static List<WebElement> waitForElements(By by, int napPeriod, int maxWaitMS) {
+		boolean isKeepWaiting = true;
+		int currentWaitTimeMS = 0;
+		List<WebElement> elements = null;
+		while (isKeepWaiting) {
+			elements = getDriver().findElements(by);
+			isKeepWaiting = elements.size() > 0;
+			if (isKeepWaiting) {
+				sleep(napPeriod);
+				currentWaitTimeMS += napPeriod;
+				if (currentWaitTimeMS > maxWaitMS) {
+					isKeepWaiting = false;
+				}
+			}
+		}
+
+		return elements;
+
+	}
+
+	public static WebDriver getDriver() {
+		return driver;
+	}
+
+	public static WebElement rihtPanelAPI() {
+		return getWebElementWaitForVisible("tab-api");
+	}
+
+	public static void scrollDown() throws AWTException {
+		Robot robot = new Robot();
+		robot.keyPress(KeyEvent.VK_DOWN);
+		robot.keyRelease(KeyEvent.VK_DOWN);
+	}
+
+	// solution for "element not attached to the DOM anymore"
+	public static List<WebElement> getWorkspaceElements() throws InterruptedException {
+		Thread.sleep(1000);
+		List<WebElement> assets = GeneralUIUtils.getEelementsByClassName("w-sdc-dashboard-card-body");
+		return assets;
+	}
+
+	public static String getMethodName(Method method) {
+		return method.getName();
+	}
+
+	public static FileWriter InitializeprintToTxt(String testName) {
+		String idForTxtFile = new SimpleDateFormat("dd.MM.yyyy_HH.mm.ss").format(new Date());
+		File file = new File(testName + idForTxtFile);
+		FileWriter fw = null;
+		try {
+			fw = new FileWriter(file, true);
+
+		} catch (IOException e) {
+			e.printStackTrace();
+			System.out.println(e.getLocalizedMessage());
+		}
+		return fw;
+	}
+
+	public static void closeFileWriter(FileWriter file) throws IOException {
+		file.flush();
+		file.close();
+	}
+
+	public static WebElement createAndImportButtons(CreateAndImportButtonsEnum type, WebDriver driver)
+			throws InterruptedException {
+		switch (type) {
+		case IMPORT_CP:
+		case IMPORT_VFC:
+		case IMPORT_VL:
+			hoverOnArea("importButtonsArea");
+			return GeneralUIUtils.getWebElementWaitForVisible("importVFCbutton");
+
+		case IMPORT_VF:
+			hoverOnArea("importButtonsArea");
+			return GeneralUIUtils.getWebElement(driver, "importVFbutton");
+		case CREATE_SERVICE:
+			hoverOnArea("AddButtonsArea", driver);
+			GeneralUIUtils.getWebElementWaitForVisible("createServiceButton").click();
+			;
+			break;
+
+		case CREATE_PRODUCT:
+			GeneralUIUtils.getWebElement(driver, "createServiceButton").click();
+			GeneralUIUtils.getWebElementWaitForVisible("createServiceButton").click();
+			break;
+
+		default:
+			hoverOnArea("AddButtonsArea");
+			driver.findElement(By.xpath("//*[@data-tests-id='createResourceButton']")).click();
+			break;
+		}
+		return null;
+
+	}
+
+	public static String checkBoxLifeCyclestate(CheckBoxStatusEnum lifeCycle) {
+		String Status = "IN DESIGN CHECK OUT";
+		switch (lifeCycle) {
+		case CHECKIN:
+			Status = "IN DESIGN CHECK IN";
+			if (GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).isDisplayed()) {
+				GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).click();
+			}
+			break;
+		case CHECKOUT:
+			GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).click();
+			Status = "IN DESIGN CHECK OUT";
+			break;
+		case IN_TESTING:
+			GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).click();
+			Status = "IN TESTING";
+			break;
+		case READY_FOR_TESTING:
+			GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).click();
+			Status = "READY FOR TESTING";
+			break;
+		case CERTIFIED:
+			GeneralUIUtils.getWebElementWaitForVisible(lifeCycle.getValue()).click();
+			Status = "CERTIFIED";
+			break;
+		}
+		return Status;
+	}
+
+	public static String setFileTypeAndGetUniqId(ResourceTypeEnum fileType, ResourceReqDetails resourceDetails,
+			User user) throws IOException, Exception {
+		resourceDetails.setResourceType(fileType.toString());
+		RestCDUtils.getResource(resourceDetails, user);
+		return resourceDetails.getUniqueId();
+	}
+
+	public static void minimizeCatalogFilterByTitle(CatalogFilterTitlesEnum titlesEnum) {
+
+		switch (titlesEnum) {
+		case CATEGORIES:
+			GeneralUIUtils.getWebElementWaitForVisible(titlesEnum.getValue()).click();
+			break;
+		case STATUS:
+			GeneralUIUtils.getWebElementWaitForVisible(titlesEnum.getValue()).click();
+			break;
+		case TYPE:
+			GeneralUIUtils.getWebElementWaitForVisible(titlesEnum.getValue()).click();
+			break;
+		default:
+			break;
+		}
+		// webElementWaitForVisible.get(0).click();
+		// }
+	}
+
+	public static WebElement getWebElementWaitForVisible(String dataTestId) {
+		// try{
+		return waitFordataTestIdVisibility(dataTestId);
+		// }
+		// catch(Exception e){
+		// try{
+		// WebElement errorMessagePopupHeader =
+		// GeneralUIUtils.getDriver().findElement(By.className("w-sdc-modal-head-text"));
+		// if (errorMessagePopupHeader.getText().equals("Error")){
+		// WebElement okButton = GeneralUIUtils.getWebButton("OK");
+		// if (okButton.isDisplayed()){
+		//// takeScreenshot(LocalDateTime.now().toString().replaceAll(":", ""),
+		// SetupCDTest.SCREENSHOT_LOG_DIR);
+		// okButton.click();
+		// return getWebElementWaitForVisible(dataTestId);
+		// }
+		// }
+		// }
+		// catch(Exception exception){
+		// System.out.println(String.format("didn't find element with
+		// data-tests-id of %s", dataTestId));
+		// }
+		// }
+		// return null;
+
+	}
+
+	public static WebElement getWebElementById(String id) {
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='" + id + "']")));
+	}
+
+	public static WebElement getWebElementByName(String name) {
+		return driver.findElement(By.name(name));
+	}
+
+	// New tedy , this function will get the web elements by The new attribute
+	// value(data-tests-id)
+	public static List<WebElement> getWebElements(String dataTestId) {
+		return waitForElementsListVisibility(dataTestId);
+	}
+
+	// New tedy , this function will get the web element Button by The new
+	// attribute value(data-tests-id)
+	public static WebElement getWebButton(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait
+				.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+	}
+
+	// New tedy , this function will wait till the web element be
+	// visible(data-tests-id)
+	public static Boolean waitForInvisibileElement(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(
+				ExpectedConditions.invisibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+	}
+
+	public static WebElement waitFordataTestIdVisibility(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(
+				ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+	}
+
+	public static boolean clickcheckbox(String category) {
+		try {
+
+		} catch (Exception e) {
+			return false;
+		}
+		return true;
+	}
+
+	public static WebElement waitForContainsdataTestIdVisibility2(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		return wait.until(ExpectedConditions
+				.visibilityOfElementLocated(By.xpath("//*[contains (@data-tests-id, '" + dataTestId + "'])")));
+	}
+
+	public static List<WebElement> waitForContainsdataTestIdVisibility(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 5);
+		return wait.until(ExpectedConditions
+				.visibilityOfAllElementsLocatedBy(By.xpath("//*[contains (@data-tests-id, '" + dataTestId + "'])")));
+	}
+
+	public static WebElement waitForClassNameVisibility(String className) {
+		return waitForElementVisibility(By.className(className));
+	}
+
+	public static WebElement waitForElementVisibility(By by) {
+		return waitForElementVisibility(by, 3 * 60);
+	}
+
+	public static WebElement waitForElementVisibility(By by, int duration) {
+		WebDriverWait wait = new WebDriverWait(driver, duration);
+		return wait.until(ExpectedConditions.visibilityOf(driver.findElement(by)));
+	}
+
+	public static List<WebElement> waitForElementsListVisibility(By by) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(by)));
+	}
+	
+	public static boolean waitForElementsListInvisibility(By by) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions.invisibilityOfElementLocated(by));
+	}
+
+	// New tedy , this function will wait till the web elements be
+	// visible(data-tests-id)
+	public static List<WebElement> waitForElementsListVisibility(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		List<WebElement> findElements = wait.until(ExpectedConditions
+				.visibilityOfAllElementsLocatedBy(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+		if (findElements.size() > 0) {
+			return findElements;
+		}
+		System.out.println("Elements not Exist!");
+		return null;
+	}
+
+	public static List<WebElement> waitForElementsListVisibilityTestMethod(String dataTestId) {
+		return driver.findElements(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+	}
+
+	public static WebElement waitForBrowseButton(String dataTestId) {
+
+		return driver.findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+	}
+
+	public static List<WebElement> getWebElementsListByDataTestId(String dataTestId) {
+		return driver.findElements(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+
+	}
+
+	public static WebElement getWebElementByDataTestId(String dataTestId) {
+		return driver.findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+	}
+
+	public static WebElement waitUntilClickableButton(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions
+				.elementToBeClickable(driver.findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"))));
+	}
+
+	// interface Throws {
+	// <T,R, E extends Exception> R apply(T t) throws E;
+	// }
+	// public static <R> R swallowException(Throws<T,R,E> supplier){
+	// R returnValue;
+	// try{
+	// returnValue = supplier.get();
+	// }
+	// catch(Exception e){
+	// returnValue = null;
+	// }
+	// return returnValue;
+	// }
+	// Use this method only for special cases, otherwise use
+	// org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils.getWebElementWaitForVisible(WebDriver,
+	// String)
+
+	public static boolean isElementPresent(String dataTestId) {
+		try {
+			driver.findElement(By.xpath("//*[@data-tests-id='" + dataTestId + "']"));
+			return true;
+		} catch (org.openqa.selenium.NoSuchElementException e) {
+			return false;
+		}
+	}
+
+	public static <R> R retryMethodOnException(Supplier<R> supplier) {
+		boolean stopSearch = false;
+		R ret = null;
+		Exception throwMe = null;
+		int timeElapsed = 0;
+		while (!stopSearch) {
+			try {
+				ret = supplier.get();
+			} catch (Exception e) {
+				throwMe = e;
+				GeneralUIUtils.sleep(250);
+				timeElapsed += 250;
+				if (timeElapsed > 5000) {
+					stopSearch = true;
+				}
+
+			} finally {
+				if (ret != null) {
+					stopSearch = true;
+				}
+			}
+		}
+		if (ret == null) {
+			throw new RuntimeException(throwMe);
+		} else {
+			return ret;
+		}
+
+	}
+
+	// this method will login as tester and start test or accept Assets.
+	public static void testerUser(Boolean startTest, Boolean accept, ResourceReqDetails resource) throws Exception {
+		// GeneralUIUtils.getWebElement(ResourceUIUtils.getName()).click();
+		String url = "http://localhost:8181/sdc1/proxy-tester1#/dashboard";
+		sleep(2000);
+		SetupCDTest.navigateToUrl(url);
+		GeneralUIUtils.getWebElementWaitForVisible(resource.getName()).click();
+
+		if (startTest) {
+			clickStartTesting();
+		}
+
+		if (accept) {
+			clickAccept();
+		}
+	}
+
+	public static void governorUser(Boolean reject, Boolean approve, ResourceReqDetails resource) throws Exception {
+		// GeneralUIUtils.getWebElement(ResourceUIUtils.getName()).click();
+		String url = "http://localhost:8181/sdc1/proxy-governor1#/dashboard";
+		sleep(2000);
+		SetupCDTest.navigateToUrl(url);
+		GeneralUIUtils.getWebElementWaitForVisible("w-sdc-dashboard-card-info");
+		GeneralUIUtils.getWebElementWaitForVisible(resource.getName()).click();
+		if (reject) {
+			clickReject();
+		}
+		if (approve) {
+			clickApprove();
+		}
+		sleep(1000);
+	}
+
+	public static void opsUser(Boolean disribute, Boolean reDisribute, ResourceReqDetails resource) throws Exception {
+		// GeneralUIUtils.getWebElement(ResourceUIUtils.getName()).click();
+		String url = "http://localhost:8181/sdc1/proxy-ops1#/dashboard";
+		sleep(2000);
+		SetupCDTest.navigateToUrl(url);
+		sleep(2000);
+		GeneralUIUtils.getWebElementWaitForVisible("w-sdc-dashboard-card-info");
+		GeneralUIUtils.getWebElementWaitForVisible(resource.getName()).click();
+		if (reDisribute) {
+			clickReDistribute();
+		}
+		if (disribute) {
+			clickDistribute();
+		}
+		sleep(1000);
+	}
+
+	// this function located select list by the data-test-id value and the item
+	// to be selected..
+	public static Select getSelectList(String item, String datatestsid) {
+		Select selectlist = new Select(waitFordataTestIdVisibility(datatestsid));
+		if (item != null) {
+			selectlist.selectByVisibleText(item);
+		}
+		return selectlist;
+	}
+
+	// Define description area .
+	public static String defineDescription(String descriptionText) {
+
+		WebElement resourceDescriptionTextbox = GeneralUIUtils.getWebElementWaitForVisible("description");
+		resourceDescriptionTextbox.clear();
+		resourceDescriptionTextbox.sendKeys(descriptionText);
+		return descriptionText;
+	}
+
+	public static WebElement catalogSearchBox(String searchText) {
+		WebElement searchBox = GeneralUIUtils.getWebElementWaitForVisible("main-menu-input-search");
+		searchBox.clear();
+		searchBox.sendKeys(searchText);
+		return searchBox;
+	}
+
+	// enum
+	public static void selectMenuOptionbyname(List<WebElement> options, MenuOptionsEnum optionName)
+			throws InterruptedException {
+
+		for (WebElement webElement : options) {
+			if (webElement.getText().equals(optionName.getValue())) {
+				actionBuild(webElement).click();
+			} else {
+				System.out.println("No such element!");
+			}
+		}
+
+	}
+
+	// back to workspace by Clicking the ASDC Logo.!
+	public static void clickASDCLogo() {
+		WebDriverWait wait = new WebDriverWait(driver, 15);
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("ASDC")));
+		WebElement ClickASDCLogo = driver.findElement(By.linkText("ASDC"));
+		ClickASDCLogo.click();
+		GeneralUIUtils.waitForLoader();
+	}
+
+	public static void clickExitSign() throws InterruptedException {
+		WebElement exitSign = driver.findElement(By.xpath("//*[contains(@class, 'x-btn')]"));
+		actionBuild(exitSign);
+		Thread.sleep(1000);
+		driver.findElement(By.xpath("//*[contains(@class, 'x-btn')]")).click();
+	}
+
+	public static void clickCreateButton() throws Exception {
+		getWebButton("create/save").click();
+		GeneralUIUtils.waitForLoader();
+		getWebElementWaitForVisible(DataTestIdEnum.LifeCyleChangeButtons.CHECK_IN.getValue());
+	}
+
+	public static void clickUpdateButton() throws Exception {
+		GeneralUIUtils.sleep(500);
+		clickCreateButton();
+	}
+
+	public static void checkOut() throws InterruptedException, AWTException {
+		actionBuild(getWebButton("check_out"));
+		getWebButton("check_out").click();
+		waitForInvisibileElement("check_out");
+	}
+
+	public static void clickStartTesting() throws InterruptedException {
+		actionBuild(getWebButton("start_testing"));
+		getWebButton("start_testing").click();
+		waitForInvisibileElement("start_testing");
+		getWebButton("create/save").click();
+	}
+
+	public static void clickAccept() throws InterruptedException {
+		actionBuild(getWebButton("accept"));
+		getWebButton("accept").click();
+		getWebElementWaitForVisible("checkindialog").sendKeys("Accept!");
+		clickOkButton();
+		sleep(1000);
+	}
+
+	public static void clickReject() throws InterruptedException {
+		actionBuild(getWebButton("reject"));
+		getWebButton("reject").click();
+		waitForInvisibileElement("reject");
+	}
+
+	public static void clickApprove() throws InterruptedException {
+		actionBuild(getWebButton("approve"));
+		getWebButton("approve").click();
+		waitForInvisibileElement("approve");
+	}
+
+	public static void clickDistribute() throws InterruptedException {
+		actionBuild(getWebButton("distribute"));
+		getWebButton("distribute").click();
+		waitForInvisibileElement("redistribute");
+	}
+
+	public static void clickReDistribute() throws InterruptedException {
+		actionBuild(getWebButton("redistribute"));
+		getWebButton("redistribute").click();
+	}
+
+	public static void clickCancel() {
+		getWebButton("cancel").click();
+		waitForInvisibileElement("cancel");
+	}
+
+	public static void checkIn() throws InterruptedException {
+		actionBuild(getWebButton("check_in"));
+		getWebButton("check_in").click();
+		getWebElementWaitForVisible("checkindialog").sendKeys("Check in!");
+		clickOkButton();
+		waitForInvisibileElement("checkindialog");
+	}
+
+	public static void clickSaveIcon() throws InterruptedException {
+		actionBuild(GeneralUIUtils.waitFordataTestIdVisibility("create/save"));
+		GeneralUIUtils.getWebButton(/* "delete_version" */"create/save").click();
+		Thread.sleep(1000);
+
+	}
+
+	// Open menu of Created Object and select option.
+	public static void openObjectMenuAndSelectOption(String uniqid, MenuOptionsEnum optionName)
+			throws InterruptedException, AWTException {
+		WebElement hoverOnMenu = actionBuild(getWebElementWaitForVisible(uniqid));
+		List<WebElement> menuOptions = hoverOnMenu.findElement(By.xpath("./following-sibling::*[1]"))
+				.findElements(By.xpath(".//*"));
+		selectMenuOptionbyname(menuOptions, optionName);
+	}
+
+	// Get elements by className.
+	public static WebElement getEelementByClassName(String element) {
+		try {
+			WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+			return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='" + element + "']")));
+		} catch (Exception e) {
+			return null;
+		}
+	}
+
+	public static List<WebElement> getEelementsByClassName(String element) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait
+				.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//*[@class='" + element + "']")));
+	}
+
+	public static WebElement getEelementByContainsdatatestsid(String datatestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions
+				.visibilityOfElementLocated(By.xpath("//*[contains(@data-tests-id, '" + datatestId + "')]")));
+	}
+
+	// list
+	public static List<WebElement> getEelementsByContainsDataTestsId(String datatestId) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions
+				.visibilityOfAllElementsLocatedBy(By.xpath("//*[contains(@data-tests-id, '" + datatestId + "')]")));
+	}
+
+	public static WebElement getEelementBycontainsClassName(String classname) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(
+				ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(@class, '" + classname + "')]")));
+	}
+
+	public static WebElement getEelementByLinkText(String linkText) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@text='" + linkText + "']")));
+	}
+
+	public static List<WebElement> getEelementsBycontainsClassName(String classname) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions
+				.visibilityOfAllElementsLocatedBy(By.xpath("//*[contains(@class, '" + classname + "')]")));
+	}
+
+	public static WebElement getButtonByClassName(String element) {
+		WebDriverWait wait = new WebDriverWait(driver, 3 * 60);
+		return wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='" + element + "']")));
+	}
+
+	public static void checkinCheckout(String elementName) throws Exception, Exception {
+		checkIn();
+		getWebElementWaitForVisible(elementName).click();
+		;
+		checkOut();
+
+	}
+
+	public static void moveToStep(DataTestIdEnum.StepsEnum Stepname) {
+		moveToStep(Stepname.getValue());
+	}
+
+	public static void moveToStep(String dataTestId) {
+		getWebButton(dataTestId).click();
+		waitForLoader();
+	}
+
+	public static void editFile(String name) {
+		WebElement editfilebutton = driver.findElement(By.id("edit" + name + ""));
+		editfilebutton.click();
+	}
+
+	public static void deleteFile(String name) {
+		WebElement deletebutton = driver.findElement(By.id("delete" + name + ""));
+		deletebutton.click();
+	}
+
+	public static void downloadFile(String name) {
+		WebElement downloadbutton = driver.findElement(By.id("download" + name + ""));
+		downloadbutton.click();
+	}
+
+	public static void sleep(int duration) {
+		try {
+			Thread.sleep(duration);
+		} catch (InterruptedException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static void hasDriver() {
+		try {
+			driver.getCurrentUrl();
+			driver.quit();
+		} catch (NullPointerException e) {
+		}
+	}
+
+	public static void initDriver() {
+		try {
+			boolean remoteTesting = SetupCDTest.config.isRemoteTesting();
+			if (!remoteTesting) {
+				System.out.println("opening LOCAL browser");
+				driver = new FirefoxDriver();
+
+			} else {
+				System.out.println("opening REMOTE browser");
+				String remoteEnvIP = SetupCDTest.config.getRemoteTestingMachineIP();
+				String remoteEnvPort = SetupCDTest.config.getRemoteTestingMachinePort();
+				DesiredCapabilities cap = new DesiredCapabilities();
+				cap = DesiredCapabilities.firefox();
+				cap.setPlatform(Platform.WINDOWS);
+				cap.setBrowserName("firefox");
+
+				String remoteNodeUrl = String.format(SetupCDTest.SELENIUM_NODE_URL, remoteEnvIP, remoteEnvPort);
+				driver = new RemoteWebDriver(new URL(remoteNodeUrl), cap);
+			}
+
+
+		} catch (MalformedURLException e) {
+			throw new RuntimeException(e);
+		}
+
+	}
+
+	public static void windowZoomOut() {
+		final int zoomOutFactor = 2;
+		for (int i = 0; i < zoomOutFactor; i++) {
+			driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
+		}
+	}
+
+	public static void defineTagsList(ResourceReqDetails resource, String[] resourceTags) {
+		List<String> taglist = new ArrayList<String>();
+		;
+		WebElement resourceTagsTextbox = getWebElementWaitForVisible("i-sdc-tag-input");
+		for (String tag : resourceTags) {
+			resourceTagsTextbox.clear();
+			resourceTagsTextbox.sendKeys(tag);
+			resourceTagsTextbox.sendKeys(Keys.ENTER);
+			taglist.add(tag);
+			// waitForElements(By.className("sdc-loader"), 250, 15000);
+		}
+	}
+
+	// public static List<WebElement> waitForElements(By by, int napPeriod, int
+	// maxWaitMS){
+	// List<WebElement> elements = null;
+	//
+	// elements = getDriver().findElements(by);
+	// if( currentWaitTimeMS > maxWaitMS){
+	// }
+	// resource.setTags(taglist);
+	// return elements;
+	// }
+	public static void selectTabInRightPallete(String className) throws Exception {
+		WebElement tab = getEelementBycontainsClassName(className);
+		tab.click();
+	}
+
+	public static WebElement getWebElement(WebDriver driver, String dataTestId) {
+		return waitForElementVisibility(dataTestId);
+	}
+
+	public static void clickOkButton() throws InterruptedException {
+		// actionBuild(getWebButton("OK"));
+		// sleep(2000);
+		getWebButton("OK").click();
+	}
+
+	public static WebElement waitForElementVisibility(String dataTestId) {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 30);
+		return wait.until(
+				ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+	}
+
+	public static WebElement deleteVersion() {
+		return GeneralUIUtils.waitFordataTestIdVisibility("delete_version");
+	}
+
+	// public static List<WebElement> getFilterTitles() throws Exception {
+	//
+	// return
+	// GeneralUIUtils.getEelementsByClassName("i-sdc-designer-leftbar-section-title-text");
+	//
+	// }
+
+	public static void deleteVersionInUI() throws Exception {
+
+		actionBuild(deleteVersion());
+		deleteVersion().click();
+		GeneralUIUtils.clickOkButton();
+	}
+
+	public static void uploadFileWithJavaRobot(String FilePath, String FileName) throws Exception {
+		StringSelection sel = new StringSelection(FilePath + FileName);
+		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(sel, null);
+		Thread.sleep(1000);
+		Robot robot = new Robot();
+		robot.delay(1000);
+
+		// Release Enter
+		robot.keyRelease(KeyEvent.VK_ENTER);
+
+		// Press CTRL+V
+		robot.keyPress(KeyEvent.VK_CONTROL);
+		robot.keyPress(KeyEvent.VK_V);
+
+		// Release CTRL+V
+		robot.keyRelease(KeyEvent.VK_CONTROL);
+		robot.keyRelease(KeyEvent.VK_V);
+		Thread.sleep(1000);
+
+		// Press Enter
+		robot.keyPress(KeyEvent.VK_ENTER);
+		robot.keyRelease(KeyEvent.VK_ENTER);
+		Thread.sleep(3000);
+	}
+
+	public static String catalogFilterTypeChecBox(TypesEnum enumtype) throws Exception {
+		String Type = enumtype.toString().toLowerCase();
+		getWebElementWaitForVisible(enumtype.getValue()).click();
+		return Type;
+	}
+
+	public static List<String> catalogFilterStatusChecBox(CheckBoxStatusEnum statusEnum) throws Exception {
+		List<String> status = null;
+		switch (statusEnum) {
+		case IN_DESIGN:
+			status = Arrays.asList("NOT_CERTIFIED_CHECKIN", "NOT_CERTIFIED_CHECKOUT");
+			getWebElementWaitForVisible(statusEnum.getCatalogValue()).click();
+			break;
+		case READY_FOR_TESTING:
+			status = Arrays.asList("READY_FOR_CERTIFICATION");
+			getWebElementWaitForVisible(statusEnum.getCatalogValue()).click();
+			break;
+		case IN_TESTING:
+			status = Arrays.asList("CERTIFICATION_IN_PROGRESS");
+			getWebElementWaitForVisible(statusEnum.getCatalogValue()).click();
+			break;
+		case CERTIFIED:
+			status = Arrays.asList("CERTIFIED");
+			getWebElementWaitForVisible(statusEnum.getCatalogValue()).click();
+			break;
+		case DISTRIBUTED:
+			status = Arrays.asList("CERTIFIED");
+			getWebElementWaitForVisible(statusEnum.getCatalogValue()).click();
+			break;
+		}
+		return status;
+	}
+
+	public static void clickBreadCrumbs(BreadCrumbsButtonsEnum button) {
+		switch (button) {
+		case CATALOG:
+			GeneralUIUtils.getWebButton(button.getButton()).click();
+			break;
+		case HOME:
+			GeneralUIUtils.getWebButton(button.getButton()).click();
+			break;
+		case ON_BOARDING:
+			GeneralUIUtils.getWebButton(button.getButton()).click();
+			break;
+		default:
+			break;
+		}
+	}
+
+	public static void clickPrintScreen() {
+		getEelementByClassName("e-sdc-small-print-screen").click();
+	}
+
+	public static void clickSubmitForTest() throws InterruptedException {
+		getWebButton("submit_for_testing").click();
+		WebElement commentText = getDriver().findElement(By.className("w-sdc-modal-body-email"));
+		commentText.sendKeys("Submit For Test");
+		sleep(3000);
+		clickOkButton();
+	}
+
+	public static WebElement hoverOnArea(String areaId, WebDriver driver) {
+		Actions actions = new Actions(driver);
+		WebElement area = getWebElement(driver, areaId);
+		actions.moveToElement(area).perform();
+		return area;
+	}
+
+	public static WebElement moveToNextStep(DataTestIdEnum.StepsEnum Stepname) {
+		return getWebButton(Stepname.getValue());
+	}
+
+	public static String getComponentVersion(String componentName) {
+		return GeneralUIUtils.getWebElementWaitForVisible(componentName + "Version").getText();
+	}
+
+	public static void clickOnHTMLElementByDataTestId(String dataTestId) throws Exception {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 20);
+		StopWatch performanceMesuring = new StopWatch();
+		performanceMesuring.start();
+		WebElement element = wait
+				.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+		performanceMesuring.stop();
+		element.click();
+		performanceMesuring(dataTestId, performanceMesuring);
+
+	}
+
+	private static void performanceMesuring(String dataTestId, StopWatch performanceMesuring) {
+		Reporter.log("click on: " + dataTestId);
+		System.out.println("click on: " + dataTestId);
+		Reporter.log("Total Load Time Until click on button : " + dataTestId + " "
+				+ (((double) performanceMesuring.getTime()) / 1000) + " seconds");
+		System.out.println("Total Load Time Until click on button : " + dataTestId + " "
+				+ (((double) performanceMesuring.getTime()) / 1000) + " seconds");
+		performanceMesuring.reset();
+		performanceMesuring.start();
+		Boolean waitForElementInVisibilityByClassName = GeneralUIUtils.waitForElementInVisibilityByClassName(driver,
+				"tlv-loader");
+		performanceMesuring.stop();
+		Reporter.log("Total time before loader disappear: " + (((double) performanceMesuring.getTime()) / 1000)
+				+ " seconds");
+		System.out.println("Total time before loader disappear: " + (((double) performanceMesuring.getTime()) / 1000)
+				+ " seconds");
+	}
+
+	public static Boolean waitForElementInVisibilityByClassName(WebDriver driver, String className) {
+		WebDriverWait wait = new WebDriverWait(driver, 30);
+		return wait.until(ExpectedConditions.invisibilityOfElementLocated(By.className(className)));
+	}
+
+	public static void findComponentAndClick(ResourceReqDetails resource) throws Exception {
+
+		WebElement searchTextbox = GeneralUIUtils.getWebElementWaitForVisible("main-menu-input-search");
+		searchTextbox.clear();
+		searchTextbox.sendKeys(resource.getName());
+		clickOnHTMLElementByDataTestId(resource.getName());
+	}
+
+	public static void clickOnHTMLElementBylinkText(String linkText) throws Exception {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 20);
+		StopWatch performanceMesuring = new StopWatch();
+		performanceMesuring.start();
+		WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.linkText(linkText)));
+		performanceMesuring.stop();
+		element.click();
+		performanceMesuring(linkText, performanceMesuring);
+	}
+	
+    public static void ultimateWait(){
+    	long startTime = System.nanoTime();                    
+
+    	GeneralUIUtils.waitForLoader();
+		GeneralUIUtils.waitForAngular();
+		
+		long estimateTime = System.nanoTime();
+		long duration = TimeUnit.NANOSECONDS.toSeconds(estimateTime - startTime);
+		if(duration > timeOut){
+			SetupCDTest.getExtendTest().log(LogStatus.WARNING, String.format("Delays on page, %d seconds", duration));
+		}
+    }
+    
+    public static void waitForAngular(){
+    	WebDriverWait wait = new WebDriverWait(getDriver(), 90, 100);
+    	wait.until(AdditionalConditions.pageLoadWait());
+    	wait.until(AdditionalConditions.angularHasFinishedProcessing());
+    }
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ImportAssetUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ImportAssetUIUtils.java
new file mode 100644
index 0000000..f917a47
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ImportAssetUIUtils.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.CreateAndImportButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+
+public class ImportAssetUIUtils {
+
+	public static void importAsssetAndFillGeneralInfo(String FILE_PATH, String fileName,
+			ResourceReqDetails resourceDetails, User user, CreateAndImportButtonsEnum type) throws Exception {
+		ResourceUIUtils.importFileWithSendKey(FILE_PATH, fileName, type);
+		ResourceUIUtils.fillResourceGeneralInformationPage(resourceDetails, user);
+	}
+
+	public static void importAsssetFillGeneralInfoAndSelectIcon(String FILE_PATH, String fileName,
+			ResourceReqDetails resourceDetails, User user, CreateAndImportButtonsEnum type) throws Exception {
+		importAsssetAndFillGeneralInfo(FILE_PATH, fileName, resourceDetails, user, type);
+		GeneralUIUtils.clickCreateButton();
+		ResourceUIUtils.selectRandomResourceIcon();
+	}
+
+	// checking or unchecking the checkbox on right palette at designer
+	// workspace
+	public static void checkbox(String checkBoxname, WebDriver driver) {
+		driver.findElement(By.xpath("//label[@for='" + checkBoxname + "']")).click();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/OnboardingUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/OnboardingUtils.java
new file mode 100644
index 0000000..db6bada
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/OnboardingUtils.java
@@ -0,0 +1,457 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import static org.testng.AssertJUnit.assertEquals;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.nio.file.FileSystems;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.zip.ZipFile;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.json.JSONObject;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.config.Config;
+import org.openecomp.sdc.ci.tests.datatypes.http.HttpHeaderEnum;
+import org.openecomp.sdc.ci.tests.datatypes.http.HttpRequest;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.utils.Utils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
+import org.testng.Assert;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class OnboardingUtils {
+
+	public OnboardingUtils() {
+	}
+
+	private static String vendorId;
+	private static String vendorLicenseName;
+	private static String vendorLicenseAgreementId;
+	private static String featureGroupId;
+
+	public int countFilesInZipDirectory(String filepath, String filename) throws Exception, Throwable {
+		ZipFile zipFile = new ZipFile(filepath + filename);
+		return zipFile.size() - 1;
+	}
+
+	public static Object[] getZipFileNamesFromFolder(String filepath) {
+		return FileHandling.getFileNamesFromFolder(filepath, ".zip");
+	}
+
+	public static String createVendorSoftwareProduct(String HeatFileName, String filepath, User user)
+			throws Exception, Throwable {
+		String vspName = handleFilename(HeatFileName);
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "Starting to create vendor software product");
+
+		RestResponse createNewVendorSoftwareProduct = createNewVendorSoftwareProduct(vspName, vendorLicenseName,
+				vendorId, vendorLicenseAgreementId, featureGroupId, user);
+		assertEquals("did not succeed to create new VSP", 200,
+				createNewVendorSoftwareProduct.getErrorCode().intValue());
+		String vspid = ResponseParser.getValueFromJsonResponse(createNewVendorSoftwareProduct.getResponse(), "vspId");
+
+		RestResponse uploadHeatPackage = uploadHeatPackage(filepath, HeatFileName, vspid, user);
+		assertEquals("did not succeed to upload HEAT package", 200, uploadHeatPackage.getErrorCode().intValue());
+
+		RestResponse checkin = checkinVendorSoftwareProduct(vspid, user);
+		assertEquals("did not succeed to checking new VSP", 200, checkin.getErrorCode().intValue());
+
+		RestResponse submit = submitVendorSoftwareProduct(vspid, user);
+		assertEquals("did not succeed to submit new VSP", 200, submit.getErrorCode().intValue());
+
+		RestResponse createPackage = createPackageOfVendorSoftwareProduct(vspid, user);
+		assertEquals("did not succeed to create package of new VSP ", 200, createPackage.getErrorCode().intValue());
+
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "Succeeded to create vendor software product");
+
+		return vspName;
+	}
+
+	private static String handleFilename(String heatFileName) {
+		final String namePrefix = "ciVFOnboarded-";
+		final String nameSuffix = "-" + getShortUUID();
+
+		String subHeatFileName = heatFileName.substring(0, heatFileName.lastIndexOf("."));
+
+		if ((namePrefix + subHeatFileName + nameSuffix).length() >= 50) {
+			subHeatFileName = subHeatFileName.substring(0, 50 - namePrefix.length() - nameSuffix.length());
+		}
+
+		if (subHeatFileName.contains("(") || subHeatFileName.contains(")")) {
+			subHeatFileName = subHeatFileName.replace("(", "-");
+			subHeatFileName = subHeatFileName.replace(")", "-");
+		}
+
+		String vnfName = namePrefix + subHeatFileName + nameSuffix;
+		return vnfName;
+	}
+
+	public static void createVendorLicense(User user) throws Exception {
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "Starting to create vendor license");
+		vendorLicenseName = "ciLicense" + getShortUUID();
+		RestResponse vendorLicenseResponse = createVendorLicenseModels_1(vendorLicenseName, user);
+		assertEquals("did not succeed to create vendor license model", 200,
+				vendorLicenseResponse.getErrorCode().intValue());
+		vendorId = ResponseParser.getValueFromJsonResponse(vendorLicenseResponse.getResponse(), "value");
+
+		RestResponse vendorKeyGroupsResponse = createVendorKeyGroups_2(vendorId, user);
+		assertEquals("did not succeed to create vendor key groups", 200,
+				vendorKeyGroupsResponse.getErrorCode().intValue());
+		String keyGroupId = ResponseParser.getValueFromJsonResponse(vendorKeyGroupsResponse.getResponse(), "value");
+
+		RestResponse vendorEntitlementPool = createVendorEntitlementPool_3(vendorId, user);
+		assertEquals("did not succeed to create vendor entitlement pool", 200,
+				vendorEntitlementPool.getErrorCode().intValue());
+		String entitlementPoolId = ResponseParser.getValueFromJsonResponse(vendorEntitlementPool.getResponse(),
+				"value");
+
+		RestResponse vendorLicenseFeatureGroups = createVendorLicenseFeatureGroups_4(vendorId, keyGroupId,
+				entitlementPoolId, user);
+		assertEquals("did not succeed to create vendor license feature groups", 200,
+				vendorLicenseFeatureGroups.getErrorCode().intValue());
+		featureGroupId = ResponseParser.getValueFromJsonResponse(vendorLicenseFeatureGroups.getResponse(), "value");
+
+		RestResponse vendorLicenseAgreement = createVendorLicenseAgreement_5(vendorId, featureGroupId, user);
+		assertEquals("did not succeed to create vendor license agreement", 200,
+				vendorLicenseAgreement.getErrorCode().intValue());
+		vendorLicenseAgreementId = ResponseParser.getValueFromJsonResponse(vendorLicenseAgreement.getResponse(),
+				"value");
+
+		RestResponse checkinVendorLicense = checkinVendorLicense(vendorId, user);
+		assertEquals("did not succeed to checkin vendor license", 200, checkinVendorLicense.getErrorCode().intValue());
+
+		RestResponse submitVendorLicense = submitVendorLicense(vendorId, user);
+		assertEquals("did not succeed to submit vendor license", 200, submitVendorLicense.getErrorCode().intValue());
+
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, "Succeeded to create vendor license");
+	}
+
+	private static String getShortUUID() {
+		return UUID.randomUUID().toString().split("-")[0];
+	}
+
+	private static RestResponse actionOnComponent(String vspid, String action, String onboardComponent, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/" + onboardComponent + "/%s/actions", config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+		String userId = user.getUserId();
+
+		JSONObject jObject = new JSONObject();
+		jObject.put("action", action);
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPut(url, jObject.toString(), headersMap);
+		return response;
+	}
+
+	private static RestResponse checkinVendorLicense(String vspid, User user) throws Exception {
+		return actionOnComponent(vspid, "Checkin", "vendor-license-models", user);
+	}
+
+	private static RestResponse submitVendorLicense(String vspid, User user) throws Exception {
+		return actionOnComponent(vspid, "Submit", "vendor-license-models", user);
+	}
+
+	private static RestResponse createVendorLicenseModels_1(String name, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-license-models", config.getCatalogBeHost(), config.getCatalogBePort());
+		String userId = user.getUserId();
+		JSONObject jObject = new JSONObject();
+		jObject.put("vendorName", name);
+		jObject.put("description", "new vendor license model");
+		jObject.put("iconRef", "icon");
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPost(url, jObject.toString(), headersMap);
+		return response;
+
+	}
+
+	private static RestResponse createVendorLicenseAgreement_5(String vspid, String featureGroupId, User user)
+			throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-license-models/%s/license-agreements",
+				config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+
+		String userId = user.getUserId();
+
+		JSONObject licenseTermpObject = new JSONObject();
+		licenseTermpObject.put("choice", "Fixed_Term");
+		licenseTermpObject.put("other", "");
+
+		JSONObject jObjectBody = new JSONObject();
+		jObjectBody.put("name", "abc");
+		jObjectBody.put("description", "new vendor license agreement");
+		jObjectBody.put("requirementsAndConstrains", "abc");
+		jObjectBody.put("licenseTerm", licenseTermpObject);
+		jObjectBody.put("addedFeatureGroupsIds", Arrays.asList(featureGroupId).toArray());
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPost(url, jObjectBody.toString(), headersMap);
+		return response;
+	}
+
+	private static RestResponse createVendorLicenseFeatureGroups_4(String vspid, String licenseKeyGroupId,
+			String entitlementPoolId, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-license-models/%s/feature-groups",
+				config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+
+		String userId = user.getUserId();
+
+		JSONObject jObject = new JSONObject();
+		jObject.put("name", "xyz");
+		jObject.put("description", "new vendor license feature groups");
+		jObject.put("partNumber", "123abc456");
+		jObject.put("addedLicenseKeyGroupsIds", Arrays.asList(licenseKeyGroupId).toArray());
+		jObject.put("addedEntitlementPoolsIds", Arrays.asList(entitlementPoolId).toArray());
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPost(url, jObject.toString(), headersMap);
+		return response;
+
+	}
+
+	private static RestResponse createVendorEntitlementPool_3(String vspid, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-license-models/%s/entitlement-pools",
+				config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+
+		String userId = user.getUserId();
+
+		JSONObject jEntitlementMetricObject = new JSONObject();
+		jEntitlementMetricObject.put("choice", "CPU");
+		jEntitlementMetricObject.put("other", "");
+
+		JSONObject jAggregationFunctionObject = new JSONObject();
+		jAggregationFunctionObject.put("choice", "Peak");
+		jAggregationFunctionObject.put("other", "");
+
+		JSONObject jOperationalScope = new JSONObject();
+		jOperationalScope.put("choices", Arrays.asList("Availability_Zone").toArray());
+		jOperationalScope.put("other", "");
+
+		JSONObject jTimeObject = new JSONObject();
+		jTimeObject.put("choice", "Hour");
+		jTimeObject.put("other", "");
+
+		JSONObject jObjectBody = new JSONObject();
+		jObjectBody.put("name", "def");
+		jObjectBody.put("description", "new vendor license entitlement pool");
+		jObjectBody.put("thresholdValue", "23");
+		jObjectBody.put("thresholdUnits", "Absolute");
+		jObjectBody.put("entitlementMetric", jEntitlementMetricObject);
+		jObjectBody.put("increments", "abcd");
+		jObjectBody.put("aggregationFunction", jAggregationFunctionObject);
+		jObjectBody.put("operationalScope", jOperationalScope);
+		jObjectBody.put("time", jTimeObject);
+		jObjectBody.put("manufacturerReferenceNumber", "123aaa");
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPost(url, jObjectBody.toString(), headersMap);
+		return response;
+	}
+
+	private static RestResponse createVendorKeyGroups_2(String vspid, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-license-models/%s/license-key-groups",
+				config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+
+		String userId = user.getUserId();
+
+		JSONObject jOperationalScope = new JSONObject();
+		jOperationalScope.put("choices", Arrays.asList("Tenant").toArray());
+		jOperationalScope.put("other", "");
+
+		JSONObject jObjectBody = new JSONObject();
+		jObjectBody.put("name", "keyGroup");
+		jObjectBody.put("description", "new vendor license key group");
+		jObjectBody.put("operationalScope", jOperationalScope);
+		jObjectBody.put("type", "Universal");
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+
+		HttpRequest http = new HttpRequest();
+		RestResponse response = http.httpSendPost(url, jObjectBody.toString(), headersMap);
+		return response;
+	}
+
+	private static RestResponse createNewVendorSoftwareProduct(String name, String vendorName, String vendorId,
+			String licenseAgreementId, String featureGroupsId, User user) throws Exception {
+		Config config = Utils.getConfig();
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-software-products",
+				config.getCatalogBeHost(), config.getCatalogBePort());
+
+		String userId = user.getUserId();
+
+		JSONObject jlicensingDataObj = new JSONObject();
+		jlicensingDataObj.put("licenseAgreement", licenseAgreementId);
+		jlicensingDataObj.put("featureGroups", Arrays.asList(featureGroupsId).toArray());
+
+		JSONObject jObject = new JSONObject();
+		jObject.put("name", name);
+		jObject.put("description", "new VSP description");
+		jObject.put("category", "resourceNewCategory.generic");
+		jObject.put("subCategory", "resourceNewCategory.generic.database");
+		jObject.put("licensingVersion", "1.0");
+		jObject.put("vendorName", vendorName);
+		jObject.put("vendorId", vendorId);
+		jObject.put("icon", "icon");
+		jObject.put("licensingData", jlicensingDataObj);
+
+		Map<String, String> headersMap = prepareHeadersMap(userId);
+		HttpRequest http = new HttpRequest();
+
+		RestResponse response = http.httpSendPost(url, jObject.toString(), headersMap);
+
+		return response;
+	}
+
+	private static RestResponse uploadHeatPackage(String filepath, String filename, String vspid, User user)
+			throws Exception {
+		Config config = Utils.getConfig();
+		CloseableHttpResponse response = null;
+
+		MultipartEntityBuilder mpBuilder = MultipartEntityBuilder.create();
+		mpBuilder.addPart("upload", new FileBody(getTestZipFile(filepath, filename)));
+
+		String url = String.format("http://%s:%s/onboarding-api/v1.0/vendor-software-products/%s/upload", config.getCatalogBeHost(), config.getCatalogBePort(), vspid);
+
+		Map<String, String> headersMap = prepareHeadersMap(user.getUserId());
+		headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "multipart/form-data");
+
+		CloseableHttpClient client = HttpClients.createDefault();
+		try {
+			HttpPost httpPost = new HttpPost(url);
+			RestResponse restResponse = new RestResponse();
+
+			Iterator<String> iterator = headersMap.keySet().iterator();
+			while (iterator.hasNext()) {
+				String key = iterator.next();
+				String value = headersMap.get(key);
+				httpPost.addHeader(key, value);
+			}
+			httpPost.setEntity(mpBuilder.build());
+			response = client.execute(httpPost);
+			HttpEntity entity = response.getEntity();
+			String responseBody = null;
+			if (entity != null) {
+				InputStream instream = entity.getContent();
+				StringWriter writer = new StringWriter();
+				IOUtils.copy(instream, writer);
+				responseBody = writer.toString();
+				try {
+
+				} finally {
+					instream.close();
+				}
+			}
+
+			restResponse.setErrorCode(response.getStatusLine().getStatusCode());
+			restResponse.setResponse(responseBody);
+
+			return restResponse;
+
+		} finally {
+			closeResponse(response);
+			closeHttpClient(client);
+
+		}
+	}
+
+	private static void closeResponse(CloseableHttpResponse response) {
+		try {
+			if (response != null) {
+				response.close();
+			}
+		} catch (IOException e) {
+			System.out.println(String.format("failed to close client or response: %s", e.getMessage()));
+		}
+	}
+
+	private static void closeHttpClient(CloseableHttpClient client) {
+		try {
+			if (client != null) {
+				client.close();
+			}
+		} catch (IOException e) {
+			System.out.println(String.format("failed to close client or response: %s", e.getMessage()));
+		}
+	}
+
+	private static File getTestZipFile(String filepath, String filename) throws IOException {
+		Config config = Utils.getConfig();
+		String sourceDir = config.getImportResourceTestsConfigDir();
+		java.nio.file.Path filePath = FileSystems.getDefault().getPath(filepath + File.separator + filename);
+		return filePath.toFile();
+	}
+
+	private static RestResponse checkinVendorSoftwareProduct(String vspid, User user) throws Exception {
+		return actionOnComponent(vspid, "Checkin", "vendor-software-products", user);
+	}
+
+	private static RestResponse submitVendorSoftwareProduct(String vspid, User user) throws Exception {
+		return actionOnComponent(vspid, "Submit", "vendor-software-products", user);
+	}
+
+	private static RestResponse createPackageOfVendorSoftwareProduct(String vspid, User user) throws Exception {
+		return actionOnComponent(vspid, "Create_Package", "vendor-software-products", user);
+	}
+
+	protected static Map<String, String> prepareHeadersMap(String userId) {
+		Map<String, String> headersMap = new HashMap<String, String>();
+		headersMap.put(HttpHeaderEnum.CONTENT_TYPE.getValue(), "application/json");
+		headersMap.put(HttpHeaderEnum.ACCEPT.getValue(), "application/json");
+		headersMap.put(HttpHeaderEnum.USER_ID.getValue(), userId);
+		
+		return headersMap;
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/PropertiesUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/PropertiesUIUtils.java
new file mode 100644
index 0000000..a625630
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/PropertiesUIUtils.java
@@ -0,0 +1,92 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.openecomp.sdc.ci.tests.datatypes.PropertyInfo;
+import org.openecomp.sdc.ci.tests.pages.PropertiesPage;
+import org.openqa.selenium.WebElement;
+
+public class PropertiesUIUtils {
+
+	// public static void addPropertByType(String type,String name,String
+	// defaultValue,String description) throws Exception{
+	//
+	// ResourceUIUtils.defineNewSelectList(type);
+	// ResourceUIUtils.definePropertyName(name);
+	// ResourceUIUtils.defineDefaultValueByType(defaultValue);
+	// ResourceUIUtils.defineDescription(description);
+	// Thread.sleep(2000);
+	// ResourceUIUtils.clickButton("Add");
+	// }
+	public static Map<String, String> addProperties(String name, String itemType, String defaultValue,
+			String description, String schemaType) throws Exception {
+		Map<String, String> propertyvalues = new HashMap<String, String>();
+		GeneralUIUtils.getSelectList(itemType, "propertyType");
+		ResourceUIUtils.definePropertyName(name);
+		if (itemType == "boolean") {
+			ResourceUIUtils.defineBoolenDefaultValue(defaultValue);
+			GeneralUIUtils.defineDescription(description);
+			Thread.sleep(2000);
+			GeneralUIUtils.getWebButton("Add").click();
+			;
+		} else if (itemType == "list" || itemType == "map") {
+			GeneralUIUtils.getSelectList(schemaType, "schemaType");
+		}
+		if (!(itemType == "boolean")) {
+			ResourceUIUtils.defineDefaultValueByType(defaultValue);
+			GeneralUIUtils.defineDescription(description);
+			GeneralUIUtils.getWebButton("Add").click();
+			;
+			Thread.sleep(2000);
+		}
+		propertyvalues.put("type", itemType);
+		propertyvalues.put("defaultValue", defaultValue);
+		propertyvalues.put("description", description);
+		propertyvalues.put("name", name);
+
+		return propertyvalues;
+	}
+
+	public static void vlidateProperties(Map<String, String> propertyValues) throws InterruptedException {
+		WebElement name = GeneralUIUtils
+				.actionBuild(GeneralUIUtils.getWebElementWaitForVisible(propertyValues.get("name")));
+		name.getText().equalsIgnoreCase(propertyValues.get("name"));
+		WebElement defaultValue = GeneralUIUtils
+				.actionBuild(GeneralUIUtils.getWebElementWaitForVisible(propertyValues.get("name")));
+		defaultValue.getText().equalsIgnoreCase(propertyValues.get("defaultValue"));
+		WebElement type = GeneralUIUtils
+				.actionBuild(GeneralUIUtils.getWebElementWaitForVisible(propertyValues.get("type")));
+		type.getText().equalsIgnoreCase(propertyValues.get("type"));
+	}
+
+	public static void addNewProperty(PropertyInfo property) {
+		PropertiesPage.getPropertyPopup().insertPropertyName(property.getName());
+		PropertiesPage.getPropertyPopup().selectPropertyType(property.getType().getType());
+		PropertiesPage.getPropertyPopup().insertPropertyDescription(property.getDescription());
+		PropertiesPage.getPropertyPopup().insertPropertyDefaultValue(property.getValue());
+
+		PropertiesPage.getPropertyPopup().clickSave();
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ResourceUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ResourceUIUtils.java
new file mode 100644
index 0000000..9b374c1
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ResourceUIUtils.java
@@ -0,0 +1,864 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertNotNull;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.awt.AWTException;
+import java.awt.Robot;
+import java.awt.event.KeyEvent;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.http.HttpStatus;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.CheckBoxStatusEnum;
+import org.openecomp.sdc.ci.tests.datatypes.CreateAndImportButtonsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.Dashboard;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceCategoriesNameEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.Select;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testng.AssertJUnit;
+
+public final class ResourceUIUtils {
+	public static final String RESOURCE_NAME_PREFIX = "ResourceCDTest-";
+	protected static final boolean IS_BEFORE_TEST = true;
+	public static final String INITIAL_VERSION = "0.1";
+	public static final String ICON_RESOURCE_NAME = "call_controll";
+	protected static final String UPDATED_RESOURCE_ICON_NAME = "objectStorage";
+
+	private ResourceUIUtils() {
+	}
+
+	static WebDriver driver = GeneralUIUtils.getDriver();
+
+	public static void defineResourceName(String resourceName) {
+
+		WebElement resourceNameTextbox = GeneralUIUtils.getDriver().findElement(By.name("componentName"));
+		resourceNameTextbox.clear();
+		resourceNameTextbox.sendKeys(resourceName);
+	}
+
+	public static void defineResourceCategory(String category, String datatestsid) {
+
+		GeneralUIUtils.getSelectList(category, datatestsid);
+	}
+	
+	public static void importFileWithSendKey(String FilePath, String FileName, CreateAndImportButtonsEnum type)
+			throws Exception {
+		WebElement importButton = GeneralUIUtils.createAndImportButtons(type, driver).findElement(By.tagName("input"));
+		importButton.sendKeys(FilePath + FileName);
+	}
+
+	public static void importFileWithSendKeyBrowse(String FilePath, String FileName) throws Exception {
+		WebElement browsebutton = GeneralUIUtils.waitForBrowseButton("browseButton");
+		browsebutton.sendKeys(FilePath + FileName);
+	}
+
+	public static String defineUserId(String userId) {
+		WebElement resourceUserIdTextbox = GeneralUIUtils.getWebElementWaitForVisible("contactId");
+		resourceUserIdTextbox.clear();
+		resourceUserIdTextbox.sendKeys(userId);
+		return userId;
+	}
+
+	public static void defineVendorRelease(String resourceVendorRelease) {
+
+		WebElement resourceVendorReleaseTextbox = GeneralUIUtils.getWebElementWaitForVisible("vendorRelease");
+		resourceVendorReleaseTextbox.clear();
+		resourceVendorReleaseTextbox.sendKeys(resourceVendorRelease);
+	}
+
+	public static void selectResourceIcon(String resourceIcon) throws Exception {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 10);
+		wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@data-tests-id='" + resourceIcon + "']")))
+				.click();
+	}
+
+	public static String definePropertyName(String name) {
+
+		WebElement nameProperty = GeneralUIUtils.getDriver().findElement(By.name("propertyName"));
+		nameProperty.sendKeys(name);
+		return name;
+	}
+
+	public static void selectRandomResourceIcon() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.ICON);
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 4);
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(@data-tests-id, 'iconBox')]")));
+		List<WebElement> iconElement = GeneralUIUtils.getDriver()
+				.findElements(By.xpath("//*[contains(@data-tests-id, 'iconBox')]"));
+		iconElement.get(0).click();
+	}
+
+	public static List<WebElement> getAllObjectsOnWorkspace(WebDriver driver, ResourceReqDetails resource)
+			throws Exception {
+
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 10);
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@*='" + resource.getName() + "']")));
+		return GeneralUIUtils.getDriver()
+				.findElements(By.xpath("//div[@class='" + "w-sdc-dashboard-card-info-name" + "']"));
+
+	}
+
+	public static String getErrorMessageText(String text) throws Exception {
+
+		return GeneralUIUtils.getEelementBycontainsClassName(text).getText();
+
+	}
+
+	public static WebElement scrollElement(WebDriver driver) throws Exception {
+
+		return GeneralUIUtils.getDriver().findElement(By.className("ps-scrollbar-y"));
+	}
+
+	public static void scrollDownPage() throws AWTException, InterruptedException {
+		Robot robot = new Robot();
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+		robot.keyPress(KeyEvent.VK_PAGE_DOWN);
+		robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
+	}
+
+	public static void defineNewSelectList(String Text) {
+		WebElement mySelectElm = GeneralUIUtils.getDriver().findElement(By.className("i-sdc-form-select"));
+		Select mySelectString = new Select(mySelectElm);
+		mySelectString.selectByVisibleText(Text);
+	}
+
+	public static void defineDefaultValueByType(String Value) {
+
+		WebElement valueString = GeneralUIUtils.getDriver().findElement(By.name("value"));
+		valueString.clear();
+		valueString.sendKeys(Value);
+	}
+
+	public static void defineBoolenDefaultValue(String Value) {
+
+		WebElement elementBoolean = GeneralUIUtils.getDriver().findElement(By.name("value"));
+		Select se = new Select(elementBoolean);
+		se.selectByValue(Value);
+	}
+
+	public static void clickButtonBlue() {
+		WebElement clickButtonBlue = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-btn-blue"));
+		clickButtonBlue.click();
+	}
+
+	public static void clickButton(String selectButton) {
+
+		WebElement clickButton = GeneralUIUtils.getDriver()
+				.findElement(By.xpath("//*[@data-tests-id='" + selectButton + "']"));
+		clickButton.click();
+	}
+
+	public static WebElement Waitfunctionforbuttons(String element, int timeout) {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), timeout);
+		return wait.until(ExpectedConditions.elementToBeClickable(By.xpath(element)));
+	}
+
+	public static WebElement waitToButtonSubmitForTesting() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='submitForTesting']", 10);
+	}
+
+	public static WebElement waitToFinishButtonEnabled() {
+		return Waitfunctionforbuttons("//button[@data-tests-id='Finish']", 10);
+	}
+
+	public static WebElement waitToNextButtonEnabled() {
+		return Waitfunctionforbuttons("//button[@data-tests-id='Next']", 10);
+	}
+
+	public static WebElement waitToHomeMenu() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='main-menu-button-home']", 10);
+	}
+
+	public static WebElement waitToCatalogMenu() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='main-menu-button-catalog']", 10);
+	}
+
+	public static WebElement waitSearch() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='main-menu-input-search']", 10);
+	}
+
+	public static WebElement waitSubmitforTestingCard() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='i-sdc-dashboard-card-menu-item-SubmitforTesting']", 10);
+	}
+
+	public static WebElement waitViewCard() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='i-sdc-dashboard-card-menu-item-View']", 5);
+	}
+
+	public static void waitOpenCard(String requiredElementUniqueId) throws Exception {
+		WebElement menu = GeneralUIUtils.getDriver()
+				.findElement(By.xpath("//*[@data-tests-id='" + requiredElementUniqueId + "']"));
+		GeneralUIUtils.actionBuild(menu);
+	}
+
+	public static void fillResourceGeneralInformationPage(ResourceReqDetails resource, User user) {
+		try {
+
+			ResourceGeneralPage.defineName(resource.getName());
+			ResourceGeneralPage.defineDescription(resource.getDescription());
+			ResourceGeneralPage.defineCategory(resource.getCategories().get(0).getSubcategories().get(0).getName());
+			ResourceGeneralPage.defineVendorName(resource.getVendorName());
+			ResourceGeneralPage.defineVendorRelease(resource.getVendorRelease());
+			ResourceGeneralPage.defineTagsList(resource, new String[] { "This-is-tag", "another-tag", "Test-automation-tag" });
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static void fillNewResourceValues(ResourceReqDetails resource, User user) throws Exception {
+		fillResourceGeneralInformationPage(resource, user);
+		GeneralUIUtils.clickCreateButton();
+	}
+
+	// coded by teddy.
+	public static WebElement waitfunctionforallelements(String element) {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 5);
+		return wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@*='" + element + "']")));
+	}
+
+	public static WebElement waitFunctionForaGetElements(String element, int timeout) {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), timeout);
+		return wait.until(
+				ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@data-tests-id='" + element + "']")));
+	}
+
+	public static void getVFCGeneralInfo(ResourceReqDetails resource, User user) throws InterruptedException {
+		Thread.sleep(2000);
+		String version = GeneralUIUtils.getWebElements("versionvalue").get(0).getText().substring(1);
+		String name = GeneralUIUtils.getWebElementWaitForVisible("name").getAttribute("value");
+		String description = GeneralUIUtils.getWebElementWaitForVisible("description").getAttribute("value");
+		String category = GeneralUIUtils.getSelectList(null, "selectGeneralCategory").getFirstSelectedOption()
+				.getText();
+		String vendorName = GeneralUIUtils.getWebElementWaitForVisible("vendorName").getAttribute("value");
+		String vendorRelease = GeneralUIUtils.getWebElementWaitForVisible("vendorRelease").getAttribute("value");
+		List<WebElement> tags = GeneralUIUtils.waitForElementsListVisibility("i-sdc-tag-text");
+		String type = GeneralUIUtils.waitForElementsListVisibility("type").get(1).getText();
+		int index = type.lastIndexOf(":");
+		System.out.println(type.substring(0, index));
+		String ContactId = GeneralUIUtils.getWebElementWaitForVisible("contactId").getAttribute("value");
+		System.out.println(resource.getVersion());
+		assertTrue(resource.getVersion().equals(version));
+		assertTrue(resource.getName().equals(name));
+		assertTrue(resource.getDescription().equals(description));
+		System.out.println(resource.getVendorName());
+		System.out.println(resource.getVendorRelease());
+		assertTrue(resource.getCategories().get(0).getSubcategories().get(0).getName().equals(category));
+		assertTrue(resource.getVendorName().equals(vendorName));
+		assertTrue(resource.getVendorRelease().equals(vendorRelease));
+		assertTrue(resource.getCreatorUserId().equals(ContactId));
+		assertEquals(type.substring(0, index), resource.getResourceType());
+
+		for (int i = 0; i < tags.size(); i++) {
+			assertEquals(resource.getTags().get(i), tags.get(i).getText());
+		}
+	}
+
+	public static void getGeneralInfo(ResourceReqDetails resource, User user) {
+		List<WebElement> tags = GeneralUIUtils.waitForElementsListVisibility("tag");
+
+		for (WebElement tag : tags) {
+			System.out.println(resource.getTags().get(0));
+		}
+	}
+
+	public static void getGeneralInfoForTags(ResourceReqDetails resource, User user) {
+
+		clickMore();
+		String componentType = waitFunctionForaGetElements("componentType", 3).getText();
+		String version = waitFunctionForaGetElements("version", 3).getText();
+		String category = waitFunctionForaGetElements("category", 3).getText();// get
+																				// right
+																				// panel
+																				// Category.
+		String resourceType = waitFunctionForaGetElements("resourceType", 3).getText();// get
+																						// right
+																						// panel
+																						// SubCategory.
+		String date = GeneralUIUtils.getEelementByClassName("creationDate").getText();
+		String aouthor = waitfunctionforallelements("author'").getText();
+		String vendorName = waitFunctionForaGetElements("vendorName", 3).getText();
+		String vendorRelease = waitFunctionForaGetElements("vendorRelease", 3).getText();
+		String contactId = waitFunctionForaGetElements("contactId", 3).getText();
+		String description = waitFunctionForaGetElements("description", 3).getText();
+		List<WebElement> tags = GeneralUIUtils.waitForElementsListVisibility("tag");
+		assertTrue(componentType.equals("RESOURCE"));
+		assertTrue(version.equals(resource.getVersion()));
+		assertTrue(category.equals(resource.getCategories().get(0).getName()));
+		assertEquals(resourceType, resource.getResourceType());
+		// assertEquals(Date,resource.getCreationDate());
+		// assertEquals(Aouthor,resource.getCreatorFullName());
+		assertTrue(vendorName.equals(resource.getVendorName()));
+		assertTrue(vendorRelease.equals(resource.getVendorRelease()));
+		assertTrue(contactId.equals(resource.getContactId()));
+		assertTrue(description.equals(resource.getDescription() + "\nLess"));
+		assertTrue(tags.equals("Tag-150"));
+	}
+
+	public static WebElement searchVFNameInWorkspace(ResourceReqDetails resource, User user) throws Exception {
+
+		List<WebElement> findElements = GeneralUIUtils.getDriver()
+				.findElements(By.xpath("//div[@data-tests-id='" + resource.getUniqueId() + "']"));
+		assertNotNull("did not find any elements", findElements);
+		for (WebElement webElement : findElements) {
+			if (webElement.getText().contains(resource.getUniqueId())) {
+				System.out.println("I find it");
+				return webElement;
+			}
+		}
+		return null;
+	}
+
+	public static Boolean searchCheckOutWorkspace(ResourceReqDetails resource, User user,
+			CheckBoxStatusEnum checkBoxStatusEnum) throws Exception {
+
+		List<WebElement> findElements = GeneralUIUtils.getDriver()
+				.findElements(By.xpath("//div[@data-tests-id='component.lifecycleState']"));
+		assertNotNull("did not find any elements", findElements);
+		for (WebElement webElement : findElements) {
+			if (!webElement.getAttribute("class").contains(checkBoxStatusEnum.name())) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+	// coded by tedy.
+	public static void validateWithRightPalett(ResourceReqDetails resource, User user) {
+		// String
+		// Type=Waitfunctionforallelements("sharingService.selectedEntity.getTypeForView()",3).getText();
+		String ResourceType = waitfunctionforallelements("selectedComponent.resourceType").getText();
+		System.out.println(ResourceType);
+		String Version = waitfunctionforallelements("selectedComponent.version").getText();
+		String Category = waitfunctionforallelements("selectedComponent.categories[0].name").getText();// get
+																										// right
+																										// panel
+																										// Category.
+		String CanvasSubCategory = waitfunctionforallelements("selectedComponent.categories[0].subcategories[0].name")
+				.getText();// get right panel SubCategory.
+		// String Date=Waitfunctionforelements("selectedComponent.creationDate |
+		// date: 'MM/dd/yyyy'").getText();
+		// String
+		// Aouthor=waitfunctionforallelements("selectedComponent.creatorFullName'").getText();
+		String VendorName = waitfunctionforallelements("selectedComponent.vendorName").getText();
+		String VendorRelease = waitfunctionforallelements("selectedComponent.vendorRelease").getText();
+		String contactId = waitfunctionforallelements("selectedComponent.contactId").getText();
+		String Description = waitfunctionforallelements("selectedComponent.description").getText();
+		String TagVF = waitfunctionforallelements("tag").getText();
+		AssertJUnit.assertEquals(ResourceType, resource.getResourceType());
+		AssertJUnit.assertEquals(Version, resource.getVersion());
+		AssertJUnit.assertEquals(Category, resource.getCategories().get(0).getName());
+		AssertJUnit.assertEquals(CanvasSubCategory,
+				resource.getCategories().get(0).getSubcategories().get(0).getName());
+		// assertEquals(Date,resource.getCreationDate());
+		// assertEquals(Aouthor,resource.getCreatorFullName());
+		AssertJUnit.assertEquals(VendorName, resource.getVendorName());
+		AssertJUnit.assertEquals(VendorRelease, resource.getVendorRelease());
+		AssertJUnit.assertEquals(contactId, resource.getContactId());
+		AssertJUnit.assertEquals(Description, resource.getDescription() + "\nLess");
+		AssertJUnit.assertEquals(TagVF, "qa123");
+	}
+
+	public static void clickMore() {
+		WebElement clickButtonSubmit = GeneralUIUtils.getDriver()
+				.findElement(By.className("ellipsis-directive-more-less"));
+		clickButtonSubmit.click();
+	}
+
+	public static RestResponse createResourceInUI(ResourceReqDetails resource, User user)
+			throws Exception, AWTException {
+		System.out.println("creating resource...");
+		fillNewResourceValues(resource, user);
+		RestResponse getCreatedResource = RestCDUtils.getResource(resource, user);
+		AssertJUnit.assertEquals("Did not succeed to get any resource", HttpStatus.SC_OK,
+				getCreatedResource.getErrorCode().intValue());
+
+		return getCreatedResource;
+	}
+
+	public static RestResponse createResource(ResourceReqDetails resource, User user) throws Exception, AWTException {
+
+		ResourceUIUtils.moveToHTMLElementByClassName("w-sdc-dashboard-card-new");
+		ResourceUIUtils.clickOnHTMLElementByDataTestId(DataTestIdEnum.Dashboard.BUTTON_ADD_VF.getValue());
+		GeneralUIUtils.waitForLoader();
+		// GeneralUIUtils.sleep(1000);
+		fillResourceGeneralInformationPage(resource, user);
+		GeneralUIUtils.clickCreateButton();
+		return null;
+
+	}
+
+	public static RestResponse updateResourceInformationPage(ResourceReqDetails resource, User user)
+			throws Exception, AWTException {
+
+		fillResourceGeneralInformationPage(resource, user);
+		GeneralUIUtils.clickCreateButton();
+		return null;
+
+	}
+
+	public static RestResponse checkInResourceInUI(ResourceReqDetails resource, User user) throws Exception {
+
+		WebElement ASDCLink = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-header-logo-link"));
+		ASDCLink.click();
+		Thread.sleep(2000);
+
+		List<WebElement> listFormInput = GeneralUIUtils.getDriver()
+				.findElements(By.className("i-sdc-left-sidebar-nav-item"));
+		WebElement addPropertyElement = listFormInput.get(0);
+		addPropertyElement.click();
+		Thread.sleep(2000);
+
+		WebElement searchResource = GeneralUIUtils.getDriver()
+				.findElement(By.className("w-sdc-header-catalog-search-input"));
+		searchResource.sendKeys("newresource4test");
+
+		Thread.sleep(1000);
+
+		WebElement buttonClickMenu = GeneralUIUtils.getDriver()
+				.findElement(By.className("w-sdc-dashboard-card-menu-button"));
+		buttonClickMenu.click();
+
+		WebElement clickMenu = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-dashboard-card-menu"));
+		clickMenu.click();
+
+		List<WebElement> clickCheckIn = GeneralUIUtils.getDriver()
+				.findElements(By.className("i-sdc-dashboard-card-menu-item"));
+		WebElement clickCheckInMenu = clickCheckIn.get(1);
+		clickCheckInMenu.click();
+
+		WebElement descriptionForSubmit = GeneralUIUtils.getDriver()
+				.findElement(By.className("w-sdc-modal-body-comment"));
+		descriptionForSubmit.sendKeys("checkin resource");
+		Thread.sleep(2000);
+		WebElement clickButtonSubmitTwo = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-btn-blue"));
+		clickButtonSubmitTwo.click();
+		Thread.sleep(2000);
+
+		WebElement buttonClickMenu1 = GeneralUIUtils.getDriver()
+				.findElement(By.className("w-sdc-dashboard-card-menu-button"));
+		buttonClickMenu1.click();
+
+		WebElement clickMenu1 = GeneralUIUtils.getDriver().findElement(By.className("w-sdc-dashboard-card-menu"));
+		clickMenu1.click();
+
+		List<WebElement> clickCheckOut = GeneralUIUtils.getDriver()
+				.findElements(By.className("i-sdc-dashboard-card-menu-item"));
+		WebElement clickCheckOutMenu = clickCheckOut.get(0);
+		clickCheckOutMenu.click();
+
+		Thread.sleep(3000);
+		RestResponse getResource = RestCDUtils.getResource(resource, user);
+		AssertJUnit.assertEquals("Did not succeed to get resource after create", 200,
+				getResource.getErrorCode().intValue());
+		return getResource;
+
+	}
+
+	public static String lifeCycleStateUI() throws InterruptedException {
+		return GeneralUIUtils.getWebElementWaitForVisible("formlifecyclestate").getText();
+	}
+
+	public static List<String> catalogFilterResourceCategoriesChecBox(ResourceCategoriesNameEnum enumName)
+			throws Exception {
+		List<String> categories = Arrays.asList();
+		switch (enumName) {
+		case APPLICATIONL4:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("applicationServer", "defaulticon", "vl", "cp", "call_controll", "borderElement",
+					"network", "firewall", "database", "loadBalancer");
+			break;
+		case APPLICATION_SERVER:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("applicationServer", "vl", "cp", "defaulticon");
+			break;
+		case BORDER_ELEMENT:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("borderElement", "vl", "cp", "defaulticon");
+			break;
+		case CALL_CONTROL:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("call_controll", "vl", "cp", "defaulticon");
+			break;
+		case COMMON_NETWORK_RESOURCES:
+			GeneralUIUtils.getEelementByLinkText("Common Network Resources").click();
+			categories = Arrays.asList("network", "vl", "cp", "defaulticon");
+			break;
+		case CONNECTION_POINTS:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("cp", "defaulticon");
+			break;
+		case DATABASE:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("database", "vl", "cp", "defaulticon");
+			break;
+		case DATABASE_GENERIC:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("database", "vl", "cp", "defaulticon");
+			break;
+		case FIREWALL:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("firewall", "vl", "cp", "defaulticon");
+			break;
+		case GATEWAY:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("gateway", "vl", "cp", "defaulticon");
+			break;
+		case INFRASTRUCTURE:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("connector", "vl", "cp", "defaulticon");
+			break;
+		case INFRASTRUCTUREL23:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("ucpe", "vl", "cp", "defaulticon");
+			break;
+		case LAN_CONNECTORS:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "port", "connector", "vl", "cp", "defaulticon");
+			break;
+		case LOAD_BALANCER:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("loadBalancer", "vl", "cp", "defaulticon");
+			break;
+		case MEDIA_SERVERS:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "vl", "cp", "defaulticon");
+			break;
+		case NETWORKL4:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "vl", "cp", "defaulticon");
+			break;
+		case NETWORK_ELEMENTS:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("port", "defaulticon", "network", "connector", "vl", "cp");
+			break;
+		case NETWORK_L23:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "vl", "defaulticon", "cp", "router", "port", "connector", "gateway",
+					"ucpe");
+			break;
+		case NETWORK_CONNECTIVITY:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "vl", "cp", "defaulticon");
+			break;
+		case GENERIC:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("database", "port", "loadBalancer", "vl", "cp", "objectStorage", "compute",
+					"defaulticon", "ucpe", "network", "connector");
+			break;
+		case ABSTRACT:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("objectStorage", "compute", "defaulticon", "cp", "vl");
+			break;
+		case Router:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("router", "vl", "cp", "defaulticon");
+			break;
+		case VIRTUAL_LINKS:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("vl", "defaulticon");
+			break;
+		case WAN_Connectors:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("network", "port", "connector", "vl", "cp", "defaulticon");
+			break;
+		case WEB_SERVER:
+			GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+			categories = Arrays.asList("applicationServer", "vl", "cp", "defaulticon");
+			break;
+		}
+		return categories;
+	}
+
+	public static void deleteVersionInUI() throws Exception {
+
+		waitToDeleteVersion().click();
+		ResourceUIUtils.clickButtonBlue();
+	}
+
+	public static void selectTabInRightPallete(String className) throws Exception {
+		WebElement tab = GeneralUIUtils.getEelementBycontainsClassName(className);
+		tab.click();
+	}
+
+	public static WebElement waitToDeleteVersion() {
+		return Waitfunctionforbuttons("//*[@data-tests-id='deleteVersion']", 10);
+	}
+
+	public static WebElement rihtPanelAPI() {
+		return waitFunctionForaGetElements("tab-api", 10);
+	}
+
+	/**
+	 * Click on HTML element.
+	 * 
+	 * @param dataTestId
+	 * @throws Exception
+	 */
+	public static void clickOnHTMLElementByDataTestId(String dataTestId) throws Exception {
+		WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), 20);
+		WebElement element = wait
+				.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@data-tests-id='" + dataTestId + "']")));
+		element.click();
+		// wait.until(ExpectedConditions.elemetto)
+		// WebElement serviceButton =
+		// GeneralUIUtils.getDriver().findElement(By.xpath("//*[@data-tests-id='"
+		// + dataTestId + "']"));
+		// serviceButton.
+		// serviceButton.click();
+	}
+
+	/**
+	 * Move to HTML element by class name. When moving to the HTML element, it
+	 * will raise hover event.
+	 * 
+	 * @param className
+	 */
+	public static void moveToHTMLElementByClassName(String className) {
+		Actions actions = new Actions(GeneralUIUtils.getDriver());
+		final WebElement createButtonsArea = GeneralUIUtils
+				.retryMethodOnException(() -> GeneralUIUtils.getDriver().findElement(By.className(className)));
+		actions.moveToElement(createButtonsArea).perform();
+	}
+
+	/**
+	 * Move to HTML element by element id. When moving to the HTML element, it
+	 * will raise hover event.
+	 * 
+	 * @param className
+	 */
+	static void moveToHTMLElementByDataTestId(String dataTestId) {
+		// WebElement hoverArea =
+		// GeneralUIUtils.getDriver().findElement(By.xpath("//*[@data-tests-id='"
+		// + dataTestId + "']"));
+		WebElement hoverArea = GeneralUIUtils.waitForElementVisibility(dataTestId);
+		// WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(),
+		// 30);
+		// wait.until(ExpectedConditions.visibilityOf(hoverArea));
+
+		Actions actions = new Actions(GeneralUIUtils.getDriver());
+		actions.moveToElement(hoverArea).perform();
+	}
+
+	// public static ResourceReqDetails createResourceInUI(User user){
+	// try{
+	// ResourceReqDetails defineResourceDetails =
+	// defineResourceDetails(ResourceTypeEnum.VF);
+	// ResourceUIUtils.moveToHTMLElementByClassName("w-sdc-dashboard-card-new");
+	// ResourceUIUtils.clickOnHTMLElementByDataTestId(DataTestIdEnum.Dashboard.BUTTON_ADD_VF.getValue());
+	// GeneralUIUtils.waitForLoader();
+	//// GeneralUIUtils.sleep(1000);
+	// fillResourceGeneralInformationPage(defineResourceDetails, user);
+	// GeneralUIUtils.clickCreateButton();
+	// return defineResourceDetails;
+	// }
+	// catch( Exception e){
+	// throw new RuntimeException(e);
+	// }
+	// }
+
+	/**
+	 * Import VFC
+	 * 
+	 * @param user
+	 * @param filePath
+	 * @param fileName
+	 * @return
+	 * @throws Exception
+	 */
+
+	public static void importVfc(ResourceReqDetails resourceMetaData, String filePath, String fileName, User user)
+			throws Exception {
+		GeneralUIUtils.hoverOnArea(Dashboard.IMPORT_AREA.getValue());
+		// Insert file to the browse dialog
+		final WebElement browseWebElement = GeneralUIUtils
+				.getWebElementByDataTestId(DataTestIdEnum.Dashboard.IMPORT_VFC_FILE.getValue());
+		browseWebElement.sendKeys(filePath + fileName);
+
+		// Fill the general page fields.
+		GeneralUIUtils.waitForLoader();
+		fillResourceGeneralInformationPage(resourceMetaData, user);
+		GeneralUIUtils.clickCreateButton();
+
+	}
+
+	// public static ResourceReqDetails importVfcInUI(User user, String
+	// filePath, String fileName, ResourceTypeEnum resourceType) {
+	// ResourceReqDetails defineResourceDetails =
+	// defineResourceDetails(resourceType);
+	// ResourceUIUtils.moveToHTMLElementByDataTestId(Dashboard.IMPORT_AREA.getValue());
+	//
+	// // Insert file to the browse dialog
+	// final WebElement browseWebElement =
+	// GeneralUIUtils.getWebElementByDataTestId(DataTestIdEnum.Dashboard.IMPORT_VFC_FILE.getValue());
+	// browseWebElement.sendKeys(filePath + fileName);
+	//
+	// // Fill the general page fields.
+	// GeneralUIUtils.waitForLoader();
+	// fillResourceGeneralInformationPage(defineResourceDetails, user);
+	// GeneralUIUtils.clickCreateButton();
+	// return defineResourceDetails;
+	// }
+
+	/**
+	 * Import VF
+	 * 
+	 * @param user
+	 * @param filePath
+	 * @param fileName
+	 * @return
+	 * @throws Exception
+	 */
+	// public static ResourceReqDetails importVfInUI(User user, String filePath,
+	// String fileName) throws Exception {
+	// ResourceReqDetails defineResourceDetails =
+	// defineResourceDetails(ResourceTypeEnum.VF);
+	// ResourceUIUtils.moveToHTMLElementByDataTestId(Dashboard.IMPORT_AREA.getValue());
+	//
+	// // Insert file to the browse dialog
+	// final WebElement browseWebElement =
+	// GeneralUIUtils.getWebElementByDataTestId(DataTestIdEnum.Dashboard.IMPORT_VF_FILE.getValue());
+	// browseWebElement.sendKeys(filePath + fileName);
+	//
+	// // Fill the general page fields.
+	// GeneralUIUtils.waitForLoader();
+	// fillResourceGeneralInformationPage(defineResourceDetails, user);
+	// GeneralUIUtils.clickCreateButton();
+	// return defineResourceDetails;
+	// }
+
+	// public static ResourceReqDetails defineResourceDetails(ResourceTypeEnum
+	// resourceType) {
+	// ResourceReqDetails resource = new ResourceReqDetails();
+	// resource = ElementFactory.getDefaultResource(NormativeTypesEnum.ROOT,
+	// ResourceCategoryEnum.APPLICATION_L4_CALL_CONTROL);
+	// resource.setVersion(INITIAL_VERSION);
+	// resource.setIcon(ICON_RESOURCE_NAME);
+	// resource.setResourceType(resourceType.toString());
+	// resource.setName(getRandomComponentName(RESOURCE_NAME_PREFIX));
+	//
+	// SetupCDTest.setCreatedComponents(Arrays.asList(resource));
+	//
+	// return resource;
+	// }
+
+	protected static String getRandomComponentName(String prefix) {
+		return prefix + new Random().nextInt(10000);
+	}
+
+	public static ImmutablePair<String, String> getFirstRIPos(ResourceReqDetails createResourceInUI, User user) {
+		String responseAfterDrag = RestCDUtils.getResource(createResourceInUI, user).getResponse();
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		String xPosPostDrag = (String) ((JSONObject) ((JSONArray) jsonResource.get("componentInstances")).get(0))
+				.get("posX");
+		String yPosPostDrag = (String) ((JSONObject) ((JSONArray) jsonResource.get("componentInstances")).get(0))
+				.get("posY");
+		return new ImmutablePair<String, String>(xPosPostDrag, yPosPostDrag);
+
+	}
+
+	public static WebElement getErrorMessageText(WebDriver driver, String text) throws Exception {
+
+		return GeneralUIUtils.getEelementBycontainsClassName(text);
+
+	}
+
+	public static void fillGeneralInfoValuesAndIcon(ResourceReqDetails resource, User user) throws Exception {
+		fillResourceGeneralInformationPage(resource, user);
+		GeneralUIUtils.clickCreateButton();
+
+		selectRandomResourceIcon();
+	}
+
+	// coded by teddy.
+	public static void getVFCGeneralInfoAndValidate(ResourceReqDetails resource, User user)
+			throws InterruptedException {
+		Thread.sleep(2000);
+		WebDriver driver = GeneralUIUtils.getDriver();
+		String version = GeneralUIUtils.getSelectList(null, "versionHeader").getFirstSelectedOption().getText();
+		String name = GeneralUIUtils.getWebElement(driver, "name").getAttribute("value");
+		String description = GeneralUIUtils.getWebElement(driver, "description").getAttribute("value");
+		String category = GeneralUIUtils.getSelectList(null, "selectGeneralCategory").getFirstSelectedOption()
+				.getText();
+		String vendorName = GeneralUIUtils.getWebElement(driver, "vendorName").getAttribute("value");
+		String vendorRelease = GeneralUIUtils.getWebElement(driver, "vendorRelease").getAttribute("value");
+		List<WebElement> tags = GeneralUIUtils.waitForElementsListVisibility("i-sdc-tag-text");
+		String type = GeneralUIUtils.waitForElementsListVisibility("type").get(1).getText();
+		int index = type.lastIndexOf(":");
+		System.out.println(type.substring(0, index));
+		String contactId = GeneralUIUtils.getWebElement(driver, "contactId").getAttribute("value");
+		System.out.println(resource.getVersion());
+		assertTrue(resource.getVersion().equals(version.substring(1)));
+		assertTrue(resource.getName().equals(name));
+		assertTrue(resource.getDescription().equals(description));
+		System.out.println(resource.getVendorName());
+		System.out.println(resource.getVendorRelease());
+		assertTrue(resource.getCategories().get(0).getSubcategories().get(0).getName().equals(category));
+		assertTrue(resource.getVendorName().equals(vendorName));
+		assertTrue(resource.getVendorRelease().equals(vendorRelease));
+		assertTrue(resource.getCreatorUserId().equals(contactId));
+		assertEquals(type.substring(0, index), resource.getResourceType());
+
+		for (int i = 0; i < tags.size(); i++) {
+			assertEquals(resource.getTags().get(i), tags.get(i).getText());
+		}
+	}
+
+	public static RestResponse createResourceNG(ResourceReqDetails resource, User user) throws Exception, AWTException {
+
+		ResourceUIUtils.moveToHTMLElementByClassName("w-sdc-dashboard-card-new");
+		ResourceUIUtils.clickOnHTMLElementByDataTestId(DataTestIdEnum.Dashboard.BUTTON_ADD_VF.getValue());
+		fillResourceGeneralInformationPage(resource, user);
+		GeneralUIUtils.clickOnHTMLElementByDataTestId(DataTestIdEnum.LifeCyleChangeButtons.CREATE.getValue());
+		return null;
+
+	}
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/RestCDUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/RestCDUtils.java
new file mode 100644
index 0000000..10535e0
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/RestCDUtils.java
@@ -0,0 +1,182 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONObject;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.ComponentReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ProductReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.utils.rest.ProductRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
+import org.openecomp.sdc.ci.tests.utils.rest.ServiceRestUtils;
+
+public class RestCDUtils {
+
+	private static void setResourceUniqueIdAndUUID(ComponentReqDetails element, RestResponse getResourceResponse) {
+		element.setUniqueId(ResponseParser.getUniqueIdFromResponse(getResourceResponse));
+		element.setUUID(ResponseParser.getUuidFromResponse(getResourceResponse));
+	}
+
+	public static RestResponse getResource(ResourceReqDetails resource, User user) {
+		try {
+			System.out.println("trying to get resource");
+			GeneralUIUtils.sleep(1000);
+			RestResponse getResourceResponse = null;
+			String reourceUniqueId = resource.getUniqueId();
+			if (reourceUniqueId != null) {
+				getResourceResponse = ResourceRestUtils.getResource(reourceUniqueId);
+				if (getResourceResponse.getErrorCode().intValue() == 200) {
+					System.out.println("succeeded to get resource");
+				}
+				return getResourceResponse;
+			}
+			JSONObject getResourceJSONObject = null;
+			getResourceResponse = ResourceRestUtils.getResourceByNameAndVersion(user.getUserId(), resource.getName(),
+					resource.getVersion());
+			if (getResourceResponse.getErrorCode().intValue() == 200) {
+				JSONArray jArray = new JSONArray(getResourceResponse.getResponse());
+				for (int i = 0; i < jArray.length(); i++) {
+					getResourceJSONObject = jArray.getJSONObject(i);
+					String resourceType = ResponseParser.getValueFromJsonResponse(getResourceJSONObject.toString(),
+							"resourceType");
+					if (resourceType.equals(resource.getResourceType())) {
+						getResourceResponse.setResponse(getResourceJSONObject.toString());
+						setResourceUniqueIdAndUUID(resource, getResourceResponse);
+						System.out.println("succeeded to get resource");
+						return getResourceResponse;
+					}
+				}
+			}
+
+			return getResourceResponse;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static RestResponse getService(ServiceReqDetails service, User user) {
+		try {
+			Thread.sleep(3500);
+			RestResponse getServiceResponse = ServiceRestUtils.getServiceByNameAndVersion(user, service.getName(),
+					service.getVersion());
+			if (getServiceResponse.getErrorCode().intValue() == 200) {
+				setResourceUniqueIdAndUUID(service, getServiceResponse);
+			}
+			return getServiceResponse;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+
+	}
+
+	public static RestResponse getProduct(ProductReqDetails product, User user) {
+		try {
+			Thread.sleep(3500);
+			RestResponse getProductResponse = ProductRestUtils.getProductByNameAndVersion(product.getName(),
+					product.getVersion(), user.getUserId());
+			if (getProductResponse.getErrorCode().intValue() == 200) {
+				setResourceUniqueIdAndUUID(product, getProductResponse);
+			}
+			return getProductResponse;
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static Map<String, String> getAllElementVersionsFromResponse(RestResponse getResource) throws Exception {
+		Map<String, String> versionsMap = new HashMap<String, String>();
+		try {
+			ObjectMapper mapper = new ObjectMapper();
+
+			JSONObject object = new JSONObject(getResource.getResponse());
+			versionsMap = mapper.readValue(object.get("allVersions").toString(), Map.class);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			return versionsMap;
+
+		}
+
+		return versionsMap;
+	}
+
+	public static void deleteElementVersions(Map<String, String> elementVersions, boolean isBeforeTest, Object clazz,
+			User user) throws Exception {
+		Iterator<String> iterator = elementVersions.keySet().iterator();
+		while (iterator.hasNext()) {
+			String singleVersion = iterator.next();
+			String uniqueId = elementVersions.get(singleVersion);
+			RestResponse deleteResponse = null;
+			if (clazz instanceof ServiceReqDetails) {
+				deleteResponse = ServiceRestUtils.deleteServiceById(uniqueId, user.getUserId());
+			} else if (clazz instanceof ResourceReqDetails) {
+				deleteResponse = ResourceRestUtils.deleteResource(uniqueId, user.getUserId());
+			} else if (clazz instanceof ProductReqDetails) {
+				deleteResponse = ProductRestUtils.deleteProduct(uniqueId, user.getUserId());
+			}
+
+			if (isBeforeTest) {
+				assertTrue(deleteResponse.getErrorCode().intValue() == 204
+						|| deleteResponse.getErrorCode().intValue() == 404);
+			} else {
+				assertTrue(deleteResponse.getErrorCode().intValue() == 204);
+			}
+		}
+	}
+
+	public static void deleteAllResourceVersionsAfterTest(ComponentReqDetails componentDetails,
+			RestResponse getObjectResponse, User user) {
+		try {
+			deleteAllComponentVersion(false, componentDetails, getObjectResponse, user);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static void deleteAllResourceVersionsBeforeTest(ComponentReqDetails componentDetails,
+			RestResponse getObjectResponse, User user) throws Exception {
+		deleteAllComponentVersion(true, componentDetails, getObjectResponse, user);
+	}
+
+	public static void deleteAllComponentVersion(boolean isBeforeTest, ComponentReqDetails componentDetails,
+			RestResponse getObjectResponse, User user) throws Exception {
+		if (getObjectResponse.getErrorCode().intValue() == 404)
+			return;
+		Map<String, String> componentVersionsMap = getAllElementVersionsFromResponse(getObjectResponse);
+		System.out.println("deleting...");
+		deleteElementVersions(componentVersionsMap, isBeforeTest, componentDetails, user);
+		componentDetails.setUniqueId(null);
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ServiceUIUtils.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ServiceUIUtils.java
new file mode 100644
index 0000000..5c2608b
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/utilities/ServiceUIUtils.java
@@ -0,0 +1,241 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.utilities;
+
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.awt.AWTException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.rules.TestName;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum;
+import org.openecomp.sdc.ci.tests.datatypes.DataTestIdEnum.StepsEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceCategoriesNameEnum;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.execute.setup.SetupCDTest;
+import org.openecomp.sdc.ci.tests.pages.ServiceGeneralPage;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.Select;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import com.relevantcodes.extentreports.LogStatus;
+
+public class ServiceUIUtils {
+
+	protected static WebDriver driver;
+
+	public ServiceUIUtils(TestName name, String className) {
+		super();
+	}
+
+	public static String defineServiceName(String Name) {
+		WebElement serviceName = GeneralUIUtils.getWebElementWaitForVisible("name");
+		serviceName.clear();
+		serviceName.sendKeys(Name);
+		return Name;
+	}
+
+	public void moveResourceInstanceToCanvasUI() throws Exception {
+		List<WebElement> moveResource = driver.findElements(By.className("sprite-resource-icons"));
+		WebElement moveResourceToCanvasResourceOne = moveResource.get(0);
+		// WebElement moveResource =
+		// driver.findElement(By.className("sprite-resource-icons"));
+		Actions action = new Actions(driver);
+		action.moveToElement(moveResourceToCanvasResourceOne);
+		action.clickAndHold(moveResourceToCanvasResourceOne);
+		action.moveByOffset(635, 375);
+		action.release();
+		action.perform();
+		WebElement moveResourceToCanvasResourceTwo = moveResource.get(1);
+		action.moveToElement(moveResourceToCanvasResourceTwo);
+		action.clickAndHold(moveResourceToCanvasResourceTwo);
+		action.moveByOffset(535, 375);
+		action.release();
+		action.perform();
+		WebElement moveResourceToCanvasResourceTree = moveResource.get(2);
+		action.moveToElement(moveResourceToCanvasResourceTree);
+		action.clickAndHold(moveResourceToCanvasResourceTree);
+		action.moveByOffset(435, 375);
+		action.release();
+		action.perform();
+		Thread.sleep(2000);
+	}
+
+	public static String catalogFilterServiceCategoriesChecBox(ServiceCategoriesNameEnum enumName) throws Exception {
+		String Type = null;
+		GeneralUIUtils.getWebElementWaitForVisible(enumName.getValue()).click();
+		return Type;
+	}
+
+	public static List<String> catalogServiceTypeChecBox(ServiceCategoriesNameEnum enumtype) throws Exception {
+		List<String> categories = null;
+		switch (enumtype) {
+		case NETWORK_L13:
+			GeneralUIUtils.getWebElementWaitForVisible(enumtype.getValue()).click();
+			categories = Arrays.asList("network_l_1-3");
+			break;
+		case NETWORKL4:
+			GeneralUIUtils.getWebElementWaitForVisible(enumtype.getValue()).click();
+			categories = Arrays.asList("network_l_4 ");
+			break;
+		case MOBILITY:
+			GeneralUIUtils.getWebElementWaitForVisible(enumtype.getValue()).click();
+			categories = Arrays.asList("mobility");
+			break;
+		case VOIPCALL_CONTROL:
+			GeneralUIUtils.getWebElementWaitForVisible(enumtype.getValue()).click();
+			categories = Arrays.asList("call_controll ");
+			break;
+		}
+		return categories;
+	}
+
+	public static WebElement waitToNextButtonEnabled() {
+		return GeneralUIUtils.getWebButton("Next");
+	}
+
+	public static WebElement waitToFinishButtonEnabled() {
+		return GeneralUIUtils.getWebButton("Finish");
+	}
+
+	public static WebElement deleteServiceInUI() {
+
+		return GeneralUIUtils.getWebButton("deleteVersion");
+	}
+
+	// get the service view data for validate.
+	// created by tedy.
+	public static void getServiceGeneralInfo(ServiceReqDetails service, User user) throws InterruptedException {
+		Thread.sleep(2000);
+		String version = GeneralUIUtils.getSelectList(null, "versionHeader").getFirstSelectedOption().getText()
+				.substring(1);
+		String name = GeneralUIUtils.getWebElementWaitForVisible("name").getAttribute("value");
+		String description = GeneralUIUtils.getWebElementWaitForVisible("description").getAttribute("value");
+		String category = GeneralUIUtils.getSelectList(null, "selectGeneralCategory").getFirstSelectedOption()
+				.getText();
+		List<WebElement> tags = GeneralUIUtils.waitForElementsListVisibility("i-sdc-tag-text");
+		String type = GeneralUIUtils.waitForElementsListVisibility("type").get(1).getText();
+		int index = type.lastIndexOf(":");
+		System.out.println(type.substring(0, index));
+		String contactId = GeneralUIUtils.getWebElementWaitForVisible("contactId").getAttribute("value");
+		String projectCode = GeneralUIUtils.getWebElementWaitForVisible("projectCode").getAttribute("value");
+		System.out.println(service.getVersion());
+		assertTrue(service.getVersion().equals(version));
+		assertTrue(service.getName().equals(name));
+		assertTrue(service.getDescription().equals(description));
+		assertTrue(service.getCategories().get(0).getName().equals(category));
+		System.out.println(service.getContactId());
+		assertTrue(service.getContactId().equals(contactId));
+		assertTrue(service.getProjectCode().equals(projectCode));
+		for (int i = 0; i < tags.size(); i++) {
+			assertEquals(service.getTags().get(i), tags.get(i).getText());
+		}
+
+	}
+
+	public static void defineTagsList(ServiceReqDetails service, String[] serviceTags) {
+		List<String> taglist = new ArrayList<String>();
+		;
+		WebElement serviceTagsTextbox = GeneralUIUtils.getWebElementWaitForVisible("i-sdc-tag-input");
+		for (String tag : serviceTags) {
+			serviceTagsTextbox.clear();
+			serviceTagsTextbox.sendKeys(tag);
+			serviceTagsTextbox.sendKeys(Keys.ENTER);
+			taglist.add(tag);
+		}
+		taglist.add(0, service.getName());
+		service.setTags(taglist);
+	}
+
+	public static Select defineServiceCategory(String category) {
+
+		return GeneralUIUtils.getSelectList(category, "selectGeneralCategory");
+	}
+
+	public static void defineServiceProjectCode(String projectCode) {
+		WebElement projectCodeTextbox = GeneralUIUtils.getWebElementWaitForVisible("projectCode");
+		projectCodeTextbox.clear();
+		projectCodeTextbox.sendKeys(projectCode);
+	}
+
+	public static void selectRandomResourceIcon() throws Exception {
+		GeneralUIUtils.moveToStep(StepsEnum.ICON);
+		WebDriverWait wait = new WebDriverWait(driver, 6);
+		wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[contains(@data-tests-id, 'iconBox')]")));
+		List<WebElement> iconElement = driver.findElements(By.xpath("//*[contains(@data-tests-id, 'iconBox')]"));
+		iconElement.get(0).click();
+	}
+
+	public static String defineDescription(String description) {
+		WebElement descriptionTextbox = GeneralUIUtils.getWebElementWaitForVisible("description");
+		descriptionTextbox.clear();
+		descriptionTextbox.sendKeys(description);
+		return description;
+	}
+
+	public static void defineContactId(String userId) {
+		WebElement contactId = GeneralUIUtils.getWebElementWaitForVisible("contactId");
+		contactId.clear();
+		contactId.sendKeys(userId);
+	}
+
+	public static WebElement clickAddArtifact() {
+
+		return GeneralUIUtils.getWebButton("addArtifactButton");
+	}
+
+	public static WebElement getArtifactName() {
+		return GeneralUIUtils.getWebButton("artifactName");
+	}
+
+	public static WebElement getArtifactDetails() {
+		return GeneralUIUtils.getWebButton("artifactDisplayName");
+	}
+
+	public static void fillServiceGeneralPage(ServiceReqDetails service, User user) throws Exception {
+		ServiceGeneralPage.defineName(service.getName());
+		ServiceGeneralPage.defineDescription(service.getDescription());
+		ServiceGeneralPage.defineCategory(service.getCategories().get(0).getName());
+		ServiceGeneralPage.defineProjectCode(service.getProjectCode());
+		ServiceGeneralPage.defineTagsList(service, new String[] { "This-is-tag", "another-tag" });
+
+	}
+
+	public static void createService(ServiceReqDetails service, User user) throws Exception, AWTException {
+
+		ResourceUIUtils.moveToHTMLElementByClassName("w-sdc-dashboard-card-new");
+		ResourceUIUtils.clickOnHTMLElementByDataTestId(DataTestIdEnum.Dashboard.BUTTON_ADD_SERVICE.getValue());
+		GeneralUIUtils.waitForLoader();
+		fillServiceGeneralPage(service, user);
+		GeneralUIUtils.clickCreateButton();
+		SetupCDTest.getExtendTest().log(LogStatus.INFO, String.format("Service %s created", service.getName()));
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/ServiceVerificator.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/ServiceVerificator.java
new file mode 100644
index 0000000..cbad80d
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/ServiceVerificator.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.verificator;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.ComponentReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
+import org.openecomp.sdc.ci.tests.utilities.RestCDUtils;
+
+public class ServiceVerificator {
+
+	private ServiceVerificator() {
+	}
+
+	public static void verifyNumOfComponentInstances(ComponentReqDetails component, String version, int numOfVFC,
+			User user) {
+		String responseAfterDrag = null;
+		component.setVersion(version);
+		if (component instanceof ServiceReqDetails) {
+			responseAfterDrag = RestCDUtils.getService((ServiceReqDetails) component, user).getResponse();
+		} else if (component instanceof ResourceReqDetails) {
+			responseAfterDrag = RestCDUtils.getResource((ResourceReqDetails) component, user).getResponse();
+		}
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		int size = ((JSONArray) jsonResource.get("componentInstances")).size();
+		assertTrue(size == numOfVFC);
+	}
+	
+	public static void verifyLinkCreated(ServiceReqDetails createServiceInUI, User user, int expectedRelationsSize) {
+		String responseAfterDrag = RestCDUtils.getService(createServiceInUI, user).getResponse();
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		assertTrue(((JSONArray) jsonResource.get("componentInstancesRelations")).size() == expectedRelationsSize);
+
+	}
+
+}
diff --git a/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/VfVerificator.java b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/VfVerificator.java
new file mode 100644
index 0000000..1ffde75
--- /dev/null
+++ b/ui-ci/src/main/java/org/openecomp/sdc/ci/tests/verificator/VfVerificator.java
@@ -0,0 +1,93 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.verificator;
+
+import static org.testng.AssertJUnit.assertTrue;
+
+import java.util.Iterator;
+
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.openecomp.sdc.be.model.LifecycleStateEnum;
+import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
+import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
+import org.openecomp.sdc.ci.tests.pages.ResourceGeneralPage;
+import org.openecomp.sdc.ci.tests.utilities.ResourceUIUtils;
+import org.openecomp.sdc.ci.tests.utilities.RestCDUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
+
+public final class VfVerificator {
+	private VfVerificator() {
+	}
+
+	public static void verifyNumOfComponentInstances(ResourceReqDetails createResourceInUI, int numOfVFC, User user) {
+		String responseAfterDrag = RestCDUtils.getResource(createResourceInUI, user).getResponse();
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		int size = ((JSONArray) jsonResource.get("componentInstances")).size();
+		assertTrue(size == numOfVFC);
+	}
+
+	public static void verifyRILocationChanged(ResourceReqDetails createResourceInUI,
+			ImmutablePair<String, String> prevRIPos, User user) {
+
+		ImmutablePair<String, String> currRIPos = ResourceUIUtils.getFirstRIPos(createResourceInUI, user);
+		assertTrue(!prevRIPos.left.equals(currRIPos.left) || !prevRIPos.right.equals(currRIPos.right));
+	}
+
+	public static void verifyLinkCreated(ResourceReqDetails createResourceInUI, User user, int expectedRelationsSize) {
+		String responseAfterDrag = RestCDUtils.getResource(createResourceInUI, user).getResponse();
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		assertTrue(((JSONArray) jsonResource.get("componentInstancesRelations")).size() == expectedRelationsSize);
+
+	}
+
+	public static void verifyVFUpdatedInUI(ResourceReqDetails vf) {
+		assertTrue(vf.getName().equals(ResourceGeneralPage.getNameText()));
+		assertTrue(vf.getDescription().equals(ResourceGeneralPage.getDescriptionText()));
+		assertTrue(vf.getVendorName().equals(ResourceGeneralPage.getVendorNameText()));
+		assertTrue(vf.getVendorRelease().equals(ResourceGeneralPage.getVendorReleaseText()));
+		assertTrue(vf.getContactId().equals(ResourceGeneralPage.getUserIdContactText()));
+	}
+
+	public static void verifyVFUpdated(ResourceReqDetails vf, User user) {
+		String response = RestCDUtils.getResource(vf, user).getResponse();
+		Resource resource = ResponseParser.convertResourceResponseToJavaObject(response);
+		assertTrue(vf.getName().equals(resource.getName()));
+		assertTrue(vf.getDescription().equals(resource.getDescription()));
+		assertTrue(vf.getCategories().equals(resource.getCategories()));
+		assertTrue(vf.getVendorName().equals(resource.getVendorName()));
+		assertTrue(vf.getVendorRelease().equals(resource.getVendorRelease()));
+		assertTrue(vf.getTags().equals(resource.getTags()));
+		assertTrue(vf.getContactId().equals(resource.getContactId()));
+	}
+
+	public static void verifyVFLifecycle(ResourceReqDetails vf, User user, LifecycleStateEnum expectedLifecycleState) {
+		String responseAfterDrag = RestCDUtils.getResource(vf, user).getResponse();
+		JSONObject jsonResource = (JSONObject) JSONValue.parse(responseAfterDrag);
+		String actualLifecycleState = jsonResource.get("lifecycleState").toString();
+		assertTrue("actual: " + actualLifecycleState + "--expected: " + expectedLifecycleState,
+				expectedLifecycleState.name().equals(actualLifecycleState));
+	}
+}
diff --git a/ui-ci/src/main/resources/Downloads/CP_WAN.yml b/ui-ci/src/main/resources/Downloads/CP_WAN.yml
new file mode 100644
index 0000000..eeabbb8
--- /dev/null
+++ b/ui-ci/src/main/resources/Downloads/CP_WAN.yml
Binary files differ
diff --git a/ui-ci/src/main/resources/Downloads/Fortigate02_vFW_VFC.yml b/ui-ci/src/main/resources/Downloads/Fortigate02_vFW_VFC.yml
new file mode 100644
index 0000000..a24d004
--- /dev/null
+++ b/ui-ci/src/main/resources/Downloads/Fortigate02_vFW_VFC.yml
@@ -0,0 +1,63 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+
+  org.openecomp.resource.vfc.vFW.Fortigate02Tedy: 
+    derived_from: org.openecomp.resource.vfc.vFWTedy
+     
+    properties: 
+      att-part-number:
+        type: string
+        default: "ATT-FortiGate-VM02"
+      vendor-name:
+        type: string
+        default: “FORTINET”
+      vendor-model:
+        type: string
+        default: "VM02"
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+        default: 2
+      vcpu-min:
+        type: integer
+        default: 1
+      vcpu-max:
+        type: integer
+        default: 2
+      vmemory-default:
+        default: 4
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+        default: 1
+      vmemory-max:
+        type: integer
+        default: 4
+      vdisk-default:
+        type: integer
+        default: 20
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+        default: 2
+      vdisk-max:
+        type: integer
+        default: 20
+      vnf-type: 
+        type: string
+        default: “Advanced FW”
+      software-version: 
+        type: string
+        default: “5.2.4”
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+        default: “IPS, AntiVirus, URL Filter, APPID”	
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/CP.yml b/ui-ci/src/main/resources/Files/CP.yml
new file mode 100644
index 0000000..48b5922
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/CP.yml
@@ -0,0 +1,65 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.cp.CP:
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-ucpe-part-number:
+        type: string                
+      vendor-name:
+        type: string                
+        required: true
+      vendor-model:
+        type: string                
+        required: true
+      total-vcpu:
+        type: integer              
+        description: number of vCPUs
+      total-memory:
+        type: integer               
+        description: GB
+      total-disk:
+        type: integer                
+        description: GB
+      base-system-image-file-name: 
+        type: string
+      linux-host-vendor:
+        type: string
+      linux-host-os-version:
+        type: version
+      base-system-software:
+        type: string
+      jdm-vcpu:
+        type: integer
+      jdm-memory:
+        type: integer
+        description: GB
+      jdm-disk:
+        type: integer
+        description: GB
+      jdm-version:
+        type: string
+      jcp-vcpu:
+        type: integer
+      jcp-memory:
+        type: integer
+        description: GB
+      jcp-disk:
+        type: integer
+        description: GB
+      jcp-version:
+        type: version
+    capabilities: 
+      vnf_hosting: 
+        type: tosca.capabilities.Container
+        description: Provides hosting capability for VNFs   
+      WAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Wan]
+        description: external WAN1 n/w interface
+        occurrences: [1,2]
+      LAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Lan]
+        description: external LAN n/w interface
+        occurrences: [1,8]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/CPWithAttributes.yml b/ui-ci/src/main/resources/Files/CPWithAttributes.yml
new file mode 100644
index 0000000..847181b
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/CPWithAttributes.yml
@@ -0,0 +1,78 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.cp.CP:
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-ucpe-part-number:
+        type: string                
+      vendor-name:
+        type: string                
+        required: true
+      vendor-model:
+        type: string                
+        required: true
+      total-vcpu:
+        type: integer              
+        description: number of vCPUs
+      total-memory:
+        type: integer               
+        description: GB
+      total-disk:
+        type: integer                
+        description: GB
+      base-system-image-file-name: 
+        type: string
+      linux-host-vendor:
+        type: string
+      linux-host-os-version:
+        type: version
+      base-system-software:
+        type: string
+      jdm-vcpu:
+        type: integer
+      jdm-memory:
+        type: integer
+        description: GB
+      jdm-disk:
+        type: integer
+        description: GB
+      jdm-version:
+        type: string
+      jcp-vcpu:
+        type: integer
+      jcp-memory:
+        type: integer
+        description: GB
+      jcp-disk:
+        type: integer
+        description: GB
+      jcp-version:
+        type: version
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    capabilities: 
+      vnf_hosting: 
+        type: tosca.capabilities.Container
+        description: Provides hosting capability for VNFs   
+      WAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Wan]
+        description: external WAN1 n/w interface
+        occurrences: [1,2]
+      LAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Lan]
+        description: external LAN n/w interface
+        occurrences: [1,8]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/CP_LAN - Copy.yml b/ui-ci/src/main/resources/Files/CP_LAN - Copy.yml
new file mode 100644
index 0000000..5663168
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/CP_LAN - Copy.yml
Binary files differ
diff --git a/ui-ci/src/main/resources/Files/CP_LAN.yml b/ui-ci/src/main/resources/Files/CP_LAN.yml
new file mode 100644
index 0000000..3420a3c
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/CP_LAN.yml
@@ -0,0 +1,19 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.cp.LAN:
+    derived_from: org.openecomp.resource.cp.CP
+    properties:
+      type:
+        type: string
+        required: false
+    requirements:
+      - virtualLink_in:
+          capability: tosca.capabilities.network.Linkable
+          relationship: tosca.relationships.network.LinksTo
+      - virtualLink_out:
+          capability: tosca.capabilities.network.Linkable
+          relationship: tosca.relationships.network.LinksTo
+      - virtualbinding:
+          capability: tosca.capabilities.network.Bindable
+          relationship: tosca.relationships.network.BindsTo
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/CP_WAN.yml b/ui-ci/src/main/resources/Files/CP_WAN.yml
new file mode 100644
index 0000000..9f21b90
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/CP_WAN.yml
@@ -0,0 +1,19 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.cp1.WAN:
+    derived_from: org.openecomp.resource.cp.CP
+    properties:
+      type:
+        type: string
+        required: false
+    requirements:
+      - virtualLink_in:
+          capability: tosca.capabilities.network.Linkable
+          relationship: tosca.relationships.network.LinksTo
+      - virtualLink_out:
+          capability: tosca.capabilities.network.Linkable
+          relationship: tosca.relationships.network.LinksTo
+      - virtualbinding:
+          capability: tosca.capabilities.network.Bindable
+          relationship: tosca.relationships.network.BindsTo
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/DNSscaling12.8.16.zip b/ui-ci/src/main/resources/Files/DNSscaling12.8.16.zip
new file mode 100644
index 0000000..cadb613
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/DNSscaling12.8.16.zip
Binary files differ
diff --git a/ui-ci/src/main/resources/Files/Heat-File 1.yaml b/ui-ci/src/main/resources/Files/Heat-File 1.yaml
new file mode 100644
index 0000000..d332078
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Heat-File 1.yaml
@@ -0,0 +1,791 @@
+heat_template_version: 2013-05-23
+#################################
+#
+#  Changes in v0.2:
+#  - Unique availability zone for each VM
+#  - LAN8 and SLAN networks removed according to latest Prod/Type I diagram
+#  - 2 DB VMs added
+#  - Images corrected
+#  - VM start-up order: SMP->DB->BE->FE (no error handling yet)
+#  - Provisioning scripts placeholders
+#
+#################################
+
+description: ASC Template
+
+parameters:
+#  availability_zone_smp0:
+#    type: string
+#    default: nova
+#  availability_zone_smp1:
+#    type: string
+#    default: nova
+#  availability_zone_fe0:
+#    type: string
+#    default: nova
+#  availability_zone_fe1:
+#    type: string
+#    default: nova
+#  availability_zone_db0:
+#    type: string
+#    default: nova
+#  availability_zone_db1:
+#    type: string
+#    default: nova
+#  availability_zone_be0:
+#    type: string
+#    default: nova
+#  availability_zone_be1:
+#    type: string
+#    default: nova
+#  availability_zone_be2:
+#    type: string
+#    default: nova
+#  availability_zone_be3:
+#    type: string
+#    default: nova
+#  availability_zone_be4:
+#    type: string
+#    default: nova
+
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+    default: This_is_the_SCP_name
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_SCP_id
+
+  flavor_scp_be_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_scp_fe_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_smp_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_db_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  image_scp_be_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_be
+  image_scp_fe_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_fe    
+  image_smp_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_smp
+  image_db_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_db
+
+  int_vscp_fe_cluster_net_id:
+    type: string
+    description: LAN2 FE Cluster/KA
+  int_vscp_fe_cluster_cidr:
+    type: string
+    description: Private Network2 Address (CIDR notation)
+  int_vscp_cluster_net_id:
+    type: string
+    description: LAN3 Cluster
+  int_vscp_cluster_cidr:
+    type: string
+    description: Private Network3 Address (CIDR notation)
+  int_vscp_db_network_net_id:
+    type: string
+    description: LAN4 DB
+  int_vscp_db_network_cidr:
+    type: string
+    description: Private Network4 Address (CIDR notation)
+  SIGNET_vrf_A1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_A
+  SIGNET_vrf_B1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_B
+  Cricket_OCS_protected_net_id:
+    type: string
+    description: Network name for CRICKET_OCS
+  OAM_direct_net_id:
+    type: string
+    description: Network name for OAM
+  be0_Cricket_OCS_protected_ips:
+    type: string
+    label: be0 port 5 OAM ip address
+    description: be0 port 5 OAM ip address
+  be1_Cricket_OCS_protected_ips:
+    type: string
+    label: be1 port 5 OAM ip address
+    description: be1 port 5 OAM ip address
+  be2_Cricket_OCS_protected_ips:
+    type: string
+    label: be2 port 5 OAM ip address
+    description: be2 port 5 OAM ip address
+  be3_Cricket_OCS_protected_ips:
+    type: string
+    label: be3 port 5 OAM ip address
+    description: be3 port 5 OAM ip address
+  be4_Cricket_OCS_protected_ips:
+    type: string
+    label: be4 port 5 OAM ip address
+    description: be4 port 5 OAM ip address
+  be0_OAM_direct_ips:
+    type: string
+    label: be0 port 7 OAM ip address
+    description: be0 port 7 OAM ip address
+  be1_OAM_direct_ips:
+    type: string
+    label: be1 port 7 OAM ip address
+    description: be1 port 7 OAM ip address
+  be2_OAM_direct_ips:
+    type: string
+    label: be2 port 7 OAM ip address
+    description: be2 port 7 OAM ip address
+  be3_OAM_direct_ips:
+    type: string
+    label: be3 port 7 OAM ip address
+    description: be3 port 7 OAM ip address
+  be4_OAM_direct_ips:
+    type: string
+    label: be4 port 7 OAM ip address
+    description: be4 port 7 OAM ip address
+  fe0_SIGNET_vrf_A1_direct_ips:
+    type: string
+    label: fe0 port 0 SIGTRAN ip address
+    description: fe0 port 0 SIGTRAN ip address
+  fe0_OAM_direct_ips:
+    type: string
+    label: fe0 port 7 OAM ip address
+    description: fe0 port 7 OAM ip address
+  fe1_SIGNET_vrf_B1_direct_ips:
+    type: string
+    label: fe1 port 1 SIGTRAN ip address
+    description: fe1 port 1 SIGTRAN ip address
+  fe1_OAM_direct_ips:
+    type: string
+    label: fe1 port 7 OAM ip address
+    description: fe1 port 7 OAM ip address
+  smp0_OAM_direct_ips:
+    type: string
+    label: smp0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  smp1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: smp1 port 7 OAM ip address
+  db0_OAM_direct_ips:
+    type: string
+    label: db0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  db1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: db1 port 7 OAM ip address
+  vm_scp_be0_name:
+    type: string
+    default: vSCP_BE0
+    description: name of VM
+  vm_scp_be1_name:
+    type: string
+    default: vSCP_BE1
+    description: name of VM    
+  vm_scp_be2_name:
+    type: string
+    default: vSCP_BE2
+    description: name of VM
+  vm_scp_be3_name:
+    type: string
+    default: vSCP_BE3
+    description: name of VM
+  vm_scp_be4_name:
+    type: string
+    default: vSCP_BE4
+    description: name of VM
+  vm_scp_fe0_name:
+    type: string
+    default: vSCP_FE0
+    description: name of VM
+  vm_scp_fe1_name:
+    type: string
+    default: vSCP_FE1
+    description: name of VM
+  vm_smp0_name:
+    type: string
+    default: vSMP0
+    description: name of VM
+  vm_smp1_name:
+    type: string
+    default: vSMP1
+    description: name of VM
+  vm_db0_name:
+    type: string
+    default: vDB0
+    description: name of VM
+  vm_db1_name:
+    type: string
+    default: vDB1
+    description: name of VM
+
+resources:
+#  scp_be_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_be_wait_handle }
+#      count: 5
+#      timeout: 300
+#  scp_be_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  scp_fe_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_fe_wait_handle }
+#      count: 2
+#      timeout: 300
+#  scp_fe_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  smp_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: smp_wait_handle }
+#      count: 2
+#      timeout: 300
+#  smp_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  db_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: db_wait_handle }
+#      count: 2
+#      timeout: 300
+#  db_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+
+  FE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"] 
+  BE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  SMP_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  DB_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+      
+  FE_Clustering_KA:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_fe_cluster_net_id }
+
+  FE_Clustering_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+      cidr: { get_param: int_vscp_fe_cluster_cidr }
+
+  Clustering_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_cluster_net_id }
+
+  Clustering_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Clustering_Network }
+      cidr: { get_param: int_vscp_cluster_cidr }
+
+  DB_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_db_network_net_id }
+
+  DB_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: DB_Network }
+      cidr: { get_param: int_vscp_db_network_cidr }
+
+  server_scp_be0:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be0_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be0 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be0_port_3 }
+      - port: { get_resource: be0_port_4 }
+      - port: { get_resource: be0_port_5 }
+      - port: { get_resource: be0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be0_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+  be0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be0_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}]
+
+  be0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}]
+
+  server_scp_be1:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be1_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be1 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be1_port_3 }
+      - port: { get_resource: be1_port_4 }
+      - port: { get_resource: be1_port_5 }
+      - port: { get_resource: be1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be1_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be1_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}]
+
+  be1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}]
+
+  server_scp_be2:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be2_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be2 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be2_port_3 }
+      - port: { get_resource: be2_port_4 }
+      - port: { get_resource: be2_port_5 }
+      - port: { get_resource: be2_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be2_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be2_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}]
+
+  be2_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}]
+
+  server_scp_be3:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be3_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be3 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be3_port_3 }
+      - port: { get_resource: be3_port_4 }
+      - port: { get_resource: be3_port_5 }
+      - port: { get_resource: be3_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be3_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be3_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be3_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be3_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}]
+
+  be3_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}]
+
+  server_scp_be4:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be4_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be4 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be4_port_3 }
+      - port: { get_resource: be4_port_4 }
+      - port: { get_resource: be4_port_5 }
+      - port: { get_resource: be4_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be4_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be4_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be4_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be4_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}]
+
+  be4_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}]
+
+  server_scp_fe0:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe0_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe0 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe0_port_0 }
+      - port: { get_resource: fe0_port_2 }
+      - port: { get_resource: fe0_port_3 }
+      - port: { get_resource: fe0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe0_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe0_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_A1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}]
+
+  fe0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}]
+
+  server_scp_fe1:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe1_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe1 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe1_port_1 }
+      - port: { get_resource: fe1_port_2 }
+      - port: { get_resource: fe1_port_3 }
+      - port: { get_resource: fe1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe1_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_B1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}]
+
+  fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}]
+
+  server_smp0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp0_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp0 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp0_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}]
+
+  server_smp1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp1_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp1 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp1_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}]
+
+  server_db0:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db0_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db0 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db0_port_4 }
+      - port: { get_resource: db0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db0_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}]
+
+  server_db1:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db1_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db1 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db1_port_4 }
+      - port: { get_resource: db1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db1_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/Heat-File 2.yaml b/ui-ci/src/main/resources/Files/Heat-File 2.yaml
new file mode 100644
index 0000000..d332078
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Heat-File 2.yaml
@@ -0,0 +1,791 @@
+heat_template_version: 2013-05-23
+#################################
+#
+#  Changes in v0.2:
+#  - Unique availability zone for each VM
+#  - LAN8 and SLAN networks removed according to latest Prod/Type I diagram
+#  - 2 DB VMs added
+#  - Images corrected
+#  - VM start-up order: SMP->DB->BE->FE (no error handling yet)
+#  - Provisioning scripts placeholders
+#
+#################################
+
+description: ASC Template
+
+parameters:
+#  availability_zone_smp0:
+#    type: string
+#    default: nova
+#  availability_zone_smp1:
+#    type: string
+#    default: nova
+#  availability_zone_fe0:
+#    type: string
+#    default: nova
+#  availability_zone_fe1:
+#    type: string
+#    default: nova
+#  availability_zone_db0:
+#    type: string
+#    default: nova
+#  availability_zone_db1:
+#    type: string
+#    default: nova
+#  availability_zone_be0:
+#    type: string
+#    default: nova
+#  availability_zone_be1:
+#    type: string
+#    default: nova
+#  availability_zone_be2:
+#    type: string
+#    default: nova
+#  availability_zone_be3:
+#    type: string
+#    default: nova
+#  availability_zone_be4:
+#    type: string
+#    default: nova
+
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+    default: This_is_the_SCP_name
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_SCP_id
+
+  flavor_scp_be_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_scp_fe_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_smp_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_db_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  image_scp_be_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_be
+  image_scp_fe_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_fe    
+  image_smp_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_smp
+  image_db_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_db
+
+  int_vscp_fe_cluster_net_id:
+    type: string
+    description: LAN2 FE Cluster/KA
+  int_vscp_fe_cluster_cidr:
+    type: string
+    description: Private Network2 Address (CIDR notation)
+  int_vscp_cluster_net_id:
+    type: string
+    description: LAN3 Cluster
+  int_vscp_cluster_cidr:
+    type: string
+    description: Private Network3 Address (CIDR notation)
+  int_vscp_db_network_net_id:
+    type: string
+    description: LAN4 DB
+  int_vscp_db_network_cidr:
+    type: string
+    description: Private Network4 Address (CIDR notation)
+  SIGNET_vrf_A1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_A
+  SIGNET_vrf_B1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_B
+  Cricket_OCS_protected_net_id:
+    type: string
+    description: Network name for CRICKET_OCS
+  OAM_direct_net_id:
+    type: string
+    description: Network name for OAM
+  be0_Cricket_OCS_protected_ips:
+    type: string
+    label: be0 port 5 OAM ip address
+    description: be0 port 5 OAM ip address
+  be1_Cricket_OCS_protected_ips:
+    type: string
+    label: be1 port 5 OAM ip address
+    description: be1 port 5 OAM ip address
+  be2_Cricket_OCS_protected_ips:
+    type: string
+    label: be2 port 5 OAM ip address
+    description: be2 port 5 OAM ip address
+  be3_Cricket_OCS_protected_ips:
+    type: string
+    label: be3 port 5 OAM ip address
+    description: be3 port 5 OAM ip address
+  be4_Cricket_OCS_protected_ips:
+    type: string
+    label: be4 port 5 OAM ip address
+    description: be4 port 5 OAM ip address
+  be0_OAM_direct_ips:
+    type: string
+    label: be0 port 7 OAM ip address
+    description: be0 port 7 OAM ip address
+  be1_OAM_direct_ips:
+    type: string
+    label: be1 port 7 OAM ip address
+    description: be1 port 7 OAM ip address
+  be2_OAM_direct_ips:
+    type: string
+    label: be2 port 7 OAM ip address
+    description: be2 port 7 OAM ip address
+  be3_OAM_direct_ips:
+    type: string
+    label: be3 port 7 OAM ip address
+    description: be3 port 7 OAM ip address
+  be4_OAM_direct_ips:
+    type: string
+    label: be4 port 7 OAM ip address
+    description: be4 port 7 OAM ip address
+  fe0_SIGNET_vrf_A1_direct_ips:
+    type: string
+    label: fe0 port 0 SIGTRAN ip address
+    description: fe0 port 0 SIGTRAN ip address
+  fe0_OAM_direct_ips:
+    type: string
+    label: fe0 port 7 OAM ip address
+    description: fe0 port 7 OAM ip address
+  fe1_SIGNET_vrf_B1_direct_ips:
+    type: string
+    label: fe1 port 1 SIGTRAN ip address
+    description: fe1 port 1 SIGTRAN ip address
+  fe1_OAM_direct_ips:
+    type: string
+    label: fe1 port 7 OAM ip address
+    description: fe1 port 7 OAM ip address
+  smp0_OAM_direct_ips:
+    type: string
+    label: smp0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  smp1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: smp1 port 7 OAM ip address
+  db0_OAM_direct_ips:
+    type: string
+    label: db0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  db1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: db1 port 7 OAM ip address
+  vm_scp_be0_name:
+    type: string
+    default: vSCP_BE0
+    description: name of VM
+  vm_scp_be1_name:
+    type: string
+    default: vSCP_BE1
+    description: name of VM    
+  vm_scp_be2_name:
+    type: string
+    default: vSCP_BE2
+    description: name of VM
+  vm_scp_be3_name:
+    type: string
+    default: vSCP_BE3
+    description: name of VM
+  vm_scp_be4_name:
+    type: string
+    default: vSCP_BE4
+    description: name of VM
+  vm_scp_fe0_name:
+    type: string
+    default: vSCP_FE0
+    description: name of VM
+  vm_scp_fe1_name:
+    type: string
+    default: vSCP_FE1
+    description: name of VM
+  vm_smp0_name:
+    type: string
+    default: vSMP0
+    description: name of VM
+  vm_smp1_name:
+    type: string
+    default: vSMP1
+    description: name of VM
+  vm_db0_name:
+    type: string
+    default: vDB0
+    description: name of VM
+  vm_db1_name:
+    type: string
+    default: vDB1
+    description: name of VM
+
+resources:
+#  scp_be_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_be_wait_handle }
+#      count: 5
+#      timeout: 300
+#  scp_be_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  scp_fe_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_fe_wait_handle }
+#      count: 2
+#      timeout: 300
+#  scp_fe_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  smp_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: smp_wait_handle }
+#      count: 2
+#      timeout: 300
+#  smp_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  db_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: db_wait_handle }
+#      count: 2
+#      timeout: 300
+#  db_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+
+  FE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"] 
+  BE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  SMP_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  DB_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+      
+  FE_Clustering_KA:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_fe_cluster_net_id }
+
+  FE_Clustering_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+      cidr: { get_param: int_vscp_fe_cluster_cidr }
+
+  Clustering_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_cluster_net_id }
+
+  Clustering_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Clustering_Network }
+      cidr: { get_param: int_vscp_cluster_cidr }
+
+  DB_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_db_network_net_id }
+
+  DB_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: DB_Network }
+      cidr: { get_param: int_vscp_db_network_cidr }
+
+  server_scp_be0:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be0_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be0 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be0_port_3 }
+      - port: { get_resource: be0_port_4 }
+      - port: { get_resource: be0_port_5 }
+      - port: { get_resource: be0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be0_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+  be0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be0_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}]
+
+  be0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}]
+
+  server_scp_be1:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be1_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be1 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be1_port_3 }
+      - port: { get_resource: be1_port_4 }
+      - port: { get_resource: be1_port_5 }
+      - port: { get_resource: be1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be1_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be1_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}]
+
+  be1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}]
+
+  server_scp_be2:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be2_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be2 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be2_port_3 }
+      - port: { get_resource: be2_port_4 }
+      - port: { get_resource: be2_port_5 }
+      - port: { get_resource: be2_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be2_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be2_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}]
+
+  be2_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}]
+
+  server_scp_be3:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be3_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be3 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be3_port_3 }
+      - port: { get_resource: be3_port_4 }
+      - port: { get_resource: be3_port_5 }
+      - port: { get_resource: be3_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be3_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be3_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be3_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be3_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}]
+
+  be3_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}]
+
+  server_scp_be4:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be4_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be4 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be4_port_3 }
+      - port: { get_resource: be4_port_4 }
+      - port: { get_resource: be4_port_5 }
+      - port: { get_resource: be4_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be4_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be4_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be4_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be4_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}]
+
+  be4_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}]
+
+  server_scp_fe0:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe0_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe0 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe0_port_0 }
+      - port: { get_resource: fe0_port_2 }
+      - port: { get_resource: fe0_port_3 }
+      - port: { get_resource: fe0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe0_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe0_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_A1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}]
+
+  fe0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}]
+
+  server_scp_fe1:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe1_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe1 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe1_port_1 }
+      - port: { get_resource: fe1_port_2 }
+      - port: { get_resource: fe1_port_3 }
+      - port: { get_resource: fe1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe1_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_B1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}]
+
+  fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}]
+
+  server_smp0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp0_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp0 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp0_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}]
+
+  server_smp1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp1_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp1 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp1_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}]
+
+  server_db0:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db0_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db0 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db0_port_4 }
+      - port: { get_resource: db0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db0_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}]
+
+  server_db1:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db1_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db1 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db1_port_4 }
+      - port: { get_resource: db1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db1_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/Heat-File.yaml b/ui-ci/src/main/resources/Files/Heat-File.yaml
new file mode 100644
index 0000000..d332078
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Heat-File.yaml
@@ -0,0 +1,791 @@
+heat_template_version: 2013-05-23
+#################################
+#
+#  Changes in v0.2:
+#  - Unique availability zone for each VM
+#  - LAN8 and SLAN networks removed according to latest Prod/Type I diagram
+#  - 2 DB VMs added
+#  - Images corrected
+#  - VM start-up order: SMP->DB->BE->FE (no error handling yet)
+#  - Provisioning scripts placeholders
+#
+#################################
+
+description: ASC Template
+
+parameters:
+#  availability_zone_smp0:
+#    type: string
+#    default: nova
+#  availability_zone_smp1:
+#    type: string
+#    default: nova
+#  availability_zone_fe0:
+#    type: string
+#    default: nova
+#  availability_zone_fe1:
+#    type: string
+#    default: nova
+#  availability_zone_db0:
+#    type: string
+#    default: nova
+#  availability_zone_db1:
+#    type: string
+#    default: nova
+#  availability_zone_be0:
+#    type: string
+#    default: nova
+#  availability_zone_be1:
+#    type: string
+#    default: nova
+#  availability_zone_be2:
+#    type: string
+#    default: nova
+#  availability_zone_be3:
+#    type: string
+#    default: nova
+#  availability_zone_be4:
+#    type: string
+#    default: nova
+
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+    default: This_is_the_SCP_name
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_SCP_id
+
+  flavor_scp_be_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_scp_fe_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_smp_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_db_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  image_scp_be_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_be
+  image_scp_fe_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_fe    
+  image_smp_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_smp
+  image_db_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_db
+
+  int_vscp_fe_cluster_net_id:
+    type: string
+    description: LAN2 FE Cluster/KA
+  int_vscp_fe_cluster_cidr:
+    type: string
+    description: Private Network2 Address (CIDR notation)
+  int_vscp_cluster_net_id:
+    type: string
+    description: LAN3 Cluster
+  int_vscp_cluster_cidr:
+    type: string
+    description: Private Network3 Address (CIDR notation)
+  int_vscp_db_network_net_id:
+    type: string
+    description: LAN4 DB
+  int_vscp_db_network_cidr:
+    type: string
+    description: Private Network4 Address (CIDR notation)
+  SIGNET_vrf_A1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_A
+  SIGNET_vrf_B1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_B
+  Cricket_OCS_protected_net_id:
+    type: string
+    description: Network name for CRICKET_OCS
+  OAM_direct_net_id:
+    type: string
+    description: Network name for OAM
+  be0_Cricket_OCS_protected_ips:
+    type: string
+    label: be0 port 5 OAM ip address
+    description: be0 port 5 OAM ip address
+  be1_Cricket_OCS_protected_ips:
+    type: string
+    label: be1 port 5 OAM ip address
+    description: be1 port 5 OAM ip address
+  be2_Cricket_OCS_protected_ips:
+    type: string
+    label: be2 port 5 OAM ip address
+    description: be2 port 5 OAM ip address
+  be3_Cricket_OCS_protected_ips:
+    type: string
+    label: be3 port 5 OAM ip address
+    description: be3 port 5 OAM ip address
+  be4_Cricket_OCS_protected_ips:
+    type: string
+    label: be4 port 5 OAM ip address
+    description: be4 port 5 OAM ip address
+  be0_OAM_direct_ips:
+    type: string
+    label: be0 port 7 OAM ip address
+    description: be0 port 7 OAM ip address
+  be1_OAM_direct_ips:
+    type: string
+    label: be1 port 7 OAM ip address
+    description: be1 port 7 OAM ip address
+  be2_OAM_direct_ips:
+    type: string
+    label: be2 port 7 OAM ip address
+    description: be2 port 7 OAM ip address
+  be3_OAM_direct_ips:
+    type: string
+    label: be3 port 7 OAM ip address
+    description: be3 port 7 OAM ip address
+  be4_OAM_direct_ips:
+    type: string
+    label: be4 port 7 OAM ip address
+    description: be4 port 7 OAM ip address
+  fe0_SIGNET_vrf_A1_direct_ips:
+    type: string
+    label: fe0 port 0 SIGTRAN ip address
+    description: fe0 port 0 SIGTRAN ip address
+  fe0_OAM_direct_ips:
+    type: string
+    label: fe0 port 7 OAM ip address
+    description: fe0 port 7 OAM ip address
+  fe1_SIGNET_vrf_B1_direct_ips:
+    type: string
+    label: fe1 port 1 SIGTRAN ip address
+    description: fe1 port 1 SIGTRAN ip address
+  fe1_OAM_direct_ips:
+    type: string
+    label: fe1 port 7 OAM ip address
+    description: fe1 port 7 OAM ip address
+  smp0_OAM_direct_ips:
+    type: string
+    label: smp0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  smp1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: smp1 port 7 OAM ip address
+  db0_OAM_direct_ips:
+    type: string
+    label: db0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  db1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: db1 port 7 OAM ip address
+  vm_scp_be0_name:
+    type: string
+    default: vSCP_BE0
+    description: name of VM
+  vm_scp_be1_name:
+    type: string
+    default: vSCP_BE1
+    description: name of VM    
+  vm_scp_be2_name:
+    type: string
+    default: vSCP_BE2
+    description: name of VM
+  vm_scp_be3_name:
+    type: string
+    default: vSCP_BE3
+    description: name of VM
+  vm_scp_be4_name:
+    type: string
+    default: vSCP_BE4
+    description: name of VM
+  vm_scp_fe0_name:
+    type: string
+    default: vSCP_FE0
+    description: name of VM
+  vm_scp_fe1_name:
+    type: string
+    default: vSCP_FE1
+    description: name of VM
+  vm_smp0_name:
+    type: string
+    default: vSMP0
+    description: name of VM
+  vm_smp1_name:
+    type: string
+    default: vSMP1
+    description: name of VM
+  vm_db0_name:
+    type: string
+    default: vDB0
+    description: name of VM
+  vm_db1_name:
+    type: string
+    default: vDB1
+    description: name of VM
+
+resources:
+#  scp_be_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_be_wait_handle }
+#      count: 5
+#      timeout: 300
+#  scp_be_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  scp_fe_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_fe_wait_handle }
+#      count: 2
+#      timeout: 300
+#  scp_fe_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  smp_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: smp_wait_handle }
+#      count: 2
+#      timeout: 300
+#  smp_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  db_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: db_wait_handle }
+#      count: 2
+#      timeout: 300
+#  db_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+
+  FE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"] 
+  BE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  SMP_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  DB_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+      
+  FE_Clustering_KA:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_fe_cluster_net_id }
+
+  FE_Clustering_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+      cidr: { get_param: int_vscp_fe_cluster_cidr }
+
+  Clustering_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_cluster_net_id }
+
+  Clustering_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Clustering_Network }
+      cidr: { get_param: int_vscp_cluster_cidr }
+
+  DB_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_db_network_net_id }
+
+  DB_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: DB_Network }
+      cidr: { get_param: int_vscp_db_network_cidr }
+
+  server_scp_be0:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be0_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be0 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be0_port_3 }
+      - port: { get_resource: be0_port_4 }
+      - port: { get_resource: be0_port_5 }
+      - port: { get_resource: be0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be0_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+  be0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be0_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}]
+
+  be0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}]
+
+  server_scp_be1:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be1_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be1 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be1_port_3 }
+      - port: { get_resource: be1_port_4 }
+      - port: { get_resource: be1_port_5 }
+      - port: { get_resource: be1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be1_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be1_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}]
+
+  be1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}]
+
+  server_scp_be2:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be2_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be2 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be2_port_3 }
+      - port: { get_resource: be2_port_4 }
+      - port: { get_resource: be2_port_5 }
+      - port: { get_resource: be2_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be2_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be2_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}]
+
+  be2_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}]
+
+  server_scp_be3:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be3_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be3 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be3_port_3 }
+      - port: { get_resource: be3_port_4 }
+      - port: { get_resource: be3_port_5 }
+      - port: { get_resource: be3_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be3_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be3_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be3_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be3_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}]
+
+  be3_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}]
+
+  server_scp_be4:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be4_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be4 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be4_port_3 }
+      - port: { get_resource: be4_port_4 }
+      - port: { get_resource: be4_port_5 }
+      - port: { get_resource: be4_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be4_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be4_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be4_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be4_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}]
+
+  be4_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}]
+
+  server_scp_fe0:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe0_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe0 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe0_port_0 }
+      - port: { get_resource: fe0_port_2 }
+      - port: { get_resource: fe0_port_3 }
+      - port: { get_resource: fe0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe0_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe0_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_A1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}]
+
+  fe0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}]
+
+  server_scp_fe1:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe1_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe1 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe1_port_1 }
+      - port: { get_resource: fe1_port_2 }
+      - port: { get_resource: fe1_port_3 }
+      - port: { get_resource: fe1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe1_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_B1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}]
+
+  fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}]
+
+  server_smp0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp0_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp0 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp0_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}]
+
+  server_smp1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp1_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp1 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp1_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}]
+
+  server_db0:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db0_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db0 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db0_port_4 }
+      - port: { get_resource: db0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db0_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}]
+
+  server_db1:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db1_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db1 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db1_port_4 }
+      - port: { get_resource: db1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db1_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/InValid_tosca_File .yml b/ui-ci/src/main/resources/Files/InValid_tosca_File .yml
new file mode 100644
index 0000000..4eea0a1
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/InValid_tosca_File .yml
@@ -0,0 +1,34 @@
+node_types: 
+  org.openecomp.resource.MyCompute:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+      - local_storage: 
+          capability: tosca.capabilities.Attachment
+          node: tosca.nodes.BlockStorage
+          relationship: tosca.relationships.AttachesTo
+          occurrences: [0, UNBOUNDED]  
+    capabilities:
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [tosca.nodes.SoftwareComponent] 
+      endpoint :
+        type: tosca.capabilities.Endpoint.Admin 
+      os: 
+        type: tosca.capabilities.OperatingSystem
+      scalable:
+        type: tosca.capabilities.Scalable
+      binding:
+        type: tosca.capabilities.network.Bindable
diff --git a/ui-ci/src/main/resources/Files/JDM_vf.yml b/ui-ci/src/main/resources/Files/JDM_vf.yml
new file mode 100644
index 0000000..5a7edd4
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/JDM_vf.yml
@@ -0,0 +1,57 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vf.JDM: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: string
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/JDM_vfc.yml b/ui-ci/src/main/resources/Files/JDM_vfc.yml
new file mode 100644
index 0000000..b9c9ca0
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/JDM_vfc.yml
@@ -0,0 +1,57 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vfc.JDM: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: string
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/Sample_CSAR.csar b/ui-ci/src/main/resources/Files/Sample_CSAR.csar
new file mode 100644
index 0000000..3001fe8
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Sample_CSAR.csar
Binary files differ
diff --git a/ui-ci/src/main/resources/Files/UCPE_VFC.yml b/ui-ci/src/main/resources/Files/UCPE_VFC.yml
new file mode 100644
index 0000000..ef3966b
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/UCPE_VFC.yml
@@ -0,0 +1,65 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vfc.uCPE:
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-ucpe-part-number:
+        type: string                
+      vendor-name:
+        type: string                
+        required: true
+      vendor-model:
+        type: string                
+        required: true
+      total-vcpu:
+        type: integer              
+        description: number of vCPUs
+      total-memory:
+        type: integer               
+        description: GB
+      total-disk:
+        type: integer                
+        description: GB
+      base-system-image-file-name: 
+        type: string
+      linux-host-vendor:
+        type: string
+      linux-host-os-version:
+        type: version
+      base-system-software:
+        type: string
+      jdm-vcpu:
+        type: integer
+      jdm-memory:
+        type: integer
+        description: GB
+      jdm-disk:
+        type: integer
+        description: GB
+      jdm-version:
+        type: string
+      jcp-vcpu:
+        type: integer
+      jcp-memory:
+        type: integer
+        description: GB
+      jcp-disk:
+        type: integer
+        description: GB
+      jcp-version:
+        type: version
+    capabilities: 
+      vnf_hosting: 
+        type: tosca.capabilities.Container
+        description: Provides hosting capability for VNFs   
+      WAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Wan]
+        description: external WAN1 n/w interface
+        occurrences: [1,2]
+      LAN_connectivity:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types: [org.openecomp.cp.Lan]
+        description: external LAN n/w interface
+        occurrences: [1,8]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/VF.yml b/ui-ci/src/main/resources/Files/VF.yml
new file mode 100644
index 0000000..ec08990
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/VF.yml
@@ -0,0 +1,17 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vf.VFF:
+    derived_from: tosca.nodes.Root
+    properties:
+      vendor:
+        type: string
+        required: false
+      vl_name:
+        type: string
+        required: false
+    capabilities:
+       virtual_linkable:
+        type: tosca.capabilities.network.Linkable
+		
+		
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/VFC.yml b/ui-ci/src/main/resources/Files/VFC.yml
new file mode 100644
index 0000000..853ed35
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/VFC.yml
@@ -0,0 +1,77 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vfc.vRouter: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: string
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+      management-v6-address:
+        type: string
+      nm-lan-v6-address: 
+        type: string
+      nm-lan-v6-prefix-length:
+        type: string
+      management-v4-address:
+        type: string
+      nm-lan-v4-address:
+        type: string
+      nm-lan-v4-prefix-length:
+        type: string
+      routing-instance-name:
+        type: string
+      routing-instances:                   
+        type: map
+      entry_schema:                   
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
+        occurrences: [1,UNBOUNDED]
+   
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/VL.yml b/ui-ci/src/main/resources/Files/VL.yml
new file mode 100644
index 0000000..72e6d2b
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/VL.yml
@@ -0,0 +1,18 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+  org.openecomp.resource.vl.VL00:
+    derived_from: tosca.nodes.network.Network
+    properties:
+      vendor:
+        type: string
+        required: false
+      vl_name:
+        type: string
+        required: false
+
+    capabilities:
+       virtual_linkable:
+        type: tosca.capabilities.network.Linkable
+       end_point:
+        type: tosca.capabilities.Endpoint
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/Valid xml.xml b/ui-ci/src/main/resources/Files/Valid xml.xml
new file mode 100644
index 0000000..0d67e48
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Valid xml.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<dirs>
+<entry loc="C:\Program Files\Java\jdk1.7.0_79" stamp="1449076618518"/>
+</dirs>
diff --git a/ui-ci/src/main/resources/Files/Valid_tosca_Mycompute.yml b/ui-ci/src/main/resources/Files/Valid_tosca_Mycompute.yml
new file mode 100644
index 0000000..8fac5e1
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Valid_tosca_Mycompute.yml
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  org.openecomp.resource.vf.Database:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+      - local_storage: 
+          capability: tosca.capabilities.Attachment
+          node: tosca.nodes.BlockStorage
+          relationship: tosca.relationships.AttachesTo
+          occurrences: [0, UNBOUNDED]  
+    capabilities:
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [tosca.nodes.SoftwareComponent] 
+      endpoint :
+        type: tosca.capabilities.Endpoint.Admin 
+      os: 
+        type: tosca.capabilities.OperatingSystem
+      scalable:
+        type: tosca.capabilities.Scalable
+      binding:
+        type: tosca.capabilities.network.Bindable
diff --git a/ui-ci/src/main/resources/Files/Valid_tosca_ReplaceTest.yml b/ui-ci/src/main/resources/Files/Valid_tosca_ReplaceTest.yml
new file mode 100644
index 0000000..90e771d
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/Valid_tosca_ReplaceTest.yml
@@ -0,0 +1,35 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+node_types: 
+  org.openecomp.resource.VF.MyCompute:
+    derived_from: tosca.nodes.Root
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.NetworkInfo
+      ports:
+        type: map
+        entry_schema:
+          type: tosca.datatypes.network.PortInfo
+    requirements:
+      - local_storage: 
+          capability: tosca.capabilities.Attachment
+          node: tosca.nodes.BlockStorage
+          relationship: tosca.relationships.AttachesTo
+          occurrences: [0, UNBOUNDED]  
+    capabilities:
+      host: 
+        type: tosca.capabilities.Container
+        valid_source_types: [tosca.nodes.SoftwareComponent] 
+      endpoint :
+        type: tosca.capabilities.Endpoint.Admin 
+      os: 
+        type: tosca.capabilities.OperatingSystem
+      scalable:
+        type: tosca.capabilities.Scalable
+      binding:
+        type: tosca.capabilities.network.Bindable
diff --git a/ui-ci/src/main/resources/Files/asc_heat 0 2.yaml b/ui-ci/src/main/resources/Files/asc_heat 0 2.yaml
new file mode 100644
index 0000000..6835485
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/asc_heat 0 2.yaml
@@ -0,0 +1,787 @@
+heat_template_version: 2013-05-23
+#################################
+#
+#  Changes in v0.2:
+#  - Unique availability zone for each VM
+#  - LAN8 and SLAN networks removed according to latest Prod/Type I diagram
+#  - 2 DB VMs added
+#  - Images corrected
+#  - VM start-up order: SMP->DB->BE->FE (no error handling yet)
+#  - Provisioning scripts placeholders
+#
+#################################
+
+description: ASC Template
+
+parameters:
+#  availability_zone_smp0:
+#    type: string
+#    default: nova
+#  availability_zone_smp1:
+#    type: string
+#    default: nova
+#  availability_zone_fe0:
+#    type: string
+#    default: nova
+#  availability_zone_fe1:
+#    type: string
+#    default: nova
+#  availability_zone_db0:
+#    type: string
+#    default: nova
+#  availability_zone_db1:
+#    type: string
+#    default: nova
+#  availability_zone_be0:
+#    type: string
+#    default: nova
+#  availability_zone_be1:
+#    type: string
+#    default: nova
+#  availability_zone_be2:
+#    type: string
+#    default: nova
+#  availability_zone_be3:
+#    type: string
+#    default: nova
+#  availability_zone_be4:
+#    type: string
+#    default: nova
+
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+    default: This_is_the_SCP_name
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_SCP_id
+
+  flavor_scp_be_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_scp_fe_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_smp_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_db_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  image_scp_be_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_be
+  image_scp_fe_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_fe    
+  image_smp_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_smp
+  image_db_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_db
+
+  int_vscp_fe_cluster_net_id:
+    type: string
+    description: LAN2 FE Cluster/KA
+  int_vscp_fe_cluster_cidr:
+    type: string
+    description: Private Network2 Address (CIDR notation)
+  int_vscp_cluster_net_id:
+    type: string
+    description: LAN3 Cluster
+  int_vscp_cluster_cidr:
+    type: string
+    description: Private Network3 Address (CIDR notation)
+  int_vscp_db_network_net_id:
+    type: string
+    description: LAN4 DB
+  int_vscp_db_network_cidr:
+    type: string
+    description: Private Network4 Address (CIDR notation)
+  SIGNET_vrf_A1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_A
+  SIGNET_vrf_B1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_B
+  Cricket_OCS_protected_net_id:
+    type: string
+    description: Network name for CRICKET_OCS
+  OAM_direct_net_id:
+    type: string
+    description: Network name for OAM
+  be0_Cricket_OCS_protected_ips:
+    type: string
+    label: be0 port 5 OAM ip address
+    description: be0 port 5 OAM ip address
+  be1_Cricket_OCS_protected_ips:
+    type: string
+    label: be1 port 5 OAM ip address
+    description: be1 port 5 OAM ip address
+  be2_Cricket_OCS_protected_ips:
+    type: string
+    label: be2 port 5 OAM ip address
+    description: be2 port 5 OAM ip address
+  be3_Cricket_OCS_protected_ips:
+    type: string
+    label: be3 port 5 OAM ip address
+    description: be3 port 5 OAM ip address
+  be4_Cricket_OCS_protected_ips:
+    type: string
+    label: be4 port 5 OAM ip address
+    description: be4 port 5 OAM ip address
+  be0_OAM_direct_ips:
+    type: string
+    label: be0 port 7 OAM ip address
+    description: be0 port 7 OAM ip address
+  be1_OAM_direct_ips:
+    type: string
+    label: be1 port 7 OAM ip address
+    description: be1 port 7 OAM ip address
+  be2_OAM_direct_ips:
+    type: string
+    label: be2 port 7 OAM ip address
+    description: be2 port 7 OAM ip address
+  be3_OAM_direct_ips:
+    type: string
+    label: be3 port 7 OAM ip address
+    description: be3 port 7 OAM ip address
+  be4_OAM_direct_ips:
+    type: string
+    label: be4 port 7 OAM ip address
+    description: be4 port 7 OAM ip address
+  fe0_SIGNET_vrf_A1_direct_ips:
+    type: string
+    label: fe0 port 0 SIGTRAN ip address
+    description: fe0 port 0 SIGTRAN ip address
+  fe0_OAM_direct_ips:
+    type: string
+    label: fe0 port 7 OAM ip address
+    description: fe0 port 7 OAM ip address
+  fe1_SIGNET_vrf_B1_direct_ips:
+    type: string
+    label: fe1 port 1 SIGTRAN ip address
+    description: fe1 port 1 SIGTRAN ip address
+  fe1_OAM_direct_ips:
+    type: string
+    label: fe1 port 7 OAM ip address
+    description: fe1 port 7 OAM ip address
+  smp0_OAM_direct_ips:
+    type: string
+    label: smp0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  smp1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: smp1 port 7 OAM ip address
+  db0_OAM_direct_ips:
+    type: string
+    label: db0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  db1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: db1 port 7 OAM ip address
+  vm_scp_be0_name:
+    type: string
+    default: vSCP_BE0
+    description: name of VM
+  vm_scp_be1_name:
+    type: string
+    default: vSCP_BE1
+    description: name of VM    
+  vm_scp_be2_name:
+    type: string
+    default: vSCP_BE2
+    description: name of VM
+  vm_scp_be3_name:
+    type: string
+    default: vSCP_BE3
+    description: name of VM
+  vm_scp_be4_name:
+    type: string
+    default: vSCP_BE4
+    description: name of VM
+  vm_scp_fe0_name:
+    type: string
+    default: vSCP_FE0
+    description: name of VM
+  vm_scp_fe1_name:
+    type: string
+    default: vSCP_FE1
+    description: name of VM
+  vm_smp0_name:
+    type: string
+    default: vSMP0
+    description: name of VM
+  vm_smp1_name:
+    type: string
+    default: vSMP1
+    description: name of VM
+  vm_db0_name:
+    type: string
+    default: vDB0
+    description: name of VM
+  vm_db1_name:
+    type: string
+    default: vDB1
+    description: name of VM
+
+resources:
+#  scp_be_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_be_wait_handle }
+#      count: 5
+#      timeout: 300
+#  scp_be_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  scp_fe_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_fe_wait_handle }
+#      count: 2
+#      timeout: 300
+#  scp_fe_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  smp_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: smp_wait_handle }
+#      count: 2
+#      timeout: 300
+#  smp_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  db_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: db_wait_handle }
+#      count: 2
+#      timeout: 300
+#  db_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+
+  FE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"] 
+  BE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  SMP_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  DB_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+      
+  FE_Clustering_KA:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_fe_cluster_net_id }
+
+  FE_Clustering_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+      cidr: { get_param: int_vscp_fe_cluster_cidr }
+
+  Clustering_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_cluster_net_id }
+
+  Clustering_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Clustering_Network }
+      cidr: { get_param: int_vscp_cluster_cidr }
+
+  DB_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_db_network_net_id }
+
+  DB_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: DB_Network }
+      cidr: { get_param: int_vscp_db_network_cidr }
+
+  server_scp_be0:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be0_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be0 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be0_port_3 }
+      - port: { get_resource: be0_port_4 }
+      - port: { get_resource: be0_port_5 }
+      - port: { get_resource: be0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be0_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be0_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}]
+
+  be0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}]
+
+  server_scp_be1:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be1_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be1 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be1_port_3 }
+      - port: { get_resource: be1_port_4 }
+      - port: { get_resource: be1_port_5 }
+      - port: { get_resource: be1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be1_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be1_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}]
+
+  be1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}]
+
+  server_scp_be2:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be2_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be2 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be2_port_3 }
+      - port: { get_resource: be2_port_4 }
+      - port: { get_resource: be2_port_5 }
+      - port: { get_resource: be2_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be2_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be2_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}]
+
+  be2_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}]
+
+  server_scp_be3:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be3_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be3 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be3_port_3 }
+      - port: { get_resource: be3_port_4 }
+      - port: { get_resource: be3_port_5 }
+      - port: { get_resource: be3_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be3_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be3_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be3_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be3_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}]
+
+  be3_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}]
+
+  server_scp_be4:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be4_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be4 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be4_port_3 }
+      - port: { get_resource: be4_port_4 }
+      - port: { get_resource: be4_port_5 }
+      - port: { get_resource: be4_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be4_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be4_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be4_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be4_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}]
+
+  be4_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}]
+
+  server_scp_fe0:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe0_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe0 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe0_port_0 }
+      - port: { get_resource: fe0_port_2 }
+      - port: { get_resource: fe0_port_3 }
+      - port: { get_resource: fe0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe0_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe0_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_A1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}]
+
+  fe0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}]
+
+  server_scp_fe1:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe1_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe1 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe1_port_1 }
+      - port: { get_resource: fe1_port_2 }
+      - port: { get_resource: fe1_port_3 }
+      - port: { get_resource: fe1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe1_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_B1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}]
+
+  fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}]
+
+  server_smp0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp0_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp0 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp0_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}]
+
+  server_smp1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp1_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp1 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp1_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}]
+
+  server_db0:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db0_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db0 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db0_port_4 }
+      - port: { get_resource: db0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db0_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}]
+
+  server_db1:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db1_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db1 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db1_port_4 }
+      - port: { get_resource: db1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db1_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/hot-nimbus-oam-volumes_v0.3.env b/ui-ci/src/main/resources/Files/hot-nimbus-oam-volumes_v0.3.env
new file mode 100644
index 0000000..b494d8c
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/hot-nimbus-oam-volumes_v0.3.env
@@ -0,0 +1,6 @@
+parameters:
+  pcrf_oam_vol_size: 500
+  pcrf_oam_volume_silver-1: Silver
+  pcrf_oam_volume_silver-2: Silver
+  pcrf_oam_vol_name_1: sde1-pcrfx01-oam001-vol-1
+  pcrf_oam_vol_name_2: sde1-pcrfx01-oam001-vol-2
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.env b/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.env
new file mode 100644
index 0000000..cf7cf71
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.env
@@ -0,0 +1,18 @@
+parameters:
+  pcrf_oam_server_names: ZRDM1PCRF01OAM001,ZRDM1PCRF01OAM002
+  pcrf_oam_image_name: PCRF_8.995-ATTM1.0.3.qcow2
+  pcrf_oam_flavor_name: lc.4xlarge4
+  availabilityzone_name: nova
+  pcrf_cps_net_name: int_pcrf_net_0
+  pcrf_cps_net_ips: 172.26.16.111,172.26.16.112
+  pcrf_arbiter_vip: 172.26.16.115
+  pcrf_cps_net_mask: 255.255.255.0
+  pcrf_oam_net_name: oam_protected_net_0
+  pcrf_oam_net_ips: 107.239.64.117,107.239.64.118
+  pcrf_oam_net_gw: 107.239.64.1
+  pcrf_oam_net_mask: 255.255.248.0
+  pcrf_oam_volume_id_1: a4aa05fb-fcdc-457b-8077-6845fdfc3257
+  pcrf_oam_volume_id_2: 93d8fc1f-f1c3-4933-86b2-039881ee910f
+  pcrf_security_group_name: nimbus_security_group
+  pcrf_vnf_id: 730797234b4a40aa99335157b02871cd
+
diff --git a/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.yaml b/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.yaml
new file mode 100644
index 0000000..6636eba
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/hot-nimbus-oam_v0.6.yaml
@@ -0,0 +1,108 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates multiple PCRF OAM nodes stack
+
+parameters:
+  pcrf_oam_server_names:
+    type: comma_delimited_list
+    label: PCRF OAM server names
+    description: name of the PCRF OAM instance
+  pcrf_oam_image_name:
+    type: string
+    label: PCRF OAM image name
+    description: PCRF OAM image name
+  pcrf_oam_flavor_name:
+    type: string
+    label: PCRF OAM flavor name
+    description: flavor name of PCRF OAM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_arbiter_vip:
+    type: string
+    label: OAM Arbiter LB VIP
+    description: OAM Arbiter LB VIP
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ips:
+    type: comma_delimited_list
+    label: OAM network ips
+    description: OAM network ips
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_volume_id_1:
+    type: string
+    label: CPS OAM 001 Cinder Volume
+    description: CPS OAM 001 Cinder Volumes
+  pcrf_oam_volume_id_2:
+    type: string
+    label: CPS OAM 002 Cinder Volume
+    description: CPS OAM 002 Cinder Volumes
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_oam_001:
+    type: nested-oam_v0.2.yaml
+    properties:
+      pcrf_oam_server_name: { get_param: [pcrf_oam_server_names, 0] }
+      pcrf_oam_image_name: { get_param: pcrf_oam_image_name }
+      pcrf_oam_flavor_name: { get_param: pcrf_oam_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_oam_volume_id: { get_param: pcrf_oam_volume_id_1 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 0] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_arbiter_vip: { get_param: pcrf_arbiter_vip }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
+
+  server_pcrf_oam_002:
+    type: nested-oam_v0.2.yaml
+    properties:
+      pcrf_oam_server_name: { get_param: [pcrf_oam_server_names, 1] }
+      pcrf_oam_image_name: { get_param: pcrf_oam_image_name }
+      pcrf_oam_flavor_name: { get_param: pcrf_oam_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_oam_volume_id: { get_param: pcrf_oam_volume_id_2 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 1] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 1] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_arbiter_vip: { get_param: pcrf_arbiter_vip }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
diff --git a/ui-ci/src/main/resources/Files/hot-nimbus-pcm_v0.6.yaml b/ui-ci/src/main/resources/Files/hot-nimbus-pcm_v0.6.yaml
new file mode 100644
index 0000000..5641041
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/hot-nimbus-pcm_v0.6.yaml
@@ -0,0 +1,80 @@
+heat_template_version: 2013-05-23
+
+description: heat template that creates PCRF Cluman stack
+
+parameters:
+  pcrf_pcm_server_names:
+    type: comma_delimited_list
+    label: PCRF CM server names
+    description: name of the PCRF CM instance
+  pcrf_pcm_image_name:
+    type: string
+    label: PCRF CM image name
+    description: PCRF CM image name
+  pcrf_pcm_flavor_name:
+    type: string
+    label: PCRF CM flavor name
+    description: flavor name of PCRF CM instance
+  availabilityzone_name:
+    type: string
+    label: availabilityzone name
+    description: availabilityzone name
+  pcrf_cps_net_name:
+    type: string
+    label: CPS network name
+    description: CPS network name
+  pcrf_cps_net_ips:
+    type: comma_delimited_list
+    label: CPS network ips
+    description: CPS network ips
+  pcrf_cps_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_oam_net_name:
+    type: string
+    label: OAM network name
+    description: OAM network name
+  pcrf_oam_net_ips:
+    type: comma_delimited_list
+    label: OAM network ips
+    description: OAM network ips
+  pcrf_oam_net_gw:
+    type: string
+    label: CPS network gateway
+    description: CPS network gateway
+  pcrf_oam_net_mask:
+    type: string
+    label: CPS network mask
+    description: CPS network mask
+  pcrf_pcm_volume_id_1:
+    type: string
+    label: CPS Cluman Cinder Volume
+    description: CPS Cluman Cinder Volume
+  pcrf_security_group_name:
+    type: string
+    label: security group name
+    description: the name of security group
+  pcrf_vnf_id:
+    type: string
+    label: PCRF VNF Id
+    description: PCRF VNF Id
+
+resources:
+  server_pcrf_pcm_001:
+    type: nested-pcm_v0.2.yaml
+    properties:
+      pcrf_pcm_server_name: { get_param: [pcrf_pcm_server_names, 0] }
+      pcrf_pcm_image_name: { get_param: pcrf_pcm_image_name }
+      pcrf_pcm_flavor_name: { get_param: pcrf_pcm_flavor_name }
+      availabilityzone_name: { get_param: availabilityzone_name }
+      pcrf_security_group_name: { get_param: pcrf_security_group_name }
+      pcrf_pcm_volume_id: { get_param: pcrf_pcm_volume_id_1 }
+      pcrf_cps_net_name: { get_param: pcrf_cps_net_name }
+      pcrf_cps_net_ip: { get_param: [pcrf_cps_net_ips, 0] }
+      pcrf_cps_net_mask: { get_param: pcrf_cps_net_mask }
+      pcrf_oam_net_name: { get_param: pcrf_oam_net_name }
+      pcrf_oam_net_ip: { get_param: [pcrf_oam_net_ips, 0] }
+      pcrf_oam_net_mask: { get_param: pcrf_oam_net_mask }
+      pcrf_oam_net_gw: { get_param: pcrf_oam_net_gw }
+      pcrf_vnf_id: {get_param: pcrf_vnf_id}
diff --git a/ui-ci/src/main/resources/Files/sample-xml-alldata-1-1.xml b/ui-ci/src/main/resources/Files/sample-xml-alldata-1-1.xml
new file mode 100644
index 0000000..1723f6b
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/sample-xml-alldata-1-1.xml
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<ns2:vnf-catalog xmlns:ns2="http://com/att/co/db-definition">
+	<ns2:part-number-list>
+		<ns2:part-number>FG-VM00*</ns2:part-number>
+		<ns2:vnf-type>FW</ns2:vnf-type>
+		<ns2:vendor-info>
+			<ns2:vendor-name>FORTINET</ns2:vendor-name>
+			<ns2:vendor-part-number>FG-VM00*</ns2:vendor-part-number>
+			<ns2:vendor-model>VM00</ns2:vendor-model>
+		</ns2:vendor-info>
+		<ns2:vcpu>
+			<ns2:vcpu-default>1</ns2:vcpu-default>
+			<ns2:vcpu-min>1</ns2:vcpu-min>
+			<ns2:vcpu-max>1</ns2:vcpu-max>
+		</ns2:vcpu>
+		<ns2:vmemory>
+			<ns2:vmemory-default>1</ns2:vmemory-default>
+			<ns2:vmemory-units>GB</ns2:vmemory-units>
+			<ns2:vmemory-min>1</ns2:vmemory-min>
+			<ns2:vmemory-max>1</ns2:vmemory-max>
+		</ns2:vmemory>
+		<ns2:vdisk>
+			<ns2:vdisk-default>20</ns2:vdisk-default>
+			<ns2:vdisk-units>GB</ns2:vdisk-units>
+			<ns2:vdisk-min>20</ns2:vdisk-min>
+			<ns2:vdisk-max>20</ns2:vdisk-max>
+		</ns2:vdisk>
+		<software-version-list>
+			<software-version>5.2.4</software-version>
+			<software-version-state>0</software-version-state>
+			<software-filename>fg-5.2.4.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.3</software-version>
+			<software-version-state>1</software-version-state>
+			<software-filename>fg-5.2.3.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.2</software-version>
+			<software-version-state>2</software-version-state>
+			<software-filename>fg-5.2.2.qcow</software-filename >
+		</software-version-list>
+		<vnf-features-list>
+			<vnf-feature>IPS-IDS</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>URLF</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>Anti-Virus</vnf-feature>
+		</vnf-features-list>
+		<supported-hardware-list>
+			<ucpe-model>U401</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U410</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U412</ucpe-model >
+		</supported-hardware-list>
+	</ns2:part-number-list>
+	<ns2:part-number-list>
+		<ns2:part-number>FG-VM01*</ns2:part-number>
+		<ns2:vnf-type>FW</ns2:vnf-type>
+		<ns2:vendor-info>
+			<ns2:vendor-name>   FORTINET</ns2:vendor-name>
+			<ns2:vendor-part-number>FG-VM01*</ns2:vendor-part-number>
+			<ns2:vendor-model>VM01</ns2:vendor-model>
+		</ns2:vendor-info>
+		<ns2:vcpu>
+			<ns2:vcpu-default>1</ns2:vcpu-default>
+			<ns2:vcpu-min>1</ns2:vcpu-min>
+			<ns2:vcpu-max>1</ns2:vcpu-max>
+		</ns2:vcpu>
+		<ns2:vmemory>
+			<ns2:vmemory-default>2</ns2:vmemory-default>
+			<ns2:vmemory-units>GB</ns2:vmemory-units>
+			<ns2:vmemory-min>1</ns2:vmemory-min>
+			<ns2:vmemory-max>2</ns2:vmemory-max>
+		</ns2:vmemory>
+		<ns2:vdisk>
+			<ns2:vdisk-default>20</ns2:vdisk-default>
+			<ns2:vdisk-units>GB</ns2:vdisk-units>
+			<ns2:vdisk-min>20</ns2:vdisk-min>
+			<ns2:vdisk-max>20</ns2:vdisk-max>
+		</ns2:vdisk>
+		<software-version-list>
+			<software-version>5.2.4</software-version>
+			<software-version-state>0</software-version-state>
+			<software-filename>fg-5.2.4.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.3</software-version>
+			<software-version-state>1</software-version-state>
+			<software-filename>fg-5.2.3.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.2</software-version>
+			<software-version-state>2</software-version-state>
+			<software-filename>fg-5.2.2.qcow</software-filename >
+		</software-version-list>
+		<vnf-features-list>
+			<vnf-feature>IPS-IDS</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>URLF</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>Anti-Virus</vnf-feature>
+		</vnf-features-list>
+		<supported-hardware-list>
+			<ucpe-model>U401</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U410</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U412</ucpe-model >
+		</supported-hardware-list>
+	</ns2:part-number-list>
+	<ns2:part-number-list>
+		<ns2:part-number>FG-VM02*</ns2:part-number>
+		<ns2:vnf-type>FW</ns2:vnf-type>
+		<ns2:vendor-info>
+			<ns2:vendor-name>   FORTINET</ns2:vendor-name>
+			<ns2:vendor-part-number>FG-VM02*</ns2:vendor-part-number>
+			<ns2:vendor-model>VM02</ns2:vendor-model>
+		</ns2:vendor-info>
+		<ns2:vcpu>
+			<ns2:vcpu-default>2</ns2:vcpu-default>
+			<ns2:vcpu-min>1</ns2:vcpu-min>
+			<ns2:vcpu-max>2</ns2:vcpu-max>
+		</ns2:vcpu>
+		<ns2:vmemory>
+			<ns2:vmemory-default>4</ns2:vmemory-default>
+			<ns2:vmemory-units>GB</ns2:vmemory-units>
+			<ns2:vmemory-min>1</ns2:vmemory-min>
+			<ns2:vmemory-max>4</ns2:vmemory-max>
+		</ns2:vmemory>
+		<ns2:vdisk>
+			<ns2:vdisk-default>20</ns2:vdisk-default>
+			<ns2:vdisk-units>GB</ns2:vdisk-units>
+			<ns2:vdisk-min>20</ns2:vdisk-min>
+			<ns2:vdisk-max>20</ns2:vdisk-max>
+		</ns2:vdisk>
+		<software-version-list>
+			<software-version>5.2.4</software-version>
+			<software-version-state>0</software-version-state>
+			<software-filename>fg-5.2.4.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.3</software-version>
+			<software-version-state>1</software-version-state>
+			<software-filename>fg-5.2.3.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.2</software-version>
+			<software-version-state>2</software-version-state>
+			<software-filename>fg-5.2.2.qcow</software-filename >
+		</software-version-list>
+		<vnf-features-list>
+			<vnf-feature>IPS-IDS</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>URLF</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>Anti-Virus</vnf-feature>
+		</vnf-features-list>
+		<supported-hardware-list>
+			<ucpe-model>U401</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U410</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U412</ucpe-model >
+		</supported-hardware-list>
+	</ns2:part-number-list>
+	<ns2:part-number-list>
+		<ns2:part-number>FG-VM04*</ns2:part-number>
+		<ns2:vnf-type>FW</ns2:vnf-type>
+		<ns2:vendor-info>
+			<ns2:vendor-name>FORTINET</ns2:vendor-name>
+			<ns2:vendor-part-number>FG-VM04*</ns2:vendor-part-number>
+			<ns2:vendor-model>VM04</ns2:vendor-model>
+		</ns2:vendor-info>
+		<ns2:vcpu>
+			<ns2:vcpu-default>4</ns2:vcpu-default>
+			<ns2:vcpu-min>1</ns2:vcpu-min>
+			<ns2:vcpu-max>4</ns2:vcpu-max>
+		</ns2:vcpu>
+		<ns2:vmemory>
+			<ns2:vmemory-default>6</ns2:vmemory-default>
+			<ns2:vmemory-units>GB</ns2:vmemory-units>
+			<ns2:vmemory-min>1</ns2:vmemory-min>
+			<ns2:vmemory-max>6</ns2:vmemory-max>
+		</ns2:vmemory>
+		<ns2:vdisk>
+			<ns2:vdisk-default>20</ns2:vdisk-default>
+			<ns2:vdisk-units>GB</ns2:vdisk-units>
+			<ns2:vdisk-min>20</ns2:vdisk-min>
+			<ns2:vdisk-max>20</ns2:vdisk-max>
+		</ns2:vdisk>
+		<software-version-list>
+			<software-version>5.2.4</software-version>
+			<software-version-state>0</software-version-state>
+			<software-filename>fg-5.2.4.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.3</software-version>
+			<software-version-state>1</software-version-state>
+			<software-filename>fg-5.2.3.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.2</software-version>
+			<software-version-state>2</software-version-state>
+			<software-filename>fg-5.2.2.qcow</software-filename >
+		</software-version-list>
+		<vnf-features-list>
+			<vnf-feature>IPS-IDS</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>URLF</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>Anti-Virus</vnf-feature>
+		</vnf-features-list>
+		<supported-hardware-list>
+			<ucpe-model>U401</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U410</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U412</ucpe-model >
+		</supported-hardware-list>
+	</ns2:part-number-list>
+	<ns2:part-number-list>
+		<ns2:part-number>FG-VM08*</ns2:part-number>
+		<ns2:vnf-type>FW</ns2:vnf-type>
+		<ns2:vendor-info>
+			<ns2:vendor-name>FORTINET</ns2:vendor-name>
+			<ns2:vendor-part-number>FG-VM08*</ns2:vendor-part-number>
+			<ns2:vendor-model>VM08</ns2:vendor-model>
+		</ns2:vendor-info>
+		<ns2:vcpu>
+			<ns2:vcpu-default>8</ns2:vcpu-default>
+			<ns2:vcpu-min>1</ns2:vcpu-min>
+			<ns2:vcpu-max>8</ns2:vcpu-max>
+		</ns2:vcpu>
+		<ns2:vmemory>
+			<ns2:vmemory-default>12</ns2:vmemory-default>
+			<ns2:vmemory-units>GB</ns2:vmemory-units>
+			<ns2:vmemory-min>1</ns2:vmemory-min>
+			<ns2:vmemory-max>12</ns2:vmemory-max>
+		</ns2:vmemory>
+		<ns2:vdisk>
+			<ns2:vdisk-default>20</ns2:vdisk-default>
+			<ns2:vdisk-units>GB</ns2:vdisk-units>
+			<ns2:vdisk-min>20</ns2:vdisk-min>
+			<ns2:vdisk-max>20</ns2:vdisk-max>
+		</ns2:vdisk>
+		<software-version-list>
+			<software-version>5.2.4</software-version>
+			<software-version-state>0</software-version-state>
+			<software-filename>fg-5.2.4.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.3</software-version>
+			<software-version-state>1</software-version-state>
+			<software-filename>fg-5.2.3.qcow</software-filename >
+		</software-version-list>
+		<software-version-list>
+			<software-version>5.2.2</software-version>
+			<software-version-state>2</software-version-state>
+			<software-filename>fg-5.2.2.qcow</software-filename >
+		</software-version-list>
+		<vnf-features-list>
+			<vnf-feature>IPS-IDS</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>URLF</vnf-feature>
+		</vnf-features-list>
+		<vnf-features-list>
+			<vnf-feature>Anti-Virus</vnf-feature>
+		</vnf-features-list>
+		<supported-hardware-list>
+			<ucpe-model>U401</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U410</ucpe-model >
+		</supported-hardware-list>
+		<supported-hardware-list>
+			<ucpe-model>U412</ucpe-model >
+		</supported-hardware-list>
+	</ns2:part-number-list>
+</ns2:vnf-catalog>
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/vFW_8.12.16.zip b/ui-ci/src/main/resources/Files/vFW_8.12.16.zip
new file mode 100644
index 0000000..006c56c
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/vFW_8.12.16.zip
Binary files differ
diff --git a/ui-ci/src/main/resources/Files/vFW_VF.yml b/ui-ci/src/main/resources/Files/vFW_VF.yml
new file mode 100644
index 0000000..100883e
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/vFW_VF.yml
@@ -0,0 +1,58 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+
+  org.openecomp.resource.vf.vFW: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: version
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/vFW_VFC.yml b/ui-ci/src/main/resources/Files/vFW_VFC.yml
new file mode 100644
index 0000000..d0814c4
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/vFW_VFC.yml
@@ -0,0 +1,58 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+node_types:
+
+  org.openecomp.resource.vfc.vFW: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: version
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/vLB12.8.16.zip b/ui-ci/src/main/resources/Files/vLB12.8.16.zip
new file mode 100644
index 0000000..2f61e5a
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/vLB12.8.16.zip
Binary files differ
diff --git a/ui-ci/src/main/resources/Files/vRouter_vfc.yml b/ui-ci/src/main/resources/Files/vRouter_vfc.yml
new file mode 100644
index 0000000..95ffe95
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/vRouter_vfc.yml
@@ -0,0 +1,78 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+
+
+node_types:
+  org.openecomp.resource.vfc.vRouter: 
+    derived_from: tosca.nodes.Root
+    properties: 
+      att-part-number:
+        type: string
+      vendor-name:
+        type: string
+      vendor-part-number:
+        type: string
+      vendor-model:
+        type: string
+      vendor-model-description:
+        type: string
+      vcpu-default:
+        type: integer
+      vcpu-min:
+        type: integer
+      vcpu-max:
+        type: integer
+      vmemory-default:
+        type: integer        
+      vmemory-units:
+        type: string
+        default: "GB"
+      vmemory-min:
+        type: integer
+      vmemory-max:
+        type: integer
+      vdisk-default:
+        type: integer
+      vdisk-units:
+        type: string
+        default: "GB"
+      vdisk-min:
+        type: integer
+      vdisk-max:
+        type: integer
+      vnf-type: 
+        type: string
+      software-version: 
+        type: string
+      software-version-state:
+        type: integer
+      software-file-name: 
+        type: string
+      vnf-feature: 
+        type: string
+      management-v6-address:
+        type: string
+      nm-lan-v6-address: 
+        type: string
+      nm-lan-v6-prefix-length:
+        type: string
+      management-v4-address:
+        type: string
+      nm-lan-v4-address:
+        type: string
+      nm-lan-v4-prefix-length:
+        type: string
+      routing-instance-name:
+        type: string
+      routing-instances:                   
+        type: map
+      entry_schema:                   
+        type: string
+    requirements: 
+      - host:
+          capability: tosca.capabilities.Container
+          relationship: tosca.relationships.HostedOn
+    capabilities:
+      binding:
+        type: tosca.capabilities.network.Bindable
+        occurrences: [1,UNBOUNDED]
+   
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/Files/valid HEAT_ENV files.env b/ui-ci/src/main/resources/Files/valid HEAT_ENV files.env
new file mode 100644
index 0000000..e576c0f
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/valid HEAT_ENV files.env
@@ -0,0 +1,54 @@
+parameters:
+  flavor_scp_be_id: m1.small
+  flavor_scp_fe_id: m1.small
+  flavor_smp_id: m1.small
+  flavor_db_id: m1.small
+  image_scp_be_id: CCLINUX
+  image_scp_fe_id: CCLINUX
+  image_smp_id: CCLINUX
+  image_db_id: CCLINUX
+
+  int_vscp_fe_cluster_net_id: int_vscp_fe_cluster_net
+  int_vscp_fe_cluster_cidr: 172.26.2.0/24
+  int_vscp_cluster_net_id: int_vscp_cluster_net
+  int_vscp_cluster_cidr: 172.26.3.0/24
+  int_vscp_db_network_net_id: int_vscp_db_network_net
+  int_vscp_db_network_cidr: 172.26.1.0/24
+  
+  SIGNET_vrf_A1_direct_net_id: SIGNET_vrf_A1_direct_net
+  SIGNET_vrf_B1_direct_net_id: SIGNET_vrf_B1_direct_net
+  Cricket_OCS_protected_net_id: Cricket_OCS_protected_net
+#  OAM_direct_net_id: OAM_net
+#  OAM_direct_net_id: oam-direct-net
+  OAM_direct_net_id: Marks_OAM_direct_net
+  
+  be0_Cricket_OCS_protected_ips: 107.239.15.17
+  be1_Cricket_OCS_protected_ips: 107.239.15.18
+  be2_Cricket_OCS_protected_ips: 107.239.15.19
+  be3_Cricket_OCS_protected_ips: 107.239.15.20
+  be4_Cricket_OCS_protected_ips: 107.239.15.21
+  be0_OAM_direct_ips: 10.250.10.33
+  be1_OAM_direct_ips: 10.250.10.34
+  be2_OAM_direct_ips: 10.250.10.35
+  be3_OAM_direct_ips: 10.250.10.36
+  be4_OAM_direct_ips: 10.250.10.37
+  fe0_SIGNET_vrf_A1_direct_ips: 172.26.4.1
+  fe0_OAM_direct_ips: 10.250.10.38
+  fe1_SIGNET_vrf_B1_direct_ips: 172.26.4.5
+  fe1_OAM_direct_ips: 10.250.10.39
+  smp0_OAM_direct_ips: 10.250.10.40
+  smp1_OAM_direct_ips: 10.250.10.41
+  db0_OAM_direct_ips: 10.250.10.42
+  db1_OAM_direct_ips: 10.250.10.43
+
+  vm_scp_be0_name: vSCP_BE0
+  vm_scp_be1_name: vSCP_BE1
+  vm_scp_be2_name: vSCP_BE2
+  vm_scp_be3_name: vSCP_BE3
+  vm_scp_be4_name: vSCP_BE4
+  vm_scp_fe0_name: vSCP_FE0
+  vm_scp_fe1_name: vSCP_FE1
+  vm_smp0_name: vSMP0
+  vm_smp1_name: vSMP1
+  vm_db0_name: vDB0
+  vm_db1_name: vDB1
diff --git a/ui-ci/src/main/resources/Files/validHEATfiles.yaml b/ui-ci/src/main/resources/Files/validHEATfiles.yaml
new file mode 100644
index 0000000..6835485
--- /dev/null
+++ b/ui-ci/src/main/resources/Files/validHEATfiles.yaml
@@ -0,0 +1,787 @@
+heat_template_version: 2013-05-23
+#################################
+#
+#  Changes in v0.2:
+#  - Unique availability zone for each VM
+#  - LAN8 and SLAN networks removed according to latest Prod/Type I diagram
+#  - 2 DB VMs added
+#  - Images corrected
+#  - VM start-up order: SMP->DB->BE->FE (no error handling yet)
+#  - Provisioning scripts placeholders
+#
+#################################
+
+description: ASC Template
+
+parameters:
+#  availability_zone_smp0:
+#    type: string
+#    default: nova
+#  availability_zone_smp1:
+#    type: string
+#    default: nova
+#  availability_zone_fe0:
+#    type: string
+#    default: nova
+#  availability_zone_fe1:
+#    type: string
+#    default: nova
+#  availability_zone_db0:
+#    type: string
+#    default: nova
+#  availability_zone_db1:
+#    type: string
+#    default: nova
+#  availability_zone_be0:
+#    type: string
+#    default: nova
+#  availability_zone_be1:
+#    type: string
+#    default: nova
+#  availability_zone_be2:
+#    type: string
+#    default: nova
+#  availability_zone_be3:
+#    type: string
+#    default: nova
+#  availability_zone_be4:
+#    type: string
+#    default: nova
+
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+    default: This_is_the_SCP_name
+  vnf_id:
+    type: string
+    description: Unique ID for this VNF instance
+    default: This_is_ths_SCP_id
+
+  flavor_scp_be_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_scp_fe_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_smp_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  flavor_db_id:
+    type: string
+    description: flavor type
+    default: a1.Small
+  image_scp_be_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_be
+  image_scp_fe_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_fe    
+  image_smp_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_smp
+  image_db_id:
+    type: string
+    description: Image use to boot a server
+    default: asc_base_image_db
+
+  int_vscp_fe_cluster_net_id:
+    type: string
+    description: LAN2 FE Cluster/KA
+  int_vscp_fe_cluster_cidr:
+    type: string
+    description: Private Network2 Address (CIDR notation)
+  int_vscp_cluster_net_id:
+    type: string
+    description: LAN3 Cluster
+  int_vscp_cluster_cidr:
+    type: string
+    description: Private Network3 Address (CIDR notation)
+  int_vscp_db_network_net_id:
+    type: string
+    description: LAN4 DB
+  int_vscp_db_network_cidr:
+    type: string
+    description: Private Network4 Address (CIDR notation)
+  SIGNET_vrf_A1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_A
+  SIGNET_vrf_B1_direct_net_id:
+    type: string
+    description: Network name for SIGTRAN_B
+  Cricket_OCS_protected_net_id:
+    type: string
+    description: Network name for CRICKET_OCS
+  OAM_direct_net_id:
+    type: string
+    description: Network name for OAM
+  be0_Cricket_OCS_protected_ips:
+    type: string
+    label: be0 port 5 OAM ip address
+    description: be0 port 5 OAM ip address
+  be1_Cricket_OCS_protected_ips:
+    type: string
+    label: be1 port 5 OAM ip address
+    description: be1 port 5 OAM ip address
+  be2_Cricket_OCS_protected_ips:
+    type: string
+    label: be2 port 5 OAM ip address
+    description: be2 port 5 OAM ip address
+  be3_Cricket_OCS_protected_ips:
+    type: string
+    label: be3 port 5 OAM ip address
+    description: be3 port 5 OAM ip address
+  be4_Cricket_OCS_protected_ips:
+    type: string
+    label: be4 port 5 OAM ip address
+    description: be4 port 5 OAM ip address
+  be0_OAM_direct_ips:
+    type: string
+    label: be0 port 7 OAM ip address
+    description: be0 port 7 OAM ip address
+  be1_OAM_direct_ips:
+    type: string
+    label: be1 port 7 OAM ip address
+    description: be1 port 7 OAM ip address
+  be2_OAM_direct_ips:
+    type: string
+    label: be2 port 7 OAM ip address
+    description: be2 port 7 OAM ip address
+  be3_OAM_direct_ips:
+    type: string
+    label: be3 port 7 OAM ip address
+    description: be3 port 7 OAM ip address
+  be4_OAM_direct_ips:
+    type: string
+    label: be4 port 7 OAM ip address
+    description: be4 port 7 OAM ip address
+  fe0_SIGNET_vrf_A1_direct_ips:
+    type: string
+    label: fe0 port 0 SIGTRAN ip address
+    description: fe0 port 0 SIGTRAN ip address
+  fe0_OAM_direct_ips:
+    type: string
+    label: fe0 port 7 OAM ip address
+    description: fe0 port 7 OAM ip address
+  fe1_SIGNET_vrf_B1_direct_ips:
+    type: string
+    label: fe1 port 1 SIGTRAN ip address
+    description: fe1 port 1 SIGTRAN ip address
+  fe1_OAM_direct_ips:
+    type: string
+    label: fe1 port 7 OAM ip address
+    description: fe1 port 7 OAM ip address
+  smp0_OAM_direct_ips:
+    type: string
+    label: smp0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  smp1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: smp1 port 7 OAM ip address
+  db0_OAM_direct_ips:
+    type: string
+    label: db0 port 7 OAM ip address
+    description: smp0 port 7 OAM ip address
+  db1_OAM_direct_ips:
+    type: string
+    label: smp1 port 7 OAM ip address
+    description: db1 port 7 OAM ip address
+  vm_scp_be0_name:
+    type: string
+    default: vSCP_BE0
+    description: name of VM
+  vm_scp_be1_name:
+    type: string
+    default: vSCP_BE1
+    description: name of VM    
+  vm_scp_be2_name:
+    type: string
+    default: vSCP_BE2
+    description: name of VM
+  vm_scp_be3_name:
+    type: string
+    default: vSCP_BE3
+    description: name of VM
+  vm_scp_be4_name:
+    type: string
+    default: vSCP_BE4
+    description: name of VM
+  vm_scp_fe0_name:
+    type: string
+    default: vSCP_FE0
+    description: name of VM
+  vm_scp_fe1_name:
+    type: string
+    default: vSCP_FE1
+    description: name of VM
+  vm_smp0_name:
+    type: string
+    default: vSMP0
+    description: name of VM
+  vm_smp1_name:
+    type: string
+    default: vSMP1
+    description: name of VM
+  vm_db0_name:
+    type: string
+    default: vDB0
+    description: name of VM
+  vm_db1_name:
+    type: string
+    default: vDB1
+    description: name of VM
+
+resources:
+#  scp_be_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_be_wait_handle }
+#      count: 5
+#      timeout: 300
+#  scp_be_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  scp_fe_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: scp_fe_wait_handle }
+#      count: 2
+#      timeout: 300
+#  scp_fe_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  smp_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: smp_wait_handle }
+#      count: 2
+#      timeout: 300
+#  smp_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+#
+#  db_wait_condition:
+#    type: OS::Heat::WaitCondition
+#    properties:
+#      handle: { get_resource: db_wait_handle }
+#      count: 2
+#      timeout: 300
+#  db_wait_handle:
+#    type: OS::Heat::WaitConditionHandle
+
+  FE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"] 
+  BE_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  SMP_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+  DB_Affinity:
+    type: OS::Nova::ServerGroup
+    properties:
+      policies: ["anti-affinity"]
+      
+  FE_Clustering_KA:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_fe_cluster_net_id }
+
+  FE_Clustering_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+      cidr: { get_param: int_vscp_fe_cluster_cidr }
+
+  Clustering_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_cluster_net_id }
+
+  Clustering_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: Clustering_Network }
+      cidr: { get_param: int_vscp_cluster_cidr }
+
+  DB_Network:
+    type: OS::Contrail::VirtualNetwork
+    properties:
+      name: { get_param: int_vscp_db_network_net_id }
+
+  DB_Network_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: DB_Network }
+      cidr: { get_param: int_vscp_db_network_cidr }
+
+  server_scp_be0:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be0_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be0 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be0_port_3 }
+      - port: { get_resource: be0_port_4 }
+      - port: { get_resource: be0_port_5 }
+      - port: { get_resource: be0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be0_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be0_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}]
+
+  be0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}]
+
+  server_scp_be1:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be1_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be1 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be1_port_3 }
+      - port: { get_resource: be1_port_4 }
+      - port: { get_resource: be1_port_5 }
+      - port: { get_resource: be1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be1_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be1_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}]
+
+  be1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}]
+
+  server_scp_be2:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be2_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be2 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be2_port_3 }
+      - port: { get_resource: be2_port_4 }
+      - port: { get_resource: be2_port_5 }
+      - port: { get_resource: be2_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be2_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be2_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be2_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be2_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}]
+
+  be2_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}]
+
+  server_scp_be3:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be3_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be3 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be3_port_3 }
+      - port: { get_resource: be3_port_4 }
+      - port: { get_resource: be3_port_5 }
+      - port: { get_resource: be3_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be3_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be3_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be3_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be3_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}]
+
+  be3_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}]
+
+  server_scp_be4:
+    type: OS::Nova::Server
+#    depends on: db_wait_condition
+    properties:
+      name: { get_param: vm_scp_be4_name }
+      image: { get_param: image_scp_be_id }
+#      availability_zone: { get_param: availability_zone_be4 }
+      flavor: { get_param: flavor_scp_be_id }
+      scheduler_hints: { group: { get_resource: BE_Affinity } }
+      networks:
+      - port: { get_resource: be4_port_3 }
+      - port: { get_resource: be4_port_4 }
+      - port: { get_resource: be4_port_5 }
+      - port: { get_resource: be4_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_be4_name}
+#            wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] }
+
+  be4_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  be4_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  be4_port_5:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: Cricket_OCS_protected_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}]
+
+  be4_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}]
+
+  server_scp_fe0:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe0_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe0 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe0_port_0 }
+      - port: { get_resource: fe0_port_2 }
+      - port: { get_resource: fe0_port_3 }
+      - port: { get_resource: fe0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe0_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe0_port_0:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_A1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}]
+
+  fe0_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe0_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}]
+
+  server_scp_fe1:
+    type: OS::Nova::Server
+#    depends on: scp_be_wait_condition
+    properties:
+      name: { get_param: vm_scp_fe1_name }
+      image: { get_param: image_scp_fe_id }
+#      availability_zone: { get_param: availability_zone_fe1 }
+      flavor: { get_param: flavor_scp_fe_id }
+      scheduler_hints: { group: { get_resource: FE_Affinity } }
+      networks:
+      - port: { get_resource: fe1_port_1 }
+      - port: { get_resource: fe1_port_2 }
+      - port: { get_resource: fe1_port_3 }
+      - port: { get_resource: fe1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_scp_fe1_name}
+#            wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] }
+
+  fe1_port_1:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: SIGNET_vrf_B1_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}]
+
+  fe1_port_2:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: FE_Clustering_KA }
+
+  fe1_port_3:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: Clustering_Network }
+
+  fe1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}]
+
+  server_smp0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp0_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp0 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp0_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}]
+
+  server_smp1:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: vm_smp1_name }
+      image: { get_param: image_smp_id }
+#      availability_zone: { get_param: availability_zone_smp1 }
+      flavor: { get_param: flavor_smp_id }
+      scheduler_hints: { group: { get_resource: SMP_Affinity } }
+      networks:
+      - port: { get_resource: smp1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_smp1_name}
+#            wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] }
+
+  smp1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}]
+
+  server_db0:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db0_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db0 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db0_port_4 }
+      - port: { get_resource: db0_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db0_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db0_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db0_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}]
+
+  server_db1:
+    type: OS::Nova::Server
+#    depends_on: smp_wait_condition
+    properties:
+      name: { get_param: vm_db1_name }
+      image: { get_param: image_db_id }
+#      availability_zone: { get_param: availability_zone_db1 }
+      flavor: { get_param: flavor_db_id }
+      scheduler_hints: { group: { get_resource: DB_Affinity } }
+      networks:
+      - port: { get_resource: db1_port_4 }
+      - port: { get_resource: db1_port_7 }
+      metadata:
+        vnf_id: { get_param: vnf_id }
+      user_data:
+        str_replace:
+          template: |
+            #!/bin/bash
+            #todo: provision $vm_name
+            wc_notify --data-binary '{"status": "SUCCESS"}'
+          params:
+            $vm_name: {get_param: vm_db1_name}
+#            wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] }
+
+  db1_port_4:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: DB_Network }
+
+  db1_port_7:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: OAM_direct_net_id }
+      fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/ci/conf/credentials.yaml b/ui-ci/src/main/resources/ci/conf/credentials.yaml
new file mode 100644
index 0000000..a30d8ce
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/conf/credentials.yaml
@@ -0,0 +1,48 @@
+    designer: {
+        username: cs0008,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    admin: {
+        username: jh0003,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    ops: {
+        username: op0001,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    tester: {
+        username: jm0007,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    governor: {
+        username: gv0001,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    product_strategist: {
+        username: ps0001,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    product_manager: {
+        username: pm0001,
+        password: demo,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
+    product_local: {
+        username: pm0001,
+        password: 123123a,
+        firstname: ASDC,
+        lastname: KASPIN
+    }
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/ci/conf/log4j.properties b/ui-ci/src/main/resources/ci/conf/log4j.properties
new file mode 100644
index 0000000..3e159ec
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/conf/log4j.properties
@@ -0,0 +1,34 @@
+# Define the root logger with appender file
+log4j.rootLogger = DEBUG, FILE, stdout
+
+# Define the file appender
+log4j.appender.FILE=org.apache.log4j.RollingFileAppender
+log4j.appender.FILE.File=${targetlog}logs/ci-log.out
+
+# Define the layout for file appender
+log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
+log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%10c] : %m%n
+
+# Set the maximum file size before rollover
+log4j.appender.FILE.maxFileSize=5MB
+
+# Set the the backup index
+log4j.appender.FILE.maxBackupIndex=10
+
+
+#############################################################
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+#log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %10c:%L - %m%n
+
+log4j.logger.org.apache.cassandra.service.StorageProxy=DEBUG
+log4j.logger.com.thinkaurelius.titan.diskstorage.cassandra.CassandraTransaction=INFO, FILE, stdout
+
+log4j.logger.org.openecomp.sdc.ci.tests.utils=TRACE, FILE, stdout
+log4j.additivity.org.openecomp.sdc.ci.tests.utils=false
+
+
diff --git a/ui-ci/src/main/resources/ci/conf/sdc-packages.yaml b/ui-ci/src/main/resources/ci/conf/sdc-packages.yaml
new file mode 100644
index 0000000..dcb78ee
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/conf/sdc-packages.yaml
@@ -0,0 +1,2 @@
+packages:
+ - org.openecomp.sdc.ci.tests.execute.resourceui
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/ci/conf/sdc.yaml b/ui-ci/src/main/resources/ci/conf/sdc.yaml
new file mode 100644
index 0000000..8e84fec
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/conf/sdc.yaml
@@ -0,0 +1,57 @@
+outputFolder: target
+reportName: index.html
+catalogBeHost: localhost
+catalogFeHost: localhost
+esHost: eshost
+disributionClientHost: disClient
+catalogFePort: 8181
+catalogBePort: 8080
+disributionClientPort: 8181
+esPort: 9200
+neoHost: neoHost
+neoPort: 7474
+neoDBusername: neo4j	
+neoDBpassword: 123456
+url: http://localhost:8285/sdc1
+remoteTestingMachineIP: 1.2.3.4
+remoteTestingMachinePort: 5555
+remoteTesting: false
+
+resourceConfigDir: src/test/resources/CI/tests
+componentsConfigDir: src/test/resources/CI/components
+importResourceConfigDir: src/test/resources/CI/importResource
+importResourceTestsConfigDir: src/test/resources/CI/importResourceTests
+errorConfigurationFile: ../catalog-be/src/main/resources/config/error-configuration.yaml
+configurationFile: ../catalog-be/src/main/resources/config/configuration.yaml
+importTypesConfigDir: src/test/resources/CI/importTypesTest
+
+
+titanPropertiesFile: src/main/resources/ci/conf/titan.properties
+
+stopOnClassFailure: false
+
+#List of non-abstract resources to keep during titan cleanup between tests
+#Only 1.0 version will be kept
+resourcesNotToDelete:
+     - tosca.nodes.Compute
+     - tosca.nodes.Database
+     - tosca.nodes.ObjectStorage
+     - tosca.nodes.BlockStorage
+     - tosca.nodes.LoadBalancer
+     - org.openecomp.resource.cp.Port
+     - org.openecomp.resource.vl.Network
+
+#Resource categories to keep (including all their subcategories)
+resourceCategoriesNotToDelete:
+     - Generic
+     - Network L2-3
+     - Network L4+
+     - Application L4+
+     - Network Connectivity
+
+#Service categories to keep
+serviceCategoriesNotToDelete:
+     - Mobility
+     - Network L1-3
+     - Network L4
+     - VoIP Call Control
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/ci/conf/titan.properties b/ui-ci/src/main/resources/ci/conf/titan.properties
new file mode 100644
index 0000000..94d12cf
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/conf/titan.properties
@@ -0,0 +1,7 @@
+storage.backend=cassandra
+storage.hostname=cassandrahost
+storage.port=9160
+
+cache.db-cache-clean-wait = 20
+cache.db-cache-time = 180000
+cache.db-cache-size = 0.5
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/ci/scripts/startTest.sh b/ui-ci/src/main/resources/ci/scripts/startTest.sh
new file mode 100644
index 0000000..b4b2cb1
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/scripts/startTest.sh
@@ -0,0 +1,96 @@
+#!/bin/bash
+
+function usage {
+	echo "Usage: $0 <jar file>"
+}
+
+function exitOnError() {
+        if [ $1 -ne 0 ]
+        then
+                echo "Failed running task $2"
+                exit 2
+        fi
+}
+
+if [ $# -lt 1 ]
+then
+	usage
+	exit 2
+fi
+
+CURRENT_DIR=`pwd`
+BASEDIR=$(dirname $0)
+
+if [ ${BASEDIR:0:1} = "/" ]
+then
+        FULL_PATH=$BASEDIR
+else
+        FULL_PATH=$CURRENT_DIR/$BASEDIR
+fi
+
+LOGS_PROP_FILE=file:${FULL_PATH}/conf/log4j.properties
+#############################################
+TARGET_DIR=${FULL_PATH}/target
+CONF_FILE=${FULL_PATH}/conf/sdc.yaml
+
+DEBUG=true
+MainClass=org.openecomp.sdc.ci.tests.run.StartTest
+
+JAR_FILE=$1
+SUITE_FILE=$2
+FILES_TEST=$3
+
+if [ -z "$3" ]
+then
+		FILES_TEST=${FULL_PATH}/Files
+		echo "$3"
+fi
+
+#TARGET_DIR=`echo ${TARGET_DIR} | sed 's/\//\//g'`
+#echo $TARGET_DIR
+
+TESTS_DIR=/opt/app/sdc/ci/resources/tests
+COMPONENTS_DIR=/opt/app/sdc/ci/resources/components
+
+#sed -i 's#\(outputFolder:\).*#\1 '${TARGET_DIR}'#g' $CONF_FILE
+#sed -i 's#\(resourceConfigDir:\).*#\1 '${TESTS_DIR}'#g' $CONF_FILE
+#sed -i 's#\(componentsConfigDir:\).*#\1 '${COMPONENTS_DIR}'#g' $CONF_FILE
+TARGET_LOG_DIR="${TARGET_DIR}/"
+
+# mkdir -p ${TARGET_DIR}
+#if [ -d ${TARGET_DIR} ]
+#then
+#     rm -rf ${TARGET_DIR}/*
+#exitOnError $? "Failed_to_delete_target_dir"
+#fi
+
+debug_port=8800
+#JAVA_OPTION="-javaagent:/var/tmp/jacoco/lib/jacocoagent.jar=destfile=jacoco-it.exec"
+JAVA_OPTION=""
+case "$2" in
+	-debug) echo "Debug mode, Listen on port $debug_port"; JAVA_OPTION="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${debug_port}" ;;
+	"") echo "Standard mode";;
+	*) echo "USAGE: startTest.sh [-debug]";;
+esac
+
+cmd="nohup java $JAVA_OPTION -DdisplayException=true -Dtargetlog=${TARGET_LOG_DIR} -Dfilepath=${FILES_TEST} -Dconfig.resource=${CONF_FILE} -Ddebug=${DEBUG} -Dlog4j.configuration=${LOGS_PROP_FILE} -cp $JAR_FILE ${MainClass} $SUITE_FILE &" 
+
+#echo $cmd
+#console=`$cmd`
+
+if [ $DEBUG == "true" ]
+then
+	$cmd
+else
+	$cmd >> /dev/null
+fi 
+status=`echo $?`
+
+
+
+echo "##################################################"
+echo "################# status is ${status} #################" 
+echo "##################################################"
+
+exit $status 
+
diff --git a/ui-ci/src/main/resources/ci/testSuites/ui-ci.xml b/ui-ci/src/main/resources/ci/testSuites/ui-ci.xml
new file mode 100644
index 0000000..a6c2584
--- /dev/null
+++ b/ui-ci/src/main/resources/ci/testSuites/ui-ci.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
+<suite name="uitests" configfailurepolicy="continue">
+  <test name="uitests">
+    <classes>
+    	<!--onboard-->
+   		<class name="org.openecomp.sdc.ci.tests.execute.sanity.Onboard">
+   			  <methods>
+				<include name="onboardVNFTest"/>
+			  </methods>
+		</class>
+		<!--vf-->
+		<class name="org.openecomp.sdc.ci.tests.execute.sanity.Vf"/>
+    </classes>
+  </test> <!-- uitests -->
+</suite> <!-- uisuite -->
\ No newline at end of file
diff --git a/ui-ci/src/main/resources/images/gizmorambo.jpg b/ui-ci/src/main/resources/images/gizmorambo.jpg
new file mode 100644
index 0000000..c9a8fe8
--- /dev/null
+++ b/ui-ci/src/main/resources/images/gizmorambo.jpg
Binary files differ
diff --git a/ui-ci/src/test/Completetheform.js b/ui-ci/src/test/Completetheform.js
new file mode 100644
index 0000000..13779e2
--- /dev/null
+++ b/ui-ci/src/test/Completetheform.js
@@ -0,0 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+/**
+ * New node file
+ */
diff --git a/ui-ci/tarball.xml b/ui-ci/tarball.xml
new file mode 100644
index 0000000..1413038
--- /dev/null
+++ b/ui-ci/tarball.xml
@@ -0,0 +1,60 @@
+<assembly
+	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+	<id>bin</id>
+	<formats>
+		<format>tar</format>
+	</formats>
+	<files>
+		<file>
+			<source>${project.build.directory}/${project.artifactId}-${project.version}-jar-with-dependencies.jar</source>
+			<outputDirectory>./</outputDirectory>
+			<destName>${project.artifactId}-${project.version}-jar-with-dependencies.jar</destName>
+		</file>
+ 		<file>
+			<source>src/main/resources/ci/scripts/startTest.sh</source>
+			<outputDirectory>./</outputDirectory>
+			<destName>startTest.sh</destName>
+		</file>
+		<!--file> <source>src/main/resources/ci/scripts/postinstall</source> <outputDirectory>./</outputDirectory> 
+			<destName>postinstall</destName> </file -->
+		<file>
+			<source>src/main/resources/ci/conf/sdc.yaml</source>
+			<outputDirectory>conf</outputDirectory>
+			<destName>sdc.yaml</destName>
+		</file>
+		<file>
+			<source>src/main/resources/ci/conf/sdc-packages.yaml</source>
+			<outputDirectory>conf</outputDirectory>
+			<destName>sdc-packages.yaml</destName>
+		</file>
+		<file>
+			<source>../asdc-tests/src/main/resources/ci/conf/log4j.properties</source>
+			<outputDirectory>conf</outputDirectory>
+			<destName>log4j.properties</destName>
+		</file>
+		<file>
+			<source>src/main/resources/ci/conf/credentials.yaml</source>
+			<outputDirectory>conf</outputDirectory>
+			<destName>credentials.yaml</destName>
+		</file>
+
+	</files>
+
+	<fileSets>
+		<fileSet>
+			<directory>src/test/resources</directory>
+			<outputDirectory>./</outputDirectory>
+		</fileSet>
+		<fileSet>
+			<directory>src/main/resources/ci/testSuites</directory>
+	        <outputDirectory>./testSuites</outputDirectory>
+		</fileSet>
+		<fileSet>
+			<directory>src/main/resources/Files</directory>
+	        <outputDirectory>./Files</outputDirectory>
+		</fileSet>
+	</fileSets>
+
+</assembly>