geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From de...@apache.org
Subject svn commit: r815197 - in /geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui: pages/ sections/ wizards/
Date Tue, 15 Sep 2009 07:41:01 GMT
Author: delos
Date: Tue Sep 15 07:41:00 2009
New Revision: 815197

URL: http://svn.apache.org/viewvc?rev=815197&view=rev
Log:
GERONIMODEVTOOLS-456 Add Security Realm Wizard to GEP to deploy security realm directly from GEP.Thanks Rodger for the patch!

Added:
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/SecurityRealmSection.java
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/wizards/SecurityRealmWizard.java
Modified:
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/pages/SecurityPage.java
    geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/GBeanSection.java

Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/pages/SecurityPage.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/pages/SecurityPage.java?rev=815197&r1=815196&r2=815197&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/pages/SecurityPage.java (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/pages/SecurityPage.java Tue Sep 15 07:41:00 2009
@@ -19,7 +19,9 @@
 import org.apache.geronimo.st.ui.CommonMessages;
 import org.apache.geronimo.st.ui.pages.AbstractGeronimoFormPage;
 import org.apache.geronimo.st.v21.core.GeronimoServerInfo;
+import org.apache.geronimo.st.v21.core.jaxb.JAXBModelUtils;
 import org.apache.geronimo.st.v21.ui.sections.SecurityAdvancedSection;
+import org.apache.geronimo.st.v21.ui.sections.SecurityRealmSection;
 import org.apache.geronimo.st.v21.ui.sections.SecurityRoleMappingSection;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.ui.forms.IManagedForm;
@@ -40,6 +42,7 @@
      * @see org.apache.geronimo.ui.pages.AbstractGeronimoFormPage#fillBody(org.eclipse.ui.forms.IManagedForm)
      */
     protected void fillBody(IManagedForm managedForm) {
+    	managedForm.addPart(new SecurityRealmSection(getDeploymentPlan(),JAXBModelUtils.getGbeans(getDeploymentPlan()), body, toolkit, getStyle()));	
         managedForm.addPart(new SecurityRoleMappingSection(getDeploymentPlan(), getDeploymentDescriptor(), body, toolkit, getStyle()));
         managedForm.addPart(new SecurityAdvancedSection(getDeploymentPlan(), body, toolkit, getStyle()));
     }

Modified: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/GBeanSection.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/GBeanSection.java?rev=815197&r1=815196&r2=815197&view=diff
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/GBeanSection.java (original)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/GBeanSection.java Tue Sep 15 07:41:00 2009
@@ -27,12 +27,15 @@
 import org.apache.geronimo.st.ui.CommonMessages;
 import org.apache.geronimo.st.ui.sections.AbstractTreeSection;
 import org.apache.geronimo.st.v21.ui.Activator;
+import org.apache.geronimo.st.v21.ui.pages.DeploymentPage;
 import org.apache.geronimo.st.v21.ui.wizards.GBeanWizard;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.editor.FormEditor;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 
 /**
@@ -40,141 +43,177 @@
  */
 public class GBeanSection extends AbstractTreeSection {
 
-    public GBeanSection(JAXBElement plan, List gbeans, Composite parent, FormToolkit toolkit, int style) {
-        super(plan, parent, toolkit, style);
-        this.objectContainer = gbeans;
-        createClient();
+    public GBeanSection(JAXBElement plan, List gbeans, Composite parent,
+	    FormToolkit toolkit, int style) {
+	super(plan, parent, toolkit, style);
+	this.objectContainer = gbeans;
+	createClient();
     }
 
     @Override
     public String getTitle() {
-        return CommonMessages.editorSectionGBeanTitle;
+	return CommonMessages.editorSectionGBeanTitle;
     }
 
     @Override
     public String getDescription() {
-        return CommonMessages.editorSectionGBeanDescription;
+	return CommonMessages.editorSectionGBeanDescription;
     }
 
     @Override
     public Wizard getWizard() {
-        return new GBeanWizard(this);
+	return new GBeanWizard(this);
     }
 
     @Override
     public Class getTableEntryObjectType() {
-        return Gbean.class;
+	return Gbean.class;
     }
 
     @Override
     protected void activateAddButton() {
-        if (tree.getSelectionCount() == 0 || tree.getSelection()[0].getParentItem() == null) {
-            addButton.setEnabled(true);
-        } else {
-            addButton.setEnabled(false);
-        }
+	if (tree.getSelectionCount() == 0
+		|| tree.getSelection()[0].getParentItem() == null) {
+	    addButton.setEnabled(true);
+	} else {
+	    addButton.setEnabled(false);
+	}
     }
 
-    public Gbean getSelectedObject () {
-        if (tree.getSelection().length == 0) {
-            return null;
-        }
-        return (Gbean)((JAXBElement)tree.getSelection()[0].getData()).getValue();
+    public Gbean getSelectedObject() {
+	if (tree.getSelection().length == 0) {
+	    return null;
+	}
+	return (Gbean) ((JAXBElement) tree.getSelection()[0].getData())
+		.getValue();
     }
-    
+
     @Override
     public void removeItem(Object anItem) {
-        JAXBElement element =(JAXBElement)tree.getSelection()[0].getData(); 
-        Object object = element.getValue();
-        if (Gbean.class.isInstance(object)) {
-            objectContainer.remove(anItem);
-        }
-        else {
-            Gbean gbean = (Gbean)((JAXBElement)tree.getSelection()[0].getParentItem().getData()).getValue();
-            gbean.getAttributeOrXmlAttributeOrReference().remove(element);
-        }
+	JAXBElement element = (JAXBElement) tree.getSelection()[0].getData();
+	Object object = element.getValue();
+	if (Gbean.class.isInstance(object)) {
+	    objectContainer.remove(anItem);
+	} else {
+	    Gbean gbean = (Gbean) ((JAXBElement) tree.getSelection()[0]
+		    .getParentItem().getData()).getValue();
+	    gbean.getAttributeOrXmlAttributeOrReference().remove(element);
+	}
     }
-    
+
     @Override
     public Object getInput() {
-        if (objectContainer != null) {
-            return objectContainer;
-        }
-        return super.getInput();
+	if (objectContainer != null) {
+	    return objectContainer;
+	}
+	return super.getInput();
+    }
+
+    protected void notifyOthers() {
+	notifySecurityRealmSectionToRefresh();
+    }
+
+    /*
+     * After add, remove, edit ext-module, notify the dbpoolSection to refresh.
+     * If the connectorpage has not been initialized,then catch a
+     * NullPointerException and just ignore it.
+     */
+    private void notifySecurityRealmSectionToRefresh() {
+	try {
+	    DeploymentPage deploymentPage = (DeploymentPage) this
+		    .getManagedForm().getContainer();
+	    FormEditor editor = deploymentPage.getEditor();
+	    IFormPart[] parts = editor.findPage("securitypage")
+		    .getManagedForm().getParts();
+	    SecurityRealmSection securityRealmSection = null;
+	    for (IFormPart part : parts) {
+		if (SecurityRealmSection.class.isInstance(part)) {
+		    securityRealmSection = (SecurityRealmSection) part;
+		}
+	    }
+	    securityRealmSection.getViewer().refresh();
+	} catch (NullPointerException e) {
+	    // Ignore, this exception happens when the connectorpage hasn't been
+	    // initialized
+	}
     }
 
     @Override
     public ITreeContentProvider getContentProvider() {
-        return new ContentProvider() {
-            @Override
-            public Object[] getElements(Object inputElement) {
-                return getChildren(inputElement);
-            }
-
-            @Override
-            public Object[] getChildren(Object parentElement) {
-                if (List.class.isInstance(parentElement)) {
-                    return ((List)parentElement).toArray();
-                }
-                if (JAXBElement.class.isInstance(parentElement)) {
-                    Object object = ((JAXBElement)parentElement).getValue();
-                    if (Gbean.class.isInstance(object)) {
-                        Gbean gbean = (Gbean)object;
-                        return gbean.getAttributeOrXmlAttributeOrReference().toArray();
-                    }
-                }
-                return new String[] {};
-            }
-        };
+	return new ContentProvider() {
+	    @Override
+	    public Object[] getElements(Object inputElement) {
+		return getChildren(inputElement);
+	    }
+
+	    @Override
+	    public Object[] getChildren(Object parentElement) {
+		if (List.class.isInstance(parentElement)) {
+		    return ((List) parentElement).toArray();
+		}
+		if (JAXBElement.class.isInstance(parentElement)) {
+		    Object object = ((JAXBElement) parentElement).getValue();
+		    if (Gbean.class.isInstance(object)) {
+			Gbean gbean = (Gbean) object;
+			return gbean.getAttributeOrXmlAttributeOrReference()
+				.toArray();
+		    }
+		}
+		return new String[] {};
+	    }
+	};
     }
 
     @Override
     public ILabelProvider getLabelProvider() {
-        return new LabelProvider() {
-            @Override
-            public String getText(Object element) {
-                if (JAXBElement.class.isInstance(element)) {
-                    Object object = ((JAXBElement)element).getValue();
-                    if (Gbean.class.isInstance(object)) {
-                        Gbean gbean = (Gbean)object;
-                        return "GBean: name = \"" + gbean.getName() +
-                                "\", class = \"" + gbean.getClazz() + "\"";
-                    }
-                    else if (Attribute.class.isInstance(object)) {
-                        Attribute attribute = (Attribute)object;
-                        return "Attribute: name = \"" + attribute.getName() + 
-                                "\", type = \"" + attribute.getType() + 
-                                "\", value = \"" + attribute.getValue() + "\"";
-                    }
-                    else if (Pattern.class.isInstance(object)) {
-                        Pattern dependency = (Pattern)object;
-                        return "Dependency: group = \"" + dependency.getGroupId() +
-                                "\", artifact = \"" + dependency.getArtifactId() +
-                                "\", version = \"" + dependency.getVersion() +
-                                "\", module = \"" + dependency.getModule() +
-                                "\", type = \"" + dependency.getType() +
-                                "\", custom name = \"" + dependency.getCustomFoo() + "\"";
-                    }
-                    else if (Reference.class.isInstance(object)) {
-                        Reference reference = (Reference)object;
-                        return "Reference: name = \"" + reference.getName() +
-                                "\", group = \"" + reference.getGroupId() +
-                                "\", artifact = \"" + reference.getArtifactId() +
-                                "\", version = \"" + reference.getVersion() +
-                                "\", module = \"" + reference.getModule() +
-                                "\", type = \"" + reference.getType() +
-                                "\", custom name = \"" + reference.getCustomFoo() + "\"";
-                    }
-                }
-
-                return null;
-            }
-
-            @Override
-            public Image getImage(Object arg0) {
-                return Activator.imageDescriptorFromPlugin("org.eclipse.jst.j2ee",
-                        "icons/full/obj16/accessbean_obj.gif").createImage();
-            }
-        };
+	return new LabelProvider() {
+	    @Override
+	    public String getText(Object element) {
+		if (JAXBElement.class.isInstance(element)) {
+		    Object object = ((JAXBElement) element).getValue();
+		    if (Gbean.class.isInstance(object)) {
+			Gbean gbean = (Gbean) object;
+			return "GBean: name = \"" + gbean.getName()
+				+ "\", class = \"" + gbean.getClazz() + "\"";
+		    } else if (Attribute.class.isInstance(object)) {
+			Attribute attribute = (Attribute) object;
+			return "Attribute: name = \"" + attribute.getName()
+				+ "\", type = \"" + attribute.getType()
+				+ "\", value = \"" + attribute.getValue()
+				+ "\"";
+		    } else if (Pattern.class.isInstance(object)) {
+			Pattern dependency = (Pattern) object;
+			return "Dependency: group = \""
+				+ dependency.getGroupId() + "\", artifact = \""
+				+ dependency.getArtifactId()
+				+ "\", version = \"" + dependency.getVersion()
+				+ "\", module = \"" + dependency.getModule()
+				+ "\", type = \"" + dependency.getType()
+				+ "\", custom name = \""
+				+ dependency.getCustomFoo() + "\"";
+		    } else if (Reference.class.isInstance(object)) {
+			Reference reference = (Reference) object;
+			return "Reference: name = \"" + reference.getName()
+				+ "\", group = \"" + reference.getGroupId()
+				+ "\", artifact = \""
+				+ reference.getArtifactId()
+				+ "\", version = \"" + reference.getVersion()
+				+ "\", module = \"" + reference.getModule()
+				+ "\", type = \"" + reference.getType()
+				+ "\", custom name = \""
+				+ reference.getCustomFoo() + "\"";
+		    }
+		}
+
+		return null;
+	    }
+
+	    @Override
+	    public Image getImage(Object arg0) {
+		return Activator.imageDescriptorFromPlugin(
+			"org.eclipse.jst.j2ee",
+			"icons/full/obj16/accessbean_obj.gif").createImage();
+	    }
+	};
     }
 }

Added: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/SecurityRealmSection.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/SecurityRealmSection.java?rev=815197&view=auto
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/SecurityRealmSection.java (added)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/sections/SecurityRealmSection.java Tue Sep 15 07:41:00 2009
@@ -0,0 +1,177 @@
+package org.apache.geronimo.st.v21.ui.sections;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.bind.JAXBElement;
+
+import org.apache.geronimo.jee.deployment.Attribute;
+import org.apache.geronimo.jee.deployment.Gbean;
+import org.apache.geronimo.jee.deployment.XmlAttributeType;
+import org.apache.geronimo.jee.loginconfig.LoginConfig;
+import org.apache.geronimo.jee.loginconfig.LoginModule;
+import org.apache.geronimo.st.ui.sections.AbstractTableSection;
+import org.apache.geronimo.st.v21.ui.pages.SecurityPage;
+import org.apache.geronimo.st.v21.ui.wizards.SecurityRealmWizard;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.IFormPart;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+public class SecurityRealmSection extends AbstractTableSection {
+    public SecurityRealmSection(JAXBElement plan, List gbeans,
+	    Composite parent, FormToolkit toolkit, int style) {
+	super(plan, parent, toolkit, style);
+	this.objectContainer = gbeans;
+	COLUMN_NAMES = new String[] { "Security Realm Name",
+		"Login Module Class" };// TODO put into message
+	createClient();
+    }
+
+    @Override
+    public String getDescription() {
+	return "The following security realms are defined:";// TODO put into
+	// message
+    }
+
+    @Override
+    public Class getTableEntryObjectType() {
+	return JAXBElement.class;
+    }
+
+    @Override
+    public String getTitle() {
+	return "Security Realm";// TODO put into message
+    }
+
+    @Override
+    protected Wizard getWizard() {
+	return new SecurityRealmWizard(this);
+    }
+
+    protected void notifyOthers() {
+	notifyGBeanSectionToRefresh();
+    }
+
+    /*
+     * After add, remove, edit realm gbean, notify the gbean section to refresh.
+     * If the deploymentpage has not been initialized, catch a
+     * NullPointerException and just ignore it.
+     */
+    private void notifyGBeanSectionToRefresh() {
+	try {
+	    SecurityPage securityPage = (SecurityPage) this.getManagedForm()
+		    .getContainer();
+	    FormEditor editor = securityPage.getEditor();
+	    IFormPart[] parts = editor.findPage("deploymentpage")
+		    .getManagedForm().getParts();
+	    GBeanSection gbeanSection = null;
+	    for (IFormPart part : parts) {
+		if (GBeanSection.class.isInstance(part)) {
+		    gbeanSection = (GBeanSection) part;
+		}
+	    }
+	    gbeanSection.getViewer().refresh();
+	} catch (NullPointerException e) {
+	    // Ignore, this exception happens when the deployment page hasn't
+	    // been initialized
+	}
+    }
+
+    @Override
+    public ITreeContentProvider getContentProvider() {
+	return new ContentProvider() {
+	    @Override
+	    public Object[] getElements(Object inputElement) {
+		List<JAXBElement<?>> result = new ArrayList<JAXBElement<?>>();
+		List<?> list = getObjectContainer();
+		for (Iterator<?> it = list.iterator(); it.hasNext();) {
+		    JAXBElement<?> current = (JAXBElement<?>) it.next();
+		    if (isSecurityRealmGbean((Gbean) current.getValue())) {
+			result.add(current);
+		    }
+		}
+		return result.toArray();
+	    }
+	};
+    }
+
+    private boolean isSecurityRealmGbean(Gbean gbean) {
+	return "org.apache.geronimo.security.realm.GenericSecurityRealm"
+		.equals(gbean.getClazz());
+    }
+
+    @Override
+    public ITableLabelProvider getLabelProvider() {
+	return new LabelProvider() {
+	    @Override
+	    public String getColumnText(Object element, int columnIndex) {
+		// System.out.println("here");
+		if (JAXBElement.class.isInstance(element)) {
+		    Object value = ((JAXBElement<?>) element).getValue();
+		    if (Gbean.class.isInstance(value)) {
+			Gbean gbean = (Gbean) value;
+			switch (columnIndex) {
+			case 0:// security realm name
+			    if (getGbeanAttributeValue(gbean, "realmName") != null) {
+				return getGbeanAttributeValue(gbean,
+					"realmName");
+			    }
+			    return "";
+			case 1:// login module class
+			    if (getSecurityRealmGbeanLoginModuleClass(gbean) != null) {
+				return getSecurityRealmGbeanLoginModuleClass(gbean);
+			    }
+			    return "";
+			}
+		    }
+		}
+		return null;
+	    }
+	};
+    }
+
+    private String getGbeanAttributeValue(Gbean gbean, String attributeName) {
+	try {
+	    List<JAXBElement<?>> elelist = gbean
+		    .getAttributeOrXmlAttributeOrReference();
+	    for (JAXBElement<?> ele : elelist) {
+		if (Attribute.class.isInstance(ele.getValue())
+			&& ((Attribute) ele.getValue()).getName().equals(
+				attributeName)) {
+		    return ((Attribute) ele.getValue()).getValue();
+		}
+	    }
+	} catch (NullPointerException e) {
+	    // ignore
+	}
+	return null;
+    }
+
+    private String getSecurityRealmGbeanLoginModuleClass(Gbean gbean) {
+	if (isSecurityRealmGbean(gbean)) {
+	    try {
+		List<JAXBElement<?>> elelist = gbean
+			.getAttributeOrXmlAttributeOrReference();
+		for (JAXBElement<?> ele : elelist) {
+		    if (XmlAttributeType.class.isInstance(ele.getValue())
+			    && ((XmlAttributeType) ele.getValue()).getName()
+				    .equals("LoginModuleConfiguration")) {
+			LoginModule loginModule = (LoginModule) ((LoginConfig) ((XmlAttributeType) ele
+				.getValue()).getAny())
+				.getLoginModuleRefOrLoginModule().get(0);
+			return loginModule.getLoginModuleClass();
+		    }
+		}
+		return null;
+	    } catch (NullPointerException e) {
+		// ignore
+	    }
+	}
+	return null;
+    }
+}

Added: geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/wizards/SecurityRealmWizard.java
URL: http://svn.apache.org/viewvc/geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/wizards/SecurityRealmWizard.java?rev=815197&view=auto
==============================================================================
--- geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/wizards/SecurityRealmWizard.java (added)
+++ geronimo/devtools/eclipse-plugin/trunk/plugins/org.apache.geronimo.st.v21.ui/src/main/java/org/apache/geronimo/st/v21/ui/wizards/SecurityRealmWizard.java Tue Sep 15 07:41:00 2009
@@ -0,0 +1,1155 @@
+package org.apache.geronimo.st.v21.ui.wizards;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.JAXBElement;
+
+import org.apache.geronimo.jee.application.Application;
+import org.apache.geronimo.jee.deployment.Attribute;
+import org.apache.geronimo.jee.deployment.Dependencies;
+import org.apache.geronimo.jee.deployment.Dependency;
+import org.apache.geronimo.jee.deployment.Environment;
+import org.apache.geronimo.jee.deployment.Gbean;
+import org.apache.geronimo.jee.deployment.ObjectFactory;
+import org.apache.geronimo.jee.deployment.Reference;
+import org.apache.geronimo.jee.deployment.XmlAttributeType;
+import org.apache.geronimo.jee.loginconfig.ControlFlag;
+import org.apache.geronimo.jee.loginconfig.LoginConfig;
+import org.apache.geronimo.jee.loginconfig.LoginModule;
+import org.apache.geronimo.jee.loginconfig.Option;
+import org.apache.geronimo.jee.naming.Pattern;
+import org.apache.geronimo.jee.openejb.OpenejbJar;
+import org.apache.geronimo.jee.web.WebApp;
+import org.apache.geronimo.st.core.jaxb.JAXBObjectFactory;
+import org.apache.geronimo.st.ui.Activator;
+import org.apache.geronimo.st.ui.CommonMessages;
+import org.apache.geronimo.st.ui.sections.AbstractTableSection;
+import org.apache.geronimo.st.ui.wizards.AbstractTableWizard;
+import org.apache.geronimo.st.v21.core.GeronimoServerInfo;
+import org.apache.geronimo.st.v21.core.jaxb.JAXBObjectFactoryImpl;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class SecurityRealmWizard extends AbstractTableWizard {
+    protected ImageDescriptor descriptor = Activator.imageDescriptorFromPlugin(
+	    "org.apache.geronimo.st.ui", "icons/bigG.gif");
+
+    public SecurityRealmWizard(AbstractTableSection section) {
+	super(section);
+    }
+
+    public String getWizardWindowTitle() {
+	return CommonMessages.wizardTitle_SecurityRealm;
+    }
+
+    @Override
+    public void addPages() {
+	SecurityRealmBasicPage page0 = new SecurityRealmBasicPage(
+		"SecurityRealmBasicPage");
+	page0.setImageDescriptor(descriptor);
+	addPage(page0);
+
+	PropertiesFileRealmPage page1 = new PropertiesFileRealmPage(
+		"PropertiesFileRealmPage");
+	page1.setImageDescriptor(descriptor);
+	addPage(page1);
+
+	SelectSQLPage page2 = new SelectSQLPage("SelectSQLPage");
+	page2.setImageDescriptor(descriptor);
+	addPage(page2);
+
+	DBConnectionPage page3 = new DBConnectionPage("DBConnectionPage");
+	page3.setImageDescriptor(descriptor);
+	addPage(page3);
+
+	LDAPConnectionPage page4 = new LDAPConnectionPage("LDAPConnectionPage");
+	page4.setImageDescriptor(descriptor);
+	addPage(page4);
+
+	LDAPSearchPage page5 = new LDAPSearchPage("LDAPSearchPage");
+	page5.setImageDescriptor(descriptor);
+	addPage(page5);
+
+    }
+
+    @Override
+    public JAXBObjectFactory getEFactory() {
+	return JAXBObjectFactoryImpl.getInstance();
+    }
+
+    @Override
+    public String[] getTableColumnEAttributes() {
+	return new String[] {};
+    }
+
+    @Override
+    protected String getAddWizardWindowTitle() {
+	return "New Security Realm";// TODO put into message
+    }
+
+    @Override
+    protected String getEditWizardWindowTitle() {
+	return "Edit Security Realm";// TODO put into message
+    }
+
+    public boolean performFinish() {
+	boolean isedit = false;
+	JAXBElement<?> plan = this.section.getPlan();
+	ObjectFactory objectFactory = new ObjectFactory();
+	// all pages
+	SecurityRealmBasicPage page0 = (SecurityRealmBasicPage) this
+		.getPage("SecurityRealmBasicPage");
+	PropertiesFileRealmPage page1 = (PropertiesFileRealmPage) this
+		.getPage("PropertiesFileRealmPage");
+	SelectSQLPage page2 = (SelectSQLPage) this.getPage("SelectSQLPage");
+	DBConnectionPage page3 = (DBConnectionPage) this
+		.getPage("DBConnectionPage");
+	LDAPConnectionPage page4 = (LDAPConnectionPage) this
+		.getPage("LDAPConnectionPage");
+	LDAPSearchPage page5 = (LDAPSearchPage) this.getPage("LDAPSearchPage");
+
+	// password not match , popup a dialog
+	if (!page3.textEntries[3].getText().equals(
+		page3.textEntries[4].getText())) {
+	    Status status = new Status(IStatus.WARNING, "Login Error", 0,
+		    "Password provided in both fields do not match", null);
+	    ErrorDialog.openError(this.getShell(), "Login Error",
+		    "Invalid Login Details", status);
+	    return false;
+	}
+
+	// set a gbean according to the input from wizard
+	Gbean gbean = null;
+	if (eObject != null) {
+	    gbean = (Gbean) ((JAXBElement) eObject).getValue();
+	    isedit = true;
+	} else {
+	    gbean = new Gbean();// create a new gbean
+	    eObject = objectFactory.createGbean(gbean);
+	}
+
+	// add the data into gbean
+	String realmName = page0.textEntries[0].getText() == null ? ""
+		: page0.textEntries[0].getText();
+	gbean.setName(realmName);// set the gbean name the same as realm name
+	gbean
+		.setClazz("org.apache.geronimo.security.realm.GenericSecurityRealm");// TODO
+	// message
+
+	List<JAXBElement<?>> elelist = gbean
+		.getAttributeOrXmlAttributeOrReference();
+
+	// set the attribute
+	JAXBElement<Attribute> attributeElement = getAttributeElement(elelist);
+	if (attributeElement == null) {
+	    attributeElement = objectFactory.createGbeanAttribute(null);
+	    elelist.add(attributeElement);
+	}
+	Attribute attribute = new Attribute();
+	attribute.setName("realmName");
+	attribute.setValue(realmName);
+	attributeElement.setValue(attribute);
+
+	// set the reference
+	JAXBElement<Reference> referenceElement = getReferenceElement(elelist);
+	if (referenceElement == null) {
+	    referenceElement = objectFactory.createGbeanReference(null);
+	    elelist.add(referenceElement);
+	}
+	Reference ref = new Reference();
+	ref.setName("ServerInfo");
+	ref.setCustomFoo("ServerInfo");
+	referenceElement.setValue(ref);
+
+	// set the xml-reference
+	JAXBElement<XmlAttributeType> xmlrefElement = getXmlReferenceElement(elelist);
+	if (xmlrefElement == null) {
+	    xmlrefElement = objectFactory.createGbeanXmlReference(null);
+	    elelist.add(xmlrefElement);
+	}
+	XmlAttributeType xmlAtttribute = new XmlAttributeType();
+	xmlAtttribute.setName("LoginModuleConfiguration");
+	xmlrefElement.setValue(xmlAtttribute);
+
+	LoginConfig config = new LoginConfig();
+	xmlAtttribute.setAny(config);
+	LoginModule loginModule = new LoginModule();
+	config.getLoginModuleRefOrLoginModule().add(loginModule);
+	loginModule.setControlFlag(ControlFlag.fromValue("REQUIRED"));
+	loginModule.setWrapPrincipals(false);
+	loginModule.setLoginDomainName(realmName);
+
+	String realmType = page0.combo.getText().trim();
+	if (realmType.equals("Properties File Realm")) {
+	    loginModule
+		    .setLoginModuleClass("org.apache.geronimo.security.realm.providers.PropertiesFileLoginModule");
+
+	    String usersfile = page1.textEntries[0].getText().trim();
+	    Option usersfileopt = createOption("usersURI", usersfile);
+
+	    String groupsfile = page1.textEntries[1].getText().trim();
+	    Option groupsfileopt = createOption("groupsURI", groupsfile);
+
+	    String algorithm = page1.textEntries[2].getText();
+	    Option algorithmopt = createOption("digest", algorithm);
+
+	    String encoding = page1.textEntries[3].getText();
+	    Option encodingopt = createOption("encoding", encoding);
+
+	    loginModule.getOption().add(usersfileopt);
+	    loginModule.getOption().add(groupsfileopt);
+	    if (algorithm != null)
+		loginModule.getOption().add(algorithmopt);
+	    if (encoding != null)
+		loginModule.getOption().add(encodingopt);
+
+	} else if (realmType.equals("SQL Realm")) {
+	    loginModule
+		    .setLoginModuleClass("org.apache.geronimo.security.realm.providers.SQLLoginModule");
+
+	    String selectUsers = page2.textEntries[0].getText().trim();
+	    Option selectUsersopt = createOption("userSelect", selectUsers);
+
+	    String selectGroups = page2.textEntries[1].getText().trim();
+	    Option selectGroupsopt = createOption("groupSelect", selectGroups);
+
+	    String algorithm = page2.textEntries[2].getText().trim();
+	    Option algorithmopt = createOption("digest", algorithm);
+
+	    String encoding = page2.textEntries[3].getText().trim();
+	    Option encodingopt = createOption("encoding", encoding);
+
+	    if (page3.buttons[0].getSelection()) {
+		String dsname = page3.dataBasePoolCombo.getText();
+		Option dsnameopt = createOption("dataSourceName", dsname);
+		loginModule.getOption().add(dsnameopt);
+	    } else if (page3.buttons[1].getSelection()) {
+
+		String jdbcDriverClass = page3.textEntries[0].getText().trim();
+		Option jdbcDriverClassopt = createOption("jdbcDriver",
+			jdbcDriverClass);
+
+		String jdbcURL = page3.textEntries[1].getText().trim();
+		Option jdbcURLopt = createOption("jdbcURL", jdbcURL);
+
+		String userName = page3.textEntries[2].getText().trim();
+		Option userNameopt = createOption("jdbcUser", userName);
+
+		String password = page3.textEntries[3].getText().trim();
+		Option passwordopt = createOption("jdbcPassword", password);
+
+		loginModule.getOption().add(jdbcDriverClassopt);
+		loginModule.getOption().add(jdbcURLopt);
+		loginModule.getOption().add(userNameopt);
+		loginModule.getOption().add(passwordopt);
+
+	    }
+
+	    loginModule.getOption().add(selectUsersopt);
+	    loginModule.getOption().add(selectGroupsopt);
+	    loginModule.getOption().add(algorithmopt);
+	    loginModule.getOption().add(encodingopt);
+
+	} else if (realmType.equals("LDAP Realm")) {
+	    loginModule
+		    .setLoginModuleClass("org.apache.geronimo.security.realm.providers.LDAPLoginModule");
+	    String initialContextFactory = page4.combo[0].getText().trim();
+	    loginModule.getOption()
+		    .add(
+			    createOption("initialContextFactory",
+				    initialContextFactory));
+	    String connectionURL = page4.combo[1].getText();
+	    loginModule.getOption().add(
+		    createOption("connectionURL", connectionURL));
+	    String connectionUsername = page4.text[0].getText();
+	    loginModule.getOption().add(
+		    createOption("connectionUsername", connectionUsername));
+	    String connectionPassword = page4.text[1].getText();
+	    loginModule.getOption().add(
+		    createOption("connectionPassword", connectionPassword));
+	    String connectionProtocol = page4.text[3].getText();
+	    loginModule.getOption().add(
+		    createOption("connectionProtocol", connectionProtocol));
+	    String authentication = page4.combo[2].getText();
+	    loginModule.getOption().add(
+		    createOption("authentication", authentication));
+
+	    String userBase = page5.text[0].getText();
+	    loginModule.getOption().add(createOption("userBase", userBase));
+	    String userSearchMatching = page5.text[1].getText();
+	    loginModule.getOption().add(
+		    createOption("userSearchMatching", userSearchMatching));
+	    String userSearchSubtree = Boolean.toString(page5.userSearchSubtree
+		    .getSelection());
+	    loginModule.getOption().add(
+		    createOption("userSearchSubtree", userSearchSubtree));
+	    String roleBase = page5.text[2].getText();
+	    loginModule.getOption().add(createOption("roleBase", roleBase));
+	    String roleName = page5.text[3].getText();
+	    loginModule.getOption().add(createOption("roleName", roleName));
+	    String roleSearchMatching = page5.text[4].getText();
+	    loginModule.getOption().add(
+		    createOption("roleSearchMatching", roleSearchMatching));
+	    String userRoleName = page5.text[5].getText();
+	    loginModule.getOption().add(
+		    createOption("userRoleName", userRoleName));
+	    String roleSearchSubtree = Boolean.toString(page5.roleSearchSubtree
+		    .getSelection());
+	    loginModule.getOption().add(
+		    createOption("roleSearchSubtree", roleSearchSubtree));
+	}
+
+	if (isedit)
+	    return true;
+
+	// is add, need to add the gbean into plan
+	Object planValue = plan.getValue();
+	if (Application.class.isInstance(planValue)) {
+	    Application application = (Application) planValue;
+
+	    // set dependency
+	    Environment env = application.getEnvironment();
+	    if (env == null) {
+		env = new Environment();
+		application.setEnvironment(env);
+	    }
+	    setDependency(env);
+
+	    // add the gbean into plan
+	    JAXBElement<Gbean> gbeanElement = objectFactory.createGbean(gbean);
+	    application.getService().add(gbeanElement);
+	} else if (WebApp.class.isInstance(planValue)) {
+	    WebApp webapp = (WebApp) planValue;
+
+	    // set dependency
+	    Environment env = webapp.getEnvironment();
+	    if (env == null) {
+		env = new Environment();
+		webapp.setEnvironment(env);
+	    }
+	    setDependency(env);
+
+	    // add the gbean into plan
+	    JAXBElement<Gbean> gbeanElement = objectFactory.createGbean(gbean);
+	    webapp.getServiceOrPersistence().add(gbeanElement);
+	} else if (OpenejbJar.class.isInstance(planValue)) {
+	    OpenejbJar openejbJar = (OpenejbJar) planValue;
+
+	    // set dependency
+	    Environment env = openejbJar.getEnvironment();
+	    if (env == null) {
+		env = new Environment();
+		openejbJar.setEnvironment(env);
+	    }
+	    setDependency(env);
+
+	    // add the gbean into plan
+	    JAXBElement<Gbean> gbeanElement = objectFactory.createGbean(gbean);
+	    openejbJar.getService().add(gbeanElement);
+	}
+
+	return true;
+    }
+
+    private void setDependency(Environment env) {
+	Dependencies dependencies = env.getDependencies();
+	if (dependencies == null) {
+	    dependencies = new Dependencies();
+	    env.setDependencies(dependencies);
+	}
+	Dependency securityDependency = new Dependency();
+	securityDependency.setGroupId("org.apache.geronimo.framework");
+	securityDependency.setArtifactId("j2ee-security");
+	securityDependency.setType("car");
+	if (!dependencies.getDependency().contains(securityDependency)) {
+	    dependencies.getDependency().add(securityDependency);
+	}
+    }
+
+    private Option createOption(String name, String value) {
+	Option option = new Option();
+	option.setName(name);
+	option.setValue(value);
+	return option;
+    }
+
+    private JAXBElement<Attribute> getAttributeElement(List<JAXBElement<?>> list) {
+	for (JAXBElement<?> ele : list) {
+	    if (Attribute.class.isInstance(ele.getValue())
+		    && ((Attribute) ele.getValue()).getName().equals(
+			    "realmName")) {
+		return (JAXBElement<Attribute>) ele;
+	    }
+	}
+	return null;
+    }
+
+    private JAXBElement<Reference> getReferenceElement(List<JAXBElement<?>> list) {
+	for (JAXBElement<?> ele : list) {
+	    if (Reference.class.isInstance(ele.getValue())
+		    && ((Reference) ele.getValue()).getName().equals(
+			    "ServerInfo")) {
+		return (JAXBElement<Reference>) ele;
+	    }
+	}
+	return null;
+    }
+
+    private JAXBElement<XmlAttributeType> getXmlReferenceElement(
+	    List<JAXBElement<?>> list) {
+	for (JAXBElement<?> ele : list) {
+	    if (XmlAttributeType.class.isInstance(ele.getValue())
+		    && ((XmlAttributeType) ele.getValue()).getName().equals(
+			    "LoginModuleConfiguration")) {
+		return (JAXBElement<XmlAttributeType>) ele;
+	    }
+	}
+	return null;
+    }
+
+    public class SecurityRealmBasicPage extends WizardPage {
+	private int recordedRealmType = -2;
+
+	Text textEntries[] = new Text[1];
+	Combo combo = null;
+
+	public SecurityRealmBasicPage(String pageName) {
+	    super(pageName);
+	    setTitle(CommonMessages.wizardFirstPageTitle_SecurityRealm);
+	    setDescription(CommonMessages.wizardFirstPageDescription_SecurityRealm);
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group basicGroup = new Group(composite, SWT.NONE);
+	    basicGroup.setText("Basic Settings");
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.grabExcessVerticalSpace = true;
+	    data1.horizontalSpan = 2;
+	    basicGroup.setLayout(gridLayout);
+	    data1.grabExcessHorizontalSpace = true;
+	    basicGroup.setLayoutData(data1);
+	    createLabel(basicGroup, CommonMessages.realmName, 1);
+	    textEntries[0] = createText(basicGroup, 3);
+	    createLabel(basicGroup, CommonMessages.realmType, 1);
+	    combo = new Combo(basicGroup, SWT.NONE | SWT.READ_ONLY);
+	    combo.setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		    true, false, 3, 1));
+	    combo.add("Properties File Realm");
+	    combo.add("SQL Realm");
+	    combo.add("LDAP Realm");
+	    combo.select(0);
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement) eObject).getValue();
+		String realmName = getAttributeValue(gbean, "realmName");
+		this.textEntries[0].setText(realmName == null ? "" : realmName);
+		String loginModuleClass = getLoginModuleClass(gbean);
+		if ("org.apache.geronimo.security.realm.providers.PropertiesFileLoginModule"
+			.equals(loginModuleClass)) {
+		    this.combo.select(0);
+		} else if ("org.apache.geronimo.security.realm.providers.SQLLoginModule"
+			.equals(loginModuleClass)) {
+		    this.combo.select(1);
+		} else if ("org.apache.geronimo.security.realm.providers.LDAPLoginModule"
+			.equals(loginModuleClass)) {
+		    this.combo.select(2);
+		}
+	    }
+	    setControl(composite);
+	}
+
+	public int getRecordedRealmType() {
+	    return recordedRealmType;
+	}
+
+	public void setRecordedRealmType(int recordedRealmType) {
+	    this.recordedRealmType = recordedRealmType;
+	}
+
+	public int getRealmTypeSelectionIndex() {
+	    if (combo != null) {
+		return combo.getSelectionIndex();
+	    } else {
+		return -1;
+	    }
+	}
+
+	@Override
+	public IWizardPage getNextPage() {
+	    if (combo.getText().trim().equals("Properties File Realm")) {// properties
+		// file
+		// type
+		return this.getWizard().getPage("PropertiesFileRealmPage");
+	    } else if (combo.getText().trim().equals("SQL Realm")) {// sql realm
+		// type
+		return this.getWizard().getPage("SelectSQLPage");
+	    } else if (combo.getText().trim().equals("LDAP Realm")) {// ldap
+		// realm
+		// type
+		return this.getWizard().getPage("LDAPConnectionPage");
+	    }
+	    return null;
+	}
+    }
+
+    public class PropertiesFileRealmPage extends WizardPage {
+
+	Text textEntries[] = new Text[4];
+
+	public PropertiesFileRealmPage(String pageName) {
+	    super(pageName);
+	    setTitle("Properties File Realm");
+	    setDescription("Edit settings for users file and groups file's pathes");
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group uriGroup = new Group(composite, SWT.NONE);
+	    uriGroup.setText("Files's URI");
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    uriGroup.setLayout(gridLayout);
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.grabExcessVerticalSpace = true;
+	    data1.horizontalSpan = 2;
+	    data1.grabExcessHorizontalSpace = true;
+	    uriGroup.setLayoutData(data1);
+	    createLabel(uriGroup, "Users File URI:", 1);
+	    textEntries[0] = createText(uriGroup, 3);
+	    createLabel(uriGroup, "Groups File URI:", 1);
+	    textEntries[1] = createText(uriGroup, 3);
+
+	    Group digestGroup = new Group(composite, SWT.NONE);
+	    digestGroup.setText("Digest Configuration");
+	    gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    digestGroup.setLayout(gridLayout);
+	    data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.grabExcessVerticalSpace = true;
+	    data1.horizontalSpan = 2;
+	    data1.grabExcessHorizontalSpace = true;
+	    digestGroup.setLayoutData(data1);
+	    createLabel(digestGroup, "Digest Algorithm:", 1);
+	    textEntries[2] = createText(digestGroup, 3);
+	    createLabel(digestGroup, "Digest Encoding:", 1);
+	    textEntries[3] = createText(digestGroup, 3);
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement) eObject).getValue();
+		if (getOptionValue(gbean, "usersURI") != null) {
+		    textEntries[0].setText(getOptionValue(gbean, "usersURI"));
+		}
+		if (getOptionValue(gbean, "groupsURI") != null) {
+		    textEntries[1].setText(getOptionValue(gbean, "groupsURI"));
+		}
+		if (getOptionValue(gbean, "digest") != null) {
+		    textEntries[2].setText(getOptionValue(gbean, "digest"));
+		}
+		if (getOptionValue(gbean, "encoding") != null) {
+		    textEntries[3].setText(getOptionValue(gbean, "encoding"));
+		}
+	    }
+
+	    setControl(composite);
+	}
+
+	public boolean canFlipToNextPage() {
+	    // no next page for this path through the wizard
+	    return false;
+	}
+
+	public IWizardPage getNextPage() {
+	    return null;
+	}
+    }
+
+    public class SelectSQLPage extends WizardPage {
+
+	Text textEntries[] = new Text[4];
+
+	public SelectSQLPage(String pageName) {
+	    super(pageName);
+	    setTitle("SQL Realm");
+	    setDescription("Edit settings for user and group select sql");
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group uriGroup = new Group(composite, SWT.NONE);
+	    uriGroup.setText("Select SQL");
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    uriGroup.setLayout(gridLayout);
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.grabExcessVerticalSpace = true;
+	    data1.horizontalSpan = 2;
+	    data1.grabExcessHorizontalSpace = true;
+	    uriGroup.setLayoutData(data1);
+	    createLabel(uriGroup, "Users Select SQL:", 1);
+	    textEntries[0] = createText(uriGroup, 3);
+	    createLabel(uriGroup, "Groups Select SQL:", 1);
+	    textEntries[1] = createText(uriGroup, 3);
+
+	    Group digestGroup = new Group(composite, SWT.NONE);
+	    digestGroup.setText("Digest Configuration");
+	    gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    digestGroup.setLayout(gridLayout);
+	    data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.grabExcessVerticalSpace = true;
+	    data1.horizontalSpan = 2;
+	    data1.grabExcessHorizontalSpace = true;
+	    digestGroup.setLayoutData(data1);
+	    createLabel(digestGroup, "Digest Algorithm:", 1);
+	    textEntries[2] = createText(digestGroup, 3);
+	    createLabel(digestGroup, "Digest Encoding:", 1);
+	    textEntries[3] = createText(digestGroup, 3);
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement) eObject).getValue();
+		if (getOptionValue(gbean, "userSelect") != null) {
+		    textEntries[0].setText(getOptionValue(gbean, "userSelect"));
+		}
+		if (getOptionValue(gbean, "groupSelect") != null) {
+		    textEntries[1]
+			    .setText(getOptionValue(gbean, "groupSelect"));
+		}
+		if (getOptionValue(gbean, "digest") != null) {
+		    textEntries[2].setText(getOptionValue(gbean, "digest"));
+		}
+		if (getOptionValue(gbean, "encoding") != null) {
+		    textEntries[3].setText(getOptionValue(gbean, "encoding"));
+		}
+	    }
+
+	    setControl(composite);
+	}
+
+	@Override
+	public IWizardPage getNextPage() {
+	    return this.getWizard().getPage("DBConnectionPage");
+	}
+
+    }
+
+    public class DBConnectionPage extends WizardPage {
+
+	Text textEntries[] = new Text[5];
+	Button buttons[] = new Button[2];
+	Combo dataBasePoolCombo;
+
+	protected DBConnectionPage(String pageName) {
+	    super(pageName);
+	    setTitle(CommonMessages.wizardSecondPageTitle_SecurityRealm);
+	    setDescription(CommonMessages.wizardSecondPageDescription_SecurityRealm);
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group databasePoolGroup = new Group(composite, SWT.NONE);
+	    databasePoolGroup.setText(CommonMessages.dataBasePool);
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.horizontalSpan = 2;
+	    databasePoolGroup.setLayout(gridLayout);
+	    databasePoolGroup.setLayoutData(data1);
+	    buttons[0] = new Button(databasePoolGroup, SWT.RADIO);
+	    buttons[0].setSelection(true);
+	    buttons[0].setText(CommonMessages.useDataBasePool);
+	    buttons[0].setLayoutData(new GridData(GridData.FILL,
+		    GridData.CENTER, true, false, 4, 1));
+	    buttons[0].addSelectionListener(new SelectionAdapter() {
+		public void widgetSelected(SelectionEvent event) {
+		    buttons[1].setSelection(false);
+		    dataBasePoolCombo.setEnabled(true);
+		    for (int i = 0; i < textEntries.length; i++) {
+			textEntries[i].setEnabled(false);
+		    }
+		}
+	    });
+	    createLabel(databasePoolGroup, CommonMessages.dataBasePoolName, 1);
+	    dataBasePoolCombo = new Combo(databasePoolGroup, SWT.NONE);
+	    dataBasePoolCombo.setLayoutData(new GridData(GridData.FILL,
+		    GridData.FILL, true, false, 3, 1));
+	    populateList(dataBasePoolCombo);
+	    dataBasePoolCombo.select(0);
+
+	    GridData data2 = new GridData();
+	    data2.horizontalAlignment = GridData.FILL;
+	    data2.grabExcessHorizontalSpace = true;
+	    data2.horizontalSpan = 2;
+	    Group databaseGroup = new Group(composite, SWT.NONE);
+	    databaseGroup.setLayout(gridLayout);
+	    databaseGroup.setLayoutData(data2);
+	    buttons[1] = new Button(databaseGroup, SWT.RADIO);
+	    buttons[1].setText(CommonMessages.useDataBase);
+	    buttons[1].setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		    true, false, 4, 1));
+	    buttons[1].addSelectionListener(new SelectionAdapter() {
+		public void widgetSelected(SelectionEvent event) {
+		    buttons[0].setSelection(false);
+		    dataBasePoolCombo.setEnabled(false);
+		    for (int i = 0; i < textEntries.length; i++) {
+			textEntries[i].setEnabled(true);
+		    }
+		}
+	    });
+	    createLabel(databaseGroup, CommonMessages.jdbcDriverClass, 1);
+	    textEntries[0] = createText(databaseGroup, 3);
+
+	    createLabel(databaseGroup, CommonMessages.jdbcURL, 1);
+	    textEntries[1] = createText(databaseGroup, 3);
+	    createLabel(databaseGroup, CommonMessages.jdbcUserName, 1);
+	    textEntries[2] = createText(databaseGroup, 3);
+	    createLabel(databaseGroup, CommonMessages.jdbcPassword, 1);
+	    textEntries[3] = createText(databaseGroup, 1);
+	    textEntries[3].setEchoChar('*');
+	    createLabel(databaseGroup, CommonMessages.confirmPassword, 1);
+	    textEntries[4] = createText(databaseGroup, 1);
+	    textEntries[4].setEchoChar('*');
+
+	    dataBasePoolCombo.setEnabled(true);
+	    for (int i = 0; i < textEntries.length; i++) {
+		textEntries[i].setEnabled(false);
+	    }
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement) eObject).getValue();
+		if (getOptionValue(gbean, "dataSourceName") != null) {
+		    this.buttons[0].setSelection(true);
+		    this.dataBasePoolCombo.setEnabled(true);
+		    this.dataBasePoolCombo.setText(getOptionValue(gbean,
+			    "dataSourceName"));
+
+		    this.buttons[1].setSelection(false);
+		    for (int i = 0; i < textEntries.length; i++) {
+			this.textEntries[i].setEnabled(false);
+		    }
+
+		} else {
+		    this.buttons[1].setSelection(true);
+		    this.buttons[0].setSelection(false);
+		    this.dataBasePoolCombo.setEnabled(false);
+		    for (int i = 0; i < textEntries.length; i++) {
+			textEntries[i].setEnabled(true);
+		    }
+
+		    if (getOptionValue(gbean, "jdbcDriver") != null) {
+			this.textEntries[0].setText(getOptionValue(gbean,
+				"jdbcDriver"));
+		    }
+		    if (getOptionValue(gbean, "jdbcURL") != null) {
+			this.textEntries[1].setText(getOptionValue(gbean,
+				"jdbcURL"));
+		    }
+		    if (getOptionValue(gbean, "jdbcUser") != null) {
+			this.textEntries[2].setText(getOptionValue(gbean,
+				"jdbcUser"));
+		    }
+		    if (getOptionValue(gbean, "jdbcPassword") != null) {
+			this.textEntries[3].setText(getOptionValue(gbean,
+				"jdbcPassword"));
+			this.textEntries[4].setText(getOptionValue(gbean,
+				"jdbcPassword"));
+		    }
+		}
+
+	    }
+
+	    setControl(composite);
+
+	}
+
+	private void populateList(Combo combo) {
+	    ArrayList<Pattern> dbPool = GeronimoServerInfo.getInstance()
+		    .getJdbcConnectionPools();
+	    for (int i = 0; i < dbPool.size(); i++) {
+		String str = dbPool.get(i).getName();
+		combo.add(str);
+	    }
+	}
+
+	public boolean canFlipToNextPage() {
+	    // no next page for this path through the wizard
+	    return false;
+	}
+
+	public IWizardPage getNextPage() {
+	    return null;
+	}
+    }
+
+    public class LDAPConnectionPage extends WizardPage {
+	Text[] text = new Text[4];
+	Combo[] combo = new Combo[3];
+
+	protected LDAPConnectionPage(String pageName) {
+	    super(pageName);
+	    setTitle("LDAP Realm Connection");
+	    setDescription("Edit settings for LDAP server connection");
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group connectionGroup = new Group(composite, SWT.NULL);
+	    connectionGroup.setText("LDAP server connection");
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.horizontalSpan = 2;
+	    connectionGroup.setLayout(gridLayout);
+	    connectionGroup.setLayoutData(data1);
+
+	    createLabel(connectionGroup, "Initial Context Factory:", 1);
+	    combo[0] = new Combo(connectionGroup, SWT.NONE);
+	    combo[0].setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		    true, false, 3, 1));
+	    combo[0].add("com.sun.jndi.ldap.LdapCtxFactory");
+	    createLabel(connectionGroup, "Connection URL:", 1);
+	    combo[1] = new Combo(connectionGroup, SWT.NONE);
+	    combo[1].setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		    true, false, 3, 1));
+	    combo[1].add("ldap://localhost:1389");
+	    combo[1].add("ldap://localhost:389");
+	    createLabel(connectionGroup, "Connect Username:", 1);
+	    text[0] = createText(connectionGroup, 3);
+	    text[0].setText("system");
+	    createLabel(connectionGroup, "Connect Password:", 1);
+	    text[1] = createText(connectionGroup, 3);
+	    text[1].setEchoChar('*');
+	    text[1].setText("manager");
+	    createLabel(connectionGroup, "Confirm Password:", 1);
+	    text[2] = createText(connectionGroup, 3);
+	    text[2].setEchoChar('*');
+	    text[2].setText("manager");
+	    createLabel(connectionGroup, "Connect Protocol:", 1);
+	    text[3] = createText(connectionGroup, 1);
+	    createLabel(connectionGroup, "Authentication:", 1);
+	    combo[2] = new Combo(connectionGroup, SWT.NONE);
+	    combo[2].setLayoutData(new GridData(GridData.FILL, GridData.FILL,
+		    true, false, 1, 1));
+	    combo[2].add("none");
+	    combo[2].add("simple");
+	    combo[2].add("strong");
+	    combo[2].select(1);
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement) eObject).getValue();
+		if (getOptionValue(gbean, "initialContextFactory") != null) {
+		    this.combo[0].setText(getOptionValue(gbean,
+			    "initialContextFactory"));
+		}
+		if (getOptionValue(gbean, "connectionURL") != null) {
+		    this.combo[1]
+			    .setText(getOptionValue(gbean, "connectionURL"));
+		}
+		if (getOptionValue(gbean, "connectionUsername") != null) {
+		    this.text[0].setText(getOptionValue(gbean,
+			    "connectionUsername"));
+		}
+		if (getOptionValue(gbean, "connectionPassword") != null) {
+		    this.text[1].setText(getOptionValue(gbean,
+			    "connectionPassword"));
+		    this.text[2].setText(getOptionValue(gbean,
+			    "connectionPassword"));
+		}
+		if (getOptionValue(gbean, "connectionProtocol") != null) {
+		    this.text[3].setText(getOptionValue(gbean,
+			    "connectionProtocol"));
+		}
+		if (getOptionValue(gbean, "authentication") != null) {
+		    this.combo[2].setText(getOptionValue(gbean,
+			    "authentication"));
+		}
+
+	    }
+
+	    setControl(composite);
+	}
+
+	public IWizardPage getNextPage() {
+	    return this.getWizard().getPage("LDAPSearchPage");
+	}
+
+    }
+
+    public class LDAPSearchPage extends WizardPage {
+	Text[] text = new Text[6];
+	Button userSearchSubtree, roleSearchSubtree;
+
+	protected LDAPSearchPage(String pageName) {
+	    super(pageName);
+	    setTitle("LDAP Realm Search Configuration");
+	    setDescription("Edit settings for LDAP realm search");
+	}
+
+	public void createControl(Composite parent) {
+	    Composite composite = new Composite(parent, SWT.NULL);
+	    GridLayout layout = new GridLayout();
+	    layout.numColumns = 2;
+	    composite.setLayout(layout);
+	    GridData data = new GridData();
+	    data.verticalAlignment = GridData.FILL;
+	    data.horizontalAlignment = GridData.FILL;
+	    data.widthHint = 300;
+	    composite.setLayoutData(data);
+
+	    Group userGroup = new Group(composite, SWT.NULL);
+	    userGroup.setText("User Search Configuration");
+	    GridLayout gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    GridData data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.horizontalSpan = 2;
+	    userGroup.setLayout(gridLayout);
+	    userGroup.setLayoutData(data1);
+
+	    createLabel(userGroup, "User Base:", 1);
+	    text[0] = createText(userGroup, 3);
+	    createLabel(userGroup, "User Search Matching:", 1);
+	    text[1] = createText(userGroup, 3);
+	    userSearchSubtree = new Button(userGroup, SWT.CHECK);
+	    userSearchSubtree.setText("User Search Subtree");
+	    userSearchSubtree.setLayoutData(new GridData(GridData.FILL,
+		    GridData.FILL, true, false, 4, 1));
+	    userSearchSubtree.setSelection(true);
+
+	    Group roleGroup = new Group(composite, SWT.NULL);
+	    roleGroup.setText("Role Search Configuration");
+	    gridLayout = new GridLayout();
+	    gridLayout.numColumns = 4;
+	    data1 = new GridData();
+	    data1.horizontalAlignment = GridData.FILL;
+	    data1.grabExcessHorizontalSpace = true;
+	    data1.horizontalSpan = 2;
+	    roleGroup.setLayout(gridLayout);
+	    roleGroup.setLayoutData(data1);
+	    createLabel(roleGroup, "Role Base:", 1);
+	    text[2] = createText(roleGroup, 3);
+	    createLabel(roleGroup, "Role Name:", 1);
+	    text[3] = createText(roleGroup, 3);
+	    createLabel(roleGroup, "Role User Search String:", 1);
+	    text[4] = createText(roleGroup, 3);
+	    createLabel(roleGroup, "User Role Search String:", 1);
+	    text[5] = createText(roleGroup, 3);
+	    roleSearchSubtree = new Button(roleGroup, SWT.CHECK);
+	    roleSearchSubtree.setText("Role Search Subtree");
+	    roleSearchSubtree.setLayoutData(new GridData(GridData.FILL,
+		    GridData.FILL, true, false, 4, 1));
+	    roleSearchSubtree.setSelection(true);
+
+	    if (eObject != null) {
+		Gbean gbean = (Gbean) ((JAXBElement<?>) eObject).getValue();
+		if (getOptionValue(gbean, "userBase") != null) {
+		    text[0].setText(getOptionValue(gbean, "userBase"));
+		}
+		if (getOptionValue(gbean, "userSearchMatching") != null) {
+		    text[1]
+			    .setText(getOptionValue(gbean, "userSearchMatching"));
+		}
+		if (getOptionValue(gbean, "userSearchSubtree") != null) {
+		    this.userSearchSubtree.setSelection(Boolean
+			    .parseBoolean(getOptionValue(gbean,
+				    "userSearchSubtree")));
+		}
+		if (getOptionValue(gbean, "roleBase") != null) {
+		    text[2].setText(getOptionValue(gbean, "roleBase"));
+		}
+		if (getOptionValue(gbean, "roleName") != null) {
+		    text[3].setText(getOptionValue(gbean, "roleName"));
+		}
+		if (getOptionValue(gbean, "roleSearchMatching") != null) {
+		    text[4]
+			    .setText(getOptionValue(gbean, "roleSearchMatching"));
+		}
+		if (getOptionValue(gbean, "userRoleName") != null) {
+		    text[5].setText(getOptionValue(gbean, "userRoleName"));
+		}
+		if (getOptionValue(gbean, "roleSearchSubtree") != null) {
+		    this.userSearchSubtree.setSelection(Boolean
+			    .parseBoolean(getOptionValue(gbean,
+				    "roleSearchSubtree")));
+		}
+	    }
+
+	    setControl(composite);
+	}
+
+	public boolean canFlipToNextPage() {
+	    // no next page for this path through the wizard
+	    return false;
+	}
+
+	public IWizardPage getNextPage() {
+	    return null;
+	}
+
+    }
+
+    private String getAttributeValue(Gbean gbean, String attributeName) {
+	try {
+	    List<JAXBElement<?>> elelist = gbean
+		    .getAttributeOrXmlAttributeOrReference();
+	    for (JAXBElement<?> ele : elelist) {
+		if (Attribute.class.isInstance(ele.getValue())
+			&& ((Attribute) ele.getValue()).getName().equals(
+				attributeName)) {
+		    return ((Attribute) ele.getValue()).getValue();
+		}
+	    }
+	} catch (NullPointerException e) {
+	    // ignore
+	}
+	return null;
+    }
+
+    private String getLoginModuleClass(Gbean gbean) {
+
+	try {
+	    List<JAXBElement<?>> elelist = gbean
+		    .getAttributeOrXmlAttributeOrReference();
+	    for (JAXBElement<?> ele : elelist) {
+		if (XmlAttributeType.class.isInstance(ele.getValue())
+			&& ((XmlAttributeType) ele.getValue()).getName()
+				.equals("LoginModuleConfiguration")) {
+		    LoginModule loginModule = (LoginModule) ((LoginConfig) ((XmlAttributeType) ele
+			    .getValue()).getAny())
+			    .getLoginModuleRefOrLoginModule().get(0);
+		    return loginModule.getLoginModuleClass();
+		}
+	    }
+	    return null;
+	} catch (NullPointerException e) {
+	    // ignore
+	}
+
+	return null;
+    }
+
+    private String getOptionValue(Gbean gbean, String optionName) {
+	try {
+	    List<JAXBElement<?>> elelist = gbean
+		    .getAttributeOrXmlAttributeOrReference();
+	    for (JAXBElement<?> ele : elelist) {
+		if (XmlAttributeType.class.isInstance(ele.getValue())
+			&& ((XmlAttributeType) ele.getValue()).getName()
+				.equals("LoginModuleConfiguration")) {
+		    LoginModule loginModule = (LoginModule) ((LoginConfig) ((XmlAttributeType) ele
+			    .getValue()).getAny())
+			    .getLoginModuleRefOrLoginModule().get(0);
+		    List<Option> options = loginModule.getOption();
+		    for (Option opt : options) {
+			if (opt.getName().equals(optionName))
+			    return opt.getValue();
+		    }
+		}
+	    }
+	    return null;
+	} catch (NullPointerException e) {
+	    // ignore
+	}
+
+	return null;
+    }
+
+    protected Label createLabel(Composite composite, String value, int span) {
+	Label label = new Label(composite, SWT.NONE);
+	label.setText(value);
+	GridData labelData = new GridData();
+	labelData.horizontalAlignment = GridData.FILL;
+	labelData.horizontalSpan = span;
+	label.setLayoutData(labelData);
+	return label;
+    }
+
+    protected Text createText(Composite composite, int span) {
+	Text text = new Text(composite, SWT.BORDER);
+	GridData textData = new GridData(GridData.HORIZONTAL_ALIGN_FILL
+		| GridData.VERTICAL_ALIGN_FILL);
+	textData.grabExcessHorizontalSpace = true;
+	textData.widthHint = 100;
+	textData.horizontalSpan = span;
+	text.setLayoutData(textData);
+	return text;
+    }
+}



Mime
View raw message