[Yanel-commits] rev 35305 - in public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor: client public

simon at wyona.com simon at wyona.com
Sun Apr 13 21:41:55 CEST 2008


Author: simon
Date: 2008-04-13 21:41:54 +0200 (Sun, 13 Apr 2008)
New Revision: 35305

Modified:
   public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AccessPolicyEditor.java
   public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousIdentitiesAndRightsGetter.java
   public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousPolicyGetter.java
   public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-identities-and-usecases.xml
   public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-policy.xml
Log:
adds hostpagebaseurl in front of a asynchronous request. this allows using urls relative to the hosting page. (this was not really predictable before).
adds a filter to the list of identities.
don't show users in the identities list which are shown in the policies list.

Modified: public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AccessPolicyEditor.java
===================================================================
--- public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AccessPolicyEditor.java	2008-04-13 19:37:39 UTC (rev 35304)
+++ public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AccessPolicyEditor.java	2008-04-13 19:41:54 UTC (rev 35305)
@@ -15,16 +15,21 @@
  */
 package org.wyona.security.gwt.accesspolicyeditor.client;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
 import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.i18n.client.Dictionary;
 import com.google.gwt.user.client.Timer;
 import com.google.gwt.user.client.Window;
 import com.google.gwt.user.client.ui.Button;
 import com.google.gwt.user.client.ui.ClickListener;
-import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.FlowPanel;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.HasVerticalAlignment;
+import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.TextBox;
@@ -32,6 +37,7 @@
 import com.google.gwt.user.client.ui.Widget;
 
 import org.wyona.security.gwt.accesspolicyeditor.client.AddRemoveIdentitiesWidget;
