You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2015/09/17 18:04:39 UTC

syncope git commit: [SYNCOPE-156] fix for open items into realm sidebar menu after CRUD operations

Repository: syncope
Updated Branches:
  refs/heads/SYNCOPE-156 10299f2c4 -> a6b51b0d0


[SYNCOPE-156] fix for open items into realm sidebar menu after CRUD operations


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a6b51b0d
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a6b51b0d
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a6b51b0d

Branch: refs/heads/SYNCOPE-156
Commit: a6b51b0d0c0252e8ced420920d5aaed8616a9ebd
Parents: 10299f2
Author: fmartelli <fa...@gmail.com>
Authored: Thu Sep 17 18:04:21 2015 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Thu Sep 17 18:04:21 2015 +0200

----------------------------------------------------------------------
 .../syncope/client/console/pages/Realms.java    | 11 +--
 .../console/panels/RealmSidebarPanel.java       | 72 +++++++++++++++-----
 .../console/panels/RealmSidebarPanel.html       |  4 +-
 3 files changed, 63 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a6b51b0d/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
index fa480aa..cb02ca5 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/pages/Realms.java
@@ -91,6 +91,10 @@ public class Realms extends BasePage {
             }
         });
 
+        setupDeleteLink();
+        setupCreateLink();
+        setupEditLink();
+
         updateRealmContent(realmSidebarPanel.getCurrentRealm());
     }
 
@@ -106,12 +110,10 @@ public class Realms extends BasePage {
         }
     }
 
