modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 93 +++++++--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalColumn.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java | 36 ++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java | 1 modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 9 6 files changed, 101 insertions(+), 47 deletions(-)
New commits: commit 352bf4d2ce0838e51f5b47805e95057933fcd1d8 Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Jan 4 16:02:14 2011 -0500
Add Dashboard Work - Fix several issues with Add Dashboard: -- add and remove column counts could get corrupted -- addition of portlets did not use valid positions -- persistence of added potlets was not correct -- remove column did not play with persistence were not in good shape. - Ensure Edit Mode is immediately active for a newly added dashboard. - Slight reorder the edit mode widgets, and a few title changes, for clarity - Added portlet column border (experiment). This helps define your space when adding a new dash. - Sort the 'Add Portlet' menu
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java index 7092064..32c0b13 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java @@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.client.dashboard; import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.TreeMap;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Overflow; @@ -76,7 +77,7 @@ public class DashboardView extends LocatableVLayout { IMenuButton addPortlet;
Set<PortletWindow> portlets = new HashSet<PortletWindow>(); - private static String STOP = MSG.common_title_stop(); + private static String STOP = MSG.view_dashboards_portlets_refresh_none(); private static String REFRESH1 = MSG.view_dashboards_portlets_refresh_one_min(); private static String REFRESH5 = MSG.view_dashboards_portlets_refresh_multiple_min(String.valueOf(5)); private static String REFRESH10 = MSG.view_dashboards_portlets_refresh_multiple_min(String.valueOf(10)); @@ -133,9 +134,7 @@ public class DashboardView extends LocatableVLayout { loadPortlets();
addMember(editForm); - editForm.hide(); addMember(portalLayout); - }
private DynamicForm buildEditForm() { @@ -185,27 +184,37 @@ public class DashboardView extends LocatableVLayout { removeColumn.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {
- Canvas[] canvases = portalLayout.getMembers(); - int numMembers = canvases.length; - if (numMembers > 0) { - Canvas lastMember = canvases[numMembers - 1]; - portalLayout.removeMember(lastMember); - numColItem.setValue(numMembers - 1); + Canvas[] columns = portalLayout.getMembers(); + int numColumns = columns.length; + if (numColumns > 0) { + PortalColumn lastColumn = (PortalColumn) columns[numColumns - 1]; + for (Canvas portlet : lastColumn.getMembers()) { + boolean removed = storedDashboard + .removePortlet(((PortletWindow) portlet).getDashboardPortlet()); + } + portalLayout.removeMember(lastColumn); + numColItem.setValue(numColumns - 1); storedDashboard.setColumns(storedDashboard.getColumns() - 1); save(); } - save(); } });
Menu addPortletMenu = new Menu(); HashMap<String, String> keyNameMap = PortletFactory.getRegisteredPortletNameMap(); + // the assumption here is that the portlet names are unique. we want a sorted menu here, so create a + // sorted map from portlet name to portlet key and use that to generate the menu. It would be nice if you + // could just call Menu.sort() but it's not supported (yet?). + TreeMap<String, String> nameKeyMap = new TreeMap<String, String>(); for (String portletKey : keyNameMap.keySet()) { - MenuItem menuItem = new MenuItem(keyNameMap.get(portletKey)); - menuItem.setAttribute("portletKey", portletKey); + nameKeyMap.put(keyNameMap.get(portletKey), portletKey); + } + // now use the reversed map for the menu generation + for (String portletName : nameKeyMap.keySet()) { + MenuItem menuItem = new MenuItem(portletName); + menuItem.setAttribute("portletKey", nameKeyMap.get(portletName)); addPortletMenu.addItem(menuItem); } - addPortlet = new LocatableIMenuButton(extendLocatorId("AddPortlet"), MSG.common_title_add_portlet(), addPortletMenu);
@@ -227,7 +236,6 @@ public class DashboardView extends LocatableVLayout { addCanvas.setEndRow(false);
ColorPickerItem picker = new ColorPickerItem(); - picker.setTitle(MSG.common_title_background()); picker.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent changedEvent) { @@ -289,7 +297,7 @@ public class DashboardView extends LocatableVLayout { .common_title_change_refresh_time(), refreshMenu); refreshMenu.setAutoHeight(); refreshMenuButton.getMenu().setItems(refreshMenuItems); - refreshMenuButton.setWidth(170); + refreshMenuButton.setWidth(140); refreshMenuButton.setShowTitle(true); refreshMenuButton.setTop(0); refreshMenuButton.setIconOrientation("left"); @@ -301,10 +309,11 @@ public class DashboardView extends LocatableVLayout { refreshCanvas.setStartRow(false); refreshCanvas.setEndRow(false);
- editForm.setItems(nameItem, numColItem, addCanvas, picker, addColumn, removeColumn, refreshCanvas); + editForm.setItems(nameItem, addCanvas, numColItem, addColumn, removeColumn, picker, refreshCanvas); updateRefreshMenu(); this.refreshMenuButton.markForRedraw(); markForRedraw(); + return editForm; }
@@ -333,16 +342,16 @@ public class DashboardView extends LocatableVLayout { DashboardPortlet storedPortlet = new DashboardPortlet(portletName, portletKey, 250);
final PortletWindow newPortlet = new PortletWindow(extendLocatorId(portletKey), this, storedPortlet); - portlets.add(newPortlet); - - storedDashboard.addPortlet(storedPortlet, 0, 0); - newPortlet.setTitle(portletName); - newPortlet.setHeight(350); newPortlet.setVisible(false);
- PortalColumn column = portalLayout.addPortlet(newPortlet, 0); + portlets.add(newPortlet); + + int columnIndex = portalLayout.addPortlet(newPortlet); + PortalColumn column = portalLayout.getPortalColumn(columnIndex); + + storedDashboard.addPortlet(storedPortlet, columnIndex, column.getMembers().length - 1);
// also insert a blank spacer element, which will trigger the built-in // animateMembers layout animation @@ -418,7 +427,7 @@ public class DashboardView extends LocatableVLayout { } for (PortletWindow portletWindow : portlets) { for (DashboardPortlet portlet : result.getPortlets()) { - if (portletWindow.getDashboardPortlet().equals(portlet)) { + if (equalsDashboardPortlet(portletWindow.getDashboardPortlet(), portlet)) { portletWindow.setDashboardPortlet(portlet);
//restarting portlet auto-refresh with newest settings @@ -439,6 +448,44 @@ public class DashboardView extends LocatableVLayout { } }
+ /** + * This an enhanced equals for portlets that allows equality for unpersisted portlets. At times (like addPortlet) + * a portlet may have been associated with its window prior to being persisted. In this case we can consider + * it equal if it is associated with the same dashboard and has the same positioning. Note that key-name pairing + * can not be used for equality as a dashboard is allowed to have the same portlet multiple times, with a default + * name. But they can not hold the same position. + * + * @param portlet1 + * @param portlet2 + * @return + */ + private boolean equalsDashboardPortlet(DashboardPortlet portlet1, DashboardPortlet portlet2) { + + if (portlet1.equals(portlet2)) { + return true; + } + + // make sure at least one portlet is not persisted + if (portlet1.getId() > 0 && portlet2.getId() > 0) { + return false; + } + + // must match dash and position for psuedo-equality + if (portlet1.getDashboard().getId() != portlet2.getDashboard().getId()) { + return false; + } + + if (portlet1.getColumn() != portlet2.getColumn()) { + return false; + } + + if (portlet1.getIndex() != portlet2.getIndex()) { + return false; + } + + return true; + } + public void delete() { if (null != this.storedDashboard && this.storedDashboard.getId() > 0) { GWTServiceLookup.getDashboardService().removeDashboard(this.storedDashboard.getId(), diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java index 3d20f3c..b981382 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java @@ -191,6 +191,7 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView
selectedDashboardView = (DashboardView) selectedTab.getPane(); selectedDashboard = selectedDashboardView.getDashboard(); + editButton.setTitle(editMode ? MSG.common_title_view_mode() : MSG.common_title_edit_mode()); selectedDashboardView.setEditMode(editMode); } }); @@ -320,11 +321,10 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView tab.setPane(dashboardView); tab.setCanClose(true);
- tabSet.addTab(tab); + editMode = true;
+ tabSet.addTab(tab); tabSet.selectTab(tab); - editMode = true; - editButton.setTitle(editMode ? MSG.common_title_view_mode() : MSG.common_title_edit_mode()); } }); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalColumn.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalColumn.java index 3eaf969..8b92e5a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalColumn.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalColumn.java @@ -30,6 +30,7 @@ public class PortalColumn extends VStack {
// leave some space between portlets setMembersMargin(6); + this.setBorder("1px solid #999999");
// enable predefined component animation setAnimateMembers(true); @@ -48,7 +49,7 @@ public class PortalColumn extends VStack { setShowDragPlaceHolder(true);
Canvas placeHolderProperties = new Canvas(); - placeHolderProperties.setBorder("2px solid 4A5D75"); + placeHolderProperties.setBorder("2px solid #4A5D75"); setPlaceHolderProperties(placeHolderProperties); } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java index aad543c..65424e2 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java @@ -87,27 +87,33 @@ public class PortalLayout extends LocatableHLayout { } }
- public PortalColumn addPortlet(PortletWindow portlet) { - // find the column with the fewest portlets - int fewestPortlets = Integer.MAX_VALUE; - PortalColumn fewestPortletsColumn = null; - for (int i = 0; i < getMembers().length; i++) { - int numPortlets = ((PortalColumn) getMember(i)).getMembers().length; - if (numPortlets < fewestPortlets) { - fewestPortlets = numPortlets; - fewestPortletsColumn = (PortalColumn) getMember(i); + public PortalColumn getPortalColumn(int column) { + return ((PortalColumn) getMember(column)); + } + + public int addPortlet(PortletWindow portlet) { + int fewestPortletsColumnIndex = -1; + int fewestPortletsColumnCount = Integer.MAX_VALUE; + for (int i = 0, numColumns = getMembers().length; (i < numColumns); ++i) { + PortalColumn portletColumn = (PortalColumn) getMember(i); + int memberCount = portletColumn.getMembers().length; + if (fewestPortletsColumnCount > memberCount) { + fewestPortletsColumnIndex = i; + fewestPortletsColumnCount = memberCount; } } - fewestPortletsColumn.addMember(portlet); - return fewestPortletsColumn; + + addPortlet(portlet, fewestPortletsColumnIndex); + + return fewestPortletsColumnIndex; }
- public PortalColumn addPortlet(PortletWindow portlet, int column) { - PortalColumn fewestPortletsColumn = (PortalColumn) getMember(column); + public PortalColumn addPortlet(PortletWindow portlet, int columnIndex) {
- fewestPortletsColumn.addMember(portlet); + PortalColumn portalColumn = (PortalColumn) getMember(columnIndex); + portalColumn.addMember(portlet);
- return fewestPortletsColumn; + return portalColumn; }
public void save() { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java index aaa2229..d1f2b9f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java @@ -74,7 +74,6 @@ public class PortletFactory { registeredPortletNameMap.put(MessagePortlet.KEY, MessagePortlet.NAME); registeredPortletNameMap.put(ProblemResourcesPortlet.KEY, ProblemResourcesPortlet.NAME); registeredPortletNameMap.put(OperationsPortlet.KEY, OperationsPortlet.NAME); - //registeredPortletNameMap = Collections.unmodifiableMap(registeredPortletNameMap); }
public static Portlet buildPortlet(PortletWindow portletWindow, DashboardPortlet storedPortlet) { diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties index 548d86b..0ce1275 100644 --- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties +++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties @@ -79,7 +79,7 @@ common_title_background = Background common_title_bundle = Bundle common_title_bundles = Bundles common_title_category = Category -common_title_change_refresh_time=Change Refresh Time +common_title_change_refresh_time=Refresh Interval common_title_columns = Columns common_title_configuration = Configuration common_title_compatibleGroups = Compatible Groups @@ -131,7 +131,7 @@ common_title_platform = Platform common_title_platform_total = Platform Total common_title_plugin = Plugin common_title_port = Port -common_title_portlet_auto_refresh=Portlet Auto-refresh Interval +common_title_portlet_auto_refresh=Portlet Auto-Refresh Interval common_title_providers = Providers common_title_recent_alerts = Recent Alerts common_title_recent_configuration_updates = Recent Configuration Updates @@ -1172,8 +1172,9 @@ view_dashboards_title = Dashboard view_dashboards_confirm1 = Are you sure you want to delete view_dashboards_portlets_refresh_fail1=Failed to update interval for portlets that auto-refresh view_dashboards_portlets_refresh_fail2=Failed to disable reload for portlets that auto-refresh -view_dashboards_portlets_refresh_multiple_min = Refresh every {0} minutes -view_dashboards_portlets_refresh_one_min = Refresh every 1 minute +view_dashboards_portlets_refresh_none = No Refresh +view_dashboards_portlets_refresh_one_min = 1 minute +view_dashboards_portlets_refresh_multiple_min = {0} minutes view_dashboards_portlets_refresh_success1=Updated interval for portlets that auto-refresh view_dashboards_portlets_refresh_success2=Stopping reload for portlets that auto-refresh view_dashboardsManager_error1 = Failed to add new dashboard
rhq-commits@lists.fedorahosted.org