commit ec4622343cb1abd673560ac0bed8cb000659095a
Author: Andreas Kohlbecker <a.kohlbecker@bgbm.org>
Date:   Mon Mar 6 18:07:32 2017 +0100

    ref #6169 initial list view on registrations

diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/component/phycobank/RegistrationItemComponent.java b/src/main/java/eu/etaxonomy/cdm/vaadin/component/phycobank/RegistrationItemComponent.java
new file mode 100644
index 00000000..958dd67d
--- /dev/null
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/component/phycobank/RegistrationItemComponent.java
@@ -0,0 +1,61 @@
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.vaadin.component.phycobank;
+
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Label;
+
+/**
+ * @author a.kohlbecker
+ * @since Mar 6, 2017
+ *
+ */
+public class RegistrationItemComponent extends CustomComponent {
+
+    private static final long serialVersionUID = -3585430974956346927L;
+
+    private HorizontalLayout container;
+    private Label statusIcon = new Label();
+    private Label summary = new Label();
+    private Button editButton = new Button("Edit");
+
+    /**
+     * @return the statusIcon
+     */
+    public Label getStatusIcon() {
+        return statusIcon;
+    }
+    /**
+     * @return the summary
+     */
+    public Label getSummary() {
+        return summary;
+    }
+    /**
+     * @return the editButton
+     */
+    public Button getEdit() {
+        return editButton;
+    }
+
+    /**
+     *
+     */
+    public RegistrationItemComponent() {
+        container.setSpacing(true);
+        container.setWidth(100, Unit.PERCENTAGE);
+        container.addComponent(statusIcon);
+        summary.setWidth(100, Unit.PERCENTAGE);
+        container.addComponent(summary);
+        container.addComponent(editButton);
+    }
+
+}
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/ListPresenter.java b/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/ListPresenter.java
new file mode 100644
index 00000000..fe82f80f
--- /dev/null
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/ListPresenter.java
@@ -0,0 +1,203 @@
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.vaadin.presenter.phycobank;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.UUID;
+
+import org.joda.time.DateTime;
+
+import com.vaadin.spring.annotation.SpringComponent;
+import com.vaadin.spring.annotation.ViewScope;
+
+import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.vaadin.view.phycobank.ListView;
+import eu.etaxonomy.vaadin.mvp.AbstractPresenter;
+
+/**
+ * @author a.kohlbecker
+ * @since Mar 3, 2017
+ *
+ */
+@SpringComponent
+@ViewScope
+public class ListPresenter extends AbstractPresenter<ListView> {
+
+    private static final int PAGESIZE =20;
+
+    @Override
+    public void onViewEnter() {
+        super.onViewEnter();
+        getView().populateTable(listRegistrations());
+    }
+
+    /**
+     * @return
+     */
+    private Collection<RegistrationDTO> listRegistrations() {
+        Pager<TaxonNameBase> pager = getRepo().getNameService().page(TaxonNameBase.class, PAGESIZE, 0, null, null);
+        Collection<RegistrationDTO> dtos = new ArrayList<>(pager.getRecords().size());
+        pager.getRecords().forEach(i -> { dtos.add(new RegistrationDTO(i)); });
+        return dtos;
+    }
+
+    private static int idAutoincrement = 100000;
+
+    public class RegistrationDTO{
+
+        private String summary;
+        private UUID registeredEntityUuid;
+
+        private RegistrationType registrationType;
+        private RegistrationStatus status;
+        private String registrationId;
+        private String internalRegId;
+        private DateTime registrationDate = null;
+        private DateTime created = null;
+
+
+
+        /**
+         * @param name
+         */
+        public RegistrationDTO(TaxonNameBase name) {
+            summary = name.getTitleCache();
+            registeredEntityUuid = name.getUuid();
+
+            registrationType = RegistrationType.name;
+            status = RegistrationStatus.preparation;
+            internalRegId = Integer.toString(ListPresenter.idAutoincrement++);
+            registrationId = "http://pyhcobank.org/" + internalRegId;
+            created = DateTime.now();
+
+        }
+
+        /**
+         * @return the summary
+         */
+        public String getSummary() {
+            return summary;
+        }
+
+
+        /**
+         * @param summary the summary to set
+         */
+        public void setSummary(String summary) {
+            this.summary = summary;
+        }
+
+
+        /**
+         * @return the registrationType
+         */
+        public RegistrationType getRegistrationType() {
+            return registrationType;
+        }
+
+
+        /**
+         * @param registrationType the registrationType to set
+         */
+        public void setRegistrationType(RegistrationType registrationType) {
+            this.registrationType = registrationType;
+        }
+
+
+        /**
+         * @return the status
+         */
+        public RegistrationStatus getStatus() {
+            return status;
+        }
+
+
+        /**
+         * @param status the status to set
+         */
+        public void setStatus(RegistrationStatus status) {
+            this.status = status;
+        }
+
+
+        /**
+         * @return the registrationId
+         */
+        public String getRegistrationId() {
+            return registrationId;
+        }
+
+
+        /**
+         * @param registrationId the registrationId to set
+         */
+        public void setRegistrationId(String registrationId) {
+            this.registrationId = registrationId;
+        }
+
+
+        /**
+         * @return the internalRegId
+         */
+        public String getInternalRegId() {
+            return internalRegId;
+        }
+
+
+        /**
+         * @param internalRegId the internalRegId to set
+         */
+        public void setInternalRegId(String internalRegId) {
+            this.internalRegId = internalRegId;
+        }
+
+
+        /**
+         * @return the registeredEntityUuid
+         */
+        public UUID getRegisteredEntityUuid() {
+            return registeredEntityUuid;
+        }
+
+
+        /**
+         * @param registeredEntityUuid the registeredEntityUuid to set
+         */
+        public void setRegisteredEntityUuid(UUID registeredEntityUuid) {
+            this.registeredEntityUuid = registeredEntityUuid;
+        }
+
+        /**
+         * @return the registrationDate
+         */
+        public DateTime getRegistrationDate() {
+            return registrationDate;
+        }
+
+        /**
+         * @return the created
+         */
+        public DateTime getCreated() {
+            return created;
+        }
+
+    }
+
+    public enum RegistrationStatus {
+
+        preparation,// A new record which is being edited by the Author
+        curation, //A record ready for the curator to be validated.
+        ready, //The record has passed the validation by the curator and is ready for publication.
+        published, //The name or typification has finally been published.
+        rejected //The registration has been rejected, the process is aborted and the record is preserved.
+    }
+
+}
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/RegistrationWorkflowPresenter.java b/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/RegistrationWorkflowPresenter.java
index 3830d171..b298e9e6 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/RegistrationWorkflowPresenter.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/presenter/phycobank/RegistrationWorkflowPresenter.java
@@ -38,7 +38,7 @@ public class RegistrationWorkflowPresenter extends AbstractPresenter<Registratio
     protected void onRegistrationStartEvent(RegistrationStartEvent e){
         this.registrationType = e.getType();
         getView().getTitle().setValue(getView().getTitle().getValue() + " " + registrationType.name());
-
+        getView().openNameEditor(null);
     }
 
 }
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/ui/RegistrationUI.java b/src/main/java/eu/etaxonomy/cdm/vaadin/ui/RegistrationUI.java
index a7a8b6a8..6b7d1bbf 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/ui/RegistrationUI.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/ui/RegistrationUI.java
@@ -29,7 +29,7 @@ import com.vaadin.ui.UI;
 import com.vaadin.ui.themes.ValoTheme;
 
 import eu.etaxonomy.cdm.vaadin.view.phycobank.DashBoardView;
