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:56 UTC

[10/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/ClusterWizardPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ClusterWizardPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ClusterWizardPage.java
deleted file mode 100644
index 41fc120..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/ClusterWizardPage.java
+++ /dev/null
@@ -1,556 +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.lang.StringUtils;
-import org.apache.falcon.entity.v0.cluster.ACL;
-import org.apache.falcon.entity.v0.cluster.ClusterLocationType;
-import org.apache.falcon.entity.v0.cluster.Interface;
-import org.apache.falcon.entity.v0.cluster.Interfacetype;
-import org.apache.falcon.entity.v0.cluster.Location;
-import org.apache.falcon.entity.v0.cluster.Property;
-import org.apache.falcon.regression.Entities.ClusterMerlin;
-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.testng.Assert;
-
-import java.util.List;
-
-/** Page object of the Cluster creation page. */
-public class ClusterWizardPage extends EntityWizardPage {
-    private static final Logger LOGGER = Logger.getLogger(ClusterWizardPage.class);
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(className = "clusterForm")
-    })
-    private WebElement clusterBox;
-    @FindBy(id = "cluster.step1")
-    private WebElement next;
-    @FindBy(id = "cluster.step2")
-    private WebElement save;
-    @FindBy(id = "cluster.backToStep1")
-    private WebElement previous;
-    @FindBy(xpath = "//a[contains(text(), 'Cancel')]")
-    private WebElement cancel;
-    @FindBy(xpath = "//div[contains(@class, 'clusterSummaryRow')][h4]")
-    private WebElement summaryBox;
-
-    public ClusterWizardPage(WebDriver driver) {
-        super(driver);
-    }
-
-    @Override
-    public void checkPage() {
-        UIAssert.assertDisplayed(clusterBox, "Cluster box");
-    }
-
-    /**
-     * Fills cluster setup forms with values retrieved from Filling object.
-     */
-    public void fillForm(ClusterMerlin cluster) {
-        setName(cluster.getName());
-        setColo(cluster.getColo());
-        setDescription(cluster.getDescription());
-        setTags(cluster.getTags());
-        ACL acl = cluster.getACL();
-        setOwner(acl.getOwner());
-        setGroup(acl.getGroup());
-        setPermissions(acl.getPermission());
-        for(Interface iface : cluster.getInterfaces().getInterfaces()) {
-            setInterface(iface);
-        }
-        for (Property property : cluster.getProperties().getProperties()) {
-            addProperty(property.getName(), property.getValue());
-        }
-        setLocations(cluster.getLocations().getLocations());
-        waitForAngularToFinish();
-    }
-
-    /**
-     * Methods to fill specific wizard fields.
-     */
-    public void setName(String name) {
-        WebElement nameInput = getNameInput();
-        nameInput.clear();
-        sendKeysSlowly(nameInput, name);
-    }
-
-    public String getName() {
-        return getNameInput().getAttribute("value");
-    }
-
-    private WebElement getNameInput() {
-        return driver.findElement(By.xpath("//div[label[text()='Name']]/input"));
-    }
-
-    public void setColo(String colo) {
-        WebElement coloInput = clusterBox.findElement(By.xpath("//div[label[text()='Colo']]/input"));
-        coloInput.clear();
-        sendKeysSlowly(coloInput, colo);
-    }
-
-    public void setDescription(String description) {
-        WebElement descriptionInput = clusterBox.findElement(By.xpath("//div[label[text()='Description']]/input"));
-        descriptionInput.clear();
-        sendKeysSlowly(descriptionInput, description);
-    }
-
-    public void setOwner(String owner) {
-        WebElement ownerInput = clusterBox.findElement(By.xpath("//div[label[text()='Owner']]/input"));
-        ownerInput.clear();
-        sendKeysSlowly(ownerInput, owner);
-    }
-
-    public void setGroup(String group) {
-        WebElement groupInput = clusterBox.findElement(By.xpath("//div[label[text()='Group']]/input"));
-        groupInput.clear();
-        sendKeysSlowly(groupInput, group);
-    }
-
-    public void setPermissions(String permissions) {
-        WebElement permissionsInput = clusterBox.findElement(By.xpath("//div[label[text()='Permissions']]/input"));
-        permissionsInput.clear();
-        sendKeysSlowly(permissionsInput, permissions);
-    }
-
-    /**
-     * Common method to fill interfaces.
-     */
-    public void setInterface(Interface iface) {
-        String xpath = "//input[contains(@ng-model,"
-            + " 'clusterEntity.clusterModel.cluster.interfaces.interface[%sPos]._endpoint')]";
-        WebElement ifaceEndpoint = clusterBox.findElement(By.xpath(String.format(xpath, iface.getType().value())));
-        ifaceEndpoint.clear();
-        sendKeysSlowly(ifaceEndpoint, iface.getEndpoint());
-        setInterfaceVersion(iface);
-    }
-
-    /**
-     * Set interface version by interface type.
-     */
-    public void setInterfaceVersion(Interface iface) {
-        WebElement ifaceVersion = getInterfaceVersionInput(iface.getType());
-        if (iface.getVersion() != null) {
-            ifaceVersion.clear();
-            sendKeysSlowly(ifaceVersion, iface.getVersion());
-        }
-    }
-
-    /**
-     * Get input for interface version by interface type.
-     */
-    private WebElement getInterfaceVersionInput(Interfacetype interfacetype) {
-        return clusterBox.findElement(By.xpath(String.format(
-            "//input[@ng-model='clusterEntity.clusterModel.cluster.interfaces.interface[%sPos]._version']",
-            interfacetype.value())));
-    }
-
-    /**
-     * Populates form with tags.
-     */
-    public void setTags(String tagsStr){
-        if (!StringUtils.isEmpty(tagsStr)) {
-            String [] tags = tagsStr.split(",");
-            for (int i = 0; i < tags.length; i++) {
-                if (i > 0){
-                    clickAddTag();
-                }
-                String key = tags[i].trim().split("=")[0];
-                String value = tags[i].trim().split("=")[1];
-                addTag(key, value);
-            }
-        }
-    }
-
-    /**
-     * Populates last (empty) tag and value fields and creates new fields.
-     * @param key tag key
-     * @param value tag value
-     */
-    public void addTag(String key, String value) {
-        List<WebElement> tagInputs = clusterBox.findElements(By.xpath("//input[@ng-model='tag.key']"));
-        List<WebElement> valueInputs = clusterBox.findElements(By.xpath("//input[@ng-model='tag.value']"));
-        WebElement tagInput = tagInputs.get(tagInputs.size() - 1);
-        sendKeysSlowly(tagInput, key);
-        WebElement valueInput = valueInputs.get(valueInputs.size() - 1);
-        sendKeysSlowly(valueInput, value);
-    }
-
-    public void clickAddTag() {
-        clusterBox.findElement(By.xpath("//button[contains(., 'add tag')]")).click();
-    }
-
-    public void clickDeleteTag() {
-        List<WebElement> buttons = clusterBox
-            .findElements(By.xpath("//div[@class='row dynamic-table-spacer ng-scope']//button[contains(.,'delete')]"));
-        buttons.get(buttons.size() - 1).click();
-    }
-
-    /**
-     * Fills property fields and creates new empty property fields.
-     */
-    public void addProperty(String name, String value) {
-        List<WebElement> propInputs = clusterBox.findElements(By.xpath("//input[@ng-model='property._name']"));
-        List<WebElement> valueInputs = clusterBox.findElements(By.xpath("//input[@ng-model='property._value']"));
-        WebElement propInput = propInputs.get(propInputs.size()-1);
-        sendKeysSlowly(propInput, name);
-        WebElement valueInput = valueInputs.get(valueInputs.size() - 1);
-        sendKeysSlowly(valueInput, value);
-        clickAddProperty();
-    }
-
-    public void clickAddProperty() {
-        clusterBox.findElement(By.xpath("//button[contains(., 'add property')]")).click();
-    }
-
-    /**
-     * Method to set locations. Location can be only one of ClusterLocationType. So adding new location only after
-     * respective compulsory location was filled.
-     * @param locations locations
-     */
-    public void setLocations(List<Location> locations) {
-        boolean staging = false, temp = false, working = false;
-        for(Location location : locations) {
-            WebElement pathInput = null;
-            if (location.getName() == ClusterLocationType.STAGING && !staging) {
-                pathInput = clusterBox.findElement(By.id("location.staging"));
-                staging = true;
-            } else  if (location.getName() == ClusterLocationType.TEMP && !temp) {
-                pathInput = clusterBox.findElement(By.id("location.temp"));
-                temp = true;
-            } else if (location.getName() == ClusterLocationType.WORKING && !working) {
-                pathInput = clusterBox.findElement(By.id("location.working"));
-                working = true;
-            } else {
-                fillAdditionalLocation(location);
-            }
-            if (pathInput != null) {
-                pathInput.clear();
-                sendKeysSlowly(pathInput, location.getPath());
-            }
-        }
-    }
-
-    /**
-     * Method populates last location fields with values and creates new fields.
-     */
-    public void fillAdditionalLocation(Location location) {
-        List<WebElement> allNameInputs = clusterBox
-            .findElements(By.xpath("//input[contains(@ng-model, 'location._name')]"));
-        sendKeysSlowly(allNameInputs.get(allNameInputs.size() - 1), location.getName().value());
-        List<WebElement> allPathInputs = clusterBox
-            .findElements(By.xpath("//input[contains(@ng-model, 'location._path')]"));
-        sendKeysSlowly(allPathInputs.get(allPathInputs.size() - 1), location.getPath());
-    }
-
-    public void clickAddLocation() {
-        clusterBox.findElement(By.xpath("//button[contains(., 'add location')]")).click();
-    }
-
-    public void clickDeleteLocation() {
-        List<WebElement> buttons = clusterBox
-            .findElements(By.xpath("//div[@class='row ng-scope']//button[contains(.,'delete')]"));
-        Assert.assertFalse(buttons.isEmpty(), "Delete button should be present.");
-        buttons.get(buttons.size() - 1).click();
-    }
-
-    public boolean checkElementByContent(String elementTag, String content) {
-        List<WebElement> elements = clusterBox.findElements(By.xpath("//" + elementTag));
-        for(WebElement element : elements) {
-            if (element.getAttribute("value").equals(content)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Method to assert the staging and Working location are same.
-     */
-    public void assertLocationsEqualError(){
-
-        // Assertion for Staging Location.
-        LOGGER.info(" Assertion for Staging Directory ");
-        Assert.assertTrue(checkErrorMessageByElement("input[contains(@id,'location.staging')]//following-sibling::"
-                + "span[contains(@ng-show, 'locationsEqualError')]",
-                "Staging and Working location should be different"));
-
-        // Assertion for Working Location.
-        LOGGER.info("Assertion for Working Directory");
-        Assert.assertTrue(checkErrorMessageByElement("input[contains(@id,'location.working')]//following-sibling::"
-                + "span[contains(@ng-show, 'locationsEqualError')]",
-                "Staging and Working location should be different"));
-    }
-
-    /**
-     * Method to get the Error text message displayed based on Xpath and compares.
-     * with the input string paramater : errMessage
-     * @param elementTag elementTag
-     * @param errMessage errMessage
-     */
-    public boolean checkErrorMessageByElement(String elementTag, String errMessage) {
-
-        List<WebElement> elements = clusterBox.findElements(By.xpath("//" + elementTag));
-        if (!elements.isEmpty()){
-            for (WebElement element : elements) {
-                Assert.assertEquals(element.getText(), errMessage);
-                LOGGER.info("Error Message Displayed : " + element.getText());
-            }
-            return true;
-        }else{
-            LOGGER.info(" No Elements found with the xpath " + elementTag);
-            return false;
-        }
-    }
-
-    /**
-     * Retrieves the value of the summary box and parses it to cluster properties.
-     * @param draft empty cluster to contain all properties.
-     * @return cluster filled with properties from the summary.
-     */
-    public ClusterMerlin getSummary(ClusterMerlin draft) {
-        ClusterMerlin cluster = new ClusterMerlin(draft.toString());
-        String summaryBoxText = summaryBox.getText();
-        LOGGER.info("Summary block text : " + summaryBoxText);
-
-        String[] slices;
-        String value;
-        String path;
-        String label;
-
-        //retrieve basic properties
-        String basicProps = summaryBoxText.split("ACL")[0];
-        for (String line : basicProps.split("\\n")) {
-            slices = line.split(" ");
-            label = slices[0].replace(":", "").trim();
-            value = getValueFromSlices(slices, line);
-            switch (label) {
-            case "Name":
-                cluster.setName(value);
-                break;
-            case "Colo":
-                cluster.setColo(value);
-                break;
-            case "Description":
-                cluster.setDescription(value);
-                break;
-            case "Tags":
-                cluster.setTags(value);
-                break;
-            default:
-                break;
-            }
-        }
-        //retrieve ALC
-        String propsLeft = summaryBoxText.split("ACL")[1];
-        String[] acl = propsLeft.split("Interfaces")[0].split(" ");
-        cluster.getACL().setOwner(acl[1]);
-        cluster.getACL().setGroup(acl[3]);
-        cluster.getACL().setPermission(acl[5].trim());
-
-        //retrieve interfaces
-        propsLeft = propsLeft.split("Interfaces")[1];
-        boolean propertiesPresent = propsLeft.contains("Properties");
-        String nextLabel = propertiesPresent ? "Properties" : "Locations";
-        String interfaces = propsLeft.split(nextLabel)[0].trim();
-        for (String line : interfaces.split("\\n")) {
-            slices = line.split(" ");
-            label = slices[0].replace(":", "").trim();
-            String endpoint = slices[1].trim();
-            String version = slices[3].trim();
-            switch (label) {
-            case "readonly":
-                cluster.addInterface(Interfacetype.READONLY, endpoint, version);
-                break;
-            case "write":
-                cluster.addInterface(Interfacetype.WRITE, endpoint, version);
-                break;
-            case "execute":
-                cluster.addInterface(Interfacetype.EXECUTE, endpoint, version);
-                break;
-            case "workflow":
-                cluster.addInterface(Interfacetype.WORKFLOW, endpoint, version);
-                break;
-            case "messaging":
-                cluster.addInterface(Interfacetype.MESSAGING, endpoint, version);
-                break;
-            case "registry":
-                cluster.addInterface(Interfacetype.REGISTRY, endpoint, version);
-                break;
-            default:
-                break;
-            }
-        }
-        //retrieve properties
-        if (propertiesPresent) {
-            propsLeft = propsLeft.split("Properties")[1];
-            String properties = propsLeft.split("Locations")[0].trim();
-            for (String line : properties.split("\\n")) {
-                int indx = line.indexOf(":");
-                String name = line.substring(0, indx).trim();
-                value = line.substring(indx + 1, line.length()).trim();
-                cluster.withProperty(name, value);
-            }
-        }
-        //retrieve locations
-        propsLeft = propsLeft.split("Locations")[1].trim();
-        for (String line : propsLeft.split("\\n")) {
-            slices = line.split(" ");
-            label = slices[0].replace(":", "").trim();
-            path = getValueFromSlices(slices, line);
-            switch (label) {
-            case "staging":
-                cluster.addLocation(ClusterLocationType.STAGING, path);
-                break;
-            case "temp":
-                cluster.addLocation(ClusterLocationType.TEMP, path);
-                break;
-            default:
-                cluster.addLocation(ClusterLocationType.WORKING, path);
-                break;
-            }
-        }
-        return cluster;
-    }
-
-    /**
-     * Clicks on cancel button.
-     */
-    public void cancel() {
-        cancel.click();
-    }
-
-    /**
-     *  Click on next button which is the same as finish step 1.
-     */
-    public void clickNext() {
-        next.click();
-        waitForAngularToFinish();
-        Assert.assertTrue(summaryBox.isDisplayed(), "Summary box should be displayed.");
-    }
-
-    /**
-     *  Click on next button in the cluster creation page.
-     */
-    public void clickJustNext() {
-        next.click();
-        waitForAngularToFinish();
-    }
-
-    /**
-     * Click on save button.
-     */
-    public void clickSave() {
-        save.click();
-        waitForAlert();
-    }
-
-    /**
-     * Clicks on previous button.
-     */
-    public void clickPrevious() {
-        previous.click();
-        waitForAngularToFinish();
-        UIAssert.assertDisplayed(clusterBox, "Cluster box");
-    }
-
-    /**
-     * Method imitates click on check box.
-     * @param expectedState whether check box is expected to be enabled or not after click.
-     */
-    public void checkRegistry(boolean expectedState) {
-        WebElement checkbox = clusterBox.findElement(By.xpath("//input[@type='checkbox']"));
-        clickCheckBoxSecurely(checkbox, expectedState);
-        waitForAngularToFinish();
-    }
-
-    public WebElement getInterfaceEndpoint(Interfacetype interfacetype) {
-        String xpath = String.format("//input[@ng-model='clusterEntity.clusterModel.cluster.interfaces"
-            + ".interface[%sPos]._endpoint']", interfacetype.value());
-        return clusterBox.findElement(By.xpath(xpath));
-    }
-
-    public String getInterfaceEndpointValue(Interfacetype interfacetype) {
-        return getInterfaceEndpoint(interfacetype).getAttribute("value");
-    }
-
-    public WebElement getInterfaceVersion(Interfacetype interfacetype) {
-        String xpath = String.format("//input[@ng-model='clusterEntity.clusterModel.cluster.interfaces"
-            + ".interface[%sPos]._version']", interfacetype.value());
-        return clusterBox.findElement(By.xpath(xpath));
-    }
-
-    public String getInterfaceVersionValue(Interfacetype interfacetype) {
-        return getInterfaceVersion(interfacetype).getAttribute("value");
-    }
-
-    /**
-     * Method preventing the NullPointerException.
-     */
-    public String getValueFromSlices(String[] slices, String line) {
-        String trimValue;
-        if (slices[0].length()==(line.length())) {
-            trimValue = "";
-        }else {
-            trimValue = slices[1].trim();
-        }
-        return trimValue;
-    }
-
-    /**
-     * Checks whether registry interface is enabled for input or not.
-     */
-    public boolean isRegistryEnabled() {
-        return getInterfaceEndpoint(Interfacetype.REGISTRY).isEnabled()
-            && getInterfaceVersion(Interfacetype.REGISTRY).isEnabled();
-    }
-
-    private WebElement getNameUnavailable(){
-        return clusterBox.findElement(By.xpath(
-            "//div[contains(@class, 'nameInputDisplay') and contains(@class, 'custom-danger')]"));
-    }
-
-    public void checkNameUnavailableDisplayed(boolean isDisplayed) {
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getNameUnavailable(), "Name Unavailable not displayed");
-        }else {
-            try{
-                getNameUnavailable();
-                Assert.fail("Name Unavailable found");
-            } catch (Exception ex){
-                LOGGER.info("Name Unavailable not found");
-            }
-        }
-    }
-
-    @Override
-    public WebElement getEditXMLButton() {
-        return driver.findElement(By.id("cluster.editXML"));
-    }
-
-    @Override
-    public ClusterMerlin getEntityFromXMLPreview() {
-        return new ClusterMerlin(getXMLPreview());
-    }
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityPage.java
deleted file mode 100644
index 98bf9b5..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityPage.java
+++ /dev/null
@@ -1,692 +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.ImmutableMap;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.apache.falcon.entity.v0.Frequency;
-import org.apache.falcon.entity.v0.feed.Cluster;
-import org.apache.falcon.entity.v0.feed.LocationType;
-import org.apache.falcon.entity.v0.feed.Property;
-import org.apache.falcon.entity.v0.process.Input;
-import org.apache.falcon.entity.v0.process.Output;
-import org.apache.falcon.entity.v0.process.Retry;
-import org.apache.falcon.regression.Entities.FeedMerlin;
-import org.apache.falcon.regression.Entities.ProcessMerlin;
-import org.apache.falcon.regression.core.util.TimeUtil;
-import org.apache.falcon.regression.core.util.UIAssert;
-import org.apache.falcon.resource.InstancesResult;
-import org.apache.log4j.Logger;
-import org.openqa.selenium.By;
-import org.openqa.selenium.Keys;
-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.Select;
-import org.testng.asserts.SoftAssert;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-
-/**
- * Class representation of Search UI entity page.
- */
-public class EntityPage extends AbstractSearchPage {
-    private static final Logger LOGGER = Logger.getLogger(EntityPage.class);
-
-    /**
-     * Possible instance actions available on entity page.
-     */
-    public enum InstanceAction {
-        Log,
-        Resume,
-        Rerun,
-        Suspend,
-        Kill
-    }
-
-    public EntityPage(WebDriver driver) {
-        super(driver);
-    }
-
-    private WebElement getEntityTitle() {
-        final WebElement title = driver.findElement(By.id("entity-title"));
-        UIAssert.assertDisplayed(title, "entity title");
-        return title;
-    }
-
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(className = "dependencies-graph")
-    })
-    private WebElement dependencyBox;
-
-
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(xpath = "(.//*[contains(@class, 'detailsBox')])[2]")
-    })
-    private WebElement instanceListBox;
-
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(className = "summaryBox")
-    })
-    private WebElement propertiesBlock;
-
-    public String getEntityName() {
-        UIAssert.assertDisplayed(getEntityTitle(), "Entity title");
-        return getEntityTitle().getText().split(" ")[0];
-    }
-
-    @Override
-    public void checkPage() {
-        UIAssert.assertDisplayed(dependencyBox, "Dependency box");
-        UIAssert.assertDisplayed(instanceListBox, "Instance list box");
-        UIAssert.assertDisplayed(propertiesBlock, "Summary box");
-    }
-
-    public EntityPage refreshPage() {
-        final String entityName = getEntityName();
-        SearchPage searchPage = getPageHeader().gotoHome();
-        return searchPage.openEntityPage(entityName);
-    }
-
-    public void checkFeedProperties(FeedMerlin feed) {
-        openProperties();
-
-        final WebElement propertiesBox =
-            propertiesBlock.findElement(By.xpath("//div[@ui-view='feedSummary']"));
-        UIAssert.assertDisplayed(propertiesBox, "Properties box");
-
-        //all the parts of the entity properties
-        final List<WebElement> propertyParts = propertiesBox.findElements(By.xpath("./div"));
-        //First set of properties
-        final WebElement generalBox = propertyParts.get(0);
-        final List<WebElement> generalParts = generalBox.findElements(By.xpath("./div"));
-        SoftAssert softAssert = new SoftAssert();
-        //General
-        softAssert.assertEquals(generalParts.get(0).getText(), "General", "Unexpected heading");
-        final List<WebElement> nameAndDesc = generalParts.get(1).findElements(By.xpath("./div"));
-        softAssert.assertEquals(nameAndDesc.get(0).getText(), "Name: " + feed.getName(),
-            "Unexpected feed name in properties.");
-        softAssert.assertEquals(nameAndDesc.get(1).getText(), "Description: " + feed.getDescription(),
-            "Unexpected description in properties.");
-        //Tags
-        softAssert.assertEquals(generalParts.get(2).getText(), "Tags", "Unexpected heading");
-        softAssert.assertEquals(generalParts.get(3).getText(),
-            StringUtils.trimToEmpty(feed.getTags()),
-            "Unexpected tags");
-        //Groups
-        softAssert.assertEquals(generalParts.get(4).getText(), "Groups", "Unexpected heading");
-        softAssert.assertEquals(generalParts.get(5).getText(),
-            StringUtils.trimToEmpty(feed.getGroups()),
-            "Unexpected groups");
-        //Access Control list
-        softAssert.assertEquals(generalParts.get(6).getText(), "Access Control List",
-            "Unexpected heading");
-        final List<WebElement> ownerGrpPerm = generalParts.get(7).findElements(By.xpath("./div"));
-        softAssert.assertEquals(ownerGrpPerm.get(0).getText(),
-            "Owner: " + feed.getACL().getOwner(), "Unexpected owner");
-        softAssert.assertEquals(ownerGrpPerm.get(1).getText(),
-            "Group: " + feed.getACL().getGroup(), "Unexpected group");
-        softAssert.assertEquals(ownerGrpPerm.get(2).getText(),
-            "Permissions: " + feed.getACL().getPermission(), "Unexpected permission");
-        //Schema
-        softAssert.assertEquals(generalParts.get(8).getText(), "Schema",
-            "Unexpected heading for general properties");
-        final List<WebElement> locAndProvider = generalParts.get(9).findElements(By.xpath("./div"));
-        softAssert.assertEquals(locAndProvider.get(0).getText(),
-            "Location: " + feed.getSchema().getLocation(), "Unexpected schema locations");
-        softAssert.assertEquals(locAndProvider.get(1).getText(),
-            "Provider: " + feed.getSchema().getProvider(), "Unexpected schema provider");
-        //Properties
-        softAssert.assertEquals(generalParts.get(10).getText(), "Properties",
-            "Unexpected heading for general properties");
-        final List<WebElement> freqLateAvail = generalParts.get(11).findElements(By.xpath("./div"));
-        final Frequency feedFrequency = feed.getFrequency();
-        softAssert.assertEquals(freqLateAvail.get(0).getText(),
-            String.format("Frequency: Every %s %s",
-                feedFrequency.getFrequency(), feedFrequency.getTimeUnit()),
-            "Unexpected frequency");
-        final Frequency feedLateCutoff = feed.getLateArrival().getCutOff();
-        softAssert.assertEquals(freqLateAvail.get(1).getText(),
-            String.format("Late Arrival: Up to %s %s",
-                feedLateCutoff.getFrequency(), feedLateCutoff.getTimeUnit()),
-            "Unexpected late arrival");
-        softAssert.assertEquals(freqLateAvail.get(2).getText(),
-            String.format("Availability Flag:%s",
-                StringUtils.trimToEmpty(feed.getAvailabilityFlag())),
-            "Unexpected availability flag");
-        final List<WebElement> propertyElements =
-            generalParts.get(12).findElements(By.xpath("./div"));
-        List<String> displayedPropStr = new ArrayList<>();
-        for (WebElement webElement : propertyElements) {
-            displayedPropStr.add(webElement.getText());
-        }
-        Collections.sort(displayedPropStr);
-        final List<String> expectedPropStr = getFeedPropString(feed);
-        softAssert.assertEquals(displayedPropStr, expectedPropStr,
-            "Feed properties & displayed properties don't match. Expected: " + expectedPropStr
-                + " Actual: " + displayedPropStr);
-        //Storage type
-        softAssert.assertEquals(generalParts.get(13).getText(), "Default Storage Type:",
-            "Unexpected label for storage type.");
-        if (feed.getLocations() != null
-            && feed.getLocations().getLocations() != null
-            && feed.getLocations().getLocations().size() > 0) {
-            softAssert.assertEquals(generalParts.get(13).getText(), "File System",
-                "Unexpected storage type for feed.");
-        } else {
-            softAssert.fail("Need to add handler for other feed types.");
-        }
-        //Feed locations - Data followed by Stats followed by Meta
-        softAssert.assertEquals(generalParts.get(14).getText(), "Default Location:",
-            "Unexpected label for default location.");
-        softAssert.assertEquals(generalParts.get(15).getText(),
-            "Data\n" + feed.getFeedPath(LocationType.DATA),
-            "Unexpected label for feed data label");
-        softAssert.assertEquals(generalParts.get(16).getText(),
-            "Stats\n" + feed.getFeedPath(LocationType.STATS),
-            "Unexpected label for feed stats label");
-        softAssert.assertEquals(generalParts.get(17).getText(),
-            "Meta\n" + feed.getFeedPath(LocationType.META),
-            "Unexpected label for feed mata label");
-
-        //Second set of properties details with Source Cluster Properties
-        final WebElement clustersBox = propertyParts.get(1);
-        final List<WebElement> displayedClusters = clustersBox.findElements(By.xpath("./div"));
-        final List<Cluster> feedClusters = feed.getClusters().getClusters();
-        //test needs to be fixed when we have support for more than one feed cluster
-        softAssert.assertEquals(feedClusters.size(), 1,
-            "Current UI has support for only one feed cluster.");
-        checkFeedCluster(displayedClusters.get(0), feedClusters.get(0), softAssert);
-        softAssert.assertAll();
-    }
-
-    private void openProperties() {
-        final WebElement heading = propertiesBlock.findElement(By.tagName("h4"));
-        assertEquals(heading.getText(), "Properties",
-            "Unexpected heading of properties box.");
-        final WebElement upButton = propertiesBlock.findElement(By.className("pointer"));
-        upButton.click();
-    }
-
-    private void checkFeedCluster(WebElement cluster, Cluster feedCluster, SoftAssert softAssert) {
-        final List<WebElement> clusterElements = cluster.findElements(By.xpath("./div"));
-        final String vClusterName = clusterElements.get(1).getText();
-        softAssert.assertNotNull(feedCluster,
-            "Unexpected feed cluster is displayed: " + vClusterName);
-        final String clusterType = clusterElements.get(0).getText();
-        softAssert.assertEquals(clusterType,
-            WordUtils.capitalize(feedCluster.getType().toString().toLowerCase() + " Cluster"),
-            "Unexpected cluster type for cluster: " + vClusterName);
-        softAssert.assertEquals(clusterElements.get(2).getText(),
-            "Start: " + feedCluster.getValidity().getStart()
-                + "\nEnd: " + feedCluster.getValidity().getEnd(),
-            "Unexpected validity of the cluster: " + vClusterName);
-        softAssert.assertEquals(clusterElements.get(3).getText(), "Timezone: UTC",
-            "Unexpected timezone for validity of the cluster: " + vClusterName);
-        softAssert.assertEquals(clusterElements.get(4).getText(),
-            "Retention: Archive in " + feedCluster.getRetention().getLimit().getFrequency()
-                + " " + feedCluster.getRetention().getLimit().getTimeUnit(),
-            "Unexpected retention associated with cluster: " + vClusterName);
-    }
-
-    private List<String> getFeedPropString(FeedMerlin feed) {
-        List<String> retVals = new ArrayList<>();
-        for (Property property : feed.getProperties().getProperties()) {
-            retVals.add(property.getName() + ": " + property.getValue());
-        }
-        Collections.sort(retVals);
-        return retVals;
-    }
-
-    public void checkProcessProperties(ProcessMerlin process) {
-        openProperties();
-
-        final WebElement propertiesBox =
-            propertiesBlock.findElement(By.xpath("//div[@ui-view='processSummary']"));
-        UIAssert.assertDisplayed(propertiesBox, "Properties box");
-        final List<WebElement> propertiesParts = propertiesBox.findElements(By.xpath("./div"));
-        final WebElement generalPropBlock = propertiesParts.get(0);
-        final WebElement clusterPropBlock = propertiesParts.get(1);
-        final WebElement inputPropBlock = propertiesParts.get(2);
-        final WebElement outputPropBlock = propertiesParts.get(3);
-
-        //checking general properties
-        final List<WebElement> generalPropParts =
-            generalPropBlock.findElement(By.xpath("./*")).findElements(By.xpath("./*"));
-        SoftAssert softAssert = new SoftAssert();
-        softAssert.assertEquals(generalPropParts.get(0).getText(), "Process",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(1).getText(), "Name",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(2).getText(), process.getName(),
-            "Unexpected process name in general properties.");
-        softAssert.assertEquals(generalPropParts.get(3).getText(), "Tags",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(4).getText(),
-            StringUtils.defaultIfBlank(process.getTags(), "No tags selected"),
-            "Unexpected tags in general properties.");
-        softAssert.assertEquals(generalPropParts.get(5).getText(), "Workflow",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(6).getText(), "Name\nEngine\nVersion",
-            "Unexpected workflow properties in general properties.");
-        softAssert.assertEquals(generalPropParts.get(7).getText(),
-            String.format("%s%n%s%n%s",
-                StringUtils.defaultIfBlank(process.getWorkflow().getName(), ""),
-                process.getWorkflow().getEngine(), process.getWorkflow().getVersion()),
-            "Unexpected workflow properties in general properties.");
-        softAssert.assertEquals(generalPropParts.get(7).getText(), "Path",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(8).getText(), process.getWorkflow().getPath(),
-            "Unexpected workflow path in general properties.");
-        softAssert.assertEquals(generalPropParts.get(9).getText(), "Timing",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(10).getText(), "Timezone",
-            "Unexpected label in general properties.");
-        softAssert.assertEquals(generalPropParts.get(12).getText(),
-            String.format("Frequency%nEvery %s %s%n", process.getFrequency().getFrequency(),
-                process.getFrequency().getTimeUnit())
-                + "Max. parallel instances\n" + process.getParallel()
-                + "\nOrder\n" + process.getOrder().toString(),
-            "Unexpected frequency/parallel/order info in general properties.");
-        softAssert.assertEquals(generalPropParts.get(13).getText(), "Retry",
-            "Unexpected label in general properties.");
-        final Retry processRetry = process.getRetry();
-        softAssert.assertEquals(generalPropParts.get(14).getText(),
-            "Policy\n" + processRetry.getPolicy().toString().toLowerCase()
-                + "\nAttempts\n" + processRetry.getAttempts()
-                + "\nDelay\nUp to " + processRetry.getDelay().getFrequency()
-                + " " + processRetry.getDelay().getTimeUnit(),
-            "Unexpected policy/attempt/delay in general properties.");
-
-        //checking cluster properties
-        final List<WebElement> allClusterProps =
-            clusterPropBlock.findElements(By.xpath("./div/div/div"));
-        final WebElement clustersHeading = clusterPropBlock.findElement(By.xpath(".//h5"));
-        softAssert.assertEquals(clustersHeading.getText(), "Clusters",
-            "Unexpected label in clusters heading");
-        for (WebElement oneClusterProp : allClusterProps) {
-            final List<WebElement> clusterPropParts = oneClusterProp.findElements(By.xpath("./*"));
-            softAssert.assertEquals(clusterPropParts.get(0).getText(), "Name",
-                "Unexpected label in clusters properties");
-            final String clusterName = clusterPropParts.get(1).getText();
-            final org.apache.falcon.entity.v0.process.Cluster processCluster =
-                process.getClusterByName(clusterName);
-            softAssert.assertNotNull(processCluster,
-                "cluster with name " + clusterName + " was not present in process.");
-            softAssert.assertEquals(clusterName, processCluster.getName(),
-                "Unexpected cluster name in clusters properties");
-            softAssert.assertEquals(clusterPropParts.get(2).getText(), "Validity",
-                "Unexpected label in clusters properties");
-            softAssert.assertEquals(clusterPropParts.get(3).getText(),
-                "Start\n" + processCluster.getValidity().getStart()
-                + "\nEnd\n" + processCluster.getValidity().getEnd(),
-                "Unexpected start/end time in clusters properties");
-        }
-        //checking  inputs properties
-        final WebElement inputHeading = inputPropBlock.findElement(By.xpath(".//h5"));
-        softAssert.assertEquals(inputHeading.getText(), "Inputs",
-            "Unexpected heading for input properties.");
-        final List<WebElement> allInputsProps =
-            inputPropBlock.findElements(By.xpath("./div/div/*"));
-        for (WebElement oneInputProps : allInputsProps) {
-            final List<WebElement> inputPropParts = oneInputProps.findElements(By.xpath("./*"));
-            softAssert.assertEquals(inputPropParts.get(0).getText(), "Name",
-                "Unexpected label in input properties");
-            final String inputName = inputPropParts.get(1).getText();
-            final Input processInput = process.getInputByName(inputName);
-            softAssert.assertEquals(inputName, processInput.getName(),
-                "Unexpected input name in input properties");
-            softAssert.assertEquals(inputPropParts.get(2).getText(), "Feed",
-                "Unexpected label in input properties");
-            softAssert.assertEquals(inputPropParts.get(3).getText(), processInput.getFeed(),
-                "Unexpected label in input properties");
-            softAssert.assertEquals(inputPropParts.get(4).getText(), "Instance",
-                "Unexpected label in input properties");
-            softAssert.assertEquals(inputPropParts.get(5).getText(),
-                "Start\n" + processInput.getStart() + "\nEnd\n" + processInput.getEnd(),
-                "Unexpected start/end in input properties");
-        }
-        final WebElement outputHeading = outputPropBlock.findElement(By.tagName("h5"));
-        softAssert.assertEquals(outputHeading.getText(), "Outputs",
-            "Unexpected label for output properties.");
-        final List<WebElement> allOutputsProps =
-            outputPropBlock.findElements(By.xpath("./div/div/*"));
-        for (WebElement oneOutputProps : allOutputsProps) {
-            final List<WebElement> outputPropParts = oneOutputProps.findElements(By.xpath("./*"));
-            softAssert.assertEquals(outputPropParts.get(0).getText(), "Name",
-                "Unexpected label in output properties");
-            final String outputName = outputPropParts.get(1).getText();
-            final Output processOutput = process.getOutputByName(outputName);
-            softAssert.assertEquals(outputName, processOutput.getName(),
-                "Unexpected output name in output properties");
-            softAssert.assertEquals(outputPropParts.get(2).getText(), "Feed",
-                "Unexpected label in output properties");
-            softAssert.assertEquals(outputPropParts.get(3).getText(), processOutput.getFeed(),
-                "Unexpected feed name in output properties");
-            softAssert.assertEquals(outputPropParts.get(4).getText(), "Instance",
-                "Unexpected label in output properties");
-            softAssert.assertEquals(outputPropParts.get(5).getText(), processOutput.getInstance(),
-                "Unexpected instance in output properties");
-            softAssert.assertAll();
-        }
-    }
-
-    public void performActionOnSelectedInstances(InstanceAction instanceAction) {
-        driver.findElement(By.xpath(String.format("//td/div[%d]", instanceAction.ordinal() + 1))).click();
-        waitForAngularToFinish();
-        //timeout to refresh a view
-        TimeUtil.sleepSeconds(2);
-    }
-
-    public InstanceSummary getInstanceSummary() {
-        return new InstanceSummary(this);
-    }
-
-    /**
-     * Class representing all the displayed instance.
-     */
-    public static class InstanceSummary {
-        private final WebElement instanceListBox;
-        private final WebElement summaryTableHeading;
-
-        public InstanceSummary(EntityPage entityPage) {
-            instanceListBox = entityPage.instanceListBox;
-            UIAssert.assertDisplayed(instanceListBox, "instance list box");
-            assertEquals(instanceListBox.findElement(By.tagName("h4")).getText(),
-                "Instances",
-                "Unexpected heading in instances box.");
-
-            summaryTableHeading = instanceListBox.findElement(By.xpath(".//thead/tr"));
-        }
-
-        private List<WebElement> getTableRows() {
-            return instanceListBox.findElements(By.xpath(".//tbody/tr"));
-        }
-
-        /**
-         * Get instance summary starting for all the pages.
-         * @return instance summary
-         */
-        public List<OneInstanceSummary> getSummary() {
-            List<OneInstanceSummary> summary = new ArrayList<>();
-            final List<WebElement> tableBody = getTableRows();
-            //last line has page number
-            final WebElement pageNumberRow = tableBody.remove(tableBody.size() - 1);
-            final List<WebElement> pages = pageNumberRow.findElement(By.className("pagination"))
-                .findElements(By.className("ng-scope"));
-            final int numberOfPages = pages.size();
-            for (int pageNumber = 1; pageNumber <= numberOfPages; ++pageNumber) {
-                //We want to use new web elements to avoid stale element issues
-                final List<WebElement> newTableBody = getTableRows();
-                //last line has page number
-                final WebElement newPageNumberRow = newTableBody.remove(newTableBody.size() - 1);
-                final List<WebElement> newPages =
-                    newPageNumberRow.findElement(By.className("pagination"))
-                        .findElements(By.className("ng-scope"));
-                newPages.get(pageNumber-1).findElement(By.tagName("a")).click();
-                summary.addAll(getSummaryInner());
-            }
-            return summary;
-        }
-
-        /**
-         * Get instance summary starting for the current page.
-         * @return instance summary
-         */
-        private List<OneInstanceSummary> getSummaryInner() {
-            List<OneInstanceSummary> summary = new ArrayList<>();
-            final List<WebElement> tableBody = getTableRows();
-            //first line in body has buttons
-            tableBody.remove(0);
-            //last line has page number
-            tableBody.remove(tableBody.size() - 1);
-            //second last line is horizontal line
-            tableBody.remove(tableBody.size() - 1);
-            if (tableBody.size() == 1
-                && tableBody.get(0).getText().equals("There are no results")) {
-                return summary;
-            }
-            for (WebElement oneSummaryRow : tableBody) {
-                summary.add(new OneInstanceSummary(oneSummaryRow));
-            }
-            return summary;
-        }
-
-        public void check() {
-            final List<WebElement> summaryHeadParts = getSummaryHeadParts();
-            getSelectAllCheckBox(summaryHeadParts);
-            final WebElement instanceHeadLabel = summaryHeadParts.get(1);
-            assertEquals(instanceHeadLabel.getText(), "Instance",
-                "Unexpected label in instance summary heading");
-            getSummaryStartedButton();
-            getSummaryEndedButton();
-            getStatusDropDown();
-        }
-
-        public void setInstanceSummaryStartTime(String timeStr) {
-            final WebElement startTimeButton = getSummaryStartedButton();
-            startTimeButton.clear();
-            sendKeysSlowly(startTimeButton, timeStr);
-            startTimeButton.sendKeys(Keys.ENTER);
-        }
-
-        public void setInstanceSummaryEndTime(String timeStr) {
-            final WebElement endTimeButton = getSummaryEndedButton();
-            endTimeButton.clear();
-            sendKeysSlowly(endTimeButton, timeStr);
-            endTimeButton.sendKeys(Keys.ENTER);
-        }
-
-        public void selectInstanceSummaryStatus(String labelText) {
-            getStatusDropDown().selectByVisibleText(labelText);
-        }
-
-        public static OneInstanceSummary getOneSummary(final List<OneInstanceSummary> summaries,
-                                                       final String nominalTime) {
-            for (OneInstanceSummary oneSummary : summaries) {
-                if (oneSummary.getNominalTime().equals(nominalTime)) {
-                    return oneSummary;
-                }
-            }
-            return null;
-        }
-
-        public void checkSummary(InstancesResult.Instance[] apiSummary) {
-            final List<OneInstanceSummary> summary = getSummary();
-            assertEquals(apiSummary.length, summary.size(),
-                String.format("Length of the displayed instance summary is not same: %s %s",
-                    Arrays.toString(apiSummary), summary));
-            for (InstancesResult.Instance oneApiSummary : apiSummary) {
-                final OneInstanceSummary oneSummary =
-                    getOneSummary(summary, oneApiSummary.instance);
-                assertEquals(oneApiSummary.instance, oneSummary.getNominalTime(),
-                    "Nominal time of instance summary doesn't match.");
-                final SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
-                final Date apiStartTime = oneApiSummary.getStartTime();
-                if (apiStartTime == null) {
-                    assertTrue(StringUtils.isEmpty(oneSummary.getStartTime()),
-                        "Displayed start time : " + oneSummary + " is not "
-                            + "consistent with start time of api which is null");
-                } else {
-                    assertEquals(oneSummary.getStartTime(), dateFormat.format(apiStartTime),
-                        "Displayed start time : " + oneSummary + " is not "
-                            + "consistent with start time of api: " + apiStartTime);
-                }
-                final Date apiEndTime = oneApiSummary.getEndTime();
-                if (apiEndTime == null) {
-                    assertTrue(StringUtils.isEmpty(oneSummary.getEndTime()),
-                        "Displayed end time : " + oneSummary + " is not "
-                            + "consistent end start time of api which is null");
-                } else {
-                    assertEquals(oneSummary.getEndTime(), dateFormat.format(apiEndTime),
-                        "Displayed end time : " + oneSummary + " is not "
-                            + "consistent with end time of api: " + apiEndTime);
-                }
-                assertEquals(oneApiSummary.status.toString(), oneSummary.getStatus(),
-                    "Status of instance summary doesn't match.");
-            }
-        }
-
-        public WebElement getSummaryStartedButton() {
-            final WebElement startedBox = getSummaryHeadParts().get(2);
-            assertEquals(startedBox.getText(), "Started ",
-                "Unexpected label in instance summary heading");
-            return startedBox.findElement(By.tagName("input"));
-        }
-
-        public WebElement getSummaryEndedButton() {
-            final WebElement endedBox = getSummaryHeadParts().get(3);
-            assertEquals(endedBox.getText(), "Ended ",
-                "Unexpected label in instance summary heading");
-            return endedBox.findElement(By.tagName("input"));
-        }
-
-        public Select getStatusDropDown() {
-            final WebElement statusBox = getSummaryHeadParts().get(4);
-            assertEquals(statusBox.getText(),
-                "Status \nALL\nRUNNING\nSUCCEEDED\nSUSPENDED\nWAITING\nKILLED",
-                "Unexpected label in instance summary heading");
-            return new Select(statusBox.findElement(By.tagName("select")));
-        }
-
-        public List<WebElement> getSummaryHeadParts() {
-            return summaryTableHeading.findElements(By.xpath("./th/div"));
-        }
-
-        public WebElement getSelectAllCheckBox(List<WebElement> summaryHeadParts) {
-            return summaryHeadParts.get(0).findElement(By.tagName("input"));
-        }
-    }
-
-
-    public InstancePage openInstance(String nominalTime) {
-        instanceListBox.findElement(By.xpath("//button[contains(.,'" + nominalTime + "')]")).click();
-        return PageFactory.initElements(driver, InstancePage.class);
-    }
-
-    /**
-     * Class representing summary of one instance.
-     */
-    public static final class OneInstanceSummary {
-        private final WebElement oneInstanceSummary;
-        private final String startTime;
-        private final String endTime;
-        private final String status;
-        private final String nominalTime;
-
-        private final Map<Object, Object> statusColorMap = ImmutableMap.builder()
-            .put("WAITING", "rgba(51, 51, 51, 1)")
-            .put("RUNNING", "")
-            .put("KILLED", "")
-            .put("SUCCEEDED", "")
-            .put("SUSPENDED", "")
-            .put("FAILED", "").build();
-        private boolean isCheckBoxTicked;
-
-        private OneInstanceSummary(WebElement oneInstanceSummary) {
-            this.oneInstanceSummary = oneInstanceSummary;
-            nominalTime = getNominalTimeButton().getText();
-            startTime = getSummaryCols().get(2).getText();
-            endTime = getSummaryCols().get(3).getText();
-
-            final WebElement statusElement = getSummaryCols().get(4);
-            assertTrue(statusElement.isDisplayed(), "Status should be displayed");
-            final String statusText = statusElement.getText();
-            final Object expectedColor = statusColorMap.get(statusText.trim());
-            assertNotNull(expectedColor,
-                "Unexpected status: " + statusText + " not found in: " + statusColorMap);
-            //status color not checked
-            //final String actualColor = statusElement.getCssValue("color");
-            //assertEquals(actualColor, expectedColor,
-            //    "Unexpected color for status in process instances block: " + statusText);
-            status = statusText;
-            isCheckBoxTicked = getCheckBox().isSelected();
-        }
-
-        private List<WebElement> getSummaryCols() {
-            return oneInstanceSummary.findElements(By.tagName("td"));
-        }
-
-        private WebElement getCheckBox() {
-            return getSummaryCols().get(0).findElement(By.tagName("input"));
-        }
-
-        private WebElement getNominalTimeButton() {
-            return getSummaryCols().get(1);
-        }
-
-        public String getStartTime() {
-            return startTime;
-        }
-
-        public String getEndTime() {
-            return endTime;
-        }
-
-        public String getStatus() {
-            return status;
-        }
-        public String getNominalTime() {
-            return nominalTime;
-        }
-
-        public boolean isCheckBoxSelected() {
-            return isCheckBoxTicked;
-        }
-
-        /**
-         * Click the checkbox corresponding to this result. It is the responsibility of the
-         * client to make sure that the web element for the instance is displayed and valid.
-         */
-        public void clickCheckBox() {
-            getCheckBox().click();
-            // Toggling of checkbox should change its internal state
-            // Note that we can't expect the web element to be displayed & valid at the point this
-            // object is used
-            isCheckBoxTicked = !isCheckBoxTicked;
-        }
-
-        @Override
-        public String toString() {
-            return "OneInstanceSummary{"
-                + "checkBox=" + isCheckBoxSelected()
-                + ", nominalTime=" + getNominalTime()
-                + ", startTime=" + getStartTime()
-                + ", endTime=" + getEndTime()
-                + ", status=" + getStatus()
-                + "}";
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityWizardPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityWizardPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityWizardPage.java
deleted file mode 100644
index 72c03cf..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/EntityWizardPage.java
+++ /dev/null
@@ -1,94 +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.entity.v0.Entity;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.support.FindBy;
-import org.testng.Assert;
-
-/**
- * https://issues.apache.org/jira/browse/FALCON-1546.
- * Parent class for cluster, feed and process wizard pages.
- */
-public abstract class EntityWizardPage extends AbstractSearchPage {
-    @FindBy(xpath = "//i[contains(@class, 'pointer')]")
-    protected WebElement xmlPreviewPointer;
-    protected WebElement xmlPreview = null;
-
-    public EntityWizardPage(WebDriver driver) {
-        super(driver);
-    }
-
-    /**
-     * Expand/collapse xml preview.
-     * @param shouldBeExpanded should preview be expanded or collapsed.
-     */
-    public void clickXMLPreview(boolean shouldBeExpanded) {
-        if (isXmlPreviewExpanded() != shouldBeExpanded) {
-            xmlPreviewPointer.click();
-        }
-        Assert.assertEquals(isXmlPreviewExpanded(), shouldBeExpanded,
-            "Xml preview should be " + (shouldBeExpanded ? " expanded." : " collapsed."));
-    }
-
-    /**
-     * @return true if xml preview exists and is displayed, false otherwise.
-     */
-    public boolean isXmlPreviewExpanded() {
-        xmlPreview = getElementOrNull("//textarea[@ng-model='prettyXml']");
-        return xmlPreview != null && xmlPreview.isDisplayed();
-    }
-
-    public String getXMLPreview() {
-        //preview block fetches changes slower then they appear on the form
-        waitForAngularToFinish();
-        clickXMLPreview(true);
-        return xmlPreview.getAttribute("value");
-    }
-
-    public abstract Entity getEntityFromXMLPreview();
-
-    /**
-     * Pushes xml into xml preview block.
-     * @param xml entity definition
-     */
-    public void setXmlPreview(String xml) {
-        clickEditXml(true);
-        xmlPreview.clear();
-        xmlPreview.sendKeys(xml);
-        waitForAngularToFinish();
-        clickEditXml(false);
-    }
-
-    /**
-     * Clicks on editXml button.
-     */
-    public void clickEditXml(boolean shouldBeEnabled) {
-        waitForAngularToFinish();
-        clickXMLPreview(true);
-        getEditXMLButton().click();
-        String disabled = xmlPreview.getAttribute("disabled");
-        Assert.assertEquals(disabled == null, shouldBeEnabled,
-            "Xml preview should be " + (shouldBeEnabled ? "enabled" : "disabled"));
-    }
-
-    public abstract WebElement getEditXMLButton();
-}

http://git-wip-us.apache.org/repos/asf/falcon/blob/8e49379d/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/FeedWizardPage.java
----------------------------------------------------------------------
diff --git a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/FeedWizardPage.java b/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/FeedWizardPage.java
deleted file mode 100644
index 3dfab38..0000000
--- a/falcon-regression/merlin/src/main/java/org/apache/falcon/regression/ui/search/FeedWizardPage.java
+++ /dev/null
@@ -1,652 +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.Entities.FeedMerlin;
-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.ui.Select;
-import org.testng.Assert;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-
-/** Page object of the Feed creation page. */
-public class FeedWizardPage extends EntityWizardPage {
-
-    private static final Logger LOGGER = Logger.getLogger(FeedWizardPage.class);
-
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(className = "feedForm")
-    })
-    private WebElement feedBox;
-
-    @FindBys({
-            @FindBy(className = "mainUIView"),
-            @FindBy(className = "feedForm"),
-            @FindBy(className = "nextBtn")
-    })
-    private WebElement nextButton;
-
-    @FindBys({
-        @FindBy(className = "mainUIView"),
-        @FindBy(className = "feedForm"),
-        @FindBy(className = "prevBtn")
-    })
-    private WebElement previousButton;
-
-    @FindBys({
-            @FindBy(xpath = "//button[contains(.,'add tag')]")
-    })
-    private WebElement addTagButton;
-
-    @FindBys({
-        @FindBy(xpath = "//button[contains(.,'delete')]")
-    })
-    private WebElement deleteButton;
-
-    @FindBys({
-            @FindBy(xpath = "//button[contains(.,'add property')]")
-    })
-    private WebElement addPropertyButton;
-
-    @FindBys({
-        @FindBy(xpath = "//button[contains(.,'Catalog Storage')]")
-    })
-    private WebElement catalogStorageButton;
-
-    @FindBys({
-            @FindBy(id = "feed.step5")
-    })
-    private WebElement saveFeedButton;
-
-    @FindBy(xpath = "//a[contains(.,'Cancel')]")
-    private WebElement cancelButton;
-
-    public FeedWizardPage(WebDriver driver) {
-        super(driver);
-    }
-
-    @Override
-    public void checkPage() {
-        UIAssert.assertDisplayed(feedBox, "Feed box");
-    }
-
-    private WebElement getFeedName() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.name']"));
-    }
-    private WebElement getFeedDescription() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.description']"));
-    }
-    private WebElement getFeedTagKey(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='tag.key']")).get(index);
-    }
-    private WebElement getFeedTagValue(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='tag.value']")).get(index);
-    }
-    private WebElement getFeedGroups() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.groups']"));
-    }
-    private WebElement getFeedACLOwner() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.ACL.owner']"));
-    }
-    private WebElement getFeedACLGroup() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.ACL.group']"));
-    }
-    private WebElement getFeedACLPermissions() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.ACL.permission']"));
-    }
-    private WebElement getFeedSchemaLocation() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.schema.location']"));
-    }
-    private WebElement getFeedSchemaProvider() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.schema.provider']"));
-    }
-
-    private WebElement getFeedFrequencyQuantity() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.frequency.quantity']"));
-    }
-    private Select getFeedFrequencyUnit() {
-        return new Select(feedBox.findElement(By.xpath("//select[@ng-model='feed.frequency.unit']")));
-    }
-    private WebElement getFeedLateArrivalCheckBox() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.lateArrival.active']"));
-    }
-    private WebElement getFeedLateArrivalCutOffQuantity() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.lateArrival.cutOff.quantity']"));
-    }
-    private Select getFeedLateArrivalCutOffUnit() {
-        return new Select(feedBox.findElement(By.xpath("//select[@ng-model='feed.lateArrival.cutOff.unit']")));
-    }
-    private WebElement getFeedAvailabilityFlag() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='feed.availabilityFlag']"));
-    }
-    private Select getFeedTimeZone() {
-        return new Select(feedBox.findElement(By.xpath("//time-zone-select[@ng-model='feed.timezone']/select")));
-    }
-
-    private WebElement getQueueName() {
-        return feedBox.findElement(By.xpath("//label[.='queueName']/following-sibling::div/input"));
-    }
-
-    private Select getJobPriority() {
-        return new Select(feedBox.findElement(By.xpath("//label[.='jobPriority']/following-sibling::div/select")));
-    }
-
-    private WebElement getTimeoutQuantity() {
-        return feedBox.findElement(By.xpath("//label[.='timeout']/following-sibling::div/input"));
-    }
-
-    private Select getTimeoutUnit() {
-        return new Select(feedBox.findElement(By.xpath("//label[.='timeout']/following-sibling::div/select")));
-    }
-
-    private WebElement getParallel() {
-        return feedBox.findElement(By.xpath("//label[.='parallel']/following-sibling::div/input"));
-    }
-
-    private WebElement getMaxMaps() {
-        return feedBox.findElement(By.xpath("//label[.='maxMaps']/following-sibling::div/input"));
-    }
-
-    private WebElement getMapBandwidthKB() {
-        return feedBox.findElement(
-            By.xpath("//label[.='mapBandwidthKB']/following-sibling::div/input"));
-    }
-
-    private WebElement getFeedPropertyKey(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='property.key']")).get(index);
-    }
-    private WebElement getFeedPropertyValue(int index) {
-        return feedBox.findElements(By.xpath(
-            "//div[@ng-repeat='property in feed.customProperties']/*/input[@ng-model='property.value']")).get(index);
-    }
-
-    private WebElement getFeedPath(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='location.path']")).get(index);
-    }
-
-    private WebElement getFeedCatalogTableUri() {
-        return feedBox.findElement(
-            By.xpath("//input[@ng-model='feed.storage.catalog.catalogTable.uri']"));
-    }
-
-    private Select getFeedClusterSource() {
-        return new Select(feedBox.findElement(By.id("clusterNameSelect")));
-    }
-
-    private WebElement getFeedClusterRetentionLimit() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='cluster.retention.quantity']"));
-    }
-
-    private Select getFeedClusterRetentionUnit() {
-        return new Select(feedBox.findElement(By.xpath("//select[@ng-model='cluster.retention.unit']")));
-    }
-
-    private WebElement getFeedClusterValidityStartDate() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='cluster.validity.start.date']"));
-    }
-
-    private WebElement getFeedClusterValidityHour(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='hours']")).get(index);
-    }
-
-    private WebElement getFeedClusterValidityMinutes(int index) {
-        return feedBox.findElements(By.xpath("//input[@ng-model='minutes']")).get(index);
-    }
-
-    private WebElement getFeedClusterValidityMeridian(int index) {
-        return feedBox.findElements(By.xpath("//td[@ng-show='showMeridian']/button")).get(index);
-    }
-
-    private WebElement getFeedClusterValidityEndDate() {
-        return feedBox.findElement(By.xpath("//input[@ng-model='cluster.validity.end.date']"));
-    }
-
-    public List<String> getFeedFrequencyUnitValues(){
-        return getDropdownValues(getFeedFrequencyUnit());
-    }
-
-    public List<String> getFeedLateArrivalCutOffUnitValues(){
-        return getDropdownValues(getFeedLateArrivalCutOffUnit());
-    }
-
-    public List<String> getFeedClusterSourceValues(){
-        return getDropdownValues(getFeedClusterSource());
-    }
-
-    public List<String> getFeedClusterRetentionUnitValues(){
-        return getDropdownValues(getFeedClusterRetentionUnit());
-    }
-
-    public List<String> getJobPriorityValues(){
-        return getDropdownValues(getJobPriority());
-    }
-
-    public List<String> getTimeoutUnitValues(){
-        return getDropdownValues(getTimeoutUnit());
-    }
-
-    public void isFeedFrequencyDisplayed(boolean isDisplayed) {
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getFeedFrequencyQuantity(), "Frequency Quantity");
-        }else {
-            try{
-                getFeedFrequencyQuantity();
-                Assert.fail("Frequency Quantity found");
-            } catch (Exception ex){
-                LOGGER.info("Frequency Quantity not found");
-            }
-        }
-    }
-
-    public void isFeedDataPathDisplayed(boolean isDisplayed) {
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getFeedPath(0), "Feed Data Path");
-        }else {
-            try{
-                getFeedPath(0);
-                Assert.fail("Feed Data Path found");
-            } catch (Exception ex){
-                LOGGER.info("Feed Data Path not found");
-            }
-        }
-    }
-
-    public void isFeedClusterRetentionDisplayed(boolean isDisplayed) {
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getFeedClusterRetentionLimit(), "Cluster Retention Limit");
-        }else {
-            try{
-                getFeedClusterRetentionLimit();
-                Assert.fail("Cluster Retention Limit found");
-            } catch (Exception ex){
-                LOGGER.info("Cluster Retention Limit not found");
-            }
-        }
-    }
-
-    public void isSaveFeedButtonDisplayed(boolean isDisplayed) {
-        if (isDisplayed){
-            UIAssert.assertDisplayed(saveFeedButton, "Save Button");
-        }else {
-            try{
-                getSaveFeedButton();
-                Assert.fail("Save Button found");
-            } catch (Exception ex){
-                LOGGER.info("Save Button not found");
-            }
-        }
-    }
-
-    private WebElement getSaveFeedButton(){
-        return saveFeedButton;
-    }
-
-    public void clickNext(){
-        nextButton.click();
-        waitForAngularToFinish();
-    }
-
-    public void clickPrevious(){
-        previousButton.click();
-    }
-
-    public void clickCancel(){
-        cancelButton.click();
-    }
-
-    public void clickCatalogStorageButton(){
-        catalogStorageButton.click();
-        waitForAngularToFinish();
-    }
-
-    public void setFeedName(String name){
-        sendKeysSlowly(getFeedName(), name);
-    }
-    public void setFeedDescription(String description){
-        getFeedDescription().sendKeys(description);
-    }
-    public void setFeedTagKey(int index, String tagKey){
-        getFeedTagKey(index).sendKeys(tagKey);
-    }
-    public void setFeedTagValue(int index, String tagValue){
-        getFeedTagValue(index).sendKeys(tagValue);
-    }
-
-    // Tags are in the format, "first=yes","second=yes","third=yes". Need a separate method to handle this
-    public void setFeedTags(String tagsStr){
-        if (tagsStr == null){
-            return;
-        }
-        String[] tags = tagsStr.split(",");
-        for (int i=0; i < tags.length; i++){
-            String[] keyValue = tags[i].split("=");
-            setFeedTagKey(i, keyValue[0]);
-            setFeedTagValue(i, keyValue[1]);
-            if (tags.length > i+1){
-                addTagButton.click();
-            }
-        }
-    }
-
-    public void isTagsDisplayed(int index, boolean isDisplayed){
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getFeedTagKey(index), "Tag Key Index - " + index);
-            UIAssert.assertDisplayed(getFeedTagValue(index), "Tag Value Index - " + index);
-        }else{
-            try{
-                getFeedTagKey(index);
-                Assert.fail("Tag Key Index - " + index + " found");
-            } catch (Exception ex){
-                LOGGER.info("Tag Key Index - " + index + " not found");
-            }
-            try{
-                getFeedTagValue(index);
-                Assert.fail("Tag Key Value - " + index + " found");
-            } catch (Exception ex){
-                LOGGER.info("Tag Key Value - " + index + " not found");
-            }
-        }
-    }
-
-    public String getFeedTagKeyText(int index){
-        return getFeedTagKey(index).getAttribute("value");
-    }
-
-    public String getFeedTagValueText(int index){
-        return getFeedTagValue(index).getAttribute("value");
-    }
-
-    public String getFeedGroupsText(){
-        return getFeedGroups().getAttribute("value");
-    }
-
-    public String getFeedFrequencyQuantityText(){
-        return getFeedFrequencyQuantity().getAttribute("value");
-    }
-
-    public String getFeedLateArrivalCutOffQuantityText(){
-        return getFeedLateArrivalCutOffQuantity().getAttribute("value");
-    }
-
-    public String getFeedPathText(int index){
-        return getFeedPath(index).getAttribute("value");
-    }
-
-    public String getFeedClusterRetentionLimitText(){
-        return getFeedClusterRetentionLimit().getAttribute("value");
-    }
-
-    public String getFeedClusterRetentionUnitText(){
-        return getFeedClusterRetentionUnit().getFirstSelectedOption().getText();
-    }
-
-    public void addProperty(){
-        waitForAngularToFinish();
-        addPropertyButton.click();
-    }
-
-    public void isPropertyDisplayed(int index, boolean isDisplayed){
-        if (isDisplayed){
-            UIAssert.assertDisplayed(getFeedPropertyKey(index), "Property Key Index - " + index);
-            UIAssert.assertDisplayed(getFeedPropertyValue(index), "Property Value Index - " + index);
-        }else{
-            try{
-                getFeedTagKey(index);
-                Assert.fail("Property Key Index - " + index + " found");
-            } catch (Exception ex){
-                LOGGER.info("Property Key Index - " + index + " not found");
-            }
-            try{
-                getFeedTagValue(index);
-                Assert.fail("Property Key Value - " + index + " found");
-            } catch (Exception ex){
-                LOGGER.info("Property Key Value - " + index + " not found");
-            }
-        }
-    }
-
-
-    public void deleteTagOrProperty(){
-        deleteButton.click();
-    }
-
-    public void setFeedGroups(String feedGroups){
-        getFeedGroups().sendKeys(feedGroups);
-    }
-
-    public void setFeedACLOwner(String feedACLOwner){
-        getFeedACLOwner().clear();
-        getFeedACLOwner().sendKeys(feedACLOwner);
-    }
-    public void setFeedACLGroup(String feedACLGroup){
-        getFeedACLGroup().clear();
-        getFeedACLGroup().sendKeys(feedACLGroup);
-    }
-    public void setFeedACLPermissions(String feedACLPermissions){
-        getFeedACLPermissions().clear();
-        getFeedACLPermissions().sendKeys(feedACLPermissions);
-    }
-    public void setFeedSchemaLocation(String feedSchemaLocation){
-        sendKeysSlowly(getFeedSchemaLocation(), feedSchemaLocation);
-    }
-    public void setFeedSchemaProvider(String feedSchemaProvider){
-        sendKeysSlowly(getFeedSchemaProvider(), feedSchemaProvider);
-    }
-
-    public void setFeedFrequencyQuantity(String frequencyQuantity){
-        getFeedFrequencyQuantity().sendKeys(frequencyQuantity);
-    }
-    public void setFeedFrequencyUnit(String frequencyUnit){
-        getFeedFrequencyUnit().selectByVisibleText(frequencyUnit);
-    }
-
-    public void setFeedLateArrivalCheckBox(){
-        getFeedLateArrivalCheckBox().click();
-    }
-    public void setFeedLateArrivalCutOffQuantity(int lateArrivalCutOffQuantity){
-        getFeedLateArrivalCutOffQuantity().sendKeys(Integer.toString(lateArrivalCutOffQuantity));
-    }
-    public void setFeedLateArrivalCutOffUnit(String lateArrivalCutOffUnit){
-        getFeedLateArrivalCutOffUnit().selectByVisibleText(lateArrivalCutOffUnit);
-    }
-    public void setFeedAvailabilityFlag(String availabilityFlag){
-        getFeedAvailabilityFlag().sendKeys(availabilityFlag);
-    }
-    public void setFeedTimeZone(){
-        String timeZone = "GMT+00:00";
-        getFeedTimeZone().selectByValue(timeZone);
-    }
-    public void setQueueName(String queueName){
-        getQueueName().clear();
-        getQueueName().sendKeys(queueName);
-    }
-    public void setJobPriority(String jobPriority) {
-        getJobPriority().selectByVisibleText(jobPriority);
-    }
-    public void setTimeoutQuantity(String timeoutQuantity){
-        getTimeoutQuantity().clear();
-        getTimeoutQuantity().sendKeys(timeoutQuantity);
-    }
-    public void setTimeoutUnit(String timeoutUnit) {
-        getTimeoutUnit().selectByVisibleText(timeoutUnit);
-    }
-    public void setParallel(String parallel){
-        getParallel().clear();
-        getParallel().sendKeys(parallel);
-    }
-    public void setMaxMaps(String maxMaps){
-        getMaxMaps().clear();
-        getMaxMaps().sendKeys(maxMaps);
-    }
-    public void setMapBandwidthKB(String mapBandwidthKB){
-        getMapBandwidthKB().clear();
-        getMapBandwidthKB().sendKeys(mapBandwidthKB);
-    }
-    public void setFeedPropertyKey(int index, String propertyKey){
-        getFeedPropertyKey(index).sendKeys(propertyKey);
-    }
-    public void setFeedPropertyValue(int index, String propertyValue){
-        getFeedPropertyValue(index).sendKeys(propertyValue);
-    }
-
-    public void setFeedPath(int index, String path){
-        getFeedPath(index).clear();
-        getFeedPath(index).sendKeys(path);
-    }
-
-    public void setFeedCatalogTableUri(String catalogTableUri){
-        getFeedCatalogTableUri().sendKeys(catalogTableUri);
-    }
-
-    public void setFeedClusterSource(String clusterSource){
-        getFeedClusterSource().selectByVisibleText(clusterSource);
-    }
-
-    public void setFeedClusterRetentionLimit(String clusterRetentionLimit){
-        getFeedClusterRetentionLimit().clear();
-        sendKeysSlowly(getFeedClusterRetentionLimit(), clusterRetentionLimit);
-    }
-
-    public void setFeedClusterRetentionUnit(String clusterRetentionUnit){
-        getFeedClusterRetentionUnit().selectByVisibleText(clusterRetentionUnit);
-    }
-
-    public void setFeedClusterValidityStartDate(String clusterValidityStartDate){
-        getFeedClusterValidityStartDate().clear();
-        sendKeysSlowly(getFeedClusterValidityStartDate(), clusterValidityStartDate);
-    }
-    public void setFeedClusterValidityHour(int index, String clusterValidityHour){
-        getFeedClusterValidityHour(index).clear();
-        getFeedClusterValidityHour(index).sendKeys(clusterValidityHour);
-    }
-    public void setFeedClusterValidityMinutes(int index, String clusterValidityMinutes){
-        getFeedClusterValidityMinutes(index).clear();
-        getFeedClusterValidityMinutes(index).sendKeys(clusterValidityMinutes);
-    }
-    public void setFeedClusterValidityMeridian(int index, String clusterValidityMeridian){
-        // Toggle AM PM, if clusterValidityMeridian value is not equal to AM PM Button text
-        if (!clusterValidityMeridian.equalsIgnoreCase(getFeedClusterValidityMeridian(index).getText())){
-            getFeedClusterValidityMeridian(index).click();
-        }
-    }
-    public void setFeedClusterValidityEndDate(String clusterValidityEndDate){
-        getFeedClusterValidityEndDate().clear();
-        sendKeysSlowly(getFeedClusterValidityEndDate(), clusterValidityEndDate);
-    }
-
-    // Enter feed info on Page 1 of FeedSetup Wizard
-    public void setFeedGeneralInfo(FeedMerlin feed) {
-        setFeedName(feed.getName());
-        setFeedDescription(feed.getDescription());
-        setFeedTags(feed.getTags());
-        setFeedGroups(feed.getGroups());
-        setFeedACLOwner(feed.getACL().getOwner());
-        setFeedACLGroup(feed.getACL().getGroup());
-        setFeedACLPermissions(feed.getACL().getPermission());
-        setFeedSchemaLocation(feed.getSchema().getLocation());
-        setFeedSchemaProvider(feed.getSchema().getProvider());
-        waitForAngularToFinish();
-    }
-
-    // Enter feed info on Page 2 of FeedSetup Wizard
-    public void setFeedPropertiesInfo(FeedMerlin feed){
-        setFeedFrequencyQuantity(feed.getFrequency().getFrequency());
-        setFeedFrequencyUnit(feed.getFrequency().getTimeUnit().toString());
-        setFeedLateArrivalCheckBox();
-        setFeedLateArrivalCutOffQuantity(feed.getLateArrival().getCutOff().getFrequencyAsInt());
-        setFeedLateArrivalCutOffUnit(feed.getLateArrival().getCutOff().getTimeUnit().toString());
-        setFeedAvailabilityFlag(feed.getAvailabilityFlag());
-        setFeedTimeZone();
-        setFeedPropertyKey(0, feed.getProperties().getProperties().get(0).getName());
-        setFeedPropertyValue(0, feed.getProperties().getProperties().get(0).getValue());
-        addProperty();
-        waitForAngularToFinish();
-        setFeedPropertyKey(1, feed.getProperties().getProperties().get(1).getName());
-        setFeedPropertyValue(1, feed.getProperties().getProperties().get(1).getValue());
-        waitForAngularToFinish();
-    }
-
-    // Enter feed info on Page 3 of FeedSetup Wizard
-    public void setFeedLocationInfo(FeedMerlin feed){
-        setFeedPath(0, feed.getLocations().getLocations().get(0).getPath());
-        setFeedPath(1, feed.getLocations().getLocations().get(1).getPath());
-        setFeedPath(2, feed.getLocations().getLocations().get(2).getPath());
-        waitForAngularToFinish();
-    }
-
-    // Enter feed info on Page 4 of FeedSetup Wizard
-    public void setFeedClustersInfo(FeedMerlin feed){
-        setFeedClusterSource(feed.getClusters().getClusters().get(0).getName());
-        setFeedLocationInfo(feed);
-        Date startDate = feed.getClusters().getClusters().get(0).getValidity().getStart();
-        Date endDate = feed.getClusters().getClusters().get(0).getValidity().getEnd();
-        setFeedClusterValidityStartDate(new SimpleDateFormat("MM/dd/yyyy").format(startDate));
-        setFeedClusterValidityHour(0, new SimpleDateFormat("h").format(startDate));
-        setFeedClusterValidityMinutes(0, new SimpleDateFormat("m").format(startDate));
-        setFeedClusterValidityMeridian(0, new SimpleDateFormat("a").format(startDate));
-        setFeedClusterValidityEndDate(new SimpleDateFormat("MM/dd/yyyy").format(endDate));
-        setFeedClusterValidityHour(1, new SimpleDateFormat("h").format(endDate));
-        setFeedClusterValidityMinutes(1, new SimpleDateFormat("m").format(endDate));
-        setFeedClusterValidityMeridian(1, new SimpleDateFormat("a").format(endDate));
-        /*
-        The merlin feed has 9000 months.
-        The UI only support till two digits.
-        Need to send hardcoded value of 99,
-        instead of feed.getClusters().getClusters().get(0).getRetention().getLimit().getFrequency()
-        */
-        setFeedClusterRetentionLimit("99");
-        setFeedClusterRetentionUnit(feed.getClusters().getClusters().get(0)
-            .getRetention().getLimit().getTimeUnit().name());
-        waitForAngularToFinish();
-    }
-
-    // setFeed method runs the default feed setup wizard, entering data on each page
-    public void setFeed(FeedMerlin feed){
-        setFeedGeneralInfo(feed);
-        clickNext();
-        setFeedPropertiesInfo(feed);
-        clickNext();
-        setFeedLocationInfo(feed);
-        clickNext();
-        setFeedClustersInfo(feed);
-        clickNext();
-        saveFeedButton.click();
-        waitForAlert();
-    }
-
-    @Override
-    public FeedMerlin getEntityFromXMLPreview() {
-        return FeedMerlin.fromString(getXMLPreview());
-    }
-
-    @Override
-    public WebElement getEditXMLButton() {
-        return driver.findElement(By.id("feed.editXML"));
-    }
-
-}