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.components; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.openaz.xacml.admin.XacmlAdminAuthorization; import org.apache.openaz.xacml.admin.XacmlAdminUI; import org.apache.openaz.xacml.admin.jpa.Obadvice; import org.apache.openaz.xacml.admin.view.windows.ObadviceEditorWindow; import com.vaadin.addon.jpacontainer.EntityItem; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.addon.jpacontainer.provider.CachingLocalEntityProvider; import com.vaadin.addon.jpacontainer.provider.CachingMutableLocalEntityProvider; 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.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.ComboBox; 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 ObadviceDictionary extends CustomComponent { /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ @AutoGenerated private VerticalLayout mainLayout; @AutoGenerated private Table table; @AutoGenerated private HorizontalLayout horizontalLayoutToolbar; @AutoGenerated private ComboBox comboBoxFilter; @AutoGenerated private Button buttonClone; @AutoGenerated private Button buttonRemove; @AutoGenerated private Button buttonNew; private static final long serialVersionUID = 1L; private static final Log logger = LogFactory.getLog(ObadviceDictionary.class); private final ObadviceDictionary self = this; private static final Object[] visibleColumns = new Object[] { "type", "xacmlId", "description", "fulfillOn", "modifiedBy", "modifiedDate", "createdBy", "createdDate" }; private static final String[] columnHeaders = new String[] { "Type", "Attribute ID", "Description", "FulFill/Apply", "Modified By", "Modified Date", "Created By", "Created Date" }; private final JPAContainer<Obadvice> obadvice = new JPAContainer<Obadvice>(Obadvice.class); /** * 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 jpaContainer */ public ObadviceDictionary() { buildMainLayout(); setCompositionRoot(mainLayout); // // Setup container // boolean isReadOnly; if (((XacmlAdminUI) UI.getCurrent()).isAuthorized(XacmlAdminAuthorization.AdminAction.ACTION_WRITE, XacmlAdminAuthorization.AdminResource.RESOURCE_DICTIONARIES)) { if (logger.isDebugEnabled()) { logger.debug("write access"); } isReadOnly = false; this.obadvice.setEntityProvider(new CachingMutableLocalEntityProvider<Obadvice>(Obadvice.class, ((XacmlAdminUI) UI.getCurrent()).getEntityManager())); } else { if (logger.isDebugEnabled()) { logger.debug("read only access"); } isReadOnly = true; this.obadvice.setEntityProvider(new CachingLocalEntityProvider<Obadvice>(Obadvice.class, ((XacmlAdminUI) UI.getCurrent()).getEntityManager())); } // // initialize // this.initializeTable(isReadOnly); this.initializeButtons(isReadOnly); this.initializeCombo(); } protected void initializeTable(boolean isReadOnly) { // // Set our container // this.table.setContainerDataSource(this.obadvice); // // Initialize GUI properties // this.table.setVisibleColumns(visibleColumns); this.table.setColumnHeaders(columnHeaders); this.table.setImmediate(true); this.table.setColumnCollapsingAllowed(true); // // Is read only // if (isReadOnly) { return; } this.table.setSelectable(true); // // Respond to selections // this.table.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { self.buttonRemove.setEnabled(self.table.getValue() != null); self.buttonClone.setEnabled(self.table.getValue() != null); } }); } protected void initializeButtons(boolean isReadOnly) { if (isReadOnly) { this.buttonNew.setVisible(false); this.buttonRemove.setVisible(false); this.buttonClone.setVisible(false); return; } // // NEW button // this.buttonNew.addClickListener(new ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { // // Create window // String domain = XacmlAdminUI.getDomain(); String userid = ((XacmlAdminUI) UI.getCurrent()).getUserid(); final Obadvice oa = new Obadvice(domain, userid); final EntityItem<Obadvice> entity = self.obadvice.createEntityItem(oa); final ObadviceEditorWindow editor = new ObadviceEditorWindow(entity); editor.setCaption("Add New Obligation/Advice"); editor.setCloseShortcut(KeyCode.ESCAPE); editor.setModal(true); editor.addCloseListener(new CloseListener() { private static final long serialVersionUID = 1L; @Override public void windowClose(CloseEvent e) { if (editor.isSaved()) { self.obadvice.addEntity(oa); logger.info("Added new obligation/advice: " + oa); } } }); editor.center(); UI.getCurrent().addWindow(editor); } }); // // Disable remove/clone buttons to start // this.buttonRemove.setEnabled(false); this.buttonClone.setEnabled(false); // // REMOVE button // this.buttonRemove.addClickListener(new ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { self.obadvice.removeItem(self.table.getValue()); } }); // // CLONE button // this.buttonClone.addClickListener(new ClickListener() { private static final long serialVersionUID = 1L; @Override public void buttonClick(ClickEvent event) { // TODO } }); } protected void initializeCombo() { // // Add filter values // this.comboBoxFilter.addItem(Obadvice.OBLIGATION); this.comboBoxFilter.addItem(Obadvice.ADVICE); // // Initialize GUI properties // this.comboBoxFilter.setImmediate(true); this.comboBoxFilter.setNullSelectionAllowed(true); // // this.comboBoxFilter.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { // // Remove filters // self.obadvice.removeAllContainerFilters(); // // What was selected? // Object id = self.comboBoxFilter.getValue(); if (id != null) { // // Add filter // if (id.equals(Obadvice.OBLIGATION)) { self.obadvice.addContainerFilter(new Compare.Equal("type", Obadvice.OBLIGATION)); } else if (id.equals(Obadvice.ADVICE)) { self.obadvice.addContainerFilter(new Compare.Equal("type", Obadvice.ADVICE)); } } } }); } public void refreshContainer() { this.obadvice.refresh(); } @AutoGenerated private VerticalLayout buildMainLayout() { // common part: create layout mainLayout = new VerticalLayout(); mainLayout.setImmediate(false); mainLayout.setWidth("100%"); mainLayout.setHeight("-1px"); mainLayout.setMargin(true); mainLayout.setSpacing(true); // top-level component properties setWidth("100.0%"); setHeight("-1px"); // horizontalLayoutToolbar horizontalLayoutToolbar = buildHorizontalLayoutToolbar(); mainLayout.addComponent(horizontalLayoutToolbar); // table table = new Table(); table.setImmediate(true); table.setWidth("-1px"); table.setHeight("-1px"); mainLayout.addComponent(table); return mainLayout; } @AutoGenerated private HorizontalLayout buildHorizontalLayoutToolbar() { // common part: create layout horizontalLayoutToolbar = new HorizontalLayout(); horizontalLayoutToolbar.setImmediate(false); horizontalLayoutToolbar.setWidth("-1px"); horizontalLayoutToolbar.setHeight("-1px"); horizontalLayoutToolbar.setMargin(false); horizontalLayoutToolbar.setSpacing(true); // buttonNew buttonNew = new Button(); buttonNew.setCaption("New"); buttonNew.setImmediate(true); buttonNew.setDescription("Add a new advice or obligation to the dictionary."); buttonNew.setWidth("-1px"); buttonNew.setHeight("-1px"); horizontalLayoutToolbar.addComponent(buttonNew); horizontalLayoutToolbar.setComponentAlignment(buttonNew, new Alignment(24)); // buttonRemove buttonRemove = new Button(); buttonRemove.setCaption("Remove"); buttonRemove.setImmediate(true); buttonRemove.setDescription("Remove the selected advice or obligation from the dictionary."); buttonRemove.setWidth("-1px"); buttonRemove.setHeight("-1px"); horizontalLayoutToolbar.addComponent(buttonRemove); horizontalLayoutToolbar.setComponentAlignment(buttonRemove, new Alignment(24)); // buttonClone buttonClone = new Button(); buttonClone.setCaption("Clone"); buttonClone.setImmediate(true); buttonClone.setDescription("Clone the selected obligation/advice."); buttonClone.setWidth("-1px"); buttonClone.setHeight("-1px"); horizontalLayoutToolbar.addComponent(buttonClone); horizontalLayoutToolbar.setComponentAlignment(buttonClone, new Alignment(24)); // comboBoxFilter comboBoxFilter = new ComboBox(); comboBoxFilter.setCaption("Filter By Type"); comboBoxFilter.setImmediate(false); comboBoxFilter.setWidth("-1px"); comboBoxFilter.setHeight("-1px"); horizontalLayoutToolbar.addComponent(comboBoxFilter); return horizontalLayoutToolbar; } }