From 478db60a9cce6174152f8e75e05db2c956c9c5f2 Mon Sep 17 00:00:00 2001
From: Nils Christian Ehmke <nie@informatik.uni-kiel.de>
Date: Fri, 3 Aug 2012 21:14:50 +0200
Subject: [PATCH] Used "Managed properties" for better code

---
 .../beans/application/ProjectsBean.java       | 12 --------
 .../beans/view/CurrentAnalysisEditorBean.java | 14 ++++++++-
 .../view/CurrentAnalysisEditorBeanV2.java     | 14 ++++++++-
 .../webgui/beans/view/CurrentCockpitBean.java | 14 ++++++++-
 .../beans/view/CurrentCockpitEditorBean.java  | 13 ++++++++-
 .../beans/view/CurrentControllerBean.java     | 13 ++++++++-
 .../converter/MIPluginStringConverter.java    | 29 ++++++++++++-------
 .../converter/MIPortStringConverter.java      | 29 ++++++++++++-------
 .../MIRepositoryStringConverter.java          | 29 ++++++++++++-------
 .../webapp/dialogs/connectionDialog.xhtml     | 10 +++----
 10 files changed, 122 insertions(+), 55 deletions(-)

diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java
index 7aa06289..5640055a 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ProjectsBean.java
@@ -27,7 +27,6 @@ import java.util.Date;
 import java.util.List;
 
 import javax.annotation.PostConstruct;
-import javax.el.ELResolver;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ApplicationScoped;
@@ -216,15 +215,4 @@ public final class ProjectsBean {
 	private static void showMessage(final Severity severity, final String msg) {
 		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, "", msg));
 	}
-
-	/**
-	 * Delivers the one and only bean instance of the {@link ProjectsBean}.
-	 * 
-	 * @return The bean instance.
-	 */
-	public static ProjectsBean getInstance() {
-		// Get the resolver and find the projects bean via name
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		return (ProjectsBean) el.getValue(FacesContext.getCurrentInstance().getELContext(), null, "projectsBean");
-	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java
index 27a1a93a..f6169826 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBean.java
@@ -35,6 +35,7 @@ import java.util.Map;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
@@ -163,6 +164,9 @@ public final class CurrentAnalysisEditorBean {
 	 */
 	private final List<ConnectionFilterToRepository> filter2repositoryConnections = new ArrayList<ConnectionFilterToRepository>();
 
+	@ManagedProperty(value = "#{projectsBean}")
+	private ProjectsBean projectsBean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -170,6 +174,14 @@ public final class CurrentAnalysisEditorBean {
 		// No code necessary
 	}
 
+	public ProjectsBean getProjectsBean() {
+		return this.projectsBean;
+	}
+
+	public void setProjectsBean(final ProjectsBean projectsBean) {
+		this.projectsBean = projectsBean;
+	}
+
 	/**
 	 * This method delivers the project stored in this bean.
 	 * 
@@ -202,7 +214,7 @@ public final class CurrentAnalysisEditorBean {
 		synchronized (this) {
 			// Make sure that the initialization will only be done for the init request.
 			if (!FacesContext.getCurrentInstance().isPostback()) {
-				this.project = ProjectsBean.getInstance().openProject(this.projectName);
+				this.project = this.projectsBean.openProject(this.projectName);
 				this.getConnectionsFromProject();
 
 				if (this.project != null) {
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBeanV2.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBeanV2.java
index b503efc2..fbd46a17 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBeanV2.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentAnalysisEditorBeanV2.java
@@ -34,6 +34,7 @@ import java.util.Map;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
@@ -176,6 +177,9 @@ public final class CurrentAnalysisEditorBeanV2 {
 	 */
 	private final List<ConnectionFilterToRepository> filter2repositoryConnections = new ArrayList<ConnectionFilterToRepository>();
 
+	@ManagedProperty(value = "#{projectsBean}")
+	private ProjectsBean projectsBean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -194,6 +198,14 @@ public final class CurrentAnalysisEditorBeanV2 {
 		}
 	}
 
+	public ProjectsBean getProjectsBean() {
+		return this.projectsBean;
+	}
+
+	public void setProjectsBean(final ProjectsBean projectsBean) {
+		this.projectsBean = projectsBean;
+	}
+
 	/**
 	 * This method sets the project stored within this bean and returns the new page for the navigation - depending on the given values.
 	 * 
@@ -209,7 +221,7 @@ public final class CurrentAnalysisEditorBeanV2 {
 
 	public void initialize() {
 		synchronized (this) {
-			this.project = ProjectsBean.getInstance().openProject(this.projectName);
+			this.project = this.projectsBean.openProject(this.projectName);
 			this.getConnectionsFromProject();
 
 			if (this.project != null) {
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java
index fc39b684..5ba3705a 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitBean.java
@@ -21,6 +21,7 @@
 package kieker.webgui.beans.view;
 
 import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
@@ -60,6 +61,9 @@ public class CurrentCockpitBean {
 	 */
 	private MIView activeView;
 
+	@ManagedProperty(value = "#{projectsBean}")
+	private ProjectsBean projectsBean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -78,6 +82,14 @@ public class CurrentCockpitBean {
 		}
 	}
 
