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:13:20 UTC
[16/23] incubator-openaz git commit: Revert "Ported original att
source to openaz"
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/c68f98c5/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/RuleAlgorithms.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/RuleAlgorithms.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/RuleAlgorithms.java
deleted file mode 100644
index 961984e..0000000
--- a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/RuleAlgorithms.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.jpa;
-
-import java.io.Serializable;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.NamedQuery;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
-import org.apache.openaz.xacml.api.Identifier;
-
-@Entity
-@Table(name="RuleAlgorithms")
-@NamedQuery(name="RuleAlgorithms.findAll", query="SELECT d FROM RuleAlgorithms d")
-public class RuleAlgorithms implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final char STANDARD = 'S';
- public static final char CUSTOM = 'C';
-
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- @Column(name="id")
- private int id;
-
- @Column(name="is_standard", nullable=false)
- private char isStandard;
-
- @Column(name="xacml_id", nullable=false, unique=true, length=255)
- private String xacmlId;
-
- @Column(name="short_name", nullable=false, length=64)
- private String shortName;
-
- public RuleAlgorithms(Identifier id, char standard) {
- if (id != null) {
- this.xacmlId = id.stringValue();
- }
- this.isStandard = standard;
- }
- public RuleAlgorithms(Identifier id) {
- this(id, RuleAlgorithms.STANDARD);
- }
-
- public RuleAlgorithms() {
- this(null, RuleAlgorithms.STANDARD);
- }
-
- public int getId() {
- return this.id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public char getIsStandard() {
- return this.isStandard;
- }
-
- public void setIsStandard(char isStandard) {
- this.isStandard = isStandard;
- }
-
- @Transient
- public boolean isStandard() {
- return this.isStandard == RuleAlgorithms.STANDARD;
- }
-
- @Transient
- public boolean isCustom() {
- return this.isStandard == RuleAlgorithms.CUSTOM;
- }
-
- public String getXacmlId() {
- return this.xacmlId;
- }
-
- public void setXacmlId(String xacmlId) {
- this.xacmlId = xacmlId;
- }
-
- public String getShortName() {
- return shortName;
- }
-
- public void setShortName(String shortName) {
- this.shortName = shortName;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/c68f98c5/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/package-info.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/package-info.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/package-info.java
deleted file mode 100644
index 85d06f5..0000000
--- a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/jpa/package-info.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.
- *
- */
-
-/**
- *
- */
-/**
- * @author pameladragosh
- *
- */
-package org.apache.openaz.xacml.admin.jpa;
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/c68f98c5/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeContainer.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeContainer.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeContainer.java
deleted file mode 100644
index 37d2fd4..0000000
--- a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeContainer.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * 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.model;
-
-import java.lang.reflect.Method;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-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.api.AttributeValue;
-import org.apache.openaz.xacml.api.Identifier;
-import org.apache.openaz.xacml.util.XACMLPolicyAggregator;
-import org.apache.openaz.xacml.util.XACMLPolicyScanner;
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.MethodProperty;
-import com.vaadin.ui.Table;
-
-public class AttributeContainer extends ItemSetChangeNotifier implements Container.Hierarchical, Container.ItemSetChangeNotifier {
- private static final long serialVersionUID = 1L;
- private static Log logger = LogFactory.getLog(AttributeContainer.class);
- //private final AttributeContainer self = this;
- private final Map<Category, Map<Datatype, Map<String, Set<ContainerAttribute>>>> mapAttributes = new HashMap<Category, Map<Datatype, Map<String, Set<ContainerAttribute>>>>();
-
- class ContainerAttribute {
- Path policy;
- boolean isRoot;
- AttributeValue<?> value;
-
- public ContainerAttribute(Path policy, boolean isRoot, AttributeValue<?> value) {
- this.policy = policy;
- this.isRoot = isRoot;
- this.value = value;
- }
-
- public Path getPolicy() {
- return policy;
- }
-
- public boolean isRoot() {
- return isRoot;
- }
-
- public AttributeValue<?> getValue() {
- return value;
- }
-
- public boolean isCustom() {
- return this.policy == null;
- }
- }
- /**
- * String identifier of an object's "id" property.
- */
- public static String PROPERTY_ID = "Id";
-
- /**
- * String identifier of an object's "category" property.
- */
- public static String PROPERTY_CATEGORY = "Category";
-
- /**
- * String identifier of an object's "datatype" property.
- */
- public static String PROPERTY_DATATYPE = "Datatype";
-
- /**
- * String identifier of an object's "value" property.
- */
- public static String PROPERTY_VALUES = "Values";
-
- /**
- * List of the string identifiers for the available properties.
- */
- public static Collection<String> ATTRIBUTE_PROPERTIES;
-
- private final static Method ATTRIBUTEITEM_ID;
- private final static Method ATTRIBUTEITEM_CATEGORY;
- private final static Method ATTRIBUTEITEM_DATATYPE;
- private final static Method ATTRIBUTEITEM_VALUES;
- static {
- ATTRIBUTE_PROPERTIES = new ArrayList<String>();
- ATTRIBUTE_PROPERTIES.add(PROPERTY_ID);
- ATTRIBUTE_PROPERTIES.add(PROPERTY_CATEGORY);
- ATTRIBUTE_PROPERTIES.add(PROPERTY_DATATYPE);
- ATTRIBUTE_PROPERTIES.add(PROPERTY_VALUES);
- ATTRIBUTE_PROPERTIES = Collections.unmodifiableCollection(ATTRIBUTE_PROPERTIES);
- try {
- ATTRIBUTEITEM_ID = AttributeItem.class.getMethod("getId", new Class[]{});
- ATTRIBUTEITEM_CATEGORY = AttributeItem.class.getMethod("getCategory", new Class[]{});
- ATTRIBUTEITEM_DATATYPE = AttributeItem.class.getMethod("getDatatype", new Class[]{});
- ATTRIBUTEITEM_VALUES = AttributeItem.class.getMethod("getValues", new Class[]{});
- } catch (final NoSuchMethodException e) {
- throw new RuntimeException("Internal error finding methods in AttributeContainer");
- }
- }
-
- public AttributeContainer(Path rootPolicy, Collection<Path> referencedPolicies) {
- super();
- this.setContainer(this);
- this.initialize(rootPolicy, referencedPolicies);
- }
-
- protected void initialize(Path rootPolicy, Collection<Path> referencedPolicies) {
- XACMLPolicyAggregator aggregator = new XACMLPolicyAggregator();
- //
- // Scan the policy
- //
- new XACMLPolicyScanner(rootPolicy, aggregator).scan();
- this.addAttributes(aggregator, rootPolicy, true);
- aggregator = new XACMLPolicyAggregator();
- //
- // Scan the referenced policies
- //
- for (Path policy : referencedPolicies) {
- new XACMLPolicyScanner(policy, aggregator).scan();
- this.addAttributes(aggregator, policy, false);
- aggregator = new XACMLPolicyAggregator();
- }
- }
-
- protected void addAttributes(XACMLPolicyAggregator aggregator, Path policy, boolean isRoot) {
- for (Identifier cat : aggregator.getAttributeMap().keySet()) {
- Category category = JPAUtils.findCategory(cat);
- if (category == null) {
- logger.warn("Could not find category: " + cat);
- continue;
- }
- if (this.mapAttributes.containsKey(category) == false) {
- this.mapAttributes.put(category, new HashMap<Datatype, Map<String, Set<ContainerAttribute>>>());
- }
- Map<Datatype, Map<String, Set<ContainerAttribute>>> datatypeMap = this.mapAttributes.get(category);
- for (Identifier dt : aggregator.getAttributeMap().get(cat).keySet()) {
- Datatype datatype = JPAUtils.findDatatype(dt);
- if (datatype == null) {
- logger.warn("Could not find datatype: " + dt);
- }
- //
- // Need a unique datatype object
- //
- datatype = new Datatype((int) System.currentTimeMillis(), datatype);
- if (datatypeMap.containsKey(datatype) == false) {
- datatypeMap.put(datatype, new HashMap<String, Set<ContainerAttribute>>());
- }
- Map<String, Set<ContainerAttribute>> attributeMap = datatypeMap.get(datatype);
- for (Identifier id : aggregator.getAttributeMap().get(cat).get(dt).keySet()) {
- if (attributeMap.containsKey(id.stringValue()) == false) {
- attributeMap.put(id.stringValue(), new HashSet<ContainerAttribute>());
- }
- for (AttributeValue<?> attribute : aggregator.getAttributeMap().get(cat).get(dt).get(id)) {
- attributeMap.get(id.stringValue()).add(new ContainerAttribute(policy, isRoot, attribute));
- }
- }
- }
- }
- }
-
- protected boolean isObjectSupported(Object itemId) {
- if (itemId instanceof Category ||
- itemId instanceof Datatype ||
- itemId instanceof String ||
- itemId instanceof ContainerAttribute) {
- return true;
- }
- return false;
- }
-
- @Override
- public Item getItem(Object itemId) {
- if (this.isObjectSupported(itemId)) {
- return new AttributeItem(itemId);
- }
- return null;
- }
-
- @Override
- public Collection<?> getContainerPropertyIds() {
- return ATTRIBUTE_PROPERTIES;
- }
-
- @Override
- public Collection<?> getItemIds() {
- final Collection<Object> items = new ArrayList<Object>();
- for (Category category : this.mapAttributes.keySet()) {
- items.add(category);
- for (Datatype datatype : this.mapAttributes.get(category).keySet()) {
- items.add(datatype);
- for (String id : this.mapAttributes.get(category).get(datatype).keySet()) {
- items.add(id);
- for (ContainerAttribute attribute : this.mapAttributes.get(category).get(datatype).get(id)) {
- items.add(attribute);
- }
- }
- }
- }
- return Collections.unmodifiableCollection(items);
- }
-
- @Override
- public Property<?> getContainerProperty(Object itemId, Object propertyId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- if (propertyId.equals(PROPERTY_ID)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeItem(itemId), ATTRIBUTEITEM_ID, null);
- }
- if (propertyId.equals(PROPERTY_CATEGORY)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeItem(itemId), ATTRIBUTEITEM_CATEGORY, null);
- }
- if (propertyId.equals(PROPERTY_DATATYPE)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeItem(itemId), ATTRIBUTEITEM_DATATYPE, null);
- }
- if (propertyId.equals(PROPERTY_VALUES)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeItem(itemId), ATTRIBUTEITEM_VALUES, null);
- }
- return null;
- }
-
- @Override
- public Class<?> getType(Object propertyId) {
- if (propertyId.equals(PROPERTY_ID)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_CATEGORY)) {
- return Category.class;
- }
- if (propertyId.equals(PROPERTY_DATATYPE)) {
- return Datatype.class;
- }
- if (propertyId.equals(PROPERTY_VALUES)) {
- return Table.class;
- }
- return null;
- }
-
- @Override
- public int size() {
- return this.mapAttributes.size();
- }
-
- @Override
- public boolean containsId(Object itemId) {
- if (this.isObjectSupported(itemId) == false) {
- return false;
- }
- if (itemId instanceof Category) {
- return this.mapAttributes.containsKey(itemId);
- }
- for (Category category : this.mapAttributes.keySet()) {
- if (itemId instanceof Datatype) {
- return this.mapAttributes.get(category).containsKey(itemId);
- }
- for (Datatype datatype : this.mapAttributes.get(category).keySet()) {
- if (itemId instanceof String) {
- return this.mapAttributes.get(category).get(datatype).containsKey(itemId);
- }
- for (String id : this.mapAttributes.get(category).get(datatype).keySet()) {
- if (itemId instanceof ContainerAttribute) {
- return this.mapAttributes.get(category).get(datatype).get(id).contains(itemId);
- }
- }
- }
- }
- return false;
- }
-
- @Override
- public Item addItem(Object itemId) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Use addItem(Category, Datatype, AttributeValue<?>) instead.");
- }
-
- @Override
- public Object addItem() throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Use addItem(Category, Datatype, AttributeValue<?>) instead.");
- }
-
- @Override
- public boolean addContainerProperty(Object propertyId, Class<?> type,
- Object defaultValue) throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeContainerProperty(Object propertyId)
- throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeAllItems() throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Can't remove all the items. You can remove custom user attributes.");
- }
-
- @Override
- public Collection<?> getChildren(Object itemId) {
- //
- // PLD TODO - this may not work for Datatype
- //
- final Collection<Object> items = new ArrayList<Object>();
- for (Category category : this.mapAttributes.keySet()) {
- for (Datatype datatype : this.mapAttributes.get(category).keySet()) {
- if (itemId instanceof Category) {
- items.add(datatype);
- }
- for (String id : this.mapAttributes.get(category).get(datatype).keySet()) {
- if (itemId instanceof Category ||
- itemId instanceof Datatype) {
- items.add(id);
- items.addAll(this.mapAttributes.get(category).get(datatype).get(id));
- } else if (itemId instanceof String) {
- items.addAll(this.mapAttributes.get(category).get(datatype).get(id));
- }
- }
- }
- }
- return Collections.unmodifiableCollection(items);
- }
-
- @Override
- public Object getParent(Object itemId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Collection<?> rootItemIds() {
- final Collection<Object> items = new ArrayList<Object>();
- items.add(this.mapAttributes.keySet());
- return Collections.unmodifiableCollection(items);
- }
-
- @Override
- public boolean setParent(Object itemId, Object newParentId) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Can't move attributes around. Use addItem(Category, Datatype, Attribute).");
- }
-
- @Override
- public boolean areChildrenAllowed(Object itemId) {
- if (itemId instanceof Category ||
- itemId instanceof Datatype ||
- itemId instanceof String) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed)
- throws UnsupportedOperationException {
- if (itemId instanceof Category ||
- itemId instanceof Datatype ||
- itemId instanceof String) {
- if (areChildrenAllowed) {
- return true;
- }
- return false;
- }
- if (areChildrenAllowed == false) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean isRoot(Object itemId) {
- return this.mapAttributes.containsKey(itemId);
- }
-
- @Override
- public boolean hasChildren(Object itemId) {
- if (itemId instanceof ContainerAttribute) {
- return false;
- }
- if (itemId instanceof Category) {
- if (this.mapAttributes.containsKey(itemId)) {
- return this.mapAttributes.get(itemId).size() > 0;
- }
- return false;
- }
- //
- // PLD TODO - this may not work. Datatype may prove difficult
- // to distinguish which category it is in.
- //
- for (Category category : this.mapAttributes.keySet()) {
- if (itemId instanceof Datatype) {
- if (this.mapAttributes.get(category).containsKey(itemId)) {
- return this.mapAttributes.get(category).get(itemId).size() > 0;
- }
- continue;
- }
- for (Datatype datatype : this.mapAttributes.get(category).keySet()) {
- if (itemId instanceof String) {
- if (this.mapAttributes.get(category).get(datatype).containsKey(itemId)) {
- return this.mapAttributes.get(category).get(datatype).get(itemId).size() > 0;
- }
- continue;
- }
- }
- }
- return false;
- }
-
- @Override
- public boolean removeItem(Object itemId) throws UnsupportedOperationException {
- if (! (itemId instanceof ContainerAttribute)) {
- return false;
- }
- for (Category category : this.mapAttributes.keySet()) {
- for (Datatype datatype : this.mapAttributes.get(category).keySet()) {
- for (String id : this.mapAttributes.get(category).get(datatype).keySet()) {
- if (this.mapAttributes.get(category).get(datatype).get(id).contains(itemId)) {
- return this.mapAttributes.get(category).get(datatype).get(id).remove(itemId);
- }
- }
- }
- }
- return false;
- }
-
- public class AttributeItem implements Item {
- private static final long serialVersionUID = 1L;
- private final Object data;
-
- public AttributeItem(Object data) {
- this.data = data;
- }
-
- public String getId() {
- return null;
- }
-
- public Category getCategory() {
- return null;
- }
-
- public Datatype getDatatype() {
- return null;
- }
-
- public Table getValues() {
- return null;
- }
-
- @Override
- public Property<?> getItemProperty(Object id) {
- return getContainerProperty(this.data, id);
- }
-
- @Override
- public Collection<?> getItemPropertyIds() {
- return getContainerPropertyIds();
- }
-
- @Override
- public boolean addItemProperty(Object id, @SuppressWarnings("rawtypes") Property property) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Attribute container does not support adding new properties");
- }
- @Override
- public boolean removeItemProperty(Object id) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Attribute container does not support removing properties");
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/c68f98c5/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeValueContainer.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeValueContainer.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeValueContainer.java
deleted file mode 100644
index 1074936..0000000
--- a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/AttributeValueContainer.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * 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.model;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.openaz.xacml.admin.jpa.Datatype;
-import org.apache.openaz.xacml.admin.model.AttributeContainer.ContainerAttribute;
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.MethodProperty;
-
-public class AttributeValueContainer extends ItemSetChangeNotifier implements Container.Ordered, Container.ItemSetChangeNotifier {
- private static final long serialVersionUID = 1L;
- private final Datatype datatype; //NOPMD
- private final List<ContainerAttribute> attributes;
-
- /**
- * String identifier of an object's "Value" property.
- */
- public static String PROPERTY_VALUE = "Value";
-
- /**
- * String identifier of an object's "Source" property.
- */
- public static String PROPERTY_SOURCE = "Source";
-
- /**
- * List of the string identifiers for the available properties.
- */
- public static Collection<String> ATTRIBUTEVALUE_PROPERTIES;
-
- private final static Method ATTRIBUTEVALUEITEM_VALUE;
- private final static Method ATTRIBUTEVALUEITEM_SOURCE;
- static {
- ATTRIBUTEVALUE_PROPERTIES = new ArrayList<String>();
- ATTRIBUTEVALUE_PROPERTIES.add(PROPERTY_VALUE);
- ATTRIBUTEVALUE_PROPERTIES.add(PROPERTY_SOURCE);
- ATTRIBUTEVALUE_PROPERTIES = Collections.unmodifiableCollection(ATTRIBUTEVALUE_PROPERTIES);
- try {
- ATTRIBUTEVALUEITEM_VALUE = AttributeValueItem.class.getMethod("getValue", new Class[]{});
- ATTRIBUTEVALUEITEM_SOURCE = AttributeValueItem.class.getMethod("getSource", new Class[]{});
- } catch (final NoSuchMethodException e) {
- throw new RuntimeException("Internal error finding methods in AttributeValueContainer");
- }
- }
-
- public AttributeValueContainer(Datatype datatype, List<ContainerAttribute> attributes) {
- this.datatype = datatype;
- this.attributes = attributes;
- }
-
- public boolean isObjectSupported(Object itemId) {
- return itemId instanceof ContainerAttribute;
- }
-
- @Override
- public Item getItem(Object itemId) {
- if (itemId instanceof ContainerAttribute) {
- return new AttributeValueItem((ContainerAttribute) itemId);
- }
- return null;
- }
-
- @Override
- public Collection<?> getContainerPropertyIds() {
- return ATTRIBUTEVALUE_PROPERTIES;
- }
-
- @Override
- public Collection<?> getItemIds() {
- return Collections.unmodifiableList(this.attributes);
- }
-
- @Override
- public Property<?> getContainerProperty(Object itemId, Object propertyId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- if (propertyId.equals(PROPERTY_VALUE)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeValueItem((ContainerAttribute) itemId), ATTRIBUTEVALUEITEM_VALUE, null);
- }
-
- if (propertyId.equals(PROPERTY_SOURCE)) {
- return new MethodProperty<Object>(getType(propertyId),
- new AttributeValueItem((ContainerAttribute) itemId), ATTRIBUTEVALUEITEM_SOURCE, null);
- }
- return null;
- }
-
- @Override
- public Class<?> getType(Object propertyId) {
- if (propertyId.equals(PROPERTY_VALUE)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_SOURCE)) {
- return String.class;
- }
- return null;
- }
-
- @Override
- public int size() {
- return this.attributes.size();
- }
-
- @Override
- public boolean containsId(Object itemId) {
- return this.attributes.contains(itemId);
- }
-
- @Override
- public Item addItem(Object itemId) throws UnsupportedOperationException {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- return new AttributeValueItem((ContainerAttribute) itemId);
- }
-
- @Override
- public Object addItem() throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Please use addItem(Object itemId) - setup the container attribute first.");
- }
-
- @Override
- public boolean removeItem(Object itemId) throws UnsupportedOperationException {
- if (this.isObjectSupported(itemId) == false) {
- return false;
- }
- throw new UnsupportedOperationException("TODO");
-// return this.attributes.remove(itemId);
- }
-
- @Override
- public boolean addContainerProperty(Object propertyId, Class<?> type,
- Object defaultValue) throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeContainerProperty(Object propertyId)
- throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeAllItems() throws UnsupportedOperationException {
- throw new UnsupportedOperationException("TODO");
-// this.attributes.clear();
-// return true;
- }
-
- @Override
- public Object nextItemId(Object itemId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- int index = this.getItemIndex((ContainerAttribute) itemId);
- if (index == -1 || index >= this.attributes.size()) {
- return null;
- }
- return this.attributes.get(index + 1);
- }
-
- @Override
- public Object prevItemId(Object itemId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- int index = this.getItemIndex((ContainerAttribute) itemId);
- if (index == -1 || index == 0) {
- return null;
- }
- return this.attributes.get(index - 1);
- }
-
- @Override
- public Object firstItemId() {
- if (this.attributes.size() > 0) {
- return this.attributes.get(0);
- }
- return null;
- }
-
- @Override
- public Object lastItemId() {
- if (this.attributes.size() > 0) {
- return this.attributes.get(this.attributes.size() - 1);
- }
- return null;
- }
-
- @Override
- public boolean isFirstId(Object itemId) {
- if (this.attributes.size() > 0) {
- return this.attributes.get(0).equals(itemId);
- }
- return false;
- }
-
- @Override
- public boolean isLastId(Object itemId) {
- if (this.attributes.size() > 0) {
- return this.attributes.get(this.attributes.size() - 1).equals(itemId);
- }
- return false;
- }
-
- @Override
- public Object addItemAfter(Object previousItemId) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Use addItemAfter(Object previousItemId, Object newItemId) - please create the object yourself.");
- }
-
- @Override
- public Item addItemAfter(Object previousItemId, Object newItemId) throws UnsupportedOperationException {
- if (this.isObjectSupported(previousItemId) == false || this.isObjectSupported(newItemId) == false) {
- return null;
- }
- int index = this.getItemIndex((ContainerAttribute) previousItemId);
- if (index >= 0) {
- this.attributes.add(index, (ContainerAttribute) newItemId);
- }
- return null;
- }
-
- protected int getItemIndex(ContainerAttribute itemId) {
- int index;
- for (index = 0; index < this.attributes.size(); index++) {
- if (this.attributes.get(index).equals(itemId)) {
- return index;
- }
- }
- return -1;
- }
-
- public class AttributeValueItem implements Item {
- private static final long serialVersionUID = 1L;
- private final ContainerAttribute attribute;
-
- public AttributeValueItem(ContainerAttribute attribute) {
- this.attribute = attribute;
- }
-
- public String getValue() {
- if (this.attribute == null) {
- return null;
- }
- return this.attribute.value.toString();
- }
-
- public String getSource() {
- if (this.attribute == null) {
- return null;
- }
- return this.attribute.value.toString();
- }
-
- @Override
- public Property<?> getItemProperty(Object id) {
- return getContainerProperty(this.attribute, id);
- }
- @Override
- public Collection<?> getItemPropertyIds() {
- return getContainerPropertyIds();
- }
- @Override
- public boolean addItemProperty(Object id, @SuppressWarnings("rawtypes") Property property) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Attribute Value container does not support adding new properties");
- }
- @Override
- public boolean removeItemProperty(Object id) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Attribute Value container does not support removing properties");
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-openaz/blob/c68f98c5/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/ExpressionContainer.java
----------------------------------------------------------------------
diff --git a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/ExpressionContainer.java b/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/ExpressionContainer.java
deleted file mode 100644
index 30c8670..0000000
--- a/openaz-xacml-pap-admin/src/main/java/org/apache/openaz/xacml/admin/model/ExpressionContainer.java
+++ /dev/null
@@ -1,1215 +0,0 @@
-/*
- * 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.model;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.bind.JAXBElement;
-
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeAssignmentExpressionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeDesignatorType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.AttributeSelectorType;
-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.ExpressionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.FunctionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObjectFactory;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableDefinitionType;
-import oasis.names.tc.xacml._3_0.core.schema.wd_17.VariableReferenceType;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.openaz.xacml.admin.jpa.FunctionArgument;
-import org.apache.openaz.xacml.admin.jpa.FunctionDefinition;
-import org.apache.openaz.xacml.admin.util.JPAUtils;
-import org.apache.openaz.xacml.admin.util.XACMLFunctionValidator;
-import com.vaadin.data.Container;
-import com.vaadin.data.Item;
-import com.vaadin.data.Property;
-import com.vaadin.data.util.MethodProperty;
-
-public class ExpressionContainer extends ItemSetChangeNotifier implements Container.Hierarchical, Container.ItemSetChangeNotifier {
- private static final long serialVersionUID = 1L;
- private static Log logger = LogFactory.getLog(ExpressionContainer.class);
-
- /**
- * String identifier of a file's "name" property.
- */
- public static String PROPERTY_NAME = "Name";
-
- /**
- * String identifier of an object's "id" property.
- */
- public static String PROPERTY_ID = "Id";
-
- /**
- * String identifier of an object's "datatype" property.
- */
- public static String PROPERTY_DATATYPE_SHORT = "shortDatatype";
-
- /**
- * String identifier of an object's "id" property.
- */
- public static String PROPERTY_ID_SHORT = "shortId";
-
- /**
- * String identifier of an object's "datatype" property.
- */
- public static String PROPERTY_DATATYPE = "Datatype";
-
- /**
- * List of the string identifiers for the available properties.
- */
- public static Collection<String> EXPRESSION_PROPERTIES;
-
- private final static Method EXPRESSIONITEM_NAME;
-
- private final static Method EXPRESSIONITEM_ID;
-
- private final static Method EXPRESSIONITEM_DATATYPE;
-
- private final static Method EXPRESSIONITEM_ID_SHORT;
-
- private final static Method EXPRESSIONITEM_DATATYPE_SHORT;
-
- static {
- EXPRESSION_PROPERTIES = new ArrayList<String>();
- EXPRESSION_PROPERTIES.add(PROPERTY_NAME);
- EXPRESSION_PROPERTIES.add(PROPERTY_ID);
- EXPRESSION_PROPERTIES.add(PROPERTY_DATATYPE);
- EXPRESSION_PROPERTIES.add(PROPERTY_ID_SHORT);
- EXPRESSION_PROPERTIES.add(PROPERTY_DATATYPE_SHORT);
- EXPRESSION_PROPERTIES = Collections.unmodifiableCollection(EXPRESSION_PROPERTIES);
- try {
- EXPRESSIONITEM_NAME = ExpressionItem.class.getMethod("getName", new Class[]{});
- EXPRESSIONITEM_ID = ExpressionItem.class.getMethod("getId", new Class[]{});
- EXPRESSIONITEM_DATATYPE = ExpressionItem.class.getMethod("getDatatype", new Class[]{});
- EXPRESSIONITEM_ID_SHORT = ExpressionItem.class.getMethod("getIdShort", new Class[]{});
- EXPRESSIONITEM_DATATYPE_SHORT = ExpressionItem.class.getMethod("getDatatypeShort", new Class[]{});
- } catch (final NoSuchMethodException e) {
- throw new RuntimeException(
- "Internal error finding methods in PolicyContainer");
- }
- }
-
- protected class ApplyParent {
- ApplyType apply;
- FunctionArgument argument;
-
- public ApplyParent(ApplyType apply, FunctionArgument argument) {
- this.apply = apply;
- this.argument = argument;
- }
-
- public ApplyType getApply() {
- return apply;
- }
-
- public void setApply(ApplyType apply) {
- this.apply = apply;
- }
-
- public FunctionArgument getArgument() {
- return argument;
- }
-
- public void setArgument(FunctionArgument argument) {
- this.argument = argument;
- }
- }
- //
- // Our parent object information and which argument we are
- // from our parent (relevant to the Apply).
- //
- private final Object parent;
- private final FunctionArgument argument;
- //
- // The root object of the expression
- //
- private Object root;
- //
- // Our helper tables for organization purposes and to
- // make sure the correct functions/datatypes are being
- // setup.
- //
- private Map<ApplyType, ApplyParent> applys = new HashMap<ApplyType, ApplyParent>();
- private Map<FunctionType, ApplyParent> functions = new HashMap<FunctionType, ApplyParent>();
- private Map<AttributeValueType, ApplyParent> values = new HashMap<AttributeValueType, ApplyParent>();
- private Map<AttributeDesignatorType, ApplyParent> designators = new HashMap<AttributeDesignatorType, ApplyParent>();
- private Map<AttributeSelectorType, ApplyParent> selectors = new HashMap<AttributeSelectorType, ApplyParent>();
- private Map<VariableReferenceType, ApplyParent> variables = new HashMap<VariableReferenceType, ApplyParent>();
- private Map<ExpressionType, ApplyParent> expressions = new HashMap<ExpressionType, ApplyParent>();
-
- public ExpressionContainer(Object parent, Object root, FunctionArgument argument) {
- super();
- this.setContainer(this);
- this.parent = parent;
- this.root = root;
- this.argument = argument;
- this.initialize();
- }
-
- private void initialize() {
- if (logger.isTraceEnabled()) {
- logger.trace("Initializing: " + this.parent + " " + this.argument + " " + this.root);
- }
- //
- // Make sure we support the parent object
- //
- @SuppressWarnings("unused")
- JAXBElement<?> rootElement = null;
- if (this.parent instanceof ConditionType) {
- rootElement = ((ConditionType) this.parent).getExpression();
- } else if (this.parent instanceof VariableDefinitionType) {
- rootElement = ((VariableDefinitionType) this.parent).getExpression();
- } else if (this.parent instanceof AttributeAssignmentExpressionType) {
- rootElement = ((AttributeAssignmentExpressionType) this.parent).getExpression();
- } else if (this.parent instanceof ApplyType) {
- //
- // They must tell us which argument we are
- //
- if (this.argument == null) {
- throw new IllegalArgumentException("Must supply Argument object when editing a parent ApplyType's child node");
- }
- //
- // Finish the initialization
- //
- this.initializeRoot();
- } else {
- throw new IllegalArgumentException("Unsupported Parent Object: " + this.parent.getClass().getCanonicalName());
- }
- /*
- //
- // Check if there actually is a root
- //
- if (rootElement == null || rootElement.getValue() == null) {
- //
- // Creating a new one
- //
- return;
- }
- //
- // Save the root
- //
- this.root = rootElement.getValue();
- */
- //
- // Finish initializing
- //
- this.initializeRoot();
- }
-
- private void initializeRoot() {
- //
- // Sanity check
- //
- if (this.root == null) {
- return;
- }
- //
- // Figure out the expression type
- //
- if (this.root instanceof ApplyType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Apply");
- }
- //
- // Save it
- //
- this.applys.put((ApplyType) this.root, null);
- //
- // Determine the function for this Apply
- //
- Map<String, FunctionDefinition> functions = JPAUtils.getFunctionIDMap();
- FunctionDefinition function = functions.get(((ApplyType) this.root).getFunctionId());
- if (function == null) {
- logger.warn("root apply does not have a function defined");
- return;
- }
- //
- // Bring in its children
- //
- this.initializeChildren((ApplyType) this.root, function);
- } else if (this.root instanceof AttributeValueType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Attribute Value");
- }
- //
- // Save it
- //
- this.values.put((AttributeValueType) this.root, null);
- } else if (this.root instanceof AttributeDesignatorType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Attribute Designator");
- }
- //
- // Save it
- //
- this.designators.put((AttributeDesignatorType) this.root, null);
- } else if (this.root instanceof AttributeSelectorType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Attribute Selector");
- }
- //
- // Save it
- //
- this.selectors.put((AttributeSelectorType) this.root, null);
- } else if (this.root instanceof VariableReferenceType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Variable Reference");
- }
- //
- // Save it
- //
- this.variables.put((VariableReferenceType) this.root, null);
- } else if (this.root instanceof FunctionType) {
- if (logger.isTraceEnabled()) {
- logger.trace("Root Is Function");
- }
- //
- // Save it - Really? I don't think the root would ever be a function.
- //
- this.functions.put((FunctionType) this.root, null);
- } else {
- throw new IllegalArgumentException("Unsupported Expression Root Item: " + this.root.getClass().getCanonicalName());
- }
- }
-
- private void initializeChildren(ApplyType apply, FunctionDefinition function) {
- int index = 1;
- for (JAXBElement<?> child : apply.getExpression()) {
- //
- // Validate the child
- //
- if (child.getValue() == null) {
- logger.warn("child element " + index + "has a null object.");
- index++;
- continue;
- }
- if (logger.isTraceEnabled()) {
- logger.trace("Child " + index + " is " + child.getValue());
- }
- //
- // Get the argument for this child
- //
- if (function == null) {
- throw new IllegalArgumentException("Apply has children but no function defined.");
- }
- FunctionArgument argument = XACMLFunctionValidator.getFunctionArgument(index, function);
- if (logger.isTraceEnabled()) {
- logger.trace("Child's argument is: " + argument);
- }
- if (argument == null) {
- //throw new Exception("Unable to find function argument: " + index + " " + function.getId() + " " + function.getShortname());
- return;
- }
- //
- // See if its another apply type
- //
- if (child.getValue() instanceof ApplyType) {
- //
- // Save it
- //
- this.applys.put((ApplyType) child.getValue(), new ApplyParent(apply, argument));
- //
- // Get its function information
- //
- Map<String, FunctionDefinition> functions = JPAUtils.getFunctionIDMap();
- FunctionDefinition childFunction = functions.get(((ApplyType) child.getValue()).getFunctionId());
- if (childFunction == null) {
- logger.warn("Apply object " + index + " does not have a function defined");
- } else {
- //
- // Bring in its children
- //
- this.initializeChildren((ApplyType) child.getValue(), childFunction);
- }
- } else if (child.getValue() instanceof AttributeValueType) {
- //
- // Save it
- //
- this.values.put((AttributeValueType) child.getValue(), new ApplyParent(apply, argument));
- } else if (child.getValue() instanceof AttributeDesignatorType) {
- //
- // Save it
- //
- this.designators.put((AttributeDesignatorType) child.getValue(), new ApplyParent(apply, argument));
- } else if (child.getValue() instanceof AttributeSelectorType) {
- //
- // Save it
- //
- this.selectors.put((AttributeSelectorType) child.getValue(), new ApplyParent(apply, argument));
- } else if (child.getValue() instanceof VariableReferenceType) {
- //
- // Save it
- //
- this.variables.put((VariableReferenceType) child.getValue(), new ApplyParent(apply, argument));
- } else if (child.getValue() instanceof FunctionType) {
- //
- // Save it
- //
- this.functions.put((FunctionType) child.getValue(), new ApplyParent(apply, argument));
- } else if (child.getValue() instanceof ExpressionType) {
- //
- // Save it
- //
- this.expressions.put((ExpressionType) child.getValue(), new ApplyParent(apply, argument));
- } else {
- logger.error("Unknown child type: " + child.getClass().getCanonicalName());
- }
- index++;
- }
- }
-
- protected boolean isObjectSupported(Object itemId) {
- if (itemId instanceof ApplyType ||
- itemId instanceof AttributeValueType ||
- itemId instanceof AttributeDesignatorType ||
- itemId instanceof AttributeSelectorType ||
- itemId instanceof VariableReferenceType ||
- itemId instanceof FunctionType ||
- itemId instanceof ExpressionType) {
- return true;
- }
- return false;
- }
-
- protected boolean isParentObjectSupport(Object parent) {
- if (parent instanceof ApplyType ||
- parent instanceof ConditionType ||
- parent instanceof VariableDefinitionType ||
- parent instanceof AttributeAssignmentExpressionType) {
- return true;
- }
- return false;
- }
-
- public void updateItem(Object itemId) {
- //
- // Sanity check
- //
- if (this.isObjectSupported(itemId) == false) {
- return;// null;
- }
- //
- // Notify - the real reason for this function
- //
- this.fireItemSetChange();
- //
- // Return the item
- //
- //return new ExpressionItem(itemId);
- }
-
- @Override
- public Item getItem(Object itemId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- return new ExpressionItem(itemId);
- }
-
- @Override
- public Collection<?> getContainerPropertyIds() {
- return EXPRESSION_PROPERTIES;
- }
-
- @Override
- public Collection<?> getItemIds() {
- final Collection<Object> items = new ArrayList<Object>();
- if (this.root != null) {
- //
- // Add the root object
- //
- items.add(this.root);
- //
- // If its an apply, it could have children
- //
- if (this.root instanceof ApplyType) {
- items.add(this.getChildrenIds((ApplyType) this.root, true));
- }
- }
- if (logger.isTraceEnabled()) {
- logger.trace("getItemIds (" + items.size() + "):" + items);
- }
- return Collections.unmodifiableCollection(items);
- }
-
- protected Collection<?> getChildrenIds(ApplyType apply, boolean recursive) {
- Collection<Object> items = new ArrayList<Object>();
- for (JAXBElement<?> child : apply.getExpression()) {
- //
- // Make sure there's a value
- //
- if (child.getValue() == null) {
- continue;
- }
- //
- // What kind is it?
- //
- if (child.getValue() instanceof ApplyType) {
- items.add(child.getValue());
- //
- // Do we add its children?
- //
- if (recursive) {
- items.addAll(this.getChildrenIds((ApplyType) child.getValue(), true));
- }
- } else if (child.getValue() instanceof AttributeValueType) {
- items.add(child.getValue());
- } else if (child.getValue() instanceof AttributeDesignatorType) {
- items.add(child.getValue());
- } else if (child.getValue() instanceof AttributeSelectorType) {
- items.add(child.getValue());
- } else if (child.getValue() instanceof VariableReferenceType) {
- items.add(child.getValue());
- } else if (child.getValue() instanceof FunctionType) {
- items.add(child.getValue());
- } else if (child.getValue() instanceof ExpressionType) {
- items.add(child.getValue());
- }
- }
- if (logger.isTraceEnabled()) {
- logger.trace("getChildrenIds " + apply.getFunctionId() + " (" + items.size() + "):" + items);
- }
- return items;
- }
-
- @Override
- public Property<?> getContainerProperty(Object itemId, Object propertyId) {
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- if (propertyId.equals(PROPERTY_NAME)) {
- return new MethodProperty<Object>(getType(propertyId),
- new ExpressionItem(itemId), EXPRESSIONITEM_NAME, null);
- }
-
- if (propertyId.equals(PROPERTY_ID)) {
- return new MethodProperty<Object>(getType(propertyId),
- new ExpressionItem(itemId), EXPRESSIONITEM_ID, null);
- }
-
- if (propertyId.equals(PROPERTY_DATATYPE)) {
- return new MethodProperty<Object>(getType(propertyId),
- new ExpressionItem(itemId), EXPRESSIONITEM_DATATYPE, null);
- }
-
- if (propertyId.equals(PROPERTY_ID_SHORT)) {
- return new MethodProperty<Object>(getType(propertyId),
- new ExpressionItem(itemId), EXPRESSIONITEM_ID_SHORT, null);
- }
-
- if (propertyId.equals(PROPERTY_DATATYPE_SHORT)) {
- return new MethodProperty<Object>(getType(propertyId),
- new ExpressionItem(itemId), EXPRESSIONITEM_DATATYPE_SHORT, null);
- }
-
- return null;
- }
-
- @Override
- public Class<?> getType(Object propertyId) {
- if (propertyId.equals(PROPERTY_NAME)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_ID)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_DATATYPE)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_ID_SHORT)) {
- return String.class;
- }
- if (propertyId.equals(PROPERTY_DATATYPE_SHORT)) {
- return String.class;
- }
- return null;
- }
-
- @Override
- public int size() {
- int size = 0;
- size += this.applys.size();
- size += this.designators.size();
- size += this.functions.size();
- size += this.selectors.size();
- size += this.values.size();
- size += this.variables.size();
- size += this.expressions.size();
- return size;
- }
-
- @Override
- public boolean containsId(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("containsId: " + itemId);
- }
- if (itemId instanceof ApplyType) {
- return this.applys.containsKey(itemId);
- }
- if (itemId instanceof AttributeValueType) {
- return this.values.containsKey(itemId);
- }
- if (itemId instanceof AttributeDesignatorType) {
- return this.designators.containsKey(itemId);
- }
- if (itemId instanceof AttributeSelectorType) {
- return this.selectors.containsKey(itemId);
- }
- if (itemId instanceof VariableReferenceType) {
- return this.variables.containsKey(itemId);
- }
- if (itemId instanceof FunctionType) {
- return this.functions.containsKey(itemId);
- }
- if (itemId instanceof ExpressionType) {
- return this.expressions.containsKey(itemId);
- }
- return false;
- }
-
- @Override
- public Item addItem(Object itemId) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Please use the addItem(Object, Object) method instead.");
- }
-
- @Override
- public Object addItem() throws UnsupportedOperationException {
- throw new UnsupportedOperationException("use addItem(Object itemId)");
- }
-
- public Item addItem(Object itemId, ApplyType parent, FunctionArgument argument) throws UnsupportedOperationException {
- if (logger.isTraceEnabled()) {
- logger.trace("addItem: " + itemId + " " + parent + " " + argument);
- }
- //
- // Make sure we support the object
- //
- if (this.isObjectSupported(itemId) == false) {
- return null;
- }
- //
- // Is is a root?
- //
- if (parent == null) {
- //
- // Setting root
- //
- if (this.root != null) {
- throw new UnsupportedOperationException("Cannot add another root item. Remove the current root first.");
- }
- //
- // Save the root information
- //
- this.root = itemId;
- //
- // Add its children
- //
- this.initializeRoot();
- //
- // Add it to our root container
- //
- if (this.parent instanceof ApplyType) {
- ((ApplyType) this.parent).getExpression().add(this.createElement(this.root));
- } else if (this.parent instanceof ConditionType) {
- ((ConditionType) this.parent).setExpression(this.createElement(this.root));
- } else if (this.parent instanceof VariableDefinitionType) {
- ((VariableDefinitionType) this.parent).setExpression(this.createElement(this.root));
- } else if (this.parent instanceof AttributeAssignmentExpressionType) {
- ((AttributeAssignmentExpressionType) this.parent).setExpression(this.createElement(this.root));
- } else {
- logger.error("unknown parent class: " + this.parent.getClass().getCanonicalName());
- }
- //
- // Notify that we changed
- //
- this.fireItemSetChange();
- //
- // Return new item
- //
- return new ExpressionItem(this.root);
- }
- //
- // Check what kind of item this is
- //
- if (itemId instanceof ApplyType) {
- //
- this.applys.put((ApplyType) itemId, new ApplyParent(parent, argument));
- ((ApplyType) parent).getExpression().add(new ObjectFactory().createApply((ApplyType) itemId));
- //
- // Get its function information
- //
- Map<String, FunctionDefinition> functions = JPAUtils.getFunctionIDMap();
- FunctionDefinition childFunction = functions.get(((ApplyType) itemId).getFunctionId());
- if (childFunction == null) {
- //
- // NO function defined
- //
- logger.warn("no function defined for apply being added.");
- } else {
- //
- // Add its children
- //
- this.initializeChildren((ApplyType) itemId, childFunction);
- }
- } else if (itemId instanceof AttributeValueType) {
- //
- this.values.put((AttributeValueType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createAttributeValue((AttributeValueType) itemId));
- //
- } else if (itemId instanceof AttributeDesignatorType) {
- //
- this.designators.put((AttributeDesignatorType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createAttributeDesignator((AttributeDesignatorType) itemId));
- //
- } else if (itemId instanceof AttributeSelectorType) {
- //
- this.selectors.put((AttributeSelectorType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createAttributeSelector((AttributeSelectorType) itemId));
- //
- } else if (itemId instanceof VariableReferenceType) {
- //
- this.variables.put((VariableReferenceType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createVariableReference((VariableReferenceType) itemId));
- //
- } else if (itemId instanceof FunctionType) {
- //
- this.functions.put((FunctionType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createFunction((FunctionType) itemId));
- //
- } else if (itemId instanceof ExpressionType) {
- //
- this.expressions.put((ExpressionType) itemId, new ApplyParent(parent, argument));
- parent.getExpression().add(new ObjectFactory().createExpression((ExpressionType) itemId));
- } else {
- logger.error("unknown itemId class: " + itemId.getClass().getCanonicalName());
- return null;
- }
- //
- // Notify
- //
- this.fireItemSetChange();
- return new ExpressionItem(itemId);
- }
-
- private JAXBElement<?> createElement(Object item) {
- if (item instanceof ApplyType) {
- return new ObjectFactory().createApply((ApplyType) item);
- } else if (item instanceof AttributeValueType) {
- return new ObjectFactory().createAttributeValue((AttributeValueType) item);
- } else if (item instanceof AttributeDesignatorType) {
- return new ObjectFactory().createAttributeDesignator((AttributeDesignatorType) item);
- } else if (item instanceof AttributeSelectorType) {
- return new ObjectFactory().createAttributeSelector((AttributeSelectorType) item);
- } else if (item instanceof VariableReferenceType) {
- return new ObjectFactory().createVariableReference((VariableReferenceType) item);
- } else if (item instanceof FunctionType) {
- return new ObjectFactory().createFunction((FunctionType) item);
- } else if (item instanceof ExpressionType) {
- return new ObjectFactory().createExpression((ExpressionType) item);
- }
- return null;
- }
-
- @Override
- public boolean addContainerProperty(Object propertyId, Class<?> type,
- Object defaultValue) throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeContainerProperty(Object propertyId)
- throws UnsupportedOperationException {
- return false;
- }
-
- @Override
- public boolean removeAllItems() throws UnsupportedOperationException {
- if (logger.isTraceEnabled()) {
- logger.trace("removeAllItems: ");
- }
- boolean result = this.doRemoveAllItems();
- if (result == false) {
- return false;
- }
- //
- // Notify
- //
- this.fireItemSetChange();
- //
- // Done
- //
- return true;
- }
-
- public boolean doRemoveAllItems() throws UnsupportedOperationException {
- if (logger.isTraceEnabled()) {
- logger.trace("doRemoveAllItems: ");
- }
- //
- // Removing the root item, make sure its removed from
- // the parent.
- //
- if (this.parent instanceof ConditionType) {
- ((ConditionType) this.parent).setExpression(null);
- } else if (this.parent instanceof VariableDefinitionType) {
- ((VariableDefinitionType) this.parent).setExpression(null);
- } else if (this.parent instanceof AttributeAssignmentExpressionType) {
- ((AttributeAssignmentExpressionType) this.parent).setExpression(null);
- } else if (this.parent instanceof ApplyType) {
- //
- // TODO ?? Special case
- //
- return false;
- } else {
- return false;
- }
- //
- // Null our root
- //
- this.root = null;
- //
- // Clear out our maps
- //
- this.applys.clear();
- this.designators.clear();
- this.functions.clear();
- this.values.clear();
- this.selectors.clear();
- this.variables.clear();
- this.expressions.clear();
- //
- // Done
- //
- return true;
- }
-
- @Override
- public Collection<?> getChildren(Object itemId) {
- final Collection<Object> items = new ArrayList<Object>();
- if (itemId instanceof ApplyType) {
- items.addAll(this.getChildrenIds((ApplyType) itemId, false));
- }
- if (logger.isTraceEnabled()) {
- logger.trace("getChildren " + itemId + " (" + items.size() + "):" + items);
- }
- return Collections.unmodifiableCollection(items);
- }
-
- public FunctionArgument getArgument(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("getArgument: " + itemId);
- }
- //
- // First check if its a root
- //
- if (this.isRoot(itemId)) {
- return null;
- }
- //
- // Not a root - should be in the maps
- //
- if (itemId instanceof ApplyType) {
- return this.applys.get(itemId).getArgument();
- }
- if (itemId instanceof AttributeValueType) {
- return this.values.get(itemId).getArgument();
- }
- if (itemId instanceof AttributeDesignatorType) {
- return this.designators.get(itemId).getArgument();
- }
- if (itemId instanceof AttributeSelectorType) {
- return this.selectors.get(itemId).getArgument();
- }
- if (itemId instanceof VariableReferenceType) {
- return this.variables.get(itemId).getArgument();
- }
- if (itemId instanceof FunctionType) {
- return this.functions.get(itemId).getArgument();
- }
- if (itemId instanceof ExpressionType) {
- return this.expressions.get(itemId).getArgument();
- }
- return null;
- }
-
- @Override
- public Object getParent(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("getParent: " + itemId);
- }
- //
- // First check if its a root
- //
- if (this.isRoot(itemId)) {
- return null;
- }
- //
- // Not a root - should be in the maps
- //
- if (itemId instanceof ApplyType) {
- return this.applys.get(itemId).getApply();
- }
- if (itemId instanceof AttributeValueType) {
- return this.values.get(itemId).getApply();
- }
- if (itemId instanceof AttributeDesignatorType) {
- return this.designators.get(itemId).getApply();
- }
- if (itemId instanceof AttributeSelectorType) {
- return this.selectors.get(itemId).getApply();
- }
- if (itemId instanceof VariableReferenceType) {
- return this.variables.get(itemId).getApply();
- }
- if (itemId instanceof FunctionType) {
- return this.functions.get(itemId).getApply();
- }
- if (itemId instanceof ExpressionType) {
- return this.expressions.get(itemId).getApply();
- }
- return null;
- }
-
- @Override
- public Collection<?> rootItemIds() {
- final Collection<Object> items = new ArrayList<Object>();
- if (this.root != null) {
- items.add(this.root);
- }
- if (logger.isTraceEnabled()) {
- logger.trace("rootItemIds " + " (" + items.size() + "):" + items);
- }
- return Collections.unmodifiableCollection(items);
- }
-
- @Override
- public boolean setParent(Object itemId, Object newParentId) throws UnsupportedOperationException {
- //
- // TODO we can support this later
- //
- throw new UnsupportedOperationException("Should we support this? Can be tricky. Most likely user dragging an item from one area to another. For now, use removeItem, addItem.");
- }
-
- @Override
- public boolean areChildrenAllowed(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("areChildrenAllowed: " + itemId);
- }
- if (itemId instanceof ApplyType) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed)
- throws UnsupportedOperationException {
- if (itemId instanceof ApplyType && areChildrenAllowed) {
- return true;
- }
- if (! areChildrenAllowed) {
- return true;
- }
- return false;
- }
-
- @Override
- public boolean isRoot(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("isRoot: " + itemId);
- }
- if (itemId == null) {
- logger.error("isRoot itemId is NULL");
- }
- return this.root == itemId;
- }
-
- @Override
- public boolean hasChildren(Object itemId) {
- if (logger.isTraceEnabled()) {
- logger.trace("hasChildren: " + itemId);
- }
- if (itemId instanceof ApplyType) {
- return ((ApplyType)itemId).getExpression().size() > 0;
- }
- return false;
- }
-
- @Override
- public boolean removeItem(Object itemId) throws UnsupportedOperationException {
- if (logger.isTraceEnabled()) {
- logger.trace("removeItem: " + itemId);
- }
- //
- // Check if they are removing the root
- //
- if (this.root == itemId) {
- //
- // Removing the root item, make sure its removed from
- // the parent.
- //
- boolean result = this.doRemoveAllItems();
- if (result == false) {
- return false;
- }
- //
- // Notify
- //
- this.fireItemSetChange();
- return true;
- }
- //
- // There should be a parent
- //
- ApplyParent parent = null;
- //
- // Remove the item from the maps
- //
- if (itemId instanceof ApplyType) {
- parent = this.applys.get(itemId);
- if (parent == null) {
- return false;
- }
- if (this.applys.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof AttributeValueType) {
- parent = this.values.get(itemId);
- if (this.values.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof AttributeDesignatorType) {
- parent = this.designators.get(itemId);
- if (this.designators.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof AttributeSelectorType) {
- parent = this.selectors.get(itemId);
- if (this.selectors.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof VariableReferenceType) {
- parent = this.variables.get(itemId);
- if (this.variables.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof FunctionType) {
- parent = this.functions.get(itemId);
- if (this.functions.remove(itemId) == null) {
- return false;
- }
- } else if (itemId instanceof ExpressionType) {
- parent = this.expressions.get(itemId);
- if (this.expressions.remove(itemId) != null) {
- return false;
- }
- } else {
- return false;
- }
- //
- // Remove it from the parent Apply
- //
- boolean removed = false;
- for (JAXBElement<?> element : parent.getApply().getExpression()) {
- if (element.getValue().equals(itemId)) {
- if (parent.getApply().getExpression().remove(element)) {
- removed = true;
- break;
- }
- break;
- }
- }
- if (! removed) {
- //
- // Out of sync
- //
- logger.warn("Removing item from parent returned false, although we were able to remove it from our maps.");
- }
- //
- // Notify
- //
- this.fireItemSetChange();
- return true;
- }
-
- public class ExpressionItem implements Item {
- private static final long serialVersionUID = 1L;
- private final Object data;
-
- public ExpressionItem(Object data) {
- this.data = data;
- }
-
- public String getName() {
- if (this.data instanceof ApplyType) {
- if (((ApplyType) this.data).getDescription() != null) {
- return "Apply - " + ((ApplyType) this.data).getDescription();
- }
- return "Apply";
- }
- if (this.data instanceof AttributeValueType) {
- return "Attribute Value";
- }
- if (this.data instanceof AttributeDesignatorType) {
- return "Attribute Designator";
- }
- if (this.data instanceof AttributeSelectorType) {
- return "Attribute Selector";
- }
- if (this.data instanceof VariableReferenceType) {
- return "Variable Reference";
- }
- if (this.data instanceof FunctionType) {
- return "Function";
- }
- if (this.data instanceof ExpressionType) {
- return "<Argument Placeholder>";
- }
- return null;
- }
-
- public String getId() {
- if (this.data instanceof ApplyType) {
- return ((ApplyType) this.data).getFunctionId();
- }
- if (this.data instanceof AttributeValueType) {
- StringBuilder builder = new StringBuilder();
- for (Object content : ((AttributeValueType) this.data).getContent()) {
- builder.append(content);
- }
- return builder.toString();
- }
- if (this.data instanceof AttributeDesignatorType) {
- return ((AttributeDesignatorType) this.data).getAttributeId();
- }
- if (this.data instanceof AttributeSelectorType) {
- return ((AttributeSelectorType) this.data).getPath();
- }
- if (this.data instanceof VariableReferenceType) {
- return ((VariableReferenceType) this.data).getVariableId();
- }
- if (this.data instanceof FunctionType) {
- return ((FunctionType) this.data).getFunctionId();
- }
- return null;
- }
-
- public String getIdShort() {
- String id = this.getId();
- if (id == null) {
- return id;
- }
- //
- // Make it short
- //
- String[] parts = id.split("[:]");
-
- if (parts != null && parts.length > 0) {
- return parts[parts.length - 1];
- }
- return id;
- }
-
- public String getDatatype() {
- if (this.data instanceof ApplyType) {
-
- Map<String, FunctionDefinition> map = JPAUtils.getFunctionIDMap();
- FunctionDefinition function = map.get(((ApplyType) this.data).getFunctionId());
- if (function != null) {
- return function.getDatatypeBean().getXacmlId();
- }
- }
- if (this.data instanceof AttributeValueType) {
- return ((AttributeValueType) this.data).getDataType();
- }
- if (this.data instanceof AttributeDesignatorType) {
- return ((AttributeDesignatorType) this.data).getDataType();
- }
- if (this.data instanceof AttributeSelectorType) {
- return ((AttributeSelectorType) this.data).getDataType();
- }
-
- /*
- if (this.data instanceof VariableReferenceType) {
- if (this.function instanceof FunctionArgument) {
- return ((FunctionArgument) this.function).getDatatypeBean().getXacmlId();
- }
- }
- */
- /*
- if (this.data instanceof FunctionType) {
- if (this.function instanceof FunctionArgument) {
- return ((FunctionArgument) this.function).getDatatypeBean().getXacmlId();
- }
- }
- */
- return null;
- }
-
- public String getDatatypeShort() {
- String dt = this.getDatatype();
- if (dt == null) {
- return dt;
- }
- //
- // Get short part
- //
- int index = dt.lastIndexOf('#');
- if (index == -1) {
- String[] parts = dt.split("[:]");
-
- if (parts != null && parts.length > 0) {
- return parts[parts.length - 1];
- }
- } else {
- return dt.substring(index + 1);
- }
- return dt;
- }
-
- @Override
- public Property<?> getItemProperty(Object id) {
- return getContainerProperty(this.data, id);
- }
- @Override
- public Collection<?> getItemPropertyIds() {
- return getContainerPropertyIds();
- }
- @Override
- public boolean addItemProperty(Object id, @SuppressWarnings("rawtypes") Property property) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Expression container does not support adding new properties");
- }
- @Override
- public boolean removeItemProperty(Object id) throws UnsupportedOperationException {
- throw new UnsupportedOperationException("Expression container does not support removing properties");
- }
- }
-}