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.components; import org.apache.openaz.xacml.admin.XacmlAdminUI; import org.apache.openaz.xacml.admin.jpa.Attribute; import org.apache.openaz.xacml.admin.jpa.Category; import org.apache.openaz.xacml.admin.jpa.Datatype; import org.apache.openaz.xacml.admin.util.JPAUtils; import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventListener; import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventNotifier; import org.apache.openaz.xacml.api.XACML3; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.addon.jpacontainer.provider.CachingLocalEntityProvider; import com.vaadin.annotations.AutoGenerated; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; public class AttributeSimpleCreatorComponent extends CustomComponent implements AttributeChangedEventNotifier { /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ @AutoGenerated private VerticalLayout mainLayout; @AutoGenerated private HorizontalLayout horizontalLayout_1; @AutoGenerated private Table tableDatatype; @AutoGenerated private Table tableCategory; @AutoGenerated private TextField textFieldContextPath; @AutoGenerated private TextField textFieldAttributeId; /** * */ private static final long serialVersionUID = 1L; private final AttributeSimpleCreatorComponent self = this; private final Datatype datatype; private final Attribute attribute; private final BasicNotifier notifier = new BasicNotifier(); private static final JPAContainer<Category> categories = new JPAContainer<Category>(Category.class); private static final JPAContainer<Datatype> datatypes = new JPAContainer<Datatype>(Datatype.class); static { categories.setEntityProvider(new CachingLocalEntityProvider<Category>(Category.class, ((XacmlAdminUI) UI.getCurrent()).getEntityManager())); datatypes.setEntityProvider(new CachingLocalEntityProvider<Datatype>(Datatype.class, ((XacmlAdminUI) UI.getCurrent()).getEntityManager())); categories.sort(new String[] { "xacmlId" }, new boolean[] { true }); datatypes.sort(new String[] { "xacmlId" }, new boolean[] { true }); } /** * 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 AttributeSimpleCreatorComponent(Datatype datatype, Attribute initialAttribute) { buildMainLayout(); setCompositionRoot(mainLayout); // // Save // this.datatype = datatype; this.attribute = initialAttribute; // // Initialize GUI // this.initializeCategories(); this.initializeDatatypes(); this.initializeAttributeId(); // // Focus // this.textFieldAttributeId.focus(); } private void initializeCategories() { // // Remove any filters // AttributeSimpleCreatorComponent.categories.removeAllContainerFilters(); // // Initialize data source & GUI properties // this.tableCategory.setContainerDataSource(AttributeSimpleCreatorComponent.categories); this.tableCategory.setVisibleColumns(new Object[] { "xacmlId" }); this.tableCategory.setColumnHeaders(new String[] { "XACML ID" }); this.tableCategory.setImmediate(true); this.tableCategory.setNullSelectionAllowed(false); this.tableCategory.setPageLength(10); this.tableCategory.setSelectable(true); // // Default selection // Category defaultCategory; if (this.attribute == null || this.attribute.getCategoryBean() == null || this.attribute.getCategoryBean().getIdentifer() == null) { defaultCategory = JPAUtils.findCategory(XACML3.ID_SUBJECT_CATEGORY_ACCESS_SUBJECT); assert defaultCategory != null; } else { defaultCategory = JPAUtils.findCategory(this.attribute.getCategoryBean().getIdentifer()); } if (defaultCategory != null) { this.tableCategory.select(defaultCategory.getId()); } // // Respond to changes // this.tableCategory.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.fireAttributeChanged(self.getAttribute()); } }); } private void initializeDatatypes() { // // Remove any filters // AttributeSimpleCreatorComponent.datatypes.removeAllContainerFilters(); // // Initialize data source & GUI properties // this.tableDatatype.setContainerDataSource(AttributeSimpleCreatorComponent.datatypes); this.tableDatatype.setVisibleColumns(new Object[] { "xacmlId", "shortName" }); this.tableDatatype.setColumnHeaders(new String[] { "Data Type ID", "Data Type" }); this.tableDatatype.setNullSelectionAllowed(false); this.tableDatatype.setImmediate(true); this.tableDatatype.setPageLength(10); // // Are we restricted to a certain datatype? // if (this.datatype != null) { // // Datatype restricted // this.tableDatatype.select(this.datatype.getId()); this.tableDatatype.setEnabled(false); return; } this.tableDatatype.setSelectable(true); // // Do we have a default value? // Datatype defaultDatatype; if (this.attribute != null && this.attribute.getDatatypeBean() != null) { defaultDatatype = this.attribute.getDatatypeBean(); } else { defaultDatatype = JPAUtils.findDatatype(XACML3.ID_DATATYPE_STRING); } if (defaultDatatype != null) { this.tableDatatype.select(defaultDatatype.getId()); } // // Respond to changes // this.tableDatatype.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.fireAttributeChanged(self.getAttribute()); } }); } private void initializeAttributeId() { this.textFieldAttributeId.setImmediate(true); this.textFieldAttributeId.setNullRepresentation(""); if (this.attribute == null) { this.textFieldAttributeId.setValue(XacmlAdminUI.getDomain()); } else { // // Set the ID // this.textFieldAttributeId.setValue(this.attribute.getXacmlId()); // // Is it an attribute selector? // if (this.attribute.isDesignator()) { this.textFieldContextPath.setVisible(false); this.textFieldContextPath.setRequired(false); } else { this.textFieldAttributeId.setCaption("Context Selector Id"); this.textFieldAttributeId.setRequired(false); this.textFieldContextPath.setVisible(true); this.textFieldContextPath.setValue(this.attribute.getSelectorPath()); this.textFieldContextPath.setRequired(true); this.textFieldContextPath.setRequiredError("You must have a context path for a selector."); this.textFieldContextPath.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.fireAttributeChanged(self.getAttribute()); } }); } } // // Respond to changes // this.textFieldAttributeId.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.fireAttributeChanged(self.getAttribute()); } }); } @Override public Attribute getAttribute() { try { this.textFieldAttributeId.commit(); } catch (Exception e) { //NOPMD // TODO - Handle, Log or NOPMD // TODO - Will vaadin display error? } Attribute attribute = new Attribute(this.textFieldAttributeId.getValue()); attribute.setSelectorPath(this.textFieldContextPath.getValue()); Object categoryId = this.tableCategory.getValue(); if (categoryId != null) { attribute.setCategoryBean(AttributeSimpleCreatorComponent.categories.getItem(categoryId).getEntity()); } if (this.datatype != null) { attribute.setDatatypeBean(this.datatype); } else { Object datatypeId = this.tableDatatype.getValue(); if (datatypeId == null) { return null; } attribute.setDatatypeBean(AttributeSimpleCreatorComponent.datatypes.getItem(datatypeId).getEntity()); } return attribute; } @Override public boolean addListener(AttributeChangedEventListener listener) { return this.notifier.addListener(listener); } @Override public boolean removeListener(AttributeChangedEventListener listener) { return this.notifier.removeListener(listener); } @Override public void commit() { try { this.textFieldAttributeId.commit(); this.textFieldContextPath.commit(); this.tableCategory.commit(); this.tableDatatype.commit(); } catch (Exception e) { //NOPMD // TODO - Handle, Log or NOPMD // TODO - Will vaadin display error? } } @Override public void fireAttributeChanged(Attribute attribute) { this.notifier.fireAttributeChanged(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"); // textFieldAttributeId textFieldAttributeId = new TextField(); textFieldAttributeId.setCaption("Attribute Id"); textFieldAttributeId.setImmediate(false); textFieldAttributeId.setWidth("100.0%"); textFieldAttributeId.setHeight("-1px"); textFieldAttributeId.setInvalidAllowed(false); textFieldAttributeId.setRequired(true); mainLayout.addComponent(textFieldAttributeId); mainLayout.setExpandRatio(textFieldAttributeId, 1.0f); // textFieldContextPath textFieldContextPath = new TextField(); textFieldContextPath.setCaption("Context Path"); textFieldContextPath.setImmediate(false); textFieldContextPath.setDescription("The Selector's Context Path."); textFieldContextPath.setWidth("100.0%"); textFieldContextPath.setHeight("-1px"); textFieldContextPath.setInputPrompt("eg. md:record/md:patient/md:patient-number/text()"); mainLayout.addComponent(textFieldContextPath); mainLayout.setExpandRatio(textFieldContextPath, 1.0f); // horizontalLayout_1 horizontalLayout_1 = buildHorizontalLayout_1(); mainLayout.addComponent(horizontalLayout_1); mainLayout.setExpandRatio(horizontalLayout_1, 1.0f); 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); // tableCategory tableCategory = new Table(); tableCategory.setCaption("Choose Category"); tableCategory.setImmediate(false); tableCategory.setWidth("-1px"); tableCategory.setHeight("-1px"); tableCategory.setInvalidAllowed(false); tableCategory.setRequired(true); horizontalLayout_1.addComponent(tableCategory); // tableDatatype tableDatatype = new Table(); tableDatatype.setCaption("Choose Data Type"); tableDatatype.setImmediate(false); tableDatatype.setWidth("-1px"); tableDatatype.setHeight("-1px"); tableDatatype.setInvalidAllowed(false); tableDatatype.setRequired(true); horizontalLayout_1.addComponent(tableDatatype); return horizontalLayout_1; } }