You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by de...@apache.org on 2009/09/15 09:41:01 UTC
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/
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;
+ }
+}