You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openaz.apache.org by pd...@apache.org on 2016/03/17 02:15:32 UTC
[10/23] incubator-openaz git commit: Ported original att source to
openaz This Closes #3
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeSimpleCreatorComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeSimpleCreatorComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeSimpleCreatorComponent.java
new file mode 100644
index 0000000..c1568b9
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeSimpleCreatorComponent.java
@@ -0,0 +1,372 @@
+/*
+ * 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;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeStandardSelectorComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeStandardSelectorComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeStandardSelectorComponent.java
new file mode 100644
index 0000000..a3fded5
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/AttributeStandardSelectorComponent.java
@@ -0,0 +1,414 @@
+/*
+ * 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.io.Serializable;
+import java.util.Set;
+
+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.util.XACMLConstants;
+import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventListener;
+import org.apache.openaz.xacml.admin.view.events.AttributeChangedEventNotifier;
+import org.apache.openaz.xacml.api.Identifier;
+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.data.util.BeanItem;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
+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;
+
+public class AttributeStandardSelectorComponent 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_2;
+ @AutoGenerated
+ private Table tableDatatypes;
+ @AutoGenerated
+ private Table tableAttributes;
+ @AutoGenerated
+ private ComboBox comboBoxCategories;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ public class AttributeBean implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private Identifier attributeId;
+ private Identifier categoryId;
+
+ public AttributeBean(Identifier category, Identifier id) {
+ this.categoryId = category;
+ this.attributeId = id;
+ }
+ public Identifier getAttributeId() {
+ return attributeId;
+ }
+ public void setAttributeId(Identifier attributeId) {
+ this.attributeId = attributeId;
+ }
+ public Identifier getCategoryId() {
+ return categoryId;
+ }
+ public void setCategoryId(Identifier categoryId) {
+ this.categoryId = categoryId;
+ }
+ @Override
+ public String toString() {
+ return this.attributeId.stringValue();
+ }
+
+ }
+ private final AttributeStandardSelectorComponent 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});
+ }
+ private BeanItemContainer<AttributeBean> container = new BeanItemContainer<AttributeBean>(AttributeBean.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.
+ */
+ public AttributeStandardSelectorComponent(Datatype datatype, Attribute initialAttribute) {
+ buildMainLayout();
+ setCompositionRoot(mainLayout);
+ //
+ // Save
+ //
+ this.datatype = datatype;
+ this.attribute = initialAttribute;
+ //
+ // Initialize GUI
+ //
+ this.initializeCategories();
+ this.initializeAttributes();
+ this.initializeDatatypes();
+ //
+ // Initialize focus
+ //
+ this.tableAttributes.focus();
+ }
+
+ private void initializeCategories() {
+ //
+ // Remove any filters
+ //
+ AttributeStandardSelectorComponent.categories.removeAllContainerFilters();
+ //
+ // Initialize data source & GUI properties
+ //
+ this.comboBoxCategories.setContainerDataSource(AttributeStandardSelectorComponent.categories);
+ this.comboBoxCategories.setItemCaptionMode(ItemCaptionMode.PROPERTY);
+ this.comboBoxCategories.setItemCaptionPropertyId("xacmlId");
+ this.comboBoxCategories.setImmediate(true);
+ this.comboBoxCategories.setNullSelectionAllowed(false);
+ //
+ // Set default selection
+ //
+ Category defaultCategory;
+ if (this.attribute == null || this.attribute.getCategoryBean() == null) {
+ defaultCategory = JPAUtils.findCategory(XACML3.ID_SUBJECT_CATEGORY_ACCESS_SUBJECT);
+ } else {
+ defaultCategory = this.attribute.getCategoryBean();
+ }
+ if (defaultCategory != null) {
+ this.comboBoxCategories.select(defaultCategory.getId());
+ }
+ //
+ // Respond to events
+ //
+ this.comboBoxCategories.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ self.setupAttributeIDs();
+ self.fireAttributeChanged(self.getAttribute());
+ }
+ });
+ }
+
+ private void initializeAttributes() {
+ //
+ // Initialize GUI properties
+ //
+ this.tableAttributes.setImmediate(true);
+ this.tableAttributes.setNullSelectionAllowed(false);
+ this.tableAttributes.setPageLength(10);
+ //
+ // Setup
+ //
+ this.tableAttributes.setContainerDataSource(this.container);
+ this.tableAttributes.setVisibleColumns(new Object[] {"attributeId"});
+ this.tableAttributes.setColumnHeaders(new String[] {"Attribute Id"});
+ this.tableAttributes.setSelectable(true);
+ this.setupAttributeIDs();
+ //
+ // Respond
+ //
+ this.tableAttributes.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
+ //
+ AttributeStandardSelectorComponent.datatypes.removeAllContainerFilters();
+ //
+ // Initialize data source & GUI properties
+ //
+ this.tableDatatypes.setContainerDataSource(AttributeStandardSelectorComponent.datatypes);
+ this.tableDatatypes.setVisibleColumns(new Object[] {"shortName", "xacmlId"});
+ this.tableDatatypes.setColumnHeaders(new String[] {"Short Name", "XACML Data Type ID"});
+ this.tableDatatypes.setImmediate(true);
+ this.tableDatatypes.setNullSelectionAllowed(false);
+ this.tableDatatypes.setPageLength(10);
+ //
+ // Are we restricted to a certain datatype?
+ //
+ if (this.datatype != null) {
+ //
+ // Datatype restricted
+ //
+ this.tableDatatypes.select(this.datatype.getId());
+ this.tableDatatypes.setEnabled(false);
+ return;
+ }
+ this.tableDatatypes.setSelectable(true);
+ //
+ // Select a default
+ //
+ Datatype defaultDatatype;
+ if (this.attribute == null || this.attribute.getDatatypeBean() == null) {
+ defaultDatatype = JPAUtils.findDatatype(XACML3.ID_DATATYPE_STRING);
+ } else {
+ defaultDatatype = this.attribute.getDatatypeBean();
+ }
+ if (defaultDatatype != null) {
+ this.tableDatatypes.select(defaultDatatype.getId());
+ }
+ //
+ // Respond to events
+ //
+ this.tableDatatypes.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ self.fireAttributeChanged(self.getAttribute());
+ }
+ });
+ }
+
+ private void setupAttributeIDs() {
+ //
+ // Get the current selection (should NOT be null)
+ //
+ Object id = this.comboBoxCategories.getValue();
+ Category category = AttributeStandardSelectorComponent.categories.getItem(id).getEntity();
+ Set<Identifier> attributeIDs = null;
+ if (category.isStandard()) {
+ //
+ // Get the subset of attribute ID's specific to this standard
+ // category.
+ //
+ attributeIDs = XACMLConstants.MAP_STANDARD_CATEGORIES.get(category.getIdentifer());
+ }
+ if (attributeIDs == null) {
+ //
+ // A custom category, there are no default attribute IDs
+ // that we can determine.
+ //
+ attributeIDs = XACMLConstants.STANDARD_ATTRIBUTES;
+ }
+ //
+ // Reset attribute IDs. Based on the category, add only acceptable
+ // attribute ID's for the category.
+ //
+ Object defaultBean = null;
+ this.tableAttributes.removeAllItems();
+ for (Identifier attributeId : attributeIDs) {
+ BeanItem<AttributeBean> newItem = this.container.addItem(new AttributeBean(category.getIdentifer(), attributeId));
+ if (this.attribute == null) {
+ if (attributeId.equals(XACML3.ID_SUBJECT_SUBJECT_ID) ||
+ attributeId.equals(XACML3.ID_ACTION_ACTION_ID) ||
+ attributeId.equals(XACML3.ID_RESOURCE_RESOURCE_ID) ||
+ attributeId.equals(XACML3.ID_ENVIRONMENT_CURRENT_DATE)) {
+ defaultBean = newItem.getBean();
+ }
+ } else {
+ if (newItem.getBean().getAttributeId().stringValue().equals(this.attribute.getXacmlId())) {
+ defaultBean = newItem.getBean();
+ }
+ }
+ }
+ //
+ // Set the default selection
+ //
+ if (defaultBean != null) {
+ this.tableAttributes.select(defaultBean);
+ }
+ }
+
+ @Override
+ public void commit() {
+ this.comboBoxCategories.commit();
+ this.tableAttributes.commit();
+ this.tableDatatypes.commit();
+ }
+
+ @Override
+ public Attribute getAttribute() {
+ Object categoryId = this.comboBoxCategories.getValue();
+ Object attributeId = this.tableAttributes.getValue();
+ Object datatypeId = this.tableDatatypes.getValue();
+ if (attributeId == null || datatypeId == null || categoryId == null) {
+ return null;
+ }
+ AttributeBean attributeBean = this.container.getItem(attributeId).getBean();
+ Datatype datatype = AttributeStandardSelectorComponent.datatypes.getItem(datatypeId).getEntity();
+ Category category = AttributeStandardSelectorComponent.categories.getItem(categoryId).getEntity();
+ if (datatype == null || category == null) {
+ return null;
+ }
+ Attribute attribute = new Attribute(attributeBean.getAttributeId().stringValue());
+ attribute.setCategoryBean(category);
+ attribute.setDatatypeBean(datatype);
+
+ 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 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(false);
+ mainLayout.setSpacing(true);
+
+ // top-level component properties
+ setWidth("-1px");
+ setHeight("-1px");
+
+ // comboBoxCategories
+ comboBoxCategories = new ComboBox();
+ comboBoxCategories.setCaption("Select A Category");
+ comboBoxCategories.setImmediate(false);
+ comboBoxCategories.setWidth("-1px");
+ comboBoxCategories.setHeight("-1px");
+ comboBoxCategories.setInvalidAllowed(false);
+ comboBoxCategories.setRequired(true);
+ mainLayout.addComponent(comboBoxCategories);
+ mainLayout.setExpandRatio(comboBoxCategories, 1.0f);
+
+ // horizontalLayout_2
+ horizontalLayout_2 = buildHorizontalLayout_2();
+ mainLayout.addComponent(horizontalLayout_2);
+ mainLayout.setExpandRatio(horizontalLayout_2, 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);
+
+ // tableAttributes
+ tableAttributes = new Table();
+ tableAttributes.setCaption("Standard Attributes");
+ tableAttributes.setImmediate(false);
+ tableAttributes.setWidth("-1px");
+ tableAttributes.setHeight("-1px");
+ tableAttributes.setInvalidAllowed(false);
+ tableAttributes.setRequired(true);
+ horizontalLayout_2.addComponent(tableAttributes);
+
+ // tableDatatypes
+ tableDatatypes = new Table();
+ tableDatatypes.setCaption("Standard Data Types");
+ tableDatatypes.setImmediate(false);
+ tableDatatypes.setWidth("-1px");
+ tableDatatypes.setHeight("-1px");
+ tableDatatypes.setInvalidAllowed(false);
+ tableDatatypes.setRequired(true);
+ horizontalLayout_2.addComponent(tableDatatypes);
+
+ return horizontalLayout_2;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CSVPIPConfigurationComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CSVPIPConfigurationComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CSVPIPConfigurationComponent.java
new file mode 100644
index 0000000..ab466b0
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CSVPIPConfigurationComponent.java
@@ -0,0 +1,385 @@
+/*
+ * 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;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CustomPIPConfigurationComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CustomPIPConfigurationComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CustomPIPConfigurationComponent.java
new file mode 100644
index 0000000..043cba7
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/CustomPIPConfigurationComponent.java
@@ -0,0 +1,200 @@
+/*
+ * 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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.openaz.xacml.admin.jpa.PIPConfiguration;
+import org.apache.openaz.xacml.admin.jpa.PIPResolver;
+import org.apache.openaz.xacml.admin.view.events.FormChangedEventListener;
+import org.apache.openaz.xacml.admin.view.events.FormChangedEventNotifier;
+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.ui.CustomComponent;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class CustomPIPConfigurationComponent extends CustomComponent implements FormChangedEventNotifier {
+
+ /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
+
+ @AutoGenerated
+ private VerticalLayout mainLayout;
+ @AutoGenerated
+ private PIPParameterComponent pipParameterComponent;
+ @AutoGenerated
+ private TextField textFieldClassname;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private final EntityItem<?> entity;
+ private static final Log logger = LogFactory.getLog(CustomPIPConfigurationComponent.class);
+ private final CustomPIPConfigurationComponent self = this;
+ private final BasicNotifier notifier = new BasicNotifier();
+ /**
+ * 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 configParamField
+ */
+ public CustomPIPConfigurationComponent(EntityItem<PIPConfiguration> entityConfig) {
+ //
+ // Save
+ //
+ this.entity = entityConfig;
+
+ buildMainLayout();
+ setCompositionRoot(mainLayout);
+ //
+ // InitializeGUI
+ //
+ this.initialize();
+ }
+
+ protected void initialize() {
+ if (logger.isDebugEnabled()) {
+ logger.debug("initializing " + this.entity.getEntity().toString());
+ }
+ this.initializeEntity();
+ this.initializeText();
+ }
+
+ protected void initializeEntity() {
+ //
+ // If the entity is persisted, then we are editing
+ // it. So don't remove anything.
+ //
+ if (this.entity.isPersistent()) {
+ return;
+ }
+ //
+ // Not sure if we really should remove stuff. To be
+ // determined later.
+ //
+ }
+
+ protected void initializeText() {
+ this.textFieldClassname.setRequired(true);
+ this.textFieldClassname.setRequiredError("You must declare the Java classname for the PIP Factory Loader");
+ this.textFieldClassname.setImmediate(true);
+ final Object entity = this.entity.getEntity();
+ if (entity instanceof PIPConfiguration) {
+ this.textFieldClassname.setValue(((PIPConfiguration)entity).getClassname());
+ } else if (entity instanceof PIPResolver) {
+ this.textFieldClassname.setValue(((PIPResolver)entity).getClassname());
+ }
+ //
+ // Respond to events
+ //
+ this.textFieldClassname.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ if (entity instanceof PIPConfiguration) {
+ ((PIPConfiguration) entity).setClassname(self.textFieldClassname.getValue());
+ } else if (entity instanceof PIPResolver) {
+ ((PIPResolver) entity).setClassname(self.textFieldClassname.getValue());
+ }
+ self.fireFormChangedEvent();
+ }
+ });
+ }
+
+ public void validate() throws InvalidValueException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("validate");
+ }
+ this.textFieldClassname.validate();
+ }
+
+ public void commit() throws SourceException, InvalidValueException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("commit");
+ }
+ this.textFieldClassname.commit();
+ }
+
+ public void discard() throws SourceException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("discard");
+ }
+ }
+
+ @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(false);
+ mainLayout.setSpacing(true);
+
+ // top-level component properties
+ setWidth("-1px");
+ setHeight("-1px");
+
+ // textFieldClassname
+ textFieldClassname = new TextField();
+ textFieldClassname.setCaption("Java Classname");
+ textFieldClassname.setImmediate(false);
+ textFieldClassname
+ .setDescription("Java classname of the code implementing the custom PIP.");
+ textFieldClassname.setWidth("-1px");
+ textFieldClassname.setHeight("-1px");
+ textFieldClassname.setInputPrompt("Eg. com.foo.MyPIP");
+ mainLayout.addComponent(textFieldClassname);
+ mainLayout.setExpandRatio(textFieldClassname, 1.0f);
+
+ // pipParameterComponent
+ pipParameterComponent = new PIPParameterComponent(this.entity.getEntity());
+ pipParameterComponent.setImmediate(false);
+ pipParameterComponent.setWidth("-1px");
+ pipParameterComponent.setHeight("-1px");
+ mainLayout.addComponent(pipParameterComponent);
+
+ return mainLayout;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/EnumerationEditorComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/EnumerationEditorComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/EnumerationEditorComponent.java
new file mode 100644
index 0000000..eafbcad
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/EnumerationEditorComponent.java
@@ -0,0 +1,386 @@
+/*
+ * 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.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.apache.openaz.xacml.admin.jpa.Attribute;
+import org.apache.openaz.xacml.admin.jpa.ConstraintValue;
+import org.apache.openaz.xacml.api.Identifier;
+import org.apache.openaz.xacml.api.XACML3;
+import com.vaadin.annotations.AutoGenerated;
+import com.vaadin.data.Container;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.data.Validator;
+import com.vaadin.data.util.BeanItemContainer;
+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.Component;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TableFieldFactory;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalLayout;
+
+public class EnumerationEditorComponent extends CustomComponent implements Validator {
+ /*- 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 Button buttonClearAll;
+
+ @AutoGenerated
+ private Button buttonRemove;
+
+ @AutoGenerated
+ private Button buttonAdd;
+
+ @AutoGenerated
+ private Table tableEnumerations;
+
+ private static final long serialVersionUID = -1L;
+ private static final Log logger = LogFactory.getLog(EnumerationEditorComponent.class);
+ private final EnumerationEditorComponent self = this;
+ private final Attribute attribute;
+ private Identifier datatype;
+ private final BeanItemContainer<ConstraintValue> beanContainer;
+
+ public EnumerationEditorComponent(Attribute attribute, Identifier datatype) {
+ buildMainLayout();
+ setCompositionRoot(mainLayout);
+ //
+ // Save our attribute
+ //
+ this.attribute = attribute;
+ this.datatype = datatype;
+ //
+ // Construct a bean container that the
+ // table uses to manage the values.
+ //
+ this.beanContainer = new BeanItemContainer<ConstraintValue>(ConstraintValue.class);
+ //
+ // Initialize our components
+ //
+ this.initializeTable();
+ this.initializeButtons();
+ }
+
+ private void initializeTable() {
+ //
+ // Add the current enumeration values into the
+ // bean container.
+ //
+ for (ConstraintValue value : this.attribute.getConstraintValues()) {
+ if (value.getProperty().equals("Enumeration")) {
+ this.beanContainer.addBean(value);
+ }
+ }
+ //
+ // Now hook the bean container to the table
+ //
+ this.tableEnumerations.setContainerDataSource(beanContainer);
+ //
+ // We have to manually create the text field because we need
+ // to set a validator.
+ //
+ this.tableEnumerations.setTableFieldFactory(new TableFieldFactory() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Field<?> createField(Container container, Object itemId,
+ Object propertyId, Component uiContext) {
+ if (propertyId.toString().equals("value")) {
+ final TextField text = new TextField();
+ text.setImmediate(true);
+ text.setNullRepresentation("");
+ text.setNullSettingAllowed(false);
+ text.setRequired(true);
+ text.setRequiredError("Cannot have empty enumeration values.");
+ text.addValidator(self);
+ return text;
+ }
+ return null;
+ }
+ });
+ //
+ // Finish setting up the table.
+ //
+ this.tableEnumerations.setVisibleColumns(new Object[] {"value"});
+ this.tableEnumerations.setColumnHeaders(new String[] {"Enumeration Value"});
+ this.tableEnumerations.setSelectable(true);
+ this.tableEnumerations.setEditable(true);
+ this.tableEnumerations.setImmediate(true);
+ if (this.tableEnumerations.size() == 0) {
+ this.tableEnumerations.setPageLength(3);
+ } else {
+ this.tableEnumerations.setPageLength(this.tableEnumerations.size() + 1);
+ }
+ //
+ // As the user select items, enable/disable buttons
+ //
+ this.tableEnumerations.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ self.buttonRemove.setEnabled(self.tableEnumerations.getValue() != null);
+ }
+
+ });
+ }
+
+ private void initializeButtons() {
+ //
+ // Adding new values
+ //
+ this.buttonAdd.setImmediate(true);
+ this.buttonAdd.addClickListener(new ClickListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ //
+ // Create a new value object
+ //
+ ConstraintValue newValue = new ConstraintValue("Enumeration", "");
+ //
+ // Associate it with the attribute
+ //
+ newValue.setAttribute(self.attribute);
+ //
+ // Add it into the attribute's internal list
+ //
+ self.attribute.addConstraintValue(newValue);
+ //
+ // Now we can add it to the GUI
+ //
+ Item item = self.tableEnumerations.addItem(newValue);
+ if (item != null) {
+ self.tableEnumerations.select(newValue);
+ self.tableEnumerations.focus();
+ }
+ //
+ // Make sure this button is now enabled
+ //
+ self.buttonClearAll.setEnabled(true);
+ }
+ });
+ //
+ // Removing values - nothing is selected to begin with so
+ // disable the button.
+ //
+ this.buttonRemove.setEnabled(false);
+ this.buttonRemove.setImmediate(true);
+ this.buttonRemove.addClickListener(new ClickListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ //
+ // Get the selected value
+ //
+ Object value = self.tableEnumerations.getValue();
+ //
+ // Was it selected or unselected (i.e. null)? If so, remove it
+ // from the table
+ //
+ if (value != null && self.tableEnumerations.removeItem(value)) {
+ //
+ // Dis-associate it with the attribute
+ //
+ ((ConstraintValue) value).setAttribute(null);
+ //
+ // Now remove it from the attribute's internal list
+ //
+ self.attribute.removeConstraintValue((ConstraintValue) value);
+ //
+ // If there are no items, then disable this button
+ //
+ if (self.tableEnumerations.size() == 0) {
+ self.buttonClearAll.setEnabled(false);
+ }
+ }
+ }
+
+ });
+ //
+ // Clearing all the values, set it enabled if we have anything
+ //
+ this.buttonClearAll.setImmediate(true);
+ this.buttonClearAll.setEnabled(this.tableEnumerations.size() > 0);
+ this.buttonClearAll.addClickListener(new ClickListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ //
+ // Iterate all the values
+ //
+ for (Object id : self.tableEnumerations.getItemIds()) {
+ //
+ // Get the value object (it is the id)
+ //
+ ConstraintValue value = (ConstraintValue) id;
+ //
+ // Dis-associate it with the attribute
+ //
+ value.setAttribute(null);
+ //
+ // Now remove it from the attribute's internal list
+ //
+ self.attribute.removeConstraintValue(value);
+ }
+ //
+ // Remove everything from the table
+ //
+ self.tableEnumerations.removeAllItems();
+ //
+ // Now disable this button
+ //
+ self.buttonClearAll.setEnabled(false);
+ }
+ });
+ }
+
+ public void setupDatatype(Identifier id) {
+ if (logger.isTraceEnabled()) {
+ logger.trace("setupDatatype: " + datatype);
+ }
+ this.datatype = id;
+ //
+ // Initiate a validate
+ //
+ this.tableEnumerations.validate();
+ }
+
+ @Override
+ public void validate(Object value) throws InvalidValueException {
+ if (value == null || value.toString().length() == 0) {
+ return;
+ }
+ if (datatype.equals(XACML3.ID_DATATYPE_INTEGER)) {
+ try {
+ Integer.parseInt(value.toString());
+ } catch(NumberFormatException e) {
+ throw new InvalidValueException(e.getLocalizedMessage());
+ }
+ return;
+ }
+ if (datatype.equals(XACML3.ID_DATATYPE_DOUBLE)) {
+ try {
+ Double.parseDouble(value.toString());
+ } catch(NumberFormatException e) {
+ throw new InvalidValueException(e.getLocalizedMessage());
+ }
+ return;
+ }
+ }
+
+ @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");
+
+ // tableEnumerations
+ tableEnumerations = new Table();
+ tableEnumerations.setCaption("Enumeration Values");
+ tableEnumerations.setImmediate(true);
+ tableEnumerations
+ .setDescription("Enter possible values for the attribute.");
+ tableEnumerations.setWidth("100.0%");
+ tableEnumerations.setHeight("-1px");
+ tableEnumerations.setInvalidAllowed(false);
+ mainLayout.addComponent(tableEnumerations);
+ mainLayout.setExpandRatio(tableEnumerations, 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);
+
+ // buttonAdd
+ buttonAdd = new Button();
+ buttonAdd.setCaption("Add");
+ buttonAdd.setImmediate(true);
+ buttonAdd.setDescription("Add a new enumeration value.");
+ buttonAdd.setWidth("-1px");
+ buttonAdd.setHeight("-1px");
+ horizontalLayout_1.addComponent(buttonAdd);
+ horizontalLayout_1.setComponentAlignment(buttonAdd, new Alignment(9));
+
+ // buttonRemove
+ buttonRemove = new Button();
+ buttonRemove.setCaption("Remove");
+ buttonRemove.setImmediate(true);
+ buttonRemove.setDescription("Remove the selected enumeration value.");
+ buttonRemove.setWidth("-1px");
+ buttonRemove.setHeight("-1px");
+ horizontalLayout_1.addComponent(buttonRemove);
+ horizontalLayout_1.setComponentAlignment(buttonRemove,
+ new Alignment(10));
+
+ // buttonClearAll
+ buttonClearAll = new Button();
+ buttonClearAll.setCaption("Clear All");
+ buttonClearAll.setImmediate(false);
+ buttonClearAll.setDescription("Clears all the values out.");
+ buttonClearAll.setWidth("-1px");
+ buttonClearAll.setHeight("-1px");
+ horizontalLayout_1.addComponent(buttonClearAll);
+
+ return horizontalLayout_1;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/648d0c0d/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/HyperCSVPIPConfigurationComponent.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/HyperCSVPIPConfigurationComponent.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/HyperCSVPIPConfigurationComponent.java
new file mode 100644
index 0000000..67f7faf
--- /dev/null
+++ b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/view/components/HyperCSVPIPConfigurationComponent.java
@@ -0,0 +1,339 @@
+/*
+ * 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.HyperCSVEngine;
+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.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 HyperCSVPIPConfigurationComponent extends CustomComponent implements FormChangedEventNotifier {
+
+ /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
+
+ @AutoGenerated
+ private VerticalLayout mainLayout;
+ @AutoGenerated
+ private TextField textFieldDefinition;
+ @AutoGenerated
+ private TextField textFieldTarget;
+ @AutoGenerated
+ private TextField textFieldSource;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ public static final String CLASSNAME = "org.apache.openaz.xacml.std.pip.engines.csv.HyperCSVEngine";
+
+ private final EntityItem<PIPConfiguration> entity;
+ private static final Log logger = LogFactory.getLog(CustomPIPConfigurationComponent.class);
+ private final HyperCSVPIPConfigurationComponent self = this;
+ private final BasicNotifier notifier = new BasicNotifier();
+
+ /**
+ * 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 HyperCSVPIPConfigurationComponent(EntityItem<PIPConfiguration> entityConfig) {
+ buildMainLayout();
+ setCompositionRoot(mainLayout);
+ //
+ // Save
+ //
+ this.entity = entityConfig;
+ //
+ // Initialize
+ //
+ this.initialize();
+ }
+
+ 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(HyperCSVEngine.PROP_SOURCE)) {
+ this.textFieldSource.setData(param);
+ } else if (param.getParamName().equals(HyperCSVEngine.PROP_TARGET)) {
+ this.textFieldTarget.setData(param);
+ } else if (param.getParamName().equals(HyperCSVEngine.PROP_DEFINITION)) {
+ this.textFieldDefinition.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.textFieldSource.setNullRepresentation("");
+ PIPConfigParam param = (PIPConfigParam) this.textFieldSource.getData();
+ if (param != null) {
+ this.textFieldSource.setValue(param.getParamValue());
+ }
+ this.textFieldSource.addTextChangeListener(new TextChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void textChange(TextChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldSource.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_SOURCE);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldSource.setData(param);
+ }
+ param.setParamValue(self.textFieldSource.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ this.textFieldSource.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldSource.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_SOURCE);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldSource.setData(param);
+ }
+ param.setParamValue(self.textFieldSource.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ //
+ //
+ //
+ this.textFieldTarget.setNullRepresentation("");
+ param = (PIPConfigParam) this.textFieldTarget.getData();
+ if (param != null) {
+ this.textFieldTarget.setValue(param.getParamValue());
+ }
+ this.textFieldTarget.addTextChangeListener(new TextChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void textChange(TextChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldTarget.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_TARGET);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldTarget.setData(param);
+ }
+ param.setParamValue(self.textFieldTarget.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ this.textFieldTarget.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldTarget.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_TARGET);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldTarget.setData(param);
+ }
+ param.setParamValue(self.textFieldTarget.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ //
+ //
+ //
+ this.textFieldDefinition.setNullRepresentation("");
+ param = (PIPConfigParam) this.textFieldDefinition.getData();
+ if (param != null) {
+ this.textFieldDefinition.setValue(param.getParamValue());
+ }
+ this.textFieldDefinition.addTextChangeListener(new TextChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void textChange(TextChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldDefinition.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_DEFINITION);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldDefinition.setData(param);
+ }
+ param.setParamValue(self.textFieldDefinition.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ this.textFieldDefinition.addValueChangeListener(new ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ PIPConfigParam param = (PIPConfigParam) self.textFieldDefinition.getData();
+ if (param == null) {
+ param = new PIPConfigParam(HyperCSVEngine.PROP_DEFINITION);
+ self.entity.getEntity().addPipconfigParam(param);
+ self.textFieldDefinition.setData(param);
+ }
+ param.setParamValue(self.textFieldDefinition.getValue());
+ self.fireFormChangedEvent();
+ }
+ });
+ }
+
+ public void validate() throws InvalidValueException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("validate");
+ }
+ this.textFieldSource.validate();
+ this.textFieldTarget.validate();
+ this.textFieldDefinition.validate();
+ }
+
+ public void commit() throws SourceException, InvalidValueException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("commit");
+ }
+ this.textFieldSource.commit();
+ this.textFieldTarget.commit();
+ this.textFieldDefinition.commit();
+ }
+
+ public void discard() throws SourceException {
+ if (logger.isDebugEnabled()) {
+ logger.debug("discard");
+ }
+ this.textFieldSource.discard();
+ this.textFieldTarget.discard();
+ this.textFieldDefinition.discard();
+ //??
+ this.entity.getEntity().getPipconfigParams().remove(HyperCSVEngine.PROP_SOURCE);
+ this.entity.getEntity().getPipconfigParams().remove(HyperCSVEngine.PROP_TARGET);
+ this.entity.getEntity().getPipconfigParams().remove(HyperCSVEngine.PROP_DEFINITION);
+ }
+
+ @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(false);
+
+ // top-level component properties
+ setWidth("-1px");
+ setHeight("-1px");
+
+ // textFieldSource
+ textFieldSource = new TextField();
+ textFieldSource.setCaption("CSV Source File");
+ textFieldSource.setImmediate(false);
+ textFieldSource.setDescription("Path to CSV file");
+ textFieldSource.setWidth("-1px");
+ textFieldSource.setHeight("-1px");
+ textFieldSource.setInvalidAllowed(false);
+ textFieldSource.setRequired(true);
+ textFieldSource.setInputPrompt("Eg. /opt/app/data.csv");
+ mainLayout.addComponent(textFieldSource);
+
+ // textFieldTarget
+ textFieldTarget = new TextField();
+ textFieldTarget.setCaption("Table");
+ textFieldTarget.setImmediate(false);
+ textFieldTarget.setDescription("Name of database table to be created.");
+ textFieldTarget.setWidth("-1px");
+ textFieldTarget.setHeight("-1px");
+ textFieldTarget.setInvalidAllowed(false);
+ textFieldTarget.setRequired(true);
+ mainLayout.addComponent(textFieldTarget);
+
+ // textFieldDefinition
+ textFieldDefinition = new TextField();
+ textFieldDefinition.setCaption("Table Definition");
+ textFieldDefinition.setImmediate(false);
+ textFieldDefinition.setDescription("SQL Table Definition");
+ textFieldDefinition.setWidth("-1px");
+ textFieldDefinition.setHeight("-1px");
+ textFieldDefinition.setInvalidAllowed(false);
+ textFieldDefinition.setRequired(true);
+ mainLayout.addComponent(textFieldDefinition);
+
+ return mainLayout;
+ }
+
+}