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

Java tutorial

Introduction

Here is the source code for org.apache.openaz.xacml.admin.view.components.PIPParameterComponent.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 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.jpa.PIPResolver;
import org.apache.openaz.xacml.admin.jpa.PIPResolverParam;
import org.apache.openaz.xacml.admin.view.events.FormChangedEventListener;
import org.apache.openaz.xacml.admin.view.events.FormChangedEventNotifier;
import org.apache.openaz.xacml.admin.view.windows.PIPParamEditorWindow;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItem;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Table;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.CloseEvent;
import com.vaadin.ui.Window.CloseListener;

public class PIPParameterComponent extends CustomComponent implements FormChangedEventNotifier {

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

    @AutoGenerated
    private VerticalLayout mainLayout;
    @AutoGenerated
    private Table tableParameters;
    @AutoGenerated
    private HorizontalLayout horizontalLayout_1;
    @AutoGenerated
    private Button buttonClear;
    @AutoGenerated
    private Button buttonClone;
    @AutoGenerated
    private Button buttonRemove;
    @AutoGenerated
    private Button buttonAdd;
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final Log logger = LogFactory.getLog(PIPParameterComponent.class);
    private final PIPParameterComponent self = this;
    private final Object config;
    private final BasicNotifier notifier = new BasicNotifier();

    private static final Action ADD_PARAM = new Action("Add Parameter");
    private static final Action EDIT_PARAM = new Action("Edit Parameter");
    private static final Action REMOVE_PARAM = new Action("Remove Parameter");
    private static final Action CLONE_PARAM = new Action("Clone Parameter");

    /**
     * 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.
     */
    public PIPParameterComponent(Object config) {
        buildMainLayout();
        setCompositionRoot(mainLayout);
        //
        // Save
        //
        this.config = config;
        //
        // Initialize
        //
        this.initializeTable();
        this.initializeButtons();
        //
        // Initial button setup
        //
        this.setupButtons();
    }