+	public ProjectsBean getProjectsBean() {
+		return this.projectsBean;
+	}
+
+	public void setProjectsBean(final ProjectsBean projectsBean) {
+		this.projectsBean = projectsBean;
+	}
+
 	/**
 	 * This method sets the project stored within this bean and returns the new page for the navigation.
 	 * 
@@ -100,7 +112,7 @@ public class CurrentCockpitBean {
 			// Make sure that the initialization will only be done for the init request.
 			if (!FacesContext.getCurrentInstance().isPostback()) {
 				// Remember the given parameters
-				this.project = ProjectsBean.getInstance().openProject(this.projectName);
+				this.project = this.projectsBean.openProject(this.projectName);
 			}
 		}
 	}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java
index 7ea200d4..45e9fe51 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentCockpitEditorBean.java
@@ -29,6 +29,7 @@ import java.util.UUID;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.ViewScoped;
 import javax.faces.component.UIComponent;
 import javax.faces.component.UIInput;
@@ -87,6 +88,8 @@ public class CurrentCockpitEditorBean {
 	 * This is the currently selected view.
 	 */
 	private MIView activeView;
+	@ManagedProperty(value = "#{projectsBean}")
+	private ProjectsBean projectsBean;
 
 	/**
 	 * Creates a new instance of this class.
@@ -95,6 +98,14 @@ public class CurrentCockpitEditorBean {
 		// No code necessary
 	}
 
+	public ProjectsBean getProjectsBean() {
+		return this.projectsBean;
+	}
+
+	public void setProjectsBean(final ProjectsBean projectsBean) {
+		this.projectsBean = projectsBean;
+	}
+
 	/**
 	 * This method initializes the bean by using the current project name to load the project. <b>Do not call this method manually. It will only be accessed by
 	 * JSF.</b>
@@ -104,7 +115,7 @@ public class CurrentCockpitEditorBean {
 			// Make sure that the initialization will only be done for the init request.
 			if (!FacesContext.getCurrentInstance().isPostback()) {
 				// Remember the given parameters
-				this.project = ProjectsBean.getInstance().openProject(this.projectName);
+				this.project = this.projectsBean.openProject(this.projectName);
 				if (this.project != null) {
 					// Remember the current time! This is important for the later comparison of the time stamps.
 					this.resetTimeStamp();
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java
index 2f430062..a48a002e 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/view/CurrentControllerBean.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.FacesMessage.Severity;
 import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
 import javax.faces.bean.ViewScoped;
 import javax.faces.context.FacesContext;
 
@@ -65,6 +66,8 @@ public class CurrentControllerBean {
 	 * This is the actual model instance. It is the in-memory-model of the current (session) user.
 	 */
 	private MIProject project;
+	@ManagedProperty(value = "#{projectsBean}")
+	private ProjectsBean projectsBean;
 
 	/**
 	 * Creates a new instance of this class.
@@ -73,6 +76,14 @@ public class CurrentControllerBean {
 		// No code necessary
 	}
 
+	public ProjectsBean getProjectsBean() {
+		return this.projectsBean;
+	}
+
+	public void setProjectsBean(final ProjectsBean projectsBean) {
+		this.projectsBean = projectsBean;
+	}
+
 	/**
 	 * This method sets the project stored within this bean and returns the new page for the navigation.
 	 * 
@@ -95,7 +106,7 @@ public class CurrentControllerBean {
 			// Make sure that the initialization will only be done for the init request.
 			if (!FacesContext.getCurrentInstance().isPostback()) {
 				// Remember the given parameters
-				this.project = ProjectsBean.getInstance().openProject(this.projectName);
+				this.project = this.projectsBean.openProject(this.projectName);
 			}
 		}
 	}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPluginStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPluginStringConverter.java
index 615c4c27..2fd50aba 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPluginStringConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPluginStringConverter.java
@@ -20,7 +20,9 @@
 
 package kieker.webgui.converter;
 
-import javax.el.ELResolver;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.ViewScoped;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
@@ -35,6 +37,8 @@ import kieker.webgui.beans.view.CurrentAnalysisEditorBean;
  * @author Nils Christian Ehmke
  * @version 1.0
  */
