org.apache.openaz.xacml.admin.view.components.LDAPPIPConfigurationComponent.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.openaz.xacml.admin.view.components.LDAPPIPConfigurationComponent.java

Source

/*
 *  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.openaz.xacml.admin.view.components;

import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.apache.openaz.xacml.admin.jpa.PIPConfigParam;
import org.apache.openaz.xacml.admin.jpa.PIPConfiguration;
import org.apache.openaz.xacml.admin.view.events.FormChangedEventListener;
import org.apache.openaz.xacml.admin.view.events.FormChangedEventNotifier;
import com.vaadin.addon.jpacontainer.EntityItem;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Buffered.SourceException;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.Validator.InvalidValueException;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.server.Page;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Notification;
import com.vaadin.ui.Notification.Type;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

public class LDAPPIPConfigurationComponent extends CustomComponent implements FormChangedEventNotifier {

    @AutoGenerated
    private VerticalLayout mainLayout;

    @AutoGenerated
    private Button buttonTest;

    @AutoGenerated
    private TextField textFieldScope;

    @AutoGenerated
    private TextField textFieldCredentials;

    @AutoGenerated
    private TextField textFieldPrincipal;

    @AutoGenerated
    private ComboBox comboBoxAuthentication;

    @AutoGenerated
    private TextField textFieldProviderURL;

    @AutoGenerated
    private TextField textFieldFactory;

    public static String CLASSNAME = "org.apache.openaz.xacml.std.pip.engines.ldap.LDAPEngine";

    public static String LDAP_CONTEXT = Context.INITIAL_CONTEXT_FACTORY;
    public static String LDAP_URL = Context.PROVIDER_URL;
    public static String LDAP_AUTH = "authentication";
    public static String LDAP_PRINCIPAL = "principal";
    public static String LDAP_CREDENTIALS = "credentials";
    public static String LDAP_SCOPE = "scope";

    public static String LDAP_DEFAULT_CONTEXT = "com.sun.jndi.ldap.LdapCtxFactory";

    public static String LDAP_AUTH_ANONYMOUS = "anonymous";
    public static String LDAP_AUTH_SIMPLE = "simple";
    public static String LDAP_AUTH_SASL = "SASL"; //????

    /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final Log logger = LogFactory.getLog(LDAPPIPConfigurationComponent.class);
    private final LDAPPIPConfigurationComponent self = this;
    private final BasicNotifier notifier = new BasicNotifier();
    private final EntityItem<PIPConfiguration> entity;

    /**
     * The constructor should first build the main layout, set the
     * composition root and then do any custom initialization.
     *
     * The constructor will not be automatically regenerated by the
     * visual editor.
     * @param configParamField 
     */
    public LDAPPIPConfigurationComponent(EntityItem<PIPConfiguration> entity) {
        buildMainLayout();
        setCompositionRoot(mainLayout);
        //
        // Save
        //
        this.entity = entity;
        //
        // Initialize
        //
        this.initialize();
    }

    protected void initialize() {
        if (logger.isDebugEnabled()) {
            logger.debug("initializing " + this.entity.getEntity().toString());
        }
        //
        // Iterate any existing values
        //
        Set<PIPConfigParam> unneeded = new HashSet<PIPConfigParam>();
        for (PIPConfigParam param : this.entity.getEntity().getPipconfigParams()) {
            if (param.getParamName().equals(LDAP_CONTEXT)) {
                this.textFieldFactory.setData(param);
            } else if (param.getParamName().equals(LDAP_URL)) {
                this.textFieldProviderURL.setData(param);
            } else if (param.getParamName().equals(LDAP_AUTH)) {
                this.comboBoxAuthentication.setData(param);
            } else if (param.getParamName().equals(LDAP_PRINCIPAL)) {
                this.textFieldPrincipal.setData(param);
            } else if (param.getParamName().equals(LDAP_CREDENTIALS)) {
                this.textFieldCredentials.setData(param);
            } else if (param.getParamName().equals(LDAP_SCOPE)) {
                this.textFieldScope.setData(param);
            } else {
                unneeded.add(param);
            }
        }
        //
        // Get rid of unneeded parameters
        //
        if (unneeded.isEmpty() == false) {
            this.entity.getEntity().getPipconfigParams().removeAll(unneeded);
        }
        //
        // Initialize GUI
        //
        this.initializeEntity();
        this.initializeCombo();
        this.initializeText();
        this.initializeButtons();
    }

    protected void initializeEntity() {
        //
        // Initialize the entity
        //
        this.entity.getEntity().setClassname(CLASSNAME);
        this.entity.getEntity().setRequiresResolvers(true);
    }

    protected void initializeCombo() {
        //
        // GUI properties
        //
        this.comboBoxAuthentication.setImmediate(true);
        this.comboBoxAuthentication.setNullSelectionAllowed(false);
        this.comboBoxAuthentication.setRequired(true);
        this.comboBoxAuthentication.setRequiredError("You must select an authentication mechanism");
        //
        // Initial set of items
        //
        this.comboBoxAuthentication.addItem(LDAP_AUTH_ANONYMOUS);
        this.comboBoxAuthentication.addItem(LDAP_AUTH_SIMPLE);
        this.comboBoxAuthentication.addItem(LDAP_AUTH_SASL);
        //
        // Ensure the authentication combo is selected to something.
        //
        PIPConfigParam param = (PIPConfigParam) this.comboBoxAuthentication.getData();
        if (param == null) {
            param = new PIPConfigParam(LDAP_AUTH, LDAP_AUTH_ANONYMOUS);
            this.entity.getEntity().addPipconfigParam(param);
            this.comboBoxAuthentication.setData(param);
            this.comboBoxAuthentication.select(param.getParamValue());
        } else {
            //
            // Is this custom?
            //
            this.comboBoxAuthentication.select(param.getParamValue());
            if (this.comboBoxAuthentication.getValue().equals(param.getParamValue()) == false) {
                this.comboBoxAuthentication.addItem(param.getParamValue());
                this.comboBoxAuthentication.select(param.getParamValue());
            }
        }
        //
        // Respond to events
        //
        this.comboBoxAuthentication.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.comboBoxAuthentication.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_AUTH, self.comboBoxAuthentication.getValue().toString());
                    self.entity.getEntity().addPipconfigParam(param);
                    self.comboBoxAuthentication.setData(param);
                }
                param.setParamValue(self.comboBoxAuthentication.getValue().toString());
                self.fireFormChangedEvent();
            }
        });
    }

    protected void initializeText() {
        //
        //
        //
        this.textFieldFactory.setImmediate(true);
        this.textFieldFactory.setNullRepresentation("");
        //
        // We can initialize this if there is no value
        //
        PIPConfigParam param = (PIPConfigParam) this.textFieldFactory.getData();
        if (param == null) {
            param = new PIPConfigParam(LDAP_CONTEXT, LDAP_DEFAULT_CONTEXT);
            this.entity.getEntity().addPipconfigParam(param);
            this.textFieldFactory.setData(param);
        }
        this.textFieldFactory.setValue(param.getParamValue());
        this.textFieldFactory.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldFactory.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_CONTEXT);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldFactory.setData(param);
                }
                param.setParamValue(self.textFieldFactory.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldFactory.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldFactory.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_CONTEXT);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldFactory.setData(param);
                }
                param.setParamValue(self.textFieldFactory.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldProviderURL.setImmediate(true);
        this.textFieldProviderURL.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldProviderURL.getData();
        if (param != null) {
            this.textFieldProviderURL.setValue(param.getParamValue());
        }
        this.textFieldProviderURL.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldProviderURL.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_URL);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldProviderURL.setData(param);
                }
                param.setParamValue(self.textFieldProviderURL.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldProviderURL.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldProviderURL.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_URL);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldProviderURL.setData(param);
                }
                param.setParamValue(self.textFieldProviderURL.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldPrincipal.setImmediate(true);
        this.textFieldPrincipal.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldPrincipal.getData();
        if (param != null) {
            this.textFieldPrincipal.setValue(param.getParamValue());
        }
        this.textFieldPrincipal.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldPrincipal.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_PRINCIPAL);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldPrincipal.setData(param);
                }
                param.setParamValue(self.textFieldPrincipal.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldPrincipal.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldPrincipal.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_PRINCIPAL);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldPrincipal.setData(param);
                }
                param.setParamValue(self.textFieldPrincipal.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldCredentials.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldCredentials.getData();
        if (param != null) {
            this.textFieldCredentials.setValue(param.getParamValue());
        }
        this.textFieldCredentials.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldCredentials.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_CREDENTIALS);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldCredentials.setData(param);
                }
                param.setParamValue(self.textFieldCredentials.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldCredentials.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldCredentials.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_CREDENTIALS);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldCredentials.setData(param);
                }
                param.setParamValue(self.textFieldCredentials.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldScope.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldScope.getData();
        if (param == null) {
            param = new PIPConfigParam(LDAP_SCOPE, "subtree");
            this.entity.getEntity().addPipconfigParam(param);
            this.textFieldScope.setData(param);
        }
        this.textFieldScope.setValue(param.getParamValue());
        this.textFieldScope.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldScope.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_SCOPE);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldScope.setData(param);
                }
                param.setParamValue(self.textFieldScope.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldScope.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldScope.getData();
                if (param == null) {
                    param = new PIPConfigParam(LDAP_SCOPE);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldScope.setData(param);
                }
                param.setParamValue(self.textFieldScope.getValue());
                self.fireFormChangedEvent();
            }
        });
    }

    protected void initializeButtons() {
        this.buttonTest.setImmediate(true);
        this.buttonTest.addClickListener(new ClickListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void buttonClick(ClickEvent event) {
                self.testLDAPConnection();
            }
        });
    }

    protected void testLDAPConnection() {
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, this.textFieldFactory.getValue());
        env.put(Context.PROVIDER_URL, this.textFieldProviderURL.getValue());
        env.put(Context.SECURITY_PRINCIPAL, this.textFieldPrincipal.getValue());
        env.put(Context.SECURITY_CREDENTIALS, this.textFieldCredentials.getValue());

        String auth = this.comboBoxAuthentication.getValue().toString();
        env.put(Context.SECURITY_AUTHENTICATION, auth);
        //
        // Do we need to do anything?
        //
        /*
        if (auth.equals(LDAP_AUTH_ANONYMOUS)) {
               
        } else if (auth.equals(LDAP_AUTH_SIMPLE)) {
               
        } else if (auth.equals(LDAP_AUTH_SASL)) {
               
        }
        */

        DirContext ctx = null;
        try {
            ctx = new InitialDirContext(env);
            new Notification("Success!", "Connection Established!", Type.HUMANIZED_MESSAGE, true)
                    .show(Page.getCurrent());
        } catch (NamingException e) {
            logger.error(e);
            new Notification("Connection Failed", "<br/>" + e.getLocalizedMessage(), Type.ERROR_MESSAGE, true)
                    .show(Page.getCurrent());
        } finally {
            try {
                if (ctx != null) {
                    ctx.close();
                }
            } catch (NamingException idontcare) { //NOPMD
            }
        }
    }

    public void validate() throws InvalidValueException {
        if (logger.isDebugEnabled()) {
            logger.debug("validate");
        }
        this.comboBoxAuthentication.validate();
        this.textFieldFactory.validate();
        this.textFieldProviderURL.validate();
        this.textFieldPrincipal.validate();
        this.textFieldCredentials.validate();
        this.textFieldScope.validate();
    }

    public void commit() throws SourceException, InvalidValueException {
        if (logger.isDebugEnabled()) {
            logger.debug("commit");
        }
        this.comboBoxAuthentication.commit();
        this.textFieldFactory.commit();
        this.textFieldProviderURL.commit();
        this.textFieldPrincipal.commit();
        this.textFieldCredentials.commit();
        this.textFieldScope.commit();
    }

    public void discard() throws SourceException {
        if (logger.isDebugEnabled()) {
            logger.debug("discard");
        }

        this.textFieldFactory.discard();
        this.textFieldProviderURL.discard();
        this.textFieldPrincipal.discard();
        this.textFieldCredentials.discard();
        this.textFieldScope.discard();
        /*
        this.entity.getEntity().getPipconfigParams().remove(LDAP_CONTEXT);
        this.entity.getEntity().getPipconfigParams().remove(LDAP_URL);
        this.entity.getEntity().getPipconfigParams().remove(LDAP_AUTH);
        this.entity.getEntity().getPipconfigParams().remove(LDAP_PRINCIPAL);
        this.entity.getEntity().getPipconfigParams().remove(LDAP_CREDENTIALS);
        this.entity.getEntity().getPipconfigParams().remove(LDAP_SCOPE);
        */
    }

    @Override
    public boolean addListener(FormChangedEventListener listener) {
        return this.notifier.addListener(listener);
    }

    @Override
    public boolean removeListener(FormChangedEventListener listener) {
        return this.notifier.removeListener(listener);
    }

    @Override
    public void fireFormChangedEvent() {
        this.notifier.fireFormChangedEvent();
    }

    @AutoGenerated
    private VerticalLayout buildMainLayout() {
        // common part: create layout
        mainLayout = new VerticalLayout();
        mainLayout.setImmediate(false);
        mainLayout.setWidth("-1px");
        mainLayout.setHeight("-1px");
        mainLayout.setMargin(true);
        mainLayout.setSpacing(true);

        // top-level component properties
        setWidth("-1px");
        setHeight("-1px");

        // textFieldFactory
        textFieldFactory = new TextField();
        textFieldFactory.setCaption("Initial Context Factory");
        textFieldFactory.setImmediate(false);
        textFieldFactory.setWidth("-1px");
        textFieldFactory.setHeight("-1px");
        textFieldFactory.setInvalidAllowed(false);
        textFieldFactory.setRequired(true);
        textFieldFactory.setInputPrompt("com.sun.jndi.ldap.LdapCtxFactory");
        mainLayout.addComponent(textFieldFactory);
        mainLayout.setExpandRatio(textFieldFactory, 1.0f);

        // textFieldProviderURL
        textFieldProviderURL = new TextField();
        textFieldProviderURL.setCaption("Provider URL");
        textFieldProviderURL.setImmediate(false);
        textFieldProviderURL.setWidth("-1px");
        textFieldProviderURL.setHeight("-1px");
        textFieldProviderURL.setInvalidAllowed(false);
        textFieldProviderURL.setRequired(true);
        textFieldProviderURL.setInputPrompt("Eg. ldap://localhost:389/o=JNDITutorial");
        mainLayout.addComponent(textFieldProviderURL);
        mainLayout.setExpandRatio(textFieldProviderURL, 1.0f);

        // comboBoxAuthentication
        comboBoxAuthentication = new ComboBox();
        comboBoxAuthentication.setCaption("Authentication");
        comboBoxAuthentication.setImmediate(false);
        comboBoxAuthentication.setWidth("-1px");
        comboBoxAuthentication.setHeight("-1px");
        comboBoxAuthentication.setRequired(true);
        mainLayout.addComponent(comboBoxAuthentication);
        mainLayout.setExpandRatio(comboBoxAuthentication, 1.0f);

        // textFieldPrincipal
        textFieldPrincipal = new TextField();
        textFieldPrincipal.setCaption("Principal");
        textFieldPrincipal.setImmediate(false);
        textFieldPrincipal.setWidth("-1px");
        textFieldPrincipal.setHeight("-1px");
        textFieldPrincipal.setNullSettingAllowed(true);
        mainLayout.addComponent(textFieldPrincipal);
        mainLayout.setExpandRatio(textFieldPrincipal, 1.0f);

        // textFieldCredentials
        textFieldCredentials = new TextField();
        textFieldCredentials.setCaption("Credentials");
        textFieldCredentials.setImmediate(false);
        textFieldCredentials.setWidth("-1px");
        textFieldCredentials.setHeight("-1px");
        textFieldCredentials.setNullSettingAllowed(true);
        mainLayout.addComponent(textFieldCredentials);
        mainLayout.setExpandRatio(textFieldCredentials, 1.0f);

        // textFieldScope
        textFieldScope = new TextField();
        textFieldScope.setCaption("Scope");
        textFieldScope.setImmediate(false);
        textFieldScope.setWidth("-1px");
        textFieldScope.setHeight("-1px");
        textFieldScope.setInvalidAllowed(false);
        textFieldScope.setRequired(true);
        textFieldScope.setInputPrompt("Eg. subtree");
        mainLayout.addComponent(textFieldScope);

        // buttonTest
        buttonTest = new Button();
        buttonTest.setCaption("Test Connection");
        buttonTest.setImmediate(true);
        buttonTest.setWidth("-1px");
        buttonTest.setHeight("-1px");
        mainLayout.addComponent(buttonTest);
        mainLayout.setComponentAlignment(buttonTest, new Alignment(48));

        return mainLayout;
    }
}