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

Java tutorial

Introduction

Here is the source code for org.apache.openaz.xacml.admin.view.components.CSVPIPConfigurationComponent.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.Set;

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 org.apache.openaz.xacml.std.pip.engines.csv.CSVEngine;
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.data.util.converter.StringToIntegerConverter;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;

public class CSVPIPConfigurationComponent extends CustomComponent implements FormChangedEventNotifier {

    @AutoGenerated
    private VerticalLayout mainLayout;

    @AutoGenerated
    private TextField textFieldSkip;

    @AutoGenerated
    private TextField textFieldQuote;

    @AutoGenerated
    private TextField textFieldDelimiter;

    @AutoGenerated
    private TextField textFieldFile;

    public static String CLASSNAME = "org.apache.openaz.xacml.std.pip.engines.csv.CSVEngine";

    /*- 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(CSVPIPConfigurationComponent.class);
    private final CSVPIPConfigurationComponent 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 entityConfig 
     * @param configParamField 
     */
    public CSVPIPConfigurationComponent(EntityItem<PIPConfiguration> entityConfig) {
        buildMainLayout();
        setCompositionRoot(mainLayout);
        //
        // Save
        //
        this.entity = entityConfig;
        //
        // initialize
        //
        this.initialize();
        //
        //  Focus
        //
        this.textFieldFile.focus();
    }

    protected void initialize() {
        if (logger.isDebugEnabled()) {
            logger.debug("initializing " + this.entity.getEntity().toString());
        }
        //
        // What are our current values?
        //
        Set<PIPConfigParam> unneeded = new HashSet<PIPConfigParam>();
        for (PIPConfigParam param : this.entity.getEntity().getPipconfigParams()) {
            if (param.getParamName().equals(CSVEngine.PROP_SOURCE)) {
                this.textFieldFile.setData(param);
            } else if (param.getParamName().equals(CSVEngine.PROP_DELIMITER)) {
                this.textFieldDelimiter.setData(param);
            } else if (param.getParamName().equals(CSVEngine.PROP_QUOTE)) {
                this.textFieldQuote.setData(param);
            } else if (param.getParamName().equals(CSVEngine.PROP_SKIP)) {
                this.textFieldSkip.setData(param);
            } else {
                unneeded.add(param);
            }
        }
        if (unneeded.isEmpty() == false) {
            this.entity.getEntity().getPipconfigParams().removeAll(unneeded);
        }
        //
        //
        //
        this.initializeEntity();
        this.initializeText();
    }

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