+import org.wyona.yanel.gwt.client.AsynchronousAgent;
 
 /**
  * Access Policy Editor
@@ -46,6 +52,10 @@
     PolicyListBoxWidget policyLBW;
     Button saveButton;
 
+    String[] identitiesAllUsers;
+    String[] identitiesAllGroups;
+    Right[] allRights;
+    
     int visibleItemCount = 10;
 
     /**
@@ -70,7 +80,13 @@
         // Get data from server
         getIdentitiesAndRights(identitiesURL); // TODO: Subtract policy identities!
 
-        // TODO: Do not load policy before available rights have been loaded, because these are needed for validation of the policy. See timer of identities and rights loading!
+        identitiesLBW = new IdentitiesListBoxWidget(visibleItemCount);
+        
+        identitiesLBW.set(visibleItemCount, identitiesAllUsers, identitiesAllGroups);
+        
+        policyLBW = new PolicyListBoxWidget(visibleItemCount, policyUsers, policyGroups, useInheritedPolicies);
+
+        
         getPolicy(readPolicyURL);
 
         // Setup GUI
@@ -84,16 +100,51 @@
         searchTB.setVisibleLength(30);
         searchFilterVP.add(searchTB);
 
-        Button searchButton = new Button("Save User or Group", new ClickListener() {
-            public void onClick(Widget sender) {
-                int itemCount = identitiesLBW.getListBox().getItemCount();
-                for (int i = 0; i < itemCount; i++) {
-                    String itemText = identitiesLBW.getListBox().getItemText(i);
-                    if (itemText.indexOf(searchTB.getText()) >= 0) Window.alert("Result: " + itemText);
-                }
-            }
-        });
-        searchFilterVP.add(searchButton);
+        searchTB.addKeyboardListener(
+                new KeyboardListenerAdapter() {
+                    public void onKeyUp(Widget sender, char keyCode, int modifiers) {
+                        ListBox idlb = identitiesLBW.getListBox();
+                        ArrayList tmpUsers = new ArrayList();
+                        ArrayList tmpGroups = new ArrayList();
+                        idlb.clear();
+                        int itemCountU = identitiesAllUsers.length;
+                        for (int i = 0; i < itemCountU; i++) {
+                            String itemText = identitiesAllUsers[i];
+                            if (itemText.indexOf(searchTB.getText()) >= 0) {
+                                tmpUsers.add(itemText);
+                            }
+                        }
+                        int itemCountG = identitiesAllGroups.length;
+                        for (int i = 0; i < itemCountG; i++) {
+                            String itemText = identitiesAllGroups[i];
+                            if (itemText.indexOf(searchTB.getText()) >= 0) {
+                                tmpGroups.add(itemText);
+                            }
+                        }
+                        
+                        String tmpUsersStr [] = new String [tmpUsers.size ()];
+                        tmpUsers.toArray(tmpUsersStr);
+                        String tmpGroupStr [] = new String [tmpGroups.size ()];
+                        tmpGroups.toArray(tmpGroupStr);
+                        
+                        identitiesLBW.set(visibleItemCount, tmpUsersStr, tmpGroupStr);
+                        // filterList(list, filter.getText());
+                    }
+                });
+        
+        
+//        Button searchButton = new Button("Search User or Group", new ClickListener() {
+//            public void onClick(Widget sender) {
+//                int itemCount = identitiesLBW.getListBox().getItemCount();
+//                for (int i = 0; i < itemCount; i++) {
+//                    String itemText = identitiesLBW.getListBox().getItemText(i);
+//                    if (itemText.indexOf(searchTB.getText()) >= 0) Window.alert("Result: " + itemText);
+//                    
+//                }
+//            }
+//  
+//        });
+//        searchFilterVP.add(searchButton);
 
         HorizontalPanel hp = new HorizontalPanel();
         hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
@@ -105,7 +156,7 @@
         //buttonHP.add(new Button("Apply Policy"));
 
         // Save Button
-        final String savePolicyUrl = savePolicyURL.replaceAll("&amp;", "&");
+        final String savePolicyUrl = GWT.getHostPageBaseURL() + savePolicyURL.replaceAll("&amp;", "&");
         //saveButton = new Button("Save Policy and Exit", new ClickListener() {
         saveButton = new Button("Save Policy", new ClickListener() {
             public void onClick(Widget sender) {
@@ -127,7 +178,7 @@
         Button cancelButton = new Button("Cancel", new ClickListener() {
             public void onClick(Widget sender) {
                 //Window.alert("Redirect to " + cancelUrl);
-                redirectTo(cancelUrl);
+                redirectTo(GWT.getHostPageBaseURL() + cancelUrl);
             }
             public native void redirectTo(String url) /*-{
                 $wnd.location.href=url;
@@ -136,11 +187,10 @@
         saveButton.setStyleName("gwt-wyona-CancelButton");
         buttonHP.add(cancelButton);
 
-        identitiesLBW = new IdentitiesListBoxWidget(visibleItemCount);
+        
 
-        policyLBW = new PolicyListBoxWidget(visibleItemCount, policyUsers, policyGroups, useInheritedPolicies);
-
-	AddRemoveIdentitiesWidget ariw = new AddRemoveIdentitiesWidget(identitiesLBW.getListBox(), policyLBW.getListBox(), policyLBW);
+        
+        AddRemoveIdentitiesWidget ariw = new AddRemoveIdentitiesWidget(identitiesLBW.getListBox(), policyLBW.getListBox(), policyLBW);
         ariw.setStyleName("gwt-wyona-AddRemoveWidget");
 
         //Button removeIdentityButton = new Button("DEBUG", new AddRemoveClickListener(identitiesLB));
@@ -154,34 +204,48 @@
      * Get identities and rights
      */
     private void getIdentitiesAndRights(String url) {
-        //Window.alert("Load identities: " + url);
-        url = url.replaceAll("&amp;", "&");
-        final AsynchronousIdentitiesAndRightsGetter ag = new AsynchronousIdentitiesAndRightsGetter(url);
-        try {
-            final com.google.gwt.http.client.Request request = ag.execute();
+        if (identitiesAllUsers == null || identitiesAllGroups == null || allRights == null) {
+            //Window.alert("Load identities: " + url);
+            url = GWT.getHostPageBaseURL() + url.replaceAll("&amp;", "&");
+            //Window.alert("Load IdentitiesAndRights: "+ url);
+            final AsynchronousIdentitiesAndRightsGetter ag = new AsynchronousIdentitiesAndRightsGetter(url);
 
-            // Start new thread
-            Timer t = new Timer() {
-                public void run() {
-                    if (request.isPending()) {
-                        // TODO: Show loading ...
-                        scheduleRepeating(10);
-                    } else {
-                        // "Redraw" Listbox
-                        identitiesLBW.set(visibleItemCount, ag.getUsers(), ag.getGroups());
-                        // TODO: "Redraw" Policy Listbox
-                        policyLBW.set(ag.getRights());
-                        this.cancel();
-                        //Window.alert("Identities have been loaded!");
+            try {
+                final com.google.gwt.http.client.Request request = ag.execute();
+                
+                // Start new thread
+                Timer t = new Timer() {
+                    public void run() {
+                        if (request.isPending()) {
+                            // TODO: Show loading ...
+                            scheduleRepeating(10);
+                        } else {
+                            // "Redraw" Listbox
+                            //identitiesLBW.set(visibleItemCount, ag.getUsers(), ag.getGroups());
+                            // TODO: "Redraw" Policy Listbox
+                            //policyLBW.set();
+                            
+                            allRights = ag.getRights();
+                            identitiesAllUsers = ag.getUsers();
+                            identitiesAllGroups = ag.getGroups();
+                            this.cancel();
+                            if (allRights.length > 0 || identitiesAllUsers.length > 0 || identitiesAllGroups.length > 0 ) {
+                                policyLBW.set(allRights);
+                                identitiesLBW.set(visibleItemCount, identitiesAllUsers, identitiesAllGroups);
+                                //Window.alert("Identities have been loaded!" + allRights.length + " " + identitiesAllUsers.length + " " + identitiesAllGroups.length);
+                            } else {
+                                Window.alert("No Identities have been loaded!");
+                            }
+                        }
                     }
-                }
-            };
-            t.schedule(1);
-
-        } catch (Exception e) {
-             //if (!com.google.gwt.core.client.GWT.isScript()) {
-             e.printStackTrace();
-             //}
+                };
+                t.schedule(1);
+                
+            } catch (Exception e) {
+                //if (!com.google.gwt.core.client.GWT.isScript()) {
+                e.printStackTrace();
+                //}
+            }
         }
     }
 
@@ -189,8 +253,8 @@
      * Get policy
      */
     private void getPolicy(String url) {
+        url = GWT.getHostPageBaseURL() + url.replaceAll("&amp;", "&");
         //Window.alert("Load policy: " + url);
-        url = url.replaceAll("&amp;", "&");
         final AsynchronousPolicyGetter apg = new AsynchronousPolicyGetter(url);
         try {
             final com.google.gwt.http.client.Request request = apg.execute();
@@ -211,6 +275,58 @@
                         policyLBW.setInheritRightsFlag(useInheritedPolicies);
 
                         this.cancel();
+                        
+                        //remove policy users from users
+                        ArrayList tmpUsers = new ArrayList(Arrays.asList(identitiesAllUsers));
+                        ArrayList tmpGroups = new ArrayList(Arrays.asList(identitiesAllGroups));
+                        
+                        
+                        
+                        
+//                        int itemCountUI = identitiesAllUsers.length;
+//                        for (int j = 0; j < itemCountUI; j++) {
+//                            String itemTextIAU = identitiesAllUsers[j];
+//                            if (!itemText.equals(itemTextIAU) && !tmpUsers.contains(itemTextIAU)) {
+//                                tmpUsers.add(itemTextIAU);
+//                            } else {
+//                                //Window.alert("not add: " + itemTextIAU + " = " +  itemText);
+//                            }
+//                        }
+                        int itemCountUP = policyUsers.length;
+                        for (int i = 0; i < itemCountUP; i++) {
+                            String itemText = policyUsers[i].getId();
+                            tmpUsers.remove(itemText);
+                            
+                        }
+
+                        int itemCountGP = policyGroups.length;
+                        for (int i = 0; i < itemCountGP; i++) {
+                            String itemText = policyGroups[i].getId();
+                            tmpGroups.remove(itemText);
+                        }
+
+//                        int itemCountUI = identitiesAllGroups.length;
+//                        for (int j = 0; j < itemCountUI; j++) {
+//                            String itemTextIAG = identitiesAllGroups[j];
+//                            if (!itemText.equals(itemTextIAG)  && !tmpGroups.contains(itemTextIAG)) {
+//                                tmpGroups.add(itemTextIAG);
+//                            } else {
+//                                //Window.alert("not add: " + itemTextIAG + " = " +  itemText);
+//                            }
+//                        }
+                        
+                        
+                        
+                        String tmpUsersStr [] = new String [tmpUsers.size ()];
+                        tmpUsers.toArray(tmpUsersStr);
+                        identitiesAllUsers = tmpUsersStr;
+                        
+                        String tmpGroupStr [] = new String [tmpGroups.size ()];
+                        tmpGroups.toArray(tmpGroupStr);
+                        identitiesAllGroups = tmpGroupStr;
+                        
+                        identitiesLBW.set(visibleItemCount, new String[0], new String[0]);
+                        identitiesLBW.set(visibleItemCount, identitiesAllUsers, identitiesAllGroups);
                         //Window.alert("Policy has been loaded!");
                     }
                 }
@@ -224,6 +340,8 @@
              //}
         }
     }
