You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@falcon.apache.org by pa...@apache.org on 2016/03/01 09:25:55 UTC
[09/51] [partial] falcon git commit: FALCON-1830 Removed code source
directories and updated pom
http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/InstancePage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/InstancePage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/InstancePage.java
deleted file mode 100644
index 48193a2..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/InstancePage.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.falcon.regression.ui.search;
-
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.FindBys;
-import org.openqa.selenium.support.PageFactory;
-
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Set;
-
-
-/**
- * Class representation of Search UI entity page.
- */
-public class InstancePage extends AbstractSearchPage {
- private final String nominalTime;
-
- /**
- * Possible instance actions available on instance page.
- */
- public enum Button {
- Resume,
- Rerun,
- Suspend,
- Kill
- }
-
- public InstancePage(WebDriver driver) {
- super(driver);
- nominalTime = driver.findElement(By.xpath("//h3")).getText().split("\\|")[1].trim();
- }
-
-
- @FindBys({
- @FindBy(className = "detailsBox"),
- @FindBy(className = "row")
- })
- private WebElement detailsBox;
-
- @FindBys({
- @FindBy(xpath = "//h3/a")
- })
- private WebElement entityLink;
-
-
-
- @Override
- public void checkPage() {
- UIAssert.assertDisplayed(detailsBox, "Dependency box");
- UIAssert.assertDisplayed(entityLink, "Link to parrent entity");
- }
-
- public InstancePage refreshPage() {
- return backToEntityPage().openInstance(nominalTime);
- }
-
- public String getStatus() {
- return driver.findElement(By.xpath("//h4[@class='instance-title']/span")).getText();
- }
-
- public String getEntityName() {
- return entityLink.getText();
- }
-
- public boolean isLineagePresent() {
- List<WebElement> lineage = driver.findElements(By.className("lineage-graph"));
- return !lineage.isEmpty() && lineage.get(0).isDisplayed();
- }
-
-
- public Set<Button> getButtons(boolean active) {
- List<WebElement> buttons = detailsBox.findElement(By.className("buttonCell"))
- .findElements(By.className("btn"));
- Set<Button> result = EnumSet.noneOf(Button.class);
- for (WebElement button : buttons) {
- if ((button.getAttribute("disabled") == null) == active) {
- result.add(Button.valueOf(button.getText()));
- }
- }
- return result;
- }
-
- public void clickButton(Button button) {
- detailsBox.findElement(By.className("buttonCell"))
- .findElements(By.className("btn")).get(button.ordinal()).click();
- waitForAngularToFinish();
- }
-
- public EntityPage backToEntityPage() {
- entityLink.click();
- return PageFactory.initElements(driver, EntityPage.class);
- }
-}
http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/LoginPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/LoginPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/LoginPage.java
deleted file mode 100644
index 5b261fb..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/LoginPage.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.falcon.regression.ui.search;
-
-import org.apache.falcon.regression.core.enumsAndConstants.MerlinConstants;
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.apache.log4j.Logger;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.FindBys;
-import org.openqa.selenium.support.PageFactory;
-import org.testng.Assert;
-
-/** Page object for the Login Page. */
-public class LoginPage extends AbstractSearchPage {
- private static final Logger LOGGER = Logger.getLogger(LoginPage.class);
- public static final String UI_DEFAULT_USER = MerlinConstants.CURRENT_USER_NAME;
-
- public LoginPage(WebDriver driver) {
- super(driver);
- }
-
- @FindBys({
- @FindBy(className = "mainUIView"),
- @FindBy(className = "login")
- })
- protected WebElement loginElem;
-
- public static LoginPage open(WebDriver driver) {
- driver.get(UI_URL);
- LOGGER.info("Opened a URL: " + UI_URL);
- return PageFactory.initElements(driver, LoginPage.class);
- }
-
- private WebElement getUserTextBox() {
- return loginElem.findElement(By.xpath("//input[@name='user']"));
- }
-
- public void appendToUserName(String text) {
- getUserTextBox().sendKeys(text);
- }
-
- public String getUserVisibleWarning() {
- final WebElement userTextBox = getUserTextBox();
-
- final WebElement userWarnLabel = getParentElement(userTextBox).findElement(
- By.xpath("//label[contains(@class, 'custom-danger') and contains(@class, 'validationMessageGral')]"));
- if (userWarnLabel.isDisplayed()) {
- return userWarnLabel.getText();
- }
- return "";
- }
-
- /** Try to login by pressing the login button. */
- public void tryLogin() {
- LOGGER.info("Trying to login.");
- final WebElement loginButton = loginElem.findElement(By.id("login.submit"));
- UIAssert.assertDisplayed(loginButton, "Login button");
- loginButton.click();
- }
-
- /** Login successfully and take to the next page i.e. search page. */
- public SearchPage doDefaultLogin() {
- if (!MerlinConstants.IS_SECURE) {
- getUserTextBox().clear();
- appendToUserName(UI_DEFAULT_USER);
- tryLogin();
- }
- LOGGER.info("Search page should have opened.");
- final SearchPage searchPage = PageFactory.initElements(driver, SearchPage.class);
- searchPage.checkPage();
- final PageHeader searchHeader = searchPage.getPageHeader();
- if (!MerlinConstants.IS_SECURE) {
- searchHeader.checkLoggedIn();
- Assert.assertEquals(searchHeader.getLoggedInUser(), LoginPage.UI_DEFAULT_USER,
- "Unexpected user is displayed");
- }
- return searchPage;
- }
-
- @Override
- public void checkPage() {
- UIAssert.assertDisplayed(loginElem, "Cluster box");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/MirrorWizardPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/MirrorWizardPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/MirrorWizardPage.java
deleted file mode 100644
index f990c92..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/MirrorWizardPage.java
+++ /dev/null
@@ -1,517 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.falcon.regression.ui.search;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.falcon.cli.FalconCLI;
-import org.apache.falcon.entity.v0.Frequency;
-import org.apache.falcon.entity.v0.cluster.Interfacetype;
-import org.apache.falcon.entity.v0.process.ACL;
-import org.apache.falcon.entity.v0.process.Retry;
-import org.apache.falcon.regression.Entities.ClusterMerlin;
-import org.apache.falcon.regression.Entities.RecipeMerlin;
-import org.apache.falcon.regression.core.util.TimeUtil;
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.apache.log4j.Logger;
-import org.joda.time.DateTime;
-import org.joda.time.format.DateTimeFormat;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.FindBys;
-
-import java.util.EnumMap;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/** Page object of the Mirror creation page. */
-public class MirrorWizardPage extends AbstractSearchPage {
- private static final Logger LOGGER = Logger.getLogger(MirrorWizardPage.class);
- @FindBys({
- @FindBy(className = "mainUIView"),
- @FindBy(className = "formPage")
- })
- private WebElement mirrorBox;
-
- public MirrorWizardPage(WebDriver driver) {
- super(driver);
- }
-
- @Override
- public void checkPage() {
- UIAssert.assertDisplayed(mirrorBox, "Mirror box");
- }
-
-
- public void setName(String name) {
- clearAndSetByNgModel("UIModel.name", name);
- }
-
- public void setTags(List<String> tags) {
- //TODO add code here
- }
-
- public void setMirrorType(FalconCLI.RecipeOperation recipeOperation) {
- switch (recipeOperation) {
- case HDFS_REPLICATION:
- driver.findElement(By.xpath("//button[contains(.,'File System')]")).click();
- break;
- case HIVE_DISASTER_RECOVERY:
- driver.findElement(By.xpath("//button[contains(.,'HIVE')]")).click();
- break;
- default:
- break;
- }
- }
-
-
- public void setHiveReplication(RecipeMerlin recipeMerlin) {
- if (StringUtils.isNotEmpty(recipeMerlin.getSourceTable())) {
- clickById("targetHIVETablesRadio");
- clearAndSetByNgModel("UIModel.source.hiveDatabase", recipeMerlin.getSourceDb());
- clearAndSetByNgModel("UIModel.source.hiveTables", recipeMerlin.getSourceTable());
- } else {
- clickById("targetHIVEDatabaseRadio");
- clearAndSetByNgModel("UIModel.source.hiveDatabases", recipeMerlin.getSourceDb());
- }
- }
-
-
- public void setStartTime(String validityStartStr) {
- final DateTime startDate = TimeUtil.oozieDateToDate(validityStartStr);
-
- clearAndSetByNgModel("UIModel.validity.start", DateTimeFormat.forPattern("MM/dd/yyyy").print(startDate));
- final WebElement startTimeBox = driver.findElement(By.className("startTimeBox"));
- final List<WebElement> startHourAndMinute = startTimeBox.findElements(By.tagName("input"));
- final WebElement hourText = startHourAndMinute.get(0);
- final WebElement minuteText = startHourAndMinute.get(1);
- clearAndSet(hourText, DateTimeFormat.forPattern("hh").print(startDate));
- clearAndSet(minuteText, DateTimeFormat.forPattern("mm").print(startDate));
- final WebElement amPmButton = startTimeBox.findElement(By.tagName("button"));
- if (!amPmButton.getText().equals(DateTimeFormat.forPattern("a").print(startDate))) {
- amPmButton.click();
- }
- }
-
- public void setEndTime(String validityEndStr) {
- final DateTime validityEnd = TimeUtil.oozieDateToDate(validityEndStr);
-
- clearAndSetByNgModel("UIModel.validity.end", DateTimeFormat.forPattern("MM/dd/yyyy").print(validityEnd));
- final WebElement startTimeBox = driver.findElement(By.className("endTimeBox"));
- final List<WebElement> startHourAndMinute = startTimeBox.findElements(By.tagName("input"));
- final WebElement hourText = startHourAndMinute.get(0);
- final WebElement minuteText = startHourAndMinute.get(1);
- clearAndSet(hourText, DateTimeFormat.forPattern("hh").print(validityEnd));
- clearAndSet(minuteText, DateTimeFormat.forPattern("mm").print(validityEnd));
- final WebElement amPmButton = startTimeBox.findElement(By.tagName("button"));
- if (!amPmButton.getText().equals(DateTimeFormat.forPattern("a").print(validityEnd))) {
- amPmButton.click();
- }
- }
-
- public void toggleAdvancedOptions() {
- final WebElement advanceOption = driver.findElement(By.xpath("//h4[contains(.,'Advanced options')]"));
- advanceOption.click();
- }
-
- public void setFrequency(Frequency frequency) {
- clearAndSetByNgModel("UIModel.frequency.number", frequency.getFrequency());
- selectNgModelByVisibleText("UIModel.frequency.unit", frequency.getTimeUnit().name().toLowerCase());
- }
-
- public void setHdfsDistCpMaxMaps(String distCpMaxMaps) {
- clearAndSetByNgModel("UIModel.allocation.hdfs.maxMaps", distCpMaxMaps);
- }
-
-
- public void setHdfsMaxBandwidth(String replicationMaxMaps) {
- clearAndSetByNgModel("UIModel.allocation.hdfs.maxBandwidth", replicationMaxMaps);
- }
-
- public void setHiveDistCpMaxMaps(String distCpMaxMaps) {
- clearAndSetByNgModel("UIModel.allocation.hive.maxMapsDistcp", distCpMaxMaps);
- }
-
-
- public void setHiveReplicationMaxMaps(String replicationMaxMaps) {
- clearAndSetByNgModel("UIModel.allocation.hive.maxMapsMirror", replicationMaxMaps);
- }
-
- public void setMaxEvents(String maxEvents) {
- clearAndSetByNgModel("UIModel.allocation.hive.maxMapsEvents", maxEvents);
- }
-
- public void setHiveMaxBandwidth(String maxBandWidth) {
- clearAndSetByNgModel("UIModel.allocation.hive.maxBandwidth", maxBandWidth);
- }
-
-
- public void setSourceInfo(ClusterMerlin srcCluster) {
- setSourceStaging(srcCluster.getLocation("staging"));
- setSourceHiveEndpoint(srcCluster.getInterfaceEndpoint(Interfacetype.REGISTRY));
- }
-
- public void setSourceHiveEndpoint(String hiveEndpoint) {
- clearAndSetByNgModel("UIModel.hiveOptions.source.hiveServerToEndpoint", hiveEndpoint);
- }
-
- public void setSourceStaging(String stagingLocation) {
- clearAndSetByNgModel("UIModel.hiveOptions.source.stagingPath", stagingLocation);
- }
-
- public void setTargetInfo(ClusterMerlin tgtCluster) {
- setTargetStaging(tgtCluster.getLocation("staging"));
- setTargetHiveEndpoint(tgtCluster.getInterfaceEndpoint(Interfacetype.REGISTRY));
- }
-
- public void setTargetHiveEndpoint(String hiveEndPoint) {
- clearAndSetByNgModel("UIModel.hiveOptions.target.hiveServerToEndpoint", hiveEndPoint);
- }
-
- public void setTargetStaging(String hiveEndpoint) {
- clearAndSetByNgModel("UIModel.hiveOptions.target.stagingPath", hiveEndpoint);
- }
-
- public void setRetry(Retry retry) {
- selectNgModelByVisibleText("UIModel.retry.policy", retry.getPolicy().toString().toUpperCase());
- clearAndSetByNgModel("UIModel.retry.delay.number", retry.getDelay().getFrequency());
- selectNgModelByVisibleText("UIModel.retry.delay.unit", retry.getDelay().getTimeUnit().name().toLowerCase());
- clearAndSetByNgModel("UIModel.retry.attempts", String.valueOf(retry.getAttempts()));
- }
-
-
- public void setAcl(ACL acl) {
- setAclOwner(acl.getOwner());
- setAclGroup(acl.getGroup());
- setAclPermission(acl.getPermission());
- }
-
- public void setAclOwner(String aclOwner) {
- clearAndSetSlowlyByNgModel("UIModel.acl.owner", aclOwner);
- }
-
- public boolean isAclOwnerWarningDisplayed() {
- final WebElement warning =
- findElementByNgModel("UIModel.acl.owner").findElement(By.xpath("./following-sibling::*"));
- waitForAngularToFinish();
- return warning.isDisplayed();
- }
-
- public void setAclGroup(String aclGroup) {
- clearAndSetSlowlyByNgModel("UIModel.acl.group", aclGroup);
- }
-
- public boolean isAclGroupWarningDisplayed() {
- final WebElement warning =
- findElementByNgModel("UIModel.acl.group").findElement(By.xpath("./following-sibling::*"));
- waitForAngularToFinish();
- return warning.isDisplayed();
- }
-
- public void setAclPermission(String aclPermission) {
- clearAndSetSlowlyByNgModel("UIModel.acl.permissions", aclPermission);
- }
-
- public boolean isAclPermissionWarningDisplayed() {
- final WebElement warning =
- findElementByNgModel("UIModel.acl.permissions").findElement(By.xpath("./following-sibling::*"));
- waitForAngularToFinish();
- return warning.isDisplayed();
- }
-
- public void next() {
- final WebElement nextButton = driver.findElement(By.xpath("//button[contains(.,'Next')]"));
- nextButton.click();
- }
-
- public void previous() {
- final WebElement prevButton = driver.findElement(By.xpath("//button[contains(.,'Previous')]"));
- prevButton.click();
- }
-
- public void silentPrevious() {
- try {
- previous();
- } catch (Exception ignore) {
- //ignore
- }
- }
-
- public void cancel() {
- driver.findElement(By.xpath("//a[contains(.,'Cancel')]"));
- }
-
- public void save() {
- final WebElement saveButton = driver.findElement(By.xpath("//button[contains(.,'Save')]"));
- UIAssert.assertDisplayed(saveButton, "Save button in not displayed.");
- saveButton.click();
- waitForAlert();
- }
-
- public ClusterBlock getSourceBlock() {
- return new ClusterBlock("Source");
- }
-
- public ClusterBlock getTargetBlock() {
- return new ClusterBlock("Target");
- }
-
- /**
- * Populates hive dr UI with parameters from recipe.
- * @param recipe recipe
- * @param overwriteDefaults should it overwrite HiveDR default values automatically picked up by UI
- */
- public void applyRecipe(RecipeMerlin recipe, boolean overwriteDefaults) {
- final ClusterMerlin srcCluster = recipe.getSrcCluster();
- final ClusterMerlin tgtCluster = recipe.getTgtCluster();
- setName(recipe.getName());
- setTags(recipe.getTags());
- setMirrorType(recipe.getRecipeOperation());
- getSourceBlock().selectCluster(srcCluster.getName());
- getTargetBlock().selectCluster(tgtCluster.getName());
- getSourceBlock().selectRunHere();
- setStartTime(recipe.getValidityStart());
- setEndTime(recipe.getValidityEnd());
- toggleAdvancedOptions();
- switch (recipe.getRecipeOperation()) {
- case HDFS_REPLICATION:
- getSourceBlock().setPath(recipe.getSourceDir());
- getTargetBlock().setPath(recipe.getTargetDir());
- setHdfsDistCpMaxMaps(recipe.getDistCpMaxMaps());
- setHdfsMaxBandwidth(recipe.getDistCpMaxMaps());
- break;
- case HIVE_DISASTER_RECOVERY:
- setHiveReplication(recipe);
- setHiveDistCpMaxMaps(recipe.getDistCpMaxMaps());
- setHiveReplicationMaxMaps(recipe.getReplicationMaxMaps());
- setMaxEvents(recipe.getMaxEvents());
- setHiveMaxBandwidth(recipe.getMapBandwidth());
- if (overwriteDefaults) {
- setSourceInfo(recipe.getSrcCluster());
- setTargetInfo(recipe.getTgtCluster());
- }
- break;
- default:
- break;
- }
- setFrequency(recipe.getFrequency());
- setRetry(recipe.getRetry());
- setAcl(recipe.getAcl());
- }
-
- public int getStepNumber() {
- try {
- driver.findElement(By.xpath("//button[contains(.,'Previous')]"));
- return 2;
- } catch (Exception ignore) {
- //ignore
- }
- return 1;
- }
-
- public Map<Summary, String> getSummaryProperties() {
- String formText = driver.findElement(By.id("formSummaryBox")).getText();
- Map<Summary, String> props = new EnumMap<>(Summary.class);
- props.put(Summary.NAME, getBetween(formText, "Name", "Type"));
- props.put(Summary.TYPE, getBetween(formText, "Type", "Tags"));
- props.put(Summary.TAGS, getBetween(formText, "Tags", "Source"));
- props.put(Summary.RUN_ON, getBetween(formText, "Run On", "Schedule"));
- props.put(Summary.START, getBetween(formText, "Start on:", "End on:"));
- props.put(Summary.END, getBetween(formText, "End on:", "Max Maps"));
- props.put(Summary.MAX_MAPS, getBetween(formText, "Max Maps", "Max Bandwidth"));
- props.put(Summary.MAX_BANDWIDTH, getBetween(formText, "Max Bandwidth", "ACL"));
-
- props.put(Summary.ACL_OWNER, getBetween(formText, "Owner:", "Group:"));
- props.put(Summary.ACL_GROUP, getBetween(formText, "Group:", "Permissions:"));
- props.put(Summary.ACL_PERMISSIONS, getBetween(formText, "Permissions:", "Retry"));
-
- props.put(Summary.RETRY_POLICY, getBetween(formText, "Policy:", "delay:"));
- props.put(Summary.RETRY_DELAY, getBetween(formText, "delay:", "Attempts:"));
- props.put(Summary.RETRY_ATTEMPTS, getBetween(formText, "Attempts:", "Frequency"));
-
- props.put(Summary.FREQUENCY, getBetween(formText, "Frequency", "Previous"));
-
- String source = getBetween(formText, "Source", "Target");
- String target = getBetween(formText, "Target", "Run On");
- if ("HDFS".equals(props.get(Summary.TYPE))) {
- props.put(Summary.SOURCE_LOCATION, getBetween(source, "Location", "Path"));
- props.put(Summary.TARGET_LOCATION, getBetween(target, "Location", "Path"));
- if ("HDFS".equals(props.get(Summary.SOURCE_LOCATION))) {
- props.put(Summary.SOURCE_CLUSTER, getBetween(source, "^", "Location"));
- props.put(Summary.SOURCE_PATH, getBetween(source, "Path:", "$"));
-
- } else {
- props.put(Summary.SOURCE_PATH, getBetween(source, "Path:", "URL"));
- props.put(Summary.SOURCE_URL, getBetween(source, "URL:", "$"));
-
- }
- if ("HDFS".equals(props.get(Summary.TARGET_LOCATION))) {
- props.put(Summary.TARGET_CLUSTER, getBetween(target, "^", "Location"));
- props.put(Summary.TARGET_PATH, getBetween(target, "Path:", "$"));
-
- } else {
- props.put(Summary.TARGET_PATH, getBetween(target, "Path:", "URL"));
- props.put(Summary.TARGET_URL, getBetween(target, "URL:", "$"));
-
- }
-
- } else {
- LOGGER.error("TODO Read info for HIVE replication.");
- }
-
-
- return props;
- }
-
- /** Parts of the mirror summary. */
- public enum Summary {
- NAME,
- TYPE,
- TAGS,
- RUN_ON,
- START,
- END,
- MAX_MAPS,
- MAX_BANDWIDTH,
- ACL_OWNER,
- ACL_GROUP,
- ACL_PERMISSIONS,
- RETRY_POLICY,
- RETRY_DELAY,
- RETRY_ATTEMPTS,
- FREQUENCY,
- SOURCE_LOCATION,
- SOURCE_PATH,
- SOURCE_CLUSTER,
- SOURCE_URL,
- TARGET_LOCATION,
- TARGET_PATH,
- TARGET_CLUSTER,
- TARGET_URL,
-
- }
-
- private static String getBetween(String text, String first, String second) {
- Pattern pattern = Pattern.compile(".*" + first + "(.+)" + second + ".*", Pattern.DOTALL);
- Matcher matcher = pattern.matcher(text);
- if (matcher.find()) {
- return matcher.group(1).trim();
- } else {
- return null;
- }
- }
-
- /**
- * Block of source or target cluster with parameters.
- */
- public final class ClusterBlock {
- private final WebElement mainBlock;
- private final WebElement runHereButton;
- private final String blockType;
-
- private ClusterBlock(String type) {
- this.blockType = type;
- mainBlock = driver.findElement(By.xpath("//h3[contains(.,'" + type + "')]/.."));
- runHereButton = mainBlock.findElement(By.id("runJobOn" + type + "Radio"));
- }
-
- public Set<Location> getAvailableLocationTypes() {
- List<WebElement> inputs = getLocationBox().findElements(By.xpath(".//input"));
- Set<Location> result = EnumSet.noneOf(Location.class);
- for (WebElement input : inputs) {
- result.add(Location.getByInput(input));
- }
- return result;
- }
-
- public Location getSelectedLocationType() {
- WebElement selected = getLocationBox()
- .findElement(By.xpath("//input[contains(@class,'ng-valid-parse')]"));
- return Location.getByInput(selected);
- }
-
- public void setLocationType(Location type) {
- getLocationBox().findElement(By.xpath(
- String.format(".//input[translate(@value,'azures','AZURES')='%s']", type.toString()))).click();
- }
-
- public void selectRunHere() {
- runHereButton.click();
- }
-
- public Set<String> getAvailableClusters() {
- List<WebElement> options = mainBlock.findElements(By.xpath(".//option[not(@disabled)]"));
- Set<String> clusters = new TreeSet<>();
- for (WebElement option : options) {
- clusters.add(option.getText());
- }
- return clusters;
- }
-
- public void selectCluster(String clusterName) {
- selectNgModelByVisibleText("UIModel." + blockType.toLowerCase() + ".cluster", clusterName);
- }
-
- public void setPath(String path) {
- final WebElement srcPathElement = getPath();
- clearAndSet(srcPathElement, path);
- }
-
- public boolean isRunHereSelected() {
- return runHereButton.getAttribute("class").contains("ng-valid-parse");
- }
-
- public boolean isRunHereAvailable() {
- return runHereButton.getAttribute("disabled") == null;
- }
-
-
- private WebElement getLocationBox() {
- return mainBlock.findElement(By.className("locationBox"));
- }
-
- private WebElement getPath() {
- return mainBlock.findElement(By.name(blockType.toLowerCase() + "ClusterPathInput"));
- }
-
-
-
- }
-
- /**
- * Types of source/target location.
- */
- public enum Location {
- HDFS,
- AZURE,
- S3;
-
- private static Location getByInput(WebElement input) {
- return Location.valueOf(input.getAttribute("value").trim().toUpperCase());
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/PageHeader.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/PageHeader.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/PageHeader.java
deleted file mode 100644
index 61d9475..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/PageHeader.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.falcon.regression.ui.search;
-
-import org.apache.falcon.regression.core.enumsAndConstants.MerlinConstants;
-import org.apache.falcon.regression.core.util.AssertUtil;
-import org.apache.falcon.regression.core.util.TimeUtil;
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.apache.log4j.Logger;
-import org.openqa.selenium.By;
-import org.openqa.selenium.JavascriptExecutor;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.FindBys;
-import org.openqa.selenium.support.PageFactory;
-import org.openqa.selenium.support.ui.ExpectedConditions;
-import org.openqa.selenium.support.ui.WebDriverWait;
-import org.testng.Assert;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/** Page object for header of the search ui pages. */
-public class PageHeader {
- private static final Logger LOGGER = Logger.getLogger(PageHeader.class);
-
- protected WebDriver driver;
-
- public PageHeader(WebDriver driver) {
- this.driver = driver;
- }
-
- @FindBy(className = "navbar")
- private WebElement header;
-
- @FindBys({
- @FindBy(className = "navbar"),
- @FindBy(className = "logoTitle")
- })
- private WebElement homeButton;
-
- @FindBys({
- @FindBy(className = "navbar"),
- @FindBy(className = "logoTitle"),
- @FindBy(className = "falconLogo")
- })
- private WebElement falconLogo;
-
- @FindBys({
- @FindBy(className = "navbar"),
- @FindBy(className = "loginHeaderBox")
- })
- private WebElement loginHeaderBox;
-
- @FindBys({
- @FindBy(className = "navbar"),
- @FindBy(className = "createNavWrapper")
- })
- private WebElement createEntityBox;
-
- @FindBy(id = "cluster.create")
- private WebElement clusterCreateButton;
-
- @FindBy(id = "feed.create")
- private WebElement feedCreateButton;
-
- @FindBy(id = "process.create")
- private WebElement processCreateButton;
-
- @FindBy(id = "dataset.create")
- private WebElement mirrorCreateButton;
-
- @FindBys({
- @FindBy(className = "uploadNavWrapper"),
- })
- private WebElement uploadEntityBox;
-
- @FindBys({
- @FindBy(className = "uploadNavWrapper"),
- @FindBy(className = "btn-file")
- })
- private WebElement uploadEntityButton;
-
-
- public WebElement getHomeButton() {
- return homeButton;
- }
-
- public void checkLoggedIn() {
- Assert.assertEquals(getLogoutButton().getText(), "Logout",
- "Unexpected text on logout button");
- }
-
- public SearchPage gotoHome() {
- homeButton.click();
- final SearchPage searchPage = PageFactory.initElements(driver, SearchPage.class);
- searchPage.checkPage();
- final PageHeader searchHeader = searchPage.getPageHeader();
- if (!MerlinConstants.IS_SECURE) {
- searchHeader.checkLoggedIn();
- Assert.assertEquals(searchHeader.getLoggedInUser(), LoginPage.UI_DEFAULT_USER,
- "Unexpected user is displayed");
- }
- return searchPage;
- }
-
- public void checkLoggedOut() {
- UIAssert.assertNotDisplayed(getLogoutButton(), "logout button");
- }
-
- /**
- * Check header and make sure all the buttons/links are working correctly. Handles both
- * logged in and logged out scenarios.
- */
- public void checkHeader() {
- //home button is always displayed
- UIAssert.assertDisplayed(homeButton, "falcon logo");
- Assert.assertEquals(homeButton.getText(), "Falcon", "Unexpected home button text");
- UIAssert.assertDisplayed(falconLogo, "falcon logo");
- final WebElement helpLink = loginHeaderBox.findElement(By.tagName("a"));
- UIAssert.assertDisplayed(helpLink, "help link");
-
- final String oldUrl = driver.getCurrentUrl();
- //displayed if user is logged in: create entity buttons, upload entity button, username
- if (MerlinConstants.IS_SECURE || getLogoutButton().isDisplayed()) {
- //checking create entity box
- UIAssert.assertDisplayed(createEntityBox, "Create entity box");
- final WebElement createEntityLabel = createEntityBox.findElement(By.tagName("h4"));
- Assert.assertEquals(createEntityLabel.getText(), "Create an entity",
- "Unexpected create entity text");
- //checking upload entity part
- UIAssert.assertDisplayed(uploadEntityBox, "Create entity box");
- final WebElement uploadEntityLabel = uploadEntityBox.findElement(By.tagName("h4"));
- Assert.assertEquals(uploadEntityLabel.getText(), "Upload an entity",
- "Unexpected upload entity text");
- Assert.assertEquals(uploadEntityButton.getText(), "Browse for the XML file",
- "Unexpected text on upload entity button");
- //checking if logged-in username is displayed
- if (!MerlinConstants.IS_SECURE) {
- UIAssert.assertDisplayed(getLogoutButton(), "Logout button");
- AssertUtil.assertNotEmpty(getLoggedInUser(), "Expecting logged-in username.");
- }
-
- //create button navigation
- doCreateCluster();
- driver.get(oldUrl);
- doCreateFeed();
- driver.get(oldUrl);
- doCreateProcess();
- driver.get(oldUrl);
- doCreateMirror();
- driver.get(oldUrl);
- }
- //home button navigation
- homeButton.click();
- Assert.assertTrue(getHomeUrls().contains(driver.getCurrentUrl()),
- "home button navigate to: " + driver.getCurrentUrl() + " instead of: " + getHomeUrls());
- driver.get(oldUrl);
-
- //help link navigation
- Assert.assertEquals(helpLink.getText(), "Help", "Help link expected to have text 'Help'");
- clickLink(helpLink);
- int helpPageloadTimeoutThreshold = 30;
- new WebDriverWait(driver, helpPageloadTimeoutThreshold).until(
- ExpectedConditions.stalenessOf(helpLink));
- Assert.assertEquals(driver.getCurrentUrl(), MerlinConstants.HELP_URL,
- "Unexpected help url");
- driver.get(oldUrl);
- }
-
- /**
- * Useful in cases when selenium fails to click a link due to it's bugs.
- */
- private void clickLink(WebElement link) {
- JavascriptExecutor executor = (JavascriptExecutor) driver;
- executor.executeScript("arguments[0].click();", link);
- }
-
- public void uploadXml(String filePath) throws IOException {
- final WebElement uploadEntityTextBox = uploadEntityBox.findElement(By.id("files"));
- uploadEntityTextBox.sendKeys(filePath);
- //wait for alert
- driver.findElements(
- By.xpath("//div[@class='messages notifs' and contains(@style,'opacity') and not(contains(@style,'1;'))]"));
- }
-
- public ClusterWizardPage doCreateCluster() {
- UIAssert.assertDisplayed(clusterCreateButton, "Cluster create button");
- Assert.assertEquals(clusterCreateButton.getText(), "Cluster",
- "Unexpected text on create cluster button");
- clusterCreateButton.click();
- final ClusterWizardPage clusterPage = PageFactory.initElements(driver, ClusterWizardPage.class);
- clusterPage.checkPage();
- return clusterPage;
- }
-
- public FeedWizardPage doCreateFeed() {
- UIAssert.assertDisplayed(feedCreateButton, "Feed create button");
- Assert.assertEquals(feedCreateButton.getText(), "Feed",
- "Unexpected text on create feed button");
- feedCreateButton.click();
- final FeedWizardPage feedPage = PageFactory.initElements(driver, FeedWizardPage.class);
- feedPage.checkPage();
- return feedPage;
- }
-
- public ProcessWizardPage doCreateProcess() {
- UIAssert.assertDisplayed(processCreateButton, "Process create button");
- Assert.assertEquals(processCreateButton.getText(), "Process",
- "Unexpected text on create process button");
- processCreateButton.click();
- final ProcessWizardPage processPage = PageFactory.initElements(driver, ProcessWizardPage.class);
- processPage.checkPage();
- return processPage;
- }
-
- public MirrorWizardPage doCreateMirror() {
- UIAssert.assertDisplayed(mirrorCreateButton, "Mirror create button");
- Assert.assertEquals(mirrorCreateButton.getText(), "Mirror",
- "Unexpected text on create mirror button");
- mirrorCreateButton.click();
- final MirrorWizardPage mirrorPage = PageFactory.initElements(driver, MirrorWizardPage.class);
- mirrorPage.checkPage();
- return mirrorPage;
- }
-
- private List<String> getHomeUrls() {
- List<String> urls = new ArrayList<>();
- String homeUrl = MerlinConstants.PRISM_URL;
- urls.add(homeUrl);
- urls.add(homeUrl.replaceAll("/$", "") + "/#/");
- return urls;
- }
-
- public String getLoggedInUser() {
- return loginHeaderBox.findElement(By.tagName("div")).getText();
- }
-
- private WebElement getLogoutButton() {
- return loginHeaderBox.findElements(By.xpath("button[@ng-click='logOut()']")).get(0);
- }
-
- private WebElement getNotificationButton() {
- return loginHeaderBox.findElements(By.xpath("button[@ng-click='notify()']")).get(0);
- }
-
- /**
- * Validates number of notifications contained by notification bar and last notification message.
- */
- public void validateNotificationCountAndCheckLast(int count, String message) {
- WebElement notificationButton = getNotificationButton();
- notificationButton.click();
- waitForAngularToFinish();
-
- // Test notifications dropdown visibility
- WebElement notificationDropdown = notificationButton.findElement(By.className("messages"));
- Assert.assertTrue(notificationDropdown.getAttribute("style").contains("display: block;"),
- "Notifications are not visible.");
-
- // Test validity of number of notifications
- List<WebElement> notifications = notificationDropdown.findElements(By.xpath("div"));
- Assert.assertEquals(notifications.size() - 1, count, "Invalid notification count.");
-
- // Test validity of last notification
- String lastNotification = notifications.get(0).getText();
- Assert.assertTrue(lastNotification.contains(message), "Invalid last notification text.");
- }
-
- public LoginPage doLogout() {
- LOGGER.info("Going to logout.");
- getLogoutButton().click();
- final LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
- loginPage.checkPage();
- return loginPage;
- }
-
- protected void waitForAngularToFinish() {
- final String javaScript = "return (window.angular != null) && "
- + "(angular.element(document).injector() != null) && "
- + "(angular.element(document).injector().get('$http').pendingRequests.length === 0)";
- boolean isLoaded = false;
- for (int i = 0; i < AbstractSearchPage.PAGELOAD_TIMEOUT_THRESHOLD && !isLoaded; i++) {
- final Object output = ((JavascriptExecutor) driver).executeScript(javaScript);
- isLoaded = Boolean.valueOf(output.toString());
- LOGGER.info(i+1 + ". waiting on angular to finish.");
- TimeUtil.sleepSeconds(1);
- }
- LOGGER.info("angular is done continuing...");
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ProcessWizardPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ProcessWizardPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ProcessWizardPage.java
deleted file mode 100644
index 8fcc5b7..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ProcessWizardPage.java
+++ /dev/null
@@ -1,960 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
-package org.apache.falcon.regression.ui.search;
-
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.falcon.entity.v0.Frequency;
-import org.apache.falcon.entity.v0.process.ACL;
-import org.apache.falcon.entity.v0.process.Cluster;
-import org.apache.falcon.entity.v0.process.Clusters;
-import org.apache.falcon.entity.v0.process.EngineType;
-import org.apache.falcon.entity.v0.process.ExecutionType;
-import org.apache.falcon.entity.v0.process.Input;
-import org.apache.falcon.entity.v0.process.Inputs;
-import org.apache.falcon.entity.v0.process.Output;
-import org.apache.falcon.entity.v0.process.Outputs;
-import org.apache.falcon.entity.v0.process.PolicyType;
-import org.apache.falcon.entity.v0.process.Retry;
-import org.apache.falcon.entity.v0.process.Validity;
-import org.apache.falcon.entity.v0.process.Workflow;
-import org.apache.falcon.regression.Entities.ProcessMerlin;
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.apache.log4j.Logger;
-import org.joda.time.format.DateTimeFormat;
-import org.joda.time.format.DateTimeFormatter;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.openqa.selenium.support.FindBys;
-import org.openqa.selenium.support.ui.Select;
-import org.testng.Assert;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-import java.util.TimeZone;
-
-/** Page object of the Process creation page. */
-public class ProcessWizardPage extends EntityWizardPage {
-
- private static final Logger LOGGER = Logger.getLogger(ProcessWizardPage.class);
-
- @FindBys({
- @FindBy(className = "mainUIView"),
- @FindBy(className = "entityForm")
- })
- private WebElement processBox;
-
- @FindBy(xpath = "//form[@name='processForm']/div[1]")
- private WebElement summaryBox;
-
- @FindBys({
- @FindBy(className = "mainUIView"),
- @FindBy(className = "entityForm"),
- @FindBy(className = "nextBtn")
- })
- private WebElement nextButton;
-
- @FindBys({
- @FindBy(className = "mainUIView"),
- @FindBy(className = "entityForm"),
- @FindBy(className = "prevBtn")
- })
- private WebElement previousButton;
-
- @FindBy(xpath = "//a[contains(.,'Cancel')]")
- private WebElement cancelButton;
-
- @FindBy(xpath = "//fieldset[@id='fieldWrapper']")
- private WebElement formBox;
-
- public ProcessWizardPage(WebDriver driver) {
- super(driver);
- }
-
- @Override
- public void checkPage() {
- UIAssert.assertDisplayed(processBox, "Process box");
- }
-
- /**
- * Completes step 1 and clicks next.
- */
- public void goToPropertiesStep(ProcessMerlin process) {
- setProcessGeneralInfo(process);
- clickNext();
-
- }
-
- public void goToClustersStep(ProcessMerlin process) {
- goToPropertiesStep(process);
-
- setProcessPropertiesInfo(process);
- clickNext();
- }
-
- public void clickNext() {
- nextButton.click();
- }
-
- public void clickPrevious(){
- previousButton.click();
- }
-
- public void clickCancel(){
- cancelButton.click();
- }
-
- /*----- Step1 General info ----*/
-
- private WebElement getName() {
- return driver.findElement(By.id("entityNameField"));
- }
-
- public void setName(String name) {
- final WebElement nameElement = getName();
- nameElement.clear();
- for (String s : name.split("")) {
- nameElement.sendKeys(s);
- }
- }
- private WebElement getTagsSection() {
- return driver.findElement(By.id("tagsSection"));
- }
-
- private WebElement getAddTagButton() {
- return driver.findElement(By.className("formViewContainer"))
- .findElement(By.xpath("./form/div[4]/button"));
- }
-
- private List<WebElement> getDeleteTagButtons() {
- return getTagsSection().findElements(By.tagName("button"));
- }
-
- private List<WebElement> getTagTextFields() {
- return getTagsSection().findElements(By.tagName("input"));
- }
-
- public void deleteTags() {
- //delete all tags
- final List<WebElement> deleteTagButtons = getDeleteTagButtons();
- for (WebElement deleteTagButton : Lists.reverse(deleteTagButtons)) {
- deleteTagButton.click();
- }
- for (WebElement textField : getTagTextFields()) {
- textField.clear();
- }
- }
-
- private WebElement getTagKey(int index) {
- return processBox.findElements(By.xpath("//input[@ng-model='tag.key']")).get(index);
- }
- private WebElement getTagValue(int index) {
- return processBox.findElements(By.xpath("//input[@ng-model='tag.value']")).get(index);
- }
-
- public void setTagKey(int index, String tagKey){
- getTagKey(index).sendKeys(tagKey);
- }
- public void setTagValue(int index, String tagValue){
- getTagValue(index).sendKeys(tagValue);
- }
-
- public void setTags(String tagsStr){
- if (StringUtils.isEmpty(tagsStr)){
- return;
- }
- String[] tags = tagsStr.split(",");
- for (int i = 0; i < tags.length; i++){
- String[] keyValue = tags[i].split("=");
- setTagKey(i, keyValue[0]);
- setTagValue(i, keyValue[1]);
- if (tags.length > i + 1){
- getAddTagButton().click();
- }
- }
- }
-
- public String getTagKeyText(int index){
- return getTagKey(index).getAttribute("value");
- }
-
- public String getTagValueText(int index){
- return getTagValue(index).getAttribute("value");
- }
-
- public boolean isPigRadioSelected(){
- return getPigRadio().isSelected();
- }
-
- public String getEngineVersionText(){
- return getEngineVersion().getFirstSelectedOption().getAttribute("value");
- }
-
- private WebElement getWfName() {
- return driver.findElement(By.id("workflowNameField"));
- }
-
- private WebElement getOozieRadio() {
- return driver.findElement(By.id("oozieEngineRadio"));
- }
-
- private WebElement getPigRadio() {
- return driver.findElement(By.id("pigEngineRadio"));
- }
-
- private WebElement getHiveRadio() {
- return driver.findElement(By.id("hiveEngineRadio"));
- }
-
- private Select getEngineVersion() {
- return new Select(driver.findElement(By.id("engineVersionField")));
- }
-
- private WebElement getPath() {
- return driver.findElement(By.id("pathField"));
- }
-
- public void setWorkflow(Workflow processWf) {
- final WebElement wfName = getWfName();
- wfName.clear();
- wfName.sendKeys(processWf.getName());
- switch (processWf.getEngine()) {
- case OOZIE:
- getOozieRadio().click();
- break;
- case PIG:
- getPigRadio().click();
- break;
- case HIVE:
- getHiveRadio().click();
- break;
- default:
- Assert.fail("Unexpected workflow engine: " + processWf.getEngine());
- }
- final String version = processWf.getVersion();
- // The getVersion() method returns '1.0' if its null, hence the hack below
- if (StringUtils.isNotEmpty(version) && !version.equals("1.0")) {
- getEngineVersion().selectByVisibleText(version);
- }
- final WebElement path = getPath();
- path.clear();
- path.sendKeys(processWf.getPath());
- }
-
- private WebElement getAclOwner() {
- return driver.findElement(By.name("aclOwnerInput"));
- }
-
- private WebElement getAclGroup() {
- return driver.findElement(By.name("aclGroupInput"));
- }
-
- private WebElement getAclPerm() {
- return driver.findElement(By.name("aclPermissionsInput"));
- }
-
- public void setAcl(ACL acl) {
- final WebElement aclOwner = getAclOwner();
- aclOwner.clear();
- aclOwner.sendKeys(acl.getOwner());
- final WebElement aclGroup = getAclGroup();
- aclGroup.clear();
- aclGroup.sendKeys(acl.getGroup());
- final WebElement aclPerm = getAclPerm();
- aclPerm.clear();
- aclPerm.sendKeys(acl.getPermission());
- }
-
- public void setProcessGeneralInfo(ProcessMerlin process) {
- setName(process.getName());
- final String tags = StringUtils.trimToEmpty(process.getTags());
- setTags(tags);
- setWorkflow(process.getWorkflow());
- setAcl(process.getACL());
- }
-
- public void isFrequencyQuantityDisplayed(boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getFrequencyQuantity(), "Frequency Quantity");
- }else {
- try{
- getFrequencyQuantity();
- Assert.fail("Frequency Quantity found");
- } catch (Exception ex){
- LOGGER.info("Frequency Quantity not found");
- }
- }
- }
-
- public void isValidityStartDateDisplayed(boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getStartDate(), "Cluster Validity Start Date");
- }else {
- try{
- getStartDate();
- Assert.fail("Cluster Validity Start Date found");
- } catch (Exception ex){
- LOGGER.info("Cluster Validity Start Date not found");
- }
- }
- }
-
- public void isAddInputButtonDisplayed(boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getAddInputButton(), "Add Input button.");
- }else {
- try{
- getAddInputButton();
- Assert.fail("Add Input Button found");
- } catch (Exception ex){
- LOGGER.info("Add Input Button not found");
- }
- }
- }
-
- public void isSaveButtonDisplayed(boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getSaveProcessButton(), "Save Button");
- }else {
- try{
- getSaveProcessButton();
- Assert.fail("Save Process Button found");
- } catch (Exception ex){
- LOGGER.info("Save Process Button not found");
- }
- }
- }
-
- private WebElement getSaveProcessButton(){
- return formBox.findElement(By.xpath("//button[contains(.,'Save')]"));
- }
-
- public void isTagsDisplayed(int index, boolean isDisplayed){
- if (isDisplayed){
- UIAssert.assertDisplayed(getTagKey(index), "Tag Key Index - " + index);
- UIAssert.assertDisplayed(getTagValue(index), "Tag Value Index - " + index);
- }else{
- try{
- getTagKey(index);
- Assert.fail("Tag Key Index - " + index + " found");
- } catch (Exception ex){
- LOGGER.info("Tag Key Index - " + index + " not found");
- }
- try{
- getTagValue(index);
- Assert.fail("Tag Key Value - " + index + " found");
- } catch (Exception ex){
- LOGGER.info("Tag Key Value - " + index + " not found");
- }
- }
- }
-
- /*----- Step2 Properties ----*/
-
- private Select getTimezone() {
- return new Select(formBox.findElement(By.xpath("//select[contains(@class, 'TZSelect')]")));
- }
-
- public void setTimezone(TimeZone timezone) {
- if (timezone == null) {
- return;
- }
- String timeZone = timezone.getID();
- getTimezone().selectByValue(timeZone);
- }
-
- private WebElement getFrequencyQuantity() {
- return processBox.findElement(By.xpath("//input[@ng-model='process.frequency.quantity']"));
- }
- private Select getFrequencyUnit() {
- return new Select(processBox.findElement(By.xpath(
- "//select[@ng-model='process.frequency.unit']")));
- }
-
- public String getFrequencyQuantityText(){
- return getFrequencyQuantity().getAttribute("value");
- }
-
- public String getMaxParallelInstancesText(){
- return getMaxParallelInstances().getFirstSelectedOption().getAttribute("value");
- }
-
- public String getTimezoneText(){
- return getTimezone().getFirstSelectedOption().getAttribute("value");
- }
-
- public String getOrderText(){
- return getOrder().getFirstSelectedOption().getAttribute("value");
- }
-
- public void setFrequencyQuantity(String frequencyQuantity){
- getFrequencyQuantity().sendKeys(frequencyQuantity);
- }
- public void setFrequencyUnit(String frequencyUnit){
- getFrequencyUnit().selectByVisibleText(frequencyUnit);
- }
-
- public List<String> getTimezoneValues(){
- return getDropdownValues(getTimezone());
- }
-
- public List<String> getFrequencyUnitValues(){
- return getDropdownValues(getFrequencyUnit());
- }
-
- public List<String> getMaxParallelInstancesValues(){
- return getDropdownValues(getMaxParallelInstances());
- }
-
- public List<String> getOrderValues(){
- return getDropdownValues(getOrder());
- }
-
- public List<String> getRetryPolicyValues(){
- return getDropdownValues(getRetryPolicy());
- }
-
- public List<String> getRetryDelayUnitValues(){
- return getDropdownValues(getRetryDelayUnit());
- }
-
- private Select getMaxParallelInstances(){
- return new Select(formBox.findElement(By.xpath("//select[@ng-model='process.parallel']")));
- }
-
- public void setMaxParallelInstances(int quantity) {
- getMaxParallelInstances().selectByValue(String.valueOf(quantity));
- }
-
- private Select getOrder(){
- return new Select(formBox.findElement(By.xpath("//select[@ng-model='process.order']")));
- }
-
- public void setOrder(ExecutionType order) {
- getOrder().selectByValue(order.value());
- }
-
- private Select getRetryPolicy(){
- return new Select(formBox.findElement(By.xpath("//select[@ng-model='process.retry.policy']")));
- }
-
- private Select getRetryDelayUnit(){
- return new Select(formBox.findElement(By.xpath("//select[@ng-model='process.retry.delay.unit']")));
- }
-
- private WebElement getAttempts(){
- return formBox.findElement(By.id("attemptsField"));
- }
-
- private WebElement getDelayQuantity(){
- return formBox.findElement(By.id("delayQuantity"));
- }
-
- public void setRetry(Retry retry) {
- getRetryPolicy().selectByValue(retry.getPolicy().value());
- getAttempts().sendKeys(String.valueOf(retry.getAttempts()));
- getDelayQuantity().sendKeys(retry.getDelay().getFrequency());
- getRetryDelayUnit().selectByValue(retry.getDelay().getTimeUnit().name());
- }
-
- /**
- * Enter process info on Page 2 of processSetup Wizard.
- */
- public void setProcessPropertiesInfo(ProcessMerlin process) {
- setTimezone(process.getTimezone());
- setFrequencyQuantity(process.getFrequency().getFrequency());
- setFrequencyUnit(process.getFrequency().getTimeUnit().toString());
- setMaxParallelInstances(process.getParallel());
- setOrder(process.getOrder());
- setRetry(process.getRetry());
- }
-
- /*-----Step3 Clusters-------*/
-
- public WebElement getStartDate() {
- List<WebElement> inputs = driver.findElements(
- By.xpath("//input[contains(@ng-model, 'cluster.validity.start.date')]"));
- return inputs.get(inputs.size() - 1);
- }
-
- public WebElement getEndDate() {
- List<WebElement> inputs = formBox.findElements(
- By.xpath("//input[contains(@ng-model, 'cluster.validity.end.date')]"));
- return inputs.get(inputs.size() - 1);
- }
-
- public String getValidityEnd() {
- return String.format("%s %s:%s", getEndDate().getAttribute("value"), getEndHours().getAttribute("value"),
- getEndMinutes().getAttribute("value"));
- }
-
- public WebElement getStartHours() {
- List<WebElement> inputs = formBox.findElements(By.xpath("//input[contains(@ng-model, 'hours')]"));
- return inputs.get(inputs.size() - 2);
- }
-
- public WebElement getEndHours() {
- List<WebElement> inputs = formBox.findElements(By.xpath("//input[contains(@ng-model, 'hours')]"));
- return inputs.get(inputs.size() - 1);
- }
-
- public WebElement getStartMinutes() {
- List<WebElement> inputs = formBox.findElements(By.xpath("//input[contains(@ng-model, 'minutes')]"));
- return inputs.get(inputs.size() - 2);
- }
-
- public WebElement getEndMinutes() {
- List<WebElement> inputs = formBox.findElements(By.xpath("//input[contains(@ng-model, 'minutes')]"));
- return inputs.get(inputs.size() - 1);
- }
-
- public WebElement getStartMeredian() {
- List<WebElement> buttons = formBox.findElements(By.xpath("//td[@ng-show='showMeridian']/button"));
- return buttons.get(buttons.size() - 2);
- }
-
- public WebElement getEndMeredian() {
- List<WebElement> buttons = formBox.findElements(By.xpath("//td[@ng-show='showMeridian']/button"));
- return buttons.get(buttons.size() - 1);
- }
-
- /**
- * Retrieves the last cluster select.
- */
- public Select getClusterSelect() {
- List<WebElement> selects = formBox.findElements(By.xpath("//select[contains(@ng-model, 'cluster.name')]"));
- return new Select(selects.get(selects.size() - 1));
- }
-
- public void clickAddClusterButton() {
- int initialSize = getWizardClusterCount();
- formBox.findElement(By.xpath("//button[contains(., 'add cluster')]")).click();
- int finalSize = getWizardClusterCount();
- Assert.assertEquals(finalSize - initialSize, 1, "New cluster block should been added.");
- }
-
- /**
- * Removes last cluster on the form.
- */
- public void deleteLastCluster() {
- int initialSize = getWizardClusterCount();
- List<WebElement> buttons = formBox.findElements(By.xpath("//button[contains(., 'delete')]"));
- Assert.assertTrue(buttons.size() > 0,
- "Delete button should be present. There should be at least 2 cluster blocks");
- buttons.get(buttons.size() - 1).click();
- int finalSize = getWizardClusterCount();
- Assert.assertEquals(initialSize - finalSize, 1, "One cluster block should been removed.");
- }
-
- /**
- * Sets multiple clusters in process.
- */
- public void setClusters(Clusters clusters) {
- for (int i = 0; i < clusters.getClusters().size(); i++) {
- if (i > 0) {
- clickAddClusterButton();
- }
- setCluster(clusters.getClusters().get(i));
- }
- }
-
- /**
- * Fills the last cluster on the form.
- */
- public void setCluster(Cluster cluster) {
- selectCluster(cluster.getName());
- setClusterValidity(cluster);
- }
-
- /**
- * Populates cluster form with values from process.Cluster object.
- * @param cluster process process.Cluster object
- */
- public void setClusterValidity(Cluster cluster) {
- SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy-hh-mm-a");
- String start = format.format(cluster.getValidity().getStart());
- String [] parts = start.split("-");
- getStartDate().clear();
- sendKeysSlowly(getStartDate(), parts[0]);
- getStartHours().clear();
- sendKeysSlowly(getStartHours(), parts[1]);
- getStartMinutes().clear();
- sendKeysSlowly(getStartMinutes(), parts[2]);
- String meredian = getStartMeredian().getText();
- if (!meredian.equals(parts[3])) {
- getStartMeredian().click();
- }
- String end = format.format(cluster.getValidity().getEnd());
- parts = end.split("-");
- getEndDate().clear();
- sendKeysSlowly(getEndDate(), parts[0]);
- getEndHours().clear();
- sendKeysSlowly(getEndHours(), parts[1]);
- getEndMinutes().clear();
- sendKeysSlowly(getEndMinutes(), parts[2]);
- meredian = getEndMeredian().getText();
- if (!meredian.equals(parts[3])) {
- getEndMeredian().click();
- }
- }
-
- public void selectCluster(String clusterName) {
- getClusterSelect().selectByValue(clusterName);
- }
-
- public String getClusterName(int indx) {
- List<WebElement> blocks = formBox.findElements(By.xpath("//div[contains(@class, 'processCluster')]"));
- return new Select(blocks.get(indx).findElement(By.tagName("select")))
- .getFirstSelectedOption().getText();
- }
-
- public int getWizardClusterCount() {
- return formBox.findElements(By.xpath("//div[contains(@class, 'processCluster')]")).size();
- }
-
- public void setProcessClustersInfo(ProcessMerlin process) {
- for (int i = 0; i < process.getClusters().getClusters().size(); i++) {
- if (i >= 1) {
- clickAddClusterButton();
- }
- setCluster(process.getClusters().getClusters().get(i));
- }
- }
-
- public List<String> getClustersFromDropDown() {
- return getDropdownValues(getClusterSelect());
- }
-
- public void clickOnValidityStart() {
- getStartDate().click();
- List<WebElement> calendars = formBox.findElements(By.xpath("//ul[@ng-model='date']"));
- waitForAngularToFinish();
- Assert.assertTrue(calendars.get(calendars.size() - 2).isDisplayed(), "Calendar should pop up.");
- }
-
- public void clickOnValidityEnd() {
- getEndDate().click();
- List<WebElement> calendars = formBox.findElements(By.xpath("//ul[@ng-model='date']"));
- waitForAngularToFinish();
- Assert.assertTrue(calendars.get(calendars.size() - 1).isDisplayed(), "Calendar should pop up.");
- }
-
- /* Step 4 - Inputs & Outputs*/
-
- private WebElement getAddInputButton() {
- return formBox.findElement(By.xpath("//button[contains(., 'add input')]"));
- }
-
- private WebElement getAddOutputButton() {
- return formBox.findElement(By.xpath("//button[contains(., 'add output')]"));
- }
-
- private WebElement getDeleteInputButton() {
- return formBox.findElement(By.xpath("//button[contains(., 'delete')]"));
- }
-
- private WebElement getInputName(int index) {
- return formBox.findElements(By.xpath("//input[@ng-model='input.name']")).get(index);
- }
-
- private Select getInputFeed(int index) {
- return new Select(formBox.findElements(By.xpath("//select[@ng-model='input.feed']")).get(index));
- }
-
- private WebElement getInputStart(int index) {
- return formBox.findElements(By.xpath("//input[@ng-model='input.start']")).get(index);
- }
-
- private WebElement getInputEnd(int index) {
- return formBox.findElements(By.xpath("//input[@ng-model='input.end']")).get(index);
- }
-
- public void setInputInfo(Inputs inputs){
- for (int i = 0; i < inputs.getInputs().size(); i++) {
- clickAddInput();
- sendKeysSlowly(getInputName(i), inputs.getInputs().get(i).getName());
- getInputFeed(i).selectByVisibleText(inputs.getInputs().get(i).getFeed());
- sendKeysSlowly(getInputStart(i), inputs.getInputs().get(i).getStart());
- sendKeysSlowly(getInputEnd(i), inputs.getInputs().get(i).getEnd());
- clickCheckBoxSecurely(getOptionalCheckbox(), inputs.getInputs().get(i).isOptional());
- }
- }
-
- private WebElement getOptionalCheckbox() {
- return formBox.findElement(By.xpath("//input[@ng-model='input.optional']"));
- }
-
- public boolean isOptionalSelected() {
- return getOptionalCheckbox().isSelected();
- }
-
- public void clickAddInput(){
- waitForAngularToFinish();
- getAddInputButton().click();
- }
-
- public void clickAddOutput(){
- waitForAngularToFinish();
- getAddOutputButton().click();
- }
-
- public void clickDeleteInput(){
- getDeleteInputButton().click();
- }
-
- private WebElement getDeleteOutputButton() {
- return formBox.findElement(By.xpath("//button[contains(., 'delete')]"));
- }
-
- private WebElement getOutputName(int index) {
- return formBox.findElements(By.xpath("//input[@ng-model='output.name']")).get(index);
- }
-
- private Select getOutputFeed(int index) {
- return new Select(formBox.findElements(By.xpath("//select[@ng-model='output.feed']")).get(index));
- }
-
- private WebElement getOutputInstance(int index) {
- return formBox.findElements(By.xpath("//input[@ng-model='output.outputInstance']")).get(index);
- }
-
- public void clickDeleteOutput(){
- getDeleteOutputButton().click();
- }
-
- public void setOutputInfo(Outputs outputs){
- for (int i = 0; i < outputs.getOutputs().size(); i++) {
- clickAddOutput();
- sendKeysSlowly(getOutputName(i), outputs.getOutputs().get(i).getName());
- getOutputFeed(i).selectByVisibleText(outputs.getOutputs().get(i).getFeed());
- sendKeysSlowly(getOutputInstance(i), outputs.getOutputs().get(i).getInstance());
- }
- }
-
- public void setInputOutputInfo(ProcessMerlin process){
- setInputInfo(process.getInputs());
- setOutputInfo(process.getOutputs());
- }
-
- public List<String> getInputValues(int index){
- return getDropdownValues(getInputFeed(index));
- }
-
- public List<String> getOutputValues(int index){
- return getDropdownValues(getOutputFeed(index));
- }
-
- public String getInputNameText(int index){
- return getInputName(index).getAttribute("value");
- }
-
- public String getInputFeedText(int index){
- return getInputFeed(index).getFirstSelectedOption().getAttribute("value");
- }
-
- public String getInputStartText(int index){
- return getInputStart(index).getAttribute("value");
- }
-
- public String getInputEndText(int index){
- return getInputEnd(index).getAttribute("value");
- }
-
- public String getOutputNameText(int index){
- return getOutputName(index).getAttribute("value");
- }
-
- public String getOutputFeedText(int index){
- return getOutputFeed(index).getFirstSelectedOption().getAttribute("value");
- }
-
- public String getOutputInstanceText(int index){
- return getOutputInstance(index).getAttribute("value");
- }
-
- public void isInputNameDisplayed(int index, boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getInputName(index), "Input Name " + index);
- }else {
- try{
- getInputName(index);
- Assert.fail("Input Name " + index + " found");
- } catch (Exception ex){
- LOGGER.info("Input Name " + index + " not found");
- }
- }
- }
-
- public void isOutputNameDisplayed(int index, boolean isDisplayed) {
- if (isDisplayed){
- UIAssert.assertDisplayed(getOutputName(index), "Output Name " + index);
- }else {
- try{
- getOutputName(index);
- Assert.fail("Output Name " + index + " found");
- } catch (Exception ex){
- LOGGER.info("Output Name " + index + " not found");
- }
- }
- }
-
-
- /* Step 5 - Summary */
-
- public void clickSave(){
- getSaveProcessButton().click();
- waitForAlert();
- }
-
- @Override
- public ProcessMerlin getEntityFromXMLPreview() {
- return new ProcessMerlin(getXMLPreview());
- }
-
- @Override
- public WebElement getEditXMLButton() {
- return driver.findElement(By.id("editXmlButton"));
- }
-
- /**
- * Method gets text from summary box and parses it to ProcessMerlin object.
- * @param draft empty ProcessMerlin object
- */
- public ProcessMerlin getProcessFromSummaryBox(ProcessMerlin draft) {
- String text = summaryBox.getText().trim();
- draft.setName(getProperty(text, null, "Tags", 2));
- String currentBlock = text.substring(text.indexOf("Tags"), text.indexOf("Access Control List"));
- String [] parts;
- parts = currentBlock.trim().split("\\n");
- String tags = "";
- for (int i = 1; i < parts.length; i++) {
- String tag = parts[i];
- if (!tag.contains("No tags")) {
- tag = tag.replace(" ", "");
- tags = tags + (tags.isEmpty() ? tag : "," + tag);
- }
- }
- if (!tags.isEmpty()) {
- draft.setTags(tags);
- }
-
- Workflow workflow = new Workflow();
- workflow.setName(getProperty(text, "Workflow", "Engine", 2));
- workflow.setEngine(EngineType.fromValue(getProperty(text, "Engine", "Version", 1)));
- workflow.setVersion(getProperty(text, "Version", "Path", 1));
- workflow.setPath(getProperty(text, "Path", "Timing", 1));
- draft.setWorkflow(workflow);
-
- draft.setTimezone(TimeZone.getTimeZone(getProperty(text, "Timing", "Frequency", 2)));
- parts = getProperty(text, "Frequency", "Max. parallel instances", 1).split(" ");
- draft.setFrequency(new Frequency(parts[1], Frequency.TimeUnit.valueOf(parts[2])));
- draft.setParallel(Integer.parseInt(getProperty(text, "Max. parallel instances", "Order", 1)));
- draft.setOrder(ExecutionType.fromValue(getProperty(text, "Order", "Retry", 1)));
-
- String aclOwner = getProperty(text, "Owner", "Group", 1);
- String aclGroup = getProperty(text, "Group", "Permissions", 1);
- String aclPermission = getProperty(text, "Permissions", "Workflow", 1);
- draft.setACL(aclOwner, aclGroup, aclPermission);
-
- Retry retry = new Retry();
- retry.setPolicy(PolicyType.fromValue(getProperty(text, "Retry", "Attempts", 2)));
- retry.setAttempts(Integer.parseInt(getProperty(text, "Attempts", "Delay", 1)));
- parts = getProperty(text, "Delay", "Clusters", 1).split(" ");
- retry.setDelay(new Frequency(parts[2], Frequency.TimeUnit.valueOf(parts[3])));
- draft.setRetry(retry);
-
- //get clusters
- currentBlock = text.substring(text.indexOf("Clusters"), text.indexOf("Inputs"));
- int last = 0;
- while (last != -1) {
- Cluster cluster = new Cluster();
- cluster.setName(getProperty(currentBlock, "Name", "Validity", 1));
- //remove the part which was used
- currentBlock = currentBlock.substring(currentBlock.indexOf("Validity"));
- //get validity
- String start = getProperty(currentBlock, "Validity", "End", 2);
- //check if there are other clusters
- last = currentBlock.indexOf("Name");
- String innerBlock = currentBlock.substring(currentBlock.indexOf("End"),
- last != -1 ? last : currentBlock.length() - 1).trim();
- String end = innerBlock.trim().split("\\n")[1];
- Validity validity = new Validity();
- DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy'-'MM'-'dd' 'HH':'mm'");
- validity.setStart(formatter.parseDateTime(start.replaceAll("\"", "")).toDate());
- validity.setEnd(formatter.parseDateTime(end.replaceAll("\"", "")).toDate());
- cluster.setValidity(validity);
- draft.getClusters().getClusters().add(cluster);
- }
- //get inputs
- currentBlock = text.substring(text.indexOf("Inputs"), text.indexOf("Outputs"));
- last = 0;
- while (last != -1) {
- Input input = new Input();
- //get input name
- input.setName(getProperty(currentBlock, "Name", "Feed", 1));
- //remove the part which was used
- currentBlock = currentBlock.substring(currentBlock.indexOf("Name") + 4);
- //get input feed
- input.setFeed(getProperty(currentBlock, "Feed", "Instance", 1));
- //get input start
- input.setStart(getProperty(currentBlock, "Instance", "End", 2));
- //get input end
- last = currentBlock.indexOf("Name");
- String innerBlock = currentBlock.substring(currentBlock.indexOf("End"),
- last != -1 ? last : currentBlock.length() - 1).trim();
- parts = innerBlock.trim().split("\\n");
- input.setEnd(parts[1]);
- draft.getInputs().getInputs().add(input);
- //remove part which was parsed
- currentBlock = currentBlock.substring(currentBlock.indexOf("End") + 4);
- }
- //get outputs
- currentBlock = text.substring(text.indexOf("Outputs"));
- last = 0;
- while (last != -1) {
- Output output = new Output();
- output.setName(getProperty(currentBlock, "Name", "Feed", 1));
- //remove the part which was used
- currentBlock = currentBlock.substring(currentBlock.indexOf("Feed"));
- //get feed
- output.setFeed(getProperty(currentBlock, "Feed", "Instance", 1));
- last = currentBlock.indexOf("Name");
- output.setInstance(getProperty(currentBlock, "Instance", "Name", 2));
- draft.getOutputs().getOutputs().add(output);
- }
- //check compulsory process properties
- Assert.assertNotNull(draft.getACL(), "ACL is empty (null).");
- return draft;
- }
-
- /**
- * Retrieves property from source text.
- */
- private String getProperty(String block, String start, String end, int propertyIndex) {
- int s = start != null ? block.indexOf(start) : 0;
- s = s == -1 ? 0 : s;
- int e = end != null ? block.indexOf(end) : block.length() - 1;
- e = e == -1 ? block.length() : e;
- String subBlock = block.substring(s, e).trim();
- String [] parts = subBlock.trim().split("\\n");
- return parts.length - 1 >= propertyIndex ? parts[propertyIndex].trim() : null;
- }
-}