From 598bdb7352a27d690004429fa3e70659dc5bd914 Mon Sep 17 00:00:00 2001
From: anttil <anttil>
Date: Wed, 12 Sep 2012 05:57:55 +0000
Subject: [PATCH] SWE-2 / SP-263: Deletion of projects, spaces and experiment
 types. Emptying trash.

SVN: 26600
---
 .../web/client/application/menu/TopMenu.java  |  5 +-
 .../application/ui/deletion/DeletionGrid.java |  1 +
 .../EmptyTrashConfirmationDialog.java         |  1 +
 .../PermanentDeletionConfirmationDialog.java  |  1 +
 .../entity_type/AbstractEntityTypeGrid.java   |  4 +-
 .../ui/experiment/ExperimentBrowserGrid.java  |  3 +
 ...erimentListDeletionConfirmationDialog.java |  2 +
 ...ProjectListDeletionConfirmationDialog.java |  1 +
 .../cisd/openbis/uitest/ManualTest.java       |  6 +-
 .../cisd/openbis/uitest/SampleTest.java       |  2 +-
 .../uitest/infra/ApplicationRunner.java       | 12 +++
 .../openbis/uitest/infra/SeleniumTest.java    | 12 +++
 .../cisd/openbis/uitest/page/BrowserPage.java |  4 +-
 .../openbis/uitest/page/NavigationPage.java   | 10 +++
 .../cisd/openbis/uitest/page/Page.java        | 22 +++++
 .../openbis/uitest/page/menu/BrowseMenu.java  |  9 ++
 .../uitest/page/tab/ExperimentBrowser.java    | 89 +++++++++++++++++++
 .../page/tab/ExperimentTypeBrowser.java       |  4 +-
 .../uitest/page/tab/SampleTypeBrowser.java    |  4 +-
 .../cisd/openbis/uitest/page/tab/Trash.java   | 45 ++++++++++
 20 files changed, 227 insertions(+), 10 deletions(-)
 create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentBrowser.java
 create mode 100644 ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/Trash.java

diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
index 7db6fdf26f2..2e6566fc92a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
@@ -17,6 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu;
 
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
+import com.extjs.gxt.ui.client.widget.button.Button;
 import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
 import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
 import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
@@ -131,7 +132,9 @@ public class TopMenu extends LayoutContainer
         if (viewContext.getModel().getApplicationInfo().getWebClientConfiguration()
                 .getEnableTrash())
         {
-            toolBar.add(new TrashButton(viewContext, componentProvider));
+            Button trash = new TrashButton(viewContext, componentProvider);
+            trash.setId("trash-button");
+            toolBar.add(trash);
         }
         toolBar.add(new AdministrationMenu(viewContext, componentProvider));
         toolBar.add(new LoggedUserMenu(viewContext, componentProvider));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java
index cdc5603a698..0e6c4479dfa 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java
@@ -98,6 +98,7 @@ public class DeletionGrid extends TypedTableGrid<Deletion>
 
         EmptyTrashButton emptyTrashButtonMenu =
                 new EmptyTrashButton(viewContext, createRefreshCallback(asActionInvoker()));
+        emptyTrashButtonMenu.setId("empty-trash-button");
         addButton(emptyTrashButtonMenu);
 
         final Button deletePermanentlyButton =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/EmptyTrashConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/EmptyTrashConfirmationDialog.java
index a338d950bfc..3b05eed321f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/EmptyTrashConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/EmptyTrashConfirmationDialog.java
@@ -51,6 +51,7 @@ public final class EmptyTrashConfirmationDialog extends
         this.viewContext = viewContext;
         this.callback = callback;
         this.forceOptions = new DeletionForceOptions(viewContext);
+        this.setId("deletion-confirmation-dialog");
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java
index ad564120016..d153b0bf271 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/PermanentDeletionConfirmationDialog.java
@@ -51,6 +51,7 @@ public final class PermanentDeletionConfirmationDialog extends
         this.viewContext = viewContext;
         this.callback = callback;
         this.forceOptions = new DeletionForceOptions(viewContext);