+@ViewScoped
+@ManagedBean
 @FacesConverter(value = MIPluginStringConverter.NAME)
 public class MIPluginStringConverter implements Converter {
 	/**
@@ -42,6 +46,9 @@ public class MIPluginStringConverter implements Converter {
 	 */
 	public static final String NAME = "kieker.webgui.converter.MIPluginStringConverter";
 
+	@ManagedProperty(value = "#{currentAnalysisEditorBean}")
+	private CurrentAnalysisEditorBean bean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -49,25 +56,25 @@ public class MIPluginStringConverter implements Converter {
 		/* No code necessary. */
 	}
 
+	public CurrentAnalysisEditorBean getBean() {
+		return this.bean;
+	}
+
+	public void setBean(final CurrentAnalysisEditorBean bean) {
+		this.bean = bean;
+	}
+
 	@Override
 	public Object getAsObject(final FacesContext fc, final UIComponent uic, final String string) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance().getELContext(), null,
-				"currentAnalysisEditorBean");
-
-		return bean.getPluginByID(string);
+		return this.bean.getPluginByID(string);
 	}
 
 	@Override
 	public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance().getELContext(), null,
-				"currentAnalysisEditorBean");
-
 		if (o == null) {
 			return "";
 		} else {
-			return Integer.toString(bean.getPluginID((MIPlugin) o));
+			return Integer.toString(this.bean.getPluginID((MIPlugin) o));
 		}
 	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPortStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPortStringConverter.java
index e8370eb7..7394dce7 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPortStringConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIPortStringConverter.java
@@ -20,7 +20,9 @@
 
 package kieker.webgui.converter;
 
-import javax.el.ELResolver;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.ViewScoped;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
@@ -35,6 +37,8 @@ import kieker.webgui.beans.view.CurrentAnalysisEditorBean;
  * @author Nils Christian Ehmke
  * @version 1.0
  */
+@ViewScoped
+@ManagedBean
 @FacesConverter(value = MIPortStringConverter.NAME)
 public class MIPortStringConverter implements Converter {
 	/**
@@ -42,6 +46,9 @@ public class MIPortStringConverter implements Converter {
 	 */
 	public static final String NAME = "kieker.webgui.converter.MIPortStringConverter";
 
+	@ManagedProperty(value = "#{currentAnalysisEditorBean}")
+	private CurrentAnalysisEditorBean bean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -49,25 +56,25 @@ public class MIPortStringConverter implements Converter {
 		/* No code necessary. */
 	}
 
+	public CurrentAnalysisEditorBean getBean() {
+		return this.bean;
+	}
+
+	public void setBean(final CurrentAnalysisEditorBean bean) {
+		this.bean = bean;
+	}
+
 	@Override
 	public Object getAsObject(final FacesContext fc, final UIComponent uic, final String string) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance()
-				.getELContext(), null, "currentAnalysisEditorBean");
-
-		return bean.getPortByID(string);
+		return this.bean.getPortByID(string);
 	}
 
 	@Override
 	public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance().getELContext(), null,
-				"currentAnalysisEditorBean");
-
 		if (o == null) {
 			return "";
 		} else {
-			return Integer.toString(bean.getPortID((MIPort) o));
+			return Integer.toString(this.bean.getPortID((MIPort) o));
 		}
 	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIRepositoryStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIRepositoryStringConverter.java
index 865b57ff..a0aea148 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIRepositoryStringConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIRepositoryStringConverter.java
@@ -20,7 +20,9 @@
 
 package kieker.webgui.converter;
 
-import javax.el.ELResolver;
+import javax.faces.bean.ManagedBean;
+import javax.faces.bean.ManagedProperty;
+import javax.faces.bean.ViewScoped;
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
 import javax.faces.convert.Converter;
@@ -35,6 +37,8 @@ import kieker.webgui.beans.view.CurrentAnalysisEditorBean;
  * @author Nils Christian Ehmke
  * @version 1.0
  */
