| /* |
| * 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.components.AttributeDictionary; |
| 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.view.events.AttributeChangedEventListener; |
| import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventNotifier; |
| 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.data.util.filter.Compare; |
| import com.vaadin.ui.AbstractSelect.ItemCaptionMode; |
| 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.HorizontalLayout; |
| import com.vaadin.ui.ListSelect; |
| import com.vaadin.ui.UI; |
| import com.vaadin.ui.VerticalLayout; |
| |
| public class AttributeDictionarySelectorComponent extends CustomComponent implements AttributeChangedEventNotifier { |
| |
| /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ |
| |
| @AutoGenerated |
| private VerticalLayout mainLayout; |
| @AutoGenerated |
| private ListSelect listSelectAttribute; |
| @AutoGenerated |
| private HorizontalLayout horizontalLayout_2; |
| @AutoGenerated |
| private Button buttonNewAttribute; |
| @AutoGenerated |
| private ComboBox comboBoxCategoryFilter; |
| /** |
| * |
| */ |
| private static final long serialVersionUID = 1L; |
| private final AttributeDictionarySelectorComponent self = this; |
| private final Datatype datatype; |
| private final Attribute initialAttribute; |
| private final BasicNotifier notifier = new BasicNotifier(); |
| private static final JPAContainer<Category> categories = new JPAContainer<Category>(Category.class); |
| private static final JPAContainer<Attribute> attributes = new JPAContainer<Attribute>(Attribute.class); |
| static { |
| attributes.setEntityProvider(new CachingLocalEntityProvider<Attribute>(Attribute.class, ((XacmlAdminUI)UI.getCurrent()).getEntityManager())); |
| categories.setEntityProvider(new CachingLocalEntityProvider<Category>(Category.class, ((XacmlAdminUI)UI.getCurrent()).getEntityManager())); |
| attributes.sort(new String[]{"xacmlId"}, new boolean[]{true}); |
| categories.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 AttributeDictionarySelectorComponent(Datatype datatype, Attribute initialAttribute) { |
| buildMainLayout(); |
| setCompositionRoot(mainLayout); |
| // |
| // Save pointer and finish container initialization |
| // |
| this.datatype = datatype; |
| this.initialAttribute = initialAttribute; |
| // |
| // Initialize |
| // |
| this.initializeCategoryFilter(); |
| this.initializeAttributes(); |
| this.initializeButtons(); |
| // |
| // Set our focus |
| // |
| this.listSelectAttribute.focus(); |
| } |
| |
| protected void initializeCategoryFilter() { |
| // |
| // Remove any filters |
| // |
| AttributeDictionarySelectorComponent.categories.removeAllContainerFilters(); |
| // |
| // Initialize data source and GUI properties |
| // |
| this.comboBoxCategoryFilter.setContainerDataSource(AttributeDictionarySelectorComponent.categories); |
| this.comboBoxCategoryFilter.setItemCaptionMode(ItemCaptionMode.PROPERTY); |
| this.comboBoxCategoryFilter.setItemCaptionPropertyId("xacmlId"); |
| this.comboBoxCategoryFilter.setImmediate(true); |
| // |
| // Respond to events |
| // |
| this.comboBoxCategoryFilter.addValueChangeListener(new ValueChangeListener() { |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| public void valueChange(ValueChangeEvent event) { |
| // |
| // Clear any existing filters |
| // |
| AttributeDictionarySelectorComponent.attributes.removeAllContainerFilters(); |
| // |
| // Get the current selection |
| // |
| Object id = self.comboBoxCategoryFilter.getValue(); |
| // |
| // Is anything currently selected? |
| // |
| if (id != null) { |
| // |
| // Yes - add the new filter into the container |
| // |
| AttributeDictionarySelectorComponent.attributes.addContainerFilter(new Compare.Equal("categoryBean", AttributeDictionarySelectorComponent.categories.getItem(id).getEntity())); |
| } |
| } |
| }); |
| } |
| |
| protected void initializeAttributes() { |
| // |
| // Remove any filters |
| // |
| AttributeDictionarySelectorComponent.attributes.removeAllContainerFilters(); |
| // |
| // Initialize data source and GUI properties |
| // |
| this.listSelectAttribute.setContainerDataSource(AttributeDictionarySelectorComponent.attributes); |
| this.listSelectAttribute.setItemCaptionMode(ItemCaptionMode.PROPERTY); |
| this.listSelectAttribute.setItemCaptionPropertyId("xacmlId"); |
| this.listSelectAttribute.setImmediate(true); |
| this.listSelectAttribute.setHeight(7, Unit.EM); |
| // |
| // Filter by datatype |
| // |
| if (this.datatype != null) { |
| AttributeDictionarySelectorComponent.attributes.addContainerFilter(new Compare.Equal("datatypeBean", this.datatype)); |
| } |
| // |
| // Is there a default selection? Is there an id? |
| // |
| if (this.initialAttribute != null && this.initialAttribute.getId() != 0) { |
| this.listSelectAttribute.select(this.initialAttribute.getId()); |
| } |
| // |
| // Respond to events |
| // |
| this.listSelectAttribute.addValueChangeListener(new ValueChangeListener() { |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| public void valueChange(ValueChangeEvent event) { |
| self.fireAttributeChanged(self.getAttribute()); |
| } |
| }); |
| } |
| |
| protected void initializeButtons() { |
| this.buttonNewAttribute.addClickListener(new ClickListener() { |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| public void buttonClick(ClickEvent event) { |
| AttributeDictionary.createNewAttributeWindow(); |
| } |
| }); |
| } |
| |
| @Override |
| public void commit() { |
| this.listSelectAttribute.commit(); |
| } |
| |
| @Override |
| public Attribute getAttribute() { |
| Object id = this.listSelectAttribute.getValue(); |
| if (id == null) { |
| return null; |
| } |
| return AttributeDictionarySelectorComponent.attributes.getItem(id).getEntity(); |
| } |
| |
| @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 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"); |
| |
| // horizontalLayout_2 |
| horizontalLayout_2 = buildHorizontalLayout_2(); |
| mainLayout.addComponent(horizontalLayout_2); |
| |
| // listSelectAttribute |
| listSelectAttribute = new ListSelect(); |
| listSelectAttribute.setCaption("Dictionary Attributes"); |
| listSelectAttribute.setImmediate(false); |
| listSelectAttribute.setWidth("100.0%"); |
| listSelectAttribute.setHeight("-1px"); |
| listSelectAttribute.setInvalidAllowed(false); |
| listSelectAttribute.setRequired(true); |
| mainLayout.addComponent(listSelectAttribute); |
| mainLayout.setExpandRatio(listSelectAttribute, 1.0f); |
| |
| return mainLayout; |
| } |
| |
| @AutoGenerated |
| private HorizontalLayout buildHorizontalLayout_2() { |
| // common part: create layout |
| horizontalLayout_2 = new HorizontalLayout(); |
| horizontalLayout_2.setImmediate(false); |
| horizontalLayout_2.setWidth("-1px"); |
| horizontalLayout_2.setHeight("-1px"); |
| horizontalLayout_2.setMargin(false); |
| horizontalLayout_2.setSpacing(true); |
| |
| // comboBoxCategoryFilter |
| comboBoxCategoryFilter = new ComboBox(); |
| comboBoxCategoryFilter.setCaption("Filter Category"); |
| comboBoxCategoryFilter.setImmediate(false); |
| comboBoxCategoryFilter.setWidth("-1px"); |
| comboBoxCategoryFilter.setHeight("-1px"); |
| horizontalLayout_2.addComponent(comboBoxCategoryFilter); |
| horizontalLayout_2.setExpandRatio(comboBoxCategoryFilter, 1.0f); |
| |
| // buttonNewAttribute |
| buttonNewAttribute = new Button(); |
| buttonNewAttribute.setCaption("New Attribute"); |
| buttonNewAttribute.setImmediate(true); |
| buttonNewAttribute |
| .setDescription("Click to create a new attribute in the dictionary."); |
| buttonNewAttribute.setWidth("-1px"); |
| buttonNewAttribute.setHeight("-1px"); |
| horizontalLayout_2.addComponent(buttonNewAttribute); |
| horizontalLayout_2.setComponentAlignment(buttonNewAttribute, |
| new Alignment(10)); |
| |
| return horizontalLayout_2; |
| } |
| |
| } |