+        this.setId("deletion-confirmation-dialog");
     }
 
     public PermanentDeletionConfirmationDialog(IViewContext<ICommonClientServiceAsync> viewContext,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
index 118386b2a81..42de1ad77c2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
@@ -110,10 +110,10 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends Typed
                                 }
 
                             });
-        editButton.setId("edit-entity-type");
+        editButton.setId("edit-entity-type-" + this.getClass().getName());
         addButton(editButton);
         Button deleteButton = createDeleteButton(viewContext);
-        deleteButton.setId("delete-entity-type");
+        deleteButton.setId("delete-entity-type-" + this.getClass().getName());
         enableButtonOnSelectedItems(deleteButton);
         addButton(deleteButton);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
index 9faac3ad7ca..d30b72cce0f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
@@ -88,6 +88,8 @@ public class ExperimentBrowserGrid extends AbstractEntityGrid<Experiment>
 
     public static final String SHOW_DETAILS_BUTTON_ID = BROWSER_ID + "_show-details-button";
 
+    public static final String DELETE_BUTTON_ID = BROWSER_ID + "_delete-button";
+
     /**
      * Creates a grid without additional toolbar buttons. It can serve as a entity chooser.
      */
@@ -251,6 +253,7 @@ public class ExperimentBrowserGrid extends AbstractEntityGrid<Experiment>
                 }
             });
         changeButtonTitleOnSelectedItems(deleteButton, deleteAllTitle, deleteTitle);
