blob: f6ab0f8d8993b5e81a3fa0b8c2866f0869748034 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.openaz.xacml.admin.components;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AdviceExpressionsType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeValueType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.ConditionType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.MatchType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionsType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicySetType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType;
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.model.GitRepositoryContainer;
import org.apache.openaz.xacml.admin.model.PolicyContainer;
import org.apache.openaz.xacml.admin.util.AdminNotification;
import org.apache.openaz.xacml.admin.util.JPAUtils;
import org.apache.openaz.xacml.admin.view.windows.AttributeSelectionWindow;
import org.apache.openaz.xacml.admin.view.windows.AttributeValueEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.ExpressionBuilderComponent;
import org.apache.openaz.xacml.admin.view.windows.MatchEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.ObligationAdviceEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.PolicyEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.PolicySetEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.RuleEditorWindow;
import org.apache.openaz.xacml.admin.view.windows.VariableDefinitionEditorWindow;
import org.apache.openaz.xacml.util.XACMLObjectCopy;
import org.apache.openaz.xacml.util.XACMLPolicyWriter;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Container.ItemSetChangeEvent;
import com.vaadin.data.Container.ItemSetChangeListener;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.DataBoundTransferable;
import com.vaadin.event.ItemClickEvent;
import com.vaadin.event.ItemClickEvent.ItemClickListener;
import com.vaadin.event.ShortcutAction;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.server.BrowserWindowOpener;
import com.vaadin.server.FileDownloader;
import com.vaadin.server.StreamResource;
import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.ui.AbstractSelect.AbstractSelectTargetDetails;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TabSheet.Tab;
import com.vaadin.ui.Table.TableDragMode;
import com.vaadin.ui.TreeTable;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.CloseEvent;
import com.vaadin.ui.Window.CloseListener;
public class PolicyEditor extends CustomComponent {
/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
@AutoGenerated
private VerticalLayout mainLayout;
@AutoGenerated
private TreeTable tree;
@AutoGenerated
private HorizontalLayout horizontalLayoutToolbar;
@AutoGenerated
private Button buttonExport;
@AutoGenerated
private Button buttonViewXML;
@AutoGenerated
private Button buttonSave;
@AutoGenerated
private CheckBox checkBoxAutoSave;
@AutoGenerated
private CheckBox checkBoxReadOnly;
private static final long serialVersionUID = 1L;
private static Log logger = LogFactory.getLog(PolicyEditor.class);
private final PolicyEditor self = this;
private static final Action CREATE_POLICY = new Action ("New Policy");
private static final Action CREATE_POLICYSET = new Action ("New Policy Set");
private static final Action CREATE_RULE = new Action ("New Rule");
private static final Action EDIT_POLICY = new Action ("Edit Policy");
private static final Action EDIT_POLICYSET = new Action ("Edit Policy Set");
private static final Action EDIT_RULE = new Action ("Edit Rule");
private static final Action DELETE_POLICYSET = new Action ("Delete Policy Set");
private static final Action DELETE_POLICY = new Action ("Delete Policy");
private static final Action DELETE_RULE = new Action ("Delete Rule");
private static final Action CREATE_NEWANYOF = new Action ("New Any Of (Match)");
private static final Action CREATE_NEWALLOF = new Action ("New All Of (Match)");
private static final Action CREATE_NEWMATCH = new Action ("New Match");
private static final Action DELETE_ANYOF = new Action ("Delete Any Of");
private static final Action DELETE_ALLOF = new Action ("Delete All Of");
private static final Action DELETE_MATCH = new Action ("Delete Match");
private static final Action EDIT_MATCH = new Action ("Edit Match");
private static final Action EDIT_OBLIGATIONS = new Action ("Edit Obligations");
private static final Action DELETE_OBLIGATIONS = new Action ("Delete Obligations");
private static final Action EDIT_ADVICE = new Action ("Edit Advice");
private static final Action DELETE_ADVICE = new Action ("Delete Advice");
private static final Action CREATE_VARIABLE = new Action ("Create Variable");
private static final Action EDIT_VARIABLE = new Action ("Edit Variable");
private static final Action DELETE_VARIABLE = new Action ("Delete Variable");
private static final Action CREATE_TARGET = new Action ("Create Target");
private static final Action CREATE_CONDITION = new Action ("Create Condition");
private static final Action EDIT_CONDITION = new Action ("Edit Condition");
private static final Action DELETE_CONDITION = new Action ("Delete Condition");
private static final Action EDIT_EXPRESSIONS = new Action ("Edit Expressions");
private static final Action CLIPBOARD_CUT = new ShortcutAction ("Cut", ShortcutAction.KeyCode.S, new int[] {ShortcutAction.ModifierKey.CTRL});
private static final Action CLIPBOARD_COPY = new ShortcutAction ("Copy", ShortcutAction.KeyCode.C, new int[] {ShortcutAction.ModifierKey.CTRL});
private static final Action CLIPBOARD_PASTE = new ShortcutAction ("Paste", ShortcutAction.KeyCode.V, new int[] {ShortcutAction.ModifierKey.CTRL});
private static final Object[] VISIBLE_COLUMNS = new Object[] {PolicyContainer.PROPERTY_NAME, PolicyContainer.PROPERTY_SHORTALGORITHM, PolicyContainer.PROPERTY_DESCRIPTION};
private static final String[] COLUMN_HEADERS = new String[] { "Name", "Algorithm or Effect", "Description"};
private final File file;
private final GitRepositoryContainer gitContainer;
private final PolicyContainer policyContainer;
private Tab tab = null;
private boolean isModified = false;
private Object clipboardObject = null;
/**
* 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.
* @throws IOException
*/
public PolicyEditor(File policyFile, GitRepositoryContainer gitContainer, boolean readOnly) throws IOException {
buildMainLayout();
setCompositionRoot(mainLayout);
this.mainLayout.setSizeFull();
//
// Save
//
this.file = policyFile;
this.gitContainer = gitContainer;
this.policyContainer = new PolicyContainer(this.file);
//
// Its our data also
//
this.setData(policyFile);
//
// Initialize GUI
//
this.initializeCheckboxes(readOnly);
this.initializeButtons();
this.initializeDownload();
this.initializeTree();
// PLD TODO next release this.initializeContextMenu();
//
// setup the caption etc.
//
this.setupCaption();
this.resetComponents();
}
protected void initializeCheckboxes(boolean readOnly) {
//
// The readonly check box
//
this.checkBoxReadOnly.setImmediate(true);
this.checkBoxReadOnly.setValue(readOnly);
this.checkBoxReadOnly.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event) {
self.resetComponents();
self.setupCaption();
}
});
//
// The autosave check box
//
this.checkBoxAutoSave.setImmediate(true);
this.checkBoxAutoSave.setValue(true);
}
protected void initializeButtons() {
//
// The Save button
//
this.buttonSave.addClickListener(new ClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void buttonClick(ClickEvent event) {
self.savePolicy();
}
});
//
// Attach a window opener to the View XML button
//
BrowserWindowOpener opener = new BrowserWindowOpener(new StreamResource(new StreamResource.StreamSource() {
private static final long serialVersionUID = 1L;
@Override
public InputStream getStream() {
try {
if (logger.isDebugEnabled()) {
logger.debug("Setting view xml button to: " + self.file.getAbsolutePath());
}
return new FileInputStream(self.file);
} catch (Exception e) {
logger.error("Failed to open input stream " + self.file);
}
return null;
}
}, self.file.getName()));
opener.setWindowName("_new");
opener.extend(this.buttonViewXML);
}
protected void initializeDownload() {
//
// Create a stream resource pointing to the file
//
StreamResource r = new StreamResource(new StreamResource.StreamSource() {
private static final long serialVersionUID = 1L;
@Override
public InputStream getStream() {
try {
return new FileInputStream(self.file);
} catch (Exception e) {
logger.error("Failed to open input stream " + self.file);
}
return null;
}
}, self.file.getName());
r.setCacheTime(-1);
r.setMIMEType("application/xml");
//
// Extend a downloader to attach to the Export Button
//
FileDownloader downloader = new FileDownloader(r);
downloader.extend(this.buttonExport);
}
public void setTab(Tab tab) {
this.tab = tab;
this.setupCaption();
}
public boolean isAutoSave() {
if (this.checkBoxAutoSave.isEnabled() == false) {
return false;
}
return this.checkBoxAutoSave.getValue();
}
public boolean isReadOnly() {
return this.checkBoxReadOnly.getValue();
}
protected void initializeTree() {
//
// Create our container and set it as the tree's data source
//
this.tree.setContainerDataSource(this.policyContainer);
this.tree.setItemIconPropertyId("Icon");
this.tree.setVisibleColumns(VISIBLE_COLUMNS);
this.tree.setColumnHeaders(COLUMN_HEADERS);
this.tree.setSelectable(true);
this.tree.setSizeFull();
//
// Expand it down a few items
//
for (Object id : this.tree.getItemIds()) {
this.tree.setCollapsed(id, false);
for (Object child : this.tree.getChildren(id)) {
this.tree.setCollapsed(child, false);
}
}
//
// Respond to double-click's
//
this.tree.addItemClickListener(new ItemClickListener() {
private static final long serialVersionUID = 1L;
@Override
public void itemClick(ItemClickEvent event) {
if (event.isDoubleClick()) {
if (self.isReadOnly()) {
AdminNotification.info("You are in read-only mode.");
return;
}
Object target = event.getItemId();
if (target instanceof PolicySetType) {
self.editPolicySet((PolicySetType) target, (PolicySetType) self.policyContainer.getParent(target));
} else if (target instanceof PolicyType) {
self.editPolicy((PolicyType) target, (PolicySetType) self.policyContainer.getParent(target));
} else if (target instanceof RuleType) {
self.editRule((RuleType) target, (PolicyType) self.policyContainer.getParent(target));
} else if (target instanceof ConditionType) {
self.editCondition((ConditionType) target, (RuleType) self.policyContainer.getParent(target));
} else if (target instanceof VariableDefinitionType) {
self.editVariable((VariableDefinitionType) target, (PolicyType) self.policyContainer.getParent(target));
} else if (target instanceof MatchType) {
self.editMatch((MatchType) target, (AllOfType) self.policyContainer.getParent(target), null, null, "Edit Match");
} else if (target instanceof ObligationExpressionType) {
self.editObAdvice(true, self.policyContainer.getParent(target));
} else if (target instanceof AdviceExpressionType) {
self.editObAdvice(false, self.policyContainer.getParent(target));
}
}
}
});
//
// Respond to container changes
//
this.policyContainer.addItemSetChangeListener(new ItemSetChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void containerItemSetChange(ItemSetChangeEvent event) {
self.isModified = true;
if (self.isAutoSave()) {
self.savePolicy();
} else {
self.setupCaption();
self.buttonSave.setEnabled(true);
}
}
});
//
// Implement drag-n-drop
//
this.tree.setDropHandler(new DropHandler() {
private static final long serialVersionUID = 1L;
@Override
public void drop(DragAndDropEvent event) {
DataBoundTransferable t = (DataBoundTransferable) event.getTransferable();
AbstractSelectTargetDetails target = (AbstractSelectTargetDetails) event.getTargetDetails();
//
// Get ids of the dragged item and the target item
//
Object sourceItemId = t.getData("itemId");
Object targetItemId = target.getItemIdOver();
VerticalDropLocation location = target.getDropLocation();
if (logger.isDebugEnabled()) {
logger.debug("Drop " + sourceItemId + " target " + targetItemId + " location " + location);
}
//
// Tell our container what to do
//
try {
if (location == VerticalDropLocation.MIDDLE) {
//
// Drop right on top of item making it a child
//
self.policyContainer.setParent(sourceItemId, targetItemId);
}
/*
} else if (location == VerticalDropLocation.TOP) {
//
// Drop at the top of the tree making it the previous
//
Object parent = self.policyContainer.getParent(targetItemId);
self.policyContainer.setParent(sourceItemId, parent);
self.policyContainer.moveAfterSibling(sourceItemId, targetItemId);
self.policyContainer.moveAfterSibling(targetItemId, sourceItemId);
} else if (location == VerticalDropLocation.BOTTOM) {
//
// Drop below another item
//
Object parent = self.policyContainer.getParent(targetItemId);
self.policyContainer.setParent(sourceItemId, targetItemId);
self.policyContainer.moveAfterSibling(sourceItemId, targetItemId);
}
*/
} catch (UnsupportedOperationException e) {
logger.error("Unsupported " + e.getLocalizedMessage());
}
}
@Override
public AcceptCriterion getAcceptCriterion() {
return AcceptAll.get();
}
});
}
protected void removeObject(Object target) {
if (target instanceof PolicySetType) {
this.removePolicySet((PolicySetType) target);
} else if (target instanceof PolicyType) {
this.removePolicy((PolicyType) target);
} else if (target instanceof RuleType) {
this.removeRule((RuleType) target);
} else if (target instanceof ConditionType) {
this.removeCondition((ConditionType) target);
} else if (target instanceof VariableDefinitionType) {
this.removeVariable((VariableDefinitionType) target);
} else if (target instanceof AdviceExpressionType) {
this.removeAdvice((AdviceExpressionType) target);
} else if (target instanceof ObligationExpressionType) {
this.removeObligations((ObligationExpressionType) target);
}
}
protected void removeAdvice(AdviceExpressionType target) {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove advice.");
}
}
protected void removeVariable(VariableDefinitionType target) {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove variable.");
}
}
protected void removeCondition(ConditionType target) {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove condition.");
}
}
protected void removeObligations(ObligationExpressionType target) {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove obligations.");
}
}
protected void removeRule(RuleType target) {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove rule.");
}
}
protected void removePolicy(PolicyType target) {
Object parent = this.tree.getParent(target);
if (parent == null) {
this.deleteRoot(target);
} else {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove policy.");
}
}
}
protected void removePolicySet(PolicySetType target) {
Object parent = this.tree.getParent(target);
if (parent == null) {
this.deleteRoot(target);
} else {
if (this.tree.removeItem(target) == false) {
logger.error("Failed to remove policy set.");
}
}
}
/*
protected void initializeContextMenu() {
ContextMenu menu = new ContextMenu();
menu.setAsTableContextMenu(this.tree);
menu.addContextMenuTableListener(new TableListener() {
@Override
public void onContextMenuOpenFromFooter(
ContextMenuOpenedOnTableFooterEvent event) {
// TODO Auto-generated method stub
}
@Override
public void onContextMenuOpenFromHeader(
ContextMenuOpenedOnTableHeaderEvent event) {
// TODO Auto-generated method stub
}
@Override
public void onContextMenuOpenFromRow(ContextMenuOpenedOnTableRowEvent event) {
logger.info("context menu row");
}
});
menu.addItem("test");
}
*/
protected void savePolicy() {
if (this.isReadOnly()) {
logger.warn("Should not call savePolicy when in read only mode.");
return;
}
Collection<?> roots = this.policyContainer.rootItemIds();
if (roots.size() > 1) {
logger.warn("More than one root policy.");
}
//
// There should only be one root
// Save the policy to disk.
//
for (Object root : roots) {
logger.info("Saving policy: " + this.file.getName());
//
// TODO - Bump the version?
//
if (root instanceof PolicySetType) {
XACMLPolicyWriter.writePolicyFile(Paths.get(this.file.getAbsolutePath()), (PolicySetType) root);
} else if (root instanceof PolicyType) {
XACMLPolicyWriter.writePolicyFile(Paths.get(this.file.getAbsolutePath()), (PolicyType) root);
}
//
// TODO ????
//
this.gitContainer.updateItem(this.file);
break; // NOPMD
}
//
// No longer modified
//
this.isModified = false;
this.setupCaption();
this.resetComponents();
}
protected void installTreeActionHandler() {
//
// Remove any existing action handlers
//
this.tree.removeAllActionHandlers();
//
// Are we read-only?
//
if (this.isReadOnly()) {
//
// Yes - no action handler's allowed
//
return;
}
//
// Setup our action handlers
//
this.tree.addActionHandler(new Handler() {
private static final long serialVersionUID = 1L;
@Override
public Action[] getActions(Object target, Object sender) {
//
// Are we read-only?
//
if (self.isReadOnly()) {
if (logger.isDebugEnabled()) {
logger.debug("Policy is read-only");
}
return null;
}
if (target == null) {
//
// Nothing is selected, they right-clicked empty space
//
if (logger.isDebugEnabled()) {
logger.debug("action tree target is null");
}
return null;
}
if (target instanceof PolicySetType) {
List<Action> actions = new ArrayList<Action>();
actions.add(EDIT_POLICYSET);
if (((PolicySetType) target).getTarget() == null) {
actions.add(CREATE_TARGET);
}
/*
actions.add(CLIPBOARD_CUT);
actions.add(CLIPBOARD_COPY);
actions.add(CLIPBOARD_PASTE);
*/
actions.add(CREATE_POLICYSET);
actions.add(CREATE_POLICY);
actions.add(EDIT_OBLIGATIONS);
actions.add(EDIT_ADVICE);
actions.add(DELETE_POLICYSET);
return (Action[]) actions.toArray(new Action[0]);
}
if (target instanceof PolicyType) {
List<Action> actions = new ArrayList<Action>();
actions.add(EDIT_POLICY);
if (((PolicyType) target).getTarget() == null) {
actions.add(CREATE_TARGET);
}
/*
actions.add(CLIPBOARD_CUT);
actions.add(CLIPBOARD_COPY);
actions.add(CLIPBOARD_PASTE);
*/
actions.add(CREATE_RULE);
actions.add(CREATE_VARIABLE);
actions.add(EDIT_OBLIGATIONS);
actions.add(EDIT_ADVICE);
actions.add(DELETE_POLICY);
return (Action[]) actions.toArray(new Action[0]);
}
if (target instanceof RuleType) {
List<Action> actions = new ArrayList<Action>();
actions.add(EDIT_RULE);
if (((RuleType) target).getTarget() == null) {
actions.add(CREATE_TARGET);
}
/*
actions.add(CLIPBOARD_CUT);
actions.add(CLIPBOARD_COPY);
actions.add(CLIPBOARD_PASTE);
*/
if (((RuleType)target).getCondition() == null) {
actions.add(CREATE_CONDITION);
}
actions.add(EDIT_OBLIGATIONS);
actions.add(EDIT_ADVICE);
actions.add(DELETE_RULE);
return (Action[]) actions.toArray(new Action[0]);
}
if (target instanceof TargetType) {
return new Action[] {CREATE_NEWANYOF};
}
if (target instanceof AnyOfType) {
return new Action[] {CREATE_NEWALLOF, DELETE_ANYOF};
}
if (target instanceof AllOfType) {
return new Action[] {CREATE_NEWMATCH, DELETE_ALLOF};
}
if (target instanceof MatchType) {
return new Action[] {EDIT_MATCH, DELETE_MATCH};
}
if (target instanceof ConditionType) {
return new Action[] {EDIT_CONDITION, DELETE_CONDITION};
}
if (target instanceof VariableDefinitionType) {
return new Action[] {EDIT_VARIABLE, DELETE_VARIABLE};
}
if (target instanceof ObligationExpressionType) {
return new Action[] {EDIT_OBLIGATIONS, DELETE_OBLIGATIONS};
}
if (target instanceof AdviceExpressionType) {
return new Action[] {EDIT_ADVICE, DELETE_ADVICE};
}
return null;
}
@Override
public void handleAction(Action action, Object sender, Object target) {
if (action == CLIPBOARD_CUT) {
assert target != null;
self.clipboardObject = XACMLObjectCopy.deepCopy(target);
self.removeObject(target);
return;
}
if (action == CLIPBOARD_COPY) {
assert target != null;
self.clipboardObject = XACMLObjectCopy.deepCopy(target);
return;
}
if (action == CLIPBOARD_PASTE) {
assert target != null;
self.clipboardPaste(target, true);
return;
}
if (action == CREATE_POLICYSET) {
assert target instanceof PolicySetType;
self.editPolicySet(null, (PolicySetType) target);
return;
}
if (action == CREATE_POLICY) {
assert target instanceof PolicySetType;
self.editPolicy(null, (PolicySetType) target);
return;
}
if (action == CREATE_RULE) {
assert target instanceof PolicyType;
self.editRule(null, (PolicyType) target);
return;
}
if (action == CREATE_TARGET) {
assert target instanceof RuleType || target instanceof PolicyType || target instanceof PolicySetType;
TargetType newTarget = new TargetType();
self.policyContainer.addItem(newTarget, target);
return;
}
if (action == EDIT_POLICYSET) {
assert target instanceof PolicySetType;
self.editPolicySet((PolicySetType) target, (PolicySetType) self.policyContainer.getParent(target));
return;
}
if (action == EDIT_POLICY) {
assert target instanceof PolicyType;
self.editPolicy((PolicyType) target, (PolicySetType) self.policyContainer.getParent(target));
return;
}
if (action == EDIT_RULE) {
assert target instanceof RuleType;
self.editRule((RuleType) target, (PolicyType) self.policyContainer.getParent(target));
return;
}
if (action == DELETE_POLICYSET) {
assert target instanceof PolicySetType;
self.removePolicySet((PolicySetType) target);
return;
}
if (action == DELETE_POLICY) {
assert target instanceof PolicyType;
self.removePolicy((PolicyType) target);
return;
}
if (action == DELETE_RULE) {
assert target instanceof RuleType;
self.removeRule((RuleType) target);
return;
}
if (action == CREATE_NEWANYOF) {
assert target instanceof TargetType;
self.editMatch(null, null, null, (TargetType) target, "Create New Match");
return;
}
if (action == CREATE_NEWALLOF) {
assert target instanceof AnyOfType;
self.editMatch(null, null, (AnyOfType) target, null, "Create New Match");
return;
}
if (action == CREATE_NEWMATCH) {
if (target instanceof AllOfType) {
self.editMatch(null, (AllOfType) target, null, null, "Create New Match");
} else if (target instanceof TargetType) {
self.editMatch(null, null, null, (TargetType) target, "Create New Match");
} else {
assert false;
}
return;
}
if (action == DELETE_ANYOF) {
assert target instanceof AnyOfType;
self.removeAnyOf((AnyOfType) target, (TargetType) self.policyContainer.getParent(target));
return;
}
if (action == DELETE_ALLOF) {
assert target instanceof AllOfType;
self.removeAllOf((AllOfType) target, (AnyOfType) self.policyContainer.getParent(target));
return;
}
if (action == DELETE_MATCH) {
assert target instanceof MatchType;
self.removeMatch((MatchType) target, (AllOfType) self.policyContainer.getParent(target));
return;
}
if (action == EDIT_MATCH) {
assert target instanceof MatchType;
self.editMatch((MatchType) target, (AllOfType) self.policyContainer.getParent(target), null, null, "Edit Match");
return;
}
if (action == EDIT_OBLIGATIONS) {
assert target instanceof RuleType ||
target instanceof PolicyType ||
target instanceof PolicySetType ||
target instanceof ObligationExpressionType;
if (target instanceof ObligationExpressionType) {
self.editObAdvice(true, self.policyContainer.getParent(target));
} else {
self.editObAdvice(true, target);
}
return;
}
if (action == DELETE_OBLIGATIONS) {
assert target instanceof ObligationExpressionType;
self.removeObligations((ObligationExpressionType) target);
return;
}
if (action == EDIT_ADVICE) {
assert target instanceof RuleType ||
target instanceof PolicyType ||
target instanceof PolicySetType ||
target instanceof AdviceExpressionType;
if (target instanceof AdviceExpressionType) {
self.editObAdvice(false, self.policyContainer.getParent(target));
} else {
self.editObAdvice(false, target);
}
return;
}
if (action == DELETE_ADVICE) {
assert target instanceof AdviceExpressionType;
self.removeAdvice((AdviceExpressionType) target);
return;
}
if (action == CREATE_VARIABLE) {
assert target instanceof PolicyType;
self.editVariable(null, (PolicyType) target);
return;
}
if (action == CREATE_CONDITION) {
assert target instanceof RuleType;
self.editCondition(null, (RuleType) target);
return;
}
if (action == EDIT_CONDITION) {
assert target instanceof ConditionType;
self.editCondition((ConditionType) target, (RuleType) self.policyContainer.getParent(target));
return;
}
if (action == DELETE_CONDITION) {
assert target instanceof ConditionType;
self.removeCondition((ConditionType) target);
return;
}
if (action == EDIT_EXPRESSIONS) {
return;
}
if (action == DELETE_VARIABLE) {
assert target instanceof VariableDefinitionType;
self.removeVariable((VariableDefinitionType) target);
return;
}
if (action == EDIT_VARIABLE) {
assert target instanceof VariableDefinitionType;
self.editVariable((VariableDefinitionType) target, (PolicyType) self.policyContainer.getParent(target));
return;
}
}
});
}
protected void resetComponents() {
if (this.isReadOnly()) {
this.checkBoxAutoSave.setEnabled(false);
this.buttonSave.setEnabled(false);
this.tree.setDragMode(TableDragMode.NONE);
this.tree.removeAllActionHandlers();
this.tree.setReadOnly(true);
} else {
this.checkBoxAutoSave.setEnabled(true);
this.buttonSave.setEnabled(this.isModified);
this.tree.setReadOnly(false);
this.tree.setDragMode(TableDragMode.ROW);
this.installTreeActionHandler();
}
}
public void setupCaption() {
String caption = this.file.getName();
if (this.isModified) {
caption = caption + " *";
}
if (this.isReadOnly()) {
caption = caption + " (Read-Only)";
}
if (this.tab != null) {
this.tab.setCaption(caption);
}
}
protected void editPolicySet(final PolicySetType policy, final PolicySetType parent) {
logger.info("editPolicySet: " + policy + " parent " + parent);
//
// Create a copy
//
final PolicySetType newPolicySet = (policy == null ? new PolicySetType() : XACMLObjectCopy.copy(policy));
//
// Create window
//
final PolicySetEditorWindow window = new PolicySetEditorWindow(newPolicySet);
window.setCaption(policy == null ? "Create New Policy Set" : "Edit Policy Set");
window.setModal(true);
window.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user click save?
//
if (window.isSaved() == false) {
if (logger.isDebugEnabled()) {
logger.debug("user did NOT save");
}
return;
}
//
// Was it a new Policy Set?
//
if (policy == null) {
logger.info("adding new policy set " + newPolicySet.getPolicySetId());
//
// Yes - new add it in
//
if (newPolicySet.getTarget() == null) {
newPolicySet.setTarget(new TargetType());
}
if (self.policyContainer.addItem(newPolicySet, parent) == null) {
logger.error("Failed to add new policy set");
} else {
self.tree.setCollapsed(parent, false);
self.tree.setCollapsed(newPolicySet, false);
self.tree.select(newPolicySet);
}
} else {
logger.info("updating new policy set " + newPolicySet.getPolicySetId());
//
// No - copy everything
//
policy.setDescription(newPolicySet.getDescription());
policy.setVersion(newPolicySet.getVersion());
policy.setPolicyCombiningAlgId(newPolicySet.getPolicyCombiningAlgId());
//
// Update
//
self.policyContainer.updateItem(policy);
}
}
});
window.center();
UI.getCurrent().addWindow(window);
}
protected void editPolicy(final PolicyType policy, final PolicySetType parent) {
//
// Create a copy
//
final PolicyType newPolicy = (policy == null ? new PolicyType() : XACMLObjectCopy.copy(policy));
//
// Create window
//
final PolicyEditorWindow window = new PolicyEditorWindow(newPolicy);
window.setCaption(policy == null ? "Create New Policy" : "Edit Policy");
window.setModal(true);
window.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user click save?
//
if (window.isSaved() == false) {
return;
}
//
// Was it a new Policy?
//
if (policy == null) {
//
// Yes - new add it in
//
if (newPolicy.getTarget() == null) {
newPolicy.setTarget(new TargetType());
}
if (self.policyContainer.addItem(newPolicy, parent) == null) {
logger.error("Failed to add policy");
} else {
self.tree.setCollapsed(parent, false);
self.tree.setCollapsed(newPolicy, false);
self.tree.select(newPolicy);
}
} else {
//
// No - copy everything
//
policy.setDescription(newPolicy.getDescription());
policy.setVersion(newPolicy.getVersion());
policy.setRuleCombiningAlgId(newPolicy.getRuleCombiningAlgId());
//
// Update
//
self.policyContainer.updateItem(policy);
}
}
});
window.center();
UI.getCurrent().addWindow(window);
}
protected void editRule(final RuleType rule, final PolicyType parent) {
//
// Create a copy
//
final RuleType newRule = (rule == null ? new RuleType() : XACMLObjectCopy.copy(rule));
//
// Create window
//
final RuleEditorWindow window = new RuleEditorWindow(newRule);
window.setCaption(rule == null ? "Create New Rule" : "Edit Rule");
window.setModal(true);
window.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user click save?
//
if (window.isSaved() == false) {
return;
}
//
// Was this a new rule?
//
if (rule == null) {
//
// Yes a new rule
//
if (newRule.getTarget() == null) {
newRule.setTarget(new TargetType());
}
if (self.policyContainer.addItem(newRule, parent) == null) {
logger.error("Failed to add new rule");
} else {
self.tree.setCollapsed(parent, false);
self.tree.setCollapsed(newRule, false);
self.tree.select(newRule);
}
} else {
//
// No - editing existing rule. Copy everything
//
rule.setEffect(newRule.getEffect());
rule.setDescription(newRule.getDescription());
self.policyContainer.updateItem(rule);
}
}
});
window.center();
UI.getCurrent().addWindow(window);
}
protected void editCondition(final ConditionType condition, final RuleType rule) {
//
// Make a copy of it first, in case the user manipulates it
// and then decides to NOT save it
//
final ConditionType copyCondition = (condition == null ? new ConditionType() : XACMLObjectCopy.copy(condition));
//
// Create the window
//
final ExpressionBuilderComponent expression = new ExpressionBuilderComponent(copyCondition,
(copyCondition.getExpression() != null ? copyCondition.getExpression().getValue() : null),
null,
self.policyContainer.getVariables());
if (condition == null) {
expression.setCaption("Create An Expression For The Condition");
} else {
expression.setCaption("Edit The Condition Expression");
}
expression.setModal(true);
//
// Add the close listener
//
expression.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user hit save?
//
if (expression.isSaved() == false) {
return;
}
//
// Were we creating something new?
//
if (condition == null) {
//
// Yes add the new one into the container
//
if (self.policyContainer.addItem(copyCondition, rule) == null) {
logger.error("Failed to add condition");
} else {
self.tree.setCollapsed(rule, false);
self.tree.setCollapsed(copyCondition, false);
self.tree.select(copyCondition);
}
} else {
//
// We were editing an existing condition, so copy
// over the new edited expression.
//
condition.setExpression(copyCondition.getExpression());
//
// Update the container
//
self.policyContainer.updateItem(condition);
}
}
});
expression.center();
UI.getCurrent().addWindow(expression);
}
protected void editVariable(final VariableDefinitionType variable, final PolicyType parent) {
//
// Make a copy of it first, in case the user manipulates it
// and then decides to NOT save it
//
final VariableDefinitionType copyVariable = (variable == null ? new VariableDefinitionType(): XACMLObjectCopy.copy(variable));
//
// Have the user create or edit the Variables ID
//
final VariableDefinitionEditorWindow editor = new VariableDefinitionEditorWindow(copyVariable);
if (variable == null) {
editor.setCaption("Create Variable");
} else {
editor.setCaption("Edit Variable" + (copyVariable.getVariableId() == null ? "" : copyVariable.getVariableId()));
}
editor.setModal(true);
editor.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user click save button?
//
if (editor.isSaved() == false) {
return;
}
//
// Create the window
//
final ExpressionBuilderComponent expression = new ExpressionBuilderComponent(copyVariable,
(copyVariable.getExpression() != null ? copyVariable.getExpression().getValue() : null),
null,
self.policyContainer.getVariables());
expression.setCaption("Edit The Variable \"" + copyVariable.getVariableId() + "\" Expression");
//
// Add the close listener
//
expression.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent e) {
//
// Did the user click save button?
//
if (expression.isSaved() == false) {
return;
}
//
// Was it a new variable or were we editing an existing one?
//
if (variable == null) {
//
// New one, add it to the container
//
if (self.policyContainer.addItem(copyVariable, parent) == null) {
logger.error("Failed to add variable");
} else {
self.tree.setCollapsed(parent, false);
self.tree.setCollapsed(copyVariable, false);
self.tree.select(copyVariable);
}
} else {
//
// We were editing one, copy it back over.
//
variable.setVariableId(copyVariable.getVariableId());
variable.setExpression(copyVariable.getExpression());
//
// Update the container
//
self.policyContainer.updateItem(variable);
}
}
});
expression.center();
UI.getCurrent().addWindow(expression);
}
});
editor.center();
UI.getCurrent().addWindow(editor);
}
protected void editMatch(final MatchType match, final AllOfType allOf, final AnyOfType anyOf, final TargetType target, final String caption) {
//
// Create an empty match or copy the one we are going to edit.
//
final MatchType newMatch = (match == null ? new MatchType() : XACMLObjectCopy.copy(match));
//
// Have user select an attribute
//
final AttributeSelectionWindow selection = new AttributeSelectionWindow(null,
(newMatch.getAttributeDesignator() != null ? newMatch.getAttributeDesignator() : newMatch.getAttributeSelector()));
selection.setCaption("Select Attribute To Match Against");
selection.setModal(true);
selection.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent event) {
//
// Did the user save anything?
//
if (selection.isSaved() == false) {
return;
}
//
// Save the selected attribute
//
final Attribute attribute = selection.getAttribute();
if (attribute.isDesignator()) {
newMatch.setAttributeDesignator(JPAUtils.createDesignator(attribute));
} else {
newMatch.setAttributeSelector(JPAUtils.createSelector(attribute));
}
//
// Yes - now match it up to a function
//
final MatchEditorWindow editor = new MatchEditorWindow(newMatch, attribute.getDatatypeBean());
editor.setCaption(caption);
editor.setModal(true);
editor.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent event) {
//
// Did the user hit save?
//
if (editor.isSaved() == false) {
return;
}
//
// Yes - now we need the value to check the attribute against
//
final AttributeValueType copyAttributeValue = (newMatch.getAttributeValue() == null ? new AttributeValueType() : newMatch.getAttributeValue());
// String currentValue = null;
// if (newMatch.getAttributeValue() != null) {
// currentValue = XACMLObjectCopy.getContent(newMatch.getAttributeValue().getContent());
// }
final AttributeValueEditorWindow value = new AttributeValueEditorWindow(copyAttributeValue, attribute.getDatatypeBean());
value.setCaption("Set the value the attribute should match against.");
value.setModal(true);
value.addCloseListener(new CloseListener() {
private static final long serialVersionUID = 1L;
@Override
public void windowClose(CloseEvent event) {
//
// Did the user save?
//
if (value.isSaved() == false) {
return;
}
//
// Yes - copy the value into the match
//
AttributeValueType val = new AttributeValueType();
val.getContent().add(value.getValue());
val.setDataType(value.getDatatype().getXacmlId());
newMatch.setAttributeValue(val);
//
// Was this a new match or were we editing an
// existing match?
//
if (match != null) {
//
// Editing - now we can save it
//
match.setAttributeDesignator(newMatch.getAttributeDesignator());
match.setAttributeSelector(newMatch.getAttributeSelector());
match.setAttributeValue(newMatch.getAttributeValue());
match.setMatchId(newMatch.getMatchId());
//
// Update the container
//
self.policyContainer.updateItem(match);
} else {
//
// Do we have a parent(s)?
//
AllOfType allOfParent = allOf;
AnyOfType anyOfParent = anyOf;
if (allOfParent == null) {
//
// No direct AllOfParent
//
if (anyOfParent == null) {
//
// No AnyOfParent
//
if (target == null) {
logger.error("We should NOT get this");
return;
}
anyOfParent = new AnyOfType();
if (self.policyContainer.addItem(anyOfParent, target) == null) {
logger.error("Failed to add anyOf parent");
assert false;
}
self.tree.setCollapsed(anyOfParent, false);
}
allOfParent = new AllOfType();
if (self.policyContainer.addItem(allOfParent, anyOfParent) == null) {
logger.error("Failed to add allOf parent");
assert false;
}
self.tree.setCollapsed(allOfParent, false);
}
//
// Add the MatchType into the Tree
//
if (self.policyContainer.addItem(newMatch, allOfParent) == null) {
logger.error("Failed to add match");
assert false;
}
self.tree.select(newMatch);
}
}
});
value.center();
UI.getCurrent().addWindow(value);
}
});
editor.center();
UI.getCurrent().addWindow(editor);
}
});
selection.center();
UI.getCurrent().addWindow(selection);
}
protected void deleteRoot(Object root) {
//
// TODO - prompt user for new root object
//
}
protected void editObAdvice(boolean isObligation, final Object target) {
//
// Get the object
//
String caption;
Object expressionsObject = null;
if (target instanceof RuleType) {
if (isObligation) {
expressionsObject = ((RuleType) target).getObligationExpressions();
if (expressionsObject == null) {
caption = "Create New Obligation for Rule";
} else {
caption = "Edit Obligations for Rule";
}
} else {
expressionsObject = ((RuleType) target).getAdviceExpressions();
if (expressionsObject == null) {
caption = "Create New Advice for Rule";
} else {
caption = "Edit Advice for Rule";
}
}
} else if (target instanceof PolicyType) {
if (isObligation) {
expressionsObject = ((PolicyType) target).getObligationExpressions();
if (expressionsObject == null) {
caption = "Create New Obligation for Policy";
} else {
caption = "Edit Obligations for Policy";
}
} else {
expressionsObject = ((PolicyType) target).getAdviceExpressions();
if (expressionsObject == null) {
caption = "Create New Advice for Policy";
} else {
caption = "Edit Advice for Policy";
}
}
} else if (target instanceof PolicySetType) {
if (isObligation) {
expressionsObject = ((PolicySetType) target).getObligationExpressions();
if (expressionsObject == null) {
caption = "Create New Obligation for Policy Set";
} else {
caption = "Edit Obligation for Policy Set";
}
} else {
expressionsObject = ((PolicySetType) target).getAdviceExpressions();
if (expressionsObject == null) {
caption = "Create New Advice for Policy Set";
} else {
caption = "Edit Advice for Policy Set";
}
}
} else {
throw new IllegalArgumentException("Expected a rule/policy/policyset.");
}
//
// Make a copy
//
final Object originalExpressions = expressionsObject;
final Object copyExpression = (originalExpressions == null
? (isObligation ? new ObligationExpressionsType() : new AdviceExpressionsType())
: originalExpressions instanceof ObligationExpressionsType
? XACMLObjectCopy.copy((ObligationExpressionsType) originalExpressions)
: XACMLObjectCopy.copy((AdviceExpressionsType) originalExpressions))
;
//
// Invoke the editor window
//
final ObligationAdviceEditorWindow window = new ObligationAdviceEditorWindow(copyExpression, this.policyContainer.getVariables());
window.setCaption(caption);
window.setModal(true);
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;
}
//
// It was saved - is this a new object?
//
if (originalExpressions == null) {
//
// New object
//
if (self.policyContainer.addItem(copyExpression, target) == null) {
logger.error("Failed to add expression");
assert false;
}
} else {
//
// Editing an existing object.
//
if (originalExpressions instanceof ObligationExpressionsType) {
//
// Remove old obligations
//
while (((ObligationExpressionsType) originalExpressions).getObligationExpression().isEmpty() == false) {
// for (ObligationExpressionType old : ((ObligationExpressionsType) originalExpressions).getObligationExpression()) {
ObligationExpressionType old = ((ObligationExpressionsType) originalExpressions).getObligationExpression().get(0);
self.policyContainer.removeItem(old);
}
//
// Copy new ones in
//
for (ObligationExpressionType newObligation : ((ObligationExpressionsType) copyExpression).getObligationExpression()) {
self.policyContainer.addItem(newObligation, (ObligationExpressionsType) originalExpressions);
}
} else if (originalExpressions instanceof AdviceExpressionsType) {
((AdviceExpressionsType) originalExpressions).getAdviceExpression().clear();
((AdviceExpressionsType) originalExpressions).getAdviceExpression().addAll(((AdviceExpressionsType) copyExpression).getAdviceExpression());
}
}
}
});
window.center();
UI.getCurrent().addWindow(window);
}
protected void removeMatch(MatchType match, AllOfType parent) {
assert match != null && parent != null;
if (self.policyContainer.removeItem(match) == false) {
logger.error("Failed to remove match");
assert false;
}
//
// Check for empty AllOf's
//
if (parent.getMatch().isEmpty()) {
this.removeAllOf(parent, (AnyOfType) this.policyContainer.getParent(parent));
}
}
protected void removeAllOf(AllOfType allOf, AnyOfType parent) {
assert allOf != null && parent != null;
if (self.policyContainer.removeItem(allOf) == false) {
logger.error("Failed to remove AllOf");
assert false;
}
//
// Check for empty AnyOf's
//
if (parent.getAllOf().isEmpty()) {
this.removeAnyOf(parent, (TargetType) this.policyContainer.getParent(parent));
}
}
protected void removeAnyOf(AnyOfType anyOf, TargetType parent) {
assert anyOf != null && parent != null;
if (self.policyContainer.removeItem(anyOf) == false) {
logger.error("Failed to remove anyOf");
assert false;
}
}
protected boolean clipboardPaste(final Object target, boolean performPaste) {
if (this.clipboardObject == null) {
if (logger.isDebugEnabled()) {
logger.debug("nothing in clipboard.");
}
return false;
}
boolean doPaste = false;
if (this.clipboardObject instanceof PolicySetType && target instanceof PolicySetType) {
doPaste = true;
}
if (this.clipboardObject instanceof PolicyType && target instanceof PolicySetType) {
doPaste = true;
}
if (this.clipboardObject instanceof RuleType && target instanceof PolicyType) {
doPaste = true;
}
if (doPaste == false) {
//
// Pasting clipboard object onto target not
// possible.
//
return false;
}
if (performPaste == false) {
//
// They did not ask to do the actual paste,
// but the called wanted to know if it was
// possible.
//
return true;
}
//
// Do the actual paste
//
Item item = this.policyContainer.addItem(XACMLObjectCopy.deepCopy(this.clipboardObject), target);
assert item != null;
this.tree.select(this.clipboardObject);
return true;
}
@AutoGenerated
private VerticalLayout buildMainLayout() {
// common part: create layout
mainLayout = new VerticalLayout();
mainLayout.setImmediate(false);
mainLayout.setWidth("-1px");
mainLayout.setHeight("100.0%");
mainLayout.setMargin(false);
mainLayout.setSpacing(true);
// top-level component properties
setWidth("-1px");
setHeight("100.0%");
// horizontalLayoutToolbar
horizontalLayoutToolbar = buildHorizontalLayoutToolbar();
mainLayout.addComponent(horizontalLayoutToolbar);
mainLayout.setExpandRatio(horizontalLayoutToolbar, 1.0f);
// tree
tree = new TreeTable();
tree.setImmediate(true);
tree.setWidth("100.0%");
tree.setHeight("100.0%");
mainLayout.addComponent(tree);
mainLayout.setExpandRatio(tree, 1.0f);
return mainLayout;
}
@AutoGenerated
private HorizontalLayout buildHorizontalLayoutToolbar() {
// common part: create layout
horizontalLayoutToolbar = new HorizontalLayout();
horizontalLayoutToolbar.setImmediate(false);
horizontalLayoutToolbar.setWidth("-1px");
horizontalLayoutToolbar.setHeight("-1px");
horizontalLayoutToolbar.setMargin(true);
horizontalLayoutToolbar.setSpacing(true);
// checkBoxReadOnly
checkBoxReadOnly = new CheckBox();
checkBoxReadOnly.setCaption("Read Only");
checkBoxReadOnly.setImmediate(false);
checkBoxReadOnly
.setDescription("Check this to turn-off policy editing.");
checkBoxReadOnly.setWidth("-1px");
checkBoxReadOnly.setHeight("-1px");
horizontalLayoutToolbar.addComponent(checkBoxReadOnly);
// checkBoxAutoSave
checkBoxAutoSave = new CheckBox();
checkBoxAutoSave.setCaption("Auto Save");
checkBoxAutoSave.setImmediate(false);
checkBoxAutoSave
.setDescription("Check this to turn-on automatic saving of policy when a change occurs.");
checkBoxAutoSave.setWidth("-1px");
checkBoxAutoSave.setHeight("-1px");
horizontalLayoutToolbar.addComponent(checkBoxAutoSave);
// buttonSave
buttonSave = new Button();
buttonSave.setCaption("Save");
buttonSave.setImmediate(true);
buttonSave.setDescription("Click to save the policy.");
buttonSave.setWidth("-1px");
buttonSave.setHeight("-1px");
horizontalLayoutToolbar.addComponent(buttonSave);
// buttonViewXML
buttonViewXML = new Button();
buttonViewXML.setCaption("View XML");
buttonViewXML.setImmediate(true);
buttonViewXML.setWidth("-1px");
buttonViewXML.setHeight("-1px");
horizontalLayoutToolbar.addComponent(buttonViewXML);
// buttonExport
buttonExport = new Button();
buttonExport.setCaption("Export Policy");
buttonExport.setImmediate(false);
buttonExport.setWidth("-1px");
buttonExport.setHeight("-1px");
horizontalLayoutToolbar.addComponent(buttonExport);
return horizontalLayoutToolbar;
}
}