Author: sohil.shah(a)jboss.com
Date: 2009-08-06 12:05:18 -0400 (Thu, 06 Aug 2009)
New Revision: 13694
Modified:
modules/authorization/trunk/agent/src/main/java/org/jboss/security/authz/agent/services/EnforcementStateGenerator.java
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/Attribute.java
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/AttributeExpression.java
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/AttributeDesignatorUtil.java
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/JAXBEncoder.java
modules/authorization/trunk/policy-server/src/main/resources/policy.hbm.xml
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRuleManager.java
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRules.java
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/provisioning/TestRelationalDBPolicyStore.java
Log:
Started Hibernate based RelationalDBPolicyStore implementation
* Hibernate mapping for the Policy graph done and tested
Modified:
modules/authorization/trunk/agent/src/main/java/org/jboss/security/authz/agent/services/EnforcementStateGenerator.java
===================================================================
---
modules/authorization/trunk/agent/src/main/java/org/jboss/security/authz/agent/services/EnforcementStateGenerator.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/agent/src/main/java/org/jboss/security/authz/agent/services/EnforcementStateGenerator.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -146,7 +146,7 @@
Attribute attribute = new Attribute();
attribute.setUri(XACMLConstants.ATTRIBUTEID_RESOURCE_ID);
- attribute.setDatatType(XMLSchemaConstants.DATATYPE_STRING);
+ attribute.setDataType(XMLSchemaConstants.DATATYPE_STRING);
attribute.setValue(uri);
uriResource.addAttribute(attribute);
@@ -164,7 +164,7 @@
Attribute customAttribute = new Attribute();
customAttribute.setUri(name);
- customAttribute.setDatatType(XMLSchemaConstants.DATATYPE_STRING);
+ customAttribute.setDataType(XMLSchemaConstants.DATATYPE_STRING);
customAttribute.setValue(value);
custom.addAttribute(customAttribute);
}
Modified:
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/Attribute.java
===================================================================
---
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/Attribute.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/Attribute.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -38,7 +38,7 @@
/**
* dataType of the value of this Attribute
*/
- private String datatType = null;
+ private String dataType = null;
/**
* Value of this Attribute
@@ -63,7 +63,7 @@
public Attribute(String uri, String dataType, String value)
{
this.uri = uri;
- this.datatType = dataType;
+ this.dataType = dataType;
this.value = value;
}
@@ -71,18 +71,18 @@
*
* @return
*/
- public String getDatatType()
+ public String getDataType()
{
- return datatType;
+ return dataType;
}
/**
*
* @param datatType
*/
- public void setDatatType(String datatType)
+ public void setDataType(String datatType)
{
- this.datatType = datatType;
+ this.dataType = datatType;
}
/**
Modified:
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/AttributeExpression.java
===================================================================
---
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/AttributeExpression.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/model/AttributeExpression.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -23,73 +23,74 @@
package org.jboss.security.authz.model;
/**
- * Represents an logic expression applied such that the specified Function is applied
with Value of the specified Attribute as the Predicate
+ * Represents an logic expression applied such that the specified Function is
+ * applied with Value of the specified Attribute as the Predicate
*
* @author <a href="mailto:sshah@redhat.com">Sohil Shah</a>
- *
+ *
*/
public class AttributeExpression extends Expression
{
- private String functionId = null;
- private Attribute attribute = null;
- private boolean designatorMustBePresent = false; //mustbepresent by default
-
- public AttributeExpression()
- {
-
- }
+ private String functionId = null;
+ private Attribute attribute = null;
+ private boolean designatorMustBePresent = false; // mustbepresent by default
- /**
- *
- * @return
- */
- public Attribute getAttribute()
- {
- return attribute;
- }
+ public AttributeExpression()
+ {
- /**
- *
- * @param attribute
- */
- public void setAttribute(Attribute attribute)
- {
- this.attribute = attribute;
- }
+ }
- /**
- *
- * @return
- */
- public String getFunctionId()
- {
- return functionId;
- }
+ /**
+ *
+ * @return
+ */
+ public Attribute getAttribute()
+ {
+ return attribute;
+ }
- /**
- *
- * @param functionId
- */
- public void setFunctionId(String functionId)
- {
- this.functionId = functionId;
- }
+ /**
+ *
+ * @param attribute
+ */
+ public void setAttribute(Attribute attribute)
+ {
+ this.attribute = attribute;
+ }
- /**
- *
- * @return
- */
- public boolean designatorMustBePresent()
- {
- return designatorMustBePresent;
- }
+ /**
+ *
+ * @return
+ */
+ public String getFunctionId()
+ {
+ return functionId;
+ }
- /**
- *
- * @param designatorMustBePresent
- */
- public void setDesignatorMustBePresent(boolean designatorMustBePresent)
- {
- this.designatorMustBePresent = designatorMustBePresent;
- }
+ /**
+ *
+ * @param functionId
+ */
+ public void setFunctionId(String functionId)
+ {
+ this.functionId = functionId;
+ }
+
+ /**
+ *
+ * @return
+ */
+ public boolean isDesignatorMustBePresent()
+ {
+ return designatorMustBePresent;
+ }
+
+ /**
+ *
+ * @param designatorMustBePresent
+ */
+ public void setDesignatorMustBePresent(boolean designatorMustBePresent)
+ {
+ this.designatorMustBePresent = designatorMustBePresent;
+ }
}
Modified:
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/AttributeDesignatorUtil.java
===================================================================
---
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/AttributeDesignatorUtil.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/AttributeDesignatorUtil.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -53,7 +53,7 @@
{
AttributeDesignatorType attributeDesignator = null;
Attribute attribute = attributeExpression.getAttribute();
- boolean mustBePresent = attributeExpression.designatorMustBePresent();
+ boolean mustBePresent = attributeExpression.isDesignatorMustBePresent();
String uri = attribute.getUri();
@@ -78,11 +78,11 @@
)
{
attributeDesignator =
PolicyAttributeFactory.createSubjectAttributeDesignatorType(attribute.getUri(),
- attribute.getDatatType(), null, mustBePresent, null);
+ attribute.getDataType(), null, mustBePresent, null);
}
else
{
- attributeDesignator =
PolicyAttributeFactory.createAttributeDesignatorType(attribute.getUri(),
attribute.getDatatType(), null, mustBePresent);
+ attributeDesignator =
PolicyAttributeFactory.createAttributeDesignatorType(attribute.getUri(),
attribute.getDataType(), null, mustBePresent);
}
return attributeDesignator;
Modified:
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/JAXBEncoder.java
===================================================================
---
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/JAXBEncoder.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/common-api/src/main/java/org/jboss/security/authz/xacml/JAXBEncoder.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -60,7 +60,7 @@
AttributeType jaxbObject = new AttributeType();
jaxbObject.setAttributeId(attribute.getUri());
- jaxbObject.setDataType(attribute.getDatatType());
+ jaxbObject.setDataType(attribute.getDataType());
AttributeValueType jaxbValue = new AttributeValueType();
jaxbValue.getContent().add(attribute.getValue());
jaxbObject.getAttributeValue().add(jaxbValue);
Modified: modules/authorization/trunk/policy-server/src/main/resources/policy.hbm.xml
===================================================================
--- modules/authorization/trunk/policy-server/src/main/resources/policy.hbm.xml 2009-08-06
15:05:18 UTC (rev 13693)
+++ modules/authorization/trunk/policy-server/src/main/resources/policy.hbm.xml 2009-08-06
16:05:18 UTC (rev 13694)
@@ -33,6 +33,131 @@
</id>
<property name="policyUri"
not-null="true"
- />
+ />
+ <!-- one-to-one unidirectional relationship with the PolicyMetaData object
-->
+ <many-to-one name="metaData"
+ class="org.jboss.security.authz.model.PolicyMetaData"
+ column="metaDataId"
+ cascade="all"
+ lazy="false"
+ not-null="true"
+ unique="true"
+ />
</class>
+ <class name="org.jboss.security.authz.model.PolicyMetaData"
table="jboss_authz_xacml_policy_metadata">
+ <id name="id" column="id">
+ <generator class="native"/>
+ </id>
+ <!-- one-to-one unidirectional relationship with the Target object -->
+ <many-to-one name="target"
+ class="org.jboss.security.authz.model.Target"
+ column="targetId"
+ cascade="all"
+ lazy="false"
+ not-null="true"
+ unique="true"
+ />
+ <!-- one-to-many unidirectional relationship with the Rule object -->
+ <set name="rules" table="jboss_authz_xacml_rule_assoc"
+ lazy="false" cascade="all-delete-orphan"
+ >
+ <key column="metadataId"/>
+ <many-to-many class="org.jboss.security.authz.model.Rule"
column="ruleId" unique="true"/>
+ </set>
+ </class>
+ <class name="org.jboss.security.authz.model.Target"
table="jboss_authz_xacml_policy_target">
+ <id name="id" column="id">
+ <generator class="native"/>
+ </id>
+ <!-- one-to-many unidirectional relationship with the AttributeExpression
object -->
+ <list name="resourceMatches"
table="jboss_authz_xacml_resourcematch_assoc"
+ lazy="false" cascade="all-delete-orphan"
+ >
+ <key column="targetId"/>
+ <list-index column="index"/>
+ <many-to-many
class="org.jboss.security.authz.model.AttributeExpression"
column="expressionId" unique="true"/>
+ </list>
+ <list name="actionMatches"
table="jboss_authz_xacml_actionmatch_assoc"
+ lazy="false" cascade="all-delete-orphan"
+ >
+ <key column="targetId"/>
+ <list-index column="index"/>
+ <many-to-many
class="org.jboss.security.authz.model.AttributeExpression"
column="expressionId" unique="true"/>
+ </list>
+ <list name="subjectMatches"
table="jboss_authz_xacml_subjectmatch_assoc"
+ lazy="false" cascade="all-delete-orphan"
+ >
+ <key column="targetId"/>
+ <list-index column="index"/>
+ <many-to-many
class="org.jboss.security.authz.model.AttributeExpression"
column="expressionId" unique="true"/>
+ </list>
+ <list name="environmentMatches"
table="jboss_authz_xacml_environmentmatch_assoc"
+ lazy="false" cascade="all-delete-orphan"
+ >
+ <key column="targetId"/>
+ <list-index column="index"/>
+ <many-to-many
class="org.jboss.security.authz.model.AttributeExpression"
column="expressionId" unique="true"/>
+ </list>
+ </class>
+ <class name="org.jboss.security.authz.model.Rule"
table="jboss_authz_xacml_policy_rule">
+ <id name="id" column="id">
+ <generator class="native"/>
+ </id>
+ <property name="ruleId"
+ not-null="true"
+ />
+ <property name="effect"
+ not-null="true"
+ />
+ <!-- one-to-one unidirectional relationship with the Target object -->
+ <many-to-one name="target"
+ class="org.jboss.security.authz.model.Target"
+ column="targetId"
+ cascade="all"
+ lazy="false"
+ not-null="true"
+ unique="true"
+ />
+ <!-- one-to-one unidirectional relationship with the Expression object
-->
+ <many-to-one name="expression"
+ column="expressionId"
+ cascade="all"
+ lazy="false"
+ not-null="true"
+ unique="true"
+ />
+ </class>
+ <!-- Using the Table per Class Hierarchy strategy -->
+ <class name="org.jboss.security.authz.model.Expression"
table="jboss_authz_xacml_expression"
+ discriminator-value="BASE_EXPR"
+ >
+ <id name="id" column="id">
+ <generator class="native"/>
+ </id>
+ <discriminator column="expression_type"
type="string"/>
+ <subclass name="org.jboss.security.authz.model.AttributeExpression"
discriminator-value="ATTR_EXPR">
+ <property name="functionId"/>
+ <property name="designatorMustBePresent"/>
+ <!-- one-to-one unidirectional relationship with the Attribute object
-->
+ <many-to-one name="attribute"
+ class="org.jboss.security.authz.model.Attribute"
+ column="attributeId"
+ cascade="all"
+ lazy="false"
+ unique="true"
+ />
+ </subclass>
+ <subclass name="org.jboss.security.authz.model.DroolsRuleExpression"
discriminator-value="DROOLS_EXPR">
+ <property name="ruleReference"/>
+ <property name="rule"/>
+ </subclass>
+ </class>
+ <class name="org.jboss.security.authz.model.Attribute"
table="jboss_authz_xacml_attribute">
+ <id name="id" column="id">
+ <generator class="native"/>
+ </id>
+ <property name="uri"/>
+ <property name="dataType"/>
+ <property name="value"/>
+ </class>
</hibernate-mapping>
\ No newline at end of file
Modified:
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRuleManager.java
===================================================================
---
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRuleManager.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRuleManager.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -126,7 +126,7 @@
//Create a Role Attribute
Attribute attribute = new Attribute();
attribute.setUri(XACMLConstants.ATTRIBUTEID_ROLE);
- attribute.setDatatType(XMLSchemaConstants.DATATYPE_STRING);
+ attribute.setDataType(XMLSchemaConstants.DATATYPE_STRING);
attribute.setValue("developer");
subject.addAttribute(attribute);
Modified:
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRules.java
===================================================================
---
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRules.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/plugin/TestDroolsRules.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -125,7 +125,7 @@
//Create a Role Attribute
Attribute attribute = new Attribute();
attribute.setUri(XACMLConstants.ATTRIBUTEID_ROLE);
- attribute.setDatatType(XMLSchemaConstants.DATATYPE_STRING);
+ attribute.setDataType(XMLSchemaConstants.DATATYPE_STRING);
attribute.setValue("developer");
subject.addAttribute(attribute);
Modified:
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/provisioning/TestRelationalDBPolicyStore.java
===================================================================
---
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/provisioning/TestRelationalDBPolicyStore.java 2009-08-06
15:05:18 UTC (rev 13693)
+++
modules/authorization/trunk/policy-server/src/test/java/org/jboss/security/authz/policy/server/provisioning/TestRelationalDBPolicyStore.java 2009-08-06
16:05:18 UTC (rev 13694)
@@ -22,6 +22,8 @@
package org.jboss.security.authz.policy.server.provisioning;
import java.io.Serializable;
+import java.util.Set;
+import java.util.HashSet;
import junit.framework.TestCase;
@@ -33,8 +35,15 @@
import org.jboss.security.authz.bootstrap.ServiceContainer;
+import org.jboss.security.authz.model.Effect;
import org.jboss.security.authz.model.Policy;
import org.jboss.security.authz.model.PolicyMetaData;
+import org.jboss.security.authz.model.Target;
+import org.jboss.security.authz.model.Rule;
+import org.jboss.security.authz.model.DroolsRuleExpression;
+import org.jboss.security.authz.model.AttributeExpression;
+import org.jboss.security.authz.model.Attribute;
+import org.jboss.security.authz.model.Expression;
import org.jboss.security.authz.policy.server.plugin.XACMLPolicy;
/**
@@ -56,19 +65,208 @@
{
String policyUri = "blahPolicy";
- //Create and Save a new policy
- Policy policy = new XACMLPolicy(policyUri, new PolicyMetaData());
+ //Create and Save a new policy
+ Policy policy = new XACMLPolicy(policyUri, this.getMockPolicyMetaData());
Serializable id = this.save(policy);
assertNotNull("Id Should Not be Null!!", id);
log.info("New Policy Id="+id);
//Read the persisted instance
- policy = this.readPolicy(policyUri);
- assertNotNull("Policy Must Not be Null!!", policy);
- assertEquals("PolicyUri Must Match!!", policyUri, policy.getPolicyUri());
- log.info("Stored Policy Id="+policy.getId());
- log.info("Stored Policy Uri="+policy.getPolicyUri());
+ Policy stored = this.readPolicy(policyUri);
+ assertNotNull("Policy Must Not be Null!!", stored);
+ assertEquals("PolicyUri Must Match!!", policyUri, stored.getPolicyUri());
+ assertNotNull("PolicyMetaData Must Not be Null!!", stored.getMetaData());
+ assertNotNull("Policy Target Must Not be Null!!",
stored.getMetaData().getTarget());
+ assertTrue("Policy Rules Must Not be Empty!!",
stored.getMetaData().getRules()!=null &&
!stored.getMetaData().getRules().isEmpty());
+ log.info("Stored Policy Id="+stored.getId());
+ log.info("Stored Policy Uri="+stored.getPolicyUri());
+ log.info("Stored Policy MetaData Id="+stored.getMetaData().getId());
+ this.log(stored.getMetaData().getTarget());
+ for(Rule rule: stored.getMetaData().getRules())
+ {
+ assertNotNull("Rule Id must not be null!!", rule.getRuleId());
+ assertNotNull("Effect must not be null!!", rule.getEffect());
+ assertNotNull("Expression must not be null!!", rule.getExpression());
+
+ log.info("---------------------------------------------------");
+ log.info("Rule DatabaseId="+rule.getId());
+ log.info("Rule Id="+rule.getRuleId());
+ log.info("Effect="+rule.getEffect());
+ this.log(rule.getExpression());
+ this.log(rule.getTarget());
+ }
}
+
+ public void testMetaDataRelationship() throws Exception
+ {
+ String policyUri = "blahPolicy";
+
+ //Create and Save a new policy
+ Policy policy = new XACMLPolicy(policyUri, this.getMockPolicyMetaData());
+ Serializable id = this.save(policy);
+ assertNotNull("Id Should Not be Null!!", id);
+ log.info("New Policy Id="+id);
+
+ Policy stored = this.readPolicy(policyUri);
+ assertNotNull("Policy Must Not be Null!!", stored);
+ assertEquals("PolicyUri Must Match!!", policyUri, stored.getPolicyUri());
+ assertNotNull("PolicyMetaData Must Not be Null!!", stored.getMetaData());
+
+ PolicyMetaData storedMetaData = this.readPolicyMetaData(stored.getMetaData().getId());
+ assertNotNull("MetaData must be found!!", storedMetaData);
+
+ this.deletePolicy(stored);
+
+ //Make Sure instance of meta data is also deleted
+ storedMetaData = this.readPolicyMetaData(stored.getMetaData().getId());
+ assertNull("MetData must be deleted!!", storedMetaData);
+ }
+ //---------------------------------------------------------------------------------------------------------------------------------------------
+ private PolicyMetaData getMockPolicyMetaData()
+ {
+ PolicyMetaData metadata = new PolicyMetaData();
+
+ //Set the Target
+ Target target = this.getMockTarget();
+ metadata.setTarget(target);
+
+ //Set the Rules
+ Set<Rule> rules = new HashSet<Rule>();
+ for(int i=0; i<5; i++)
+ {
+ Rule rule = new Rule();
+
+ rule.setRuleId("rule://"+i);
+
+ if(i%2==0)
+ {
+ rule.setEffect(Effect.PERMIT);
+ DroolsRuleExpression expression = new DroolsRuleExpression();
+ expression.setRule("drools://rule/"+i);
+ expression.setRuleReference("drools://rulereference/"+i);
+ rule.setExpression(expression);
+
+ Target ruleTarget = this.getMockTarget();
+ rule.setTarget(ruleTarget);
+ }
+ else
+ {
+ rule.setEffect(Effect.DENY);
+ AttributeExpression expression = new AttributeExpression();
+ expression.setFunctionId("native://functionId/"+i);
+ expression.setDesignatorMustBePresent(true);
+ Attribute attribute = new Attribute();
+ attribute.setUri("uri://"+i);
+ attribute.setDataType("dataType://"+i);
+ attribute.setValue("Value://"+i);
+ expression.setAttribute(attribute);
+ rule.setExpression(expression);
+
+ Target ruleTarget = this.getMockTarget();
+ rule.setTarget(ruleTarget);
+ }
+
+ rules.add(rule);
+ }
+ metadata.setRules(rules);
+
+ return metadata;
+ }
+
+ private Target getMockTarget()
+ {
+ Target target = new Target();
+
+ AttributeExpression resourceMatch = new AttributeExpression();
+ resourceMatch.setFunctionId("native://resourcematch/functionId/");
+ resourceMatch.setDesignatorMustBePresent(true);
+ Attribute attribute = new Attribute();
+ attribute.setUri("uri://resourcematch");
+ attribute.setDataType("dataType://resourcematch");
+ attribute.setValue("Value://resourcematch");
+ resourceMatch.setAttribute(attribute);
+ target.addResourceMatch(resourceMatch);
+
+ AttributeExpression actionMatch = new AttributeExpression();
+ actionMatch.setFunctionId("native://actionmatch/functionId/");
+ actionMatch.setDesignatorMustBePresent(true);
+ attribute = new Attribute();
+ attribute.setUri("uri://actionmatch");
+ attribute.setDataType("dataType://actionmatch");
+ attribute.setValue("Value://actionmatch");
+ actionMatch.setAttribute(attribute);
+ target.addActionMatch(actionMatch);
+
+ AttributeExpression subjectMatch = new AttributeExpression();
+ subjectMatch.setFunctionId("native://subjectmatch/functionId/");
+ subjectMatch.setDesignatorMustBePresent(true);
+ attribute = new Attribute();
+ attribute.setUri("uri://subjectmatch");
+ attribute.setDataType("dataType://subjectmatch");
+ attribute.setValue("Value://subjectmatch");
+ subjectMatch.setAttribute(attribute);
+ target.addSubjectMatch(subjectMatch);
+
+ AttributeExpression envMatch = new AttributeExpression();
+ envMatch.setFunctionId("native://envmatch/functionId/");
+ envMatch.setDesignatorMustBePresent(true);
+ attribute = new Attribute();
+ attribute.setUri("uri://envmatch");
+ attribute.setDataType("dataType://envmatch");
+ attribute.setValue("Value://envmatch");
+ envMatch.setAttribute(attribute);
+ target.addEnvironmentMatch(envMatch);
+
+ return target;
+ }
+
+ private void log(Expression expression)
+ {
+ if(expression instanceof DroolsRuleExpression)
+ {
+ DroolsRuleExpression drl = (DroolsRuleExpression)expression;
+ log.info("Drools DatabaseId="+drl.getId());
+ log.info("Drools FunctionId="+drl.getFunctionId());
+ log.info("Drools Rule Reference="+drl.getRuleReference());
+ log.info("Drools Rule="+drl.getRule());
+ }
+ else if(expression instanceof AttributeExpression)
+ {
+ AttributeExpression atr = (AttributeExpression)expression;
+ log.info("AttributeExpr DatabaseId="+atr.getId());
+ log.info("AttributeExpr FunctionId="+atr.getFunctionId());
+ log.info("AttributeExpr Designator
Status="+atr.isDesignatorMustBePresent());
+ log.info("Attribute DatabaseId="+atr.getAttribute().getId());
+ log.info("Attribute URI="+atr.getAttribute().getUri());
+ log.info("Attribute DataType="+atr.getAttribute().getDataType());
+ log.info("Attribute Value="+atr.getAttribute().getValue());
+ }
+ }
+
+ private void log(Target target)
+ {
+ log.info("Target Id="+target.getId());
+
+ for(AttributeExpression resourceMatch: target.getResourceMatches())
+ {
+ this.log(resourceMatch);
+ }
+
+ for(AttributeExpression actionMatch: target.getActionMatches())
+ {
+ this.log(actionMatch);
+ }
+
+ for(AttributeExpression subjectMatch: target.getSubjectMatches())
+ {
+ this.log(subjectMatch);
+ }
+
+ for(AttributeExpression envMatch: target.getEnvironmentMatches())
+ {
+ this.log(envMatch);
+ }
+ }
//-----Hibernate Data Access
code-----------------------------------------------------------------------------------------------------------------------------------
private Serializable save(Policy policy) throws Exception
{
@@ -134,4 +332,66 @@
}
}
}
+
+ private PolicyMetaData readPolicyMetaData(Serializable databaseId) throws Exception
+ {
+ SessionFactory sessionFactory = this.policyStore.sessionFactory;
+ Session session = null;
+ Transaction tx = null;
+ try
+ {
+ //Join or Create a New Session/Transaction
+ session = sessionFactory.getCurrentSession();
+ tx = session.beginTransaction();
+
+ PolicyMetaData policyMetaData = (PolicyMetaData)session.get(PolicyMetaData.class,
databaseId);
+
+ tx.commit();
+
+ return policyMetaData;
+ }
+ catch(Throwable t)
+ {
+ log.error(this, t);
+ tx.rollback();
+ throw new RuntimeException(t);
+ }
+ finally
+ {
+ if(session.isOpen())
+ {
+ session.close();
+ }
+ }
+ }
+
+ private void deletePolicy(Policy policy) throws Exception
+ {
+ SessionFactory sessionFactory = this.policyStore.sessionFactory;
+ Session session = null;
+ Transaction tx = null;
+ try
+ {
+ //Join or Create a New Session/Transaction
+ session = sessionFactory.getCurrentSession();
+ tx = session.beginTransaction();
+
+ session.delete(policy);
+
+ tx.commit();
+ }
+ catch(Throwable t)
+ {
+ log.error(this, t);
+ tx.rollback();
+ throw new RuntimeException(t);
+ }
+ finally
+ {
+ if(session.isOpen())
+ {
+ session.close();
+ }
+ }
+ }
}