[Yanel-commits] rev 54754 - public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager

michi at wyona.com michi at wyona.com
Thu Nov 18 09:23:37 CET 2010


Author: michi
Date: 2010-11-18 09:23:36 +0100 (Thu, 18 Nov 2010)
New Revision: 54754

Modified:
   public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java
Log:
get XML sorted by usecases started

Modified: public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java
===================================================================
--- public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java	2010-11-18 08:10:55 UTC (rev 54753)
+++ public/yanel/trunk/src/contributions/resources/policymanager/src/java/org/wyona/yanel/impl/resources/policymanager/PolicyManagerResource.java	2010-11-18 08:23:36 UTC (rev 54754)
@@ -139,6 +139,9 @@
                 } else if (getXML != null && getXML.equals("policy")) {
                     //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     sb.append(getPolicyAsXML(getRealm().getPolicyManager(), getPath()));
+                } else if (getXML != null && getXML.equals("policy-by-usecases")) {
+                    //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
+                    sb.append(getPolicyAsXMLOrderedByUsecases(getRealm().getPolicyManager(), getPath()));
                 } else if (postXML != null && postXML.equals("policy")) {
                     //response.setContentType("application/xml; charset=" + DEFAULT_ENCODING);
                     try {
@@ -152,6 +155,7 @@
                 } else {
                     //response.setContentType("text/html; charset=" + DEFAULT_ENCODING);
                     String identitiesURL = backToRealm + getPath().substring(1) + "?" + PARAMETER_USECASE + "=update&get=identities";
+                    //String policyURL = backToRealm + getPath().substring(1) + "?" + PARAMETER_USECASE + "=update&get=policy-by-usecases";
                     String policyURL = backToRealm + getPath().substring(1) + "?" + PARAMETER_USECASE + "=update&get=policy";
                     String saveURL = backToRealm + getPath().substring(1) + "?" + PARAMETER_USECASE +"=update&post=policy"; // This doesn't seem to work with all browsers!
 
@@ -272,12 +276,49 @@
     }
 
     /**
+     * Get policy as XML sorted by usecases
      *
+     * @param pm Policy manager
+     * @param path Policy path
      */
+    private String getPolicyAsXMLOrderedByUsecases(PolicyManager pm, String path) {
+        log.debug("Get policy XML sorted by usecases");
+        StringBuilder sb = new StringBuilder("<?xml version=\"1.0\"?>");
+
+        try {
+            Policy policy = pm.getPolicy(path, false);
+            if (policy == null) {
+                String useInheritedPolicies = "false"; // For backwards compatibility (and security) reasons we set it to false
+                if (getResourceConfigProperty("use-inherited-policies-upon-creation") != null) {
+                    useInheritedPolicies = getResourceConfigProperty("use-inherited-policies-upon-creation");
+                }
+                sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"" + useInheritedPolicies + "\">");
+                log.warn("No policy yet for path: " + path + " (Return empty policy)");
+            } else {
+                sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\" use-inherited-policies=\"" + policy.useInheritedPolicies() + "\">");
+
+                // TODO: Use getPolicyItems(policy) instead ...
+                sb.append(getPolicyIdentities(policy));
+                sb.append(getPolicyGroups(policy));
+            }
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            sb.append("<policy xmlns=\"http://www.wyona.org/security/1.0\">");
+            sb.append("<exception>" + e.getMessage() + "</exception>");
+        }
+
+        sb.append("</policy>");
+        return sb.toString();
+    }
+
+    /**
+     * Get policy as XML
+     * @deprecated Because this method does not keep the order of usecases. Use {@link #getPolicyAsXMLOrderedByUsecases(String, String)} instead.
+     */
     private String getPolicyAsXML(PolicyManager pm, String path) {
+        log.warn("Get policy sorted by users and groups. Please be aware that hence one will loose the usecase order!");
+        StringBuilder sb = new StringBuilder("<?xml version=\"1.0\"?>");
 
-        StringBuffer sb = new StringBuffer("<?xml version=\"1.0\"?>");
-
         try {
             Policy policy = pm.getPolicy(path, false);
             if (policy == null) {
@@ -312,6 +353,7 @@
         UsecasePolicy[] up = p.getUsecasePolicies();
         if (up != null && up.length > 0) {
             for (int i = 0; i < up.length; i++) {
+                //log.debug("Usecase policy: " + up[i].getName());
                 org.wyona.security.core.IdentityPolicy[] idps = up[i].getIdentityPolicies();
                 for (int j = 0; j < idps.length; j++) {
                     //log.debug("Usecase Identity Policy: " + up[i].getName() + ", " + idps[j].getIdentity().getUsername() + ", " + idps[j].getPermission());
@@ -404,6 +446,7 @@
         Policy policy = new org.wyona.security.util.PolicyParser().parseXML(policyAsInputStream, im);
 
         // INFO: Add WORLD permissions, because policy editor does not support WORLD editing yet. As soon as the policy editor supports WORLD editing, then this piece of code becomes obsolete
+        log.warn("TODO: Add WORLD as soon as policy editor supports WORLD ...");
         Policy originalPolicy = pm.getPolicy(path, false);
         if (originalPolicy != null) {
             org.wyona.security.core.UsecasePolicy[] up = originalPolicy.getUsecasePolicies();



More information about the Yanel-commits mailing list