1 package org.openecomp.sdc.uici.tests.datatypes;
3 import java.util.HashMap;
6 import java.util.Random;
8 import java.util.stream.Collectors;
10 import org.apache.commons.lang3.tuple.ImmutablePair;
11 import org.openecomp.sdc.uici.tests.datatypes.DataTestIdEnum.LeftPanelCanvasItems;
12 import org.openecomp.sdc.uici.tests.utilities.GeneralUIUtils;
13 import org.openqa.selenium.WebElement;
14 import org.openqa.selenium.interactions.Actions;
16 public final class CanvasManager {
17 private Map<String, CanvasElement> canvasElements;
18 private Actions actions;
19 private WebElement canvas;
20 private int reduceCanvasWidthFactor;
21 // Offsets Are used to find upper right corner of canvas element in order to
23 private static final int CANVAS_ELEMENT_Y_OFFSET = 40;
24 private static final int CANVAS_ELEMENT_X_OFFSET = 21; // 14 - 27
26 private CanvasManager() {
27 canvasElements = new HashMap<>();
28 actions = new Actions(GeneralUIUtils.getDriver());
29 canvas = GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS.getValue());
31 WebElement webElement = GeneralUIUtils
32 .getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.CANVAS_RIGHT_PANEL.getValue());
33 reduceCanvasWidthFactor = webElement.getSize().width;
34 } catch (Exception e) {
35 reduceCanvasWidthFactor = 0;
39 public static CanvasManager getCanvasManager() {
40 return new CanvasManager();
43 public List<CanvasElement> getCanvasElements() {
44 return canvasElements.values().stream().collect(Collectors.toList());
47 private void addCanvasElement(CanvasElement element) {
48 canvasElements.put(element.getUniqueId(), element);
51 private void moveElementOnCanvas(CanvasElement canvasElement, ImmutablePair<Integer, Integer> newLocation) {
52 GeneralUIUtils.waitForLoader();
53 GeneralUIUtils.sleep(500);
54 actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
55 actions.clickAndHold();
56 actions.moveToElement(canvas, newLocation.left, newLocation.right);
59 canvasElement.setLocation(newLocation);
60 GeneralUIUtils.waitForLoader();
64 public void moveElementOnCanvas(CanvasElement canvasElement) {
65 moveElementOnCanvas(canvasElement, getFreePosition());
68 public void deleteElementFromCanvas(CanvasElement canvasElement) {
69 GeneralUIUtils.waitForLoader();
70 actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
73 GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.GeneralCanvasItems.DELETE_INSTANCE_BUTTON.getValue())
75 GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.ModalItems.OK.getValue()).click();
76 canvasElements.remove(canvasElement.getUniqueId());
77 GeneralUIUtils.waitForLoader();
80 public void selectElementFromCanvas(CanvasElement canvasElement) {
81 GeneralUIUtils.waitForLoader();
82 actions.moveToElement(canvas, canvasElement.getLocation().left, canvasElement.getLocation().right);
85 GeneralUIUtils.waitForLoader();
88 public CanvasElement createElementOnCanvas(LeftPanelCanvasItems canvasItem) {
89 return createElementOnCanvas(canvasItem.getValue(), false);
93 * Creates Element on the Canvas - use the element name.
98 public CanvasElement createElementOnCanvas(String elementName) {
99 return createElementOnCanvas(elementName, true);
102 private CanvasElement createElementOnCanvas(String elementName, boolean addPrefix) {
104 elementName = DataTestIdEnum.LEFT_PANEL_PREFIX + elementName;
106 GeneralUIUtils.waitForLoader();
107 WebElement element = GeneralUIUtils.getWebElementWaitForVisible(elementName);
108 ImmutablePair<Integer, Integer> freePosition = getFreePosition();
109 actions.moveToElement(element, 0, 0);
110 actions.clickAndHold();
111 actions.moveToElement(canvas, freePosition.left, freePosition.right);
115 String uniqueId = elementName + "_" + UUID.randomUUID().toString();
116 CanvasElement canvasElement = new CanvasElement(uniqueId, elementName, freePosition);
117 addCanvasElement(canvasElement);
118 GeneralUIUtils.waitForLoader();
119 return canvasElement;
122 public CanvasElement createUniqueVFOnCanvas(LeftPanelCanvasItems canvasItem) {
123 GeneralUIUtils.waitForLoader();
124 WebElement element = GeneralUIUtils.getWebElementWaitForVisible(canvasItem.getValue());
125 ImmutablePair<Integer, Integer> freePosition = getFreePosition();
126 actions.moveToElement(element, 0, 0);
127 actions.clickAndHold();
128 actions.moveToElement(canvas, freePosition.left, freePosition.right);
132 String uniqueId = canvasItem.name() + "_" + UUID.randomUUID().toString();
133 CanvasElement canvasElement = new CanvasElement(uniqueId, canvasItem.getValue(), freePosition);
134 addCanvasElement(canvasElement);
135 GeneralUIUtils.waitForLoader();
136 return canvasElement;
139 private ImmutablePair<Integer, Integer> getFreePosition() {
140 // TODO ui-ci use better method
141 ImmutablePair<Integer, Integer> randomPosition = null;
142 boolean freePosition = false;
144 while (!freePosition) {
145 ImmutablePair<Integer, Integer> tempRandomPosition = getRandomPosition();
146 freePosition = !canvasElements.values().stream().map(e -> e.getLocation())
147 .filter(e -> Math.abs(e.left - tempRandomPosition.left) < minSpace
148 && Math.abs(e.right - tempRandomPosition.right) < minSpace)
149 .findAny().isPresent();
150 randomPosition = tempRandomPosition;
152 return randomPosition;
155 private ImmutablePair<Integer, Integer> getRandomPosition() {
157 Random random = new Random();
158 int xElement = random.nextInt(canvas.getSize().width - 2 * edgeBuffer - reduceCanvasWidthFactor) + edgeBuffer;
159 int yElement = random.nextInt(canvas.getSize().height - 2 * edgeBuffer) + edgeBuffer;
160 return new ImmutablePair<Integer, Integer>(xElement, yElement);
164 * Links two elements on canvas.<br>
165 * Currently Supports Only elements in the default size.<br>
166 * Will not work for container type or smaller elements (cp, vl etc...)<br>
168 * @param firstElement
169 * @param secondElement
171 public void linkElements(CanvasElement firstElement, CanvasElement secondElement) {
172 GeneralUIUtils.waitForLoader();
173 drawSimpleLink(firstElement, secondElement);
174 selectReqAndCapAndConnect();
176 GeneralUIUtils.waitForLoader();
180 private void selectReqAndCapAndConnect() {
182 GeneralUIUtils.getWebElementsListWaitForVisible(DataTestIdEnum.LinkMenuItems.LINK_ITEM_CAP.getValue()).get(0)
185 GeneralUIUtils.getWebElementsListWaitForVisible(DataTestIdEnum.LinkMenuItems.LINK_ITEM_REQ.getValue()).get(0)
188 GeneralUIUtils.getWebElementWaitForVisible(DataTestIdEnum.LinkMenuItems.CONNECT_BUTTON.getValue()).click();
192 private void drawSimpleLink(CanvasElement firstElement, CanvasElement secondElement) {
194 int yOffset = CANVAS_ELEMENT_Y_OFFSET;
195 int xOffset = CANVAS_ELEMENT_X_OFFSET;
196 actions.moveToElement(canvas, firstElement.getLocation().left + xOffset,
197 firstElement.getLocation().right - yOffset);
199 actions.clickAndHold();
200 actions.moveToElement(canvas, secondElement.getLocation().left + xOffset,
201 secondElement.getLocation().right - yOffset);
204 GeneralUIUtils.waitForLoader();