-import eu.etaxonomy.cdm.vaadin.view.phycobank.ListView;
+import eu.etaxonomy.cdm.vaadin.view.phycobank.ListViewBean;
 import eu.etaxonomy.cdm.vaadin.view.phycobank.StartRegistrationView;
 import eu.etaxonomy.vaadin.ui.MainMenu;
 import eu.etaxonomy.vaadin.ui.UIInitializedEvent;
@@ -82,8 +82,8 @@ public class RegistrationUI extends UI {
         mainMenu.addMenuComponent(phycoBankLogo);
 
         mainMenu.addMenuItem("New", FontAwesome.EDIT, StartRegistrationView.NAME);
-        mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListView.NAME);
-        mainMenu.addMenuItem("List", FontAwesome.TASKS, ListView.NAME);
+        mainMenu.addMenuItem("Continue", FontAwesome.ARROW_RIGHT, ListViewBean.NAME);
+        mainMenu.addMenuItem("List", FontAwesome.TASKS, ListViewBean.NAME);
 
         eventBus.publishEvent(new UIInitializedEvent());
 
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/util/JodaDateTimeConverter.java b/src/main/java/eu/etaxonomy/cdm/vaadin/util/JodaDateTimeConverter.java
new file mode 100644
index 00000000..6839b39c
--- /dev/null
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/util/JodaDateTimeConverter.java
@@ -0,0 +1,57 @@
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.vaadin.util;
+
+import java.util.Date;
+import java.util.Locale;
+
+import org.joda.time.DateTime;
+
+import com.vaadin.data.util.converter.Converter;
+
+/**
+ * @author a.kohlbecker
+ * @since Mar 7, 2017
+ *
+ */
+public final class JodaDateTimeConverter implements Converter<Date, DateTime> {
+    @Override
+    public DateTime convertToModel(Date value, Class<? extends DateTime> targetType, Locale locale)
+            throws com.vaadin.data.util.converter.Converter.ConversionException {
+        DateTime dateTime = null;
+        if(value != null) {
+            try {
+                dateTime = new DateTime(value);
+            } catch (IllegalArgumentException e) {
+                throw new ConversionException(e);
+            }
+        }
+        return dateTime;
+    }
+
+    @Override
+    public Date convertToPresentation(DateTime value, Class<? extends Date> targetType, Locale locale)
+            throws com.vaadin.data.util.converter.Converter.ConversionException {
+        Date date = null;
+        if(value != null){
+            date = value.toDate();
+        }
+        return date;
+    }
+
+    @Override
+    public Class<DateTime> getModelType() {
+        return DateTime.class;
+    }
+
+    @Override
+    public Class<Date> getPresentationType() {
+        return Date.class;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/util/UrlStringConverter.java b/src/main/java/eu/etaxonomy/cdm/vaadin/util/UrlStringConverter.java
new file mode 100644
index 00000000..8343a298
--- /dev/null
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/util/UrlStringConverter.java
@@ -0,0 +1,43 @@
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.vaadin.util;
+
+import java.util.Locale;
+
+import com.vaadin.data.util.converter.Converter;
+
+/**
+ * @author a.kohlbecker
+ * @since Mar 7, 2017
+ *
+ */
+public final class UrlStringConverter implements Converter<String, String> {
+    @Override
+    public String convertToModel(String value, Class<? extends String> targetType, Locale locale)
+            throws com.vaadin.data.util.converter.Converter.ConversionException {
+        return null;
+    }
+
+    @Override
+    public String convertToPresentation(String value, Class<? extends String> targetType, Locale locale)
+            throws com.vaadin.data.util.converter.Converter.ConversionException {
+        // TODO Auto-generated method stub
+        return "<a href=\"" + value + "\" target=\"external\">" + value + "</a>";
+    }
+
+    @Override
+    public Class<String> getModelType() {
+        return String.class;
+    }
+
+    @Override
+    public Class<String> getPresentationType() {
+        return String.class;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/DashBoardView.java b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/DashBoardView.java
index 17ee212a..7d6696ef 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/DashBoardView.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/DashBoardView.java
@@ -37,8 +37,8 @@ public class DashBoardView extends DashBoardDesign implements View {
     public DashBoardView() {
         Responsive.makeResponsive(dashboard);
         buttonNew.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(StartRegistrationView.NAME)));
-        buttonContinue.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(RegistrationWorkflowViewBean.NAME)));
-        buttonList.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(RegistrationWorkflowViewBean.NAME)));
+        buttonContinue.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(ListViewBean.NAME)));
+        buttonList.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(ListViewBean.NAME)));
     }
 
     /**
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListView.java b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListView.java
index 76fd4397..56b6fd62 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListView.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListView.java
@@ -8,34 +8,22 @@
 */
 package eu.etaxonomy.cdm.vaadin.view.phycobank;
 