-    private void updateRealmContent(final RealmTO realmTO) {
+    private WebMarkupContainer updateRealmContent(final RealmTO realmTO) {
         content.addOrReplace(new Label("header", realmTO.getName()));
         content.addOrReplace(new Realm("body", realmTO, getPageReference()));
-        setupDeleteLink();
-        setupCreateLink();
-        setupEditLink();
+        return content;
     }
 
     private void setupDeleteLink() {
@@ -132,6 +134,7 @@ public class Realms extends BasePage {
                     realmRestClient.delete(toBeDeleted.getFullPath());
 
                     target.add(realmSidebarPanel.reloadRealmTree());
+                    target.add(updateRealmContent(realmSidebarPanel.getCurrentRealm()));
 
                     info(getString(Constants.OPERATION_SUCCEEDED));
                     feedbackPanel.refresh(target);

http://git-wip-us.apache.org/repos/asf/syncope/blob/a6b51b0d/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmSidebarPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmSidebarPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmSidebarPanel.java
index 4084a53..5d0d7b8 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmSidebarPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmSidebarPanel.java
@@ -25,6 +25,8 @@ import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.panels.RealmSidebarPanel.ControlSidebarClick;
 import org.apache.syncope.client.console.rest.RealmRestClient;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.wicket.MarkupContainer;
@@ -53,10 +55,12 @@ public class RealmSidebarPanel extends Panel {
 
     private final WebMarkupContainer menu;
 
-    private RealmTO currentRealm;
+    private List<RealmTO> currentPath;
 
     private final PageReference pageRef;
 
+    private Map<Long, Pair<RealmTO, List<RealmTO>>> tree;
+
     private boolean reload = false;
 
     public RealmSidebarPanel(final String id, final PageReference pageRef) {
@@ -67,12 +71,10 @@ public class RealmSidebarPanel extends Panel {
         Collections.sort(realms, new RealmNameComparator());
 
         menu = new WebMarkupContainer("menu");
-
         menu.setOutputMarkupId(true);
         add(menu);
 
         reloadRealmTree(reloadRealmParentMap(realms), 0L, menu);
-        setCurrentRealm(realms.get(0));
     }
 
     public final RealmSidebarPanel reloadRealmTree() {
@@ -81,12 +83,20 @@ public class RealmSidebarPanel extends Panel {
     }
 
     private MarkupContainer reloadRealmTree(
-            final Map<Long, List<RealmTO>> parentMap, final Long key, final MarkupContainer container) {
+            final Map<Long, Pair<RealmTO, List<RealmTO>>> parentMap, final Long key, final MarkupContainer container) {
+
+        // set the current active path base on the current parent map
+        setCurrentRealm(getCurrentRealm());
+
         final RepeatingView listItems = new RepeatingView("list");
         listItems.setOutputMarkupId(true);
         container.addOrReplace(listItems);
 
-        for (final RealmTO realm : parentMap.get(key)) {
+        if (!parentMap.containsKey(key)) {
+            return container;
+        }
+
+        for (final RealmTO realm : parentMap.get(key).getRight()) {
             final Fragment fragment;
 
             final AjaxLink<Void> link = new AjaxLink<Void>("link") {
@@ -109,7 +119,7 @@ public class RealmSidebarPanel extends Panel {
             link.setMarkupId("item-" + realm.getKey());
             link.addOrReplace(new Label("name", new PropertyModel<String>(realm, "name")));
 
-            if (parentMap.containsKey(realm.getKey()) && !parentMap.get(realm.getKey()).isEmpty()) {
+            if (parentMap.containsKey(realm.getKey()) && !parentMap.get(realm.getKey()).getRight().isEmpty()) {
                 fragment = new Fragment(String.valueOf(realm.getKey()), "withChildren", RealmSidebarPanel.this);
 
                 final Link<Void> angle = new Link<Void>("angle") {
@@ -130,7 +140,12 @@ public class RealmSidebarPanel extends Panel {
                 angle.setMarkupId("angle-" + realm.getKey());
                 fragment.addOrReplace(angle);
 
-                reloadRealmTree(parentMap, realm.getKey(), fragment);
+                final WebMarkupContainer subtree = new WebMarkupContainer("subtree");
+                subtree.setOutputMarkupId(true);
+                subtree.setMarkupId("subtree");
+                fragment.add(subtree);
+
+                reloadRealmTree(parentMap, realm.getKey(), subtree);
             } else {
                 fragment = new Fragment(String.valueOf(realm.getKey()), "withoutChildren", RealmSidebarPanel.this);
             }
@@ -143,24 +158,24 @@ public class RealmSidebarPanel extends Panel {
         return container;
     }
 
-    private Map<Long, List<RealmTO>> reloadRealmParentMap() {
+    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap() {
         final List<RealmTO> realms = realmRestClient.list();
         Collections.sort(realms, new RealmNameComparator());
         return reloadRealmParentMap(realms);
     }
 
-    private Map<Long, List<RealmTO>> reloadRealmParentMap(final List<RealmTO> realms) {
-        final Map<Long, List<RealmTO>> res = new HashMap<>();
-        res.put(0L, new ArrayList<RealmTO>());
+    private Map<Long, Pair<RealmTO, List<RealmTO>>> reloadRealmParentMap(final List<RealmTO> realms) {
+        tree = new HashMap<>();
+        tree.put(0L, Pair.<RealmTO, List<RealmTO>>of(realms.get(0), new ArrayList<RealmTO>()));
 
         final Map<Long, List<RealmTO>> cache = new HashMap<>();
 
         for (RealmTO realm : realms) {
-            if (res.containsKey(realm.getParent())) {
-                res.get(realm.getParent()).add(realm);
+            if (tree.containsKey(realm.getParent())) {
+                tree.get(realm.getParent()).getRight().add(realm);
 
                 final List<RealmTO> children = new ArrayList<>();
-                res.put(realm.getKey(), children);
+                tree.put(realm.getKey(), Pair.<RealmTO, List<RealmTO>>of(realm, children));
 
                 if (cache.containsKey(realm.getKey())) {
                     children.addAll(cache.get(realm.getKey()));
@@ -175,7 +190,7 @@ public class RealmSidebarPanel extends Panel {
             }
         }
 
-        return res;
+        return tree;
     }
 
     private static class RealmNameComparator implements Comparator<RealmTO>, Serializable {
@@ -196,12 +211,29 @@ public class RealmSidebarPanel extends Panel {
         }
     }
 
-    private void setCurrentRealm(final RealmTO realmTO) {
-        this.currentRealm = realmTO;
+    public final void setCurrentRealm(final RealmTO realmTO) {
+        RealmTO realm;
+
+        if (tree.containsKey(realmTO.getKey())) {
+            realm = realmTO;
+        } else if (tree.containsKey(realmTO.getParent())) {
+            realm = tree.get(realmTO.getParent()).getLeft();
+        } else {
+            realm = tree.get(0L).getLeft();
+        }
+
+        this.currentPath = new ArrayList<>();
+        this.currentPath.add(realm);
+
+        while (realm.getParent() != 0L) {
+            realm = tree.get(realm.getParent()).getLeft();
+            this.currentPath.add(realm);
+        }
     }
 
     public RealmTO getCurrentRealm() {
-        return this.currentRealm;
+        return this.currentPath == null || this.currentPath.isEmpty()
+                ? tree.get(0L).getLeft() : this.currentPath.get(0);
     }
 
     public static class ControlSidebarClick<T> {
@@ -228,6 +260,10 @@ public class RealmSidebarPanel extends Panel {
     public void renderHead(final IHeaderResponse response) {
         if (reload) {
             response.render(OnLoadHeaderItem.forScript("$.AdminLTE.tree('.syncopeSidebar');"));
+
+            for (RealmTO realm : this.currentPath.subList(1, this.currentPath.size())) {
+                response.render(OnLoadHeaderItem.forScript(String.format("$('#angle-%d').click();", realm.getKey())));
+            }
         } else {
             reload = true;
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/a6b51b0d/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmSidebarPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmSidebarPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmSidebarPanel.html
index 71ff092..2faedc9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmSidebarPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/RealmSidebarPanel.html
@@ -26,7 +26,7 @@ under the License.
         </ul>
       </section>
     </aside>
-    <div  id="control" name="control" class="control-sidebar-bg inner-control-sidebar"></div>
+    <div id="control" name="control" class="control-sidebar-bg inner-control-sidebar"></div>
 
     <wicket:fragment wicket:id="withChildren">
       <li id="treeview" name="treeview" class="treeview">
@@ -36,7 +36,7 @@ under the License.
         <a href="#" class="angle" wicket:id="angle">
           <i class="fa fa-angle-left pull-right"></i>
         </a>
-        <ul id="subtree" name="subtree" class="treeview-menu">
+        <ul wicket:id="subtree" name="subtree" class="treeview-menu">
           <wicket:container wicket:id="list"></wicket:container>
         </ul>
       </li>