Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ package org.apache.openaz.xacml.admin.view.windows; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType; 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.PIPResolver; import org.apache.openaz.xacml.admin.jpa.PIPResolverParam; import org.apache.openaz.xacml.admin.util.AdminNotification; import org.apache.openaz.xacml.admin.util.XACMLConstants; import org.apache.openaz.xacml.admin.view.events.FormChangedEventListener; import org.apache.openaz.xacml.admin.view.events.FormChangedEventNotifier; import org.apache.openaz.xacml.api.XACML3; import org.apache.openaz.xacml.std.pip.engines.csv.ConfigurableCSVResolver; import org.apache.openaz.xacml.std.pip.engines.jdbc.ConfigurableJDBCResolver; import org.apache.openaz.xacml.std.pip.engines.ldap.ConfigurableLDAPResolver; import com.google.common.base.Joiner; import com.google.common.base.Splitter; 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.BeanItem; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.ui.CheckBox; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.Table; import com.vaadin.ui.TextArea; import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window.CloseEvent; import com.vaadin.ui.Window.CloseListener; public class PIPSQLResolverEditorWindow extends CustomComponent implements FormChangedEventNotifier, Handler { @AutoGenerated private VerticalLayout mainLayout; @AutoGenerated private Table tableAttributes; @AutoGenerated private Table tableRequiredAttributes; @AutoGenerated private CheckBox checkBoxShortIds; @AutoGenerated private TextField textFieldFilter; @AutoGenerated private TextField textFieldBase; @AutoGenerated private TextArea textAreaSelect; private final Action ADD_ATTRIBUTE = new Action("Add Attribute"); private final Action EDIT_ATTRIBUTE = new Action("Edit Attribute"); private final Action CLONE_ATTRIBUTE = new Action("Clone Attribute"); private final Action REMOVE_ATTRIBUTE = new Action("Remove Attribute"); /*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */ /** * */ protected class ResolverAttribute implements Serializable { private static final long serialVersionUID = 1L; String identifier = null; String prefix = null; PIPResolverParam id = null; PIPResolverParam category = null; PIPResolverParam datatype = null; PIPResolverParam issuer = null; PIPResolverParam column = null; public ResolverAttribute(String prefix, String identifier) { this.prefix = prefix; this.identifier = identifier; } public ResolverAttribute(String prefix, String identifier, ResolverAttribute target) { this(prefix, identifier); this.setId(target.getId()); this.setCategory(target.getCategory()); this.setDatatype(target.getDatatype()); this.setIssuer(target.getIssuer()); this.setColumn(target.getColumn()); this.setResolver(target.id.getPipresolver()); } public String getIdentifier() { return this.identifier; } public String getId() { if (this.id == null) { return null; } return this.id.getParamValue(); } public String getShortId() { String id = this.getId(); if (id == null) { return null; } return XACMLConstants.extractShortName(id); } public PIPResolverParam getIdParam() { return this.id; } public void setId(String id) { if (this.id == null) { this.id = new PIPResolverParam(); this.id.setParamName(this.prefix + this.identifier + ".id"); } this.id.setParamValue(id); } public void setId(PIPResolverParam param) { this.id = param; } public String getCategory() { if (this.category == null) { return null; } return this.category.getParamValue(); } public String getShortCategory() { String category = this.getCategory(); if (category == null) { return null; } return XACMLConstants.extractShortName(category); } public PIPResolverParam getCategoryParam() { return this.category; } public void setCategory(String category) { if (this.category == null) { this.category = new PIPResolverParam(); this.category.setParamName(this.prefix + this.identifier + ".category"); } this.category.setParamValue(category); } public void setCategory(PIPResolverParam param) { this.category = param; } public String getDatatype() { if (this.datatype == null) { return null; } return this.datatype.getParamValue(); } public String getShortDatatype() { String dt = this.getDatatype(); if (dt == null) { return null; } return XACMLConstants.extractShortName(dt); } public PIPResolverParam getDatatypeParam() { return this.datatype; } public void setDatatype(String datatype) { if (this.datatype == null) { this.datatype = new PIPResolverParam(); this.datatype.setParamName(this.prefix + this.identifier + ".datatype"); } this.datatype.setParamValue(datatype); } public void setDatatype(PIPResolverParam param) { this.datatype = param; } public String getIssuer() { if (this.issuer == null) { return null; } return this.issuer.getParamValue(); } public String getShortIssuer() { String issuer = this.getIssuer(); if (issuer == null) { return null; } return XACMLConstants.extractShortName(issuer); } public PIPResolverParam getIssuerParam() { return this.issuer; } public void setIssuer(String issuer) { if (this.issuer == null) { this.issuer = new PIPResolverParam(); this.issuer.setParamName(this.prefix + this.identifier + ".issuer"); } this.issuer.setParamValue(issuer); } public void setIssuer(PIPResolverParam param) { this.issuer = param; } public Integer getColumn() { if (this.column == null) { return null; } try { return Integer.parseInt(this.column.getParamValue()); } catch (NumberFormatException e) { logger.error("Failed to set column: " + e); return null; } } public PIPResolverParam getColumnParam() { return this.column; } public void setColumn(Integer col) { if (this.column == null) { this.column = new PIPResolverParam(); this.column.setParamName(this.prefix + this.identifier + "column"); } this.column.setParamValue(col.toString()); } public void setColumn(PIPResolverParam param) { this.column = param; } public void setResolver(PIPResolver resolver) { if (this.id != null) { this.id.setPipresolver(resolver); } if (this.category != null) { this.category.setPipresolver(resolver); } if (this.datatype != null) { this.datatype.setPipresolver(resolver); } if (this.issuer != null) { this.issuer.setPipresolver(resolver); } if (this.column != null) { this.column.setPipresolver(resolver); } } } private static final long serialVersionUID = 1L; private static final Log logger = LogFactory.getLog(PIPSQLResolverEditorWindow.class); private final PIPSQLResolverEditorWindow self = this; private final EntityItem<PIPResolver> entity; private final BeanItemContainer<ResolverAttribute> fieldsContainer = new BeanItemContainer<ResolverAttribute>( ResolverAttribute.class); private final BeanItemContainer<ResolverAttribute> parametersContainer = new BeanItemContainer<ResolverAttribute>( ResolverAttribute.class); private final BasicNotifier notifier = new BasicNotifier(); boolean isSaved = false; String fieldPrefix; String parameterPrefix; /** * 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 PIPSQLResolverEditorWindow(EntityItem<PIPResolver> entity) { buildMainLayout(); setCompositionRoot(mainLayout); // // Save // this.entity = entity; // // Initialize // this.initialize(); } protected boolean isSQL() { if (this.entity.getEntity().getPipconfiguration().getPiptype().isSQL() || this.entity.getEntity().getPipconfiguration().getPiptype().isHyperCSV()) { return true; } return false; } protected boolean isLDAP() { return this.entity.getEntity().getPipconfiguration().getPiptype().isLDAP(); } protected boolean isCSV() { return this.entity.getEntity().getPipconfiguration().getPiptype().isCSV(); } protected void initialize() { // // Initialize entity // this.initializeEntity(); // // Go through the parameters, save them into a // properties object. // boolean sourceInitialized = false; boolean attributeInitialized = false; for (PIPResolverParam param : this.entity.getEntity().getPipresolverParams()) { // // Look for ones we know about // if (param.getParamName().equalsIgnoreCase("select")) { this.textAreaSelect.setValue(param.getParamValue()); this.textAreaSelect.setData(param); } else if (param.getParamName().equals("fields") || param.getParamName().equals("filter.view")) { this.initializeSourceTable(param.getParamValue()); this.tableRequiredAttributes.setData(param); sourceInitialized = true; } else if (param.getParamName().equals("parameters") || param.getParamName().equals("filter.parameters")) { this.initializeAttributeTable(param.getParamValue()); this.tableAttributes.setData(param); attributeInitialized = true; } else if (param.getParamName().equalsIgnoreCase("base")) { this.textFieldBase.setValue(param.getParamValue()); this.textFieldBase.setData(param); } else if (param.getParamName().equalsIgnoreCase("filter")) { this.textFieldFilter.setValue(param.getParamValue()); this.textFieldFilter.setData(param); } } // // Initialize GUI // this.initializeText(); this.initializeCheckBox(); // // Verify the tables get setup, if this is a new object // then they haven't been. // if (sourceInitialized == false) { this.initializeSourceTable(""); } if (attributeInitialized == false) { this.initializeAttributeTable(""); } } protected void initializeEntity() { // // Make sure the classname is set correctly // if (this.isSQL()) { // // // this.fieldPrefix = "field."; this.parameterPrefix = "parameter."; this.entity.getEntity().setClassname(ConfigurableJDBCResolver.class.getCanonicalName()); } else if (this.isLDAP()) { // // // this.fieldPrefix = "filter.view."; this.parameterPrefix = "filter.parameters."; this.entity.getEntity().setClassname(ConfigurableLDAPResolver.class.getCanonicalName()); } else if (this.isCSV()) { // // // this.fieldPrefix = "field."; this.parameterPrefix = "parameter."; this.entity.getEntity().setClassname(ConfigurableCSVResolver.class.getCanonicalName()); } } protected void initializeText() { // // Are we SQL or LDAP? // if (this.isSQL()) { // // Turn these off // this.textFieldBase.setRequired(false); this.textFieldBase.setVisible(false); this.textFieldFilter.setRequired(false); this.textFieldFilter.setVisible(false); // // GUI properties // this.textAreaSelect.setImmediate(true); // // Respond to changes // this.textAreaSelect.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { PIPResolverParam param = (PIPResolverParam) self.textAreaSelect.getData(); if (param == null) { param = new PIPResolverParam(); param.setPipresolver(self.entity.getEntity()); param.setParamName("select"); self.entity.getEntity().addPipresolverParam(param); self.textAreaSelect.setData(param); } param.setParamValue(self.textAreaSelect.getValue()); self.fireFormChangedEvent(); } }); } else if (this.isLDAP()) { // // Turn these off // this.textAreaSelect.setRequired(false); this.textAreaSelect.setVisible(false); // // // this.textFieldBase.setImmediate(true); this.textFieldBase.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { PIPResolverParam param = (PIPResolverParam) self.textFieldBase.getData(); if (param == null) { param = new PIPResolverParam(); param.setPipresolver(self.entity.getEntity()); param.setParamName("base"); self.entity.getEntity().addPipresolverParam(param); self.textFieldBase.setData(param); } param.setParamValue(self.textFieldBase.getValue()); self.fireFormChangedEvent(); } }); // // // this.textFieldFilter.setImmediate(true); this.textFieldFilter.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { PIPResolverParam param = (PIPResolverParam) self.textFieldFilter.getData(); if (param == null) { param = new PIPResolverParam(); param.setPipresolver(self.entity.getEntity()); param.setParamName("filter"); self.entity.getEntity().addPipresolverParam(param); self.textFieldFilter.setData(param); } param.setParamValue(self.textFieldFilter.getValue()); self.fireFormChangedEvent(); } }); } else if (this.isCSV()) { // // Turn these off // this.textAreaSelect.setRequired(false); this.textAreaSelect.setVisible(false); this.textFieldBase.setRequired(false); this.textFieldBase.setVisible(false); this.textFieldFilter.setRequired(false); this.textFieldFilter.setVisible(false); } } protected void initializeCheckBox() { this.checkBoxShortIds.setValue(true); this.checkBoxShortIds.setImmediate(true); this.checkBoxShortIds.addValueChangeListener(new ValueChangeListener() { private static final long serialVersionUID = 1L; @Override public void valueChange(ValueChangeEvent event) { if (self.checkBoxShortIds.getValue()) { self.tableRequiredAttributes.setColumnCollapsed("id", true); self.tableRequiredAttributes.setColumnCollapsed("category", true); self.tableRequiredAttributes.setColumnCollapsed("datatype", true); self.tableRequiredAttributes.setColumnCollapsed("shortId", false); self.tableRequiredAttributes.setColumnCollapsed("shortCategory", false); self.tableRequiredAttributes.setColumnCollapsed("shortDatatype", false); } else { self.tableRequiredAttributes.setColumnCollapsed("id", false); self.tableRequiredAttributes.setColumnCollapsed("category", false); self.tableRequiredAttributes.setColumnCollapsed("datatype", false); self.tableRequiredAttributes.setColumnCollapsed("shortId", true); self.tableRequiredAttributes.setColumnCollapsed("shortCategory", true); self.tableRequiredAttributes.setColumnCollapsed("shortDatatype", true); } } }); } protected void initializeSourceTable(String fields) { // // Add data into the container // this.populateData(this.fieldPrefix, fields, this.fieldsContainer); // // Set GUI properties // this.tableRequiredAttributes.setContainerDataSource(this.fieldsContainer); this.tableRequiredAttributes .setPageLength((this.fieldsContainer.size() == 0 ? 3 : this.fieldsContainer.size() + 1)); this.tableRequiredAttributes.setSizeFull(); this.tableRequiredAttributes.setColumnCollapsingAllowed(true); this.tableRequiredAttributes.setVisibleColumns(new Object[] { "identifier", "id", "category", "datatype", "shortId", "shortCategory", "shortDatatype" }); this.tableRequiredAttributes.setColumnHeaders(new String[] { "Field", "Attribute Id", "Category", "Data Type", "Attribute Id", "Category", "Data Type" }); this.tableRequiredAttributes.setColumnCollapsed("id", true); this.tableRequiredAttributes.setColumnCollapsed("category", true); this.tableRequiredAttributes.setColumnCollapsed("datatype", true); this.tableRequiredAttributes.setSelectable(true); // // Setup its handler // this.tableRequiredAttributes.addActionHandler(this); // // Respond to events // this.tableRequiredAttributes.addItemClickListener(new ItemClickListener() { private static final long serialVersionUID = 1L; @Override public void itemClick(ItemClickEvent event) { if (event.isDoubleClick()) { Object id = event.getItemId(); if (id == null) { // // Really shouldn't get here // return; } BeanItem<ResolverAttribute> beanItem = self.fieldsContainer.getItem(id); if (beanItem == null) { // // Again, shouldn't get here // return; } self.editAttribute(self.tableRequiredAttributes, beanItem.getBean()); } } }); } protected void initializeAttributeTable(String parameters) { // // Add data into the container // this.populateData(this.parameterPrefix, parameters, this.parametersContainer); // // setup gui properties // this.tableAttributes.setContainerDataSource(this.parametersContainer); this.tableAttributes.setPageLength(this.parametersContainer.size() + 1); this.tableAttributes.setSizeFull(); this.tableAttributes.setColumnCollapsingAllowed(true); this.tableAttributes.setVisibleColumns(new Object[] { "identifier", "id", "category", "datatype", "shortId", "shortCategory", "shortDatatype" }); this.tableAttributes.setColumnHeaders(new String[] { "Position", "Attribute Id", "Category", "Data Type", "Attribute Id", "Category", "Data Type" }); this.tableAttributes.setColumnCollapsed("id", true); this.tableAttributes.setColumnCollapsed("category", true); this.tableAttributes.setColumnCollapsed("datatype", true); this.tableAttributes.setSelectable(true); // // Setup its handler // this.tableAttributes.addActionHandler(this); // // Respond to events // this.tableAttributes.addItemClickListener(new ItemClickListener() { private static final long serialVersionUID = 1L; @Override public void itemClick(ItemClickEvent event) { if (event.isDoubleClick()) { Object id = event.getItemId(); if (id == null) { // // Really shouldn't get here // return; } BeanItem<ResolverAttribute> beanItem = self.parametersContainer.getItem(id); if (beanItem == null) { // // Again, shouldn't get here // return; } self.editAttribute(self.tableAttributes, beanItem.getBean()); } } }); } protected void populateData(String prefix, String list, BeanItemContainer<ResolverAttribute> container) { for (String field : Splitter.on(',').trimResults().omitEmptyStrings().split(list)) { // // Create a bean for this field // ResolverAttribute bean = new ResolverAttribute(prefix, field); // // Now try to find the attribute information // for (PIPResolverParam param : this.entity.getEntity().getPipresolverParams()) { if (param.getParamName().equals(prefix + field + ".id")) { bean.setId(param); } else if (param.getParamName().equals(prefix + field + ".category")) { bean.setCategory(param); } else if (param.getParamName().equals(prefix + field + ".datatype")) { bean.setDatatype(param); } else if (param.getParamName().equals(prefix + field + ".issuer")) { bean.setIssuer(param); } else if (param.getParamName().equals(prefix + field + ".column")) { bean.setColumn(param); } } container.addBean(bean); } } @Override public Action[] getActions(Object target, Object sender) { if (target == null) { return new Action[] { ADD_ATTRIBUTE }; } return new Action[] { EDIT_ATTRIBUTE, CLONE_ATTRIBUTE, REMOVE_ATTRIBUTE }; } @Override public void handleAction(Action action, Object sender, Object target) { if (action == ADD_ATTRIBUTE) { if (sender.equals(this.tableRequiredAttributes)) { this.editAttribute(self.tableRequiredAttributes, null); } else { this.editAttribute(self.tableAttributes, null); } return; } if (action == EDIT_ATTRIBUTE) { assert target instanceof ResolverAttribute; if (sender.equals(this.tableRequiredAttributes)) { this.editAttribute(self.tableRequiredAttributes, (ResolverAttribute) target); } else { this.editAttribute(self.tableAttributes, (ResolverAttribute) target); } return; } if (action == CLONE_ATTRIBUTE) { assert target instanceof ResolverAttribute; try { // // Which table? // if (sender.equals(this.tableRequiredAttributes)) { // // Clone the attribute giving it a new // field name. // ResolverAttribute clone = new ResolverAttribute(this.fieldPrefix, this.getNextField(), (ResolverAttribute) target); // // Add it to the container // this.fieldsContainer.addBean(clone); // // Reset the page length so we can see it and have room // to add another. // this.tableRequiredAttributes.setPageLength(this.fieldsContainer.size() + 1); // // Select it // this.tableRequiredAttributes.select(clone); } else { // // Clone the attribute giving it a new // field name. // ResolverAttribute clone = new ResolverAttribute(this.parameterPrefix, this.getNextParameter(), (ResolverAttribute) target); // // Add it to the container // this.parametersContainer.addBean(clone); // // Reset the page length so we can see it and have room // to add another. // this.tableAttributes.setPageLength(this.parametersContainer.size() + 1); // // Select it // this.tableAttributes.select(clone); } // // We have changed // this.fireFormChangedEvent(); } catch (Exception e) { logger.error("Failed to clone: " + e); } return; } if (action == REMOVE_ATTRIBUTE) { assert target instanceof ResolverAttribute; // // Help method to remove the attribute // this.removeAttribute((ResolverAttribute) target); // // Which table? // if (sender.equals(this.tableRequiredAttributes)) { // // Now remove it from the table // this.tableRequiredAttributes.removeItem(target); } else { // // Now remove it from the table // this.tableAttributes.removeItem(target); } // // we have changed // this.fireFormChangedEvent(); return; } } protected void removeAttribute(ResolverAttribute target) { this.entity.getEntity().removePipresolverParam(target.getIdParam()); this.entity.getEntity().removePipresolverParam(target.getCategoryParam()); this.entity.getEntity().removePipresolverParam(target.getDatatypeParam()); this.entity.getEntity().removePipresolverParam(target.getIssuerParam()); } protected void editAttribute(final Table table, final ResolverAttribute request) { if (this.isCSV()) { this.editCSVAttribute(table, request); } else { this.editResolverAttribute(table, request, null); } } protected void editCSVAttribute(final Table table, final ResolverAttribute request) { assert this.isCSV(); // // Prompt for the column // final ColumnSelectionWindow window = new ColumnSelectionWindow((request != null ? request.getColumn() : 0)); if (request == null) { window.setCaption("Input the CSV Column for the new attribute"); } else { window.setCaption("Edit the CSV Column for the attribute"); } window.setModal(true); window.center(); window.addCloseListener(new CloseListener() { private static final long serialVersionUID = 1L; @Override public void windowClose(CloseEvent e) { // // Did the user save? // if (window.isSaved() == false) { return; } // // Save it if its not a new // if (request != null) { request.setColumn(window.getColumn()); } // // Now we select the attribute, pass the column // in case this is a brand new attribute. Yeah its messy. // self.editResolverAttribute(table, request, window.getColumn()); } }); window.center(); UI.getCurrent().addWindow(window); } protected void editResolverAttribute(final Table table, final ResolverAttribute request, final Integer column) { // // Provide objects to the attribute selection window // AttributeDesignatorType designator = new AttributeDesignatorType(); if (request == null) { designator.setAttributeId(XACML3.ID_SUBJECT_SUBJECT_ID.stringValue()); designator.setCategory(XACML3.ID_SUBJECT_CATEGORY_ACCESS_SUBJECT.stringValue()); designator.setDataType(XACML3.ID_DATATYPE_STRING.stringValue()); designator.setIssuer(this.entity.getEntity().getIssuer()); } else { designator.setAttributeId(request.getId()); designator.setCategory(request.getCategory()); designator.setDataType(request.getDatatype()); designator.setIssuer(request.getIssuer()); } // // Have user select an attribute // final AttributeSelectionWindow selection = new AttributeSelectionWindow(null, designator); selection.setModal(true); selection.setCaption("Select Attribute"); selection.addCloseListener(new CloseListener() { private static final long serialVersionUID = 1L; @Override public void windowClose(CloseEvent event) { // // User click Save button? // if (selection.isSaved() == false) { return; } // // Yes - get the final attribute // Attribute attribute = selection.getAttribute(); // // Is it a new one? // if (request == null) { try { // // Create a new bean // ResolverAttribute bean = null; if (table.equals(self.tableRequiredAttributes)) { bean = new ResolverAttribute(self.fieldPrefix, self.getNextField()); } else { bean = new ResolverAttribute(self.parameterPrefix, self.getNextParameter()); } bean.setId(attribute.getXacmlId()); bean.setCategory(attribute.getCategoryBean().getXacmlId()); bean.setDatatype(attribute.getDatatypeBean().getXacmlId()); if (attribute.getIssuer() != null) { bean.setIssuer(attribute.getIssuer()); } if (column != null) { bean.setColumn(column); } // // Add it to the resolver // bean.setResolver(self.entity.getEntity()); self.entity.getEntity().addPipresolverParam(bean.getIdParam()); self.entity.getEntity().addPipresolverParam(bean.getCategoryParam()); self.entity.getEntity().addPipresolverParam(bean.getDatatypeParam()); if (bean.getIssuer() != null) { self.entity.getEntity().addPipresolverParam(bean.getIssuerParam()); } // // Which table? // if (table.equals(self.tableRequiredAttributes)) { // // Add to table // self.fieldsContainer.addBean(bean); // // Reset the page length // self.tableRequiredAttributes.setPageLength(self.fieldsContainer.size() + 1); } else if (table.equals(self.tableAttributes)) { // // Add to table // self.parametersContainer.addBean(bean); // // Reset the page length // self.tableAttributes.setPageLength(self.parametersContainer.size() + 1); } if (logger.isDebugEnabled()) { logger.debug("Added new attribute: " + bean); } } catch (Exception e) { logger.error(e); AdminNotification.error("Unable to add another required attribute field"); } } else { // // Update the table entry // request.setId(attribute.getXacmlId()); request.setCategory(attribute.getCategoryBean().getXacmlId()); request.setDatatype(attribute.getDatatypeBean().getXacmlId()); request.setIssuer(attribute.getIssuer()); // // Let the table know // table.refreshRowCache(); } // // we have changed // self.fireFormChangedEvent(); } }); selection.center(); UI.getCurrent().addWindow(selection); } protected String getNextField() throws Exception { // // Start at the next index number. NOTE: The GUI needs // to use numbers to index the fields. // int index = this.tableRequiredAttributes.size() + 1; // // Really if we get to 100, that's an insane number of fields // needed for a SQL query. // while (index < 100) { String field = String.format("%02d", index); boolean exists = false; for (Object id : this.tableRequiredAttributes.getItemIds()) { @SuppressWarnings("unchecked") BeanItem<ResolverAttribute> required = (BeanItem<ResolverAttribute>) this.tableRequiredAttributes .getItem(id); if (required.getBean().getIdentifier().equals(field)) { exists = true; index++; break; } } if (exists == false) { return field; } } // // Sanity check // throw new Exception("Unable to find a next field name. Are there too many fields?"); } protected String getNextParameter() throws Exception { // // Start at the next index number. NOTE: The GUI needs // to use numbers to index the fields. // int index = this.tableAttributes.size() + 1; // // Really if we get to 100, that's an insane number of fields // needed for a SQL query. // while (index < 100) { String field = String.format("%02d", index); boolean exists = false; for (Object id : this.tableAttributes.getItemIds()) { @SuppressWarnings("unchecked") BeanItem<ResolverAttribute> required = (BeanItem<ResolverAttribute>) this.tableAttributes .getItem(id); if (required.getBean().getIdentifier().equals(field)) { exists = true; index++; break; } } if (exists == false) { return field; } } // // Sanity check // throw new Exception("Unable to find a next parameter name. Are there too many parameters?"); } public void discard() throws SourceException { if (this.isSQL()) { this.textAreaSelect.discard(); } else if (this.isLDAP()) { this.textFieldBase.discard(); this.textFieldFilter.discard(); // } else if (this.isCSV()) { } } public void validate() throws InvalidValueException { if (this.isSQL()) { this.textAreaSelect.validate(); } else if (this.isLDAP()) { this.textFieldBase.validate(); this.textFieldFilter.validate(); //} else if (this.isCSV()) { } } public void commit() throws SourceException, InvalidValueException { // // Commit required fields // if (this.isSQL()) { this.textAreaSelect.commit(); } else if (this.isLDAP()) { this.textFieldBase.commit(); this.textFieldFilter.commit(); // } else if (this.isCSV()) { } // // Setup the fields // { List<String> fields = new ArrayList<String>(this.fieldsContainer.size()); for (ResolverAttribute attribute : this.fieldsContainer.getItemIds()) { fields.add(attribute.getIdentifier()); } PIPResolverParam param = (PIPResolverParam) this.tableRequiredAttributes.getData(); if (param == null) { param = new PIPResolverParam(); if (this.isSQL()) { param.setParamName("fields"); } else if (this.isLDAP()) { param.setParamName("filter.view"); } else if (this.isCSV()) { param.setParamName("fields"); } this.entity.getEntity().addPipresolverParam(param); this.tableRequiredAttributes.setData(param); } param.setParamValue(Joiner.on(',').join(fields)); } // // Setup the parameters // { List<String> parameters = new ArrayList<String>(this.parametersContainer.size()); for (ResolverAttribute attribute : this.parametersContainer.getItemIds()) { parameters.add(attribute.getIdentifier()); } PIPResolverParam param = (PIPResolverParam) this.tableAttributes.getData(); if (param == null) { param = new PIPResolverParam(); if (this.isSQL()) { param.setParamName("parameters"); } else if (this.isLDAP()) { param.setParamName("filter.parameters"); } else if (this.isCSV()) { param.setParamName("parameters"); } this.entity.getEntity().addPipresolverParam(param); this.tableAttributes.setData(param); } param.setParamValue(Joiner.on(',').join(parameters)); } } public boolean isSaved() { return this.isSaved; } @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"); // textAreaSelect textAreaSelect = new TextArea(); textAreaSelect.setCaption("SQL Select Statement"); textAreaSelect.setImmediate(false); textAreaSelect.setWidth("100.0%"); textAreaSelect.setHeight("-1px"); textAreaSelect.setInvalidAllowed(false); textAreaSelect.setRequired(true); mainLayout.addComponent(textAreaSelect); mainLayout.setExpandRatio(textAreaSelect, 1.0f); // textFieldBase textFieldBase = new TextField(); textFieldBase.setCaption("Base DN"); textFieldBase.setImmediate(false); textFieldBase.setWidth("-1px"); textFieldBase.setHeight("-1px"); mainLayout.addComponent(textFieldBase); // textFieldFilter textFieldFilter = new TextField(); textFieldFilter.setCaption("Filter"); textFieldFilter.setImmediate(false); textFieldFilter.setWidth("-1px"); textFieldFilter.setHeight("-1px"); mainLayout.addComponent(textFieldFilter); // checkBoxShortIds checkBoxShortIds = new CheckBox(); checkBoxShortIds.setCaption("Display short ids."); checkBoxShortIds.setImmediate(false); checkBoxShortIds.setWidth("-1px"); checkBoxShortIds.setHeight("-1px"); mainLayout.addComponent(checkBoxShortIds); // tableRequiredAttributes tableRequiredAttributes = new Table(); tableRequiredAttributes.setCaption("Attributes Returned"); tableRequiredAttributes.setImmediate(false); tableRequiredAttributes.setWidth("-1px"); tableRequiredAttributes.setHeight("-1px"); mainLayout.addComponent(tableRequiredAttributes); // tableAttributes tableAttributes = new Table(); tableAttributes.setCaption("Parameters - Attributes Needed (i.e. ?)"); tableAttributes.setImmediate(false); tableAttributes.setWidth("-1px"); tableAttributes.setHeight("-1px"); tableAttributes.setInvalidAllowed(false); tableAttributes.setRequired(true); mainLayout.addComponent(tableAttributes); return mainLayout; } }