-import com.vaadin.navigator.View;
-import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
-import com.vaadin.spring.annotation.SpringView;
-import com.vaadin.ui.Label;
-import com.vaadin.ui.VerticalLayout;
+import java.util.Collection;
+
+import eu.etaxonomy.cdm.vaadin.presenter.phycobank.ListPresenter;
+import eu.etaxonomy.cdm.vaadin.presenter.phycobank.ListPresenter.RegistrationDTO;
+import eu.etaxonomy.vaadin.mvp.ApplicationView;
 
 /**
  * @author a.kohlbecker
- * @since Mar 2, 2017
+ * @since Mar 3, 2017
  *
  */
-@SpringView(name=ListView.NAME)
-public class ListView extends VerticalLayout implements View {
-
-    private static final long serialVersionUID = 3543300933072824713L;
-
-    public static final String NAME = "list";
-
-    public ListView() {
-        addComponent(new Label("List View"));
-    }
+public interface ListView extends ApplicationView<ListPresenter>{
 
     /**
-     * {@inheritDoc}
+     * @param page
      */
-    @Override
-    public void enter(ViewChangeEvent event) {
-
-    }
+    void populateTable(Collection<RegistrationDTO> registrations);
 
 }
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListViewBean.java b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListViewBean.java
new file mode 100644
index 00000000..90cfd8c1
--- /dev/null
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/ListViewBean.java
@@ -0,0 +1,221 @@
+/**
+* Copyright (C) 2017 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.vaadin.view.phycobank;
+
+import java.util.Collection;
+import java.util.Locale;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.vaadin.data.Item;
+import com.vaadin.data.util.BeanContainer;
+import com.vaadin.data.util.GeneratedPropertyContainer;
+import com.vaadin.data.util.PropertyValueGenerator;
+import com.vaadin.data.util.converter.Converter;
+import com.vaadin.navigator.View;
+import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
+import com.vaadin.server.FontAwesome;
+import com.vaadin.spring.annotation.SpringView;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Grid;
+import com.vaadin.ui.Grid.Column;
+import com.vaadin.ui.Grid.SelectionMode;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.renderers.ButtonRenderer;
+import com.vaadin.ui.renderers.DateRenderer;
+import com.vaadin.ui.renderers.HtmlRenderer;
+import com.vaadin.ui.themes.ValoTheme;
+
+import eu.etaxonomy.cdm.vaadin.presenter.phycobank.ListPresenter;
+import eu.etaxonomy.cdm.vaadin.presenter.phycobank.ListPresenter.RegistrationDTO;
+import eu.etaxonomy.cdm.vaadin.presenter.phycobank.RegistrationType;
+import eu.etaxonomy.cdm.vaadin.util.JodaDateTimeConverter;
+import eu.etaxonomy.cdm.vaadin.util.UrlStringConverter;
+import eu.etaxonomy.vaadin.mvp.AbstractView;
+import eu.etaxonomy.vaadin.ui.navigation.NavigationEvent;
+
+/**
+ * @author a.kohlbecker
+ * @since Mar 2, 2017
+ *
+ */
+@SpringView(name=ListViewBean.NAME)
+public class ListViewBean extends AbstractView<ListPresenter> implements ListView, View {
+
+    /**
+     * @author a.kohlbecker
+     * @since Mar 7, 2017
+     *
+     */
+    protected final class RegistrationTypeConverter implements Converter<String, RegistrationType> {
+        @Override
+        public RegistrationType convertToModel(String value, Class<? extends RegistrationType> targetType,
+                Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
+            // not implemented
+            return null;
+        }
+
+        @Override
+        public String convertToPresentation(RegistrationType value, Class<? extends String> targetType,
+                Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException {
+            if(value.equals(RegistrationType.name)) {
+                return FontAwesome.TAG.getHtml();
+            }
+            if(value.equals(RegistrationType.name)) {
+                return FontAwesome.TAGS.getHtml();
+            }
+            return FontAwesome.WARNING.getHtml();
+        }
+
+        @Override
+        public Class<RegistrationType> getModelType() {
+            return RegistrationType.class;
+        }
+
+        @Override
+        public Class<String> getPresentationType() {
+            return String.class;
+        }
+    }
+    private static final long serialVersionUID = 3543300933072824713L;
+
+    public static final String NAME = "list";
+
+    private VerticalLayout layout;
+
+    private Grid grid;
+
+    public ListViewBean() {
+        layout = new VerticalLayout();
+        layout.setSpacing(true);
+
+        Label title = new Label("Registrations");
+        title.setStyleName(ValoTheme.LABEL_HUGE);
+        layout.addComponent(title);
+        layout.setComponentAlignment(title, Alignment.TOP_CENTER);
+
+        Label hint = new Label("This is the list of all your registrations in progress.");
+        layout.addComponent(hint);
+        layout.setComponentAlignment(hint, Alignment.MIDDLE_CENTER);
+
+        grid = buildGrid();
+        layout.addComponent(grid);
+
+        setCompositionRoot(layout);
+    }
+
+    private Grid buildGrid() {
+        Grid grid = new Grid();
+        grid.setSizeFull();
+        grid.setEditorEnabled(false);
+        grid.setId("registration-list");
+        grid.setCellStyleGenerator(cellRef -> cellRef.getPropertyId().toString());
+        grid.setSelectionMode(SelectionMode.NONE);
+        // add status as class  attribute to the rows to allow styling with css
+        grid.setRowStyleGenerator(rowRef -> {return "status-" + rowRef.getItem().getItemProperty("status").getValue().toString();});
+        return grid;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void enter(ViewChangeEvent event) {
+        getPresenter().onViewEnter();
+
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    @Autowired
+    protected void injectPresenter(ListPresenter presenter) {
+        setPresenter(presenter);
+
+    }
+
+    static final String[] visiblCols = new String[]{"status, summary", "registrationId"};
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void populateTable(Collection<RegistrationDTO> registrations) {
+
+        BeanContainer<String, RegistrationDTO> registrationItems = new BeanContainer<String, RegistrationDTO>(RegistrationDTO.class);
+        registrationItems.setBeanIdProperty("internalRegId");
+        registrationItems.addAll(registrations);
+
+        grid.setContainerDataSource(buildGeneratedProperties(registrationItems));
+
+        grid.removeAllColumns();
+
+        Column typeColumn = grid.addColumn("registrationType");
+        typeColumn.setRenderer(new HtmlRenderer(), new RegistrationTypeConverter());
+        typeColumn.setHeaderCaption("");
+        typeColumn.setExpandRatio(0);
+
+        Column statusColumn = grid.addColumn("status");
+        statusColumn.setExpandRatio(0);
+
+        Column summaryColumn = grid.addColumn("summary");
+        summaryColumn.setExpandRatio(1);
+
+        Column regidColumn = grid.addColumn("registrationId");
+        regidColumn.setHeaderCaption("Id");
+        regidColumn.setRenderer(new HtmlRenderer(), new UrlStringConverter());
+
+        Column createdColumn = grid.addColumn("created");
+        createdColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
+        createdColumn.setHidable(true);
+        createdColumn.setHidden(true);
+
+        Column regDateColumn = grid.addColumn("registrationDate");
+        // regDateColumn.setHeaderCaption("Date");
+        regDateColumn.setRenderer(new DateRenderer(), new JodaDateTimeConverter());
+        regDateColumn.setHidable(true);
+        regDateColumn.setHidden(true);
+
+
+        Column buttonColumn = grid.addColumn("operation");
+        buttonColumn.setRenderer(new ButtonRenderer(e -> eventBus.publishEvent(new NavigationEvent(
+                RegistrationWorkflowViewBean.NAME,
+                RegistrationWorkflowViewBean.ACTION_EDIT,
+                e.getItemId().toString()
+                ))));
+        buttonColumn.setSortable(false);
+
+    }
+
+    /**
+     * @param registrationItems
+     * @return
+     */
+    private GeneratedPropertyContainer buildGeneratedProperties(
+            BeanContainer<String, RegistrationDTO> registrationItems) {
+        GeneratedPropertyContainer gpContainer = new GeneratedPropertyContainer(registrationItems);
+
+        gpContainer.addGeneratedProperty("operation", new PropertyValueGenerator<String>() {
+
+            @Override
+            public String getValue(Item item, Object itemId, Object propertyId) {
+                return "Edit";
+            }
+
+            @Override
+            public Class<String> getType() {
+                return String.class;
+            }
+          });
+
+        return gpContainer;
+    }
+
+}
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/RegistrationWorkflowViewBean.java b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/RegistrationWorkflowViewBean.java
index afaf45f3..86d7e2f6 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/RegistrationWorkflowViewBean.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/RegistrationWorkflowViewBean.java
@@ -37,6 +37,10 @@ public class RegistrationWorkflowViewBean extends AbstractView<RegistrationWorkf
 
     public static final String NAME = "workflow";
 
+    public static final String ACTION_NEW = "new";
+
+    public static final String ACTION_EDIT = "edit";
+
     public RegistrationType regType = null;
 
     RegistrationWorkflowComponent design;
@@ -53,9 +57,12 @@ public class RegistrationWorkflowViewBean extends AbstractView<RegistrationWorkf
     public void enter(ViewChangeEvent event) {
         if(event.getParameters() != null){
            String[] params = event.getParameters().split("/");
-           if(params.length > 0){
-               regType = RegistrationType.valueOf(params[0]);
+
+           if(params[0].equals(ACTION_NEW)) {
+               regType = RegistrationType.valueOf(params[1]);
                design.getTitle().setValue(design.getTitle().getValue() + "  " + regType.name() + " ...");
+           } else if( params[0].equals(ACTION_EDIT)) {
+               design.getTitle().setValue(design.getTitle().getValue() + "  " + params[1]);
            }
         }
 
diff --git a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/StartRegistrationView.java b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/StartRegistrationView.java
index 4ec627af..01c562ed 100644
--- a/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/StartRegistrationView.java
+++ b/src/main/java/eu/etaxonomy/cdm/vaadin/view/phycobank/StartRegistrationView.java
@@ -35,7 +35,11 @@ public class StartRegistrationView extends StartRegistrationDesign implements Vi
     ApplicationEventPublisher eventBus;
 
     public StartRegistrationView() {
-        buttonName.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(RegistrationWorkflowViewBean.NAME+ "/" + RegistrationType.name)));
+        buttonName.addClickListener(e -> eventBus.publishEvent(new NavigationEvent(
+                RegistrationWorkflowViewBean.NAME,
+                RegistrationWorkflowViewBean.ACTION_NEW,
+                RegistrationType.name.name()
+                )));
     }
 
     /**
diff --git a/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractPresenter.java b/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractPresenter.java
index d22652b3..77e65535 100644
--- a/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractPresenter.java
+++ b/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractPresenter.java
@@ -3,8 +3,10 @@ package eu.etaxonomy.vaadin.mvp;
 import java.util.logging.Logger;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 
 import com.vaadin.spring.annotation.SpringComponent;
+import com.vaadin.spring.annotation.ViewScope;
 
 import eu.etaxonomy.cdm.api.application.CdmRepository;
 
@@ -19,17 +21,27 @@ import eu.etaxonomy.cdm.api.application.CdmRepository;
  *            type of the view this presenter governs
  */
 @SpringComponent
+@ViewScope
 public abstract class AbstractPresenter<V extends ApplicationView> {
 
 	private V view;
 
-	@Autowired
-	private CdmRepository repo;
 
 	protected V getView() {
 		return view;
 	}
 
+	@Autowired
+	@Qualifier("cdmRepository")
+	private CdmRepository repo;
+
+	/**
+	 * @return the repo
+	 */
+	public CdmRepository getRepo() {
+	    return repo;
+	}
+
 	/**
 	 * Notifies the presenter that its view is initialized so that presenter can
 	 * start its own initialization if required.
@@ -61,4 +73,5 @@ public abstract class AbstractPresenter<V extends ApplicationView> {
 	public void onViewExit() {
 
 	}
+
 }
diff --git a/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractView.java b/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractView.java
index d9d4e4d1..6583d741 100644
--- a/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractView.java
+++ b/src/main/java/eu/etaxonomy/vaadin/mvp/AbstractView.java
@@ -30,7 +30,7 @@ public abstract class AbstractView<P extends AbstractPresenter> extends CustomCo
 	private ApplicationContext applicationContext;
 
     @Autowired
-    ApplicationEventPublisher eventBus;
+    protected ApplicationEventPublisher eventBus;
 
 	@PostConstruct
 	protected final void init() {
diff --git a/src/main/java/eu/etaxonomy/vaadin/ui/navigation/NavigationEvent.java b/src/main/java/eu/etaxonomy/vaadin/ui/navigation/NavigationEvent.java
index 72c2d7ec..1229dfe6 100644
--- a/src/main/java/eu/etaxonomy/vaadin/ui/navigation/NavigationEvent.java
+++ b/src/main/java/eu/etaxonomy/vaadin/ui/navigation/NavigationEvent.java
@@ -1,14 +1,31 @@
 package eu.etaxonomy.vaadin.ui.navigation;
 
+import com.vaadin.client.renderers.ClickableRenderer.RendererClickEvent;
+
 public class NavigationEvent {
 
-	private final String viewName;
+	public static final char SEPARATOR = '/';
 
-	public NavigationEvent(String viewName) {
+    private final String viewName;
+
+	public NavigationEvent(String viewName, RendererClickEvent event) {
 		this.viewName = viewName;
 	}
 
+	public NavigationEvent(String viewName, String ... parameters) {
+	    StringBuilder sb = new StringBuilder(viewName);
+        for(String p : parameters){
+            sb.append(SEPARATOR).append(p);
+        }
+        this.viewName = sb.toString();
+    }
+
+	public NavigationEvent(String viewName) {
+        this.viewName = viewName;
+    }
+
 	public String getViewName() {
 		return viewName;
 	}
+
 }
diff --git a/src/main/webapp/VAADIN/themes/edit-valo/edit-valo.scss b/src/main/webapp/VAADIN/themes/edit-valo/edit-valo.scss
index c3e16ad0..b38926e8 100644
--- a/src/main/webapp/VAADIN/themes/edit-valo/edit-valo.scss
+++ b/src/main/webapp/VAADIN/themes/edit-valo/edit-valo.scss
@@ -25,7 +25,7 @@ $v-font-family: "Open Sans", sans-serif;
 //$v-error-indicator-color: #ed473b;
 
 // ================== DARK ================ //
-/*
+
 $v-app-loading-text: "Dark Valo";
 $v-background-color: #444d50;
 $v-focus-color: #07a9ca;
@@ -43,7 +43,7 @@ $v-textfield-shadow: $v-shadow;
 $v-unit-size: 40px;
 $v-overlay-shadow: 0 0 0 3px (v-shade 8), 0 5px 10px (v-shade 4);
 $v-component-group-spacing: 6px;
-*/
+
 // ========================================== //
 
 // For more information, see: https://vaadin.com/book/-/page/themes.valo.html
@@ -146,5 +146,11 @@ $v-component-group-spacing: 6px;
             }
         }
     }
+    
+    #registration-list {
+        .status-preparation td.status {
+            color: green;
+        }
+    }
 
 }