    protected void initializeText() {
        //
        //
        //
        this.textFieldFile.setRequired(true);
        this.textFieldFile.setRequiredError("You need to specify a path to the CSV file on the server.");
        this.textFieldFile.setImmediate(true);
        this.textFieldFile.setNullRepresentation("");
        //
        //
        //
        PIPConfigParam param = (PIPConfigParam) this.textFieldFile.getData();
        if (param != null) {
            this.textFieldFile.setValue(param.getParamValue());
        }
        this.textFieldFile.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldFile.getData();
                if (param == null) {
                    param = new PIPConfigParam(CSVEngine.PROP_SOURCE);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldFile.setData(param);
                }
                param.setParamValue(self.textFieldFile.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldFile.addTextChangeListener(new TextChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void textChange(TextChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldFile.getData();
                if (param == null) {
                    param = new PIPConfigParam(CSVEngine.PROP_SOURCE);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldFile.setData(param);
                }
                param.setParamValue(self.textFieldFile.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldDelimiter.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldDelimiter.getData();
        if (param != null) {
            this.textFieldDelimiter.setValue(param.getParamValue());
        }
        this.textFieldDelimiter.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldDelimiter.getData();
                if (param == null) {
                    param = new PIPConfigParam(CSVEngine.PROP_DELIMITER);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldDelimiter.setData(param);
                }
                param.setParamValue(self.textFieldDelimiter.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldQuote.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldQuote.getData();
        if (param != null) {
            this.textFieldQuote.setValue(param.getParamValue());
        }
        this.textFieldQuote.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldQuote.getData();
                if (param == null) {
                    param = new PIPConfigParam(CSVEngine.PROP_QUOTE);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldQuote.setData(param);
                }
                param.setParamValue(self.textFieldQuote.getValue());
                self.fireFormChangedEvent();
            }
        });
        //
        //
        //
        this.textFieldSkip.setNullRepresentation("");
        param = (PIPConfigParam) this.textFieldSkip.getData();
        if (param != null) {
            this.textFieldSkip.setValue(param.getParamValue());
        }
        this.textFieldSkip.addValueChangeListener(new ValueChangeListener() {
            private static final long serialVersionUID = 1L;

            @Override
            public void valueChange(ValueChangeEvent event) {
                PIPConfigParam param = (PIPConfigParam) self.textFieldSkip.getData();
                if (param == null) {
                    param = new PIPConfigParam(CSVEngine.PROP_SKIP);
                    self.entity.getEntity().addPipconfigParam(param);
                    self.textFieldSkip.setData(param);
                }
                param.setParamValue(self.textFieldSkip.getValue());
                self.fireFormChangedEvent();
            }
        });
        this.textFieldSkip.setConverter(new StringToIntegerConverter());
    }

    public void validate() throws InvalidValueException {
        if (logger.isDebugEnabled()) {
            logger.debug("validate");
        }
        this.textFieldFile.validate();
        this.textFieldDelimiter.validate();
        this.textFieldQuote.validate();
        this.textFieldSkip.validate();
    }

    public void commit() throws SourceException, InvalidValueException {
        if (logger.isDebugEnabled()) {
            logger.debug("commit");
        }
        this.textFieldFile.commit();
        this.textFieldDelimiter.commit();
        this.textFieldQuote.commit();

        if (this.textFieldSkip.getValue() == null || this.textFieldSkip.getValue().isEmpty()) {
            this.entity.getEntity().removePipconfigParam((PIPConfigParam) this.textFieldSkip.getData());
            this.textFieldSkip.setData(null);
        }
        this.textFieldSkip.commit();
    }

    public void discard() throws SourceException {
        if (logger.isDebugEnabled()) {
            logger.debug("discard");
        }
        this.textFieldFile.discard();
        this.textFieldDelimiter.discard();
        this.textFieldQuote.discard();
        this.textFieldSkip.discard();

        this.entity.getEntity().getPipconfigParams().remove(CSVEngine.PROP_SOURCE);
        this.entity.getEntity().getPipconfigParams().remove(CSVEngine.PROP_DELIMITER);
        this.entity.getEntity().getPipconfigParams().remove(CSVEngine.PROP_QUOTE);
        this.entity.getEntity().getPipconfigParams().remove(CSVEngine.PROP_SKIP);
        this.entity.getEntity().getPipconfigParams().remove(CSVEngine.PROP_MAXSIZE);
    }

    @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");

        // textFieldFile
        textFieldFile = new TextField();
        textFieldFile.setCaption("Path to CSV File");
        textFieldFile.setImmediate(false);
        textFieldFile.setDescription("This is the path to CSV file on the PDP node.");
        textFieldFile.setWidth("-1px");
        textFieldFile.setHeight("-1px");
        textFieldFile.setInvalidAllowed(false);
        textFieldFile.setRequired(true);
        textFieldFile.setInputPrompt("Eg. \"c:\\data.csv\" \"http://foo.com/data.csv\"");
        mainLayout.addComponent(textFieldFile);
        mainLayout.setExpandRatio(textFieldFile, 1.0f);

        // textFieldDelimiter
        textFieldDelimiter = new TextField();
        textFieldDelimiter.setCaption("Delimiter");
        textFieldDelimiter.setImmediate(false);
        textFieldDelimiter
                .setDescription("Enter a separator character or string that delineates columns in each row.");
        textFieldDelimiter.setWidth("-1px");
        textFieldDelimiter.setHeight("-1px");
        textFieldDelimiter.setInputPrompt("Eg. \",\" or \"|\"");
        textFieldDelimiter.setNullSettingAllowed(true);
        mainLayout.addComponent(textFieldDelimiter);
        mainLayout.setExpandRatio(textFieldDelimiter, 1.0f);

        // textFieldQuote
        textFieldQuote = new TextField();
        textFieldQuote.setCaption("Quote");
        textFieldQuote.setImmediate(false);
        textFieldQuote.setDescription("Enter character used for quoted elements.");
        textFieldQuote.setWidth("-1px");
        textFieldQuote.setHeight("-1px");
        textFieldQuote.setInputPrompt("Eg. \" or '");
        textFieldQuote.setNullSettingAllowed(true);
        mainLayout.addComponent(textFieldQuote);

        // textFieldSkip
        textFieldSkip = new TextField();
        textFieldSkip.setCaption("Skip Lines");
        textFieldSkip.setImmediate(false);
        textFieldSkip.setDescription("Skips the number of lines at the beginning of the file.");
        textFieldSkip.setWidth("-1px");
        textFieldSkip.setHeight("-1px");
        textFieldSkip.setInputPrompt("Eg. 1 or 2");
        mainLayout.addComponent(textFieldSkip);

        return mainLayout;
    }

}