    protected void initializeTable() {
        //
        // Initialize GUI properties
        //
        this.tableParameters.setImmediate(true);
        this.tableParameters.setSelectable(true);
        //
        // Add in the data
        //
        if (this.config instanceof PIPConfiguration) {
            BeanItemContainer<PIPConfigParam> container = new BeanItemContainer<PIPConfigParam>(
                    PIPConfigParam.class);
            PIPConfiguration config = (PIPConfiguration) this.config;
            for (PIPConfigParam param : config.getPipconfigParams()) {
                container.addBean(param);
            }
            this.tableParameters.setContainerDataSource(container);
        } else if (this.config instanceof PIPResolver) {
            BeanItemContainer<PIPResolverParam> container = new BeanItemContainer<PIPResolverParam>(
                    PIPResolverParam.class);
            PIPResolver resolver = (PIPResolver) this.config;
            for (PIPResolverParam param : resolver.getPipresolverParams()) {
                container.addBean(param);
            }
            this.tableParameters.setContainerDataSource(container);
        } else {
            throw new IllegalArgumentException("Unsupported object");
        }
        //
        // Finish more gui initialization
        //
        this.tableParameters.setPageLength(5);//this.tableParameters.getContainerDataSource().size() + 1);
        this.tableParameters.setVisibleColumns(new Object[] { "paramName", "paramValue" });
        this.tableParameters.setColumnHeaders(new String[] { "Name", "Value" });
        this.tableParameters.setSizeFull();
        //
        // Action Handler
        //
        this.tableParameters.addActionHandler(new Handler() {
            private static final long serialVersionUID = 1L;

            @Override
            public Action[] getActions(Object target, Object sender) {
                if (target == null) {
                    return new Action[] { ADD_PARAM };
                }
                return new Action[] { EDIT_PARAM, REMOVE_PARAM, CLONE_PARAM };
            }

            @Override
            public void handleAction(Action action, Object sender, Object target) {
                if (action == ADD_PARAM) {
                    self.editParameter(null);
                    return;
                }
                if (action == EDIT_PARAM) {
                    self.editParameter(target);
                    return;
                }
                if (action == REMOVE_PARAM) {
                    self.removeParameter(target);
                    return;
                }
                if (action == CLONE_PARAM) {
                    self.cloneParameter(target);
                    return;
                }
            }
        });
        //
        // Respond to events
        //
        this.tableParameters.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                self.setupButtons();
            }
        });
        //
        // Double click
        //
        this.tableParameters.addItemClickListener(new ItemClickListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void itemClick(ItemClickEvent event) {
                if (event.isDoubleClick()) {
                    self.editParameter(event.getItemId());
                }
            }
        });
    }

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

            @Override
            public void buttonClick(ClickEvent event) {
                self.editParameter(null);
            }
        });
        this.buttonClone.addClickListener(new ClickListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void buttonClick(ClickEvent event) {
                self.cloneParameter(self.tableParameters.getValue());
            }
        });
        this.buttonRemove.addClickListener(new ClickListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void buttonClick(ClickEvent event) {
                self.removeParameter(self.tableParameters.getValue());
            }
        });
        this.buttonClear.addClickListener(new ClickListener() {
            private static final long serialVersionUID = 1L;

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

    protected void setupButtons() {
        if (this.tableParameters.getValue() != null) {
            this.buttonClone.setEnabled(true);
            this.buttonRemove.setEnabled(true);
        } else {
            this.buttonClone.setEnabled(false);
            this.buttonRemove.setEnabled(false);
        }
    }

    protected void editParameter(final Object source) {
        //
        // Make a copy
        //
        final Object target = source != null ? source
                : this.config instanceof PIPConfiguration ? new PIPConfigParam() : new PIPResolverParam();
        final PIPParamEditorWindow window = new PIPParamEditorWindow(target);
        window.setModal(true);
        window.setCaption((source == null ? "Create New Parameter" : "Edit Parameter"));
        window.center();
        window.addCloseListener(new CloseListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void windowClose(CloseEvent e) {
                //
                // Did user save?
                //
                if (window.isSaved() == false) {
                    return;
                }
                //
                // Yes - was it a brand new object?
                //
                if (source == null) {
                    //
                    // yes add it to the parent object
                    //
                    if (self.config instanceof PIPConfiguration) {
                        ((PIPConfiguration) self.config).addPipconfigParam((PIPConfigParam) target);
                    } else {
                        ((PIPResolver) self.config).addPipresolverParam((PIPResolverParam) target);
                    }
                    //
                    // add it to the table
                    //
                    Item item = self.tableParameters.addItem(target);
                    if (item == null) {
                        logger.error("Failed to add parameter: " + target);
                    } else {
                        self.tableParameters.select(target);
                    }
                } else {
                    //
                    // Copy the parameters over
                    //
                    if (source instanceof PIPConfigParam) {
                        ((PIPConfigParam) source).setParamName(((PIPConfigParam) target).getParamName());
                        ((PIPConfigParam) source).setParamValue(((PIPConfigParam) target).getParamValue());
                    } else {
                        ((PIPResolverParam) source).setParamName(((PIPResolverParam) target).getParamName());
                        ((PIPResolverParam) source).setParamValue(((PIPResolverParam) target).getParamValue());
                    }
                    //
                    // Update the table
                    //
                    self.tableParameters.refreshRowCache();
                }
            }
        });
        UI.getCurrent().addWindow(window);
    }

    protected void cloneParameter(Object target) {
        if (target == null) {
            logger.error("null target sent to clone method");
            return;
        }
        Item item;
        if (target instanceof PIPConfigParam && this.config instanceof PIPConfiguration) {
            PIPConfigParam param = new PIPConfigParam((PIPConfigParam) target);
            ((PIPConfiguration) this.config).addPipconfigParam(param);
            item = this.tableParameters.addItem(new BeanItem<PIPConfigParam>(param));
        } else if (target instanceof PIPResolverParam && this.config instanceof PIPResolver) {
            PIPResolverParam param = new PIPResolverParam((PIPResolverParam) target);
            ((PIPResolver) this.config).addPipresolverParam(param);
            item = this.tableParameters.addItem(new BeanItem<PIPResolverParam>(param));
        } else {
            throw new IllegalArgumentException("Unsupported param and config combination.");
        }
        if (item == null) {
            logger.error("Failed to add parameter to table: " + target);
        } else {
            this.tableParameters.select(target);
        }
    }

    protected void removeParameter(Object target) {
        if (target == null) {
            logger.error("null target sent to remove method");
            return;
        }
        if (this.config instanceof PIPConfiguration) {
            if (((PIPConfiguration) this.config).removePipconfigParam((PIPConfigParam) target) == null) {
                logger.error("Failed to remove parameter from pip configuration");
                return;
            }
        } else {
            if (((PIPResolver) this.config).removePipresolverParam((PIPResolverParam) target) == null) {
                logger.error("Failed to remove parameter from pip resolver");
                return;
            }
        }
        if (this.tableParameters.removeItem(target) == false) {
            logger.error("Failed to remove parameter from table");
        }
    }

    protected void clearParameters() {
        this.tableParameters.removeAllItems();
        if (this.config instanceof PIPConfiguration) {
            ((PIPConfiguration) this.config).clearConfigParams();
        } else {
            ((PIPResolver) this.config).clearParams();
        }
    }

    @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(false);
        mainLayout.setSpacing(true);

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

        // horizontalLayout_1
        horizontalLayout_1 = buildHorizontalLayout_1();
        mainLayout.addComponent(horizontalLayout_1);

        // tableParameters
        tableParameters = new Table();
        tableParameters.setCaption("Configuration Parameters");
        tableParameters.setImmediate(false);
        tableParameters.setWidth("-1px");
        tableParameters.setHeight("-1px");
        mainLayout.addComponent(tableParameters);

        return mainLayout;
    }

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

        // buttonAdd
        buttonAdd = new Button();
        buttonAdd.setCaption("Add");
        buttonAdd.setImmediate(false);
        buttonAdd.setWidth("-1px");
        buttonAdd.setHeight("-1px");
        horizontalLayout_1.addComponent(buttonAdd);

        // buttonRemove
        buttonRemove = new Button();
        buttonRemove.setCaption("Remove");
        buttonRemove.setImmediate(false);
        buttonRemove.setWidth("-1px");
        buttonRemove.setHeight("-1px");
        horizontalLayout_1.addComponent(buttonRemove);

        // buttonClone
        buttonClone = new Button();
        buttonClone.setCaption("Clone");
        buttonClone.setImmediate(false);
        buttonClone.setWidth("-1px");
        buttonClone.setHeight("-1px");
        horizontalLayout_1.addComponent(buttonClone);

        // buttonClear
        buttonClear = new Button();
        buttonClear.setCaption("Clear All");
        buttonClear.setImmediate(false);
        buttonClear.setWidth("-1px");
        buttonClear.setHeight("-1px");
        horizontalLayout_1.addComponent(buttonClear);

        return horizontalLayout_1;
    }
}