+    
+
 }
 
 /**

Modified: public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousIdentitiesAndRightsGetter.java
===================================================================
--- public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousIdentitiesAndRightsGetter.java	2008-04-13 19:37:39 UTC (rev 35304)
+++ public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousIdentitiesAndRightsGetter.java	2008-04-13 19:41:54 UTC (rev 35305)
@@ -121,4 +121,9 @@
         NodeList nl = parent.getElementsByTagName(name);
         return (Element) nl.item(0);
     }
+
+    public void onError(Request arg0, Throwable arg1) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousPolicyGetter.java
===================================================================
--- public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousPolicyGetter.java	2008-04-13 19:37:39 UTC (rev 35304)
+++ public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/client/AsynchronousPolicyGetter.java	2008-04-13 19:41:54 UTC (rev 35305)
@@ -149,4 +149,9 @@
             return null;
         }
     }
+
+    public void onError(Request arg0, Throwable arg1) {
+        // TODO Auto-generated method stub
+        
+    }
 }

Modified: public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-identities-and-usecases.xml
===================================================================
--- public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-identities-and-usecases.xml	2008-04-13 19:37:39 UTC (rev 35304)
+++ public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-identities-and-usecases.xml	2008-04-13 19:41:54 UTC (rev 35305)
@@ -1,28 +1,55 @@
-<?xml version="1.0"?>
+<access-control>
+−
+	<users>
+<user id="user_1">User 1</user>
+<user id="user_2">User 2</user>
+<user id="user_3">User 3</user>
+<user id="user_4">User 4</user>
+<user id="user_5">User 5</user>
+<user id="user_6">User 6</user>
+<user id="user_7">User 7</user>
+<user id="user_8">User 8</user>
+<user id="user_9">User 9</user>
+<user id="user_10">User 10</user>
+<user id="user_11">User 11</user>
+<user id="user_12">User 12</user>
+<user id="user_13">User 13</user>
+<user id="user_14">User 14</user>
+<user id="user_15">User 15</user>
+<user id="user_16">User 16</user>
+<user id="user_17">User 17</user>
+<user id="user_18">User 18</user>
+<user id="user_19">User 19</user>
+<user id="user_20">User 20</user>
+</users>
+−
+	<groups>
+<group id="group_1">Group 1</group>
+<group id="group_2">Group 2</group>
+<group id="group_3">Group 3</group>
+<group id="group_4">Group 4</group>
+<group id="group_5">Group 5</group>
+<group id="group_6">Group 6</group>
+<group id="group_7">Group 7</group>
+<group id="group_8">Group 8</group>
+<group id="group_9">Group 9</group>
+<group id="group_10">Group 10</group>
+<group id="group_11">Group 11</group>
+<group id="group_12">Group 12</group>
+<group id="group_13">Group 13</group>
+<group id="group_14">Group 14</group>
+<group id="group_15">Group 15</group>
+<group id="group_16">Group 16</group>
+<group id="group_17">Group 17</group>
+<group id="group_18">Group 18</group>
+<group id="group_19">Group 19</group>
+<group id="group_20">Group 20</group>
 
-<access-control xmlns="http://www.wyona.org/security/1.0">
-
-  <!-- TODO
-  <i18n language="de"/>
-  -->
-
-  <!-- TODO
-  <world/>
-  -->
-
-  <users>
-    <user id="michi">Michael Wechner</user>
-    <user id="http://michaelwechner.livejournal.com/"/>
-  </users>
-
-  <groups>
-    <group id="all">All registered users</group>
-    <group id="admin">Administrator Group</group>
-  </groups>
-
+</groups>
+−
   <rights>
     <right id="view">Read</right>
     <right id="write">Write</right>
     <right id="toolbar">Toolbar</right>
   </rights>
-</access-control>
+</access-control>
\ No newline at end of file

Modified: public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-policy.xml
===================================================================
--- public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-policy.xml	2008-04-13 19:37:39 UTC (rev 35304)
+++ public/yanel/contributions/ajax-components/src/access-policy-editor/java/org/wyona/security/gwt/accesspolicyeditor/public/sample-policy.xml	2008-04-13 19:41:54 UTC (rev 35305)
@@ -8,6 +8,32 @@
     <right id="introspection" permission="false"/>
   </world>
 
+  <user id="user_1">
+    <right id="view"/>
+  </user>
+  <user id="user_2">
+    <right id="view"/>
+    <right id="toolbar"/>
+  </user>
+  <user id="user_3">
+    <right id="view"/>
+    <right id="write"/>
+    <right id="toolbar"/>
+  </user>
+  <user id="user_4">
+    <right id="view"/>
+  </user>
+  <user id="user_5">
+    <right id="view"/>
+    <right id="toolbar"/>
+  </user>
+  <user id="user_6">
+    <right id="view"/>
+    <right id="write"/>
+    <right id="toolbar"/>
+  </user>
+
+
   <user id="http://michaelwechner.livejournal.com/">
     <right id="open"/>
     <right id="write"/>
@@ -17,9 +43,22 @@
   </user>
 
   <group id="login">
-    <right id="open"/>
+    <right id="view"/>
     <right id="write"/>
     <right id="toolbar"/>
   </group>
 
+  <group id="group_1">
+    <right id="view"/>
+  </group>
+  <group id="group_2">
+    <right id="view"/>
+    <right id="toolbar"/>
+  </group>
+  <group id="group_3">
+    <right id="view"/>
+    <right id="write"/>
+    <right id="toolbar"/>
+  </group>
+
 </policy>



More information about the Yanel-commits mailing list