[rhq] modules/core modules/enterprise
by mazz
modules/core/domain/src/main/java/org/rhq/core/domain/tagging/compsite/TagReportComposite.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TagCloudView.java | 125 ++++++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TaggedView.java | 58 +++-
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 5
5 files changed, 169 insertions(+), 32 deletions(-)
New commits:
commit 8337b34c8a757821de0c22f4c30f9f32b55265f2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 30 00:57:02 2011 -0400
BZ 691978 - fix tag cloud view - you can now delete tags. prettied up the UI as well
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/tagging/compsite/TagReportComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/tagging/compsite/TagReportComposite.java
index 57084e2..d5bcceb 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/tagging/compsite/TagReportComposite.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/tagging/compsite/TagReportComposite.java
@@ -31,7 +31,6 @@ public class TagReportComposite extends Tag {
private static final long serialVersionUID = 1L;
- private Tag tag;
private long total;
private long resourceCount;
private long resourceGroupCount;
@@ -46,8 +45,8 @@ public class TagReportComposite extends Tag {
public TagReportComposite(int id, String namespace, String semantic, String name, long total, long resourceCount,
long resourceGroupCount, long bundleCount, long bundleVersionCount, long bundleDeploymentCount,
long bundleDestinationCount) {
- this.tag = new Tag(namespace, semantic, name);
- this.tag.setId(id);
+ super(namespace, semantic, name);
+ setId(id);
this.total = total;
this.resourceCount = resourceCount;
this.resourceGroupCount = resourceGroupCount;
@@ -58,7 +57,7 @@ public class TagReportComposite extends Tag {
}
public Tag getTag() {
- return tag;
+ return this;
}
public long getTotal() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
index 61bfede..2a6beeb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LinkManager.java
@@ -383,7 +383,11 @@ public class LinkManager {
}
public static String getTagLink(String tag) {
- return "#Reports/Subsystems/Tags/" + tag;
+ if (tag == null) {
+ return "#Reports/Subsystems/Tags";
+ } else {
+ return "#Reports/Subsystems/Tags/" + tag;
+ }
}
public static String getBundleLink(int bundleId) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TagCloudView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TagCloudView.java
index 61164f3..b2ce6bc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TagCloudView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TagCloudView.java
@@ -24,26 +24,42 @@ package org.rhq.enterprise.gui.coregui.client.report.tag;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.HTMLFlow;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
import org.rhq.core.domain.criteria.TagCriteria;
+import org.rhq.core.domain.tagging.Tag;
import org.rhq.core.domain.tagging.compsite.TagReportComposite;
+import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * Shows the tags in a large HTML block, where the most used tags are shown in bigger fonts.
+ *
* @author Greg Hinkle
+ * @author John Mazzitelli
*/
public class TagCloudView extends LocatableVLayout {
- private PageList<TagReportComposite> tags;
+ private static final String REMOVE_ICON = "[skin]/images/actions/remove.png";
+ private static final int MIN_FONTSIZE = 8;
+ private static final int MAX_FONTSIZE = 22;
+ private PageList<TagReportComposite> tags;
private String selectedTag;
+ private IButton deleteButton;
public TagCloudView(String locatorId) {
super(locatorId);
@@ -52,10 +68,16 @@ public class TagCloudView extends LocatableVLayout {
@Override
protected void onDraw() {
super.onDraw();
+ refresh();
+ }
+ private void refresh() {
removeMembers(getMembers());
- GWTServiceLookup.getTagService().findTagReportCompositesByCriteria(new TagCriteria(),
+ TagCriteria tagCriteria = new TagCriteria();
+ tagCriteria.setPageControl(PageControl.getUnlimitedInstance());
+
+ GWTServiceLookup.getTagService().findTagReportCompositesByCriteria(tagCriteria,
new AsyncCallback<PageList<TagReportComposite>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tagCloud_error_fetchFailure(), caught);
@@ -68,36 +90,34 @@ public class TagCloudView extends LocatableVLayout {
}
private void drawTags(PageList<TagReportComposite> tags) {
-
if (tags == null) {
- return; // Tags still loading
+ return; // tags are still loading
}
this.tags = tags;
+ // determine the maximum number of times any single tag is used
long max = 0;
- long total = 0;
for (TagReportComposite tag : tags) {
if (tag.getTotal() > max) {
max = tag.getTotal();
}
- total += tag.getTotal();
}
+ // sort the tags so they appear alphabetically
Collections.sort(tags, new Comparator<TagReportComposite>() {
public int compare(TagReportComposite o1, TagReportComposite o2) {
return o1.getTag().toString().compareTo(o2.getTag().toString());
}
});
+ // build the HTML block that contains all the tags with variable font sizes
+ // where the font size represents the relative number of times the tag is used
StringBuilder buf = new StringBuilder();
-
- int minFont = 8;
- int maxFont = 22;
-
for (TagReportComposite tag : tags) {
- int font = (int) ((((double) tag.getTotal()) / (double) max) * (maxFont - minFont)) + minFont;
+ int font = (int) ((((double) tag.getTotal()) / (double) max) * (MAX_FONTSIZE - MIN_FONTSIZE))
+ + MIN_FONTSIZE;
buf.append("<a href=\"").append(LinkManager.getTagLink(tag.getTag().toString())).append(
"\" style=\"font-size: ").append(font).append("pt; margin: 8px;\"");
@@ -111,16 +131,93 @@ public class TagCloudView extends LocatableVLayout {
buf.append(">").append(tag.getTag()).append("</a> ");
}
-
HTMLFlow flow = new HTMLFlow(buf.toString());
-
addMember(flow);
}
+ public String getSelectedTag() {
+ return this.selectedTag;
+ }
+
+ /**
+ * Determines which, if any, tag is currently selected.
+ *
+ * @param selectedTag the full tag name, or <code>null</code> if nothing is selected
+ */
public void setSelectedTag(String selectedTag) {
this.selectedTag = selectedTag;
+ TagReportComposite selected = getSelectedTagReportComposite();
+ getDeleteButton().setDisabled(selected == null || selected.getTotal() > 0); // don't be able to delete non-existent tag or tag that is used
removeMembers(getMembers());
- drawTags(tags);
+ drawTags(this.tags);
}
+ /**
+ * This view can provide a delete button that, when clicked, will delete the currently
+ * selected tag. This view doesn't put this delete button anywhere, the caller can place
+ * this button where ever it deems appropriate.
+ *
+ * @return a delete button component that can be placed as a member of a canvas
+ */
+ public IButton getDeleteButton() {
+ if (this.deleteButton == null) {
+ final IButton button = new DeleteButton(extendLocatorId("deleteButton"));
+ button.setIcon(REMOVE_ICON);
+ button.setIconWidth(16);
+ button.setIconHeight(16);
+ button.setTitle(MSG.view_tagCloud_deleteTag());
+ button.setAutoFit(true);
+ button.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ final TagReportComposite selected = getSelectedTagReportComposite();
+ if (selected != null) {
+ HashSet<Tag> doomedTag = new HashSet<Tag>(1);
+ doomedTag.add(selected.getTag());
+ GWTServiceLookup.getTagService().removeTags(doomedTag, new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ tags.remove(selected);
+ CoreGUI.goToView(LinkManager.getTagLink(null));
+ CoreGUI.getMessageCenter().notify(
+ new Message(MSG.view_tagCloud_deleteTagSuccess(selected.getTag().toString()),
+ Severity.Info));
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_tagCloud_deleteTagFailure(selected.getTag().toString()), caught);
+ }
+ });
+ }
+ }
+ });
+ this.deleteButton = button;
+ }
+ return this.deleteButton;
+ }
+
+ private TagReportComposite getSelectedTagReportComposite() {
+ if (selectedTag != null && tags != null) {
+ for (TagReportComposite tag : tags) {
+ if (tag.getTag().toString().equals(selectedTag)) {
+ return tag;
+ }
+ }
+ }
+ return null;
+ }
+
+ class DeleteButton extends LocatableIButton {
+ public DeleteButton(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ deleteButton = null;
+ }
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TaggedView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TaggedView.java
index 465b37c..36e2ff8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TaggedView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/tag/TaggedView.java
@@ -26,9 +26,13 @@ import java.util.ArrayList;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.widgets.tab.Tab;
+import com.smartgwt.client.widgets.tab.events.TabSelectedEvent;
+import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
+import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.tagging.Tag;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ImageManager;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.bundle.deployment.BundleDeploymentListView;
import org.rhq.enterprise.gui.coregui.client.bundle.destination.BundleDestinationListView;
@@ -43,7 +47,11 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTabSet;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * The main tag cloud view which will show the actual tag cloud with a tabbed view
+ * underneath containing all the tables of data for the selected tag.
+ *
* @author Greg Hinkle
+ * @author John Mazzitelli
*/
public class TaggedView extends LocatableVLayout implements BookmarkableView {
@@ -52,6 +60,7 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
private TagCloudView tagCloudView;
private LocatableTabSet container;
private ArrayList<Table> viewsWithTags = new ArrayList<Table>();
+ private int selectedTabNum = 0;
public TaggedView(String locatorId) {
super(locatorId);
@@ -73,40 +82,48 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
addMember(tagCloudView);
}
- @Override
- protected void onDraw() {
- super.onDraw();
- }
-
private void viewTag(String tagString) {
+ // if we are switching tags, remove all our tables - we need to recreate them with new criteria
+ if (tagString != null && !tagString.equals(tagCloudView.getSelectedTag())) {
+ destroyTagTables();
+ }
+
tagCloudView.setSelectedTag(tagString);
- Tag tag = new Tag(tagString);
+ if (container == null) {
- Criteria criteria = new Criteria();
- criteria.addCriteria("tagNamespace", tag.getNamespace());
- criteria.addCriteria("tagSemantic", tag.getSemantic());
- criteria.addCriteria("tagName", tag.getName());
+ Tag tag = new Tag(tagString);
- if (container == null) {
+ Criteria criteria = new Criteria();
+ criteria.addCriteria("tagNamespace", tag.getNamespace());
+ criteria.addCriteria("tagSemantic", tag.getSemantic());
+ criteria.addCriteria("tagName", tag.getName());
container = new LocatableTabSet(extendLocatorId("tags"));
container.setWidth100();
container.setHeight100();
- addMember(container);
+ container.setTabBarControls(tagCloudView.getDeleteButton());
+ container.addTabSelectedHandler(new TabSelectedHandler() {
+ public void onTabSelected(TabSelectedEvent event) {
+ selectedTabNum = event.getTabNum();
+ }
+ });
+ container.setSelectedTab(selectedTabNum); // this is so we keep the same tab the user selected between tag selections
Tab tab;
BundlesListView bundlesView = new BundlesListView(getLocatorId(), criteria, null);
viewsWithTags.add(bundlesView);
tab = new LocatableTab(extendLocatorId("bundleList"), MSG.view_bundle_bundles());
+ tab.setIcon(ImageManager.getBundleIcon());
tab.setPane(bundlesView);
container.addTab(tab);
BundleVersionListView bundleVersionListView = new BundleVersionListView(getLocatorId(), criteria);
viewsWithTags.add(bundleVersionListView);
tab = new LocatableTab(extendLocatorId("bundleVersionList"), MSG.view_bundle_bundleVersions());
+ tab.setIcon("subsystems/bundle/BundleVersion_16.png");
tab.setPane(bundleVersionListView);
container.addTab(tab);
@@ -115,6 +132,7 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
false);
viewsWithTags.add(bundleDeploymentListView);
tab = new LocatableTab(extendLocatorId("bundleDeploymentsList"), MSG.view_bundle_bundleDeployments());
+ tab.setIcon("subsystems/bundle/BundleDeployment_16.png");
tab.setPane(bundleDeploymentListView);
container.addTab(tab);
@@ -122,6 +140,7 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
criteria);
viewsWithTags.add(bundleDestinationListView);
tab = new LocatableTab(extendLocatorId("bundleDestinationsList"), MSG.view_bundle_bundleDestinations());
+ tab.setIcon("subsystems/bundle/BundleDestination_16.png");
tab.setPane(bundleDestinationListView);
container.addTab(tab);
@@ -129,12 +148,15 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
.view_taggedResources_title());
viewsWithTags.add(resourceView);
tab = new LocatableTab(extendLocatorId("resourceList"), MSG.view_taggedResources_title());
+ tab.setIcon(ImageManager.getResourceIcon(ResourceCategory.SERVICE));
tab.setPane(resourceView);
container.addTab(tab);
for (Table t : viewsWithTags) {
t.setShowFooter(false);
}
+
+ addMember(container);
}
for (Table t : viewsWithTags) {
@@ -142,10 +164,22 @@ public class TaggedView extends LocatableVLayout implements BookmarkableView {
}
}
+ private void destroyTagTables() {
+ if (this.container != null) {
+ this.viewsWithTags.clear();
+ removeMember(this.container);
+ this.container.destroy();
+ this.container = null;
+ }
+ }
+
public void renderView(ViewPath viewPath) {
if (!viewPath.isEnd()) {
String tagString = viewPath.getCurrent().getPath();
viewTag(tagString);
+ } else {
+ destroyTagTables();
+ tagCloudView.setSelectedTag(null);
}
}
}
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 fd6ac7e..a965934 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
@@ -2021,10 +2021,13 @@ view_measurementOob_title = Suspect Metrics
view_tagCloud_title = Tag Cloud
view_tagCloud_error_fetchFailure = Failed to load tags.
view_tagCloud_error_tagUsedCount = Tag used {0} times.
+view_tagCloud_deleteTag = Delete Tag
+view_tagCloud_deleteTagFailure = Failed to delete the tag [{0}]
+view_tagCloud_deleteTagSuccess = You successfully deleted the tag [{0}]
view_reports_inventorySummary_failFetch = Failed to get inventory summary
-view_taggedResources_title = Tagged Resources
+view_taggedResources_title = Resources
view_reports_alertDefinitions_parentHover = Click to go to the parent alert definition
view_reports_alertDefinitions_resTypeLoadError = Cannot get the template resource type - unable to view the alert template.
13 years, 1 month
[rhq] Branch 'release-3.0.1' - 2 commits - modules/core
by John Sanda
modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java | 42 ++++++++++
modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java | 14 ++-
2 files changed, 53 insertions(+), 3 deletions(-)
New commits:
commit 1a82b2b9bbf077709f6aeaef1117ba218dd02489
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Mar 29 20:58:17 2011 -0400
Removing file that was accidentally committed from merge conflict
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig
deleted file mode 100644
index 8f8b205..0000000
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.core.pc;
-
-import java.beans.Introspector;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import javax.security.auth.login.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.rhq.core.clientapi.agent.bundle.BundleAgentService;
-import org.rhq.core.clientapi.agent.configuration.ConfigurationAgentService;
-import org.rhq.core.clientapi.agent.content.ContentAgentService;
-import org.rhq.core.clientapi.agent.discovery.DiscoveryAgentService;
-import org.rhq.core.clientapi.agent.inventory.ResourceFactoryAgentService;
-import org.rhq.core.clientapi.agent.measurement.MeasurementAgentService;
-import org.rhq.core.clientapi.agent.operation.OperationAgentService;
-import org.rhq.core.clientapi.agent.support.SupportAgentService;
-import org.rhq.core.pc.agent.AgentRegistrar;
-import org.rhq.core.pc.agent.AgentService;
-import org.rhq.core.pc.agent.AgentServiceLifecycleListener;
-import org.rhq.core.pc.agent.AgentServiceStreamRemoter;
-import org.rhq.core.pc.bundle.BundleManager;
-import org.rhq.core.pc.configuration.ConfigurationManager;
-import org.rhq.core.pc.configuration.ConfigurationManagerInitializer;
-import org.rhq.core.pc.content.ContentManager;
-import org.rhq.core.pc.event.EventManager;
-import org.rhq.core.pc.inventory.InventoryManager;
-import org.rhq.core.pc.inventory.ResourceContainer;
-import org.rhq.core.pc.inventory.ResourceFactoryManager;
-import org.rhq.core.pc.measurement.MeasurementManager;
-import org.rhq.core.pc.operation.OperationManager;
-import org.rhq.core.pc.plugin.PluginComponentFactory;
-import org.rhq.core.pc.plugin.PluginManager;
-import org.rhq.core.pc.support.SupportManager;
-import org.rhq.core.pluginapi.util.FileUtils;
-
-/**
- * This is the embeddable container that houses all plugins and the infrastructure that binds them together. It contains
- * all the managers such as {@link PluginManager} and {@link InventoryManager}.
- *
- * <p>This container is controlled by its lifecycle methods ({@link #initialize()} and {@link #shutdown()}. Prior to
- * initialization, this container's configuration should be set via
- * {@link #setConfiguration(PluginContainerConfiguration)}. If this is not done, a default configuration will be
- * created.</p>
- *
- * @author Greg Hinkle
- * @author John Mazzitelli
- */
-public class PluginContainer implements ContainerService {
- private static final PluginContainer INSTANCE = new PluginContainer();
-
- private final Log log = LogFactory.getLog(PluginContainer.class);
-
-<<<<<<< HEAD
-=======
- private static final class NullRebootRequestListener implements RebootRequestListener {
- @Override
- public void reboot() {
- }
- }
-
- /**
- * Invoked by the plugin container immediately after it is initialized
- */
- public static interface InitializationListener {
- /**
- * Notifies the listener that the plugin container has been initialized. This method executes in the same
- * thread in which {@link PluginContainer#initialize()} is executing.
- */
- void initialized();
- }
-
->>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
- // our management interface
- private PluginContainerMBeanImpl mbean;
-
- private PluginContainerConfiguration configuration;
- private String version;
- private boolean started = false;
-
- private PluginManager pluginManager;
- private PluginComponentFactory pluginComponentFactory;
- private InventoryManager inventoryManager;
- private MeasurementManager measurementManager;
- private ConfigurationManager configurationManager;
- private OperationManager operationManager;
- private ResourceFactoryManager resourceFactoryManager;
- private ContentManager contentManager;
- private EventManager eventManager;
- private SupportManager supportManager;
- private BundleManager bundleManager;
-
- private Collection<AgentServiceLifecycleListener> agentServiceListeners = new LinkedHashSet<AgentServiceLifecycleListener>();
- private AgentServiceStreamRemoter agentServiceStreamRemoter = null;
- private AgentRegistrar agentRegistrar = null;
-
- // this is to prevent race conditions on startup between components from all the different managers
- private ReadWriteLock rwLock = new ReentrantReadWriteLock();
-
- private List<InitializationListener> initListeners;
- private Object initListenersLock = new Object();
-
- /**
- * Returns the singleton instance.
- *
- * @return the plugin container
- */
- public static PluginContainer getInstance() {
- return INSTANCE;
- }
-
- private PluginContainer() {
- // for why we need to do this, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727821
- try {
- Configuration.getConfiguration();
- } catch (Throwable t) {
- }
- }
-
- /**
- * Sets this plugin container's configuration which also provides configuration settings for all the internal
- * services.
- *
- * @param configuration
- */
- public void setConfiguration(PluginContainerConfiguration configuration) {
- this.configuration = configuration;
- }
-
- /**
- * Adds a listener that will be notified whenever an {@link AgentService} hosted within this plugin container is
- * started or stopped.
- *
- * @param listener
- */
- public void addAgentServiceLifecycleListener(AgentServiceLifecycleListener listener) {
- agentServiceListeners.add(listener);
- }
-
- /**
- * Removes the given listener such that it will no longer receive {@link AgentService} notifications.
- *
- * @param listener
- */
- public void removeAgentServiceLifecycleListener(AgentServiceLifecycleListener listener) {
- agentServiceListeners.remove(listener);
- }
-
- /**
- * Returns a remoter object that can be used to remote streams. If <code>null</code>, the plugin container will not
- * be able to remote streams to external clients, as in the case when the plugin container is not running inside an
- * agent (i.e. embedded mode).
- *
- * @return remoter the object that will prepare a stream to be accessed by remote clients (may be <code>null</code>)
- */
- public AgentServiceStreamRemoter getAgentServiceStreamRemoter() {
- return agentServiceStreamRemoter;
- }
-
- /**
- * Adds a remoter object that is responsible for remoting streams. If <code>null</code>, the plugin container will
- * not be able to remote streams to external clients, as in the case when the plugin container is not running inside
- * an agent (i.e. embedded mode).
- *
- * @param streamRemoter
- */
- public void setAgentServiceStreamRemoter(AgentServiceStreamRemoter streamRemoter) {
- agentServiceStreamRemoter = streamRemoter;
- }
-
- /**
- * Sets the given registrar as the object responsible for registering the plugin container with a remote server. If
- * <code>null</code>, the plugin container will not be considered running in an agent containing needing to be
- * registered with a remote server.
- *
- * @return the object that can be used to register this plugin container (may be <code>null</code>)
- */
- public AgentRegistrar getAgentRegistrar() {
- return agentRegistrar;
- }
-
- /**
- * Sets the given registrar as the object responsible for registering the plugin container with a remote server. If
- * <code>null</code>, the plugin container will not be considered running in an agent containing needing to be
- * registered with a remote server.
- *
- * @param registrar
- */
- public void setAgentRegistrar(AgentRegistrar registrar) {
- agentRegistrar = registrar;
- }
-
- /**
- * If the plugin container has been initialized and plugins have started work, this returns <code>true</code>.
- *
- * @return <code>true</code> if the plugin container was initialized and started; <code>false</code> otherwise
- */
- public boolean isStarted() {
- Lock lock = obtainReadLock();
- try {
- return started;
- } finally {
- releaseLock(lock);
- }
- }
-
- /**
- * Initializes the plugin container which initializes all internal managers. Once initialized, all plugins will be
- * activated, metrics will begin getting collected and automatic discovery will start.
- *
- * <p>Note that if no configuration was {@link #setConfiguration(PluginContainerConfiguration) set} prior to this
- * method being called, a default configuration will be created and used.</p>
- *
- * <p>If the plugin container has already been initialized, this method does nothing and returns.</p>
- */
- public void initialize() {
- initListeners = new LinkedList<InitializationListener>();
- Lock lock = obtainWriteLock();
- try {
- if (!started) {
- version = PluginContainer.class.getPackage().getImplementationVersion();
- log.info("Initializing Plugin Container" + ((version != null) ? (" v" + version) : "") + "...");
-
- if (configuration == null) {
- configuration = new PluginContainerConfiguration();
- }
-
- purgeTmpDirectoryContents();
-
- mbean = new PluginContainerMBeanImpl(this);
- mbean.register();
-
- ResourceContainer.initialize();
-
- pluginManager = new PluginManager();
- pluginComponentFactory = new PluginComponentFactory();
- inventoryManager = new InventoryManager();
- measurementManager = new MeasurementManager();
- configurationManager = new ConfigurationManager();
- operationManager = new OperationManager();
- resourceFactoryManager = new ResourceFactoryManager();
- contentManager = new ContentManager();
- eventManager = new EventManager();
- supportManager = new SupportManager();
- bundleManager = new BundleManager();
-
- startContainerService(pluginManager);
- startContainerService(pluginComponentFactory);
- startContainerService(inventoryManager);
- startContainerService(measurementManager);
- startContainerService(configurationManager);
- startContainerService(operationManager);
- startContainerService(resourceFactoryManager);
- startContainerService(contentManager);
- startContainerService(eventManager);
- startContainerService(supportManager);
- startContainerService(bundleManager);
-
- started = true;
-
- log.info("Plugin Container initialized.");
- }
- } finally {
- releaseLock(lock);
- }
-
-<<<<<<< HEAD
-=======
- synchronized (initListenersLock) {
- if (started) {
- for (InitializationListener listener : initListeners) {
- listener.initialized();
- }
- }
- initListeners.clear();
- }
-
->>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
- return;
- }
-
- /**
- * Shuts down the plugin container and all its internal services. If the plugin container has already been shutdown,
- * this method does nothing and returns.
- */
- public void shutdown() {
- Lock lock = obtainWriteLock();
- try {
- if (started) {
-
- log.info("Plugin container is being shutdown...");
-
- if (mbean != null) {
- mbean.unregister();
- mbean = null;
- }
-
- boolean isInsideAgent = configuration.isInsideAgent();
-
- bundleManager.shutdown();
- supportManager.shutdown();
- eventManager.shutdown();
- contentManager.shutdown();
- resourceFactoryManager.shutdown();
- operationManager.shutdown();
- configurationManager.shutdown();
- measurementManager.shutdown();
- inventoryManager.shutdown();
- pluginComponentFactory.shutdown();
- pluginManager.shutdown();
-
- agentServiceListeners.clear();
- agentServiceListeners = new LinkedHashSet<AgentServiceLifecycleListener>();
- agentServiceStreamRemoter = null;
- agentRegistrar = null;
-
- purgeTmpDirectoryContents();
-
- ResourceContainer.shutdown();
-
- bundleManager = null;
- supportManager = null;
- eventManager = null;
- contentManager = null;
- resourceFactoryManager = null;
- operationManager = null;
- configurationManager = null;
- measurementManager = null;
- inventoryManager = null;
- pluginComponentFactory = null;
- pluginManager = null;
-
- configuration = null;
-
- started = false;
-
- log.info("Plugin container is now shutdown.");
-
- // we typically do not want to do this if embedded somewhere other than the agent VM
- if (isInsideAgent) {
- cleanMemory();
- }
- }
- } finally {
- releaseLock(lock);
- }
-
- return;
- }
-
- /**
- * Does things that help the garbage collector clean up the memory.
- * Only call this after the plugin container has been shutdown.
- */
- private void cleanMemory() {
- Introspector.flushCaches();
- LogFactory.releaseAll();
-
- // for why we need to do this, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727821
- try {
- Configuration.setConfiguration(null);
- } catch (Throwable t) {
- }
-
- System.gc();
- }
-
- private void purgeTmpDirectoryContents() {
- try {
- FileUtils.purge(configuration.getTemporaryDirectory(), false);
- } catch (IOException e) {
- log.warn("Failed to purge contents of temporary directory - cause: " + e);
- }
- }
-
- private void startContainerService(ContainerService containerService) {
- log.debug("Starting and configuring container service: " + containerService.getClass().getSimpleName());
-
- containerService.setConfiguration(configuration);
-
- AgentService agentService = null;
-
- if (containerService instanceof AgentService) {
- agentService = (AgentService) containerService;
-
- agentService.setAgentServiceStreamRemoter(agentServiceStreamRemoter);
-
- for (AgentServiceLifecycleListener agentServiceListener : agentServiceListeners) {
- agentService.addLifecycleListener(agentServiceListener);
- }
-
- if (containerService instanceof ConfigurationManager) {
- ConfigurationManagerInitializer initializer = new ConfigurationManagerInitializer();
- initializer.initialize((ConfigurationManager) containerService);
- }
- }
-
- containerService.initialize();
-
- if (agentService != null) {
- agentService.notifyLifecycleListenersOfNewState(AgentService.LifecycleState.STARTED);
- }
- }
-
- private Lock obtainReadLock() {
- // try to obtain the lock, but if we can't get the lock in 60 seconds,
- // keep going. The PC is usually fine within seconds after its initializes,
- // so not getting this lock within 60 seconds probably isn't detrimental.
- // But if there is a deadlock, blocking forever here would be detrimental,
- // so we do not do it. We'll just log a warning and let the thread keep going.
- Lock readLock = rwLock.readLock();
- try {
- if (!readLock.tryLock(60L, TimeUnit.SECONDS)) {
- String msg = "There may be a deadlock in the plugin container.";
- //noinspection ThrowableInstanceNeverThrown
- log.warn(msg, new Throwable(msg));
- readLock = null;
- }
- } catch (InterruptedException e) {
- readLock = null;
- }
- return readLock;
- }
-
- private Lock obtainWriteLock() {
- // try to obtain the lock, but if we can't get the lock in 60 seconds,
- // keep going. The PC is usually fine within seconds after its initializes,
- // so not getting this lock within 60 seconds probably isn't detrimental.
- // But if there is a deadlock, blocking forever here would be detrimental,
- // so we do not do it. We'll just log a warning and let the thread keep going.
- Lock writeLock = rwLock.writeLock();
- try {
- if (!writeLock.tryLock(60L, TimeUnit.SECONDS)) {
- String msg = "There may be a deadlock in the plugin container.";
- //noinspection ThrowableInstanceNeverThrown
- log.warn(msg, new Throwable(msg));
- writeLock = null;
- }
- } catch (InterruptedException e) {
- writeLock = null;
- }
- return writeLock;
- }
-
- private void releaseLock(Lock lock) {
- if (lock != null) {
- lock.unlock();
- }
- }
-
- // The methods below return the actual manager implementation objects.
- // Only those objects inside the plugin container should be calling these getXXXManager() methods.
-
- public PluginManager getPluginManager() {
- Lock lock = obtainReadLock();
- try {
- return pluginManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public PluginComponentFactory getPluginComponentFactory() {
- Lock lock = obtainReadLock();
- try {
- return pluginComponentFactory;
- } finally {
- releaseLock(lock);
- }
- }
-
- public InventoryManager getInventoryManager() {
- Lock lock = obtainReadLock();
- try {
- return inventoryManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public ConfigurationManager getConfigurationManager() {
- Lock lock = obtainReadLock();
- try {
- return configurationManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public MeasurementManager getMeasurementManager() {
- Lock lock = obtainReadLock();
- try {
- return measurementManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public OperationManager getOperationManager() {
- Lock lock = obtainReadLock();
- try {
- return operationManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public ResourceFactoryManager getResourceFactoryManager() {
- Lock lock = obtainReadLock();
- try {
- return resourceFactoryManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public ContentManager getContentManager() {
- Lock lock = obtainReadLock();
- try {
- return contentManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public EventManager getEventManager() {
- Lock lock = obtainReadLock();
- try {
- return eventManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public SupportManager getSupportManager() {
- Lock lock = obtainReadLock();
- try {
- return supportManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- public BundleManager getBundleManager() {
- Lock lock = obtainReadLock();
- try {
- return bundleManager;
- } finally {
- releaseLock(lock);
- }
- }
-
- // The methods below return the manager implementations wrapped in their remote client interfaces.
- // External clients to the plugin container should probably use these rather than the getXXXManager() methods.
-
- public DiscoveryAgentService getDiscoveryAgentService() {
- return getInventoryManager();
- }
-
- public ConfigurationAgentService getConfigurationAgentService() {
- return getConfigurationManager();
- }
-
- public MeasurementAgentService getMeasurementAgentService() {
- return getMeasurementManager();
- }
-
- public OperationAgentService getOperationAgentService() {
- return getOperationManager();
- }
-
- public ResourceFactoryAgentService getResourceFactoryAgentService() {
- return getResourceFactoryManager();
- }
-
- public ContentAgentService getContentAgentService() {
- return getContentManager();
- }
-
- public SupportAgentService getSupportAgentService() {
- return getSupportManager();
- }
-
- public BundleAgentService getBundleAgentService() {
- return getBundleManager();
- }
-
- public boolean isInsideAgent() {
- return (this.configuration != null && this.configuration.isInsideAgent());
- }
-<<<<<<< HEAD
-=======
-
- public void setRebootRequestListener(RebootRequestListener listener) {
- rebootListener = listener;
- }
-
- public void notifyRebootRequestListener() {
- rebootListener.reboot();
- }
-
- /**
- * Add the callback listener to notify when the plugin container is initialized. If this method is invoked and
- * the PC is already initialized, then <code>listener</code> will be invoked immediately.
- * @param listener The callback object to notify
- */
- public void addInitializationListener(InitializationListener listener) {
- synchronized (initListenersLock) {
- if (started) {
- listener.initialized();
- } else {
- initListeners.add(listener);
- }
- }
- }
-
->>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
-}
commit 97fde8e669a981f393000b8c7c8e52f78e9eda88
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Mar 29 20:49:06 2011 -0400
[BZ 677349] Adding logic to avoid deadlock during PC initialization
This commit adds an InitializationListener api to PluginContainer. When
plugin components start up while the PC is still initializing and
register event pollers, they now do so by way of this
InitializationListener api. EventContextImpl now registers a listener,
which does not require a lock and therefore eliminates the possibility
for deadlock. When the listener is invoked, the PC has already
released the write lock, EventManager is already up and running, and
there should be no problem registering the event poller at this point.
Also note the listener runs in the same thread that executes
PluginContainer.initialize.
Conflicts:
modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java
index 081e067..8f825f1 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java
@@ -26,6 +26,8 @@ import java.beans.Introspector;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
@@ -80,6 +82,17 @@ public class PluginContainer implements ContainerService {
private final Log log = LogFactory.getLog(PluginContainer.class);
+ /**
+ * Invoked by the plugin container immediately after it is initialized
+ */
+ public static interface InitializationListener {
+ /**
+ * Notifies the listener that the plugin container has been initialized. This method executes in the same
+ * thread in which {@link PluginContainer#initialize()} is executing.
+ */
+ void initialized();
+ }
+
// our management interface
private PluginContainerMBeanImpl mbean;
@@ -106,6 +119,9 @@ public class PluginContainer implements ContainerService {
// this is to prevent race conditions on startup between components from all the different managers
private ReadWriteLock rwLock = new ReentrantReadWriteLock();
+ private List<InitializationListener> initListeners;
+ private Object initListenersLock = new Object();
+
/**
* Returns the singleton instance.
*
@@ -220,6 +236,7 @@ public class PluginContainer implements ContainerService {
* <p>If the plugin container has already been initialized, this method does nothing and returns.</p>
*/
public void initialize() {
+ initListeners = new LinkedList<InitializationListener>();
Lock lock = obtainWriteLock();
try {
if (!started) {
@@ -269,6 +286,15 @@ public class PluginContainer implements ContainerService {
releaseLock(lock);
}
+ synchronized (initListenersLock) {
+ if (started) {
+ for (InitializationListener listener : initListeners) {
+ listener.initialized();
+ }
+ }
+ initListeners.clear();
+ }
+
return;
}
@@ -581,4 +607,20 @@ public class PluginContainer implements ContainerService {
public boolean isInsideAgent() {
return (this.configuration != null && this.configuration.isInsideAgent());
}
+
+ /**
+ * Add the callback listener to notify when the plugin container is initialized. If this method is invoked and
+ * the PC is already initialized, then <code>listener</code> will be invoked immediately.
+ * @param listener The callback object to notify
+ */
+ public void addInitializationListener(InitializationListener listener) {
+ synchronized (initListenersLock) {
+ if (started) {
+ listener.initialized();
+ } else {
+ initListeners.add(listener);
+ }
+ }
+ }
+
}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig
new file mode 100644
index 0000000..8f8b205
--- /dev/null
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/PluginContainer.java.orig
@@ -0,0 +1,649 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.pc;
+
+import java.beans.Introspector;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import javax.security.auth.login.Configuration;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.rhq.core.clientapi.agent.bundle.BundleAgentService;
+import org.rhq.core.clientapi.agent.configuration.ConfigurationAgentService;
+import org.rhq.core.clientapi.agent.content.ContentAgentService;
+import org.rhq.core.clientapi.agent.discovery.DiscoveryAgentService;
+import org.rhq.core.clientapi.agent.inventory.ResourceFactoryAgentService;
+import org.rhq.core.clientapi.agent.measurement.MeasurementAgentService;
+import org.rhq.core.clientapi.agent.operation.OperationAgentService;
+import org.rhq.core.clientapi.agent.support.SupportAgentService;
+import org.rhq.core.pc.agent.AgentRegistrar;
+import org.rhq.core.pc.agent.AgentService;
+import org.rhq.core.pc.agent.AgentServiceLifecycleListener;
+import org.rhq.core.pc.agent.AgentServiceStreamRemoter;
+import org.rhq.core.pc.bundle.BundleManager;
+import org.rhq.core.pc.configuration.ConfigurationManager;
+import org.rhq.core.pc.configuration.ConfigurationManagerInitializer;
+import org.rhq.core.pc.content.ContentManager;
+import org.rhq.core.pc.event.EventManager;
+import org.rhq.core.pc.inventory.InventoryManager;
+import org.rhq.core.pc.inventory.ResourceContainer;
+import org.rhq.core.pc.inventory.ResourceFactoryManager;
+import org.rhq.core.pc.measurement.MeasurementManager;
+import org.rhq.core.pc.operation.OperationManager;
+import org.rhq.core.pc.plugin.PluginComponentFactory;
+import org.rhq.core.pc.plugin.PluginManager;
+import org.rhq.core.pc.support.SupportManager;
+import org.rhq.core.pluginapi.util.FileUtils;
+
+/**
+ * This is the embeddable container that houses all plugins and the infrastructure that binds them together. It contains
+ * all the managers such as {@link PluginManager} and {@link InventoryManager}.
+ *
+ * <p>This container is controlled by its lifecycle methods ({@link #initialize()} and {@link #shutdown()}. Prior to
+ * initialization, this container's configuration should be set via
+ * {@link #setConfiguration(PluginContainerConfiguration)}. If this is not done, a default configuration will be
+ * created.</p>
+ *
+ * @author Greg Hinkle
+ * @author John Mazzitelli
+ */
+public class PluginContainer implements ContainerService {
+ private static final PluginContainer INSTANCE = new PluginContainer();
+
+ private final Log log = LogFactory.getLog(PluginContainer.class);
+
+<<<<<<< HEAD
+=======
+ private static final class NullRebootRequestListener implements RebootRequestListener {
+ @Override
+ public void reboot() {
+ }
+ }
+
+ /**
+ * Invoked by the plugin container immediately after it is initialized
+ */
+ public static interface InitializationListener {
+ /**
+ * Notifies the listener that the plugin container has been initialized. This method executes in the same
+ * thread in which {@link PluginContainer#initialize()} is executing.
+ */
+ void initialized();
+ }
+
+>>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
+ // our management interface
+ private PluginContainerMBeanImpl mbean;
+
+ private PluginContainerConfiguration configuration;
+ private String version;
+ private boolean started = false;
+
+ private PluginManager pluginManager;
+ private PluginComponentFactory pluginComponentFactory;
+ private InventoryManager inventoryManager;
+ private MeasurementManager measurementManager;
+ private ConfigurationManager configurationManager;
+ private OperationManager operationManager;
+ private ResourceFactoryManager resourceFactoryManager;
+ private ContentManager contentManager;
+ private EventManager eventManager;
+ private SupportManager supportManager;
+ private BundleManager bundleManager;
+
+ private Collection<AgentServiceLifecycleListener> agentServiceListeners = new LinkedHashSet<AgentServiceLifecycleListener>();
+ private AgentServiceStreamRemoter agentServiceStreamRemoter = null;
+ private AgentRegistrar agentRegistrar = null;
+
+ // this is to prevent race conditions on startup between components from all the different managers
+ private ReadWriteLock rwLock = new ReentrantReadWriteLock();
+
+ private List<InitializationListener> initListeners;
+ private Object initListenersLock = new Object();
+
+ /**
+ * Returns the singleton instance.
+ *
+ * @return the plugin container
+ */
+ public static PluginContainer getInstance() {
+ return INSTANCE;
+ }
+
+ private PluginContainer() {
+ // for why we need to do this, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727821
+ try {
+ Configuration.getConfiguration();
+ } catch (Throwable t) {
+ }
+ }
+
+ /**
+ * Sets this plugin container's configuration which also provides configuration settings for all the internal
+ * services.
+ *
+ * @param configuration
+ */
+ public void setConfiguration(PluginContainerConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ /**
+ * Adds a listener that will be notified whenever an {@link AgentService} hosted within this plugin container is
+ * started or stopped.
+ *
+ * @param listener
+ */
+ public void addAgentServiceLifecycleListener(AgentServiceLifecycleListener listener) {
+ agentServiceListeners.add(listener);
+ }
+
+ /**
+ * Removes the given listener such that it will no longer receive {@link AgentService} notifications.
+ *
+ * @param listener
+ */
+ public void removeAgentServiceLifecycleListener(AgentServiceLifecycleListener listener) {
+ agentServiceListeners.remove(listener);
+ }
+
+ /**
+ * Returns a remoter object that can be used to remote streams. If <code>null</code>, the plugin container will not
+ * be able to remote streams to external clients, as in the case when the plugin container is not running inside an
+ * agent (i.e. embedded mode).
+ *
+ * @return remoter the object that will prepare a stream to be accessed by remote clients (may be <code>null</code>)
+ */
+ public AgentServiceStreamRemoter getAgentServiceStreamRemoter() {
+ return agentServiceStreamRemoter;
+ }
+
+ /**
+ * Adds a remoter object that is responsible for remoting streams. If <code>null</code>, the plugin container will
+ * not be able to remote streams to external clients, as in the case when the plugin container is not running inside
+ * an agent (i.e. embedded mode).
+ *
+ * @param streamRemoter
+ */
+ public void setAgentServiceStreamRemoter(AgentServiceStreamRemoter streamRemoter) {
+ agentServiceStreamRemoter = streamRemoter;
+ }
+
+ /**
+ * Sets the given registrar as the object responsible for registering the plugin container with a remote server. If
+ * <code>null</code>, the plugin container will not be considered running in an agent containing needing to be
+ * registered with a remote server.
+ *
+ * @return the object that can be used to register this plugin container (may be <code>null</code>)
+ */
+ public AgentRegistrar getAgentRegistrar() {
+ return agentRegistrar;
+ }
+
+ /**
+ * Sets the given registrar as the object responsible for registering the plugin container with a remote server. If
+ * <code>null</code>, the plugin container will not be considered running in an agent containing needing to be
+ * registered with a remote server.
+ *
+ * @param registrar
+ */
+ public void setAgentRegistrar(AgentRegistrar registrar) {
+ agentRegistrar = registrar;
+ }
+
+ /**
+ * If the plugin container has been initialized and plugins have started work, this returns <code>true</code>.
+ *
+ * @return <code>true</code> if the plugin container was initialized and started; <code>false</code> otherwise
+ */
+ public boolean isStarted() {
+ Lock lock = obtainReadLock();
+ try {
+ return started;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ /**
+ * Initializes the plugin container which initializes all internal managers. Once initialized, all plugins will be
+ * activated, metrics will begin getting collected and automatic discovery will start.
+ *
+ * <p>Note that if no configuration was {@link #setConfiguration(PluginContainerConfiguration) set} prior to this
+ * method being called, a default configuration will be created and used.</p>
+ *
+ * <p>If the plugin container has already been initialized, this method does nothing and returns.</p>
+ */
+ public void initialize() {
+ initListeners = new LinkedList<InitializationListener>();
+ Lock lock = obtainWriteLock();
+ try {
+ if (!started) {
+ version = PluginContainer.class.getPackage().getImplementationVersion();
+ log.info("Initializing Plugin Container" + ((version != null) ? (" v" + version) : "") + "...");
+
+ if (configuration == null) {
+ configuration = new PluginContainerConfiguration();
+ }
+
+ purgeTmpDirectoryContents();
+
+ mbean = new PluginContainerMBeanImpl(this);
+ mbean.register();
+
+ ResourceContainer.initialize();
+
+ pluginManager = new PluginManager();
+ pluginComponentFactory = new PluginComponentFactory();
+ inventoryManager = new InventoryManager();
+ measurementManager = new MeasurementManager();
+ configurationManager = new ConfigurationManager();
+ operationManager = new OperationManager();
+ resourceFactoryManager = new ResourceFactoryManager();
+ contentManager = new ContentManager();
+ eventManager = new EventManager();
+ supportManager = new SupportManager();
+ bundleManager = new BundleManager();
+
+ startContainerService(pluginManager);
+ startContainerService(pluginComponentFactory);
+ startContainerService(inventoryManager);
+ startContainerService(measurementManager);
+ startContainerService(configurationManager);
+ startContainerService(operationManager);
+ startContainerService(resourceFactoryManager);
+ startContainerService(contentManager);
+ startContainerService(eventManager);
+ startContainerService(supportManager);
+ startContainerService(bundleManager);
+
+ started = true;
+
+ log.info("Plugin Container initialized.");
+ }
+ } finally {
+ releaseLock(lock);
+ }
+
+<<<<<<< HEAD
+=======
+ synchronized (initListenersLock) {
+ if (started) {
+ for (InitializationListener listener : initListeners) {
+ listener.initialized();
+ }
+ }
+ initListeners.clear();
+ }
+
+>>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
+ return;
+ }
+
+ /**
+ * Shuts down the plugin container and all its internal services. If the plugin container has already been shutdown,
+ * this method does nothing and returns.
+ */
+ public void shutdown() {
+ Lock lock = obtainWriteLock();
+ try {
+ if (started) {
+
+ log.info("Plugin container is being shutdown...");
+
+ if (mbean != null) {
+ mbean.unregister();
+ mbean = null;
+ }
+
+ boolean isInsideAgent = configuration.isInsideAgent();
+
+ bundleManager.shutdown();
+ supportManager.shutdown();
+ eventManager.shutdown();
+ contentManager.shutdown();
+ resourceFactoryManager.shutdown();
+ operationManager.shutdown();
+ configurationManager.shutdown();
+ measurementManager.shutdown();
+ inventoryManager.shutdown();
+ pluginComponentFactory.shutdown();
+ pluginManager.shutdown();
+
+ agentServiceListeners.clear();
+ agentServiceListeners = new LinkedHashSet<AgentServiceLifecycleListener>();
+ agentServiceStreamRemoter = null;
+ agentRegistrar = null;
+
+ purgeTmpDirectoryContents();
+
+ ResourceContainer.shutdown();
+
+ bundleManager = null;
+ supportManager = null;
+ eventManager = null;
+ contentManager = null;
+ resourceFactoryManager = null;
+ operationManager = null;
+ configurationManager = null;
+ measurementManager = null;
+ inventoryManager = null;
+ pluginComponentFactory = null;
+ pluginManager = null;
+
+ configuration = null;
+
+ started = false;
+
+ log.info("Plugin container is now shutdown.");
+
+ // we typically do not want to do this if embedded somewhere other than the agent VM
+ if (isInsideAgent) {
+ cleanMemory();
+ }
+ }
+ } finally {
+ releaseLock(lock);
+ }
+
+ return;
+ }
+
+ /**
+ * Does things that help the garbage collector clean up the memory.
+ * Only call this after the plugin container has been shutdown.
+ */
+ private void cleanMemory() {
+ Introspector.flushCaches();
+ LogFactory.releaseAll();
+
+ // for why we need to do this, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6727821
+ try {
+ Configuration.setConfiguration(null);
+ } catch (Throwable t) {
+ }
+
+ System.gc();
+ }
+
+ private void purgeTmpDirectoryContents() {
+ try {
+ FileUtils.purge(configuration.getTemporaryDirectory(), false);
+ } catch (IOException e) {
+ log.warn("Failed to purge contents of temporary directory - cause: " + e);
+ }
+ }
+
+ private void startContainerService(ContainerService containerService) {
+ log.debug("Starting and configuring container service: " + containerService.getClass().getSimpleName());
+
+ containerService.setConfiguration(configuration);
+
+ AgentService agentService = null;
+
+ if (containerService instanceof AgentService) {
+ agentService = (AgentService) containerService;
+
+ agentService.setAgentServiceStreamRemoter(agentServiceStreamRemoter);
+
+ for (AgentServiceLifecycleListener agentServiceListener : agentServiceListeners) {
+ agentService.addLifecycleListener(agentServiceListener);
+ }
+
+ if (containerService instanceof ConfigurationManager) {
+ ConfigurationManagerInitializer initializer = new ConfigurationManagerInitializer();
+ initializer.initialize((ConfigurationManager) containerService);
+ }
+ }
+
+ containerService.initialize();
+
+ if (agentService != null) {
+ agentService.notifyLifecycleListenersOfNewState(AgentService.LifecycleState.STARTED);
+ }
+ }
+
+ private Lock obtainReadLock() {
+ // try to obtain the lock, but if we can't get the lock in 60 seconds,
+ // keep going. The PC is usually fine within seconds after its initializes,
+ // so not getting this lock within 60 seconds probably isn't detrimental.
+ // But if there is a deadlock, blocking forever here would be detrimental,
+ // so we do not do it. We'll just log a warning and let the thread keep going.
+ Lock readLock = rwLock.readLock();
+ try {
+ if (!readLock.tryLock(60L, TimeUnit.SECONDS)) {
+ String msg = "There may be a deadlock in the plugin container.";
+ //noinspection ThrowableInstanceNeverThrown
+ log.warn(msg, new Throwable(msg));
+ readLock = null;
+ }
+ } catch (InterruptedException e) {
+ readLock = null;
+ }
+ return readLock;
+ }
+
+ private Lock obtainWriteLock() {
+ // try to obtain the lock, but if we can't get the lock in 60 seconds,
+ // keep going. The PC is usually fine within seconds after its initializes,
+ // so not getting this lock within 60 seconds probably isn't detrimental.
+ // But if there is a deadlock, blocking forever here would be detrimental,
+ // so we do not do it. We'll just log a warning and let the thread keep going.
+ Lock writeLock = rwLock.writeLock();
+ try {
+ if (!writeLock.tryLock(60L, TimeUnit.SECONDS)) {
+ String msg = "There may be a deadlock in the plugin container.";
+ //noinspection ThrowableInstanceNeverThrown
+ log.warn(msg, new Throwable(msg));
+ writeLock = null;
+ }
+ } catch (InterruptedException e) {
+ writeLock = null;
+ }
+ return writeLock;
+ }
+
+ private void releaseLock(Lock lock) {
+ if (lock != null) {
+ lock.unlock();
+ }
+ }
+
+ // The methods below return the actual manager implementation objects.
+ // Only those objects inside the plugin container should be calling these getXXXManager() methods.
+
+ public PluginManager getPluginManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return pluginManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public PluginComponentFactory getPluginComponentFactory() {
+ Lock lock = obtainReadLock();
+ try {
+ return pluginComponentFactory;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public InventoryManager getInventoryManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return inventoryManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public ConfigurationManager getConfigurationManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return configurationManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public MeasurementManager getMeasurementManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return measurementManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public OperationManager getOperationManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return operationManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public ResourceFactoryManager getResourceFactoryManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return resourceFactoryManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public ContentManager getContentManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return contentManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public EventManager getEventManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return eventManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public SupportManager getSupportManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return supportManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ public BundleManager getBundleManager() {
+ Lock lock = obtainReadLock();
+ try {
+ return bundleManager;
+ } finally {
+ releaseLock(lock);
+ }
+ }
+
+ // The methods below return the manager implementations wrapped in their remote client interfaces.
+ // External clients to the plugin container should probably use these rather than the getXXXManager() methods.
+
+ public DiscoveryAgentService getDiscoveryAgentService() {
+ return getInventoryManager();
+ }
+
+ public ConfigurationAgentService getConfigurationAgentService() {
+ return getConfigurationManager();
+ }
+
+ public MeasurementAgentService getMeasurementAgentService() {
+ return getMeasurementManager();
+ }
+
+ public OperationAgentService getOperationAgentService() {
+ return getOperationManager();
+ }
+
+ public ResourceFactoryAgentService getResourceFactoryAgentService() {
+ return getResourceFactoryManager();
+ }
+
+ public ContentAgentService getContentAgentService() {
+ return getContentManager();
+ }
+
+ public SupportAgentService getSupportAgentService() {
+ return getSupportManager();
+ }
+
+ public BundleAgentService getBundleAgentService() {
+ return getBundleManager();
+ }
+
+ public boolean isInsideAgent() {
+ return (this.configuration != null && this.configuration.isInsideAgent());
+ }
+<<<<<<< HEAD
+=======
+
+ public void setRebootRequestListener(RebootRequestListener listener) {
+ rebootListener = listener;
+ }
+
+ public void notifyRebootRequestListener() {
+ rebootListener.reboot();
+ }
+
+ /**
+ * Add the callback listener to notify when the plugin container is initialized. If this method is invoked and
+ * the PC is already initialized, then <code>listener</code> will be invoked immediately.
+ * @param listener The callback object to notify
+ */
+ public void addInitializationListener(InitializationListener listener) {
+ synchronized (initListenersLock) {
+ if (started) {
+ listener.initialized();
+ } else {
+ initListeners.add(listener);
+ }
+ }
+ }
+
+>>>>>>> a12a99c... [BZ 677349] Adding logic to avoid deadlock during PC initialization
+}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
index 943ed40..64a6ff7 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/event/EventContextImpl.java
@@ -104,12 +104,20 @@ public class EventContextImpl implements EventContext {
return getEventManager().getSigar();
}
- private void registerEventPollerInternal(EventPoller poller, int pollingInterval, String sourceLocation) {
+ private void registerEventPollerInternal(final EventPoller poller, int pollingInterval,
+ final String sourceLocation) {
EventDefinition eventDefinition = EventUtility.getEventDefinition(poller.getEventType(), this.resource.getResourceType());
if (eventDefinition == null)
throw new IllegalArgumentException("Poller has unknown event type - no EventDefinition exists with name '" + poller.getEventType() + "'.");
- int adjustedPollingInterval = Math.max(EventContext.MINIMUM_POLLING_INTERVAL, pollingInterval);
- getEventManager().registerEventPoller(poller, adjustedPollingInterval, this.resource, sourceLocation);
+ final int adjustedPollingInterval = Math.max(EventContext.MINIMUM_POLLING_INTERVAL, pollingInterval);
+ // Registering the event poller has to be done in a callback listener to avoid a potential deadlock.
+ // See https://bugzilla.redhat.com/show_bug.cgi?id=677349 for a detailed explaination.
+ PluginContainer.getInstance().addInitializationListener(new PluginContainer.InitializationListener() {
+ @Override
+ public void initialized() {
+ getEventManager().registerEventPoller(poller, adjustedPollingInterval, resource, sourceLocation);
+ }
+ });
}
private void unregisterEventPollerInternal(String eventType, String sourceLocation) {
13 years, 1 month
[rhq] modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java | 10 +++++++---
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 2 +-
2 files changed, 8 insertions(+), 4 deletions(-)
New commits:
commit 1385a03d7363cda58358d929349f67e3cf24dd7c
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 29 15:43:05 2011 -0400
- remove refresh button
- add the recent alert count number next to the alert flag
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
index 5a9d3fc..88e7a9b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -87,7 +87,9 @@ public class Footer extends LocatableHLayout {
addMember(getMessageCenterButton());
- addMember(getRefreshButton());
+ // people don't like the refresh and CoreGUI.refresh() isn't refreshing everything I want
+ // if we ever want to reintroduce the refresh button to manually call CoreGUI.refresh(), just uncomment this line
+ // addMember(getRefreshButton());
addMember(createHSpacer(0));
@@ -195,13 +197,15 @@ public class Footer extends LocatableHLayout {
private void changeIcon(int alertCount) {
if (alertCount == 0) {
setPrompt(MSG.view_core_noRecentAlerts());
- setContents(imgHTML("subsystems/alert/Alerts_16.png", 16, 16));
+ setContents(imgHTML("subsystems/alert/Alerts_16.png", 16, 16)
+ + "<span style=\"display:inline-block; vertical-align:middle\">0</span>");
} else {
setPrompt(MSG.view_core_recentAlerts(String.valueOf(alertCount)));
String link = '#' + ReportTopView.VIEW_ID.getName() + "/" + ReportTopView.SECTION_SUBSYSTEMS_VIEW_ID
+ "/" + AlertHistoryView.SUBSYSTEM_VIEW_ID;
setContents("<a href=\"" + link + "\">" + imgHTML(ImageManager.getAlertIcon(AlertPriority.HIGH))
- + "</a>");
+ + "<span style=\"display:inline-block; vertical-align:middle\">" + String.valueOf(alertCount)
+ + "</span></a>");
}
}
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 695bd9d..fd6ac7e 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
@@ -2057,7 +2057,7 @@ view_aboutBox_version = Version:
view_core_error_1 = New Alerts lookup failed
#view_core_loggedInAs = Logged in as {0}
view_core_loggedOut = Logged out
-view_core_recentAlerts = There are [{0}] recent alerts - click the icon to go to the recent alerts report
+view_core_recentAlerts = There are [{0}] recent alerts - click to go to the recent alerts report
view_core_noRecentAlerts = There are no recent alerts to report
view_core_uncaught = Globally uncaught exception
13 years, 1 month
[rhq] Branch 'as7plugin' - 47 commits - modules/core modules/enterprise modules/plugins
by Heiko W. Rupp
modules/core/client-api/src/main/java/org/rhq/core/clientapi/descriptor/PluginTransformer.java | 27
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java | 7
modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java | 47
modules/core/plugin-container/src/main/java/org/rhq/core/pc/StandaloneContainer.java | 36
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java | 56
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java | 29
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java | 60
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 140 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/lookup/ResourceLookupComboBoxItem.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java | 27
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 35
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java | 255 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java | 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortlet.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortletUtil.java | 72
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java | 34
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java | 42
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet3.java | 38
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java | 35
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java | 43
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java | 46
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java | 37
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java | 41
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java | 36
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java | 33
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java | 33
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java | 34
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java | 33
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java | 59
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java | 46
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceAlertsPortlet.java | 37
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceOperationsPortlet.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java | 32
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java | 69
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/CustomResourceGroupTreeGrid.java | 23
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupContextMenu.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeContextMenu.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java | 182 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java | 84
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 25
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java | 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java | 42
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java | 33
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java | 187 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/configuration/TestConfigurationFactory.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java | 66
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java | 55
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java | 76
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 10
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 20
modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml | 9
modules/enterprise/server/ear/src/main/resources/alert-email-template.txt | 47
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java | 43
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java | 51
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 145 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 4
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java | 22
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java | 23
modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java | 3
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java | 1056 ++++------
modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerPluginConfigurationProperties.java | 4
modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml | 12
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java | 146 -
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseProcessDiscovery.java | 157 +
modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml | 28
modules/plugins/rhq-agent/src/main/resources/META-INF/rhq-plugin.xml | 2
88 files changed, 2448 insertions(+), 1922 deletions(-)
New commits:
commit bb592ab259599fcb931b681ec083cce7ed492b9f
Merge: 80b2237 7a161e2
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 29 17:30:04 2011 +0200
Merge branch 'master' into as7plugin
commit 80b2237cc9bb9fb01cd04c30dd3e13ee8f1e9244
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 29 13:36:38 2011 +0200
Rename class to better reflect its purpose.
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java
deleted file mode 100644
index 7c55233..0000000
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.rhq.modules.plugins.jbossas7;
-
-import java.io.File;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.mc4j.ems.connection.support.metadata.LocalVMTypeDescriptor;
-
-import org.rhq.core.domain.configuration.Configuration;
-import org.rhq.core.domain.configuration.PropertyList;
-import org.rhq.core.domain.configuration.PropertyMap;
-import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.core.pluginapi.event.log.LogFileEventResourceComponentHelper;
-import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
-import org.rhq.core.pluginapi.inventory.ProcessScanResult;
-import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
-import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
-import org.rhq.plugins.jmx.JMXDiscoveryComponent;
-
-
-/**
- * Discovery class
- */
-public class BaseDiscovery implements ResourceDiscoveryComponent
-
-{
-
- static final String DJBOSS_SERVER_BASE_DIR = "-Djboss.server.base.dir=";
- static final String DORG_JBOSS_BOOT_LOG_FILE = "-Dorg.jboss.boot.log.file=";
- private final Log log = LogFactory.getLog(this.getClass());
-
- /**
- * Run the auto-discovery
- */
- public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext discoveryContext) throws Exception {
- Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
-
-
- List<ProcessScanResult> scans = discoveryContext.getAutoDiscoveredProcesses();
-
- for (ProcessScanResult psr : scans) {
-
- Configuration config = discoveryContext.getDefaultPluginConfiguration();
- // IF SE, then look at domain/configuration/host.xml <management interface="default" port="9990
- // for management port
- String[] commandLine = psr.getProcessInfo().getCommandLine();
- String serverNameFull;
- String serverName;
- String psName = psr.getProcessScan().getName();
- if (psName.equals("ProcessManager")) {
- serverNameFull = "ProcessManager";
- serverName = "ProcessManager";
- } else if (psName.equals("ASManager")) {
- serverName = "ASManager";
- serverNameFull = "ASManager";
- } else if (psName.equals("HostController")) {
- serverName = "HostController";
- serverNameFull = "HostController";
- } else {
- serverNameFull = getBaseDirFromCommandLine(commandLine);
- if (serverNameFull==null || serverNameFull.isEmpty()) {
- // Try to obtain the server name
- // -Dorg.jboss.boot.log.file=domain/servers/server-one/log/boot.log
- // This is a hack until I know a better way to do so.
- String tmp = getLogFileFromCommandLine(commandLine);
- int i = tmp.indexOf("servers/");
- tmp = tmp.substring( i + 8);
- tmp = tmp.substring(0,tmp.indexOf("/"));
- serverNameFull = tmp;
- }
- serverName = serverNameFull.substring(serverNameFull.lastIndexOf("/")+1);
- if (serverName.isEmpty())
- serverName = serverNameFull;
-
- }
- String logFile = getLogFileFromCommandLine(commandLine);
- initLogEventSourcesConfigProp(logFile,config);
- String javaClazz = psr.getProcessInfo().getName();
-
-
- /*
- * We'll connect to the discovered VM on the local host, so set the jmx connection
- * properties accordingly. This may only work on JDK6+, but then JDK5 is deprecated
- * anyway.
- */
-// config.put(new PropertySimple(JMXDiscoveryComponent.COMMAND_LINE_CONFIG_PROPERTY,
-// javaClazz));
- config.put(new PropertySimple(JMXDiscoveryComponent.CONNECTION_TYPE,
- LocalVMTypeDescriptor.class.getName()));
-
- // TODO vmid will change when the detected server is bounced - how do we follow this?
- config.put(new PropertySimple(JMXDiscoveryComponent.VMID_CONFIG_PROPERTY,psr.getProcessInfo().getPid()));
-
-
- DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
- discoveryContext.getResourceType(), // ResourceType
- serverNameFull, // key TODO distinguish per domain?
- serverName, // Name
- null, // TODO real version ?
- "TODO", // Description
- config,
- psr.getProcessInfo()
- );
-
-
- // Add to return values
- discoveredResources.add(detail);
- log.info("Discovered new ... " + discoveryContext.getResourceType() + ", " + serverNameFull);
- }
-
- return discoveredResources;
-
- }
-
- String getBaseDirFromCommandLine(String[] commandLine) {
- for (String line: commandLine) {
- if (line.startsWith(DJBOSS_SERVER_BASE_DIR))
- return line.substring(DJBOSS_SERVER_BASE_DIR.length());
- }
- return "";
- }
-
-//-Dorg.jboss.boot.log.file=/devel/jbas7/jboss-as/build/target/jboss-7.0.0.Alpha2/domain/log/server-manager/boot.log
-//-Dlogging.configuration=file:/devel/jbas7/jboss-as/build/target/jboss-7.0.0.Alpha2/domain/configuration/logging.properties
-
- String getLogFileFromCommandLine(String[] commandLine) {
-
- for (String line: commandLine) {
- if (line.startsWith(DORG_JBOSS_BOOT_LOG_FILE))
- return line.substring(DORG_JBOSS_BOOT_LOG_FILE.length());
- }
- return "";
- }
-
- private void initLogEventSourcesConfigProp(String fileName, Configuration pluginConfiguration) {
-
- PropertyList logEventSources = pluginConfiguration
- .getList(LogFileEventResourceComponentHelper.LOG_EVENT_SOURCES_CONFIG_PROP);
-
- if (logEventSources==null)
- return;
-
- File serverLogFile = new File(fileName);
-
- if (serverLogFile.exists() && !serverLogFile.isDirectory()) {
- PropertyMap serverLogEventSource = new PropertyMap("logEventSource");
- serverLogEventSource.put(new PropertySimple(
- LogFileEventResourceComponentHelper.LogEventSourcePropertyNames.LOG_FILE_PATH, serverLogFile));
- serverLogEventSource.put(new PropertySimple(
- LogFileEventResourceComponentHelper.LogEventSourcePropertyNames.ENABLED, Boolean.FALSE));
- logEventSources.add(serverLogEventSource);
- }
- }
-
-}
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseProcessDiscovery.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseProcessDiscovery.java
new file mode 100644
index 0000000..c38e297
--- /dev/null
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseProcessDiscovery.java
@@ -0,0 +1,157 @@
+package org.rhq.modules.plugins.jbossas7;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mc4j.ems.connection.support.metadata.LocalVMTypeDescriptor;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertyList;
+import org.rhq.core.domain.configuration.PropertyMap;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.pluginapi.event.log.LogFileEventResourceComponentHelper;
+import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.ProcessScanResult;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+import org.rhq.plugins.jmx.JMXDiscoveryComponent;
+
+
+/**
+ * Discovery class
+ */
+public class BaseProcessDiscovery implements ResourceDiscoveryComponent
+
+{
+
+ static final String DJBOSS_SERVER_BASE_DIR = "-Djboss.server.base.dir=";
+ static final String DORG_JBOSS_BOOT_LOG_FILE = "-Dorg.jboss.boot.log.file=";
+ private final Log log = LogFactory.getLog(this.getClass());
+
+ /**
+ * Run the auto-discovery
+ */
+ public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext discoveryContext) throws Exception {
+ Set<DiscoveredResourceDetails> discoveredResources = new HashSet<DiscoveredResourceDetails>();
+
+
+ List<ProcessScanResult> scans = discoveryContext.getAutoDiscoveredProcesses();
+
+ for (ProcessScanResult psr : scans) {
+
+ Configuration config = discoveryContext.getDefaultPluginConfiguration();
+ // IF SE, then look at domain/configuration/host.xml <management interface="default" port="9990
+ // for management port
+ String[] commandLine = psr.getProcessInfo().getCommandLine();
+ String serverNameFull;
+ String serverName;
+ String psName = psr.getProcessScan().getName();
+ if (psName.equals("ProcessManager")) {
+ serverNameFull = "ProcessManager";
+ serverName = "ProcessManager";
+ } else if (psName.equals("ASManager")) {
+ serverName = "ASManager";
+ serverNameFull = "ASManager";
+ } else if (psName.equals("HostController")) {
+ serverName = "HostController";
+ serverNameFull = "HostController";
+ } else {
+ serverNameFull = getBaseDirFromCommandLine(commandLine);
+ if (serverNameFull==null || serverNameFull.isEmpty()) {
+ // Try to obtain the server name
+ // -Dorg.jboss.boot.log.file=domain/servers/server-one/log/boot.log
+ // This is a hack until I know a better way to do so.
+ String tmp = getLogFileFromCommandLine(commandLine);
+ int i = tmp.indexOf("servers/");
+ tmp = tmp.substring( i + 8);
+ tmp = tmp.substring(0,tmp.indexOf("/"));
+ serverNameFull = tmp;
+ }
+ serverName = serverNameFull.substring(serverNameFull.lastIndexOf("/")+1);
+ if (serverName.isEmpty())
+ serverName = serverNameFull;
+
+ }
+ String logFile = getLogFileFromCommandLine(commandLine);
+ initLogEventSourcesConfigProp(logFile,config);
+ String javaClazz = psr.getProcessInfo().getName();
+
+
+ /*
+ * We'll connect to the discovered VM on the local host, so set the jmx connection
+ * properties accordingly. This may only work on JDK6+, but then JDK5 is deprecated
+ * anyway.
+ */
+// config.put(new PropertySimple(JMXDiscoveryComponent.COMMAND_LINE_CONFIG_PROPERTY,
+// javaClazz));
+ config.put(new PropertySimple(JMXDiscoveryComponent.CONNECTION_TYPE,
+ LocalVMTypeDescriptor.class.getName()));
+
+ // TODO vmid will change when the detected server is bounced - how do we follow this?
+ config.put(new PropertySimple(JMXDiscoveryComponent.VMID_CONFIG_PROPERTY,psr.getProcessInfo().getPid()));
+
+
+ DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
+ discoveryContext.getResourceType(), // ResourceType
+ serverNameFull, // key TODO distinguish per domain?
+ serverName, // Name
+ null, // TODO real version ?
+ "TODO", // Description
+ config,
+ psr.getProcessInfo()
+ );
+
+
+ // Add to return values
+ discoveredResources.add(detail);
+ log.info("Discovered new ... " + discoveryContext.getResourceType() + ", " + serverNameFull);
+ }
+
+ return discoveredResources;
+
+ }
+
+ String getBaseDirFromCommandLine(String[] commandLine) {
+ for (String line: commandLine) {
+ if (line.startsWith(DJBOSS_SERVER_BASE_DIR))
+ return line.substring(DJBOSS_SERVER_BASE_DIR.length());
+ }
+ return "";
+ }
+
+//-Dorg.jboss.boot.log.file=/devel/jbas7/jboss-as/build/target/jboss-7.0.0.Alpha2/domain/log/server-manager/boot.log
+//-Dlogging.configuration=file:/devel/jbas7/jboss-as/build/target/jboss-7.0.0.Alpha2/domain/configuration/logging.properties
+
+ String getLogFileFromCommandLine(String[] commandLine) {
+
+ for (String line: commandLine) {
+ if (line.startsWith(DORG_JBOSS_BOOT_LOG_FILE))
+ return line.substring(DORG_JBOSS_BOOT_LOG_FILE.length());
+ }
+ return "";
+ }
+
+ private void initLogEventSourcesConfigProp(String fileName, Configuration pluginConfiguration) {
+
+ PropertyList logEventSources = pluginConfiguration
+ .getList(LogFileEventResourceComponentHelper.LOG_EVENT_SOURCES_CONFIG_PROP);
+
+ if (logEventSources==null)
+ return;
+
+ File serverLogFile = new File(fileName);
+
+ if (serverLogFile.exists() && !serverLogFile.isDirectory()) {
+ PropertyMap serverLogEventSource = new PropertyMap("logEventSource");
+ serverLogEventSource.put(new PropertySimple(
+ LogFileEventResourceComponentHelper.LogEventSourcePropertyNames.LOG_FILE_PATH, serverLogFile));
+ serverLogEventSource.put(new PropertySimple(
+ LogFileEventResourceComponentHelper.LogEventSourcePropertyNames.ENABLED, Boolean.FALSE));
+ logEventSources.add(serverLogEventSource);
+ }
+ }
+
+}
diff --git a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
index 2825e10..ee6b21f 100644
--- a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
@@ -59,7 +59,7 @@
-->
<server name="ProcessController"
- discovery="BaseDiscovery"
+ discovery="BaseProcessDiscovery"
class="BaseComponent"
description="Reaper process for other AS7 servicees"
>
@@ -80,6 +80,28 @@
</server>
+ <server name="HostController"
+ discovery="BaseProcessDiscovery"
+ class="BaseComponent"
+ description="Domain controller delegate for this host"
+ >
+
+ <plugin-configuration>
+ <c:simple-property name="hostname" default="localhost" required="true"/>
+ <c:simple-property name="port" default="9990" type="integer" required="true"/>
+
+ &logSources;
+ </plugin-configuration>
+
+ <process-scan name="ProcessManager" query="process|basename|match=^java.*,arg|org.jboss.as.host-controller|match=.*"/>
+
+
+ <operation name="dummyOperation">
+ <!-- TODO supply parameters and return values -->
+ </operation>
+
+
+ </server>
<server name="Domain"
discovery="DomainDiscovery"
@@ -129,7 +151,7 @@
</server>
<server name="JBossAS7-Standalone"
- discovery="BaseDiscovery"
+ discovery="BaseProcessDiscovery"
class="BaseComponent"
>
@@ -165,7 +187,7 @@
</server>
<server name="JBossAS-Managed"
- discovery="BaseDiscovery"
+ discovery="BaseProcessDiscovery"
class="BaseComponent"
>
<plugin-configuration>
commit 800fe24b2eff29a7922a9b9a4ab1a309d352a077
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 29 13:24:29 2011 +0200
Better discover managed AS servers - get their name from the log file for now.
TODO: should we better query the DC, as this also knows the AS that are not auto-started.
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java
index 96737dd..7c55233 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseDiscovery.java
@@ -55,10 +55,21 @@ public class BaseDiscovery implements ResourceDiscoveryComponent
} else if (psName.equals("ASManager")) {
serverName = "ASManager";
serverNameFull = "ASManager";
+ } else if (psName.equals("HostController")) {
+ serverName = "HostController";
+ serverNameFull = "HostController";
} else {
serverNameFull = getBaseDirFromCommandLine(commandLine);
- if (serverNameFull==null || serverNameFull.isEmpty())
- serverNameFull="JBossAS7";
+ if (serverNameFull==null || serverNameFull.isEmpty()) {
+ // Try to obtain the server name
+ // -Dorg.jboss.boot.log.file=domain/servers/server-one/log/boot.log
+ // This is a hack until I know a better way to do so.
+ String tmp = getLogFileFromCommandLine(commandLine);
+ int i = tmp.indexOf("servers/");
+ tmp = tmp.substring( i + 8);
+ tmp = tmp.substring(0,tmp.indexOf("/"));
+ serverNameFull = tmp;
+ }
serverName = serverNameFull.substring(serverNameFull.lastIndexOf("/")+1);
if (serverName.isEmpty())
serverName = serverNameFull;
commit 7a161e217c55ec77420303be7a4db2c84ec359d7
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 18:21:42 2011 -0400
add a refresh button on the right so a user can call CoreGUI.refresh().
this should help refresh left-hand trees when they go out of sync with changes to the inventory
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
index 62c3509..5a9d3fc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -87,11 +87,35 @@ public class Footer extends LocatableHLayout {
addMember(getMessageCenterButton());
+ addMember(getRefreshButton());
+
addMember(createHSpacer(0));
alertsMessage.schedule(60000);
}
+ private LocatableVLayout getRefreshButton() {
+ LocatableVLayout layout = new LocatableVLayout(extendLocatorId("refreshLayout"));
+ layout.setHeight100();
+ layout.setAlign(Alignment.CENTER);
+ layout.setAutoWidth();
+
+ LocatableIButton button = new LocatableIButton(extendLocatorId("refreshButton"), "");
+ button.setAlign(Alignment.CENTER);
+ button.setAutoFit(true);
+ button.setIcon("[SKIN]/actions/refresh.png");
+ button.setPrompt(CoreGUI.getMessages().common_button_refresh());
+ button.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ CoreGUI.refresh();
+ }
+ });
+
+ layout.addMember(button);
+ return layout;
+ }
+
private LocatableVLayout getMessageCenterButton() {
LocatableVLayout layout = new LocatableVLayout(extendLocatorId("layout"));
layout.setMembersMargin(5);
commit 1d30fe194971feb08733847e7b2425a925b749cc
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 18:13:19 2011 -0400
- shrink the global alerts indicator to just be the icon
- the alert flag hover text tells you the count and reminds the user they
can click the icon to get the recent alerts report
- when there are no recent alerts, the flag is grey
- the alert flag is moved to the right where the rest of the components are
- the message bar now has 100% width allowing for the message to stretch if the browser is maximized
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
index 2f31bb8..62c3509 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -28,6 +28,7 @@ import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.alert.Alert;
+import org.rhq.core.domain.alert.AlertPriority;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.criteria.Criteria.Restriction;
import org.rhq.core.domain.util.PageList;
@@ -73,10 +74,10 @@ public class Footer extends LocatableHLayout {
// leave space for the RPC Activity Spinner
addMember(createHSpacer(16));
- addMember(alertsMessage);
-
addMember(messageBar);
+ addMember(alertsMessage);
+
VLayout favoritesLayout = new VLayout();
favoritesLayout.setHeight100();
favoritesLayout.setAutoWidth();
@@ -153,12 +154,12 @@ public class Footer extends LocatableHLayout {
public AlertsMessage(String locatorId) {
super(locatorId);
setHeight100();
+ setWidth(25);
setPadding(5);
-
- setIcon("subsystems/alert/Alert_LOW_16.png");
+ setHoverWidth(200);
setIconSize(16);
setWrap(false);
-
+ changeIcon(0);
addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
History.newItem(ReportTopView.VIEW_ID.getName() + "/" + ReportTopView.SECTION_SUBSYSTEMS_VIEW_ID
@@ -167,6 +168,19 @@ public class Footer extends LocatableHLayout {
});
}
+ private void changeIcon(int alertCount) {
+ if (alertCount == 0) {
+ setPrompt(MSG.view_core_noRecentAlerts());
+ setContents(imgHTML("subsystems/alert/Alerts_16.png", 16, 16));
+ } else {
+ setPrompt(MSG.view_core_recentAlerts(String.valueOf(alertCount)));
+ String link = '#' + ReportTopView.VIEW_ID.getName() + "/" + ReportTopView.SECTION_SUBSYSTEMS_VIEW_ID
+ + "/" + AlertHistoryView.SUBSYSTEM_VIEW_ID;
+ setContents("<a href=\"" + link + "\">" + imgHTML(ImageManager.getAlertIcon(AlertPriority.HIGH))
+ + "</a>");
+ }
+ }
+
public void refreshLoggedIn() {
AlertCriteria alertCriteria = new AlertCriteria();
alertCriteria.addFilterStartTime(System.currentTimeMillis() - (1000L * 60 * 60 * 8)); // last 8 hrs
@@ -179,13 +193,7 @@ public class Footer extends LocatableHLayout {
}
public void onSuccess(PageList<Alert> result) {
- if (result.getTotalSize() == 0) {
- setContents(MSG.view_core_recentAlerts("0"));
- setIcon("subsystems/alert/Alert_LOW_16.png");
- } else {
- setContents(MSG.view_core_recentAlerts(String.valueOf(result.getTotalSize())));
- setIcon("subsystems/alert/Alert_HIGH_16.png");
- }
+ changeIcon(result.getTotalSize());
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
index f000569..1b27eee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
@@ -62,7 +62,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
label = new LocatableLabel(extendLocatorId("Label"));
label.setAlign(Alignment.CENTER);
- label.setWidth("600px");
+ label.setWidth100();
label.setHeight("30px");
label.setCanSelectText(true);
addMember(label);
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 35ff92d..695bd9d 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
@@ -2057,7 +2057,8 @@ view_aboutBox_version = Version:
view_core_error_1 = New Alerts lookup failed
#view_core_loggedInAs = Logged in as {0}
view_core_loggedOut = Logged out
-view_core_recentAlerts = [{0}] recent alerts
+view_core_recentAlerts = There are [{0}] recent alerts - click the icon to go to the recent alerts report
+view_core_noRecentAlerts = There are no recent alerts to report
view_core_uncaught = Globally uncaught exception
# Login
commit 48930bae6ee5f95142f76aafd9da7f684f8c9a43
Merge: c45a4ed 769949f
Author: Filip Drabek <fdrabek(a)dhcp-lab-136.englab.brq.redhat.com>
Date: Mon Mar 28 23:29:48 2011 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit c45a4ed71306601af814364822149e20277bb4e7
Author: Filip Drabek <fdrabek(a)dhcp-lab-136.englab.brq.redhat.com>
Date: Mon Mar 28 23:28:26 2011 +0200
JAXB adapter for Map<Integer,String>
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java
new file mode 100644
index 0000000..004576e
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java
@@ -0,0 +1,51 @@
+package org.rhq.enterprise.server.jaxb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jws.WebResult;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+import org.rhq.enterprise.server.system.ServerVersion;
+
+/** See the javadoc for the XmlAdapter itself for a more complete explanation, but simply
+ * put the adapter maps types that JAXB has difficulty serializing(Ex. Map<Integer,String>)
+ * to java types that JAXB can actually serialize. From a JAXB perspective think of the
+ * problematic types as opaque to JAXB and the map to type in a marshal as the serializable
+ * type.
+ *
+ * @author Simeon Pinder
+ * @author Filip Drabek
+ *
+ */
+@XmlType(namespace = ServerVersion.namespace)
+public class WebServiceMapAdapter extends XmlAdapter<Object[], Map<Integer, String>> {
+
+ @WebResult(targetNamespace = ServerVersion.namespace)
+ public Object[] marshal(Map<Integer, String> opaque) throws Exception {
+ Object[] bag = null;
+ if (opaque != null) {
+ int i = 0;
+ bag = new Object[2 * opaque.size()];
+ for (Map.Entry<Integer, String> mapEntry : opaque.entrySet()) {
+ bag[i++] = mapEntry.getKey();
+ bag[i++] = mapEntry.getValue();
+ }
+ } else {
+ bag = new Object[0];
+ }
+ return bag;
+ }
+
+ @WebResult(targetNamespace = ServerVersion.namespace)
+ public Map<Integer, String> unmarshal(Object[] marshallable) throws Exception {
+ Map<Integer, String> map = new HashMap<Integer, String>();
+ if (marshallable != null) {
+ for (int i = 0; i < marshallable.length; i += 2) {
+ map.put((Integer) marshallable[i], (String) marshallable[i + 1]);
+ }
+ }
+ return map;
+ }
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
index 9d1c269..0fcc193 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
@@ -35,6 +35,7 @@ import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.jaxb.WebServiceMapAdapter;
import org.rhq.enterprise.server.jaxb.adapter.ResourceListAdapter;
import org.rhq.enterprise.server.system.ServerVersion;
@@ -153,6 +154,7 @@ public interface ResourceManagerRemote {
* @return A Map of ResourceIds to FormattedAncestryStrings, one entry for each unique, valid, resourceId passed in.
*/
@WebMethod
+ @XmlJavaTypeAdapter(value = WebServiceMapAdapter.class)
Map<Integer, String> getResourcesAncestry( //
@WebParam(name = "subject") Subject subject, //
@WebParam(name = "resourceIds") Integer[] resourceIds, //
commit 769949fb28b0beeeba6c076130708c8a534cce88
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 15:00:25 2011 -0400
in our GWT UI, the alert and event severity filters are represented with a drop down selection menu containing one checkbox for each severity enum (alert: hi, med, lo; event: debug, info, warn, et...).
If you don't select any severity (i.e. all the checkboxes are unchecked), we used to assume
this means there is no filtering to be performed and the query returns everything.
However, because the UI renders these in individual checkboxes, that behavior doesn't really make sense and will
confuse the user. Because, if the user doesn't select any severities, it
seems as though the user is asking it to show nothing - since no event or
alert will match the selected severities (and there are NO selected severities).
So to make the query results/UI more sensical, if the user de-selects all severity
check boxes, the table will show 0 rows.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
index f776d56..3e51b24 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
@@ -204,6 +204,13 @@ public class AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, final AlertCriteria criteria) {
+ if (criteria == null) {
+ // the user selected no severities in the filter - it makes sense from the UI perspective to show 0 rows
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
+
final long start = System.currentTimeMillis();
this.alertService.findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() {
@@ -272,10 +279,16 @@ public class AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {
@Override
protected AlertCriteria getFetchCriteria(DSRequest request) {
+ AlertPriority[] severitiesFilter = getArrayFilter(request, "severities", AlertPriority.class);
+
+ if (severitiesFilter == null || severitiesFilter.length == 0) {
+ return null; // user didn't select any severities - return null to indicate no data should be displayed
+ }
+
AlertCriteria criteria = new AlertCriteria();
criteria.setPageControl(getPageControl(request));
- criteria.addFilterPriorities(getArrayFilter(request, "severities", AlertPriority.class));
+ criteria.addFilterPriorities(severitiesFilter);
criteria.addFilterEntityContext(entityContext);
criteria.fetchConditionLogs(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
index e7f93e4..490ee4f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
@@ -109,6 +109,13 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, final EventCriteria criteria) {
+ if (criteria == null) {
+ // the user selected no severities in the filter - it makes sense from the UI perspective to show 0 rows
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
+
GWTServiceLookup.getEventService().findEventCompositesByCriteria(criteria,
new AsyncCallback<PageList<EventComposite>>() {
public void onFailure(Throwable caught) {
@@ -128,6 +135,11 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
@Override
protected EventCriteria getFetchCriteria(final DSRequest request) {
+ EventSeverity[] severities = getArrayFilter(request, "severities", EventSeverity.class);
+ if (severities == null || severities.length == 0) {
+ return null; // user didn't select any severities - return null to indicate no data should be displayed
+ }
+
EventCriteria criteria = new EventCriteria();
PageControl pageControl = getPageControl(request);
@@ -144,10 +156,7 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
criteria.addFilterSourceName((String) criteriaMap.get("source"));
criteria.addFilterDetail((String) criteriaMap.get("details"));
- if (criteriaMap.get("severities") != null) {
- EventSeverity[] severities = getArrayFilter(request, "severities", EventSeverity.class);
- criteria.addFilterSeverities(severities);
- }
+ criteria.addFilterSeverities(severities);
criteria.addFilterEntityContext(entityContext);
commit cd758dcbc78fea04ebda2d3563a3b283b630b88e
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Mar 28 14:27:18 2011 -0400
fix editing of group config props via modal member value editor (https://bugzilla.redhat.com/show_bug.cgi?id=690483)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
index 449e9c3..d991515 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
@@ -1316,17 +1316,20 @@ public class ConfigurationEditor extends LocatableVLayout {
List<Validator> validators = buildValidators(propertyDefinitionSimple, propertySimple);
valueItem.setValidators(validators.toArray(new Validator[validators.size()]));
- valueItem.addChangedHandler(new ChangedHandler() {
- public void onChanged(ChangedEvent changedEvent) {
- updatePropertySimpleValue(changedEvent.getValue(), propertySimple, propertyDefinitionSimple);
- // Only fire a prop value change event if the prop's a top-level simple or a simple within a
- // top-level map.
- if (fireEventOnPropertyValueChange(propertyDefinitionSimple, propertySimple)) {
- boolean isValid = changedEvent.getItem().validate();
- firePropertyChangedEvent(propertySimple, propertyDefinitionSimple, isValid);
+ if ((propertySimple.getConfiguration() != null) || (propertySimple.getParentMap() != null) ||
+ (propertySimple.getParentList() != null)) {
+ valueItem.addChangedHandler(new ChangedHandler() {
+ public void onChanged(ChangedEvent changedEvent) {
+ updatePropertySimpleValue(changedEvent.getValue(), propertySimple, propertyDefinitionSimple);
+ // Only fire a prop value change event if the prop's a top-level simple or a simple within a
+ // top-level map.
+ if (fireEventOnPropertyValueChange(propertyDefinitionSimple, propertySimple)) {
+ boolean isValid = changedEvent.getItem().validate();
+ firePropertyChangedEvent(propertySimple, propertyDefinitionSimple, isValid);
+ }
}
- }
- });
+ });
+ }
}
// for more robust and repeatable item locators (not positional) assign a name and title
@@ -1356,9 +1359,9 @@ public class ConfigurationEditor extends LocatableVLayout {
protected boolean fireEventOnPropertyValueChange(PropertyDefinitionSimple propertyDefinitionSimple,
PropertySimple propertySimple) {
- PropertyDefinitionMap parentPropertyMapDefinition = propertyDefinitionSimple.getParentPropertyMapDefinition();
- return propertyDefinitionSimple.getConfigurationDefinition() != null
- || (parentPropertyMapDefinition != null && parentPropertyMapDefinition.getConfigurationDefinition() != null);
+ PropertyMap parentMap = propertySimple.getParentMap();
+ return propertySimple.getConfiguration() != null
+ || (parentMap != null && parentMap.getConfiguration() != null);
}
protected void updatePropertySimpleValue(Object value, PropertySimple propertySimple,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
index 4c4a29f..eafbd15 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
@@ -250,7 +250,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
setAllValuesToItem.setAlign(Alignment.RIGHT);
setAllItems.add(setAllValuesToItem);
- PropertySimple masterPropertySimple = new PropertySimple(aggregatePropertySimple.getName(), null);
+ PropertySimple masterPropertySimple = new PropertySimple(propertyDefinitionSimple.getName(), null);
final FormItem masterValueItem = super.buildSimpleField(propertyDefinitionSimple, masterPropertySimple);
masterValueItem.setDisabled(false);
@@ -286,7 +286,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
masterValueItem.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
applyButton.enable();
- applyButton.focus();
+ //applyButton.focus();
}
});
@@ -332,7 +332,9 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
// Add data rows.
final List<FormItem> valueItems = new ArrayList<FormItem>(this.memberConfigurations.size());
final Map<String, PropertySimple> valueItemNameToPropertySimpleMap = new HashMap<String, PropertySimple>();
- for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
+ List<GroupMemberConfiguration> memberConfigurations1 = this.memberConfigurations;
+ for (int i = 0, memberConfigurations1Size = memberConfigurations1.size(); i < memberConfigurations1Size; i++) {
+ GroupMemberConfiguration memberConfiguration = memberConfigurations1.get(i);
String memberName = memberConfiguration.getLabel();
StaticTextItem memberItem = new StaticTextItem();
memberItem.setShowTitle(false);
@@ -340,8 +342,11 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
items.add(memberItem);
Configuration configuration = memberConfiguration.getConfiguration();
PropertySimple memberPropertySimple = (PropertySimple) getProperty(configuration, aggregatePropertySimple,
- index);
+ index);
FormItem valueItem = buildSimpleField(propertyDefinitionSimple, memberPropertySimple);
+ // All of the member props have the same name, so add an index to the item name to ensure it's unique
+ // to the form.
+ valueItem.setName(propertyDefinitionSimple.getName() + "-" + i);
valueItems.add(valueItem);
valueItemNameToPropertySimpleMap.put(valueItem.getName(), memberPropertySimple);
FormItem unsetItem = buildUnsetItem(propertyDefinitionSimple, memberPropertySimple, valueItem);
@@ -420,6 +425,10 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
@Override
public void onClick(ClickEvent clickEvent) {
Object value = masterValueItem.getValue();
+ // Update the aggregate property.
+ aggregatePropertySimple.setValue(value);
+
+ // Update the member properties.
for (FormItem valueItem : valueItems) {
setValue(valueItem, value);
commit e1b12455724418abfbb47f004d907faf2f052eeb
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 12:43:00 2011 -0400
BZ 535384 - criteria needed to add search expression from the filter field in order for the search bar to work for any view using this ResourceComposite data source
I also added the ability to set version criteria, to match that of the Resouce datasource.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
index 24eb534..0567d7c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
@@ -173,6 +173,8 @@ public class ResourceCompositeDataSource extends RPCDataSource<ResourceComposite
criteria.addFilterTagNamespace(getFilter(request, "tagNamespace", String.class));
criteria.addFilterTagSemantic(getFilter(request, "tagSemantic", String.class));
criteria.addFilterTagName(getFilter(request, "tagName", String.class));
+ criteria.addFilterVersion(getFilter(request, "version", String.class));
+ criteria.setSearchExpression(getFilter(request, "search", String.class));
return criteria;
}
commit c510a0e9ae1c21c63d66d6420b01fbeb65b50e22
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 11:16:17 2011 -0400
remove unused static API. we have a different way of getting group member views
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
index 7e9883e..617ca08 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
@@ -175,10 +175,4 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
return new ResourceCompositeSearchView(locatorId, parentResourceComposite, new Criteria("parentId", String
.valueOf(parentResourceComposite.getResource().getId())), MSG.view_inventory_resources_title_children());
}
-
- public static ResourceCompositeSearchView getMembersOf(String locatorId, int groupId) {
- return new ResourceCompositeSearchView(locatorId, (ResourceComposite) null, new Criteria("groupId", String
- .valueOf(groupId)), MSG.view_inventory_resources_title_members());
- }
-
}
commit d525381080087b8ca9d439e2d7d9ff16d8e14117
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 10:59:09 2011 -0400
suppress warnings due to the fact that subclass has different datasource types than the superclass
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
index 097383e..7e9883e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
@@ -67,6 +67,8 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
this(locatorId, null, criteria, title, headerIcons);
}
+ // surpress unchecked warnings because the superclass has different generic types for the datasource
+ @SuppressWarnings("unchecked")
@Override
protected RPCDataSource getDataSourceInstance() {
return ResourceCompositeDataSource.getInstance();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index beb5579..27e67d7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
@@ -62,7 +62,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Greg Hinkle
*/
-public class ResourceSearchView extends Table<RPCDataSource<Resource, ResourceCriteria>> {
+public class ResourceSearchView extends Table {
private static final String DEFAULT_TITLE = MSG.view_inventory_resources_title();
@@ -112,7 +112,9 @@ public class ResourceSearchView extends Table<RPCDataSource<Resource, ResourceCr
setDataSource(datasource);
}
- protected RPCDataSource<Resource, ResourceCriteria> getDataSourceInstance() {
+ // surpress unchecked warnings because the subclasses may have different generic types for the datasource
+ @SuppressWarnings("unchecked")
+ protected RPCDataSource getDataSourceInstance() {
return ResourceDatasource.getInstance();
}
commit 9b58b90dbeaad340e36ee4d9036e353a648dde72
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 10:41:09 2011 -0400
add generic type info
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index 6559a31..beb5579 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
@@ -41,6 +41,8 @@ import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
@@ -60,7 +62,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Greg Hinkle
*/
-public class ResourceSearchView extends Table {
+public class ResourceSearchView extends Table<RPCDataSource<Resource, ResourceCriteria>> {
private static final String DEFAULT_TITLE = MSG.view_inventory_resources_title();
@@ -106,17 +108,11 @@ public class ResourceSearchView extends Table {
addHeaderIcon(headerIcon);
}
- // DynamicForm searchPanel = new DynamicForm();
- // final TextItem searchBox = new TextItem("query", "Search Resources");
- // searchBox.setValue("");
- // searchPanel.setWrapItemTitles(false);
- // searchPanel.setFields(searchBox);
-
- final RPCDataSource datasource = getDataSourceInstance();
+ final RPCDataSource<Resource, ResourceCriteria> datasource = getDataSourceInstance();
setDataSource(datasource);
}
- protected RPCDataSource getDataSourceInstance() {
+ protected RPCDataSource<Resource, ResourceCriteria> getDataSourceInstance() {
return ResourceDatasource.getInstance();
}
commit 9dff0af39f538f28833c51ff2ef206328b3bdc8d
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Mar 25 23:09:21 2011 -0400
remove link to unavailable package in jdoc
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java
index 5d87a7f..503f729 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java
@@ -26,11 +26,8 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlEnum;
-import org.rhq.enterprise.server.resource.ResourceManagerRemote;
-
/**
* Used to request the desired diplay format for resource ancestry.
- * @see {@link ResourceManagerRemote#getResourcesAncestry(org.rhq.core.domain.auth.Subject, Integer[], ResourceAncestryFormat)}
*
* @author Jay Shaughnessy
*/
commit 23820b201c04edcec4812d31ad4687abc30bf0ec
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Mar 25 21:48:10 2011 -0400
Resource Ancestry (Disambiguation) Work
- Bug 602178 - Resource hierarchy in alert emails not disambiguated
- Add SLSB support for getting formatted resource ancestry and use this
for disambiguated resource info for alert email text. This also provides
missing support for CLI users that may need formatted ancestry strings.
- Tweaked the alert-email-template.txt to be slightly better formatted (is
this ok to do? Is this file being parsed by users?)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java
new file mode 100644
index 0000000..5d87a7f
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/ResourceAncestryFormat.java
@@ -0,0 +1,50 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.resource;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlEnum;
+
+import org.rhq.enterprise.server.resource.ResourceManagerRemote;
+
+/**
+ * Used to request the desired diplay format for resource ancestry.
+ * @see {@link ResourceManagerRemote#getResourcesAncestry(org.rhq.core.domain.auth.Subject, Integer[], ResourceAncestryFormat)}
+ *
+ * @author Jay Shaughnessy
+ */
+@XmlEnum
+(a)XmlAccessorType(XmlAccessType.FIELD)
+public enum ResourceAncestryFormat {
+ /**
+ * <ul>
+ * <li>RAW: The raw, encoded value. This is already provided by the Resource.ancestry field.
+ *
+ * <li>SIMPLE: Short, name only format: (eg. parentName < grandParentName < etc...)
+ *
+ * <li>VERBOSE: Verbose, MultiLine format incorporating name, type and indentation.
+ * </ul>
+ */
+ RAW, SIMPLE, VERBOSE
+}
\ No newline at end of file
diff --git a/modules/enterprise/server/ear/src/main/resources/alert-email-template.txt b/modules/enterprise/server/ear/src/main/resources/alert-email-template.txt
index 40fb2cf..a791933 100644
--- a/modules/enterprise/server/ear/src/main/resources/alert-email-template.txt
+++ b/modules/enterprise/server/ear/src/main/resources/alert-email-template.txt
@@ -1,24 +1,23 @@
-Subject: [ALERT] priority of [@@@PRIORITY@@@] for alert [@@@ALERT_NAME@@@] on resource [@@@RESOURCE_NAME@@@]
-
-The resource @@@RESOURCE_NAME@@@ has generated the following alert:
-
-------------------------------------------
-
-- Resource Name: @@@RESOURCE_NAME@@@
-- Alert Name: @@@ALERT_NAME@@@
-- Alert Severity: @@@PRIORITY@@@
-- Alert Date/Time: @@@TIMESTAMP@@@
-- Conditions: @@@CONDITIONS@@@
-
-------------------------------------------
-
-Resource Hierarchy was:
-
-@@@FULL_RESOURCE_HIERARCHY@@@
-
-
-------------------------------------------
-
-For additional details about this alert, go to @@@ALERT_URL@@@
-
-This message was delivered to you by RHQ.
+Subject: [ALERT] priority of [@@@PRIORITY@@@] for alert [@@@ALERT_NAME@@@] on resource [@@@RESOURCE_NAME@@@]
+
+The resource @@@RESOURCE_NAME@@@ has generated the following alert:
+
+------------------------------------------
+
+Resource Name : @@@RESOURCE_NAME@@@
+Alert Name : @@@ALERT_NAME@@@
+Alert Severity : @@@PRIORITY@@@
+Alert Date/Time : @@@TIMESTAMP@@@
+Conditions: @@@CONDITIONS@@@
+
+------------------------------------------
+
+Resource Ancestry:
+
+@@@FULL_RESOURCE_HIERARCHY@@@
+
+------------------------------------------
+
+For additional details about this alert, go to @@@ALERT_URL@@@
+
+This message was delivered to you by RHQ.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
index d25d1c4..02ae7b1 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/alert/AlertManagerBean.java
@@ -64,6 +64,7 @@ import org.rhq.core.domain.measurement.MeasurementSchedule;
import org.rhq.core.domain.measurement.MeasurementUnits;
import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.server.MeasurementConverter;
import org.rhq.core.server.PersistenceUtility;
@@ -727,9 +728,11 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote {
}
AlertDefinition alertDefinition = alert.getAlertDefinition();
- Map<String, String> alertMessage = emailManager.getAlertEmailMessage(
- prettyPrintResourceHierarchy(alertDefinition.getResource()), //
- alertDefinition.getResource().getName(), //
+ Resource resource = alertDefinition.getResource();
+ Map<Integer, String> ancestry = resourceManager.getResourcesAncestry(subjectManager.getOverlord(),
+ new Integer[] { resource.getId() }, ResourceAncestryFormat.VERBOSE);
+ Map<String, String> alertMessage = emailManager.getAlertEmailMessage(ancestry.get(resource.getId()), //
+ resource.getName(), //
alertDefinition.getName(), //
alertDefinition.getPriority().toString(), //
new Date(alert.getCtime()).toString(), //
@@ -755,40 +758,6 @@ public class AlertManagerBean implements AlertManagerLocal, AlertManagerRemote {
private static String NEW_LINE = System.getProperty("line.separator");
- private String prettyPrintResourceHierarchy(Resource resource) {
- StringBuilder builder = new StringBuilder();
-
- List<Resource> lineage = resourceManager.getResourceLineage(resource.getId());
-
- int depth = 0;
- for (Resource res : lineage) {
- if (depth == 0) {
- builder.append(" - ");
- } else {
- builder.append(NEW_LINE);
-
- for (int i = 0; i < depth; i++) {
- builder.append(" ");
- }
-
- builder.append("|");
- builder.append(NEW_LINE);
-
- for (int i = 0; i < depth; i++) {
- builder.append(" ");
- }
-
- builder.append("+- ");
- }
-
- builder.append(res.getName());
-
- depth++;
- }
-
- return builder.toString();
- }
-
/**
* Create a human readable description of the conditions that led to this alert.
* @param alert Alert to create human readable condition description
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index 384104a..30c2334 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -20,7 +20,9 @@ package org.rhq.enterprise.server.resource;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
@@ -66,6 +68,7 @@ import org.rhq.core.domain.content.InstalledPackageHistory;
import org.rhq.core.domain.content.PackageInstallationStep;
import org.rhq.core.domain.content.ResourceRepo;
import org.rhq.core.domain.criteria.ResourceCriteria;
+import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSource;
import org.rhq.core.domain.measurement.Availability;
@@ -84,6 +87,7 @@ import org.rhq.core.domain.resource.CreateResourceHistory;
import org.rhq.core.domain.resource.DeleteResourceHistory;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceError;
import org.rhq.core.domain.resource.ResourceErrorType;
@@ -827,6 +831,147 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
return resourceLineage;
}
+ public Map<Integer, String> getResourcesAncestry(Subject subject, Integer[] resourceIds,
+ ResourceAncestryFormat format) {
+ Map<Integer, String> result = new HashMap<Integer, String>(resourceIds.length);
+
+ if (resourceIds.length == 0) {
+ return result;
+ }
+
+ ResourceCriteria resourceCriteria = new ResourceCriteria();
+ resourceCriteria.addFilterIds(resourceIds);
+ resourceCriteria.fetchResourceType(true);
+ List<Resource> resources = findResourcesByCriteria(subject, resourceCriteria);
+
+ if (ResourceAncestryFormat.RAW == format) {
+ for (Resource resource : resources) {
+ result.put(resource.getId(), resource.getAncestry());
+ }
+ return result;
+ }
+
+ HashSet<Integer> typesSet = new HashSet<Integer>();
+ HashSet<String> ancestries = new HashSet<String>();
+ for (Resource resource : resources) {
+ ResourceType type = resource.getResourceType();
+ if (type != null) {
+ typesSet.add(type.getId());
+ }
+ ancestries.add(resource.getAncestry());
+ }
+
+ // In addition to the types of the result resources, get the types of their ancestry
+ typesSet.addAll(getAncestryTypeIds(ancestries));
+
+ ResourceTypeCriteria resourceTypeCriteria = new ResourceTypeCriteria();
+ resourceTypeCriteria.addFilterIds(typesSet.toArray(new Integer[typesSet.size()]));
+ List<ResourceType> types = typeManager.findResourceTypesByCriteria(subject, resourceTypeCriteria);
+
+ for (Resource resource : resources) {
+ String decodedAncestry = getDecodedAncestry(resource, types, format);
+ result.put(resource.getId(), decodedAncestry);
+ }
+ return result;
+ }
+
+ /**
+ * Get the complete set of resource type Ids in the ancestries provided. This is useful for
+ * being able to load all the types in advance of generating decoded values.
+ *
+ * @return
+ */
+ private HashSet<Integer> getAncestryTypeIds(Collection<String> ancestries) {
+ HashSet<Integer> result = new HashSet<Integer>();
+
+ for (String ancestry : ancestries) {
+ if (null == ancestry) {
+ continue;
+ }
+ String[] ancestryEntries = ancestry.split(Resource.ANCESTRY_DELIM);
+ for (int i = 0; i < ancestryEntries.length; ++i) {
+ String[] entryTokens = ancestryEntries[i].split(Resource.ANCESTRY_ENTRY_DELIM);
+ int rtId = Integer.valueOf(entryTokens[0]);
+ result.add(rtId);
+ }
+ }
+
+ return result;
+ }
+
+ private String getDecodedAncestry(Resource resource, List<ResourceType> typeList, ResourceAncestryFormat format) {
+ String ancestry = resource.getAncestry();
+ StringBuilder sb = new StringBuilder();
+
+ if (ResourceAncestryFormat.VERBOSE != format) {
+ if (null == ancestry) {
+ sb.append("");
+ }
+
+ String[] ancestryEntries = ancestry.split(Resource.ANCESTRY_DELIM);
+ for (int i = 0; i < ancestryEntries.length; ++i) {
+ String[] entryTokens = ancestryEntries[i].split(Resource.ANCESTRY_ENTRY_DELIM);
+ String ancestorName = entryTokens[2];
+
+ sb.append((i > 0) ? " < " : "");
+ sb.append(ancestorName);
+ }
+ } else {
+ Map<Integer, ResourceType> types = new HashMap<Integer, ResourceType>(typeList.size());
+ for (ResourceType type : typeList) {
+ types.put(type.getId(), type);
+ }
+
+ ResourceType type = types.get(resource.getResourceType().getId());
+ String resourceLongName = getResourceLongName(resource.getName(), type);
+
+ // decode ancestry
+ if (null != ancestry) {
+ String[] ancestryEntries = ancestry.split(Resource.ANCESTRY_DELIM);
+ for (int i = ancestryEntries.length - 1, j = 0; i >= 0; --i, ++j) {
+ String[] entryTokens = ancestryEntries[i].split(Resource.ANCESTRY_ENTRY_DELIM);
+ int ancestorTypeId = Integer.valueOf(entryTokens[0]);
+ String ancestorName = entryTokens[2];
+
+ // indent with spaces
+ if (j > 0) {
+ sb.append("\n");
+ for (int k = 0; k < j; ++k) {
+ sb.append(" ");
+ }
+ }
+ type = types.get(ancestorTypeId);
+ sb.append(getResourceLongName(ancestorName, type));
+ }
+
+ // add target resource, indent with spaces
+ sb.append("\n");
+ for (int k = 0; k <= ancestryEntries.length; ++k) {
+ sb.append(" ");
+ }
+ sb.append(resourceLongName);
+
+ } else {
+ // just show the resource name/type info
+ sb.append(resourceLongName);
+ }
+ }
+
+ return sb.toString();
+ }
+
+ private String getResourceLongName(String resourceName, ResourceType type) {
+ StringBuilder sb = new StringBuilder();
+ sb.append(resourceName);
+ sb.append(" [");
+ sb.append(type.getPlugin());
+ sb.append(", ");
+ sb.append(type.getName());
+ sb.append("]");
+
+ return sb.toString();
+ }
+
@NotNull
public Resource getRootResourceForResource(int resourceId) {
Query q = entityManager.createNamedQuery(Resource.QUERY_FIND_ROOT_PLATFORM_OF_RESOURCE);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java
index 02b0266..841428b 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java
@@ -32,6 +32,7 @@ import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceError;
import org.rhq.core.domain.resource.ResourceErrorType;
@@ -506,4 +507,7 @@ public interface ResourceManagerLocal {
List<Integer> findIdsByTypeIds(List<Integer> resourceTypeIds);
Integer getResourceCount(List<Integer> resourceTypeIds);
+
+ Map<Integer, String> getResourcesAncestry(Subject subject, Integer[] resourceIds, ResourceAncestryFormat format);
+
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
index 46b8e08..9d1c269 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.server.resource;
import java.util.List;
+import java.util.Map;
import javax.ejb.Remote;
import javax.jws.WebMethod;
@@ -31,6 +32,7 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.jaxb.adapter.ResourceListAdapter;
@@ -138,4 +140,22 @@ public interface ResourceManagerRemote {
Resource getParentResource( //
@WebParam(name = "subject") Subject subject, //
@WebParam(name = "resourceId") int resourceId);
+
+ /**
+ * Resource.ancestry is an encoded value that holds the resource's parental ancestry. It is not suitable for display.
+ * This method can be used to get decoded and formatted ancestry values for a set of resources. A typical usage
+ * would a criteria resource fetch, and then a subsequent call to this method for ancestry display, potentially
+ * for resource disambiguation purposes.
+ *
+ * @param subject
+ * @param resourceIds
+ * @param format
+ * @return A Map of ResourceIds to FormattedAncestryStrings, one entry for each unique, valid, resourceId passed in.
+ */
+ @WebMethod
+ Map<Integer, String> getResourcesAncestry( //
+ @WebParam(name = "subject") Subject subject, //
+ @WebParam(name = "resourceIds") Integer[] resourceIds, //
+ @WebParam(name = "format") ResourceAncestryFormat format);
+
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
index 3a4910b..e06d5ae 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
@@ -25,7 +25,6 @@ package org.rhq.enterprise.server.webservices;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
@@ -115,6 +114,7 @@ import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.rhq.core.domain.resource.CreateResourceHistory;
import org.rhq.core.domain.resource.DeleteResourceHistory;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.ProblemResourceComposite;
import org.rhq.core.domain.resource.group.ResourceGroup;
@@ -517,12 +517,12 @@ public class WebservicesManagerBean implements WebservicesRemote {
public PackageType findPackageType(Subject subject, Integer resourceTypeId, String packageTypeName) {
return contentManager.findPackageType(subject, resourceTypeId, packageTypeName);
}
-
+
public PackageTypeAndVersionFormatComposite findPackageTypeWithVersionFormat(Subject subject,
Integer resourceTypeId, String packageTypeName) {
return contentManager.findPackageTypeWithVersionFormat(subject, resourceTypeId, packageTypeName);
}
-
+
public InstalledPackage getBackingPackageForResource(Subject subject, int resourceId) {
return contentManager.getBackingPackageForResource(subject, resourceId);
}
@@ -533,15 +533,15 @@ public class WebservicesManagerBean implements WebservicesRemote {
public PageList<Package> findPackagesByCriteria(Subject subject, PackageCriteria criteria) {
checkParametersPassedIn(subject, criteria);
- return contentManager.findPackagesByCriteria(subject, criteria);
+ return contentManager.findPackagesByCriteria(subject, criteria);
}
-
+
public PageList<PackageAndLatestVersionComposite> findPackagesWithLatestVersion(Subject subject,
PackageCriteria criteria) {
checkParametersPassedIn(subject, criteria);
- return contentManager.findPackagesWithLatestVersion(subject, criteria);
+ return contentManager.findPackagesWithLatestVersion(subject, criteria);
}
-
+
//CONTENTMANAGER: END ----------------------------------
// //DATAACCESSMANAGER: BEGIN ----------------------------------
@@ -807,11 +807,11 @@ public class WebservicesManagerBean implements WebservicesRemote {
public PackageVersion getLatestPackageVersion(Subject subject, int packageId, int repoId) {
return repoManager.getLatestPackageVersion(subject, packageId, repoId);
}
-
+
public boolean deletePackageVersionsFromRepo(Subject subject, int repoId, int[] packageVersionIds) {
return repoManager.deletePackageVersionsFromRepo(subject, repoId, packageVersionIds);
}
-
+
public PageList<Resource> findSubscribedResources(Subject subject, int repoId, PageControl pc) {
return repoManager.findSubscribedResources(subject, repoId, pc);
}
@@ -911,6 +911,11 @@ public class WebservicesManagerBean implements WebservicesRemote {
return resourceManager.getResource(subject, resourceId);
}
+ public Map<Integer, String> getResourcesAncestry(Subject subject, Integer[] resourceIds,
+ ResourceAncestryFormat format) {
+ return resourceManager.getResourcesAncestry(subject, resourceIds, format);
+ }
+
public List<Integer> uninventoryResources(Subject subject, int[] resourceIds) {
return resourceManager.uninventoryResources(subject, resourceIds);
}
commit 3e764d153948be8b0d7b9d25e58947caa14295ca
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Mar 25 18:23:16 2011 -0400
be able to clear out ResourcErrors for a particular resource.
This is needed because I'm seeing instances where I get ResourcErrors in the database that never go away, even after the plugin can later successfully connect and monitor the resource.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
index 72be13d..921b82d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java
@@ -59,6 +59,8 @@ public interface ResourceGWTService extends RemoteService {
List<ResourceError> findResourceErrors(int resourceId) throws RuntimeException;
+ void deleteResourceErrors(int[] resourceErrorIds) throws RuntimeException;
+
PageList<ProblemResourceComposite> findProblemResources(long ctime, int maxItems) throws RuntimeException;
Resource getPlatformForResource(int resourceId) throws RuntimeException;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index 1046f31..7bc1cdd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -204,25 +204,25 @@ public class ResourceTitleBar extends LocatableVLayout {
winModal.setWidth("70%");
winModal.setHeight("70%");
winModal.setIsModal(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
winModal.centerInPage();
- winModal.setTitle(MSG.common_title_component_errors() + ":");
+ winModal.setTitle(MSG.common_title_component_errors());
LocatableVLayout form = new LocatableVLayout(extendLocatorId("_Modal_Form"));
form.setAlign(VerticalAlignment.CENTER);
- form.setLayoutMargin(20);
+ form.setLayoutMargin(10);
form.setWidth100();
- form.setHeight("40%");
- ResourceErrorsView errorsGrid = new ResourceErrorsView(extendLocatorId("errors"), MSG
- .view_summaryOverview_header_detectedErrors(), null, null,
- new String[] { ResourceErrorsDataSource.Field.DETAIL });
- errorsGrid.setWidth100();
- errorsGrid.setHeight("400");
+ form.setHeight100();
Resource resource = resourceComposite.getResource();
ResourceErrorsDataSource errors = new ResourceErrorsDataSource(resource.getId());
- errorsGrid.setShowFooter(false);
+ ResourceErrorsView errorsGrid = new ResourceErrorsView(extendLocatorId("errors"), MSG
+ .view_summaryOverview_header_detectedErrors(), null, null,
+ new String[] { ResourceErrorsDataSource.Field.DETAIL });
errorsGrid.setDataSource(errors);
+
form.addMember(errorsGrid);
winModal.addItem(form);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
index 5999e14..be76956 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsDataSource.java
@@ -27,10 +27,6 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceDateTimeField;
-import com.smartgwt.client.data.fields.DataSourceEnumField;
-import com.smartgwt.client.data.fields.DataSourceImageField;
-import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
import com.smartgwt.client.widgets.grid.ListGridRecord;
@@ -42,22 +38,20 @@ import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
- *
* @author Lukas Krejci
* @author Simeon Pinder
+ * @author John Mazzitelli
*/
public class ResourceErrorsDataSource extends RPCDataSource<ResourceError, Criteria> {
public static abstract class Field {
+ public static final String ID = "id";
public static final String SUMMARY = "summary";
public static final String DETAIL = "detail";
public static final String ERROR_TYPE = "errorType";
public static final String TIME_OCCURED = "timeOccured";
- public static final String ICON = "icon";
}
- private static final String ERROR_ICON = "[SKIN]/Dialog/warn.png";
-
ResourceGWTServiceAsync resourceService;
int resourceId;
@@ -69,25 +63,6 @@ public class ResourceErrorsDataSource extends RPCDataSource<ResourceError, Crite
}
@Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
-
- fields.add(new DataSourceEnumField(Field.ERROR_TYPE, MSG.dataSource_resourceErrors_field_errorType()));
- fields.add(new DataSourceDateTimeField(Field.TIME_OCCURED, MSG.dataSource_resourceErrors_field_timeOccured()));
- fields.add(new DataSourceTextField(Field.SUMMARY, MSG.dataSource_resourceErrors_field_summary()));
- DataSourceTextField details = new DataSourceTextField(Field.DETAIL, MSG
- .dataSource_resourceErrors_field_detail());
- details.setHidden(true);//won't be displaying this value directly in the listgrid
- fields.add(details);
- fields.add(new DataSourceImageField(Field.ICON, MSG.dataSource_resourceErrors_field_detail()));
-
- return fields;
- }
-
- /* (non-Javadoc)
- * @see org.rhq.enterprise.gui.coregui.client.util.RPCDataSource#executeFetch(com.smartgwt.client.data.DSRequest, com.smartgwt.client.data.DSResponse)
- */
- @Override
protected void executeFetch(final DSRequest request, final DSResponse response, final Criteria unused) {
resourceService.findResourceErrors(resourceId, new AsyncCallback<List<ResourceError>>() {
public void onFailure(Throwable caught) {
@@ -110,16 +85,18 @@ public class ResourceErrorsDataSource extends RPCDataSource<ResourceError, Crite
return null;
}
+ @Override
public ResourceError copyValues(Record from) {
//This is read-only datasource, so no need to implement this.
return null;
}
+ @Override
public ListGridRecord copyValues(ResourceError from) {
ListGridRecord record = new ListGridRecord();
+ record.setAttribute(Field.ID, from.getId());
record.setAttribute(Field.DETAIL, from.getDetail());
- record.setAttribute(Field.ICON, ERROR_ICON);
record.setAttribute(Field.ERROR_TYPE, from.getErrorType().name());
record.setAttribute(Field.SUMMARY, from.getSummary());
record.setAttribute(Field.TIME_OCCURED, new Date(from.getTimeOccurred()));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java
index 0309602..1c75bcc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/summary/ResourceErrorsView.java
@@ -1,80 +1,189 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2011 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.AutoFitWidthApproach;
+import com.smartgwt.client.types.DateDisplayFormat;
+import com.smartgwt.client.types.ListGridFieldType;
import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.events.CloseClientEvent;
+import com.smartgwt.client.widgets.events.DoubleClickEvent;
+import com.smartgwt.client.widgets.events.DoubleClickHandler;
import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.summary.ResourceErrorsDataSource.Field;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHTMLPane;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
-public class ResourceErrorsView extends Table {
+public class ResourceErrorsView extends Table<ResourceErrorsDataSource> {
+ private static final String ERROR_ICON = "[SKIN]/Dialog/warn.png";
+
public ResourceErrorsView(String locatorId, String string, Criteria criteria, Object object, String[] strings) {
super(locatorId, MSG.common_title_component_errors(), criteria);
+ setWidth100();
+ setHeight100();
+ setShowHeader(false);
+ }
+
+ @Override
+ protected SelectionStyle getDefaultSelectionStyle() {
+ return SelectionStyle.MULTIPLE;
}
- /** Set order and width of table display
- */
@Override
protected void configureTable() {
- getListGrid().getField(ResourceErrorsDataSource.Field.ERROR_TYPE).setWidth("20%");
- getListGrid().getField(ResourceErrorsDataSource.Field.TIME_OCCURED).setWidth("15%");
- getListGrid().getField(ResourceErrorsDataSource.Field.SUMMARY).setWidth("30%");
- //modify icon display listgrid element
- ListGridField iconField = getListGrid().getField(ResourceErrorsDataSource.Field.ICON);
- iconField.setWidth("35%");
- //add action on click of cell
+ ListGridField errorTypeField = new ListGridField(Field.ERROR_TYPE, MSG
+ .dataSource_resourceErrors_field_errorType());
+ errorTypeField.setAlign(Alignment.CENTER);
+ errorTypeField.setAutoFitWidth(true);
+ errorTypeField.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH);
+
+ ListGridField timeField = new ListGridField(Field.TIME_OCCURED, MSG
+ .dataSource_resourceErrors_field_timeOccured());
+ timeField.setType(ListGridFieldType.DATE);
+ timeField.setDateFormatter(DateDisplayFormat.TOLOCALESTRING);
+ timeField.setAlign(Alignment.CENTER);
+ timeField.setWidth("20%");
+
+ ListGridField summaryField = new ListGridField(Field.SUMMARY, MSG.dataSource_resourceErrors_field_summary());
+ summaryField.setAlign(Alignment.CENTER);
+ summaryField.setCellAlign(Alignment.LEFT);
+ summaryField.setWidth("*");
+
+ ListGridField iconField = new ListGridField("icon");
+ iconField.setType(ListGridFieldType.ICON);
+ iconField.setAlign(Alignment.CENTER);
+ iconField.setIcon(ERROR_ICON);
+ iconField.setCellIcon(ERROR_ICON);
+ iconField.setWidth("50");
+ iconField.setCanSort(false);
iconField.addRecordClickHandler(new RecordClickHandler() {
@Override
public void onRecordClick(RecordClickEvent event) {
- final Window winModal = new LocatableWindow(extendLocatorId("errorDetailsWin"));
- winModal.setTitle(MSG.common_title_component_errors());
- winModal.setOverflow(Overflow.VISIBLE);
- winModal.setShowMinimizeButton(false);
- winModal.setShowMaximizeButton(true);
- winModal.setIsModal(true);
- winModal.setShowModalMask(true);
- winModal.setAutoSize(true);
- winModal.setAutoCenter(true);
- winModal.setShowResizer(true);
- winModal.setCanDragResize(true);
- winModal.centerInPage();
- winModal.addCloseClickHandler(new CloseClickHandler() {
- @Override
- public void onCloseClick(CloseClientEvent event) {
- winModal.markForDestroy();
- }
- });
-
- LocatableHTMLPane htmlPane = new LocatableHTMLPane(extendLocatorId("errorDetailsPane"));
- htmlPane.setMargin(10);
- htmlPane.setDefaultWidth(550);
- htmlPane.setDefaultHeight(550);
- htmlPane.setContents((event.getRecord().getAttribute(ResourceErrorsDataSource.Field.DETAIL)));
- winModal.addItem(htmlPane);
- winModal.show();
+ String details = event.getRecord().getAttribute(Field.DETAIL);
+ popupDetails(details);
}
});
iconField.setShowHover(true);
- //show some details in mouseOver
iconField.setHoverCustomizer(new HoverCustomizer() {
@Override
public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) {
- String html = record.getAttribute(ResourceErrorsDataSource.Field.DETAIL);
+ String html = record.getAttribute(Field.DETAIL);
if (html.length() > 80) {
// this was probably an error stack trace, snip it so the tooltip isn't too big
html = "<pre>" + html.substring(0, 80) + "...</pre><p>"
- + MSG.view_group_pluginConfig_table_clickStatusIcon() + "</p>";
+ + MSG.dataSource_resourceErrors_clickStatusIcon() + "</p>";
}
return html;
}
});
+
+ setListGridDoubleClickHandler(new DoubleClickHandler() {
+ @Override
+ public void onDoubleClick(DoubleClickEvent event) {
+ ListGrid listGrid = (ListGrid) event.getSource();
+ ListGridRecord[] selectedRows = listGrid.getSelection();
+ if (selectedRows != null && selectedRows.length > 0) {
+ String details = selectedRows[0].getAttribute(Field.DETAIL);
+ popupDetails(details);
+ }
+ }
+ });
+
+ setListGridFields(errorTypeField, timeField, summaryField, iconField);
+
+ addTableAction(extendLocatorId("delete"), MSG.common_button_delete(), MSG.common_msg_areYouSure(),
+ new AbstractTableAction(TableActionEnablement.ANY) {
+ @Override
+ public void executeAction(final ListGridRecord[] selection, Object actionValue) {
+ if (selection == null || selection.length == 0) {
+ return;
+ }
+ int[] resourceErrorIds = new int[selection.length];
+ int i = 0;
+ for (ListGridRecord record : selection) {
+ resourceErrorIds[i++] = record.getAttributeAsInt(Field.ID);
+ }
+ GWTServiceLookup.getResourceService().deleteResourceErrors(resourceErrorIds,
+ new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ Message msg = new Message(MSG.dataSource_resourceErrors_deleteSuccess(String
+ .valueOf(selection.length)), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.dataSource_resourceErrors_deleteFailure(),
+ caught);
+ }
+ });
+ }
+ });
+ }
+
+ private void popupDetails(String details) {
+ final Window winModal = new LocatableWindow(extendLocatorId("errorDetailsWin"));
+ winModal.setTitle(MSG.common_title_component_errors());
+ winModal.setOverflow(Overflow.VISIBLE);
+ winModal.setShowMinimizeButton(false);
+ winModal.setShowMaximizeButton(true);
+ winModal.setIsModal(true);
+ winModal.setShowModalMask(true);
+ winModal.setAutoSize(true);
+ winModal.setAutoCenter(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
+ winModal.centerInPage();
+ winModal.addCloseClickHandler(new CloseClickHandler() {
+ @Override
+ public void onCloseClick(CloseClientEvent event) {
+ winModal.markForDestroy();
+ }
+ });
+
+ LocatableHTMLPane htmlPane = new LocatableHTMLPane(extendLocatorId("errorDetailsPane"));
+ htmlPane.setMargin(10);
+ htmlPane.setDefaultWidth(700);
+ htmlPane.setDefaultHeight(500);
+ htmlPane.setContents("<pre>" + details + "</pre>");
+ winModal.addItem(htmlPane);
+ winModal.show();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
index 7b32034..13fc75a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
@@ -314,6 +314,16 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
}
}
+ public void deleteResourceErrors(int[] resourceErrorIds) throws RuntimeException {
+ try {
+ for (int doomedId : resourceErrorIds) {
+ resourceManager.deleteResourceError(getSessionSubject(), doomedId);
+ }
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
public Resource manuallyAddResource(int resourceTypeId, int parentResourceId, Configuration pluginConfiguration)
throws RuntimeException {
try {
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 8317263..35ff92d 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
@@ -108,7 +108,7 @@ common_title_columns = Columns
common_title_configuration = Configuration
common_title_compatibleGroups = Compatible Groups
common_title_compatibleGroups_total = Compatible Group Total
-common_title_component_errors = Component errors
+common_title_component_errors = Component Errors
common_title_count = Count
common_title_custom = Custom
common_title_dashboard_name = Dashboard Name
@@ -563,10 +563,12 @@ dataSource_configurationHistory_error_fetchFailure = Unable to load configuratio
# Resource Errors
#-------------------------
dataSource_resourceErrors_field_summary = Summary
-dataSource_resourceErrors_field_detail = Detailed Message
dataSource_resourceErrors_field_errorType = Error Type
dataSource_resourceErrors_field_timeOccured = Time
dataSource_resourceErrors_error_fetchFailure = Failed to find Resource errors for Resource with id [{0}].
+dataSource_resourceErrors_clickStatusIcon = Click the icon for more details
+dataSource_resourceErrors_deleteSuccess = You have successfully deleted [{0}] resource error messages.
+dataSource_resourceErrors_deleteFailure = Failed to delete resource errors
# Template Schedules
#-------------------------
commit 5e00d3c76b16f5e2f1e8c26467c3c1599add8e1c
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Mar 25 17:16:06 2011 -0400
make sure config editor renders everything appropriately when in read-only mode (https://bugzilla.redhat.com/show_bug.cgi?id=680233)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
index 9765188..449e9c3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
@@ -344,10 +344,6 @@ public class ConfigurationEditor extends LocatableVLayout {
}
public void reload() {
- /*if (this.loaded && !this.reloadable) {
- return;
- }*/
-
if (this.configurationDefinition == null || this.configuration == null) {
// Wait for both to load.
return;
@@ -364,13 +360,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (configurationDefinition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED
|| configurationDefinition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) {
Log.info("Building structured configuration editor...");
- LocatableVLayout structuredConfigLayout = null;
- try {
- structuredConfigLayout = buildStructuredPane();
- } catch (RuntimeException e) {
- e.printStackTrace();
- throw e;
- }
+ LocatableVLayout structuredConfigLayout = buildStructuredPane();
addMember(structuredConfigLayout);
} else {
Label label = new Label("Structured configuration is not supported.");
@@ -1267,7 +1257,9 @@ public class ConfigurationEditor extends LocatableVLayout {
FormItem valueItem = null;
boolean propertyIsReadOnly = isReadOnly(propertyDefinitionSimple, propertySimple);
- if (propertyIsReadOnly) {
+ // TODO (ips, 03/25/11): We eventually want to use StaticTextItems for read-only PASSWORD props too, but we have
+ // to wait until we implement masking/unmasking of PASSWORD props at the SLSB layer first.
+ if (propertyIsReadOnly && propertyDefinitionSimple.getType() != PropertySimpleType.PASSWORD) {
valueItem = new StaticTextItem();
} else {
List<PropertyDefinitionEnumeration> enumeratedValues = propertyDefinitionSimple.getEnumeratedValues();
@@ -1319,7 +1311,7 @@ public class ConfigurationEditor extends LocatableVLayout {
}
}
- valueItem.setDisabled(isUnset(propertyDefinitionSimple, propertySimple));
+ valueItem.setDisabled(propertyIsReadOnly || isUnset(propertyDefinitionSimple, propertySimple));
List<Validator> validators = buildValidators(propertyDefinitionSimple, propertySimple);
valueItem.setValidators(validators.toArray(new Validator[validators.size()]));
@@ -1348,7 +1340,7 @@ public class ConfigurationEditor extends LocatableVLayout {
valueItem.setWidth(220);
/*
- Click handlers seem to be turned off for disabled fields... need an alternative
+ TODO: Click handlers seem to be turned off for disabled fields... need to find an alternative.
valueItem.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
com.allen_sauer.gwt.log.client.Log.info("Click in value field");
@@ -1532,7 +1524,7 @@ public class ConfigurationEditor extends LocatableVLayout {
private void displayMapEditor(final ListGrid summaryTable, final PropertyMapListGridRecord existingRecord,
PropertyDefinitionMap definition, final PropertyList list, final PropertyMap map,
- boolean mapReadOnly) {
+ final boolean mapReadOnly) {
final List<PropertyDefinition> memberDefinitions = new ArrayList<PropertyDefinition>(definition
.getPropertyDefinitions().values());
@@ -1542,7 +1534,8 @@ public class ConfigurationEditor extends LocatableVLayout {
final PropertyMap workingMap = (newRow) ? new PropertyMap(definition.getName()) : map.deepCopy(true);
final LocatableWindow popup = new LocatableWindow(extendLocatorId("MapEditor"));
- popup.setTitle(MSG.view_configEdit_editRow());
+ String title = (mapReadOnly) ? MSG.view_configEdit_viewRow() : MSG.view_configEdit_editRow();
+ popup.setTitle(title);
popup.setWidth(800);
popup.setHeight(600);
popup.setIsModal(true);
@@ -1568,31 +1561,33 @@ public class ConfigurationEditor extends LocatableVLayout {
}
okButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- if (!childForm.validate()) {
- okButton.disable();
- return;
- }
- if (newRow) {
- try {
- list.add(workingMap);
- int index = list.getList().size() - 1;
- PropertyMapListGridRecord record = new PropertyMapListGridRecord(workingMap, index,
- memberDefinitions);
- summaryTable.addData(record);
- } catch (Exception e) {
- e.printStackTrace();
+ if (!mapReadOnly) {
+ if (!childForm.validate()) {
+ okButton.disable();
+ return;
}
- } else {
- try {
- mergePropertyMap(workingMap, map, memberDefinitions);
- existingRecord.refresh();
- summaryTable.updateData(existingRecord);
- } catch (Exception e) {
- e.printStackTrace();
+ if (newRow) {
+ try {
+ list.add(workingMap);
+ int index = list.getList().size() - 1;
+ PropertyMapListGridRecord record = new PropertyMapListGridRecord(workingMap, index,
+ memberDefinitions);
+ summaryTable.addData(record);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ } else {
+ try {
+ mergePropertyMap(workingMap, map, memberDefinitions);
+ existingRecord.refresh();
+ summaryTable.updateData(existingRecord);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
+ firePropertyChangedEvent(list, null, true);
+ summaryTable.redraw();
}
- firePropertyChangedEvent(list, null, true);
- summaryTable.redraw();
layout.destroy();
popup.destroy();
@@ -1608,20 +1603,21 @@ public class ConfigurationEditor extends LocatableVLayout {
okButton.setDisabled(false);
}
});
+ buttonBar.addMember(okButton);
- final IButton cancelButton = new LocatableIButton(buttonBar.extendLocatorId("Cancel"), MSG.common_button_cancel());
- cancelButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
- layout.destroy();
- popup.destroy();
- }
- });
+ if (!mapReadOnly) {
+ final IButton cancelButton = new LocatableIButton(buttonBar.extendLocatorId("Cancel"), MSG.common_button_cancel());
+ cancelButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ layout.destroy();
+ popup.destroy();
+ }
+ });
+ buttonBar.addMember(cancelButton);
+ }
- buttonBar.setMembers(okButton, cancelButton);
layout.addMember(buttonBar);
-
popup.addItem(layout);
-
popup.show();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/configuration/TestConfigurationFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/configuration/TestConfigurationFactory.java
index 08c94d7..a080f13 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/configuration/TestConfigurationFactory.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/configuration/TestConfigurationFactory.java
@@ -226,7 +226,7 @@ public abstract class TestConfigurationFactory {
string2Prop.setErrorMessage("illegal value!");
configuration.put(string2Prop);
configuration.put(new PropertySimple("LongString", "blah blah blah\nblah blah blah"));
- configuration.put(new PropertySimple("Password", null));
+ configuration.put(new PropertySimple("Password", "ou812"));
configuration.put(new PropertySimple("Boolean", false));
configuration.put(new PropertySimple("Integer", 666));
configuration.put(new PropertySimple("Float", Math.PI));
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 df17ca8..8317263 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
@@ -1332,7 +1332,8 @@ view_configEdit_addItem = Add Item to List
view_configEdit_confirm_1 = Are you sure you want to delete the selected properties from the set?
view_configEdit_confirm_2 = Are you sure you want to delete this row?
view_configEdit_confirm_3 = Are you sure you want to delete the [{0}] selected [{1}]?
-view_configEdit_editRow = Edit Configuration Row
+view_configEdit_viewRow = View Row
+view_configEdit_editRow = Edit Row
view_configEdit_enterPropName = Enter the name of the property to be added.
view_configEdit_error_1 = Configuration is not supported by this Resource.
view_configEdit_error_2 = Connection settings are not supported by this Resource.
commit c6af7b79622870ece640027f06c0f1a40ee30f8e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Mar 25 16:03:02 2011 -0400
BZ 675153 - fix confirm message
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
index 9958d0c..c113008 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
@@ -144,7 +144,8 @@ public class ConditionsEditor extends LocatableVLayout {
});
table.addTableAction(this.extendLocatorId("delete"), MSG.common_button_delete(), MSG
- .view_alert_definitions_delete_confirm(), new AbstractTableAction(TableActionEnablement.ANY) {
+ .view_alert_definition_condition_editor_delete_confirm(), new AbstractTableAction(
+ TableActionEnablement.ANY) {
public void executeAction(ListGridRecord[] selection, Object actionValue) {
for (ListGridRecord record : selection) {
AlertCondition cond = getDataSource().copyValues(record);
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 b8ce183..df17ca8 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
@@ -991,6 +991,7 @@ view_alert_definition_condition_editor_event_regex_tooltip = If specified, this
view_alert_definition_condition_editor_common_min = Minimum
view_alert_definition_condition_editor_common_avg = Average
view_alert_definition_condition_editor_common_max = Maximum
+view_alert_definition_condition_editor_delete_confirm = Delete the selected alert condition(s)?
view_alert_definition_notification_editor_title_add = Add Notification
view_alert_definition_notification_editor_title_edit = Edit Notification
view_alert_definition_notification_editor_sender = Notification Sender
commit d0bfc008ba20e4128377901b743d5680ff7f1bf3
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Mar 25 14:58:58 2011 -0400
misc minor
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
index c68da84..9765188 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
@@ -1267,12 +1267,9 @@ public class ConfigurationEditor extends LocatableVLayout {
FormItem valueItem = null;
boolean propertyIsReadOnly = isReadOnly(propertyDefinitionSimple, propertySimple);
-
if (propertyIsReadOnly) {
valueItem = new StaticTextItem();
} else {
-
-
List<PropertyDefinitionEnumeration> enumeratedValues = propertyDefinitionSimple.getEnumeratedValues();
if (enumeratedValues != null && !enumeratedValues.isEmpty()) {
LinkedHashMap<String, String> valueOptions = new LinkedHashMap<String, String>();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
index 80d6269..4c4a29f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
@@ -284,7 +284,6 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
setAllItems.add(canvasItem);
masterValueItem.addChangedHandler(new ChangedHandler() {
- @Override
public void onChanged(ChangedEvent changedEvent) {
applyButton.enable();
applyButton.focus();
@@ -292,7 +291,6 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
});
masterUnsetItem.addChangedHandler(new ChangedHandler() {
- @Override
public void onChanged(ChangedEvent changedEvent) {
applyButton.enable();
applyButton.focus();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
index 2ce842f..8713ecc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/WizardView.java
@@ -217,6 +217,7 @@ public class WizardView extends LocatableVLayout {
// a valid step, continue
currentStep = stepIndex;
+ // TODO: i18n
stepLabel.setContents("Step " + (stepIndex + 1) + " of " + wizardSteps.size());
stepLabel.setWrap(false);
commit 5e63bfc1dd1b13a34196b011f1820b0d93b1d99d
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Mar 25 14:58:36 2011 -0400
support plugin JARs whose MANIFEST.MF is not the 2nd entry of the JAR (fix for https://bugzilla.redhat.com/show_bug.cgi?id=682116)
diff --git a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/descriptor/PluginTransformer.java b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/descriptor/PluginTransformer.java
index ecaa80b..fbefc1d 100644
--- a/modules/core/client-api/src/main/java/org/rhq/core/clientapi/descriptor/PluginTransformer.java
+++ b/modules/core/client-api/src/main/java/org/rhq/core/clientapi/descriptor/PluginTransformer.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2010 Red Hat, Inc.
+ * Copyright (C) 2005-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -22,6 +22,8 @@
*/
package org.rhq.core.clientapi.descriptor;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.plugin.Plugin;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.clientapi.descriptor.plugin.Help;
@@ -29,6 +31,8 @@ import org.rhq.core.util.MessageDigestGenerator;
import java.net.URL;
import java.io.IOException;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import java.util.jar.Manifest;
import java.util.jar.Attributes;
@@ -38,6 +42,8 @@ import java.util.jar.Attributes;
*/
public class PluginTransformer {
+ private static final Log LOG = LogFactory.getLog(PluginTransformer.class);
+
/**
* Takes the given plugin descriptor and plugin JAR file URL and converts them into a
* {@link org.rhq.core.domain.plugin.Plugin} object. This method does not set the <code>content</code> property
@@ -112,8 +118,24 @@ public class PluginTransformer {
private String getVersionFromPluginJarManifest(URL pluginJarUrl) throws IOException {
JarInputStream jarInputStream = new JarInputStream(pluginJarUrl.openStream());
- jarInputStream.close();
Manifest manifest = jarInputStream.getManifest();
+ if (manifest == null) {
+ // BZ 682116 (ips, 03/25/11): The manifest file is not in the standard place as the 2nd entry of the JAR,
+ // but we want to be flexible and support JARs that have a manifest file somewhere else, so scan the entire
+ // JAR for one.
+ JarEntry jarEntry;
+ while((jarEntry = jarInputStream.getNextJarEntry()) != null) {
+ if (JarFile.MANIFEST_NAME.equalsIgnoreCase(jarEntry.getName())) {
+ manifest = new Manifest(jarInputStream);
+ break;
+ }
+ }
+ }
+ try {
+ jarInputStream.close();
+ } catch (IOException e) {
+ LOG.error("Failed to close plugin jar input stream for plugin jar [" + pluginJarUrl + "].", e);
+ }
if (manifest != null) {
Attributes attributes = manifest.getMainAttributes();
return attributes.getValue(Attributes.Name.IMPLEMENTATION_VERSION);
@@ -121,4 +143,5 @@ public class PluginTransformer {
return null;
}
}
+
}
commit cc672ab2ab3839dde8ce9672b8703cb54ea0ed1e
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Mar 25 11:24:07 2011 -0400
ResourceGroupTree navigation work
- fix various issues with tree select and context menu nav
- some refactoring for clarity
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/CustomResourceGroupTreeGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/CustomResourceGroupTreeGrid.java
index 5e4ff6f..349c5e7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/CustomResourceGroupTreeGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/CustomResourceGroupTreeGrid.java
@@ -22,7 +22,6 @@ import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.resource.group.ClusterKey;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
@@ -48,19 +47,15 @@ public class CustomResourceGroupTreeGrid extends LocatableTreeGrid {
return node.getIcon();
}
- // if this node is associated with a resource type AND a cluster key, it is a cluster node
- // if this node is associated only with a resource type, it is a auto type group node.
- // if this node is not associated with either a resource type or cluster key, it is a subcategory node (which uses the default icon)
- ResourceType resourceType = node.getResourceType();
- if (resourceType != null) {
- ClusterKey clusterKey = node.getClusterKey();
- if (clusterKey != null) {
- String icon = ImageManager.getClusteredResourceIcon(resourceType.getCategory());
- return icon;
- } else {
- boolean open = getTree().isOpen((TreeNode) record);
- return "resources/folder_group_" + (open ? "opened" : "closed") + ".png";
- }
+ if (node.isAutoClusterNode()) {
+ ResourceType resourceType = node.getResourceType();
+ String icon = ImageManager.getClusteredResourceIcon(resourceType.getCategory());
+ return icon;
+
+ } else if (node.isCompatibleGroupTopNode() || node.isAutoGroupNode()) {
+ boolean open = getTree().isOpen((TreeNode) record);
+ return "resources/folder_group_" + (open ? "opened" : "closed") + ".png";
+
}
// use the default image - which is typically for subcategory nodes
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeContextMenu.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeContextMenu.java
index 27cf7d6..7ad3a74 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeContextMenu.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeContextMenu.java
@@ -43,8 +43,8 @@ public class ResourceGroupTreeContextMenu extends ResourceGroupContextMenu {
public void showContextMenu(ResourceGroupEnhancedTreeNode node) {
- final ClusterKey clusterKey = (ClusterKey) node.getAttributeAsObject("key");
- if (clusterKey != null) {
+ if (node.isAutoClusterNode()) {
+ final ClusterKey clusterKey = (ClusterKey) node.getAttributeAsObject("key");
GWTServiceLookup.getClusterService().createAutoClusterBackingGroup(clusterKey, true,
new AsyncCallback<ResourceGroup>() {
@Override
@@ -58,7 +58,8 @@ public class ResourceGroupTreeContextMenu extends ResourceGroupContextMenu {
showContextMenu(result);
}
});
- } else {
+
+ } else if (node.isCompatibleGroupTopNode()) {
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.addFilterId(Integer.parseInt(node.getAttribute("id")));
GWTServiceLookup.getResourceGroupService().findResourceGroupsByCriteria(criteria,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java
index d3f4fbd..04fbfbd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java
@@ -93,17 +93,21 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
private static final String FAKE_ROOT_ID = "__fakeRoot__"; // id of the parent node of our real root node
private TreeGrid treeGrid;
-
private ViewId currentViewId;
- private int rootGroupId;
- private int selectedGroupId;
- private String selectedNodeId;
-
+ private Map<Integer, ResourceType> typeMap;
private ResourceGroupTreeContextMenu contextMenu;
+ // the root (top of tree) compat or mixed group
private ResourceGroup rootResourceGroup;
- private Map<Integer, ResourceType> typeMap;
- private ResourceGroup selectedGroup;
+
+ // the root (top of tree) compat or mixed group id (may bet set prior to rootResourceGroup fetch)
+ private int rootGroupId;
+
+ // the currently selected tree node
+ private String currentNodeId;
+
+ // the currently selected group backing the tree node
+ private ResourceGroup currentGroup;
private Comparator<ResourceGroupEnhancedTreeNode> treeNodeComparator = new Comparator<ResourceGroupEnhancedTreeNode>() {
@Override
@@ -164,76 +168,93 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
}
});
- addMember(this.treeGrid);
-
contextMenu = new ResourceGroupTreeContextMenu(extendLocatorId("contextMenu"));
treeGrid.setContextMenu(contextMenu);
+ treeGrid.addNodeContextClickHandler(new NodeContextClickHandler() {
+ public void onNodeContextClick(final NodeContextClickEvent event) {
+ // stop the browser right-click menu
+ event.cancel();
+
+ // don't select the node on a right click, since we're not navigating to it, and
+ // re-select the current node if necessary
+ ResourceGroupEnhancedTreeNode contextNode = (ResourceGroupEnhancedTreeNode) event.getNode();
+
+ if (null != currentNodeId) {
+ TreeNode currentNode = treeGrid.getTree().findById(currentNodeId);
+ if (!contextNode.equals(currentNode)) {
+ treeGrid.deselectRecord(contextNode);
+ treeGrid.selectRecord(currentNode);
+ }
+ }
+
+ // only show the context menu for cluster nodes and our top root node
+ if (contextNode.isCompatibleGroupTopNode() || contextNode.isAutoClusterNode()) {
+ contextMenu.showContextMenu(contextNode);
+ }
+ }
+ });
+
treeGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
- @Override
+
public void onSelectionChanged(SelectionEvent selectionEvent) {
if (!selectionEvent.isRightButtonDown() && selectionEvent.getState()) {
- selectedNodeId = null; // if user selected a valid node, we'll set this later
- ResourceGroupEnhancedTreeNode selectedNode = (ResourceGroupEnhancedTreeNode) selectionEvent
- .getRecord();
- com.allen_sauer.gwt.log.client.Log.info("Node selected in tree: " + selectedNode);
-
- ResourceType type = selectedNode.getResourceType();
- ClusterKey key = selectedNode.getClusterKey();
- if (type != null) {
- if (key != null) {
- // the user selected a cluster node - let's switch to that cluster group view
- com.allen_sauer.gwt.log.client.Log.debug("Selecting cluster group [" + key + "]...");
- selectedNodeId = selectedNode.getID();
- selectClusterGroup(key);
+
+ ResourceGroupEnhancedTreeNode newNode = (ResourceGroupEnhancedTreeNode) selectionEvent.getRecord();
+ TreeNode currentNode = (null != currentNodeId) ? treeGrid.getTree().findById(currentNodeId) : null;
+
+ // if re-selecting the current node just return, otherwise deselect the currently selected node
+ if (null != currentNode) {
+ if (newNode.equals(currentNode)) {
+ return;
} else {
- if (selectedNode.getParentID().equals(FAKE_ROOT_ID)) {
- // the user selected the top group node
- selectedNodeId = selectedNode.getID();
- String groupId = selectedNodeId;
- com.allen_sauer.gwt.log.client.Log.debug("Selecting group [" + groupId + "]...");
- String viewPath = LinkManager.getResourceGroupLink(Integer.parseInt(groupId));
- CoreGUI.goToView(viewPath, true);
- } else {
- // the user selected a auto type group node; we have got nothing to show, so cancel the selection of this node
- treeGrid.deselectRecord(selectedNode);
- }
+ treeGrid.deselectRecord(currentNode);
}
- } else {
- // the user selected a subcategory; we have got nothing to show, so cancel the selection of this node
- treeGrid.deselectRecord(selectedNode);
}
- }
- return;
- }
- });
- treeGrid.addNodeContextClickHandler(new NodeContextClickHandler() {
- public void onNodeContextClick(final NodeContextClickEvent event) {
- // stop the browser right-click menu
- event.cancel();
+ com.allen_sauer.gwt.log.client.Log.debug("Node selected in tree: " + newNode);
- // don't select the node on a right click, since we're not navigating to it
- ResourceGroupEnhancedTreeNode node = (ResourceGroupEnhancedTreeNode) event.getNode();
- treeGrid.deselectRecord(node);
- if (null != selectedNodeId) {
- treeGrid.selectRecord(treeGrid.getTree().findById(selectedNodeId));
- }
+ if (newNode.isCompatibleGroupTopNode()) {
+ currentNodeId = newNode.getID();
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting compatible group [" + currentNodeId
+ + "]...");
+ String viewPath = LinkManager.getResourceGroupLink(Integer.parseInt(currentNodeId));
+ String currentViewPath = History.getToken();
+ if (!currentViewPath.startsWith(viewPath.substring(1))) {
+ CoreGUI.goToView(viewPath, true);
+ } else {
+ // this should not be necessary but for otherwise the top node does not always show selected
+ treeGrid.markForRedraw();
+ }
- // only show the context menu for cluster nodes and our top root node
- ResourceType type = node.getResourceType();
- ClusterKey key = node.getClusterKey();
- if (type != null && (key != null || node.getParentID().equals(FAKE_ROOT_ID))) {
- contextMenu.showContextMenu(node);
+ } else if (newNode.isAutoClusterNode()) {
+ ClusterKey key = newNode.getClusterKey();
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting autocluster group [" + key + "]...");
+ currentNodeId = newNode.getID();
+ // the user selected a cluster node - let's switch to that cluster group view
+ selectClusterGroup(key);
+
+ } else if (newNode.isMixedGroupTopNode()) {
+ currentNodeId = newNode.getID();
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting mixed group [" + currentNodeId + "]...");
+
+ } else {
+ // a subcategory node, deselect and reselect the current node
+ treeGrid.deselectRecord(newNode);
+ if (null != currentNode) {
+ treeGrid.selectRecord(currentNode);
+ }
+ }
}
+
+ return;
}
});
+ addMember(this.treeGrid);
}
public void setSelectedGroup(final int groupId, boolean isAutoCluster) {
- this.selectedGroupId = groupId;
-
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.addFilterId(groupId);
criteria.addFilterVisible(Boolean.valueOf(!isAutoCluster));
@@ -241,16 +262,15 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
GWTServiceLookup.getResourceGroupService().findResourceGroupsByCriteria(criteria,
new AsyncCallback<PageList<ResourceGroup>>() {
- @Override
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
MSG.view_tree_common_loadFailed_group(String.valueOf(groupId)), caught);
}
- @Override
public void onSuccess(PageList<ResourceGroup> result) {
ResourceGroup group = result.get(0);
- ResourceGroupTreeView.this.selectedGroup = group;
+ ResourceGroupTreeView.this.currentGroup = group;
GroupCategory groupCategory = group.getGroupCategory();
switch (groupCategory) {
@@ -271,8 +291,9 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
Tree tree = new Tree();
tree.setRoot(fakeRoot);
treeGrid.setData(tree);
- treeGrid.markForRedraw();
+ treeGrid.selectRecord(rootNode);
break;
+
case COMPATIBLE:
if (group.getClusterResourceGroup() == null) {
// This is a straight up compatible group.
@@ -293,14 +314,14 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
// Still looking at the same compat-recursive tree
ResourceGroupEnhancedTreeNode selectedNode;
- if (this.selectedGroup.getClusterKey() != null) {
+ if (this.currentGroup.getClusterKey() != null) {
// a child cluster node leaf was selected
selectedNode = (ResourceGroupEnhancedTreeNode) treeGrid.getTree().find(
- ResourceGroupEnhancedTreeNode.CLUSTER_KEY, this.selectedGroup.getClusterKey());
+ ResourceGroupEnhancedTreeNode.CLUSTER_KEY, this.currentGroup.getClusterKey());
} else {
// the top root node, representing the group itself, was selected
selectedNode = (ResourceGroupEnhancedTreeNode) treeGrid.getTree().findById(
- String.valueOf(this.selectedGroup.getId()));
+ String.valueOf(this.currentGroup.getId()));
}
if (selectedNode != null) {
@@ -331,7 +352,7 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
ResourceTypeRepository.Cache.getInstance().getResourceTypes(typeIds.toArray(new Integer[typeIds.size()]),
EnumSet.of(ResourceTypeRepository.MetadataType.subCategory),
new ResourceTypeRepository.TypesLoadedCallback() {
- @Override
+
public void onTypesLoaded(Map<Integer, ResourceType> types) {
ResourceGroupTreeView.this.typeMap = types;
loadTree(root);
@@ -342,12 +363,11 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
private void selectClusterGroup(ClusterKey key) {
GWTServiceLookup.getClusterService().createAutoClusterBackingGroup(key, true,
new AsyncCallback<ResourceGroup>() {
- @Override
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_createFailed_autoCluster(), caught);
}
- @Override
public void onSuccess(ResourceGroup result) {
renderAutoCluster(result);
}
@@ -387,7 +407,7 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
treeGrid.setData(tree);
treeGrid.getTree().openFolder(rootNode);
- treeGrid.markForRedraw();
+ treeGrid.selectRecord(rootNode);
}
public void loadTree(ResourceGroupEnhancedTreeNode parentNode, ClusterFlyweight parentClusterGroup,
@@ -636,5 +656,29 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
setAttribute(RESOURCE_TYPE, rt);
}
+ public boolean isTopNode() {
+ return getParentID().equals(FAKE_ROOT_ID);
+ }
+
+ public boolean isMixedGroupTopNode() {
+ return isTopNode() && (null == getResourceType());
+ }
+
+ public boolean isCompatibleGroupTopNode() {
+ return isTopNode() && (null != getResourceType()) && (null == getClusterKey());
+ }
+
+ public boolean isAutoGroupNode() {
+ return !isTopNode() && (null != getResourceType()) && (null == getClusterKey());
+ }
+
+ public boolean isAutoClusterNode() {
+ return (null != getResourceType()) && (null != getClusterKey()) && !isTopNode();
+ }
+
+ public boolean isSubCategoryNode() {
+ return (null == getResourceType()) && !isMixedGroupTopNode();
+ }
+
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
index 9870a42..455f414 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java
@@ -115,6 +115,7 @@ public class ResourceTreeView extends LocatableVLayout {
setShowResizeBar(true);
}
+ @Override
public void onInit() {
// TODO (ips): Are we intentionally avoiding calling super.onInit() here? If so, why?
}
@@ -141,6 +142,7 @@ public class ResourceTreeView extends LocatableVLayout {
autoGroupContextMenu = new ResourceGroupContextMenu(extendLocatorId("autoGroupContextMenu"));
treeGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+
public void onSelectionChanged(SelectionEvent selectionEvent) {
if (!selectionEvent.isRightButtonDown() && selectionEvent.getState()) {
ListGridRecord selectedRecord = treeGrid.getSelectedRecord();
@@ -168,6 +170,7 @@ public class ResourceTreeView extends LocatableVLayout {
AutoGroupTreeNode agNode = (AutoGroupTreeNode) selectedRecord;
selectedNodeId = agNode.getID();
getAutoGroupBackingGroup(agNode, new AsyncCallback<ResourceGroup>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_selection(),
caught);
@@ -192,27 +195,35 @@ public class ResourceTreeView extends LocatableVLayout {
// setContextMenu(resourceContextMenu);
treeGrid.addNodeContextClickHandler(new NodeContextClickHandler() {
+
public void onNodeContextClick(final NodeContextClickEvent event) {
// stop the browser right-click menu
event.cancel();
// don't select the node on a right click, since we're not navigating to it
treeGrid.deselectRecord(event.getNode());
+ TreeNode eventNode = event.getNode();
+
+ // re-select the current node if necessary
if (null != selectedNodeId) {
- treeGrid.selectRecord(treeGrid.getTree().findById(selectedNodeId));
+ TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId);
+ if (!eventNode.equals(selectedNode)) {
+ treeGrid.selectRecord(selectedNode);
+ }
}
- if (event.getNode() instanceof AutoGroupTreeNode) {
- showContextMenu((AutoGroupTreeNode) event.getNode());
- } else if (event.getNode() instanceof ResourceTreeNode) {
- if (!((ResourceTreeNode) event.getNode()).isLocked()) {
- showContextMenu((ResourceTreeNode) event.getNode());
+ if (eventNode instanceof AutoGroupTreeNode) {
+ showContextMenu((AutoGroupTreeNode) eventNode);
+ } else if (eventNode instanceof ResourceTreeNode) {
+ if (!((ResourceTreeNode) eventNode).isLocked()) {
+ showContextMenu((ResourceTreeNode) eventNode);
}
}
}
});
treeGrid.addDataArrivedHandler(new DataArrivedHandler() {
+
public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
updateSelection();
}
@@ -236,6 +247,7 @@ public class ResourceTreeView extends LocatableVLayout {
criteria.addFilterAutoGroupParentResourceId(agNode.getParentResource().getId());
criteria.addFilterVisible(false);
resourceGroupService.findResourceGroupsByCriteria(criteria, new AsyncCallback<PageList<ResourceGroup>>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_node(), caught);
}
@@ -315,6 +327,7 @@ public class ResourceTreeView extends LocatableVLayout {
private void showContextMenu(AutoGroupTreeNode agNode) {
getAutoGroupBackingGroup(agNode, new AsyncCallback<ResourceGroup>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_selection(), caught);
}
@@ -334,6 +347,7 @@ public class ResourceTreeView extends LocatableVLayout {
criteria.addFilterId(resourceId);
GWTServiceLookup.getResourceService().findResourceCompositesByCriteria(criteria,
new AsyncCallback<PageList<ResourceComposite>>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getMessageCenter().notify(
new Message(MSG.view_inventory_resource_loadFailed(String.valueOf(resourceId)),
@@ -359,6 +373,7 @@ public class ResourceTreeView extends LocatableVLayout {
ResourceTypeRepository.MetadataType.resourceConfigurationDefinition,
ResourceTypeRepository.MetadataType.measurements),
new ResourceTypeRepository.TypeLoadedCallback() {
+
public void onTypesLoaded(ResourceType type) {
buildResourceContextMenu(resourceComposite, type);
resourceContextMenu.showContextMenu();
@@ -386,6 +401,7 @@ public class ResourceTreeView extends LocatableVLayout {
// plugin config
MenuItem pluginConfiguration = new MenuItem(MSG.view_tabs_common_connectionSettings());
pluginConfiguration.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
CoreGUI.goToView(LinkManager.getResourceTabLink(resource.getId(), "Inventory", "ConnectionSettings"));
}
@@ -400,6 +416,7 @@ public class ResourceTreeView extends LocatableVLayout {
resourceConfiguration.setEnabled(enabled);
if (enabled) {
resourceConfiguration.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
CoreGUI.goToView(LinkManager.getResourceTabLink(resource.getId(), "Configuration", "Current"));
}
@@ -420,6 +437,7 @@ public class ResourceTreeView extends LocatableVLayout {
for (final OperationDefinition operationDefinition : resourceType.getOperationDefinitions()) {
MenuItem operationItem = new MenuItem(operationDefinition.getDisplayName());
operationItem.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
CoreGUI.goToView(LinkManager.getResourceTabLink(resource.getId(),
ResourceDetailView.Tab.OPERATIONS, ResourceDetailView.OperationsSubTab.SCHEDULES)
@@ -445,6 +463,7 @@ public class ResourceTreeView extends LocatableVLayout {
MenuItem createItem = new MenuItem(childType.getName());
createItem.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
ResourceFactoryCreateWizard.showCreateWizard(resource, childType);
}
@@ -470,6 +489,7 @@ public class ResourceTreeView extends LocatableVLayout {
MenuItem importItem = new MenuItem(childType.getName());
importItem.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
ResourceFactoryImportWizard.showImportWizard(resource, childType);
}
@@ -497,6 +517,7 @@ public class ResourceTreeView extends LocatableVLayout {
criteria.addFilterSupportsManualAdd(true);
criteria.fetchParentResourceTypes(true);
rts.findResourceTypesByCriteria(criteria, new AsyncCallback<PageList<ResourceType>>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_contextMenu_loadFailed_manualAddChildren(),
caught);
@@ -508,6 +529,7 @@ public class ResourceTreeView extends LocatableVLayout {
MenuItem item = new MenuItem(type.getName());
item.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent event) {
ResourceFactoryImportWizard.showImportWizard(resource, type);
}
@@ -527,6 +549,7 @@ public class ResourceTreeView extends LocatableVLayout {
DashboardCriteria criteria = new DashboardCriteria();
GWTServiceLookup.getDashboardService().findDashboardsByCriteria(criteria,
new AsyncCallback<PageList<Dashboard>>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_contextMenu_loadFailed_dashboard(),
caught);
@@ -547,6 +570,7 @@ public class ResourceTreeView extends LocatableVLayout {
defSubItem.addItem(addToDBItem);
addToDBItem.addClickHandler(new ClickHandler() {
+
public void onClick(MenuItemClickEvent menuItemClickEvent) {
DashboardPortlet p = new DashboardPortlet(MSG
.view_tree_common_contextMenu_resourceGraph(), ResourceGraphPortlet.KEY, 250);
@@ -559,6 +583,7 @@ public class ResourceTreeView extends LocatableVLayout {
GWTServiceLookup.getDashboardService().storeDashboard(d,
new AsyncCallback<Dashboard>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
MSG.view_tree_common_contextMenu_saveChartToDashboardFailure(),
@@ -651,6 +676,7 @@ public class ResourceTreeView extends LocatableVLayout {
addMember(treeGrid);
treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() {
+
public void execute(DSResponse response, Object rawData, DSRequest request) {
Log.info("Done fetching data for tree.");
updateSelection();
@@ -670,6 +696,7 @@ public class ResourceTreeView extends LocatableVLayout {
ResourceTypeRepository.MetadataType.children,
ResourceTypeRepository.MetadataType.subCategory),
new ResourceTypeRepository.ResourceTypeLoadedCallback() {
+
public void onResourceTypeLoaded(List<Resource> result) {
treeGrid.getTree()
.linkNodes(ResourceTreeDatasource.buildNodes(lineage, lockedData));
@@ -710,6 +737,7 @@ public class ResourceTreeView extends LocatableVLayout {
criteria.addFilterVisible(false);
criteria.fetchResourceType(true);
resourceGroupService.findResourceGroupsByCriteria(criteria, new AsyncCallback<PageList<ResourceGroup>>() {
+
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_node(), caught);
}
@@ -719,12 +747,10 @@ public class ResourceTreeView extends LocatableVLayout {
// load the tree up to the autogroup's parent resource
loadTree(backingGroup.getAutoGroupParentResource().getId(), new AsyncCallback<Void>() {
- @Override
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_tree_common_loadFailed_children(), caught);
}
- @Override
public void onSuccess(Void arg) {
// get the node ID and use it to add a map entry, then call this again to finish up...
selectedNodeId = AutoGroupTreeNode.idOf(backingGroup.getAutoGroupParentResource(),
commit 22f96df0829e252b3c3de748bbddc7a5d7710704
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Mar 25 11:13:55 2011 -0400
Selenium - Make the Login and Registration dialogs locatable.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
index 3a5fa85..865793a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -39,7 +39,6 @@ import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
-import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
@@ -69,6 +68,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
/**
* @author Greg Hinkle
@@ -78,8 +78,8 @@ public class LoginView extends LocatableCanvas {
private static boolean loginShowing = false;
- private Window window;
- private DynamicForm form;
+ private LocatableWindow window;
+ private LocatableDynamicForm form;
private LocatableDynamicForm inputForm;
private SubmitItem loginButton;
@@ -157,7 +157,7 @@ public class LoginView extends LocatableCanvas {
form.setFields(logo, header, new RowSpacerItem(), user, password, loginButton);
- window = new Window();
+ window = new LocatableWindow(extendLocatorId("LoginWindow"));
window.setWidth(400);
window.setHeight(275);
window.setTitle(MSG.common_title_welcome());
@@ -367,7 +367,7 @@ public class LoginView extends LocatableCanvas {
row.addMember(logoutLabel);
column.addMember(row);
- window = new Window();
+ window = new LocatableWindow(extendLocatorId("RegistrationWindow"));
window.setWidth(670);
window.setHeight(330);
window.setTitle(MSG.view_login_registerUser());
commit 12051d6e7026198b07aa7f9e8176488ebfd27986
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Fri Mar 25 01:14:11 2011 -0400
i)number Resource/Group*Portlet refresh/redraw fixes
ii)general cleanup of some porlet classes.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
index ae9069b..2cb7f74 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
@@ -134,16 +134,15 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
criteria.addFilterPriorities(filterPriorities);
}
}
+
PageControl pc = new PageControl();
//result sort order
property = portletConfig.getSimple(Constant.RESULT_SORT_ORDER);
if (property != null) {
String currentSetting = property.getStringValue();
if (currentSetting.trim().isEmpty() || currentSetting.equalsIgnoreCase(PageOrdering.DESC.name())) {
- criteria.addSortCtime(PageOrdering.DESC);
pc.setPrimarySortOrder(PageOrdering.DESC);
} else {
- criteria.addSortCtime(PageOrdering.ASC);
pc.setPrimarySortOrder(PageOrdering.ASC);
}
}
@@ -186,8 +185,8 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
property = portletConfig.getSimple(Constant.RESULT_COUNT);
if (property != null) {
String currentSetting = property.getStringValue();
- if (currentSetting.trim().isEmpty() || currentSetting.equalsIgnoreCase("5")) {
- pc.setPageSize(5);
+ if (currentSetting.trim().isEmpty() || currentSetting.equalsIgnoreCase(Constant.RESULT_COUNT_DEFAULT)) {
+ pc.setPageSize(Integer.valueOf(Constant.RESULT_COUNT_DEFAULT));
} else {
pc.setPageSize(Integer.valueOf(currentSetting));
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
index 740d549..6ac9afe 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
@@ -75,6 +75,7 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
public static final String RESOURCES_SELECTED = MSG.common_label_selected_resources();
public static final String defaultResourceValue = RESOURCES_ALL;
public static final String ID = "id";
+ private boolean currentlyRefreshing = false;
// set on initial configuration, the window for this portlet view.
protected PortletWindow portletWindow;
@@ -269,7 +270,7 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
}
public boolean isRefreshing() {
- return false;
+ return this.currentlyRefreshing;
}
@Override
@@ -320,7 +321,6 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
protected void onInit() {
super.onInit();
initializeUi();
- // getListGrid().setEmptyMessage(MSG.view_portlet_results_empty());
}
@Override
@@ -332,6 +332,12 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
MSG.view_table_matchingRows(String.valueOf(getListGrid().getTotalRows()), String.valueOf(count)));
}
}
+
+ @Override
+ public void redraw() {
+ super.redraw();
+ refresh();//is table so need to call this to reload
+ }
}
/** Bundles a ResourceSelector instance with labeling in Canvas for display.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
index 4d163ab..6ef8a59 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
@@ -215,6 +215,7 @@ public class GroupBundleDeploymentsPortlet extends LocatableVLayout implements C
public void onFailure(Throwable caught) {
Log.debug("Error retrieving installed bundle deployments for group [" + groupId + "]:"
+ caught.getMessage());
+ currentlyLoading = false;
}
@Override
@@ -258,6 +259,7 @@ public class GroupBundleDeploymentsPortlet extends LocatableVLayout implements C
recentBundleDeployContent.addChild(column);
recentBundleDeployContent.markForRedraw();
markForRedraw();
+ currentlyLoading = false;
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
index 3b069c5..b4761e9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
@@ -103,6 +103,8 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
@Override
protected void onInit() {
super.onInit();
+ //disable the refresh timer for this run
+ currentlyLoading = true;
initializeUi();
redraw();
}
@@ -151,7 +153,6 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
}
protected void loadData() {
- currentlyLoading = true;
getRecentEventUpdates();
}
@@ -235,6 +236,7 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
Log
.debug("Error retrieving recent event counts for group [" + groupId + "]:"
+ caught.getMessage());
+ setCurrentlyRefreshing(false);
}
@Override
@@ -288,12 +290,14 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
recentEventsContent.addChild(column);
recentEventsContent.markForRedraw();
markForRedraw();
+ setCurrentlyRefreshing(false);
}
});
}
public void startRefreshCycle() {
refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
+ markForRedraw();
}
@Override
@@ -303,6 +307,7 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
super.onDestroy();
}
+ @Override
public boolean isRefreshing() {
return this.currentlyLoading;
}
@@ -312,4 +317,8 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
super.redraw();
loadData();
}
+
+ protected void setCurrentlyRefreshing(boolean currentlyRefreshing) {
+ this.currentlyLoading = currentlyRefreshing;
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
index 898c04b..d6dbf19 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
@@ -121,6 +121,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
@Override
protected void onInit() {
super.onInit();
+ setRefreshing(true);
initializeUi();
loadData();
}
@@ -274,6 +275,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
public void onFailure(Throwable caught) {
Log.debug("Error retrieving resource group composite for group [" + groupId + "]:"
+ caught.getMessage());
+ setRefreshing(false);
}
@Override
@@ -325,6 +327,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
Log
.debug("Error retrieving recent metrics charting data for group ["
+ groupId + "]:" + caught.getMessage());
+ setRefreshing(false);
}
@Override
@@ -433,6 +436,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
AbstractActivityView.RECENT_MEASUREMENTS_NONE);
column.addMember(row);
}
+ setRefreshing(false);
}
});
}
@@ -442,6 +446,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
LocatableDynamicForm row = AbstractActivityView.createEmptyDisplayRow(recentMeasurementsContent
.extendLocatorId("None"), AbstractActivityView.RECENT_MEASUREMENTS_NONE);
column.addMember(row);
+ setRefreshing(false);
}
}
});
@@ -454,8 +459,12 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
recentMeasurementsContent.markForRedraw();
}
+ @Override
public void startRefreshCycle() {
refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
+ //call out to 3rd party javascript lib
+ BrowserUtility.graphSparkLines();
+ recentMeasurementsContent.markForRedraw();
}
@Override
@@ -465,6 +474,7 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
super.onDestroy();
}
+ @Override
public boolean isRefreshing() {
return this.currentlyLoading;
}
@@ -486,4 +496,8 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
public String getBaseViewPath() {
return baseViewPath;
}
+
+ protected void setRefreshing(boolean currentlyRefreshing) {
+ this.currentlyLoading = currentlyRefreshing;
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
index 265e200..008c34b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
@@ -204,6 +204,7 @@ public class GroupOobsPortlet extends LocatableVLayout implements CustomSettings
public void onFailure(Throwable caught) {
Log.debug("Error retrieving recent out of bound metrics for group [" + groupId + "]:"
+ caught.getMessage());
+ currentlyLoading = false;
}
@Override
@@ -238,12 +239,14 @@ public class GroupOobsPortlet extends LocatableVLayout implements CustomSettings
}
recentOobContent.addChild(column);
recentOobContent.markForRedraw();
+ currentlyLoading = false;
}
});
}
public void startRefreshCycle() {
refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
+ recentOobContent.markForRedraw();
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
index 10031d1..9a9a124 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
@@ -78,6 +78,7 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
public static final String NAME = MSG.view_portlet_defaultName_group_operations();
protected static final String ID = "id";
+ protected boolean currentlyRefreshing = false;
// set on initial configuration, the window for this portlet view.
protected PortletWindow portletWindow;
@@ -126,6 +127,8 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
@Override
protected void onInit() {
super.onInit();
+ //disable the refresh timer for this run
+ currentlyRefreshing = true;
initializeUi();
loadData();
}
@@ -157,6 +160,7 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
public void onFailure(Throwable caught) {
Log.debug("Error retrieving resource group composite for group [" + groupId + "]:"
+ caught.getMessage());
+ currentlyRefreshing = false;
}
@Override
@@ -186,6 +190,7 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
}
recentOperationsContent.addChild(groupOperations);
recentOperationsContent.markForRedraw();
+ currentlyRefreshing = false;
}
});
}
@@ -308,7 +313,7 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
}
public boolean isRefreshing() {
- return false;
+ return currentlyRefreshing;
}
private boolean isAutoGroup() {
@@ -328,6 +333,10 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
super.redraw();
loadData();
}
+
+ protected void setCurrentlyRefreshing(boolean currentlyRefreshing) {
+ this.currentlyRefreshing = currentlyRefreshing;
+ }
}
/** Provide implementation of GroupOperationsHistoryListView using datasource
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
index e58b1da..da5a0ee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
@@ -213,6 +213,7 @@ public class GroupPkgHistoryPortlet extends LocatableVLayout implements CustomSe
public void onFailure(Throwable caught) {
Log.debug("Error retrieving installed package history for group [" + groupId + "]:"
+ caught.getMessage());
+ currentlyLoading = false;
}
@Override
@@ -255,6 +256,7 @@ public class GroupPkgHistoryPortlet extends LocatableVLayout implements CustomSe
recentPkgHistoryContent.addChild(column);
recentPkgHistoryContent.markForRedraw();
markForRedraw();
+ currentlyLoading = false;
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceAlertsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceAlertsPortlet.java
index c79b9f9..ff3a9939 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceAlertsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceAlertsPortlet.java
@@ -20,16 +20,11 @@ package org.rhq.enterprise.gui.coregui.client.dashboard.portlets.resource;
import com.google.gwt.user.client.History;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.events.DoubleClickEvent;
-import com.smartgwt.client.widgets.events.DoubleClickHandler;
-import com.smartgwt.client.widgets.grid.ListGrid;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.Messages;
import org.rhq.enterprise.gui.coregui.client.alert.AlertPortletConfigurationDataSource;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
@@ -139,10 +134,6 @@ public class ResourceAlertsPortlet extends GroupAlertsPortlet {
}
- public AlertPortletConfigurationDataSource getDataSource() {
- return dataSource;
- }
-
public static final class Factory implements PortletViewFactory {
public static PortletViewFactory INSTANCE = new Factory();
@@ -151,34 +142,6 @@ public class ResourceAlertsPortlet extends GroupAlertsPortlet {
return new ResourceAlertsPortlet(locatorId);
}
}
-
- @Override
- protected void configureTable() {
- super.configureTable();
-
- setListGridDoubleClickHandler(new DoubleClickHandler() {
- @Override
- public void onDoubleClick(DoubleClickEvent event) {
- ListGrid listGrid = (ListGrid) event.getSource();
- ListGridRecord[] selectedRows = listGrid.getSelection();
- if (selectedRows != null && selectedRows.length == 1) {
- Integer recordId = getId(selectedRows[0]);
- Integer resourceId = selectedRows[0].getAttributeAsInt("resourceId");
- CoreGUI.goToView(LinkManager.getSubsystemAlertHistoryLink(resourceId, recordId));
- }
- }
- });
- }
-
- @Override
- protected void refreshTableInfo() {
- super.refreshTableInfo();
- if (getTableInfo() != null) {
- int count = getListGrid().getSelection().length;
- getTableInfo().setContents(
- MSG.view_table_matchingRows(String.valueOf(getListGrid().getTotalRows()), String.valueOf(count)));
- }
- }
}
/** Bundles a ResourceSelector instance with labeling in Canvas for display.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
index e907ce6..a77796f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceMetricsPortlet.java
@@ -164,6 +164,7 @@ public class ResourceMetricsPortlet extends GroupMetricsPortlet {
public void onFailure(Throwable caught) {
Log.debug("Error retrieving resource resource composite for resource [" + resourceId + "]:"
+ caught.getMessage());
+ setRefreshing(false);
}
@Override
@@ -214,6 +215,7 @@ public class ResourceMetricsPortlet extends GroupMetricsPortlet {
Log
.debug("Error retrieving recent metrics charting data for resource ["
+ resourceId + "]:" + caught.getMessage());
+ setRefreshing(false);
}
@Override
@@ -322,11 +324,11 @@ public class ResourceMetricsPortlet extends GroupMetricsPortlet {
AbstractActivityView.RECENT_MEASUREMENTS_NONE);
column.addMember(row);
}
+ setRefreshing(false);
}
});
}
});
- // }
}
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceOperationsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceOperationsPortlet.java
index c584aaa..a0ef80ffba 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceOperationsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/resource/ResourceOperationsPortlet.java
@@ -84,7 +84,7 @@ public class ResourceOperationsPortlet extends GroupOperationsPortlet {
@Override
protected void onInit() {
- // super.onInit();
+ setCurrentlyRefreshing(true);
initializeUi();
loadData();
}
@@ -165,6 +165,7 @@ public class ResourceOperationsPortlet extends GroupOperationsPortlet {
public void onFailure(Throwable caught) {
Log.debug("Error retrieving resource composite for resource [" + resourceId + "]:"
+ caught.getMessage());
+ setCurrentlyRefreshing(false);
}
@Override
@@ -186,6 +187,7 @@ public class ResourceOperationsPortlet extends GroupOperationsPortlet {
recentOperationsContent.addChild(resourceOperations);
recentOperationsContent.markForRedraw();
}
+ setCurrentlyRefreshing(false);
}
});
}
commit e5b698ed50fdd6638999cb6e1ebcb2d63e1a6194
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 15:54:48 2011 -0400
be more fault tolerant of invalid portlets that might be in the DB.
this happens during development as portlets are changed and removed.
could also happen when upgrading to a new version of RHQ that removed a portlet.
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 fa76473..520a948 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
@@ -24,7 +24,11 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.Label;
+
import org.rhq.core.domain.dashboard.DashboardPortlet;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupAlertsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.groups.GroupBundleDeploymentsPortlet;
@@ -53,6 +57,8 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.summary.Inventor
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.summary.TagCloudPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.util.MashupPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.util.MessagePortlet;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
/**
* @author Simeon Pinder
@@ -177,9 +183,31 @@ public class PortletFactory {
PortletViewFactory viewFactory = registeredPortletFactoryMap.get(storedPortlet.getPortletKey());
if (viewFactory == null) {//check group view factory
viewFactory = registeredGroupPortletFactoryMap.get(storedPortlet.getPortletKey());
- }
- if (viewFactory == null) {//check resource view factory
- viewFactory = registeredResourcePortletFactoryMap.get(storedPortlet.getPortletKey());
+
+ if (viewFactory == null) {//check resource view factory
+ viewFactory = registeredResourcePortletFactoryMap.get(storedPortlet.getPortletKey());
+
+ if (viewFactory == null) {
+ Message msg = new Message("Bad portlet: " + storedPortlet, Severity.Warning);
+ CoreGUI.getMessageCenter().notify(msg);
+ class InvalidPortlet extends Label implements Portlet {
+ InvalidPortlet() {
+ super(CoreGUI.getMessages().view_portlet_factory_invalidPortlet());
+ }
+
+ @Override
+ public Canvas getHelpCanvas() {
+ return new Label(getContents());
+ }
+
+ @Override
+ public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) {
+ }
+ }
+ ;
+ return new InvalidPortlet();
+ }
+ }
}
Portlet view = viewFactory.getInstance(locatorId);
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 a149de8..b8ce183 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
@@ -1442,6 +1442,8 @@ view_dashboards_portlets_refresh_success2=Stopping reload for portlets that auto
view_dashboardsManager_error1 = Failed to add new dashboard
view_dashboardsManager_message_title_details = <h1>Welcome to RHQ</h1>\n<p>The RHQ project is an abstraction and plug-in based systems management suite that provides extensible and integrated systems management for multiple products and platforms across a set of core features. The project is designed with layered modules that provide a flexible architecture for deployment. It delivers a core user interface that delivers audited and historical management across an entire enterprise. A Server/Agent architecture provides remote management and plugins implement all specific support for managed products.</p>\n <p>This default dashboard can be edited by clicking the (edit mode) button above.</p>
+view_portlet_factory_invalidPortlet = This is an obsolete portlet that is no longer valid. Please delete it.
+
view_portlet_defaultName_autodiscovery = Discovery Queue
view_portlet_defaultName_favoriteResources = Favorite Resources
view_portlet_defaultName_resourceMetric = Resource Metric Graph
commit c599feb1ee9146f09f14db319efd07a4b7c6acd7
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 15:49:55 2011 -0400
remove the ~, which was our old marker we used to use
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 56b7270..a149de8 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
@@ -1418,7 +1418,7 @@ view_type_typeTreeLoadFailure = Failed to load resource type tree data
# Tabs
view_tabs_invalidSubTab = Invalid subtab: {0}
-view_tabs_invalidTab = Invalid tab: {0}~
+view_tabs_invalidTab = Invalid tab: {0}
# Group Tree
group_tree_partialClusterTooltip = {0} out of {1} group members have a ''{2}'' resource
@@ -1513,7 +1513,7 @@ view_portlet_operations_config_scheduled_enable = Whether to enable scheduled op
view_portlet_operations_config_scheduled_maximum = Maximum number of Scheduled operations to display.
view_portlet_operations_config_completed = completed operations
view_portlet_operations_config_show_last = show Last
-view_portlet_operations_config_show_next = show Next~
+view_portlet_operations_config_show_next = show Next
view_portlet_operations_disabled = (Results currently disabled. Change settings to enable results.
view_portlet_platform_platform_error_1 = Failed to load platform metrics
commit 5ef481fe24f2a468ade1ca50eccce7f1a606916e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 12:00:41 2011 -0400
be able to not specify a width. this isn't used today, but can be in the future - just pass in a negative width
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
index e28dab2..2393132 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
@@ -341,11 +341,20 @@ public abstract class AncestryUtil {
Map<Integer, ResourceType> types = ((MapWrapper) record.getAttributeAsObject(RESOURCE_ANCESTRY_TYPES)).getMap();
Integer resourceTypeId = record.getAttributeAsInt(RESOURCE_TYPE_ID);
ResourceType type = types.get(resourceTypeId);
- width = (width <= 0) ? 500 : width;
- StringBuilder sb = new StringBuilder("<p style='width:");
- sb.append(width);
- sb.append("px'>");
+ // note: if width is negative, we do not explicitly define a width in the HTML, thus enabling auto-resizing.
+ Integer widthObj = null;
+ if (width >= 0) {
+ widthObj = (width == 0) ? Integer.valueOf(500) : Integer.valueOf(width);
+ }
+
+ StringBuilder sb = new StringBuilder("<p");
+ if (widthObj != null) {
+ sb.append(" style='width:");
+ sb.append(widthObj.toString());
+ sb.append("px'");
+ }
+ sb.append(">");
sb.append(getResourceLongName(resourceName, type));
commit 9b0627038c5f77cf610d74acd993b6953e12a68a
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 11:54:47 2011 -0400
BZ 609135 - fix the favorites button so its context menu is popped up
at the bottom of the button, like a typical context menu.
also get the ancestry items to be auto-sized
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
index ba5e649..fd45110 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
@@ -70,8 +70,11 @@ public class FavoritesButton extends LocatableIMenuButton {
final Menu favoriteGroupsMenu = new Menu();
final Menu recentlyViewedMenu = new Menu();
favoriteResourcesMenu.setSubmenuDirection("left");
+ favoriteResourcesMenu.setAutoWidth();
favoriteGroupsMenu.setSubmenuDirection("left");
+ favoriteGroupsMenu.setAutoWidth();
recentlyViewedMenu.setSubmenuDirection("left");
+ recentlyViewedMenu.setAutoWidth();
MenuItem favoriteResourcesMenuItem = new MenuItem(MSG.favorites_resources(), "Favorite_Resource_16.png");
favoriteResourcesMenuItem.setSubmenu(favoriteResourcesMenu);
favoriteResourcesMenu.setEmptyMessage(MSG.common_val_none());
@@ -102,7 +105,7 @@ public class FavoritesButton extends LocatableIMenuButton {
// if we have no menu items at all, then show the empty menu now
if (favoriteGroupIds.isEmpty() && favoriteResourceIds.isEmpty() && recentResourceIds.isEmpty()
&& recentGroupIds.isEmpty()) {
- favoritesMenu.showContextMenu();
+ favoritesMenu.showNextTo(FavoritesButton.this, "bottom");
return;
}
@@ -149,7 +152,7 @@ public class FavoritesButton extends LocatableIMenuButton {
buildRecentlyViewedMenu(favorites, recentlyViewedMenu, recentResourceIds,
recentGroupIds, typesWrapper);
- favoritesMenu.showContextMenu();
+ favoritesMenu.showNextTo(FavoritesButton.this, "bottom");
}
});
}
@@ -185,9 +188,11 @@ public class FavoritesButton extends LocatableIMenuButton {
item.setAttribute(AncestryUtil.RESOURCE_TYPE_ID, resource.getResourceType().getId());
item.setAttribute(AncestryUtil.RESOURCE_ANCESTRY_TYPES, typesWrapper);
Menu ancestryMenu = new Menu();
- MenuItem ancestryItem = new MenuItem(AncestryUtil.getAncestryHoverHTML(item, 0));
+ MenuItem ancestryItem = new MenuItem(AncestryUtil.getAncestryHoverHTML(item, -1));
ancestryItem.setEnabled(false);
ancestryMenu.setItems(ancestryItem);
+ ancestryMenu.setSubmenuDirection("left");
+ ancestryMenu.setAutoWidth();
item.setSubmenu(ancestryMenu);
item.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {
@@ -260,9 +265,11 @@ public class FavoritesButton extends LocatableIMenuButton {
item.setAttribute(AncestryUtil.RESOURCE_ANCESTRY_TYPES, typesWrapper);
Menu ancestryMenu = new Menu();
- MenuItem ancestryItem = new MenuItem(AncestryUtil.getAncestryHoverHTML(item, 0));
+ MenuItem ancestryItem = new MenuItem(AncestryUtil.getAncestryHoverHTML(item, -1));
ancestryItem.setEnabled(false);
ancestryMenu.setItems(ancestryItem);
+ ancestryMenu.setSubmenuDirection("left");
+ ancestryMenu.setAutoWidth();
item.setSubmenu(ancestryMenu);
item.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
index 20d9937..e28dab2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
@@ -259,12 +259,20 @@ public abstract class AncestryUtil {
ResourceType type = types.get(resourceTypeId);
String resourceLongName = getResourceLongName(resourceName, type);
- width = (width <= 0) ? 500 : width;
+ // note: if width is negative, we do not explicitly define a width in the HTML, thus enabling auto-resizing.
+ Integer widthObj = null;
+ if (width >= 0) {
+ widthObj = (width == 0) ? Integer.valueOf(500) : Integer.valueOf(width);
+ }
// decode ancestry
- StringBuilder sb = new StringBuilder("<p style='width:");
- sb.append(width);
- sb.append("px'>");
+ StringBuilder sb = new StringBuilder("<p");
+ if (widthObj != null) {
+ sb.append(" style='width:");
+ sb.append(widthObj.toString());
+ sb.append("px'");
+ }
+ sb.append(">");
String title = (null != ancestry) ? TITLE_ANCESTRY : TITLE_PLATFORM;
sb.append(title);
sb.append(resourceLongName);
commit 0fb1eb897c78c2fb00941619699a837351399f35
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 10:53:21 2011 -0400
forgot these two classes as part of the datasource refactoring to have separate getFetchCriteria method
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
index efb48d4..ae9069b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
@@ -81,8 +81,34 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
/** Override the executeFetch for AlertPortlet to allow specifying smaller than total
* result displays.
*/
- protected void executeFetch(final DSRequest request, final DSResponse response) {
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, final AlertCriteria criteria) {
final long start = System.currentTimeMillis();
+
+ getAlertService().findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() {
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_alerts_loadFailed(), caught);
+ response.setStatus(RPCResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onSuccess(PageList<Alert> result) {
+ long fetchTime = System.currentTimeMillis() - start;
+ Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
+ if (entityContext.type != EntityContext.Type.Resource) {
+ dataRetrieved(result, response, request);
+ } else {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+ }
+ });
+ }
+
+ @Override
+ protected AlertCriteria getFetchCriteria(DSRequest request) {
AlertCriteria criteria = new AlertCriteria();
//initialize to only five for quick queries.
criteria.setPageControl(new PageControl(0, Integer
@@ -176,27 +202,7 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
}
criteria.fetchAlertDefinition(true);
criteria.fetchRecoveryAlertDefinition(true);
-
- getAlertService().findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() {
-
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_alerts_loadFailed(), caught);
- response.setStatus(RPCResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
-
- public void onSuccess(PageList<Alert> result) {
- long fetchTime = System.currentTimeMillis() - start;
- Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
- if (entityContext.type != EntityContext.Type.Resource) {
- dataRetrieved(result, response, request);
- } else {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
- }
- });
+ return criteria;
}
public String getAlertResourcesToUse() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java
index f80a435..a2d0aba 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java
@@ -35,11 +35,8 @@ public class AlertPortletDataSource extends AlertDataSource {
this.portlet = recentAlertsPortlet;
}
- /** Override the executeFetch for AlertPortlet to allow specifying smaller than total
- * result displays.
- */
- protected void executeFetch(final DSRequest request, final DSResponse response) {
- final long start = System.currentTimeMillis();
+ @Override
+ protected AlertCriteria getFetchCriteria(DSRequest request) {
//retrieve previous settings from portlet config
if ((portlet != null) && (this.portlet instanceof DashboardPortlet)) {
//must check for whether portlet config
@@ -86,6 +83,14 @@ public class AlertPortletDataSource extends AlertDataSource {
criteria.addFilterPriorities(AlertPriority.getByLegacyIndex(getAlertPriorityIndex()));
}
+ return criteria;
+ }
+
+ /** Override the executeFetch for AlertPortlet to allow specifying smaller than total
+ * result displays.
+ */
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, final AlertCriteria criteria) {
getAlertService().findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() {
public void onFailure(Throwable caught) {
commit 771b04e9238e84bb9f269a552b1af837ee33ad85
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Thu Mar 24 15:13:50 2011 +0100
BZ 689833 - fixing the discovery regression. The original fix for this bug caused the discovery to be unable to determine the name to use for the localhost entry.
diff --git a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
index 6b9e686..873d5b8 100644
--- a/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
+++ b/modules/plugins/apache/src/main/java/org/rhq/plugins/apache/util/HttpdAddressUtility.java
@@ -369,7 +369,8 @@ public enum HttpdAddressUtility {
}
if (address.host == null || address.isHostDefault() || address.isHostWildcard()) {
- address = getLocalhost(address.port);
+ Address localhost = getLocalhost(address.port);
+ address.host = localhost.host;
}
updateWithServerName(address, ag);
commit f1560f9c48866f34949566ce368e0288d3d72757
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Thu Mar 24 00:31:35 2011 -0400
i)fix for default portlet list for mixed groups
ii)fix for relativeDuration display
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
index 5396bc0..efb48d4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletConfigurationDataSource.java
@@ -87,6 +87,7 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
//initialize to only five for quick queries.
criteria.setPageControl(new PageControl(0, Integer
.valueOf(PortletConfigurationEditorComponent.Constant.RESULT_COUNT_DEFAULT)));
+
//retrieve previous settings from portlet config
if ((portlet != null) && (this.portlet instanceof DashboardPortlet)) {
Configuration portletConfig = configuration;
@@ -160,10 +161,8 @@ public class AlertPortletConfigurationDataSource extends AlertDataSource {
if (property != null) {
String currentSetting = property.getStringValue();
if (currentSetting.trim().isEmpty() || currentSetting.equalsIgnoreCase("5")) {
- PageControl pageControl = new PageControl(0, 5);
pc.setPageSize(5);
} else {
- PageControl pageControl = new PageControl(0, Integer.valueOf(currentSetting));
pc.setPageSize(Integer.valueOf(currentSetting));
}
}
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 e8ee80c..4c19ac1 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
@@ -515,9 +515,14 @@ public class DashboardView extends LocatableVLayout {
//filter out portlets not relevent for facets
Set<ResourceTypeFacet> facets = composite.getResourceFacets().getFacets();
GroupCategory groupCategory = composite.getResourceGroup().getGroupCategory();
- // ResourceGroup group = composite.getResourceGroup();
- //compatible if not a compatible group may need to do some pruning.
+ //if not a compatible group may need to do some pruning.
if (groupCategory != GroupCategory.COMPATIBLE) {
+ groupKeyNameMap.remove(GroupOperationsPortlet.KEY);
+ groupKeyNameMap.remove(GroupMetricsPortlet.KEY);
+ groupKeyNameMap.remove(GroupOobsPortlet.KEY);
+ groupKeyNameMap.remove(GroupPkgHistoryPortlet.KEY);
+ } else {
+ //for compatible may still need to do some pruning.
if (!facets.isEmpty()) {
//Operations related portlets(Config,PkgHistory)
if (!facets.contains(ResourceTypeFacet.OPERATION)) {
@@ -533,12 +538,8 @@ public class DashboardView extends LocatableVLayout {
groupKeyNameMap.remove(GroupPkgHistoryPortlet.KEY);
}
}
- // //EVENT related portlets
- // if (!facets.contains(ResourceTypeFacet.EVENT)) {
- // groupKeyNameMap.remove(GroupEventsPortlet.KEY);
- // }
-
}
+
}
return groupKeyNameMap;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
index 1679e3f..803df4c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/GwtRelativeDurationConverter.java
@@ -32,13 +32,15 @@ public class GwtRelativeDurationConverter {
public static TimeZone tz = null;
public static String format(long eventMillis) {
- int dayOfYearToday = Integer.parseInt(dayFormatter.format(new Date(System.currentTimeMillis())));
+ long now = System.currentTimeMillis();
+ int dayOfYearToday = Integer.parseInt(dayFormatter.format(new Date(now)));
int dayOfYearEvent = Integer.parseInt(dayFormatter.format(new Date(eventMillis)));
String result = null;
- if (dayOfYearEvent == dayOfYearToday) {
+ //add additional check to fix when dayOfYear and dayOfYearToday is same but month apart.
+ if ((dayOfYearEvent == dayOfYearToday) & ((now - eventMillis) < MILLIS_IN_DAY)) {
// <time>
result = formatter.format(new Date(eventMillis));
- } else if (dayOfYearEvent == dayOfYearToday - 1) {
+ } else if ((dayOfYearEvent == dayOfYearToday - 1) & ((now - eventMillis) < MILLIS_IN_DAY * 28)) {
// "yesterday" <time>
result = MSG.common_label_yesterday() + ", " + formatter.format(new Date(eventMillis));
} else {
commit 7a2b59a994595f2d2aa7a340b4c2ce4a99651539
Author: Simeon Pinder <spinder(a)redhat.com>
Date: Wed Mar 23 20:56:25 2011 -0400
BZ 689992: adding ability to update start/stop max times for jbossAs5 plugin.
diff --git a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
index 5f7ae4f..f58051e 100644
--- a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
+++ b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerOperationsDelegate.java
@@ -34,7 +34,9 @@ import org.mc4j.ems.connection.EmsConnection;
import org.mc4j.ems.connection.bean.EmsBean;
import org.mc4j.ems.connection.bean.operation.EmsOperation;
import org.mc4j.ems.connection.bean.parameter.EmsParameter;
+
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.operation.OperationResult;
@@ -51,108 +53,105 @@ import org.rhq.core.system.SystemInfo;
* @author Jay Shaughnessy
*/
public class ApplicationServerOperationsDelegate {
- /**
- * max amount of time to wait for server to show as unavailable after
- * executing stop - in milliseconds
- */
- private static final long STOP_WAIT_MAX = 1000L * 150; // 2.5 minutes
-
- /**
- * amount of time to wait between availability checks when performing a stop
- * - in milliseconds
- */
- private static final long STOP_WAIT_INTERVAL = 1000L * 5; // 5 seconds
-
- /**
- * amount of time to wait for stop to complete after the loop that checks
- * for DOWN availability terminates - in milliseconds
- */
- private static final long STOP_WAIT_FINAL = 1000L * 30; // 30 seconds
-
- /** max amount of time to wait for start to complete - in milliseconds */
- private static final long START_WAIT_MAX = 1000L * 300; // 5 minutes
-
- /**
- * amount of time to wait between availability checks when performing a
- * start - in milliseconds
- */
- private static final long START_WAIT_INTERVAL = 1000L * 5; // 5 seconds
-
- private final Log log = LogFactory
- .getLog(ApplicationServerOperationsDelegate.class);
-
- private static final String SEPARATOR = "\n-----------------------\n";
-
- static final String DEFAULT_START_SCRIPT = "bin" + File.separator + "run."
- + ((File.separatorChar == '/') ? "sh" : "bat");
- static final String DEFAULT_SHUTDOWN_SCRIPT = "bin" + File.separator
- + "shutdown." + ((File.separatorChar == '/') ? "sh" : "bat");
-
- /**
- * Server component against which the operations are being performed.
- */
- private ApplicationServerComponent serverComponent;
-
- private File configPath;
-
- // Constructors --------------------------------------------
-
- public ApplicationServerOperationsDelegate(
- ApplicationServerComponent serverComponent) {
- this.serverComponent = serverComponent;
- }
-
- // Public --------------------------------------------
-
- /**
- * Performs the specified operation. The result of the operation will be
- * indicated in the return. If there is an error, an
- * <code>RuntimeException</code> will be thrown.
- *
- * @param operation
- * the operation to perform
- * @param parameters
- * parameters to the operation call
- *
- * @return if successful, the result object will contain a success message
- *
- * @throws RuntimeException
- * if any errors occur while trying to perform the operation
- */
- public OperationResult invoke(
- ApplicationServerSupportedOperations operation,
- Configuration parameters) throws InterruptedException {
- OperationResult result = null;
-
- switch (operation) {
- case START: {
- result = start();
- break;
- }
- case SHUTDOWN: {
- result = shutDown();
- break;
- }
- case RESTART: {
- result = restart();
- break;
- }
- }
-
- return result;
- }
-
- // Private --------------------------------------------
-
- /**
- * Starts the underlying AS server.
- *
- * @return success message if no errors are encountered
- * @throws InterruptedException
- * if the plugin container stops this operation while its
- * executing
- */
- private OperationResult start() throws InterruptedException {
+ /**
+ * max amount of time to wait for server to show as unavailable after
+ * executing stop - in milliseconds
+ */
+ private static long STOP_WAIT_MAX = 1000L * 150; // 2.5 minutes
+
+ /**
+ * amount of time to wait between availability checks when performing a stop
+ * - in milliseconds
+ */
+ private static final long STOP_WAIT_INTERVAL = 1000L * 5; // 5 seconds
+
+ /**
+ * amount of time to wait for stop to complete after the loop that checks
+ * for DOWN availability terminates - in milliseconds
+ */
+ private static final long STOP_WAIT_FINAL = 1000L * 30; // 30 seconds
+
+ /** max amount of time to wait for start to complete - in milliseconds */
+ private static long START_WAIT_MAX = 1000L * 300; // 5 minutes
+
+ /**
+ * amount of time to wait between availability checks when performing a
+ * start - in milliseconds
+ */
+ private static final long START_WAIT_INTERVAL = 1000L * 5; // 5 seconds
+
+ private final Log log = LogFactory.getLog(ApplicationServerOperationsDelegate.class);
+
+ private static final String SEPARATOR = "\n-----------------------\n";
+
+ static final String DEFAULT_START_SCRIPT = "bin" + File.separator + "run."
+ + ((File.separatorChar == '/') ? "sh" : "bat");
+ static final String DEFAULT_SHUTDOWN_SCRIPT = "bin" + File.separator + "shutdown."
+ + ((File.separatorChar == '/') ? "sh" : "bat");
+
+ /**
+ * Server component against which the operations are being performed.
+ */
+ private ApplicationServerComponent serverComponent;
+
+ private File configPath;
+
+ // Constructors --------------------------------------------
+
+ public ApplicationServerOperationsDelegate(ApplicationServerComponent serverComponent) {
+ this.serverComponent = serverComponent;
+ }
+
+ // Public --------------------------------------------
+
+ /**
+ * Performs the specified operation. The result of the operation will be
+ * indicated in the return. If there is an error, an
+ * <code>RuntimeException</code> will be thrown.
+ *
+ * @param operation
+ * the operation to perform
+ * @param parameters
+ * parameters to the operation call
+ *
+ * @return if successful, the result object will contain a success message
+ *
+ * @throws RuntimeException
+ * if any errors occur while trying to perform the operation
+ */
+ public OperationResult invoke(ApplicationServerSupportedOperations operation, Configuration parameters)
+ throws InterruptedException {
+ OperationResult result = null;
+
+ switch (operation) {
+ case START: {
+ result = start();
+ break;
+ }
+ case SHUTDOWN: {
+ result = shutDown();
+ break;
+ }
+ case RESTART: {
+ result = restart();
+ break;
+ }
+ }
+
+ return result;
+ }
+
+ // Private --------------------------------------------
+
+ /**
+ * Starts the underlying AS server.
+ *
+ * @return success message if no errors are encountered
+ * @throws InterruptedException
+ * if the plugin container stops this operation while its
+ * executing
+ */
+ private OperationResult start() throws InterruptedException {
AvailabilityType avail = this.serverComponent.getAvailability();
if (avail == AvailabilityType.UP) {
OperationResult result = new OperationResult();
@@ -161,25 +160,20 @@ public class ApplicationServerOperationsDelegate {
}
Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
File startScriptFile = getStartScriptPath();
- validateScriptFile(
- startScriptFile,
- ApplicationServerPluginConfigurationProperties.START_SCRIPT_CONFIG_PROP);
+ validateScriptFile(startScriptFile, ApplicationServerPluginConfigurationProperties.START_SCRIPT_CONFIG_PROP);
// The optional command prefix (e.g. sudo or nohup).
- String prefix = pluginConfig
- .getSimple(
- ApplicationServerPluginConfigurationProperties.SCRIPT_PREFIX_CONFIG_PROP)
- .getStringValue();
- String configName = getConfigurationSet();
- String bindAddress = pluginConfig.getSimpleValue(
- ApplicationServerPluginConfigurationProperties.BIND_ADDRESS, null);
+ String prefix = pluginConfig
+ .getSimple(ApplicationServerPluginConfigurationProperties.SCRIPT_PREFIX_CONFIG_PROP).getStringValue();
+ String configName = getConfigurationSet();
+ String bindAddress = pluginConfig.getSimpleValue(ApplicationServerPluginConfigurationProperties.BIND_ADDRESS,
+ null);
- ProcessExecution processExecution;
- if (prefix == null || prefix.replaceAll("\\s", "").equals("")) {
- // Prefix is either null or contains ONLY whitespace characters.
+ ProcessExecution processExecution;
+ if (prefix == null || prefix.replaceAll("\\s", "").equals("")) {
+ // Prefix is either null or contains ONLY whitespace characters.
- processExecution = ProcessExecutionUtility
- .createProcessExecution(startScriptFile);
+ processExecution = ProcessExecutionUtility.createProcessExecution(startScriptFile);
processExecution.getArguments().add("-c");
processExecution.getArguments().add(configName);
@@ -188,111 +182,103 @@ public class ApplicationServerOperationsDelegate {
processExecution.getArguments().add("-b");
processExecution.getArguments().add(bindAddress);
}
- } else {
- // The process execution should be tied to the process represented
- // as the prefix. If there are any other
- // tokens in the prefix, consider them arguments to the prefix
- // process.
- StringTokenizer prefixTokenizer = new StringTokenizer(prefix);
- String processName = prefixTokenizer.nextToken();
- File prefixProcess = new File(processName);
-
- processExecution = ProcessExecutionUtility
- .createProcessExecution(prefixProcess);
-
- while (prefixTokenizer.hasMoreTokens()) {
- String prefixArgument = prefixTokenizer.nextToken();
- processExecution.getArguments().add(prefixArgument);
- }
-
- // Add the AS start script and its options as a single argument to the prefix command.
- String startScriptArgument = startScriptFile.getAbsolutePath();
- startScriptArgument += " -c " + configName;
- if (bindAddress != null) {
- startScriptArgument += " -b " + bindAddress;
- }
- processExecution.getArguments().add(startScriptArgument);
- }
-
- initProcessExecution(processExecution, startScriptFile);
-
- long start = System.currentTimeMillis();
- if (log.isDebugEnabled()) {
- log.debug("About to execute the following process: [" + processExecution + "]");
- }
- SystemInfo systemInfo = serverComponent.getResourceContext().getSystemInformation();
- ProcessExecutionResults results = systemInfo
- .executeProcess(processExecution);
- logExecutionResults(results);
-
- if (results.getError() == null) {
- avail = waitForServerToStart(start);
- } else {
- log.error(
- "Error from process execution while starting the AS instance. Exit code ["
- + results.getExitCode() + "]", results.getError());
- avail = this.serverComponent.getAvailability();
- }
-
- // If, after the loop, the Server is still down, consider the start to be a failure.
- OperationResult result;
+ } else {
+ // The process execution should be tied to the process represented
+ // as the prefix. If there are any other
+ // tokens in the prefix, consider them arguments to the prefix
+ // process.
+ StringTokenizer prefixTokenizer = new StringTokenizer(prefix);
+ String processName = prefixTokenizer.nextToken();
+ File prefixProcess = new File(processName);
+
+ processExecution = ProcessExecutionUtility.createProcessExecution(prefixProcess);
+
+ while (prefixTokenizer.hasMoreTokens()) {
+ String prefixArgument = prefixTokenizer.nextToken();
+ processExecution.getArguments().add(prefixArgument);
+ }
+
+ // Add the AS start script and its options as a single argument to the prefix command.
+ String startScriptArgument = startScriptFile.getAbsolutePath();
+ startScriptArgument += " -c " + configName;
+ if (bindAddress != null) {
+ startScriptArgument += " -b " + bindAddress;
+ }
+ processExecution.getArguments().add(startScriptArgument);
+ }
+
+ initProcessExecution(processExecution, startScriptFile);
+
+ long start = System.currentTimeMillis();
+ if (log.isDebugEnabled()) {
+ log.debug("About to execute the following process: [" + processExecution + "]");
+ }
+ SystemInfo systemInfo = serverComponent.getResourceContext().getSystemInformation();
+ ProcessExecutionResults results = systemInfo.executeProcess(processExecution);
+ logExecutionResults(results);
+
+ if (results.getError() == null) {
+ avail = waitForServerToStart(start);
+ } else {
+ log.error("Error from process execution while starting the AS instance. Exit code ["
+ + results.getExitCode() + "]", results.getError());
+ avail = this.serverComponent.getAvailability();
+ }
+
+ // If, after the loop, the Server is still down, consider the start to be a failure.
+ OperationResult result;
if (avail == AvailabilityType.DOWN) {
- result = new OperationResult();
+ result = new OperationResult();
result.setErrorMessage("The server failed to start: " + results.getCapturedOutput());
- } else {
- result = new OperationResult("The server has been started.");
- }
+ } else {
+ result = new OperationResult("The server has been started.");
+ }
return result;
- }
-
- private String getConfigurationSet() {
- Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- configPath = resolvePathRelativeToHomeDir(getRequiredPropertyValue(
- pluginConfig,
- ApplicationServerPluginConfigurationProperties.SERVER_HOME_DIR));
-
- if (!configPath.exists()) {
- throw new InvalidPluginConfigurationException(
- "Configuration path '" + configPath + "' does not exist.");
- }
- return pluginConfig.getSimpleValue(
- ApplicationServerPluginConfigurationProperties.SERVER_NAME,
- configPath.getName());
- }
-
- private void initProcessExecution(ProcessExecution processExecution,
- File scriptFile) {
- // NOTE: For both run.bat and shutdown.bat, the current working dir must
- // be set to the script's parent dir
- // (e.g. ${JBOSS_HOME}/bin) for the script to work.
- processExecution.setWorkingDirectory(scriptFile.getParent());
-
- // Both scripts require the JAVA_HOME env var to be set.
- File javaHomeDir = getJavaHomePath();
- if (javaHomeDir == null) {
- throw new IllegalStateException(
- "The '"
- + ApplicationServerPluginConfigurationProperties.JAVA_HOME
- + "' connection property must be set in order to start the application server or to stop it via script.");
- }
-
- validateJavaHomePathProperty();
- processExecution.getEnvironmentVariables().put("JAVA_HOME",
- javaHomeDir.getPath());
-
- processExecution.setCaptureOutput(true);
- processExecution.setWaitForCompletion(1000L); // 1 second // TODO:
- // Should we wait longer than one second?
- processExecution.setKillOnTimeout(false);
- }
-
- /**
- * Shuts down the server by dispatching to shutdown via script or JMX. Waits
- * until the server is down.
- *
- * @return The result of the shutdown operation - is successful
- */
- private OperationResult shutDown() {
+ }
+
+ private String getConfigurationSet() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ configPath = resolvePathRelativeToHomeDir(getRequiredPropertyValue(pluginConfig,
+ ApplicationServerPluginConfigurationProperties.SERVER_HOME_DIR));
+
+ if (!configPath.exists()) {
+ throw new InvalidPluginConfigurationException("Configuration path '" + configPath + "' does not exist.");
+ }
+ return pluginConfig.getSimpleValue(ApplicationServerPluginConfigurationProperties.SERVER_NAME, configPath
+ .getName());
+ }
+
+ private void initProcessExecution(ProcessExecution processExecution, File scriptFile) {
+ // NOTE: For both run.bat and shutdown.bat, the current working dir must
+ // be set to the script's parent dir
+ // (e.g. ${JBOSS_HOME}/bin) for the script to work.
+ processExecution.setWorkingDirectory(scriptFile.getParent());
+
+ // Both scripts require the JAVA_HOME env var to be set.
+ File javaHomeDir = getJavaHomePath();
+ if (javaHomeDir == null) {
+ throw new IllegalStateException(
+ "The '"
+ + ApplicationServerPluginConfigurationProperties.JAVA_HOME
+ + "' connection property must be set in order to start the application server or to stop it via script.");
+ }
+
+ validateJavaHomePathProperty();
+ processExecution.getEnvironmentVariables().put("JAVA_HOME", javaHomeDir.getPath());
+
+ processExecution.setCaptureOutput(true);
+ processExecution.setWaitForCompletion(1000L); // 1 second // TODO:
+ // Should we wait longer than one second?
+ processExecution.setKillOnTimeout(false);
+ }
+
+ /**
+ * Shuts down the server by dispatching to shutdown via script or JMX. Waits
+ * until the server is down.
+ *
+ * @return The result of the shutdown operation - is successful
+ */
+ private OperationResult shutDown() {
AvailabilityType avail = this.serverComponent.getAvailability();
if (avail == AvailabilityType.DOWN) {
OperationResult result = new OperationResult();
@@ -301,339 +287,319 @@ public class ApplicationServerOperationsDelegate {
}
Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- ApplicationServerShutdownMethod shutdownMethod = Enum
- .valueOf(
- ApplicationServerShutdownMethod.class,
- pluginConfig
- .getSimple(
- ApplicationServerPluginConfigurationProperties.SHUTDOWN_METHOD_CONFIG_PROP)
- .getStringValue());
- String resultMessage = ApplicationServerShutdownMethod.JMX
- .equals(shutdownMethod) ? shutdownViaJmx()
- : shutdownViaScript();
+ ApplicationServerShutdownMethod shutdownMethod = Enum.valueOf(ApplicationServerShutdownMethod.class,
+ pluginConfig.getSimple(ApplicationServerPluginConfigurationProperties.SHUTDOWN_METHOD_CONFIG_PROP)
+ .getStringValue());
+ String resultMessage = ApplicationServerShutdownMethod.JMX.equals(shutdownMethod) ? shutdownViaJmx()
+ : shutdownViaScript();
avail = waitForServerToShutdown();
- OperationResult result;
+ OperationResult result;
if (avail == AvailabilityType.UP) {
- result = new OperationResult();
+ result = new OperationResult();
result.setErrorMessage("The server failed to shut down.");
- } else {
- return new OperationResult(resultMessage);
- }
+ } else {
+ return new OperationResult(resultMessage);
+ }
return result;
- }
-
- /**
- * Shuts down the AS server using a shutdown script.
- *
- * @return success message if no errors are encountered
- */
- private String shutdownViaScript() {
- File shutdownScriptFile = getShutdownScriptPath();
- validateScriptFile(
- shutdownScriptFile,
- ApplicationServerPluginConfigurationProperties.SHUTDOWN_SCRIPT_CONFIG_PROP);
- Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- String prefix = pluginConfig
- .getSimple(
- ApplicationServerPluginConfigurationProperties.SCRIPT_PREFIX_CONFIG_PROP)
- .getStringValue();
- ProcessExecution processExecution = ProcessExecutionUtility
- .createProcessExecution(prefix, shutdownScriptFile);
-
- initProcessExecution(processExecution, shutdownScriptFile);
-
- String server = pluginConfig.getSimple(
- ApplicationServerPluginConfigurationProperties.NAMING_URL)
- .getStringValue();
- if (server != null) {
- processExecution.getArguments().add("--server=" + server);
- }
-
- String user = pluginConfig.getSimple(
- ApplicationServerComponent.PRINCIPAL_CONFIG_PROP)
- .getStringValue();
- if (user != null) {
- processExecution.getArguments().add("--user=" + user);
- }
-
- String password = pluginConfig.getSimple(
- ApplicationServerComponent.CREDENTIALS_CONFIG_PROP)
- .getStringValue();
- if (password != null) {
- processExecution.getArguments().add("--password=" + password);
- }
-
- processExecution.getArguments().add("--shutdown");
-
- /*
- * This tells shutdown.bat not to call the Windows PAUSE command, which
- * would cause the script to hang indefinitely waiting for input.
- * noinspection ConstantConditions
- */
- processExecution.getEnvironmentVariables().put("NOPAUSE", "1");
-
- if (log.isDebugEnabled()) {
- log.debug("About to execute the following process: ["
- + processExecution + "]");
- }
- SystemInfo systemInfo = serverComponent.getResourceContext().getSystemInformation();
- ProcessExecutionResults results = systemInfo
- .executeProcess(processExecution);
- logExecutionResults(results);
-
- if (results.getError() != null) {
- throw new RuntimeException(
- "Error executing shutdown script while stopping AS instance. Exit code ["
- + results.getExitCode() + "]", results.getError());
- }
-
- return "The server has been shut down.";
- }
-
- private void logExecutionResults(ProcessExecutionResults results) {
- // Always log the output at info level. On Unix we could switch
- // depending on a exitCode being !=0, but ...
- log.info("Exit code from process execution: " + results.getExitCode());
- log.info("Output from process execution: " + SEPARATOR
- + results.getCapturedOutput() + SEPARATOR);
- }
-
- /**
- * Shuts down the AS server via a JMX call.
- *
- * @return success message if no errors are encountered
- */
- private String shutdownViaJmx() {
- Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- String mbeanName = pluginConfig
- .getSimple(
- ApplicationServerPluginConfigurationProperties.SHUTDOWN_MBEAN_CONFIG_PROP)
- .getStringValue();
- String operationName = pluginConfig
- .getSimple(
- ApplicationServerPluginConfigurationProperties.SHUTDOWN_MBEAN_OPERATION_CONFIG_PROP)
- .getStringValue();
-
- EmsConnection connection = this.serverComponent.getEmsConnection();
- if (connection == null) {
- throw new RuntimeException("Can not connect to the server");
- }
- EmsBean bean = connection.getBean(mbeanName);
- EmsOperation operation = bean.getOperation(operationName);
- /*
- * Now see if we got the 'real' method (the one with no param) or the
- * overloaded one. This is a workaround for a bug in EMS that prevents
- * finding operations with same name and different signature.
- * http://sourceforge
- * .net/tracker/index.php?func=detail&aid=2007692&group_id
- * =60228&atid=493495
- *
- * In addition, as we offer the user to specify any MBean and any
- * method, we'd need a clever way for the user to specify parameters
- * anyway.
- */
- List<EmsParameter> params = operation.getParameters();
- int count = params.size();
- if (count == 0)
- operation.invoke(new Object[0]);
- else { // overloaded operation
- operation.invoke(new Object[] { 0 }); // return code of 0
- }
-
- return "The server has been shut down.";
- }
-
- private void validateScriptFile(File scriptFile, String scriptPropertyName) {
- if (!scriptFile.exists()) {
- throw new RuntimeException("Script (" + scriptFile
- + ") specified via '" + scriptPropertyName
- + "' connection property does not exist.");
- }
-
- if (scriptFile.isDirectory()) {
- throw new RuntimeException("Script (" + scriptFile
- + ") specified via '" + scriptPropertyName
- + "' connection property is a directory, not a file.");
- }
- }
-
- /**
- * Restart the server by first trying a shutdown and then a start. This is
- * fail fast.
- *
- * @return A success message on success
- */
- private OperationResult restart() {
- try {
- shutDown();
- } catch (Exception e) {
- throw new RuntimeException("Shutdown may have failed: " + e);
- }
-
- try {
- start();
- } catch (Exception e) {
- throw new RuntimeException("Start following shutdown may have failed: " + e);
- }
-
- return new OperationResult("Server has been restarted.");
-
- }
-
- private AvailabilityType waitForServerToStart(long start)
- throws InterruptedException {
- AvailabilityType avail;
- while (((avail = this.serverComponent.getAvailability()) == AvailabilityType.DOWN)
- && (System.currentTimeMillis() < (start + START_WAIT_MAX))) {
- try {
- Thread.sleep(START_WAIT_INTERVAL);
- } catch (InterruptedException e) {
- // ignore
- }
- }
- return avail;
- }
-
- private AvailabilityType waitForServerToShutdown() {
- long start = System.currentTimeMillis();
+ }
+
+ /**
+ * Shuts down the AS server using a shutdown script.
+ *
+ * @return success message if no errors are encountered
+ */
+ private String shutdownViaScript() {
+ File shutdownScriptFile = getShutdownScriptPath();
+ validateScriptFile(shutdownScriptFile,
+ ApplicationServerPluginConfigurationProperties.SHUTDOWN_SCRIPT_CONFIG_PROP);
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String prefix = pluginConfig
+ .getSimple(ApplicationServerPluginConfigurationProperties.SCRIPT_PREFIX_CONFIG_PROP).getStringValue();
+ ProcessExecution processExecution = ProcessExecutionUtility.createProcessExecution(prefix, shutdownScriptFile);
+
+ initProcessExecution(processExecution, shutdownScriptFile);
+
+ String server = pluginConfig.getSimple(ApplicationServerPluginConfigurationProperties.NAMING_URL)
+ .getStringValue();
+ if (server != null) {
+ processExecution.getArguments().add("--server=" + server);
+ }
+
+ String user = pluginConfig.getSimple(ApplicationServerComponent.PRINCIPAL_CONFIG_PROP).getStringValue();
+ if (user != null) {
+ processExecution.getArguments().add("--user=" + user);
+ }
+
+ String password = pluginConfig.getSimple(ApplicationServerComponent.CREDENTIALS_CONFIG_PROP).getStringValue();
+ if (password != null) {
+ processExecution.getArguments().add("--password=" + password);
+ }
+
+ processExecution.getArguments().add("--shutdown");
+
+ /*
+ * This tells shutdown.bat not to call the Windows PAUSE command, which
+ * would cause the script to hang indefinitely waiting for input.
+ * noinspection ConstantConditions
+ */
+ processExecution.getEnvironmentVariables().put("NOPAUSE", "1");
+
+ if (log.isDebugEnabled()) {
+ log.debug("About to execute the following process: [" + processExecution + "]");
+ }
+ SystemInfo systemInfo = serverComponent.getResourceContext().getSystemInformation();
+ ProcessExecutionResults results = systemInfo.executeProcess(processExecution);
+ logExecutionResults(results);
+
+ if (results.getError() != null) {
+ throw new RuntimeException("Error executing shutdown script while stopping AS instance. Exit code ["
+ + results.getExitCode() + "]", results.getError());
+ }
+
+ return "The server has been shut down.";
+ }
+
+ private void logExecutionResults(ProcessExecutionResults results) {
+ // Always log the output at info level. On Unix we could switch
+ // depending on a exitCode being !=0, but ...
+ log.info("Exit code from process execution: " + results.getExitCode());
+ log.info("Output from process execution: " + SEPARATOR + results.getCapturedOutput() + SEPARATOR);
+ }
+
+ /**
+ * Shuts down the AS server via a JMX call.
+ *
+ * @return success message if no errors are encountered
+ */
+ private String shutdownViaJmx() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String mbeanName = pluginConfig.getSimple(
+ ApplicationServerPluginConfigurationProperties.SHUTDOWN_MBEAN_CONFIG_PROP).getStringValue();
+ String operationName = pluginConfig.getSimple(
+ ApplicationServerPluginConfigurationProperties.SHUTDOWN_MBEAN_OPERATION_CONFIG_PROP).getStringValue();
+
+ EmsConnection connection = this.serverComponent.getEmsConnection();
+ if (connection == null) {
+ throw new RuntimeException("Can not connect to the server");
+ }
+ EmsBean bean = connection.getBean(mbeanName);
+ EmsOperation operation = bean.getOperation(operationName);
+ /*
+ * Now see if we got the 'real' method (the one with no param) or the
+ * overloaded one. This is a workaround for a bug in EMS that prevents
+ * finding operations with same name and different signature.
+ * http://sourceforge
+ * .net/tracker/index.php?func=detail&aid=2007692&group_id
+ * =60228&atid=493495
+ *
+ * In addition, as we offer the user to specify any MBean and any
+ * method, we'd need a clever way for the user to specify parameters
+ * anyway.
+ */
+ List<EmsParameter> params = operation.getParameters();
+ int count = params.size();
+ if (count == 0)
+ operation.invoke(new Object[0]);
+ else { // overloaded operation
+ operation.invoke(new Object[] { 0 }); // return code of 0
+ }
+
+ return "The server has been shut down.";
+ }
+
+ private void validateScriptFile(File scriptFile, String scriptPropertyName) {
+ if (!scriptFile.exists()) {
+ throw new RuntimeException("Script (" + scriptFile + ") specified via '" + scriptPropertyName
+ + "' connection property does not exist.");
+ }
+
+ if (scriptFile.isDirectory()) {
+ throw new RuntimeException("Script (" + scriptFile + ") specified via '" + scriptPropertyName
+ + "' connection property is a directory, not a file.");
+ }
+ }
+
+ /**
+ * Restart the server by first trying a shutdown and then a start. This is
+ * fail fast.
+ *
+ * @return A success message on success
+ */
+ private OperationResult restart() {
+ try {
+ shutDown();
+ } catch (Exception e) {
+ throw new RuntimeException("Shutdown may have failed: " + e);
+ }
+
+ try {
+ start();
+ } catch (Exception e) {
+ throw new RuntimeException("Start following shutdown may have failed: " + e);
+ }
+
+ return new OperationResult("Server has been restarted.");
+
+ }
+
+ private AvailabilityType waitForServerToStart(long start) throws InterruptedException {
AvailabilityType avail;
+ //detect whether startWaitMax property has been set.
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ PropertySimple property = pluginConfig
+ .getSimple(ApplicationServerPluginConfigurationProperties.START_WAIT_MAX_PROP);
+ //if set and valid, update startWaitMax value
+ if ((property != null) && (property.getIntegerValue() != null)) {
+ int newValue = property.getIntegerValue();
+ if (newValue >= 1) {
+ START_WAIT_MAX = 1000L * 60 * newValue;
+ }
+ }
+ while (((avail = this.serverComponent.getAvailability()) == AvailabilityType.DOWN)
+ && (System.currentTimeMillis() < (start + START_WAIT_MAX))) {
+ try {
+ Thread.sleep(START_WAIT_INTERVAL);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+ return avail;
+ }
+
+ private AvailabilityType waitForServerToShutdown() {
+ long start = System.currentTimeMillis();
+ AvailabilityType avail;
+ //detect whether stopWaitMax property has been set.
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ PropertySimple property = pluginConfig
+ .getSimple(ApplicationServerPluginConfigurationProperties.STOP_WAIT_MAX_PROP);
+ //if set and valid update stopWaitMax value
+ if ((property != null) && (property.getIntegerValue() != null)) {
+ int newValue = property.getIntegerValue();
+ if (newValue >= 1) {
+ STOP_WAIT_MAX = 1000L * 60 * newValue;
+ }
+ }
while (((avail = this.serverComponent.getAvailability()) == AvailabilityType.UP)
- && (System.currentTimeMillis() < (start + STOP_WAIT_MAX))) {
- try {
- Thread.sleep(STOP_WAIT_INTERVAL);
- } catch (InterruptedException e) {
- // ignore
- }
- }
-
- // After the server becomes unavailable, wait a little longer to hopefully
- // ensure shutdown is complete.
- try {
- Thread.sleep(STOP_WAIT_FINAL);
- } catch (InterruptedException e) {
- // ignore
- }
- return avail;
- }
-
- /**
- * Return the absolute path of this JBoss server's start script (e.g.
- * "C:\opt\jboss-5.1.0.GA\bin\run.sh").
- *
- * @return the absolute path of this JBoss server's start script (e.g.
- * "C:\opt\jboss-5.1.0.GA\bin\run.sh")
- */
- @NotNull
- public File getStartScriptPath() {
- Configuration pluginConfig = serverComponent.getResourceContext()
- .getPluginConfiguration();
- String startScript = pluginConfig
- .getSimpleValue(
- ApplicationServerPluginConfigurationProperties.START_SCRIPT_CONFIG_PROP,
- DEFAULT_START_SCRIPT);
- File startScriptFile = resolvePathRelativeToHomeDir(startScript);
- return startScriptFile;
- }
-
- @NotNull
- private File resolvePathRelativeToHomeDir(@NotNull String path) {
- return resolvePathRelativeToHomeDir(serverComponent
- .getResourceContext().getPluginConfiguration(), path);
- }
-
- @NotNull
- private File resolvePathRelativeToHomeDir(Configuration pluginConfig,
- @NotNull String path) {
- File configDir = new File(path);
- if (!configDir.isAbsolute()) {
- String jbossHomeDir = getRequiredPropertyValue(pluginConfig,
- ApplicationServerPluginConfigurationProperties.HOME_DIR);
- configDir = new File(jbossHomeDir, path);
- }
-
- return configDir;
- }
-
- @NotNull
- private String getRequiredPropertyValue(@NotNull Configuration config,
- @NotNull String propName) {
- String propValue = config.getSimpleValue(propName, null);
- if (propValue == null) {
- // Something's not right - neither autodiscovery, nor the config
- // edit GUI, should ever allow this.
- throw new IllegalStateException("Required property '" + propName
- + "' is not set.");
- }
-
- return propValue;
- }
-
- /**
- * Return the absolute path of this JBoss server's shutdown script (e.g.
- * "C:\opt\jboss-5.1.0.GA\bin\shutdown.sh").
- *
- * @return the absolute path of this JBoss server's shutdown script (e.g.
- * "C:\opt\jboss-5.1.0.GA\bin\shutdown.sh")
- */
- @NotNull
- public File getShutdownScriptPath() {
- Configuration pluginConfig = serverComponent.getResourceContext()
- .getPluginConfiguration();
- String shutdownScript = pluginConfig
- .getSimpleValue(
- ApplicationServerPluginConfigurationProperties.SHUTDOWN_SCRIPT_CONFIG_PROP,
- DEFAULT_SHUTDOWN_SCRIPT);
- File shutdownScriptFile = resolvePathRelativeToHomeDir(shutdownScript);
- return shutdownScriptFile;
- }
-
- /**
- * Return the absolute path of this JBoss server's JAVA_HOME directory (e.g. "C:\opt\jdk1.5.0_14"), as defined by
+ && (System.currentTimeMillis() < (start + STOP_WAIT_MAX))) {
+ try {
+ Thread.sleep(STOP_WAIT_INTERVAL);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ }
+
+ // After the server becomes unavailable, wait a little longer to hopefully
+ // ensure shutdown is complete.
+ try {
+ Thread.sleep(STOP_WAIT_FINAL);
+ } catch (InterruptedException e) {
+ // ignore
+ }
+ return avail;
+ }
+
+ /**
+ * Return the absolute path of this JBoss server's start script (e.g.
+ * "C:\opt\jboss-5.1.0.GA\bin\run.sh").
+ *
+ * @return the absolute path of this JBoss server's start script (e.g.
+ * "C:\opt\jboss-5.1.0.GA\bin\run.sh")
+ */
+ @NotNull
+ public File getStartScriptPath() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String startScript = pluginConfig.getSimpleValue(
+ ApplicationServerPluginConfigurationProperties.START_SCRIPT_CONFIG_PROP, DEFAULT_START_SCRIPT);
+ File startScriptFile = resolvePathRelativeToHomeDir(startScript);
+ return startScriptFile;
+ }
+
+ @NotNull
+ private File resolvePathRelativeToHomeDir(@NotNull String path) {
+ return resolvePathRelativeToHomeDir(serverComponent.getResourceContext().getPluginConfiguration(), path);
+ }
+
+ @NotNull
+ private File resolvePathRelativeToHomeDir(Configuration pluginConfig, @NotNull String path) {
+ File configDir = new File(path);
+ if (!configDir.isAbsolute()) {
+ String jbossHomeDir = getRequiredPropertyValue(pluginConfig,
+ ApplicationServerPluginConfigurationProperties.HOME_DIR);
+ configDir = new File(jbossHomeDir, path);
+ }
+
+ return configDir;
+ }
+
+ @NotNull
+ private String getRequiredPropertyValue(@NotNull Configuration config, @NotNull String propName) {
+ String propValue = config.getSimpleValue(propName, null);
+ if (propValue == null) {
+ // Something's not right - neither autodiscovery, nor the config
+ // edit GUI, should ever allow this.
+ throw new IllegalStateException("Required property '" + propName + "' is not set.");
+ }
+
+ return propValue;
+ }
+
+ /**
+ * Return the absolute path of this JBoss server's shutdown script (e.g.
+ * "C:\opt\jboss-5.1.0.GA\bin\shutdown.sh").
+ *
+ * @return the absolute path of this JBoss server's shutdown script (e.g.
+ * "C:\opt\jboss-5.1.0.GA\bin\shutdown.sh")
+ */
+ @NotNull
+ public File getShutdownScriptPath() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String shutdownScript = pluginConfig.getSimpleValue(
+ ApplicationServerPluginConfigurationProperties.SHUTDOWN_SCRIPT_CONFIG_PROP, DEFAULT_SHUTDOWN_SCRIPT);
+ File shutdownScriptFile = resolvePathRelativeToHomeDir(shutdownScript);
+ return shutdownScriptFile;
+ }
+
+ /**
+ * Return the absolute path of this JBoss server's JAVA_HOME directory (e.g. "C:\opt\jdk1.5.0_14"), as defined by
* the 'javaHome' plugin config prop, or null if that prop is not set.
- *
- * @return the absolute path of this JBoss server's JAVA_HOME directory, as defined by
+ *
+ * @return the absolute path of this JBoss server's JAVA_HOME directory, as defined by
* the 'javaHome' plugin config prop, or null if that prop is not set
- */
- @Nullable
- public File getJavaHomePath() {
- Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- String javaHomePath = pluginConfig.getSimpleValue(ApplicationServerPluginConfigurationProperties.JAVA_HOME,
- null);
- File javaHome = (javaHomePath != null) ? new File(javaHomePath) : null;
- return javaHome;
- }
-
- void validateJavaHomePathProperty() {
- Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
- String javaHome = pluginConfig.getSimple(
- ApplicationServerPluginConfigurationProperties.JAVA_HOME)
- .getStringValue();
- if (javaHome != null) {
- File javaHomeDir = new File(javaHome);
- if (!javaHomeDir.isAbsolute()) {
- throw new InvalidPluginConfigurationException(
- ApplicationServerPluginConfigurationProperties.JAVA_HOME
- + " connection property ('"
- + javaHomeDir
- + "') is not an absolute path. Note, on Windows, absolute paths must start with the drive letter (e.g. C:).");
- }
-
- if (!javaHomeDir.exists()) {
- throw new InvalidPluginConfigurationException(
- ApplicationServerPluginConfigurationProperties.JAVA_HOME
- + " connection property ('"
- + javaHomeDir
- + "') does not exist.");
- }
-
- if (!javaHomeDir.isDirectory()) {
- throw new InvalidPluginConfigurationException(
- ApplicationServerPluginConfigurationProperties.JAVA_HOME
- + " connection property ('"
- + javaHomeDir
- + "') is not a directory.");
- }
- }
- }
+ */
+ @Nullable
+ public File getJavaHomePath() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String javaHomePath = pluginConfig.getSimpleValue(ApplicationServerPluginConfigurationProperties.JAVA_HOME,
+ null);
+ File javaHome = (javaHomePath != null) ? new File(javaHomePath) : null;
+ return javaHome;
+ }
+
+ void validateJavaHomePathProperty() {
+ Configuration pluginConfig = serverComponent.getResourceContext().getPluginConfiguration();
+ String javaHome = pluginConfig.getSimple(ApplicationServerPluginConfigurationProperties.JAVA_HOME)
+ .getStringValue();
+ if (javaHome != null) {
+ File javaHomeDir = new File(javaHome);
+ if (!javaHomeDir.isAbsolute()) {
+ throw new InvalidPluginConfigurationException(
+ ApplicationServerPluginConfigurationProperties.JAVA_HOME
+ + " connection property ('"
+ + javaHomeDir
+ + "') is not an absolute path. Note, on Windows, absolute paths must start with the drive letter (e.g. C:).");
+ }
+
+ if (!javaHomeDir.exists()) {
+ throw new InvalidPluginConfigurationException(ApplicationServerPluginConfigurationProperties.JAVA_HOME
+ + " connection property ('" + javaHomeDir + "') does not exist.");
+ }
+
+ if (!javaHomeDir.isDirectory()) {
+ throw new InvalidPluginConfigurationException(ApplicationServerPluginConfigurationProperties.JAVA_HOME
+ + " connection property ('" + javaHomeDir + "') is not a directory.");
+ }
+ }
+ }
}
diff --git a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerPluginConfigurationProperties.java b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerPluginConfigurationProperties.java
index 3489fd4..c770844 100644
--- a/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerPluginConfigurationProperties.java
+++ b/modules/plugins/jboss-as-5/src/main/java/org/rhq/plugins/jbossas5/ApplicationServerPluginConfigurationProperties.java
@@ -33,11 +33,13 @@ public class ApplicationServerPluginConfigurationProperties {
public static final String HOME_DIR = "homeDir";
public static final String CLIENT_URL = "clientUrl";
public static final String LIB_URL = "libUrl";
- public static final String COMMON_LIB_URL = "commonLibUrl";
+ public static final String COMMON_LIB_URL = "commonLibUrl";
public static final String SERVER_HOME_DIR = "serverHomeDir";
public static final String JAVA_HOME = "javaHome";
public static final String BIND_ADDRESS = "bindAddress";
public static final String START_SCRIPT_CONFIG_PROP = "startScript";
+ public static final String START_WAIT_MAX_PROP = "startWaitMax";
+ public static final String STOP_WAIT_MAX_PROP = "stopWaitMax";
public static final String SHUTDOWN_SCRIPT_CONFIG_PROP = "shutdownScript";
public static final String SHUTDOWN_MBEAN_CONFIG_PROP = "shutdownMBeanName";
public static final String SHUTDOWN_MBEAN_OPERATION_CONFIG_PROP = "shutdownMBeanOperation";
diff --git a/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
index 421ac28..b88813c 100644
--- a/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-5/src/main/resources/META-INF/rhq-plugin.xml
@@ -1018,6 +1018,18 @@
this property must be set in order for the Start operation to work,
or for the Shutdown operation to work when the shutdown method is set
to 'shutdown script'."/>
+ <c:simple-property name="startWaitMax" required="false"
+ description="The time, in minutes,(e.g. 1 or 8) that must elapse before the server is considered to have failed to start up. The default is 5 minutes.">
+ <c:constraint>
+ <c:integer-constraint minimum="1"/>
+ </c:constraint>
+ </c:simple-property>
+ <c:simple-property name="stopWaitMax" required="false"
+ description="The time, in minutes,(e.g. 1 or 8) that must elapse before the server is considered to have failed to stop. The default is 2.5 minutes.">
+ <c:constraint>
+ <c:integer-constraint minimum="1"/>
+ </c:constraint>
+ </c:simple-property>
</c:group>
<c:group name="advanced" displayName="Advanced" hiddenByDefault="true">
commit af9ff8bfcf561ca49eb6af2385ae7cb717a96199
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 24 09:04:55 2011 -0400
BZ 535572 - we don't want to support the agent talking to the server over the http or https transport protocol, so remove them from the options.
diff --git a/modules/plugins/rhq-agent/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/rhq-agent/src/main/resources/META-INF/rhq-plugin.xml
index 438cbd5..bf48dcd 100644
--- a/modules/plugins/rhq-agent/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/rhq-agent/src/main/resources/META-INF/rhq-plugin.xml
@@ -379,8 +379,6 @@
<c:option name="sslservlet" value="sslservlet" />
<c:option name="socket" value="socket" />
<c:option name="sslsocket" value="sslsocket" />
- <c:option name="http" value="http" />
- <c:option name="https" value="https" />
</c:property-options>
</c:simple-property>
<c:simple-property name="rhq.agent.server.bind-address" type="string" activationPolicy="restart" required="true" default="127.0.0.1" displayName="RHQ Server IP Address" description="The RHQ Server address that it is bound to" />
commit 7f51c8b8b62835bb0c7eaa68726de75bbbff9866
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 21:36:09 2011 -0400
BZ 689951 - message center window's list grid needed to be refreshed in order to have its rows be selectable
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
index f861a37..b5907fd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
@@ -90,31 +90,28 @@ public class MessageCenterView extends Table implements MessageCenter.MessageLis
*/
public void showMessageCenterWindow() {
try {
- createWindow().show();
+ if (window == null) {
+ window = new MessageCenterWindow("MessageCenterViewWindow");
+ window.addItem(this);
+ window.addCloseClickHandler(new CloseClickHandler() {
+ @Override
+ public void onCloseClick(CloseClientEvent event) {
+ try {
+ window.hide();
+ } catch (Throwable e) {
+ Log.warn("Cannot destroy message center", e);
+ }
+ }
+ });
+ }
+
+ window.show();
+ markForRedraw(); // need this to ensure the list grid rows are selectable
} catch (Throwable e) {
Log.error("Cannot show message center window", e);
}
}
- private Window createWindow() {
- if (window == null) {
- window = new MessageCenterWindow("MessageCenterViewWindow");
- window.addItem(this);
- window.addCloseClickHandler(new CloseClickHandler() {
- @Override
- public void onCloseClick(CloseClientEvent event) {
- try {
- window.hide();
- } catch (Throwable e) {
- Log.warn("Cannot destroy message center", e);
- }
- }
- });
- }
-
- return window;
- }
-
@Override
public void onMessage(final Message message) {
try {
commit 2f94b6e8de74e304c3044c404d3ce90b17332ada
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 19:25:44 2011 -0400
don't allow tags to be added/removed if you don't have permission
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
index a0e3949..1046f31 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java
@@ -128,8 +128,8 @@ public class ResourceTitleBar extends LocatableVLayout {
badge = new Img(ImageManager.getResourceLargeIcon(ResourceCategory.SERVICE), 24, 24);
- TagEditorView tagEditorView = new TagEditorView(extendLocatorId("TagEdit"), resource.getTags(), false,
- new TagsChangedCallback() {
+ TagEditorView tagEditorView = new TagEditorView(extendLocatorId("TagEdit"), resource.getTags(),
+ !resourceComposite.getResourcePermission().isInventory(), new TagsChangedCallback() {
public void tagsChanged(final HashSet<Tag> tags) {
GWTServiceLookup.getTagService().updateResourceTags(resource.getId(), tags,
new AsyncCallback<Void>() {
commit cd4b00e6a257ac66ba60b128679168bcee1cecde
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 19:24:54 2011 -0400
BZ 688915 refactor the tag editor so it doesn't disappear after adding a third tag.
make components reuseable, don't throw away and recreate components
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
index 14f9a39..ac289a2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
@@ -22,6 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.components.tagging;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
@@ -30,6 +31,7 @@ import java.util.Set;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.TextMatchStyle;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.HTMLFlow;
import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.events.ClickEvent;
@@ -41,7 +43,6 @@ import com.smartgwt.client.widgets.events.MouseOverHandler;
import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent;
import com.smartgwt.client.widgets.form.fields.events.KeyPressHandler;
-import com.smartgwt.client.widgets.layout.Layout;
import com.smartgwt.client.widgets.layout.LayoutSpacer;
import org.rhq.core.domain.criteria.TagCriteria;
@@ -51,34 +52,64 @@ import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.Locatable;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDialog;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableImg;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableLayout;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * A reusable component that shows a set of tags and, if not read only, allows the user
+ * to delete existing tags or add new tags.
+ *
* @author Greg Hinkle
+ * @author John Mazzitelli
*/
public class TagEditorView extends LocatableLayout {
private LinkedHashSet<Tag> tags = new LinkedHashSet<Tag>();
-
private boolean readOnly;
private TagsChangedCallback callback;
-
- private boolean vertical = false;
+ private HTMLFlow tagTitleLabel;
+ private ArrayList<LocatableHLayout> tagLayouts;
+ private Img addImg;
+ private TagInputDialog tagInputDialog;
public TagEditorView(String locatorId, Set<Tag> tags, boolean readOnly, TagsChangedCallback callback) {
+ this(locatorId, tags, readOnly, callback, false);
+ }
+
+ public TagEditorView(String locatorId, Set<Tag> tags, boolean readOnly, TagsChangedCallback callback,
+ boolean vertical) {
+
super(locatorId);
+ setVertical(vertical);
+ setAutoWidth();
+ if (!vertical) {
+ setMembersMargin(8);
+ }
+
if (tags != null) {
this.tags.addAll(tags);
}
this.readOnly = readOnly;
this.callback = callback;
+
+ tagTitleLabel = new HTMLFlow("<b>" + MSG.view_tags_tags() + ":</b>");
+ tagTitleLabel.setAutoWidth();
+
+ if (!this.readOnly) {
+ tagInputDialog = new TagInputDialog(extendLocatorId("tagInputDialog"));
+
+ addImg = new LocatableImg(extendLocatorId("addImg"), "[skin]/images/actions/add.png", 16, 16);
+ addImg.setTooltip(MSG.view_tags_tooltip_2());
+ addImg.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ showTagInput();
+ }
+ });
+ }
}
public LinkedHashSet<Tag> getTags() {
@@ -86,40 +117,57 @@ public class TagEditorView extends LocatableLayout {
}
public void setTags(LinkedHashSet<Tag> tags) {
- this.tags = tags;
+ this.tags.clear();
+ if (tags != null) {
+ this.tags.addAll(tags);
+ }
setup();
}
- public void setVertical(boolean vertical) {
- this.vertical = vertical;
- }
-
@Override
protected void onDraw() {
super.onDraw();
-
setup();
}
private void setup() {
- destroyMembers();
+ // remove old members
+ removeMember(tagTitleLabel);
+ if (tagLayouts != null) {
+ for (LocatableHLayout tagLayout : tagLayouts) {
+ removeMember(tagLayout);
+ tagLayout.destroy();
+ }
+ }
+ if (addImg != null) {
+ removeMember(addImg);
+ }
+
+ // add new members
+ addMember(tagTitleLabel);
+ tagLayouts = createTagLayouts();
+ for (LocatableHLayout tagLayout : tagLayouts) {
+ addMember(tagLayout);
+ }
+ if (!readOnly) {
+ addMember(addImg);
+ tagInputDialog.place(addImg);
+ }
- Layout layout = vertical ? new LocatableVLayout(getLocatorId()) : new LocatableHLayout(getLocatorId());
- if (!vertical)
- layout.setMembersMargin(8);
+ markForRedraw();
+ }
- HTMLFlow title = new HTMLFlow("<b>" + MSG.view_tags_tags() + ":</b>");
- title.setAutoWidth();
- layout.addMember(title);
+ private ArrayList<LocatableHLayout> createTagLayouts() {
+ ArrayList<LocatableHLayout> tagLayouts = new ArrayList<LocatableHLayout>(tags.size());
for (final Tag tag : tags) {
- LocatableHLayout tagLayout = new LocatableHLayout(((Locatable) layout).extendLocatorId(tag.getName()));
+ LocatableHLayout tagLayout = new LocatableHLayout(extendLocatorId(tag.getName()));
tagLayout.setHeight(18);
+ tagLayout.setHeight(16);
HTMLFlow tagString = new HTMLFlow("<a href=\"" + LinkManager.getTagLink(tag.toString()) + "\">"
+ tag.toString() + "</a>");
tagString.setAutoWidth();
-
tagLayout.addMember(tagString);
if (!readOnly) {
@@ -136,6 +184,7 @@ public class TagEditorView extends LocatableLayout {
save();
}
});
+
tagLayout.addMember(remove);
tagLayout.addMember(spacer);
remove.hide();
@@ -154,38 +203,13 @@ public class TagEditorView extends LocatableLayout {
});
}
- tagLayout.setHeight(16);
- layout.addMember(tagLayout);
- }
-
- if (!readOnly) {
- final Img modeImg = new LocatableImg(((Locatable) layout).getLocatorId(), "[skin]/images/actions/add.png",
- 16, 16);
-
- modeImg.setTooltip(MSG.view_tags_tooltip_2());
- modeImg.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
-
- showTagInput(modeImg.getAbsoluteLeft(), modeImg.getAbsoluteTop());
- }
- });
- layout.addMember(modeImg);
+ tagLayouts.add(tagLayout);
}
- layout.setAutoWidth();
- addMember(layout);
-
- markForRedraw();
+ return tagLayouts;
}
- private void showTagInput(int left, int top) {
- final LocatableDialog dialog = new LocatableDialog(getLocatorId());
- final LocatableDynamicForm form = new LocatableDynamicForm(dialog.getLocatorId());
- final ComboBoxItem tagInput = new ComboBoxItem("tag");
-
- tagInput.setShowTitle(false);
- tagInput.setHideEmptyPickList(true);
- // tagInput.setOptionDataSource(new TaggingDataSource());
+ private void showTagInput() {
TagCriteria criteria = new TagCriteria();
criteria.addSortNamespace(PageOrdering.ASC);
criteria.addSortSemantic(PageOrdering.ASC);
@@ -201,69 +225,82 @@ public class TagEditorView extends LocatableLayout {
for (Tag tag : result) {
values[i++] = tag.toString();
}
- tagInput.setValueMap(values);
+ tagInputDialog.setTagSuggestions(values);
}
});
- tagInput.setValueField("tag");
- tagInput.setDisplayField("tag");
- tagInput.setType("comboBox");
- tagInput.setTextMatchStyle(TextMatchStyle.SUBSTRING);
- tagInput.setTooltip(MSG.view_tags_tooltip_3());
- /*tagInput.addBlurHandler(new BlurHandler() {
- public void onBlur(BlurEvent blurEvent) {
- String tag = form.getValueAsString("tag");
- if (tag != null) {
- Tag newTag = new Tag(tag);
- tags.add(newTag);
- save();
- // TagEditorView.this.setup();
- }
- }
- });*/
- tagInput.addKeyPressHandler(new KeyPressHandler() {
- public void onKeyPress(KeyPressEvent event) {
- if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
- String tag = form.getValueAsString("tag");
- if (tag != null) {
- Tag newTag = new Tag(tag);
- tags.add(newTag);
- save();
- dialog.destroy();
- // TagEditorView.this.setup();
- }
- }
- }
- });
-
- form.setFields(tagInput);
-
- dialog.setIsModal(true);
- dialog.setShowHeader(false);
- dialog.setShowEdges(false);
- dialog.setEdgeSize(10);
- dialog.setWidth(200);
- dialog.setHeight(30);
-
- dialog.setShowToolbar(false);
-
- Map bodyDefaults = new HashMap();
- bodyDefaults.put("layoutLeftMargin", 5);
- bodyDefaults.put("membersMargin", 10);
- dialog.setBodyDefaults(bodyDefaults);
-
- dialog.addItem(form);
-
- dialog.setDismissOnEscape(true);
- dialog.setDismissOnOutsideClick(true);
-
- dialog.show();
- dialog.moveTo(left - 8, top - 4);
- tagInput.focusInItem();
+ tagInputDialog.show();
+ tagInputDialog.place(addImg);
+ markForRedraw();
}
private void save() {
this.callback.tagsChanged(tags);
TagEditorView.this.setup();
}
+
+ private class TagInputDialog extends LocatableDialog {
+ private ComboBoxItem tagInputItem;
+
+ public TagInputDialog(String locatorId) {
+ super(locatorId);
+
+ setIsModal(true);
+ setShowHeader(false);
+ setShowEdges(false);
+ setEdgeSize(10);
+ setWidth(200);
+ setHeight(30);
+ setShowToolbar(false);
+ setDismissOnEscape(true);
+ setDismissOnOutsideClick(true);
+ Map<String, Integer> bodyDefaults = new HashMap<String, Integer>(2);
+ bodyDefaults.put("layoutLeftMargin", 5);
+ bodyDefaults.put("membersMargin", 10);
+ setBodyDefaults(bodyDefaults);
+
+ final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("tagInputForm"));
+ addItem(form);
+
+ tagInputItem = new ComboBoxItem("tag");
+ tagInputItem.setShowTitle(false);
+ tagInputItem.setHideEmptyPickList(true);
+ tagInputItem.setValueField("tag");
+ tagInputItem.setDisplayField("tag");
+ tagInputItem.setType("comboBox");
+ tagInputItem.setTextMatchStyle(TextMatchStyle.SUBSTRING);
+ tagInputItem.setTooltip(MSG.view_tags_tooltip_3());
+ tagInputItem.addKeyPressHandler(new KeyPressHandler() {
+ public void onKeyPress(KeyPressEvent event) {
+ if ((event.getCharacterValue() != null) && (event.getCharacterValue() == KeyCodes.KEY_ENTER)) {
+ //String tag = form.getValueAsString("tag");
+ String tag = tagInputItem.getEnteredValue();
+ if (tag != null) {
+ Tag newTag = new Tag(tag);
+ tags.add(newTag);
+ TagEditorView.this.save();
+ TagInputDialog.this.hide();
+ }
+ }
+ }
+ });
+ form.setFields(tagInputItem);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ tagInputItem.clearValue();
+ tagInputItem.focusInItem();
+ }
+
+ public void setTagSuggestions(String[] suggestions) {
+ tagInputItem.setValueMap(suggestions);
+ }
+
+ public void place(Canvas canvas) {
+ // move this object over top the given canvas
+ moveTo(canvas.getAbsoluteLeft() - 8, canvas.getAbsoluteTop() - 4);
+ }
+ }
}
commit c9efcac6010e5a0a6f64472d1465d8e3cd991545
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed Mar 23 16:58:19 2011 -0400
implement "perfect caching" for GWT-compiled URLs (https://bugzilla.redhat.com/show_bug.cgi?id=617729)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
new file mode 100644
index 0000000..3f49857
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/filter/CacheControlFilter.java
@@ -0,0 +1,76 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2011 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.server.filter;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Date;
+
+/**
+ * Specify the cache policy browsers should use for GWT-compiled files. See
+ * http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebuggin... for more info.
+ *
+ * @author Ian Springer
+ */
+public class CacheControlFilter implements Filter {
+
+ private static final long SECONDS_IN_ONE_YEAR = 365 * 24 * 60 * 60L;
+ private static final long MILLISECONDS_IN_ONE_YEAR = SECONDS_IN_ONE_YEAR * 1000;
+
+ public void init(FilterConfig config) throws ServletException {
+ return;
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,
+ ServletException {
+ HttpServletRequest httpServletRequest = (HttpServletRequest) request;
+ String requestURI = httpServletRequest.getRequestURI();
+
+ if (requestURI.contains(".nocache.")) {
+ // Tell browser to disable caching of the content.
+ Date now = new Date();
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ httpResponse.setDateHeader("Date", now.getTime());
+ httpResponse.setDateHeader("Expires", now.getTime() - 1);
+ httpResponse.setHeader("Pragma", "no-cache");
+ httpResponse.setHeader("Cache-Control", "public, max-age=0, must-revalidate");
+ } else if (requestURI.contains(".cache.")) {
+ // Tell browser to cache the content for one year.
+ Date now = new Date();
+ HttpServletResponse httpResponse = (HttpServletResponse) response;
+ httpResponse.setDateHeader("Date", now.getTime());
+ httpResponse.setDateHeader("Expires", now.getTime() + MILLISECONDS_IN_ONE_YEAR);
+ httpResponse.setHeader("Cache-Control", "max-age=" + SECONDS_IN_ONE_YEAR);
+ }
+
+ filterChain.doFilter(request, response);
+ }
+
+ public void destroy() {
+ return;
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index ac247b1..d06fa58 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -7,6 +7,15 @@
<display-name>RHQ GUI</display-name>
+ <filter>
+ <filter-name>CacheControlFilter</filter-name>
+ <filter-class>org.rhq.enterprise.gui.coregui.server.filter.CacheControlFilter</filter-class>
+ </filter>
+
+ <filter-mapping>
+ <filter-name>CacheControlFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
<servlet>
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI RoleGWTService</servlet-name>
commit 2dfc4a34aa925d2683bb6dff736e5154fbe6c443
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Wed Mar 23 13:21:21 2011 -0400
some changes to locators in Table sub-widgets to make sure locators are hierarchal
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
index 9d1c1ba..c68da84 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
@@ -458,11 +458,12 @@ public class ConfigurationEditor extends LocatableVLayout {
Menu menu = new LocatableMenu(toolStrip.extendLocatorId("JumpMenu"));
for (SectionStackSection section : sectionStack.getSections()) {
MenuItem item = new MenuItem(section.getTitle());
+ item.setAttribute("name", section.getName());
item.addClickHandler(new ClickHandler() {
public void onClick(MenuItemClickEvent event) {
- int x = event.getMenu().getItemNum(event.getItem());
- sectionStack.expandSection(x);
- sectionStack.showSection(x);
+ int index = event.getMenu().getItemNum(event.getItem());
+ sectionStack.expandSection(index);
+ sectionStack.showSection(index);
}
});
menu.addItem(item);
@@ -491,13 +492,14 @@ public class ConfigurationEditor extends LocatableVLayout {
section = new SectionStackSection(MSG.common_title_generalProp());
section.setExpanded(true);
} else {
- section = new SectionStackSection(
- "<div style=\"float:left; font-weight: bold;\">"
+ String title = "<div style=\"float:left; font-weight: bold;\">"
+ group.getDisplayName()
+ "</div>"
+ (group.getDescription() != null ? ("<div style='padding-left: 10px; font-weight: normal; font-size: smaller; float: left;'>"
- + " - " + group.getDescription() + "</div>")
- : ""));
+ + " - " + group.getDescription() + "</div>")
+ : "");
+ section = new SectionStackSection(title);
+ section.setName(group.getName());
section.setExpanded(!group.isDefaultHidden());
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index 4864145..b22a79a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -52,7 +52,6 @@ import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.DoubleClickEvent;
import com.smartgwt.client.widgets.events.DoubleClickHandler;
-import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.HiddenItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
@@ -72,7 +71,6 @@ import com.smartgwt.client.widgets.layout.LayoutSpacer;
import com.smartgwt.client.widgets.menu.IMenuButton;
import com.smartgwt.client.widgets.menu.MenuItem;
import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent;
-import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
@@ -80,11 +78,13 @@ import org.rhq.enterprise.gui.coregui.client.RefreshableView;
import org.rhq.enterprise.gui.coregui.client.components.form.SearchBarItem;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIMenuButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableMenu;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -133,8 +133,8 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
private boolean tableActionDisableOverride = false;
protected List<Canvas> extraWidgetsAboveFooter = new ArrayList<Canvas>();
protected List<Canvas> extraWidgetsInMainFooter = new ArrayList<Canvas>();
- private ToolStrip footer;
- private ToolStrip footerExtraWidgets;
+ private LocatableToolStrip footer;
+ private LocatableToolStrip footerExtraWidgets;
public Table(String locatorId) {
this(locatorId, null, null, null, null, true);
@@ -210,7 +210,7 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
protected void onInit() {
super.onInit();
- contents = new LocatableVLayout(extendLocatorId("tableContents"));
+ contents = new LocatableVLayout(extendLocatorId("Contents"));
contents.setWidth100();
contents.setHeight100();
//contents.setOverflow(Overflow.AUTO);
@@ -287,7 +287,7 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
setTableTitle(this.tableTitle);
if (showHeader) {
- titleLayout = new HLayout();
+ titleLayout = new LocatableHLayout(contents.extendLocatorId("Title"));
titleLayout.setAutoHeight();
titleLayout.setAlign(VerticalAlignment.BOTTOM);
contents.addMember(titleLayout, 0);
@@ -301,16 +301,16 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
// Footer
- // A second toolstrip that optionaly appears before the main footer - it will contain extra widgets.
+ // A second toolstrip that optionally appears before the main footer - it will contain extra widgets.
// This is hidden from view unless extra widgets are actually added to the table above the main footer.
- this.footerExtraWidgets = new ToolStrip();
+ this.footerExtraWidgets = new LocatableToolStrip(contents.extendLocatorId("FooterExtraWidgets"));
footerExtraWidgets.setPadding(5);
footerExtraWidgets.setWidth100();
footerExtraWidgets.setMembersMargin(15);
footerExtraWidgets.hide();
contents.addMember(footerExtraWidgets);
- this.footer = new ToolStrip();
+ this.footer = new LocatableToolStrip(contents.extendLocatorId("Footer"));
footer.setPadding(5);
footer.setWidth100();
footer.setMembersMargin(15);
@@ -747,7 +747,17 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
public void addTableAction(String locatorId, String title, String confirmation,
LinkedHashMap<String, ? extends Object> valueMap, TableAction tableAction) {
- TableActionInfo info = new TableActionInfo(locatorId, title, confirmation, valueMap, tableAction);
+ // If the specified locator ID is qualified, strip off the ancestry prefix, so we can make sure its locator ID
+ // extends the footer's locator ID as it should.
+ int underscoreIndex = locatorId.lastIndexOf('_');
+ String unqualifiedLocatorId;
+ if (underscoreIndex >= 0 && underscoreIndex != (locatorId.length() - 1)) {
+ unqualifiedLocatorId = locatorId.substring(underscoreIndex + 1);
+ } else {
+ unqualifiedLocatorId = locatorId;
+ }
+ TableActionInfo info = new TableActionInfo(this.footer.extendLocatorId(unqualifiedLocatorId), title,
+ confirmation, valueMap, tableAction);
tableActions.add(info);
}
@@ -894,7 +904,7 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
*
* @author Joseph Marques
*/
- private static class TableFilter extends DynamicForm implements KeyPressHandler, ChangedHandler,
+ private static class TableFilter extends LocatableDynamicForm implements KeyPressHandler, ChangedHandler,
com.google.gwt.event.dom.client.KeyPressHandler {
private Table<?> table;
@@ -902,7 +912,7 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
private HiddenItem hiddenItem;
public TableFilter(Table<?> table) {
- super();
+ super(table.extendLocatorId("TableFilter"));
setWidth100();
setPadding(5);
this.table = table;
@@ -1050,4 +1060,5 @@ public class Table<DS extends RPCDataSource> extends LocatableHLayout implements
protected SearchSubsystem getSearchSubsystem() {
return null;
}
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java
index e090640..01921e6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java
@@ -39,7 +39,7 @@ public class ObjectFilter {
for (Object object : collection) {
filterFields(object, goodFields);
}
- com.allen_sauer.gwt.log.client.Log.info("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
+ Log.debug("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
return collection;
}
@@ -80,4 +80,5 @@ public class ObjectFilter {
}
return -1;
}
+
}
commit 42eaa4d6e29b325f94539bcb87d6f2155706df18
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 13:04:27 2011 -0400
remove unused, obsolete code
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
index 522c9cd..14f9a39 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tagging/TagEditorView.java
@@ -66,12 +66,10 @@ public class TagEditorView extends LocatableLayout {
private LinkedHashSet<Tag> tags = new LinkedHashSet<Tag>();
- private boolean editing = false;
private boolean readOnly;
private TagsChangedCallback callback;
private boolean vertical = false;
- private boolean alwaysEdit = false;
public TagEditorView(String locatorId, Set<Tag> tags, boolean readOnly, TagsChangedCallback callback) {
super(locatorId);
@@ -96,11 +94,6 @@ public class TagEditorView extends LocatableLayout {
this.vertical = vertical;
}
- public void setAlwaysEdit(boolean alwaysEdit) {
- this.alwaysEdit = alwaysEdit;
- this.editing = true;
- }
-
@Override
protected void onDraw() {
super.onDraw();
@@ -122,7 +115,6 @@ public class TagEditorView extends LocatableLayout {
for (final Tag tag : tags) {
LocatableHLayout tagLayout = new LocatableHLayout(((Locatable) layout).extendLocatorId(tag.getName()));
tagLayout.setHeight(18);
- //tagLayout.set
HTMLFlow tagString = new HTMLFlow("<a href=\"" + LinkManager.getTagLink(tag.toString()) + "\">"
+ tag.toString() + "</a>");
commit 15099180a4a54d3d973ab8fe16116787e929c33b
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 12:36:09 2011 -0400
be able to view details of the current message in the message bar via right-mouse context menu
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
index 39648a2..f000569 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
@@ -24,14 +24,22 @@ import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.events.DoubleClickEvent;
import com.smartgwt.client.widgets.events.DoubleClickHandler;
+import com.smartgwt.client.widgets.events.RightMouseDownEvent;
+import com.smartgwt.client.widgets.events.RightMouseDownHandler;
+import com.smartgwt.client.widgets.menu.Menu;
+import com.smartgwt.client.widgets.menu.MenuItem;
+import com.smartgwt.client.widgets.menu.events.ClickHandler;
+import com.smartgwt.client.widgets.menu.events.MenuItemClickEvent;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableLabel;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableMenu;
/**
* A bar for displaying a message at the top of a page - the equivalent of the JSF h:messages component.
- * The message will be displayed for 30 seconds and then will be automatically cleared.
+ * The message will be displayed for 30 seconds and then will be automatically cleared unless
+ * it is a sticky message.
*
* @author Ian Springer
* @author Jay Shaughnessy
@@ -39,32 +47,42 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableLabel;
public class MessageBar extends LocatableHLayout implements MessageCenter.MessageListener {
private static final String LOCATOR_ID = "MessageBar";
private static final int AUTO_HIDE_DELAY_MILLIS = 30000;
-
- private LocatableLabel label = new LocatableLabel(extendLocatorId("Label"));
- private Message stickyMessage;
-
private static final String NON_BREAKING_SPACE = " ";
+ private LocatableLabel label;
+ private Message currentMessage;
+ private Message stickyMessage; // this message will always be shown until dismissed by user.
+ private Menu showDetailsMenu;
+
public MessageBar() {
super(LOCATOR_ID);
-
setOverflow(Overflow.VISIBLE);
- }
-
- @Override
- protected void onDraw() {
- super.onDraw();
-
setWidth100();
setAlign(Alignment.CENTER);
+ label = new LocatableLabel(extendLocatorId("Label"));
label.setAlign(Alignment.CENTER);
label.setWidth("600px");
label.setHeight("30px");
label.setCanSelectText(true);
+ addMember(label);
+
+ showDetailsMenu = new LocatableMenu(extendLocatorId("showDetailsMenu"));
+ MenuItem showDetailsMenuItem = new MenuItem(MSG.view_messageCenter_messageBarShowDetails());
+ showDetailsMenuItem.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(MenuItemClickEvent event) {
+ MessageCenterView.showDetails(MessageBar.this.currentMessage);
+ }
+ });
+ showDetailsMenu.setItems(showDetailsMenuItem);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
setLabelEmpty();
- addMember(label);
// sometimes it's annoying to have the error message hang around for too long;
// let the user click the message so it goes away on demand
@@ -75,12 +93,22 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
}
});
+ addRightMouseDownHandler(new RightMouseDownHandler() {
+ @Override
+ public void onRightMouseDown(RightMouseDownEvent event) {
+ if (MessageBar.this.currentMessage != null) {
+ showDetailsMenu.showContextMenu();
+ }
+ }
+ });
+
CoreGUI.getMessageCenter().addMessageListener(this);
}
@Override
public void onMessage(Message message) {
if (!message.isBackgroundJobResult()) {
+ this.currentMessage = message;
updateLabel(message);
// Auto-clear the message after some time unless it's been designated as sticky.
@@ -91,6 +119,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
@Override
public void run() {
clearMessage(false);
+ // if we had a sticky message before, show it again, now that our more recent message has gone away
if (stickyMessage != null) {
updateLabel(stickyMessage);
}
@@ -101,9 +130,9 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
}
public void clearMessage(boolean clearSticky) {
+ this.currentMessage = null;
setLabelEmpty();
markForRedraw();
-
if (clearSticky) {
this.stickyMessage = null;
}
@@ -123,13 +152,6 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
String styleName = (contents != null) ? message.getSeverity().getStyle() : null;
label.setStyleName(styleName);
- // TODO: perhaps just set the text to green/orange/red along with the proper icon and not have the defined
- // color block...
-
- // TODO: Create some custom edge images in green, yellow, red, etc. so we can add nice rounded corners to the
- // label.
- //label.setShowEdges(true);
-
String icon = (contents != null) ? message.getSeverity().getIcon() : null;
label.setIcon(icon);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
index f9ac79c..f861a37 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java
@@ -317,8 +317,18 @@ public class MessageCenterView extends Table implements MessageCenter.MessageLis
return record;
}
- private void showDetails(Message message) {
- DynamicForm form = new LocatableDynamicForm(extendLocatorId("Details"));
+ /**
+ * This is a static utility method that is package protected so the message center view
+ * and the message bar can pop up a dialog showing a message's details.
+ *
+ * @param message the message whose details are to be shown
+ */
+ static void showDetails(Message message) {
+ if (message == null) {
+ return;
+ }
+
+ DynamicForm form = new LocatableDynamicForm("MessageCenterDetailsForm");
form.setWrapItemTitles(false);
form.setAlign(Alignment.LEFT);
@@ -340,7 +350,7 @@ public class MessageCenterView extends Table implements MessageCenter.MessageLis
form.setItems(title, severity, date, detail);
- final Window dialogWin = new LocatableWindow(this.extendLocatorId("MessageWindow"));
+ final Window dialogWin = new LocatableWindow("MessageCenterDetailsWindow");
dialogWin.setTitle(MSG.common_title_message());
dialogWin.setWidth(600);
dialogWin.setHeight(400);
@@ -360,7 +370,7 @@ public class MessageCenterView extends Table implements MessageCenter.MessageLis
});
}
- private String getSeverityIcon(Message.Severity severity) {
+ private static String getSeverityIcon(Message.Severity severity) {
if (severity == null) {
severity = Severity.Blank;
}
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 678ba25..56b7270 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
@@ -2096,3 +2096,4 @@ view_messageCenter_messageTime = Time
view_messageCenter_messageSeverity = Severity
view_messageCenter_messageDetail = Detail
view_messageCenter_stackTraceFollows = --- STACK TRACE FOLLOWS ---
+view_messageCenter_messageBarShowDetails = Show Details
commit e11fec9247d8995bb668d040b119f0a657dc983a
Merge: 58043cd 308f9f8
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Wed Mar 23 16:47:59 2011 +0100
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 308f9f8d0ea4e019c3439d79e259a20f8ee39162
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Mar 23 10:09:24 2011 -0400
trivial: add import lost in merge
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
index 7c748fa..898c04b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
@@ -66,6 +66,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGro
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
import org.rhq.enterprise.gui.coregui.client.util.BrowserUtility;
+import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
commit b649b2f2f9853879ec2494df9510b04cbaac0dd7
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Wed Mar 23 10:09:06 2011 -0400
More Tabbing Fun
There are multiple ways that during one rendering of tabs
we can get a request for another. We need to shut down user and smartgwt
initiated tab selection events until we're ready (until we've finished the
previous rendering). Hopefully this finally gets it right. I added some more
comments in this for the next unlucky soul (well, probably me...).
I think I also may have gotten rid of some unwanted, duplicate rendering.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
index 7413dae..6329f67 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
@@ -38,6 +38,8 @@ public class TwoLevelTabSet extends NamedTabSet implements TabSelectedHandler, T
/** maps Tab locator IDs to Tabs. */
private Map<String, TwoLevelTab> hiddenTabs = new LinkedHashMap<String, TwoLevelTab>();
+ private boolean ignoreSelectEvents = false;
+
public TwoLevelTabSet(String locatorId) {
super(locatorId);
}
@@ -109,7 +111,15 @@ public class TwoLevelTabSet extends NamedTabSet implements TabSelectedHandler, T
return m.addHandler(TwoLevelTabSelectedEvent.TYPE, handler);
}
+ // This is invoked by smartgwt when the user clicks on a Tab in the TabSet, or TabSet.selectTab() is called. It
+ // sets the current SubTab and fires an event to notify AbstractTwoLevelTabSet that a tab/subtab has been selected.
public void onTabSelected(TabSelectedEvent tabSelectedEvent) {
+ // if requested, ignore select tab notifications. smartgwt can generate unwanted notifications
+ // while we manipulate the tabset (e.g. when hiding the current tab). We want to manage this at a higher level
+ if (isIgnoreSelectEvents()) {
+ return;
+ }
+
TwoLevelTab tab = (TwoLevelTab) getSelectedTab();
SubTab currentSubTab = tab.getLayout().getCurrentSubTab();
if (null != currentSubTab) {
@@ -119,7 +129,15 @@ public class TwoLevelTabSet extends NamedTabSet implements TabSelectedHandler, T
}
}
+ // This is invoked by an event fired in SubTabLayout when the user clicks a SubTab button. It sets the Tab
+ // and fires an event to notify AbstractTwoLevelTabSet that a tab/subtab has been selected.
public void onTabSelected(TwoLevelTabSelectedEvent tabSelectedEvent) {
+ // if requested, ignore select tab notifications. smartgwt can generate unwanted notifications
+ // while we manipulate the tabset (e.g. when hiding the current tab). We want to manage this at a higher level
+ if (isIgnoreSelectEvents()) {
+ return;
+ }
+
tabSelectedEvent.setTabNum(getSelectedTabNumber());
Tab tab = getSelectedTab();
tabSelectedEvent.setId(this.getTabByTitle(tab.getTitle()).getName());
@@ -156,6 +174,14 @@ public class TwoLevelTabSet extends NamedTabSet implements TabSelectedHandler, T
}
}
+ public boolean isIgnoreSelectEvents() {
+ return ignoreSelectEvents;
+ }
+
+ public void setIgnoreSelectEvents(boolean ignoreSelectEvents) {
+ this.ignoreSelectEvents = ignoreSelectEvents;
+ }
+
@Override
public void destroy() {
// add the hidden tabs back under the TabSet. This will get them destroyed by smartgwt when the tabset
@@ -168,4 +194,5 @@ public class TwoLevelTabSet extends NamedTabSet implements TabSelectedHandler, T
}
super.destroy();
}
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
index e303c50..04d6410 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
@@ -133,18 +133,21 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
}
+ // This is invoked by events fired in TwoLevelTabSet whenever a tab/subtab combo has been selected.
public void onTabSelected(TwoLevelTabSelectedEvent tabSelectedEvent) {
- // We want to finish the tab selection process, which may involve async loading of content,
- // before allowing more tab selection. This avoids potential tab "looping" that happens when a new
- // tab is selected before the previous one could finish loading. So, disable the tab set here, and
- // re-enable it later when the tab content is actuall rendered (see selectTab).
+ // Establishing the proper tabbed view may involve tab add/remove and async loading of content. While doing this
+ // we want to prevent user initiation of another tab change. To block users from clicking tabs we
+ // disable the tab set. We re-enable the tabset when safe. (see this method and also selectTab()).
if (getSelectedItemId() == null) {
this.tabSet.disable();
CoreGUI.goToView(History.getToken());
+
} else {
- String tabPath = "/" + tabSelectedEvent.getId() + "/" + tabSelectedEvent.getSubTabId();
+ String tabId = tabSelectedEvent.getId();
+ String subTabId = tabSelectedEvent.getSubTabId();
+ String tabPath = "/" + tabId + "/" + subTabId;
String path = this.baseViewPath + "/" + getSelectedItemId() + tabPath;
// If the selected tab or subtab is not already the current history item, the user clicked on the tab, rather
@@ -153,11 +156,16 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
if (!(History.getToken().equals(path) || History.getToken().startsWith(path + "/"))) {
this.tabSet.disable();
CoreGUI.goToView(path);
+
+ } else {
+ // ensure the tabset is enabled if we're not going to be doing any further tab selection
+ this.tabSet.enable();
}
}
}
public void renderView(final ViewPath viewPath) {
+
new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() {
@Override
public void onPermissionsLoaded(Set<Permission> permissions) {
@@ -168,6 +176,7 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
private void renderTabs(final ViewPath viewPath) {
+
// e.g. #Resource/10010/Summary/Overview
// ^ current path
final int id = Integer.parseInt(viewPath.getCurrent().getPath());
@@ -191,10 +200,19 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
if (getSelectedItemId() == null || getSelectedItemId() != id) {
- loadSelectedItem(id, viewPath);
+ // A different entity (resource or group), load it and try to navigate to the same tabs if possible.
+ // Changing entities may change the available tabs as the same tab set may not be supported by the
+ // new entity's type. To maintain a valid tab selection for the TabSet, smartgwt will generate an
+ // events if the current tab is removed (which can happen say, when navigating from a resource of type A
+ // to a resource of type B). We need to ignore tab selection events generated by smartgwt because we
+ // handle this at a higher level. To do this we explicitly set events to be be ignored. We re-enable
+ // the event handling when safe. (see selectTab()).
+ this.tabSet.setIgnoreSelectEvents(true);
+ this.loadSelectedItem(id, viewPath);
+
} else {
// Same Resource - just switch tabs.
- selectTab(this.tabName, this.subTabName, viewPath);
+ this.selectTab(this.tabName, this.subTabName, viewPath);
}
}
@@ -210,23 +228,36 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
TwoLevelTab tab = (tabName != null) ? this.tabSet.getTabByName(tabName) : null;
SubTab subtab = null;
+ // if the requested tab is not available for the tabset then select the defaults (firing a new event)
if (tab == null || tab.getDisabled()) {
+ this.tabSet.setIgnoreSelectEvents(false);
subtab = selectDefaultTabAndSubTab();
- } else {
- // Do *not* select the tab and trigger the tab selected event until the subtab has been selected first.
- subtab = (subtabName != null) ? tab.getSubTabByName(subtabName) : tab.getDefaultSubTab();
- if (subtab == null || tab.getLayout().isSubTabDisabled(subtab)) {
- // due to our attempt to perform sticky tabbing we may request an invalid subtab when
- // switching resources. Just silently go to the default tab/subtab.
- subtab = tab.getLayout().getDefaultSubTab();
- }
- tab.getLayout().selectSubTab(subtab);
-
- // Now that the subtab has been selected, select the tab (this will cause a tab selected event to fire).
+ return;
+ }
+
+ // the tab is available, now get the subtab
+ subtab = (subtabName != null) ? tab.getSubTabByName(subtabName) : tab.getDefaultSubTab();
+
+ // due to our attempt to perform sticky tabbing we may request an invalid subtab when
+ // switching resources. If the requested subtab is not available the select the default subtab for the tab
+ if (subtab == null || tab.getLayout().isSubTabDisabled(subtab)) {
+ subtab = tab.getLayout().getDefaultSubTab();
+ }
+
+ // select the subTab (this does not fire an event, just sets the subtab)
+ tab.getLayout().selectSubTab(subtab);
+
+ // now that the tab/subtab is determined, if currently selected tab is not the desired tab, then
+ // select it now (firing a new event).
+ if (!tab.equals(this.tabSet.getSelectedTab())) {
+ this.tabSet.setIgnoreSelectEvents(false);
this.tabSet.selectTab(tab);
+ return;
}
+ // if the desired tab/subtab are already selected, now we can render the subtab canvas
Canvas subView = subtab.getCanvas();
+
if (subView instanceof BookmarkableView) {
// Handle any remaining view items (e.g. id of a selected item in a subtab that contains a Master-Details view).
((BookmarkableView) subView).renderView(viewPath);
@@ -237,8 +268,10 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
// ensure the tabset is enabled (disabled in onTabSelected), and redraw
+ this.tabSet.setIgnoreSelectEvents(false);
this.tabSet.enable();
this.tabSet.markForRedraw();
+
} catch (Exception e) {
this.tabSet.enable();
Log.info("Failed to select tab " + tabName + "/" + subtabName + ": " + e);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 38e09eb..91f617d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -85,7 +85,6 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
public static class Tab {
public static final String OPERATIONS = "Operations";
public static final String CONFIGURATION = "Configuration";
- // TODO: other tabs
}
public static class OperationsSubTab {
@@ -142,6 +141,8 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
public ResourceDetailView(String locatorId) {
super(locatorId, BASE_VIEW_PATH);
+
+ // hide until we have our tabs in place
this.hide();
}
commit 48ec8e2feb895608ba589bfd36406f939a5f5e47
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Mar 22 17:33:26 2011 -0400
Resource/Group dash AutoRefreshPortlets were continuing to refresh even
when the Summary/Activity subtab was not being viewed. This generates a lot
of background work and db round trips. The reason is that we don't
destroy a subtab's canvas if the user stays within the same entity detail
view (on the assumption that the user may well revisit the same subtab).
Now, skip the refresh request if the subtab canvas is not visible.
- consolidate some autoresreshportlet logic into a util class
- add isRefreshing() to interface, and also skip the refresh request if the
portlet is still refreshing from a previous request (not every ARP currently
has this implemented)
- get rid of some warnings/unused code
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortlet.java
index 9b23871..897c1b4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortlet.java
@@ -32,4 +32,10 @@ public interface AutoRefreshPortlet extends Portlet {
* should be canceled when the portlet goes out of scope (typically in an onDestroy() override).
*/
void startRefreshCycle();
+
+ /**
+ * @return true if the portlet is currently responding to a refresh (i.e. reloading data). This can be used
+ * to ignore refresh requests until a prior request is completed.
+ */
+ boolean isRefreshing();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortletUtil.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortletUtil.java
new file mode 100644
index 0000000..4977de6
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/AutoRefreshPortletUtil.java
@@ -0,0 +1,72 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2009 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.dashboard;
+
+import com.google.gwt.user.client.Timer;
+import com.smartgwt.client.widgets.Canvas;
+
+import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
+import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
+
+/**
+ * @author Jay Shaughnessy
+ */
+public class AutoRefreshPortletUtil {
+
+ public static Timer startRefreshCycle(final AutoRefreshPortlet portlet, final Canvas autoRefreshPortletCanvas,
+ Timer refreshTimer) {
+
+ final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
+
+ //cancel any existing timer
+ if (null != refreshTimer) {
+ refreshTimer.cancel();
+ }
+
+ if (refreshInterval >= MeasurementUtility.MINUTES) {
+
+ refreshTimer = new Timer() {
+ public void run() {
+
+ // if the portlet is already refreshing or if the portlet is not currently on screen then
+ // don't bother doing the work. this protects against unnecessary or unwanted db queries
+ // being performed in the background.
+ if (!portlet.isRefreshing() && autoRefreshPortletCanvas.isVisible()) {
+ autoRefreshPortletCanvas.redraw();
+ }
+ }
+ };
+
+ refreshTimer.scheduleRepeating(refreshInterval);
+ }
+
+ return refreshTimer;
+ }
+
+ public static void onDestroy(final Canvas portlet, Timer refreshTimer) {
+
+ if (refreshTimer != null) {
+
+ refreshTimer.cancel();
+ }
+
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
index cc14736..740d549 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet.java
@@ -43,12 +43,11 @@ import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
-import org.rhq.enterprise.gui.coregui.client.Messages;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.alert.AlertHistoryView;
import org.rhq.enterprise.gui.coregui.client.alert.AlertPortletConfigurationDataSource;
import org.rhq.enterprise.gui.coregui.client.components.measurement.CustomConfigMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -56,7 +55,6 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.PortletConfigurationEditorComponent;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.recent.alerts.PortletAlertSelector;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -216,7 +214,6 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
@Override
public void onSubmitValues(SubmitValuesEvent event) {
- String selectedValue;
//alert severity
portletConfig = AbstractActivityView.saveAlertPrioritySettings(alertPrioritySelector, portletConfig);
@@ -260,37 +257,21 @@ public class GroupAlertsPortlet extends AlertHistoryView implements CustomSettin
}
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
+
@Override
protected void setupTableInteractions(boolean hasWriteAccess) {
// The portlet is a "subsystem" view. Meaning the alerts displayed can be from any accessible group for
@@ -363,7 +344,6 @@ final class AlertResourceSelectorRegion extends LocatableVLayout {
this.currentlyAssignedIds = assigned;
}
- private static final Messages MSG = CoreGUI.getMessages();
private PortletAlertSelector selector = null;
private Integer[] currentlyAssignedIds;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet3.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet3.java
index 7c166ad..2a2b3ac 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet3.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupAlertsPortlet3.java
@@ -46,9 +46,9 @@ import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.measurement.CustomConfigMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -60,7 +60,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
import org.rhq.enterprise.gui.coregui.client.util.GwtRelativeDurationConverter;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -207,10 +206,10 @@ public class GroupAlertsPortlet3 extends LocatableVLayout implements CustomSetti
if (property != null) {
String currentSetting = property.getStringValue();
if (currentSetting.trim().isEmpty() || currentSetting.equalsIgnoreCase("5")) {
- PageControl pageControl = new PageControl(0, 5);
+ //PageControl pageControl = new PageControl(0, 5);
pc.setPageSize(5);
} else {
- PageControl pageControl = new PageControl(0, Integer.valueOf(currentSetting));
+ //PageControl pageControl = new PageControl(0, Integer.valueOf(currentSetting));
pc.setPageSize(Integer.valueOf(currentSetting));
}
}
@@ -356,40 +355,21 @@ public class GroupAlertsPortlet3 extends LocatableVLayout implements CustomSetti
return customSettings;
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- loadData();
- redraw();
- }
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
- refreshTimer.cancel();
- }
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
index 2c4fdc1..4d163ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupBundleDeploymentsPortlet.java
@@ -43,8 +43,8 @@ import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -55,7 +55,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
import org.rhq.enterprise.gui.coregui.client.util.GwtRelativeDurationConverter;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -263,37 +262,21 @@ public class GroupBundleDeploymentsPortlet extends LocatableVLayout implements C
});
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- loadData();
- redraw();
- }
- }
- };
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
+
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
index ec4dae7..3b069c5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupEventsPortlet.java
@@ -39,9 +39,9 @@ import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.measurement.CustomConfigMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -292,39 +292,21 @@ public class GroupEventsPortlet extends LocatableVLayout implements CustomSettin
});
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- redraw();
- }
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
- refreshTimer.cancel();
- }
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
index 5cf7b36..7c748fa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupMetricsPortlet.java
@@ -51,9 +51,9 @@ import org.rhq.core.domain.resource.group.GroupCategory;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.measurement.CustomConfigMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -66,7 +66,6 @@ import org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.ResourceGro
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.resource.disambiguation.ReportDecorator;
import org.rhq.enterprise.gui.coregui.client.util.BrowserUtility;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -454,39 +453,21 @@ public class GroupMetricsPortlet extends LocatableVLayout implements CustomSetti
recentMeasurementsContent.markForRedraw();
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- loadData();
- redraw();
- }
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
+
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
index ed3fb42..265e200 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOobsPortlet.java
@@ -40,8 +40,8 @@ import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -51,7 +51,6 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.PortletConfigura
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
import org.rhq.enterprise.gui.coregui.client.util.GwtRelativeDurationConverter;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -243,40 +242,21 @@ public class GroupOobsPortlet extends LocatableVLayout implements CustomSettings
});
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- loadData();
- redraw();
- }
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
- refreshTimer.cancel();
- }
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
index 37813ac..10031d1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupOperationsPortlet.java
@@ -48,9 +48,9 @@ import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.measurement.CustomConfigMeasurementRangeEditor;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -296,37 +296,21 @@ public class GroupOperationsPortlet extends LocatableVLayout implements CustomSe
}
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
+
private boolean isAutoGroup() {
return ResourceGroupDetailView.AUTO_GROUP_VIEW_PATH.equals(getBaseViewPath());
}
@@ -355,6 +339,7 @@ class GroupOperationsCriteriaHistoryListView extends GroupOperationHistoryListVi
private ResourceGroupComposite composite;
+ @SuppressWarnings("unchecked")
public GroupOperationsCriteriaHistoryListView(String locatorId, GroupOperationsCriteriaDataSource dataSource,
String title, Criteria criteria, ResourceGroupComposite composite) {
super(locatorId, composite);
@@ -363,6 +348,7 @@ class GroupOperationsCriteriaHistoryListView extends GroupOperationHistoryListVi
setShowFooterRefresh(false); //disable footer refresh
}
+ @SuppressWarnings("unchecked")
public void setDatasource(GroupOperationsCriteriaDataSource datasource) {
super.setDataSource(datasource);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
index 30c21a7..e58b1da 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/groups/GroupPkgHistoryPortlet.java
@@ -43,8 +43,8 @@ import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -54,7 +54,6 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.PortletConfigura
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.common.detail.summary.AbstractActivityView;
import org.rhq.enterprise.gui.coregui.client.util.GwtRelativeDurationConverter;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableCanvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -260,40 +259,21 @@ public class GroupPkgHistoryPortlet extends LocatableVLayout implements CustomSe
});
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
- if (!currentlyLoading) {
- loadData();
- redraw();
- }
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
- refreshTimer.cancel();
- }
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return this.currentlyLoading;
+ }
+
@Override
public void redraw() {
super.redraw();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java
index efa62f7..37d57df 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/queue/AutodiscoveryPortlet.java
@@ -31,15 +31,14 @@ import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery.AutodiscoveryQueueDataSource;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.discovery.ResourceAutodiscoveryView;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
@@ -197,37 +196,19 @@ public class AutodiscoveryPortlet extends ResourceAutodiscoveryView implements C
return dataSource;
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java
index f14d791..556ee6f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java
@@ -37,11 +37,11 @@ import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSearchView;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
/**
* @author Greg Hinkle
@@ -127,36 +127,19 @@ public class FavoriteResourcesPortlet extends ResourceSearchView implements Auto
}
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+
+ public boolean isRefreshing() {
+ return false;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
index 665898e..fed9070 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/alerts/RecentAlertsPortlet.java
@@ -46,11 +46,10 @@ import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
-import org.rhq.enterprise.gui.coregui.client.Messages;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.alert.AlertHistoryView;
import org.rhq.enterprise.gui.coregui.client.alert.AlertPortletDataSource;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -566,39 +565,21 @@ public class RecentAlertsPortlet extends AlertHistoryView implements CustomSetti
}
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
+
@Override
protected void setupTableInteractions(boolean hasWriteAccess) {
// The portlet is a "subsystem" view. Meaning the alerts displayed can be from any accessible group for
@@ -655,7 +636,6 @@ class AlertResourceSelectorRegion extends LocatableVLayout {
this.currentlyAssignedIds = assigned;
}
- private static final Messages MSG = CoreGUI.getMessages();
private PortletAlertSelector selector = null;
private Integer[] currentlyAssignedIds;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
index e63c0c7..e570a04 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/imported/RecentlyAddedResourcesPortlet.java
@@ -37,14 +37,13 @@ import com.smartgwt.client.widgets.tree.TreeGrid;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.dashboard.DashboardPortlet;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
public class RecentlyAddedResourcesPortlet extends LocatableVLayout implements CustomSettingsPortlet,
@@ -252,36 +251,18 @@ public class RecentlyAddedResourcesPortlet extends LocatableVLayout implements C
return dataSource;
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+
+ public boolean isRefreshing() {
+ return false;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
index 69a36a0..c839109 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
@@ -43,8 +43,8 @@ import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertySimpleType;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -52,7 +52,6 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.AncestryUtil;
import org.rhq.enterprise.gui.coregui.client.operation.RecentOperationsDataSource;
import org.rhq.enterprise.gui.coregui.client.operation.ScheduledOperationsDataSource;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableLabel;
@@ -513,36 +512,18 @@ public class OperationsPortlet extends LocatableVLayout implements CustomSetting
return this.scheduledOperationsGrid;
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+
+ public boolean isRefreshing() {
+ return false;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
index bd28719..8fcaba0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
@@ -49,10 +49,10 @@ import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertySimpleType;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.components.table.Table;
import org.rhq.enterprise.gui.coregui.client.components.table.TableWidget;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.CustomSettingsPortlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
@@ -340,39 +340,21 @@ public class ProblemResourcesPortlet extends Table<ProblemResourcesDataSource> i
return timeRange;
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
+
}
/**Construct table widget Label to display timerange settings used with latest datasource query.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java
index 70fbc3e..3466bb6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/summary/InventorySummaryPortlet.java
@@ -38,14 +38,13 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.core.domain.resource.InventorySummary;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortlet;
+import org.rhq.enterprise.gui.coregui.client.dashboard.AutoRefreshPortletUtil;
import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory;
import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceBossGWTServiceAsync;
-import org.rhq.enterprise.gui.coregui.client.util.MeasurementUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -172,37 +171,18 @@ public class InventorySummaryPortlet extends LocatableVLayout implements AutoRef
}
}
- @Override
public void startRefreshCycle() {
- //current setting
- final int refreshInterval = UserSessionManager.getUserPreferences().getPageRefreshInterval();
-
- //cancel any existing timer
- if (refreshTimer != null) {
- refreshTimer.cancel();
- }
-
- if (refreshInterval >= MeasurementUtility.MINUTES) {
-
- refreshTimer = new Timer() {
- public void run() {
-
- redraw();
- }
- };
-
- refreshTimer.scheduleRepeating(refreshInterval);
- }
+ refreshTimer = AutoRefreshPortletUtil.startRefreshCycle(this, this, refreshTimer);
}
@Override
protected void onDestroy() {
- if (refreshTimer != null) {
-
- refreshTimer.cancel();
- }
+ AutoRefreshPortletUtil.onDestroy(this, refreshTimer);
super.onDestroy();
}
+ public boolean isRefreshing() {
+ return false;
+ }
}
commit 3cd15d95af19b8d07e537898f0fe6acb80478ae9
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Mar 23 10:06:21 2011 -0400
BZ 690110 - group tree context menu resource config link is fixed
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupContextMenu.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupContextMenu.java
index 43b3700..38edb6e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupContextMenu.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupContextMenu.java
@@ -164,8 +164,8 @@ public class ResourceGroupContextMenu extends LocatableMenu {
} else if (isAutoCluster) {
CoreGUI.goToView(LinkManager.getAutoClusterTabLink(group.getId(), "Configuration", "Current"));
} else {
- CoreGUI.goToView(LinkManager.getResourceGroupTabLink(group.getId(), "Inventory",
- "ConnectionSettings"));
+ CoreGUI
+ .goToView(LinkManager.getResourceGroupTabLink(group.getId(), "Configuration", "Current"));
}
}
});
commit 58043cdc58274c84f0b515e568afd5a2ff0550b2
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Wed Mar 23 11:18:48 2011 +0100
Allow setting a resource-config
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/StandaloneContainer.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/StandaloneContainer.java
index b6a1d30..4e4e103 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/StandaloneContainer.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/StandaloneContainer.java
@@ -36,6 +36,7 @@ import java.util.Set;
import java.util.Stack;
import org.rhq.core.clientapi.agent.PluginContainerException;
+import org.rhq.core.clientapi.agent.configuration.ConfigurationUpdateRequest;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -50,6 +51,7 @@ import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.pc.configuration.ConfigurationManager;
import org.rhq.core.pc.inventory.InventoryManager;
import org.rhq.core.pc.inventory.ResourceContainer;
import org.rhq.core.pc.measurement.MeasurementManager;
@@ -366,6 +368,9 @@ public class StandaloneContainer {
case R_CONFIG:
showResourceConfig();
break;
+ case SR_CONFIG:
+ setResourceConfig(tokens);
+ break;
}
return false;
@@ -426,6 +431,33 @@ public class StandaloneContainer {
}
+ private void setResourceConfig(String[] tokens) {
+ if (resourceId == 0) {
+ System.err.println("No resource set");
+ return;
+ }
+
+
+ Configuration config = null;
+ if (tokens.length > 1)
+ config = createConfigurationFromString(tokens[1]);
+ else {
+ System.err.println("Need at least 1 token");
+ return;
+ }
+
+ ConfigurationUpdateRequest request = new ConfigurationUpdateRequest(1,config,resourceId);
+
+ ConfigurationManager cm = pc.getConfigurationManager();
+
+ cm.updateResourceConfiguration(request);
+
+
+
+ }
+
+
+
private ResourceType getTypeForResourceId() {
ResourceContainer rc = inventoryManager.getResourceContainer(resourceId);
Resource res = rc.getResource();
@@ -789,7 +821,9 @@ public class StandaloneContainer {
STDIN("stdin","",0, "Stop reading the batch file and wait for commands on stdin"), //
WAIT("w", "milliseconds", 1, "Waits the given amount of time"),
P_CONFIG("pc", "", 0, "Shows the plugin configuration of the current resource."),
- R_CONFIG("rc", "", 0, "Shows the resource configuration of the current resource.");
+ R_CONFIG("rc", "", 0, "Shows the resource configuration of the current resource."),
+ SR_CONFIG("src", "", 0, "[parameters] set resource config ")
+ ;
private String abbrev;
private String args;
commit 8fe2c0741089d3fa2e67b4a0cf2b85d6dd8edf7d
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 22 17:07:29 2011 -0400
BZ 689922 add a sort override since our ancestry fields are named "resourceAncestry" but the true field is "ancestry".
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
index 5ecec8c..70bb96c 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceCriteria.java
@@ -100,6 +100,7 @@ public class ResourceCriteria extends TaggedCriteria {
private PageOrdering sortParentResourceName; // needs overrides
private PageOrdering sortAgentName; // needs overrides
private PageOrdering sortCurrentAvailability; // needs overrides
+ private PageOrdering sortResourceAncestry; // needs overrides
public ResourceCriteria() {
filterOverrides.put("resourceTypeId", "resourceType.id = ?");
@@ -133,6 +134,7 @@ public class ResourceCriteria extends TaggedCriteria {
sortOverrides.put("parentResourceName", "parentResource.name");
sortOverrides.put("agentName", "agent.name");
sortOverrides.put("currentAvailability", "currentAvailability.availabilityType");
+ sortOverrides.put("resourceAncestry", "ancestry");
}
@Override
@@ -373,6 +375,11 @@ public class ResourceCriteria extends TaggedCriteria {
this.sortCurrentAvailability = sortCurrentAvailability;
}
+ public void addSortResourceAncestry(PageOrdering sortAncestry) {
+ addSortField("resourceAncestry");
+ this.sortResourceAncestry = sortAncestry;
+ }
+
/** subclasses should override as necessary */
public boolean isInventoryManagerRequired() {
return (this.fetchChildResources || this.fetchParentResource);
commit 6d3b3cc1d6b25ca7ba94a7689279fb31c3b6cee0
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Tue Mar 22 16:47:44 2011 -0400
create utility methods that create ancestry listgridfields in a single place AncestryUtil
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
index 5ca88d6..f776d56 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
@@ -181,19 +181,7 @@ public class AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {
});
fields.add(resourceNameField);
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
fields.add(ancestryField);
ctimeField.setWidth(125);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/lookup/ResourceLookupComboBoxItem.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/lookup/ResourceLookupComboBoxItem.java
index 2d3692c..a96f42a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/lookup/ResourceLookupComboBoxItem.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/lookup/ResourceLookupComboBoxItem.java
@@ -59,17 +59,13 @@ public class ResourceLookupComboBoxItem extends ComboBoxItem {
ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry(),
300);
+ // needs to use a different cell formatter than what AncestryUtil.setupAncestryListGridField creates
ancestryField.setCellFormatter(new CellFormatter() {
public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
return AncestryUtil.getAncestryValue(listGridRecord, false);
}
});
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ AncestryUtil.setupAncestryListGridFieldHover(ancestryField);
ListGridField descriptionField = new ListGridField("description", MSG.common_title_description());
ListGridField categoryField = new ListGridField("category", MSG.common_title_category(), 60);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
index f7e3ee4..69a36a0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/operations/OperationsPortlet.java
@@ -180,18 +180,7 @@ public class OperationsPortlet extends LocatableVLayout implements CustomSetting
}
});
- ListGridField ancestryRecent = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryRecent.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryRecent.setShowHover(true);
- ancestryRecent.setHoverCustomizer(new HoverCustomizer() {
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryRecent = AncestryUtil.setupAncestryListGridField();
ListGridField operationRecent = new ListGridField(RecentOperationsDataSource.Field.OPERATION.propertyName(),
RecentOperationsDataSource.Field.OPERATION.title());
@@ -220,18 +209,7 @@ public class OperationsPortlet extends LocatableVLayout implements CustomSetting
}
});
- ListGridField ancestryNext = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryNext.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryNext.setShowHover(true);
- ancestryNext.setHoverCustomizer(new HoverCustomizer() {
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryNext = AncestryUtil.setupAncestryListGridField();
ListGridField operationNext = new ListGridField(ScheduledOperationsDataSource.Field.OPERATION.propertyName(),
ScheduledOperationsDataSource.Field.OPERATION.title());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
index 24820ec..bd28719 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
@@ -135,19 +135,7 @@ public class ProblemResourcesPortlet extends Table<ProblemResourcesDataSource> i
}
});
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
ListGridField alertsField = new ListGridField(ALERTS.propertyName(), ALERTS.title(), 70);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java
index 6553b56..e058004 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/history/AbstractOperationHistoryListView.java
@@ -260,22 +260,7 @@ public abstract class AbstractOperationHistoryListView<T extends AbstractOperati
}
protected ListGridField createAncestryField() {
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setAlign(Alignment.LEFT);
- ancestryField.setCellAlign(Alignment.LEFT);
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
-
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
return ancestryField;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java
index 9071b94..ae28218 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/configuration/HistoryGroupResourceConfigurationMembers.java
@@ -118,20 +118,7 @@ public class HistoryGroupResourceConfigurationMembers extends LocatableVLayout {
}
});
- ListGridField fieldAncestry = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- fieldAncestry.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- fieldAncestry.setShowHover(true);
- fieldAncestry.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
-
+ ListGridField fieldAncestry = AncestryUtil.setupAncestryListGridField();
ListGridField fieldDateCreated = new ListGridField(DataSource.Field.DATECREATED, MSG
.common_title_dateCreated());
ListGridField fieldLastUpdated = new ListGridField(DataSource.Field.LASTUPDATED, MSG
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
index ec590c0..b2f923c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
@@ -117,20 +117,7 @@ public class HistoryGroupPluginConfigurationMembers extends LocatableVLayout {
}
});
- ListGridField fieldAncestry = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- fieldAncestry.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- fieldAncestry.setShowHover(true);
- fieldAncestry.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
-
+ ListGridField fieldAncestry = AncestryUtil.setupAncestryListGridField();
ListGridField fieldDateCreated = new ListGridField(DataSource.Field.DATECREATED, MSG
.common_title_dateCreated());
ListGridField fieldLastUpdated = new ListGridField(DataSource.Field.LASTUPDATED, MSG
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
index b374561..e93a1cb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
@@ -62,19 +62,7 @@ public class TraitsDetailView extends AbstractMeasurementDataTraitListDetailView
});
resourceNameField.setCanGroupBy(true);
- ListGridField ancestryField = listGrid.getField(AncestryUtil.RESOURCE_ANCESTRY);
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ AncestryUtil.setupAncestryListGridField(listGrid);
}
private static Criteria createCriteria(int groupId, int definitionId) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
index dfd3b38..f1c7cfa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
@@ -69,20 +69,7 @@ public class TraitsView extends AbstractMeasurementDataTraitListView {
});
resourceNameField.setCanGroupBy(true);
- ListGridField ancestryField = listGrid.getField(AncestryUtil.RESOURCE_ANCESTRY);
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
-
+ AncestryUtil.setupAncestryListGridField(listGrid);
super.configureTable();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
index da178c4..b4e1257 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/history/GroupMemberResourceOperationHistoryListView.java
@@ -59,20 +59,8 @@ public class GroupMemberResourceOperationHistoryListView extends
});
fields.add(resourceField);
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
ancestryField.setWidth("35%");
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
fields.add(ancestryField);
ListGridField statusField = createStatusField();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
index 8a2cbe2..20d9937 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/AncestryUtil.java
@@ -23,6 +23,11 @@ import java.util.HashSet;
import java.util.Map;
import com.smartgwt.client.data.Record;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.resource.Resource;
@@ -51,6 +56,52 @@ public abstract class AncestryUtil {
private static final String TITLE_PLATFORM = CoreGUI.getMessages().common_title_platform() + ": ";
/**
+ * Convienence method that creates a standard ancestry ListGridField.
+ * @return ancestry field
+ */
+ public static ListGridField setupAncestryListGridField() {
+ ListGridField ancestryField;
+ ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, CoreGUI.getMessages().common_title_ancestry());
+ ancestryField.setAlign(Alignment.LEFT);
+ ancestryField.setCellAlign(Alignment.LEFT);
+ setupAncestryListGridFieldCellFormatter(ancestryField);
+ setupAncestryListGridFieldHover(ancestryField);
+ return ancestryField;
+ }
+
+ /**
+ * Convienence method that creates a standard ancestry ListGridField where the field already exists
+ * in the given list grid.
+ *
+ * @return ancestry field
+ */
+ public static ListGridField setupAncestryListGridField(ListGrid listGrid) {
+ ListGridField ancestryField = listGrid.getField(AncestryUtil.RESOURCE_ANCESTRY);
+ ancestryField.setAlign(Alignment.LEFT);
+ ancestryField.setCellAlign(Alignment.LEFT);
+ setupAncestryListGridFieldCellFormatter(ancestryField);
+ setupAncestryListGridFieldHover(ancestryField);
+ return ancestryField;
+ }
+
+ public static void setupAncestryListGridFieldHover(ListGridField ancestryField) {
+ ancestryField.setShowHover(true);
+ ancestryField.setHoverCustomizer(new HoverCustomizer() {
+ public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
+ return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
+ }
+ });
+ }
+
+ public static void setupAncestryListGridFieldCellFormatter(ListGridField ancestryField) {
+ ancestryField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
+ return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
+ }
+ });
+ }
+
+ /**
* Get the complete set of resource types in the ancestries provided. This is useful for
* being able to load all the types in advance of generating decoded values.
*
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index 7d46996..6559a31 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
@@ -159,18 +159,7 @@ public class ResourceSearchView extends Table {
}
});
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
ListGridField descriptionField = new ListGridField(DESCRIPTION.propertyName(), DESCRIPTION.title());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java
index bd8c430..3d41d42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/AbstractConfigurationHistoryDataSource.java
@@ -229,19 +229,7 @@ public abstract class AbstractConfigurationHistoryDataSource<T extends AbstractR
});
fields.add(resourceNameField);
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
fields.add(ancestryField);
idField.setWidth("10%");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
index 18f59cf..d481d86 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/AlertDefinitionReportView.java
@@ -196,19 +196,7 @@ public class AlertDefinitionReportView extends Table<AlertDefinitionReportView.D
});
fields.add(resourceField);
- ListGridField ancestryField = new ListGridField(AncestryUtil.RESOURCE_ANCESTRY, MSG.common_title_ancestry());
- ancestryField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return listGridRecord.getAttributeAsString(AncestryUtil.RESOURCE_ANCESTRY_VALUE);
- }
- });
- ancestryField.setShowHover(true);
- ancestryField.setHoverCustomizer(new HoverCustomizer() {
-
- public String hoverHTML(Object value, ListGridRecord listGridRecord, int rowNum, int colNum) {
- return AncestryUtil.getAncestryHoverHTML(listGridRecord, 0);
- }
- });
+ ListGridField ancestryField = AncestryUtil.setupAncestryListGridField();
fields.add(ancestryField);
return fields;
13 years, 1 month
[rhq] 2 commits - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java | 56 +++++++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 3
3 files changed, 47 insertions(+), 14 deletions(-)
New commits:
commit 7a161e217c55ec77420303be7a4db2c84ec359d7
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 18:21:42 2011 -0400
add a refresh button on the right so a user can call CoreGUI.refresh().
this should help refresh left-hand trees when they go out of sync with changes to the inventory
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
index 62c3509..5a9d3fc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -87,11 +87,35 @@ public class Footer extends LocatableHLayout {
addMember(getMessageCenterButton());
+ addMember(getRefreshButton());
+
addMember(createHSpacer(0));
alertsMessage.schedule(60000);
}
+ private LocatableVLayout getRefreshButton() {
+ LocatableVLayout layout = new LocatableVLayout(extendLocatorId("refreshLayout"));
+ layout.setHeight100();
+ layout.setAlign(Alignment.CENTER);
+ layout.setAutoWidth();
+
+ LocatableIButton button = new LocatableIButton(extendLocatorId("refreshButton"), "");
+ button.setAlign(Alignment.CENTER);
+ button.setAutoFit(true);
+ button.setIcon("[SKIN]/actions/refresh.png");
+ button.setPrompt(CoreGUI.getMessages().common_button_refresh());
+ button.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ CoreGUI.refresh();
+ }
+ });
+
+ layout.addMember(button);
+ return layout;
+ }
+
private LocatableVLayout getMessageCenterButton() {
LocatableVLayout layout = new LocatableVLayout(extendLocatorId("layout"));
layout.setMembersMargin(5);
commit 1d30fe194971feb08733847e7b2425a925b749cc
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 18:13:19 2011 -0400
- shrink the global alerts indicator to just be the icon
- the alert flag hover text tells you the count and reminds the user they
can click the icon to get the recent alerts report
- when there are no recent alerts, the flag is grey
- the alert flag is moved to the right where the rest of the components are
- the message bar now has 100% width allowing for the message to stretch if the browser is maximized
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
index 2f31bb8..62c3509 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -28,6 +28,7 @@ import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.alert.Alert;
+import org.rhq.core.domain.alert.AlertPriority;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.criteria.Criteria.Restriction;
import org.rhq.core.domain.util.PageList;
@@ -73,10 +74,10 @@ public class Footer extends LocatableHLayout {
// leave space for the RPC Activity Spinner
addMember(createHSpacer(16));
- addMember(alertsMessage);
-
addMember(messageBar);
+ addMember(alertsMessage);
+
VLayout favoritesLayout = new VLayout();
favoritesLayout.setHeight100();
favoritesLayout.setAutoWidth();
@@ -153,12 +154,12 @@ public class Footer extends LocatableHLayout {
public AlertsMessage(String locatorId) {
super(locatorId);
setHeight100();
+ setWidth(25);
setPadding(5);
-
- setIcon("subsystems/alert/Alert_LOW_16.png");
+ setHoverWidth(200);
setIconSize(16);
setWrap(false);
-
+ changeIcon(0);
addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
History.newItem(ReportTopView.VIEW_ID.getName() + "/" + ReportTopView.SECTION_SUBSYSTEMS_VIEW_ID
@@ -167,6 +168,19 @@ public class Footer extends LocatableHLayout {
});
}
+ private void changeIcon(int alertCount) {
+ if (alertCount == 0) {
+ setPrompt(MSG.view_core_noRecentAlerts());
+ setContents(imgHTML("subsystems/alert/Alerts_16.png", 16, 16));
+ } else {
+ setPrompt(MSG.view_core_recentAlerts(String.valueOf(alertCount)));
+ String link = '#' + ReportTopView.VIEW_ID.getName() + "/" + ReportTopView.SECTION_SUBSYSTEMS_VIEW_ID
+ + "/" + AlertHistoryView.SUBSYSTEM_VIEW_ID;
+ setContents("<a href=\"" + link + "\">" + imgHTML(ImageManager.getAlertIcon(AlertPriority.HIGH))
+ + "</a>");
+ }
+ }
+
public void refreshLoggedIn() {
AlertCriteria alertCriteria = new AlertCriteria();
alertCriteria.addFilterStartTime(System.currentTimeMillis() - (1000L * 60 * 60 * 8)); // last 8 hrs
@@ -179,13 +193,7 @@ public class Footer extends LocatableHLayout {
}
public void onSuccess(PageList<Alert> result) {
- if (result.getTotalSize() == 0) {
- setContents(MSG.view_core_recentAlerts("0"));
- setIcon("subsystems/alert/Alert_LOW_16.png");
- } else {
- setContents(MSG.view_core_recentAlerts(String.valueOf(result.getTotalSize())));
- setIcon("subsystems/alert/Alert_HIGH_16.png");
- }
+ changeIcon(result.getTotalSize());
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
index f000569..1b27eee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java
@@ -62,7 +62,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
label = new LocatableLabel(extendLocatorId("Label"));
label.setAlign(Alignment.CENTER);
- label.setWidth("600px");
+ label.setWidth100();
label.setHeight("30px");
label.setCanSelectText(true);
addMember(label);
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 35ff92d..695bd9d 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
@@ -2057,7 +2057,8 @@ view_aboutBox_version = Version:
view_core_error_1 = New Alerts lookup failed
#view_core_loggedInAs = Logged in as {0}
view_core_loggedOut = Logged out
-view_core_recentAlerts = [{0}] recent alerts
+view_core_recentAlerts = There are [{0}] recent alerts - click the icon to go to the recent alerts report
+view_core_noRecentAlerts = There are no recent alerts to report
view_core_uncaught = Globally uncaught exception
# Login
13 years, 1 month
[rhq] 2 commits - modules/enterprise
by fdrabek
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java | 51 ++++++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java | 2
2 files changed, 53 insertions(+)
New commits:
commit 48930bae6ee5f95142f76aafd9da7f684f8c9a43
Merge: c45a4ed 769949f
Author: Filip Drabek <fdrabek(a)dhcp-lab-136.englab.brq.redhat.com>
Date: Mon Mar 28 23:29:48 2011 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit c45a4ed71306601af814364822149e20277bb4e7
Author: Filip Drabek <fdrabek(a)dhcp-lab-136.englab.brq.redhat.com>
Date: Mon Mar 28 23:28:26 2011 +0200
JAXB adapter for Map<Integer,String>
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java
new file mode 100644
index 0000000..004576e
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/jaxb/WebServiceMapAdapter.java
@@ -0,0 +1,51 @@
+package org.rhq.enterprise.server.jaxb;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jws.WebResult;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+import org.rhq.enterprise.server.system.ServerVersion;
+
+/** See the javadoc for the XmlAdapter itself for a more complete explanation, but simply
+ * put the adapter maps types that JAXB has difficulty serializing(Ex. Map<Integer,String>)
+ * to java types that JAXB can actually serialize. From a JAXB perspective think of the
+ * problematic types as opaque to JAXB and the map to type in a marshal as the serializable
+ * type.
+ *
+ * @author Simeon Pinder
+ * @author Filip Drabek
+ *
+ */
+@XmlType(namespace = ServerVersion.namespace)
+public class WebServiceMapAdapter extends XmlAdapter<Object[], Map<Integer, String>> {
+
+ @WebResult(targetNamespace = ServerVersion.namespace)
+ public Object[] marshal(Map<Integer, String> opaque) throws Exception {
+ Object[] bag = null;
+ if (opaque != null) {
+ int i = 0;
+ bag = new Object[2 * opaque.size()];
+ for (Map.Entry<Integer, String> mapEntry : opaque.entrySet()) {
+ bag[i++] = mapEntry.getKey();
+ bag[i++] = mapEntry.getValue();
+ }
+ } else {
+ bag = new Object[0];
+ }
+ return bag;
+ }
+
+ @WebResult(targetNamespace = ServerVersion.namespace)
+ public Map<Integer, String> unmarshal(Object[] marshallable) throws Exception {
+ Map<Integer, String> map = new HashMap<Integer, String>();
+ if (marshallable != null) {
+ for (int i = 0; i < marshallable.length; i += 2) {
+ map.put((Integer) marshallable[i], (String) marshallable[i + 1]);
+ }
+ }
+ return map;
+ }
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
index 9d1c269..0fcc193 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerRemote.java
@@ -35,6 +35,7 @@ import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceAncestryFormat;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.jaxb.WebServiceMapAdapter;
import org.rhq.enterprise.server.jaxb.adapter.ResourceListAdapter;
import org.rhq.enterprise.server.system.ServerVersion;
@@ -153,6 +154,7 @@ public interface ResourceManagerRemote {
* @return A Map of ResourceIds to FormattedAncestryStrings, one entry for each unique, valid, resourceId passed in.
*/
@WebMethod
+ @XmlJavaTypeAdapter(value = WebServiceMapAdapter.class)
Map<Integer, String> getResourcesAncestry( //
@WebParam(name = "subject") Subject subject, //
@WebParam(name = "resourceIds") Integer[] resourceIds, //
13 years, 1 month
[rhq] Branch 'as7plugin' - 2 commits - modules/plugins
by Heiko W. Rupp
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java | 5
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java | 47 +++
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/SubsystemDiscovery.java | 16 -
modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml | 123 +++++-----
4 files changed, 120 insertions(+), 71 deletions(-)
New commits:
commit ba753e1d0ce503b7252ae9e92cbdb9b810ec4519
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Mar 28 22:12:31 2011 +0200
Add server-groups and hosts to the domain.
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
index a2b5335..788531b 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
@@ -53,6 +53,8 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.sun.org.apache.xml.internal.security.utils.Base64;
+
public class BaseComponent implements ResourceComponent, MeasurementFacet, ConfigurationFacet
{
private final Log log = LogFactory.getLog(this.getClass());
@@ -147,13 +149,22 @@ public class BaseComponent implements ResourceComponent, MeasurementFacet, Confi
public Configuration loadResourceConfiguration() throws Exception {
ConfigurationDefinition configDef = context.getResourceType().getResourceConfigurationDefinition();
- BaseComponent parentComponent = (BaseComponent) context.getParentResourceComponent();
+ ResourceComponent parentResourceComponent = context.getParentResourceComponent();
+ String parentPath =null;
String myPath;
- String parentPath = parentComponent.getPath();
- if (parentPath.endsWith("/") || path.startsWith("/"))
- myPath = parentPath + path;
+ if (parentResourceComponent instanceof BaseComponent) {
+ BaseComponent parentComponent = (BaseComponent) parentResourceComponent;
+ parentPath = parentComponent.getPath();
+ }
+
+ if (parentPath!=null) {
+ if (parentPath.endsWith("/") || path.startsWith("/"))
+ myPath = parentPath + path;
+ else
+ myPath = parentPath + "/" + path;
+ }
else
- myPath = parentPath + "/" + path;
+ myPath = path;
JsonNode json = connection.getLevelData(myPath,true,false);
@@ -169,19 +180,30 @@ public class BaseComponent implements ResourceComponent, MeasurementFacet, Confi
if (sub!=null)
propertySimple = new PropertySimple(propDef.getName(),sub.getValueAsText());
else {
- propertySimple = new PropertySimple(propDef.getName(),null); // TODO store it at all?
+ propertySimple = new PropertySimple(propDef.getName(),null); // TODO store it at all when it is null?
}
ret.put(propertySimple);
} else if (propDef instanceof PropertyDefinitionList) {
PropertyList propertyList = new PropertyList(propDef.getName());
PropertyDefinition memberDefinition = ((PropertyDefinitionList) propDef).getMemberDefinition();
if (memberDefinition ==null) {
- Iterator<JsonNode> values = sub.getElements();
- while (values.hasNext()) {
- JsonNode node = values.next();
- String value = node.getTextValue();
- PropertySimple propertySimple = new PropertySimple(propDef.getName(),value);
- propertyList.add(propertySimple);
+ if (sub.isObject()) {
+ Iterator<String> fields = sub.getFieldNames();
+ while(fields.hasNext()) {
+ String fieldName = fields.next();
+ JsonNode subNode = sub.get(fieldName);
+ PropertySimple propertySimple = new PropertySimple(propDef.getName(),fieldName);
+ propertyList.add(propertySimple);
+ }
+ } else {
+ System.out.println("===Sub not object==="); // TODO evaluate this branch again
+ Iterator<JsonNode> values = sub.getElements();
+ while (values.hasNext()) {
+ JsonNode node = values.next();
+ String value = node.getTextValue();
+ PropertySimple propertySimple = new PropertySimple(propDef.getName(),value);
+ propertyList.add(propertySimple);
+ }
}
}
else if (memberDefinition instanceof PropertyDefinitionMap) {
diff --git a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
index 8176e8a..2825e10 100644
--- a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
@@ -104,6 +104,26 @@
<c:simple-property name="path" default="/server-group/*" readOnly="true"/>
</plugin-configuration>
+ <resource-configuration>
+ <c:simple-property name="profile" />
+ <c:simple-property name="socket-binding-group"/>
+ <c:simple-property name="jvm"/>
+ <c:simple-property name="deployment" required="false"/> <!-- TODO change structure. Or put below as resource? -->
+ </resource-configuration>
+ </server>
+ <server name="Host"
+ description="Host involved in this domain"
+ discovery="SubsystemDiscovery"
+ class="BaseComponent"
+ >
+ <plugin-configuration>
+ <c:simple-property name="path" default="/host/*" readOnly="true"/>
+ </plugin-configuration>
+
+ <resource-configuration>
+ <c:list-property name="server-config" />
+ </resource-configuration>
+
</server>
</server>
@@ -128,11 +148,6 @@
<process-scan name="StandaloneAS" query="process|basename|match=^java.*,arg|org.jboss.as.standalone|match=.*"/>
- <operation name="dummyOperation">
- <!-- TODO supply parameters and return values -->
- </operation>
-
-
<resource-configuration>
<c:list-property name="schema-locations" displayName="Schema locations">
<c:map-property name="location">
@@ -162,17 +177,6 @@
<process-scan name="ManagedAS" query="process|basename|match=^java.*,arg|org.jboss.as.server|match=.*"/>
-
- <metric property="serverGroup" dataType="trait" displayType="summary" />
- <resource-configuration>
- <!--<c:group name="interfaces">-->
- <c:simple-property name="loopback" default="127.0.0.1" />
- <c:simple-property name="external" default="any" />
- <c:simple-property name="public" default="any" />
- <!--</c:group>-->
- </resource-configuration>
-
-
</server>
@@ -290,6 +294,7 @@
<runs-inside>
<parent-resource-type name="Domain" plugin="jboss-as-7"/>
+ <parent-resource-type name="Host" plugin="jboss-as-7"/>
<parent-resource-type name="JBossAS7-Standalone" plugin="jboss-as-7"/>
</runs-inside>
commit 76830060b0233e12f319b7baae24fd23d850756d
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Mar 28 17:55:31 2011 +0200
More path handling improvements.
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
index c626c49..192a54f 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASConnection.java
@@ -138,6 +138,9 @@ public class ASConnection {
boolean isErrorReply(JsonNode in) {
+ if (in == null)
+ return true;
+
if (in.has("outcome")) {
String outcome = null;
try {
@@ -262,6 +265,8 @@ public class ASConnection {
}
public String getFailureDescription(JsonNode jsonNode) {
+ if (jsonNode==null)
+ return "getFailureDescription: -input was null-";
JsonNode node = jsonNode.findValue("failure-description");
return node.getValueAsText();
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
index 9407172..a2b5335 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
@@ -147,7 +147,16 @@ public class BaseComponent implements ResourceComponent, MeasurementFacet, Confi
public Configuration loadResourceConfiguration() throws Exception {
ConfigurationDefinition configDef = context.getResourceType().getResourceConfigurationDefinition();
- JsonNode json = connection.getLevelData(path,true,false); // TODO path ? key?
+ BaseComponent parentComponent = (BaseComponent) context.getParentResourceComponent();
+ String myPath;
+ String parentPath = parentComponent.getPath();
+ if (parentPath.endsWith("/") || path.startsWith("/"))
+ myPath = parentPath + path;
+ else
+ myPath = parentPath + "/" + path;
+
+
+ JsonNode json = connection.getLevelData(myPath,true,false);
Configuration ret = new Configuration();
ObjectMapper mapper = new ObjectMapper();
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/SubsystemDiscovery.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/SubsystemDiscovery.java
index 4cde830..b577407 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/SubsystemDiscovery.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/SubsystemDiscovery.java
@@ -19,6 +19,7 @@
package org.rhq.modules.plugins.jbossas7;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
@@ -89,6 +90,8 @@ public class SubsystemDiscovery implements ResourceDiscoveryComponent<BaseCompon
String subPath = path.substring(i+1);
JsonNode subNode = json.findPath(subPath);
+ if (subNode==null || subNode.isNull())
+ subNode = json.get(subPath); // TODO clean this up. to get the 'key' in a path from the AS we need to use get()
Map<String,Subsystem> subsystemMap = mapper.readValue(subNode,new TypeReference<Map<String,Subsystem>>() {});
@@ -97,7 +100,9 @@ public class SubsystemDiscovery implements ResourceDiscoveryComponent<BaseCompon
String key = entry.getKey();
Subsystem subsystem = entry.getValue();
String newPath = cpath.replaceAll("\\*",key);
- config.getSimple("path").setStringValue(newPath);
+ Configuration config2 = context.getDefaultPluginConfiguration();
+ PropertySimple pathProp = new PropertySimple("path",newPath);
+ config2.put(pathProp);
String resKey = context.getParentResourceContext().getResourceKey() + "/" + key;
String name = resKey.substring(resKey.lastIndexOf("/") + 1);
@@ -109,7 +114,7 @@ public class SubsystemDiscovery implements ResourceDiscoveryComponent<BaseCompon
name, // Name
null, // Version
subsystem.description, // Description
- config,
+ config2,
null);
details.add(detail);
}
@@ -120,7 +125,10 @@ public class SubsystemDiscovery implements ResourceDiscoveryComponent<BaseCompon
String resKey = path;
String name = resKey.substring(resKey.lastIndexOf("/") + 1);
- config.getSimple("path").setStringValue(path);
+ Configuration config2 = context.getDefaultPluginConfiguration();
+ PropertySimple pathProp = new PropertySimple("path",path);
+ config2.put(pathProp);
+
DiscoveredResourceDetails detail = new DiscoveredResourceDetails(
@@ -129,7 +137,7 @@ public class SubsystemDiscovery implements ResourceDiscoveryComponent<BaseCompon
name, // Name
null, // Version
path, // Description
- config,
+ config2,
null);
details.add(detail);
}
diff --git a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
index 654ee06..8176e8a 100644
--- a/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/jboss-as-7/src/main/resources/META-INF/rhq-plugin.xml
@@ -96,7 +96,7 @@
<c:simple-property name="path" default="/profile/*" readOnly="true"/>
</plugin-configuration>
</server>
- <server name="ServerGroups"
+ <server name="ServerGroup"
description="Server groups on this domain"
discovery="SubsystemDiscovery"
class="BaseComponent">
@@ -283,54 +283,54 @@
</server>
- <service name="NetworkInterface"
- discovery="InterfaceDiscovery"
- class="BaseComponent"
- description="A named network interface, along with required criteria for determining the IP address to associate with that interface">
+ <service name="NetworkInterface"
+ discovery="InterfaceDiscovery"
+ class="BaseComponent"
+ description="A named network interface, along with required criteria for determining the IP address to associate with that interface">
- <runs-inside>
- <parent-resource-type name="Domain" plugin="jboss-as-7"/>
- <parent-resource-type name="JBossAS7-Standalone" plugin="jboss-as-7"/>
- </runs-inside>
+ <runs-inside>
+ <parent-resource-type name="Domain" plugin="jboss-as-7"/>
+ <parent-resource-type name="JBossAS7-Standalone" plugin="jboss-as-7"/>
+ </runs-inside>
- <plugin-configuration>
- <c:simple-property name="path" readOnly="true" default="/"/>
- </plugin-configuration>
- </service>
+ <plugin-configuration>
+ <c:simple-property name="path" readOnly="true" default="/"/>
+ </plugin-configuration>
+ </service>
- <service name="SocketBindingGroup"
- discovery="SocketBindingGroupDiscovery"
- class="BaseComponent"
- >
- <runs-inside>
- <parent-resource-type name="Domain" plugin="jboss-as-7"/>
- <parent-resource-type name="JBossAS7-Standalone" plugin="jboss-as-7"/>
- </runs-inside>
+ <service name="SocketBindingGroup"
+ discovery="SocketBindingGroupDiscovery"
+ class="BaseComponent"
+ >
+ <runs-inside>
+ <parent-resource-type name="Domain" plugin="jboss-as-7"/>
+ <parent-resource-type name="JBossAS7-Standalone" plugin="jboss-as-7"/>
+ </runs-inside>
- <plugin-configuration>
- <c:simple-property name="path" readOnly="true" default="/socket-binding-group/"/>
- </plugin-configuration>
+ <plugin-configuration>
+ <c:simple-property name="path" readOnly="true" default="/socket-binding-group/"/>
+ </plugin-configuration>
- <resource-configuration>
- <c:simple-property name="default-interface" readOnly="true" displayName="Default Interface" description="Default Interface for these bindings. See NetworkInterfaces for its definition" required="false"/>
- <!-- note: at domain level there is no port-offset -->
- <c:simple-property name="port-offset" readOnly="true" displayName="Port Offset" description="Offset from standard ports for this group" required="false"/>
- <c:list-property name="include">
- <c:simple-property name="binding" displayName="Included bindings" description="Other bindings that are included in this one"/>
- </c:list-property>
- <c:list-property name="socket-binding">
- <c:map-property name="binding">
- <c:simple-property name="name" description="The name of the socket. Services which need to access the socket configuration information will find it using this name."/>
- <c:simple-property name="interface" description="Name of the interface to which the socket should be bound, or, for multicast sockets, the interface on which it should listen. This should be one of the declared interfaces." required="false"/>
- <c:simple-property name="port" description="Number of the port to which the socket should be bound." type="integer"/>
- <c:simple-property name="fixed-port" description="Whether the port value should remain fixed even if numeric offsets are applied to the other sockets in the socket group." type="boolean"/>
- <c:simple-property name="multicast-address" description="Multicast address on which the socket should receive multicast traffic. If unspecified, the socket will not be configured to receive multicast." />
- <c:simple-property name="multicast-port" description="Port on which the socket should receive multicast traffic. Must be configured if 'multicast-address' is configured." type="integer"/>
- </c:map-property>
- </c:list-property>
- </resource-configuration>
+ <resource-configuration>
+ <c:simple-property name="default-interface" readOnly="true" displayName="Default Interface" description="Default Interface for these bindings. See NetworkInterfaces for its definition" required="false"/>
+ <!-- note: at domain level there is no port-offset -->
+ <c:simple-property name="port-offset" readOnly="true" displayName="Port Offset" description="Offset from standard ports for this group" required="false"/>
+ <c:list-property name="include">
+ <c:simple-property name="binding" displayName="Included bindings" description="Other bindings that are included in this one"/>
+ </c:list-property>
+ <c:list-property name="socket-binding">
+ <c:map-property name="binding">
+ <c:simple-property name="name" description="The name of the socket. Services which need to access the socket configuration information will find it using this name."/>
+ <c:simple-property name="interface" description="Name of the interface to which the socket should be bound, or, for multicast sockets, the interface on which it should listen. This should be one of the declared interfaces." required="false"/>
+ <c:simple-property name="port" description="Number of the port to which the socket should be bound." type="integer"/>
+ <c:simple-property name="fixed-port" description="Whether the port value should remain fixed even if numeric offsets are applied to the other sockets in the socket group." type="boolean"/>
+ <c:simple-property name="multicast-address" description="Multicast address on which the socket should receive multicast traffic. If unspecified, the socket will not be configured to receive multicast." />
+ <c:simple-property name="multicast-port" description="Port on which the socket should receive multicast traffic. Must be configured if 'multicast-address' is configured." type="integer"/>
+ </c:map-property>
+ </c:list-property>
+ </resource-configuration>
- </service>
+ </service>
</plugin>
13 years, 1 month
[rhq] modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java | 15 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java | 17 +++++++---
2 files changed, 27 insertions(+), 5 deletions(-)
New commits:
commit 769949fb28b0beeeba6c076130708c8a534cce88
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 15:00:25 2011 -0400
in our GWT UI, the alert and event severity filters are represented with a drop down selection menu containing one checkbox for each severity enum (alert: hi, med, lo; event: debug, info, warn, et...).
If you don't select any severity (i.e. all the checkboxes are unchecked), we used to assume
this means there is no filtering to be performed and the query returns everything.
However, because the UI renders these in individual checkboxes, that behavior doesn't really make sense and will
confuse the user. Because, if the user doesn't select any severities, it
seems as though the user is asking it to show nothing - since no event or
alert will match the selected severities (and there are NO selected severities).
So to make the query results/UI more sensical, if the user de-selects all severity
check boxes, the table will show 0 rows.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
index f776d56..3e51b24 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java
@@ -204,6 +204,13 @@ public class AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, final AlertCriteria criteria) {
+ if (criteria == null) {
+ // the user selected no severities in the filter - it makes sense from the UI perspective to show 0 rows
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
+
final long start = System.currentTimeMillis();
this.alertService.findAlertsByCriteria(criteria, new AsyncCallback<PageList<Alert>>() {
@@ -272,10 +279,16 @@ public class AlertDataSource extends RPCDataSource<Alert, AlertCriteria> {
@Override
protected AlertCriteria getFetchCriteria(DSRequest request) {
+ AlertPriority[] severitiesFilter = getArrayFilter(request, "severities", AlertPriority.class);
+
+ if (severitiesFilter == null || severitiesFilter.length == 0) {
+ return null; // user didn't select any severities - return null to indicate no data should be displayed
+ }
+
AlertCriteria criteria = new AlertCriteria();
criteria.setPageControl(getPageControl(request));
- criteria.addFilterPriorities(getArrayFilter(request, "severities", AlertPriority.class));
+ criteria.addFilterPriorities(severitiesFilter);
criteria.addFilterEntityContext(entityContext);
criteria.fetchConditionLogs(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
index e7f93e4..490ee4f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeDatasource.java
@@ -109,6 +109,13 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, final EventCriteria criteria) {
+ if (criteria == null) {
+ // the user selected no severities in the filter - it makes sense from the UI perspective to show 0 rows
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
+
GWTServiceLookup.getEventService().findEventCompositesByCriteria(criteria,
new AsyncCallback<PageList<EventComposite>>() {
public void onFailure(Throwable caught) {
@@ -128,6 +135,11 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
@Override
protected EventCriteria getFetchCriteria(final DSRequest request) {
+ EventSeverity[] severities = getArrayFilter(request, "severities", EventSeverity.class);
+ if (severities == null || severities.length == 0) {
+ return null; // user didn't select any severities - return null to indicate no data should be displayed
+ }
+
EventCriteria criteria = new EventCriteria();
PageControl pageControl = getPageControl(request);
@@ -144,10 +156,7 @@ public class EventCompositeDatasource extends RPCDataSource<EventComposite, Even
criteria.addFilterSourceName((String) criteriaMap.get("source"));
criteria.addFilterDetail((String) criteriaMap.get("details"));
- if (criteriaMap.get("severities") != null) {
- EventSeverity[] severities = getArrayFilter(request, "severities", EventSeverity.class);
- criteria.addFilterSeverities(severities);
- }
+ criteria.addFilterSeverities(severities);
criteria.addFilterEntityContext(entityContext);
13 years, 1 month
[rhq] modules/enterprise
by ips
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 29 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java | 17 ++++-
2 files changed, 29 insertions(+), 17 deletions(-)
New commits:
commit cd758dcbc78fea04ebda2d3563a3b283b630b88e
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Mar 28 14:27:18 2011 -0400
fix editing of group config props via modal member value editor (https://bugzilla.redhat.com/show_bug.cgi?id=690483)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
index 449e9c3..d991515 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java
@@ -1316,17 +1316,20 @@ public class ConfigurationEditor extends LocatableVLayout {
List<Validator> validators = buildValidators(propertyDefinitionSimple, propertySimple);
valueItem.setValidators(validators.toArray(new Validator[validators.size()]));
- valueItem.addChangedHandler(new ChangedHandler() {
- public void onChanged(ChangedEvent changedEvent) {
- updatePropertySimpleValue(changedEvent.getValue(), propertySimple, propertyDefinitionSimple);
- // Only fire a prop value change event if the prop's a top-level simple or a simple within a
- // top-level map.
- if (fireEventOnPropertyValueChange(propertyDefinitionSimple, propertySimple)) {
- boolean isValid = changedEvent.getItem().validate();
- firePropertyChangedEvent(propertySimple, propertyDefinitionSimple, isValid);
+ if ((propertySimple.getConfiguration() != null) || (propertySimple.getParentMap() != null) ||
+ (propertySimple.getParentList() != null)) {
+ valueItem.addChangedHandler(new ChangedHandler() {
+ public void onChanged(ChangedEvent changedEvent) {
+ updatePropertySimpleValue(changedEvent.getValue(), propertySimple, propertyDefinitionSimple);
+ // Only fire a prop value change event if the prop's a top-level simple or a simple within a
+ // top-level map.
+ if (fireEventOnPropertyValueChange(propertyDefinitionSimple, propertySimple)) {
+ boolean isValid = changedEvent.getItem().validate();
+ firePropertyChangedEvent(propertySimple, propertyDefinitionSimple, isValid);
+ }
}
- }
- });
+ });
+ }
}
// for more robust and repeatable item locators (not positional) assign a name and title
@@ -1356,9 +1359,9 @@ public class ConfigurationEditor extends LocatableVLayout {
protected boolean fireEventOnPropertyValueChange(PropertyDefinitionSimple propertyDefinitionSimple,
PropertySimple propertySimple) {
- PropertyDefinitionMap parentPropertyMapDefinition = propertyDefinitionSimple.getParentPropertyMapDefinition();
- return propertyDefinitionSimple.getConfigurationDefinition() != null
- || (parentPropertyMapDefinition != null && parentPropertyMapDefinition.getConfigurationDefinition() != null);
+ PropertyMap parentMap = propertySimple.getParentMap();
+ return propertySimple.getConfiguration() != null
+ || (parentMap != null && parentMap.getConfiguration() != null);
}
protected void updatePropertySimpleValue(Object value, PropertySimple propertySimple,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
index 4c4a29f..eafbd15 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/GroupConfigurationEditor.java
@@ -250,7 +250,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
setAllValuesToItem.setAlign(Alignment.RIGHT);
setAllItems.add(setAllValuesToItem);
- PropertySimple masterPropertySimple = new PropertySimple(aggregatePropertySimple.getName(), null);
+ PropertySimple masterPropertySimple = new PropertySimple(propertyDefinitionSimple.getName(), null);
final FormItem masterValueItem = super.buildSimpleField(propertyDefinitionSimple, masterPropertySimple);
masterValueItem.setDisabled(false);
@@ -286,7 +286,7 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
masterValueItem.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
applyButton.enable();
- applyButton.focus();
+ //applyButton.focus();
}
});
@@ -332,7 +332,9 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
// Add data rows.
final List<FormItem> valueItems = new ArrayList<FormItem>(this.memberConfigurations.size());
final Map<String, PropertySimple> valueItemNameToPropertySimpleMap = new HashMap<String, PropertySimple>();
- for (GroupMemberConfiguration memberConfiguration : this.memberConfigurations) {
+ List<GroupMemberConfiguration> memberConfigurations1 = this.memberConfigurations;
+ for (int i = 0, memberConfigurations1Size = memberConfigurations1.size(); i < memberConfigurations1Size; i++) {
+ GroupMemberConfiguration memberConfiguration = memberConfigurations1.get(i);
String memberName = memberConfiguration.getLabel();
StaticTextItem memberItem = new StaticTextItem();
memberItem.setShowTitle(false);
@@ -340,8 +342,11 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
items.add(memberItem);
Configuration configuration = memberConfiguration.getConfiguration();
PropertySimple memberPropertySimple = (PropertySimple) getProperty(configuration, aggregatePropertySimple,
- index);
+ index);
FormItem valueItem = buildSimpleField(propertyDefinitionSimple, memberPropertySimple);
+ // All of the member props have the same name, so add an index to the item name to ensure it's unique
+ // to the form.
+ valueItem.setName(propertyDefinitionSimple.getName() + "-" + i);
valueItems.add(valueItem);
valueItemNameToPropertySimpleMap.put(valueItem.getName(), memberPropertySimple);
FormItem unsetItem = buildUnsetItem(propertyDefinitionSimple, memberPropertySimple, valueItem);
@@ -420,6 +425,10 @@ public class GroupConfigurationEditor extends ConfigurationEditor {
@Override
public void onClick(ClickEvent clickEvent) {
Object value = masterValueItem.getValue();
+ // Update the aggregate property.
+ aggregatePropertySimple.setValue(value);
+
+ // Update the member properties.
for (FormItem valueItem : valueItems) {
setValue(valueItem, value);
13 years, 1 month
[rhq] 2 commits - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java | 2 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java | 6 ------
2 files changed, 2 insertions(+), 6 deletions(-)
New commits:
commit e1b12455724418abfbb47f004d907faf2f052eeb
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 12:43:00 2011 -0400
BZ 535384 - criteria needed to add search expression from the filter field in order for the search bar to work for any view using this ResourceComposite data source
I also added the ability to set version criteria, to match that of the Resouce datasource.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
index 24eb534..0567d7c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeDataSource.java
@@ -173,6 +173,8 @@ public class ResourceCompositeDataSource extends RPCDataSource<ResourceComposite
criteria.addFilterTagNamespace(getFilter(request, "tagNamespace", String.class));
criteria.addFilterTagSemantic(getFilter(request, "tagSemantic", String.class));
criteria.addFilterTagName(getFilter(request, "tagName", String.class));
+ criteria.addFilterVersion(getFilter(request, "version", String.class));
+ criteria.setSearchExpression(getFilter(request, "search", String.class));
return criteria;
}
commit c510a0e9ae1c21c63d66d6420b01fbeb65b50e22
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Mar 28 11:16:17 2011 -0400
remove unused static API. we have a different way of getting group member views
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
index 7e9883e..617ca08 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
@@ -175,10 +175,4 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
return new ResourceCompositeSearchView(locatorId, parentResourceComposite, new Criteria("parentId", String
.valueOf(parentResourceComposite.getResource().getId())), MSG.view_inventory_resources_title_children());
}
-
- public static ResourceCompositeSearchView getMembersOf(String locatorId, int groupId) {
- return new ResourceCompositeSearchView(locatorId, (ResourceComposite) null, new Criteria("groupId", String
- .valueOf(groupId)), MSG.view_inventory_resources_title_members());
- }
-
}
13 years, 1 month