+@ViewScoped
+@ManagedBean
 @FacesConverter(value = MIRepositoryStringConverter.NAME)
 public class MIRepositoryStringConverter implements Converter {
 	/**
@@ -42,6 +46,9 @@ public class MIRepositoryStringConverter implements Converter {
 	 */
 	public static final String NAME = "kieker.webgui.converter.MIRepositoryStringConverter";
 
+	@ManagedProperty(value = "#{currentAnalysisEditorBean}")
+	private CurrentAnalysisEditorBean bean;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
@@ -49,25 +56,25 @@ public class MIRepositoryStringConverter implements Converter {
 		/* No code necessary. */
 	}
 
+	public CurrentAnalysisEditorBean getBean() {
+		return this.bean;
+	}
+
+	public void setBean(final CurrentAnalysisEditorBean bean) {
+		this.bean = bean;
+	}
+
 	@Override
 	public Object getAsObject(final FacesContext fc, final UIComponent uic, final String string) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance()
-				.getELContext(), null, "currentAnalysisEditorBean");
-
-		return bean.getRepositoryByID(string);
+		return this.bean.getRepositoryByID(string);
 	}
 
 	@Override
 	public String getAsString(final FacesContext fc, final UIComponent uic, final Object o) {
-		final ELResolver el = FacesContext.getCurrentInstance().getApplication().getELResolver();
-		final CurrentAnalysisEditorBean bean = (CurrentAnalysisEditorBean) el.getValue(FacesContext.getCurrentInstance().getELContext(), null,
-				"currentAnalysisEditorBean");
-
 		if (o == null) {
 			return "";
 		} else {
-			return Integer.toString(bean.getRepositoryID((MIRepository) o));
+			return Integer.toString(this.bean.getRepositoryID((MIRepository) o));
 		}
 	}
 }
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/connectionDialog.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/connectionDialog.xhtml
index 6766a067..6eb68694 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/connectionDialog.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/connectionDialog.xhtml
@@ -29,7 +29,7 @@
                                         value="#{empty connection.source ? 'N/A' : connection.source.name}" />
                                 </f:facet>
                                 <f:facet name="input">
-                                    <p:selectOneMenu converter="kieker.webgui.converter.MIPluginStringConverter"
+                                    <p:selectOneMenu converter="#{mIPluginStringConverter}"
                                                      value="#{connection.source}" effectDuration="100">
                                         <f:selectItem value="#{null}" itemLabel="N/A" itemValue="#{null}" />
                                         <f:selectItems
@@ -49,7 +49,7 @@
                                 </f:facet>
                                 <f:facet name="input">
                                     <h:form id="outputPortsList">
-                                        <p:selectOneMenu rendered="#{not empty connection.source}" converter="kieker.webgui.converter.MIPortStringConverter"
+                                        <p:selectOneMenu rendered="#{not empty connection.source}" converter="#{mIPortStringConverter}"
                                                          value="#{connection.outputPort}" effectDuration="100">
                                             <f:selectItem value="#{null}" itemLabel="N/A"
                                                           itemValue="#{null}" />
@@ -69,7 +69,7 @@
                                         value="#{empty connection.destination ? 'N/A' : connection.destination.name}" />
                                 </f:facet>
                                 <f:facet name="input">
-                                    <p:selectOneMenu converter="kieker.webgui.converter.MIPluginStringConverter"
+                                    <p:selectOneMenu converter="#{mIPluginStringConverter}"
                                                      value="#{connection.destination}" effectDuration="100">
                                         <f:selectItem value="#{null}" itemLabel="N/A"
                                                       itemValue="#{null}" />
@@ -89,7 +89,7 @@
                                 </f:facet>
                                 <f:facet name="input">
                                     <h:form id="inputPortsList">
-                                        <p:selectOneMenu rendered="#{not empty connection.destination}" converter="kieker.webgui.converter.MIPortStringConverter"
+                                        <p:selectOneMenu rendered="#{not empty connection.destination}" converter="#{mIPortStringConverter}"
                                                          value="#{connection.inputPort}" effectDuration="100">
                                             <f:selectItem value="#{null}" itemLabel="N/A"
                                                           itemValue="#{null}" />
@@ -132,7 +132,7 @@
                                     <h:outputText value="#{empty connection.destination ? 'N/A' : connection.destination.name}" />
                                 </f:facet>
                                 <f:facet name="input"> 
-                                    <p:selectOneMenu converter="kieker.webgui.converter.MIRepositoryStringConverter"
+                                    <p:selectOneMenu converter="#{mIRepositoryStringConverter}"
                                                      value="#{connection.destination}" effectDuration="100">
                                         <f:selectItem value="#{null}" itemLabel="N/A"
                                                       itemValue="#{null}" />
-- 
GitLab