+        deleteButton.setId(DELETE_BUTTON_ID);
         addButton(deleteButton);
 
         if (viewContext.getModel().getApplicationInfo().isArchivingConfigured()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
index 1b8b279f2b5..7566e95a820 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
@@ -50,6 +50,7 @@ public final class ExperimentListDeletionConfirmationDialog extends
         this.withRadio();
         this.singleDataOrNull = null;
         this.selectedAndDisplayedItemsOrNull = selectedAndDisplayedItems;
+        this.setId("deletion-confirmation-dialog");
     }
 
     public ExperimentListDeletionConfirmationDialog(
@@ -59,6 +60,7 @@ public final class ExperimentListDeletionConfirmationDialog extends
         super(viewContext, Collections.singletonList(experiment), deletionCallback);
         this.singleDataOrNull = experiment;
         this.selectedAndDisplayedItemsOrNull = null;
+        this.setId("deletion-confirmation-dialog");
     }
 
     @SuppressWarnings("unchecked")
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectListDeletionConfirmationDialog.java
index 2e938d178e0..21cf6102367 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectListDeletionConfirmationDialog.java
@@ -42,6 +42,7 @@ public final class ProjectListDeletionConfirmationDialog extends
     {
         super(viewContext, data, callback);
         this.viewContext = viewContext;
+        this.setId("deletion-confirmation-dialog");
     }
 
     public ProjectListDeletionConfirmationDialog(
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/ManualTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/ManualTest.java
index 37eec512a32..ba95ee25def 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/ManualTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/ManualTest.java
@@ -41,12 +41,16 @@ import ch.systemsx.cisd.openbis.uitest.type.Vocabulary;
 public class ManualTest extends SeleniumTest
 {
 
-    @Test(enabled = false)
+    @Test
     public void basic()
     {
         // 0) Cleanup
+        experimentBrowser().space("sprint-test").deleteAll();
+        trash().empty();
+        projectBrowser().deleteIfExists("Code", "p1");
         spaceBrowser().deleteIfExists("Code", "sprint-test");
         sampleTypeBrowser().deleteIfExists("Code", "sprint_test");
+        experimentTypeBrowser().deleteIfExists("Code", "sprint_test");
         propertyTypeBrowser().deleteIfExists("Code", "sprint-test.text");
         propertyTypeBrowser().deleteIfExists("Code", "sprint-test.real");
         propertyTypeBrowser().deleteIfExists("Code", "sprint-test.animal");
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTest.java
index 579cac00e38..11e8e235551 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/SampleTest.java
@@ -38,7 +38,7 @@ public class SampleTest extends SeleniumTest
     {
         Sample sample = create(aSample());
 
-        assertThat(sampleBrowser().allSpaces(), lists(sample));
+        assertThat(sampleBrowser(), lists(sample));
     }
 
     @Test
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
index 69ff48b72fe..d651b8232b6 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/ApplicationRunner.java
@@ -25,6 +25,7 @@ import ch.systemsx.cisd.openbis.uitest.page.dialog.AddVocabularyDialog;
 import ch.systemsx.cisd.openbis.uitest.page.dialog.EditSampleTypeDialog;
 import ch.systemsx.cisd.openbis.uitest.page.tab.AddPropertyType;
 import ch.systemsx.cisd.openbis.uitest.page.tab.AssignSamplePropertyType;
+import ch.systemsx.cisd.openbis.uitest.page.tab.ExperimentBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.ExperimentTypeBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.ProjectBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.PropertyTypeAssignmentBrowser;
@@ -36,6 +37,7 @@ import ch.systemsx.cisd.openbis.uitest.page.tab.RoleAssignmentBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.Trash;
 import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
 import ch.systemsx.cisd.openbis.uitest.type.Experiment;
 import ch.systemsx.cisd.openbis.uitest.type.ExperimentType;
@@ -169,6 +171,11 @@ public class ApplicationRunner
         return getMenus().admin().types().experimentTypes();
     }
 
+    public Trash browseToTrash()
+    {
+        return getMenus().trash();
+    }
+
     public AddSampleTypeDialog browseToAddSampleTypeDialog()
     {
         return browseToSampleTypeBrowser().add();
@@ -199,6 +206,11 @@ public class ApplicationRunner
         return getMenus().browse().samples();
     }
 
+    public ExperimentBrowser browseToExperimentBrowser()
+    {
+        return getMenus().browse().experiments();
+    }
+
     public RoleAssignmentBrowser browseToRoleAssignmentBrowser()
     {
         return getMenus().admin().authorization().roles();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
index 699b0be769e..2e5c4da1142 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/infra/SeleniumTest.java
@@ -42,6 +42,7 @@ import ch.systemsx.cisd.openbis.uitest.infra.matcher.SampleBrowserSampleTypeDrop
 import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
 import ch.systemsx.cisd.openbis.uitest.page.Cell;
 import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.ExperimentBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.ExperimentTypeBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.ProjectBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.PropertyTypeAssignmentBrowser;
@@ -50,6 +51,7 @@ import ch.systemsx.cisd.openbis.uitest.page.tab.RegisterSample;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SampleTypeBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SpaceBrowser;
+import ch.systemsx.cisd.openbis.uitest.page.tab.Trash;
 import ch.systemsx.cisd.openbis.uitest.page.tab.VocabularyBrowser;
 import ch.systemsx.cisd.openbis.uitest.type.Builder;
 import ch.systemsx.cisd.openbis.uitest.type.ExperimentBuilder;
@@ -181,6 +183,16 @@ public abstract class SeleniumTest
         return openbis.browseToSampleBrowser();
     }
 
+    protected ExperimentBrowser experimentBrowser()
+    {
+        return openbis.browseToExperimentBrowser();
+    }
+
+    protected Trash trash()
+    {
+        return openbis.browseToTrash();
+    }
+
     protected SampleTypeBrowser sampleTypeBrowser()
     {
         return openbis.browseToSampleTypeBrowser();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowserPage.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowserPage.java
index 1350e81e7ff..be1becfe531 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowserPage.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/BrowserPage.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.openqa.selenium.By;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebElement;
 
@@ -92,7 +93,8 @@ public abstract class BrowserPage extends NavigationPage
             Cell cell = row.get(column);
             if (cell != null && cell.getText().equalsIgnoreCase(value))
             {
-                cell.getElement().click();
+                cell.getElement().findElement(By.xpath("./..")).click();
+                waitForClickability(getDeleteButton());
                 getDeleteButton().click();
 
                 for (WebElement ellu : this.findElements(cell.getElement(),
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/NavigationPage.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/NavigationPage.java
index 59a6a410bb8..549a04d7d7d 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/NavigationPage.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/NavigationPage.java
@@ -25,6 +25,7 @@ import ch.systemsx.cisd.openbis.uitest.page.menu.AdminMenu;
 import ch.systemsx.cisd.openbis.uitest.page.menu.BrowseMenu;
 import ch.systemsx.cisd.openbis.uitest.page.menu.NewMenu;
 import ch.systemsx.cisd.openbis.uitest.page.menu.UserMenu;
+import ch.systemsx.cisd.openbis.uitest.page.tab.Trash;
 
 /**
  * @author anttil
@@ -43,6 +44,9 @@ public abstract class NavigationPage extends Page
     @FindBy(id = "new_menu")
     private WebElement newMenuButton;
 
+    @FindBy(id = "trash-button")
+    private WebElement trash;
+
     @FindBy(className = "x-tab-strip-close")
     private List<WebElement> tabCloseButtons;
 
@@ -64,6 +68,12 @@ public abstract class NavigationPage extends Page
         return get(BrowseMenu.class);
     }
 
+    public Trash trash()
+    {
+        trash.click();
+        return get(Trash.class);
+    }
+
     public NewMenu newMenu()
     {
         newMenuButton.click();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
index 5cd5b005422..19d1894aba5 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/Page.java
@@ -33,6 +33,8 @@ import org.openqa.selenium.interactions.Actions;
 import org.openqa.selenium.support.ui.ExpectedCondition;
 import org.openqa.selenium.support.ui.WebDriverWait;
 
+import com.google.common.base.Function;
+
 import ch.systemsx.cisd.openbis.uitest.infra.PageProxy;
 import ch.systemsx.cisd.openbis.uitest.infra.ScreenShotProxy;
 import ch.systemsx.cisd.openbis.uitest.infra.ScreenShotter;
@@ -110,6 +112,26 @@ public abstract class Page
         new WebDriverWait(SeleniumTest.driver, 10).until(condition);
     }
 
+    public void waitForClickability(final WebElement element)
+    {
+
+        new WebDriverWait(SeleniumTest.driver, 10).until(new Function<WebDriver, Object>()
+            {
+                @Override
+                public Object apply(WebDriver arg0)
+                {
+                    if (element.isDisplayed() && element.isEnabled())
+                    {
+                        return true;
+                    } else
+                    {
+                        return null;
+                    }
+                }
+
+            });
+    }
+
     protected void select(Collection<? extends WebElement> choices, String text)
     {
         Collection<String> found = new HashSet<String>();
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
index adbd1af9d04..1dd63820d03 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/menu/BrowseMenu.java
@@ -20,6 +20,7 @@ import org.openqa.selenium.WebElement;
 import org.openqa.selenium.support.FindBy;
 
 import ch.systemsx.cisd.openbis.uitest.page.Page;
+import ch.systemsx.cisd.openbis.uitest.page.tab.ExperimentBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.ProjectBrowser;
 import ch.systemsx.cisd.openbis.uitest.page.tab.SampleBrowser;
 
@@ -32,6 +33,9 @@ public class BrowseMenu extends Page
     @FindBy(id = "openbis_top-menu_PROJECT_MENU_BROWSE")
     private WebElement projects;
 
+    @FindBy(id = "openbis_top-menu_EXPERIMENT_MENU_BROWSE")
+    private WebElement experiments;
+
     public SampleBrowser samples()
     {
         samples.click();
@@ -44,4 +48,9 @@ public class BrowseMenu extends Page
         return get(ProjectBrowser.class);
     }
 
+    public ExperimentBrowser experiments()
+    {
+        experiments.click();
+        return get(ExperimentBrowser.class);
+    }
 }
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentBrowser.java
new file mode 100644
index 00000000000..a7d06f77ec3
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentBrowser.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.page.tab;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.FindBys;
+
+import ch.systemsx.cisd.openbis.uitest.page.BrowserPage;
+
+public class ExperimentBrowser extends BrowserPage
+{
+
+    @FindBys(
+        {
+                @FindBy(id = "openbis_select-project"),
+                @FindBy(xpath = "..//span[not(*) and @class='gwt-InlineHTML']") })
+    private List<WebElement> spacesAndProjects;
+
+    @FindBy(id = "openbis_experiment-browser_delete-button")
+    private WebElement deleteAllButton;
+
+    public ExperimentBrowser space(String spaceCode)
+    {
+        for (WebElement element : spacesAndProjects)
+        {
+            if (spaceCode.equalsIgnoreCase(element.getText()))
+            {
+                element.click();
+            }
+        }
+        return this;
+    }
+
+    public void deleteAll()
+    {
+        this.deleteAllButton.click();
+        for (WebElement ellu : this.findElements(deleteAllButton,
+                "//*[@id='deletion-confirmation-dialog']//textarea"))
+        {
+            ellu.sendKeys("reason for deletion");
+        }
+
+        List<WebElement> e = new ArrayList<WebElement>(this.findElements(deleteAllButton,
+                "//*[@id='deletion-confirmation-dialog']//button[text()='OK' or text()='Yes']"));
+        if (e.size() > 0)
+        {
+            e.get(0).click();
+        }
+    }
+
+    @Override
+    protected WebElement getDeleteButton()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected List<WebElement> getColumns()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    protected List<WebElement> getData()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java
index c03cb25f248..86c07652ece 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/ExperimentTypeBrowser.java
@@ -31,10 +31,10 @@ public class ExperimentTypeBrowser extends BrowserPage
     @FindBy(id = "add-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeGrid")
     private WebElement addButton;
 
-    @FindBy(id = "edit-entity-type")
+    @FindBy(id = "edit-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeGrid")
     private WebElement editButton;
 
-    @FindBy(id = "delete-entity-type")
+    @FindBy(id = "delete-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeGrid")
     private WebElement deleteButton;
 
     @FindBys(
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
index 87f5ab96dc2..aaf1c864f19 100644
--- a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/SampleTypeBrowser.java
@@ -32,10 +32,10 @@ public class SampleTypeBrowser extends BrowserPage
     @FindBy(id = "add-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeGrid")
     private WebElement addSampleTypeButton;
 
-    @FindBy(id = "edit-entity-type")
+    @FindBy(id = "edit-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeGrid")
     private WebElement editSampleTypeButton;
 
-    @FindBy(id = "delete-entity-type")
+    @FindBy(id = "delete-entity-type-ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleTypeGrid")
     private WebElement deleteSampleTypeButton;
 
     @FindBys(
diff --git a/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/Trash.java b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/Trash.java
new file mode 100644
index 00000000000..870e11cc4ef
--- /dev/null
+++ b/ui-test/source/java/ch/systemsx/cisd/openbis/uitest/page/tab/Trash.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.uitest.page.tab;
+
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+
+import ch.systemsx.cisd.openbis.uitest.page.NavigationPage;
+
+public class Trash extends NavigationPage
+{
+
+    @FindBy(id = "empty-trash-button")
+    private WebElement empty;
+
+    public Trash empty()
+    {
+        this.empty.click();
+        findElement(this.empty,
+                "//*[@id='deletion-confirmation-dialog']//button[text()='OK' or text()='Yes']")
+                .click();
+
+        return get(Trash.class);
+    }
+
+    @Override
+    public String toString()
+    {
+        return "Trash";
+    }
+}
-- 
GitLab