Java tutorial
/* * 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.windows; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeSelectorType; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.openaz.xacml.admin.jpa.Attribute; import org.apache.openaz.xacml.admin.jpa.Datatype; import org.apache.openaz.xacml.admin.util.JPAUtils; import org.apache.openaz.xacml.admin.view.components.AttributeDictionarySelectorComponent; import org.apache.openaz.xacml.admin.view.components.AttributeSimpleCreatorComponent; import org.apache.openaz.xacml.admin.view.components.AttributeStandardSelectorComponent; import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventListener; import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventNotifier; 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.ShortcutAction.KeyCode; 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.CheckBox; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; public class AttributeSelectionWindow extends Window implements AttributeChangedEventListener { /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ @AutoGenerated private VerticalLayout mainLayout; @AutoGenerated private Button buttonSave; @AutoGenerated private HorizontalLayout horizontalLayoutAttribute; @AutoGenerated private HorizontalLayout horizontalLayout_1; @AutoGenerated private VerticalLayout verticalLayout_2; @AutoGenerated private CheckBox checkBoxMustBePresent; @AutoGenerated private TextField textFieldIssuer; @AutoGenerated private OptionGroup optionGroupAttribute; /** * */ private static final long serialVersionUID = 1L; private static Log logger = LogFactory.getLog(AttributeSelectionWindow.class); private final AttributeSelectionWindow self = this; private final Datatype datatype; private final Attribute defaultAttribute; private AttributeChangedEventNotifier currentComponent = null; private Attribute attribute = null; private boolean isSaved = false; public static final String ATTRIBUTE_OPTION_DICTIONARY = "Use Attribute From Dictionary"; public static final String ATTRIBUTE_OPTION_STANDARD = "Use A Standard Attribute"; public static final String ATTRIBUTE_OPTION_INPUT = "Input A New Attribute"; public static final String[] ATTRIBUTE_OPTIONS = new String[] { ATTRIBUTE_OPTION_DICTIONARY, ATTRIBUTE_OPTION_STANDARD, ATTRIBUTE_OPTION_INPUT }; /** * 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 AttributeSelectionWindow(Datatype datatype, Object defaultAttribute) { buildMainLayout(); //setCompositionRoot(mainLayout); setContent(mainLayout); // // Save data // this.datatype = datatype; if (defaultAttribute == null) { this.defaultAttribute = null; } else { // // Given a default attribute // Attribute tempAttribute; if (defaultAttribute instanceof AttributeDesignatorType) { tempAttribute = JPAUtils.createAttribute((AttributeDesignatorType) defaultAttribute); } else if (defaultAttribute instanceof AttributeSelectorType) { tempAttribute = JPAUtils.createAttribute((AttributeSelectorType) defaultAttribute); } else { this.defaultAttribute = null; throw new IllegalArgumentException( "Selection window only works with designator or selector objects."); } // // See if the attribute exists in our dictionary // Attribute dictionaryAttribute = JPAUtils.findAttribute(tempAttribute); if (dictionaryAttribute != null) { this.defaultAttribute = dictionaryAttribute; } else { this.defaultAttribute = tempAttribute; } } // // Close shortcut // this.setCloseShortcut(KeyCode.ESCAPE); // // Initialize GUI // this.initializeOption(); this.initializeButtons(); this.initializeAttribute(); // // Setup attribute // this.resetAttributeOption(); // // Focus // } protected void initializeOption() { // // Setup datasource and GUI properties // this.optionGroupAttribute.setImmediate(true); this.optionGroupAttribute.addItem(ATTRIBUTE_OPTION_DICTIONARY); this.optionGroupAttribute.addItem(ATTRIBUTE_OPTION_STANDARD); this.optionGroupAttribute.addItem(ATTRIBUTE_OPTION_INPUT); // // Respond to events // this.optionGroupAttribute.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.resetAttributeOption(); } }); } protected void initializeButtons() { this.buttonSave.setClickShortcut(KeyCode.ENTER); this.buttonSave.addClickListener(new ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { try { // // Commit everything?? // self.textFieldIssuer.commit(); self.checkBoxMustBePresent.commit(); self.currentComponent.commit(); // // Save to the attribute // String issuer = self.textFieldIssuer.getValue(); if (issuer == null || issuer.length() == 0) { self.attribute.setIssuer(null); } else { self.attribute.setIssuer(issuer); } self.attribute.setMustBePresent(self.checkBoxMustBePresent.getValue()); // // Mark as saved // self.isSaved = true; // // Close the window // self.close(); } catch (SourceException | InvalidValueException e) { //NOPMD // // Vaadin displays the error // } } }); } protected void initializeAttribute() { // // Are we editing something? // if (this.defaultAttribute == null) { // // No, this is a new attribute being created // this.optionGroupAttribute.select(ATTRIBUTE_OPTION_STANDARD); return; } // // Yes, is it in our dictionary? // Attribute attribute = JPAUtils.findAttribute(this.defaultAttribute); if (attribute != null) { // // Yes its in our dictionary // this.attribute = attribute; this.optionGroupAttribute.select(ATTRIBUTE_OPTION_DICTIONARY); return; } // // Is it a standard attribute? // attribute = JPAUtils.isStandardAttribute(this.defaultAttribute); if (attribute == null) { // // No, start editing via custom input attribute // this.attribute = this.defaultAttribute; this.optionGroupAttribute.select(ATTRIBUTE_OPTION_INPUT); return; } // // Yes - its a standard attribute // this.attribute = attribute; this.optionGroupAttribute.select(ATTRIBUTE_OPTION_STANDARD); } protected void resetAttributeOption() { // // Remove GUI components from layout // this.horizontalLayoutAttribute.removeAllComponents(); this.currentComponent = null; // // Grab our currently selected option value // Object value = self.optionGroupAttribute.getValue(); // // What is it set to? // if (value.toString().equals(ATTRIBUTE_OPTION_DICTIONARY)) { this.currentComponent = new AttributeDictionarySelectorComponent(this.datatype, this.defaultAttribute); } else if (value.toString().equals(ATTRIBUTE_OPTION_STANDARD)) { this.currentComponent = new AttributeStandardSelectorComponent(this.datatype, this.defaultAttribute); } else if (value.toString().equals(ATTRIBUTE_OPTION_INPUT)) { this.currentComponent = new AttributeSimpleCreatorComponent(this.datatype, this.defaultAttribute); } else { logger.error("Unknown option" + value); return; } this.currentComponent.addListener(this); this.horizontalLayoutAttribute.addComponent((CustomComponent) this.currentComponent); this.currentComponent.fireAttributeChanged(this.currentComponent.getAttribute()); } @Override public void attributeChanged(Attribute attribute) { if (logger.isDebugEnabled()) { logger.debug("attributeChanged: " + attribute); } this.attribute = attribute; if (attribute == null) { this.buttonSave.setEnabled(false); } else { this.buttonSave.setEnabled(true); } } public boolean isSaved() { return this.isSaved; } public Attribute getAttribute() { return this.attribute; } @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"); // horizontalLayout_1 horizontalLayout_1 = buildHorizontalLayout_1(); mainLayout.addComponent(horizontalLayout_1); // horizontalLayoutAttribute horizontalLayoutAttribute = new HorizontalLayout(); horizontalLayoutAttribute.setImmediate(false); horizontalLayoutAttribute.setWidth("-1px"); horizontalLayoutAttribute.setHeight("-1px"); horizontalLayoutAttribute.setMargin(false); mainLayout.addComponent(horizontalLayoutAttribute); mainLayout.setExpandRatio(horizontalLayoutAttribute, 1.0f); // buttonSave buttonSave = new Button(); buttonSave.setCaption("Select"); buttonSave.setImmediate(true); buttonSave.setWidth("-1px"); buttonSave.setHeight("-1px"); mainLayout.addComponent(buttonSave); mainLayout.setComponentAlignment(buttonSave, new Alignment(48)); 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); // optionGroupAttribute optionGroupAttribute = new OptionGroup(); optionGroupAttribute.setCaption("Attribute Source"); optionGroupAttribute.setImmediate(false); optionGroupAttribute.setWidth("-1px"); optionGroupAttribute.setHeight("-1px"); optionGroupAttribute.setInvalidAllowed(false); horizontalLayout_1.addComponent(optionGroupAttribute); // verticalLayout_2 verticalLayout_2 = buildVerticalLayout_2(); horizontalLayout_1.addComponent(verticalLayout_2); return horizontalLayout_1; } @AutoGenerated private VerticalLayout buildVerticalLayout_2() { // common part: create layout verticalLayout_2 = new VerticalLayout(); verticalLayout_2.setImmediate(false); verticalLayout_2.setWidth("-1px"); verticalLayout_2.setHeight("-1px"); verticalLayout_2.setMargin(true); verticalLayout_2.setSpacing(true); // textFieldIssuer textFieldIssuer = new TextField(); textFieldIssuer.setCaption("Issuer"); textFieldIssuer.setImmediate(false); textFieldIssuer.setWidth("-1px"); textFieldIssuer.setHeight("-1px"); verticalLayout_2.addComponent(textFieldIssuer); // checkBoxMustBePresent checkBoxMustBePresent = new CheckBox(); checkBoxMustBePresent.setCaption("Attribute Must Be Present"); checkBoxMustBePresent.setImmediate(false); checkBoxMustBePresent.setWidth("-1px"); checkBoxMustBePresent.setHeight("-1px"); verticalLayout_2.addComponent(checkBoxMustBePresent); return verticalLayout_2; } }