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(a)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