Package org.apache.geronimo.st.v21.ui.wizards

Source Code of org.apache.geronimo.st.v21.ui.wizards.SecurityRealmWizard$LDAPSearchPage

/**
*  Licensed to the Apache Software Foundation (ASF) under one
*  or more contributor license agreements.  See the NOTICE file
*  distributed with this work for additional information
*  regarding copyright ownership.  The ASF licenses this file
*  to you under the Apache License, Version 2.0 (the
*  "License"); you may not use this file except in compliance
*  with the License.  You may obtain a copy of the License at
*
*    http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing,
*  software distributed under the License is distributed on an
*  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
*  KIND, either express or implied.  See the License for the
*  specific language governing permissions and limitations
*  under the License.
*/
package 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;
    }
}
TOP

Related Classes of org.apache.geronimo.st.v21.ui.wizards.SecurityRealmWizard$LDAPSearchPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.