[rhq] modules/core modules/enterprise
by mazz
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/RoleCriteria.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemRolesNotificationSenderForm.java | 202 ++++++++++
modules/enterprise/server/plugins/alert-roles/src/main/java/org/rhq/enterprise/server/plugins/alertRoles/RolesBackingBean.java | 83 ----
modules/enterprise/server/plugins/alert-roles/src/main/resources/META-INF/rhq-serverplugin.xml | 12
modules/enterprise/server/plugins/alert-roles/src/main/resources/roles.xhtml | 22 -
6 files changed, 217 insertions(+), 116 deletions(-)
New commits:
commit 885a5f526a3868a44d3f07f61c5df1ed1ef4ae16
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Oct 4 17:02:47 2010 -0400
implement the new alert-role server plugin notification editor. this needs to be tested to make sure the sender still works. but the notification configuration is consistent with how it was before so it should work
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/RoleCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/RoleCriteria.java
index 3237c49..2d18670 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/RoleCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/RoleCriteria.java
@@ -22,10 +22,13 @@
*/
package org.rhq.core.domain.criteria;
+import java.util.List;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.util.CriteriaUtils;
import org.rhq.core.domain.util.PageOrdering;
/**
@@ -39,7 +42,8 @@ public class RoleCriteria extends Criteria {
private Integer filterId;
private String filterDescription;
private String filterName;
- private Integer filterSubjectId;
+ private Integer filterSubjectId; // needs overrides
+ private List<Integer> filterIds; // needs overrides
private boolean fetchPermissions;
private boolean fetchResourceGroups;
@@ -54,6 +58,8 @@ public class RoleCriteria extends Criteria {
+ " FROM Role innerRole " //
+ " JOIN innerRole.subjects innerSubject " //
+ " WHERE innerSubject.id = ? )");
+
+ filterOverrides.put("ids", "id IN ( ? )");
}
@Override
@@ -77,6 +83,10 @@ public class RoleCriteria extends Criteria {
this.filterSubjectId = filterSubjectId;
}
+ public void addFilterIds(Integer... filterIds) {
+ this.filterIds = CriteriaUtils.getListIgnoringNulls(filterIds);
+ }
+
/**
* Requires MANAGE_SECURITY
* @param fetchSubjects
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 7d8745d..40bd990 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -220,7 +220,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
if ("System Users".equals(sender)) {
newCanvas = new SystemUsersNotificationSenderForm(newLocatorId, notificationToEdit, sender);
} else if ("System Roles".equals(sender)) {
- newCanvas = null; // TODO
+ newCanvas = new SystemRolesNotificationSenderForm(newLocatorId, notificationToEdit, sender);
} else if ("Resource Operations".equals(sender)) {
newCanvas = null; // TODO
} else {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemRolesNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemRolesNotificationSenderForm.java
new file mode 100644
index 0000000..fe4cf36
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemRolesNotificationSenderForm.java
@@ -0,0 +1,202 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.criteria.RoleCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesDataSource;
+import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * This notification form will be used for the System Roles sender. This form lets
+ * you pick roles that the sender will send notifications to.
+ *
+ * @author John Mazzitelli
+ */
+public class SystemRolesNotificationSenderForm extends AbstractNotificationSenderForm {
+
+ // the alert configuration property name where the IDs are stored in |-separated form
+ private static final String PROPNAME = "roleId";
+
+ private RoleSelector selector;
+
+ public SystemRolesNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
+ super(locatorId, notif, sender);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+
+ String roleIds = getConfiguration().getSimpleValue(PROPNAME, ""); // we know the role plugin defines this
+ if (roleIds != null && roleIds.length() > 0) {
+ try {
+ List<Integer> ids = unfence(roleIds, Integer.class);
+ RoleCriteria criteria = new RoleCriteria();
+ criteria.addFilterIds(ids.toArray(new Integer[ids.size()]));
+ GWTServiceLookup.getRoleService().findRolesByCriteria(criteria, new AsyncCallback<PageList<Role>>() {
+ @Override
+ public void onSuccess(PageList<Role> result) {
+ createNewSelector(result);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler()
+ .handleError("Cannot determine current roles - starting empty", caught);
+ createNewSelector(null);
+ }
+ });
+ } catch (Exception e) {
+ CoreGUI.getErrorHandler().handleError("Cannot use current roles - starting empty", e);
+ createNewSelector(null);
+ }
+ } else {
+ createNewSelector(null);
+ }
+ }
+
+ private void createNewSelector(Collection<Role> preselectedRoles) {
+ String selectorLocatorId = extendLocatorId("roleSelector");
+ selector = new RoleSelector(selectorLocatorId, preselectedRoles);
+ selector.setWidth(400);
+ selector.setHeight(300);
+ addMember(selector);
+ markForRedraw();
+ }
+
+ @Override
+ public boolean validate() {
+ if (selector != null) {
+ try {
+ HashSet<Integer> selectedIds = selector.getSelection();
+ String newPropValue = fence(selectedIds);
+ getConfiguration().put(new PropertySimple(PROPNAME, newPropValue));
+ return true;
+ } catch (Exception e) {
+ CoreGUI.getErrorHandler().handleError("Cannot save the selected roles", e);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <T> List<T> unfence(String fencedData, Class<T> type) {
+ String delimiter = "\\|";
+ String[] elements = fencedData.split(delimiter);
+ List<T> results = new ArrayList<T>(elements.length);
+
+ if (Integer.class.equals(type)) {
+ for (String next : elements) {
+ if (next.length() != 0) {
+ results.add((T) Integer.valueOf(next));
+ }
+ }
+ } else if (String.class.equals(type)) {
+ for (String next : elements) {
+ if (next.length() != 0) {
+ results.add((T) next);
+ }
+ }
+ } else {
+ throw new IllegalArgumentException("No support for unfencing data of type " + type);
+ }
+ return results;
+ }
+
+ /**
+ * Takes the list of elements e1, e2, e3 and fences
+ * them with '|' delimiters such that the result looks
+ * like "|e1|e2|e3|"
+ */
+ private String fence(Collection<?> elements) {
+ if (elements.size() == 0) {
+ return "";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append('|');
+ for (Object next : elements) {
+ builder.append(String.valueOf(next)).append('|');
+ }
+ return builder.toString();
+ }
+
+ private class RoleSelector extends AbstractSelector<Role> {
+
+ public RoleSelector(String id, Collection<Role> roles) {
+ super(id);
+ if (roles != null) {
+ ListGridRecord[] data = (new RolesDataSource()).buildRecords(roles);
+ setAssigned(data);
+ }
+ }
+
+ @Override
+ protected RPCDataSource<Role> getDataSource() {
+ return new SelectedRolesDataSource();
+ }
+
+ @Override
+ protected DynamicForm getAvailableFilterForm() {
+ return null; // No Filters Currently
+ }
+
+ @Override
+ protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
+ return null; // No Filters Currently
+ }
+
+ public class SelectedRolesDataSource extends RolesDataSource {
+
+ @Override
+ public ListGridRecord[] buildRecords(Collection<Role> roles) {
+ ListGridRecord[] records = super.buildRecords(roles);
+ for (ListGridRecord record : records) {
+ if (selection.contains(record.getAttributeAsInt("id"))) {
+ record.setEnabled(false);
+ }
+ }
+ return records;
+ }
+ }
+
+ }
+}
diff --git a/modules/enterprise/server/plugins/alert-roles/src/main/java/org/rhq/enterprise/server/plugins/alertRoles/RolesBackingBean.java b/modules/enterprise/server/plugins/alert-roles/src/main/java/org/rhq/enterprise/server/plugins/alertRoles/RolesBackingBean.java
deleted file mode 100644
index a7f556e..0000000
--- a/modules/enterprise/server/plugins/alert-roles/src/main/java/org/rhq/enterprise/server/plugins/alertRoles/RolesBackingBean.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.server.plugins.alertRoles;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.rhq.core.domain.authz.Role;
-import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.enterprise.server.plugin.pc.alert.AlertSender;
-import org.rhq.enterprise.server.plugin.pc.alert.CustomAlertSenderBackingBean;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * Backing Bean for the roles sender alert sender plugin custom UI
- * @author Joseph Marques
- */
-public class RolesBackingBean extends CustomAlertSenderBackingBean {
-
- private Map<String, String> available;
- private List<String> currentRoles;
- private static final String ROLE_ID = "roleId";
-
- @Override
- public void loadView() {
- // get available/all subjects
- List<Role> allRoles = LookupUtil.getRoleManager().findRoles(new PageControl());
- available = new HashMap<String, String>();
- for (Role role : allRoles) {
- String roleId = String.valueOf(role.getId());
- available.put(role.getName(), roleId);
- }
-
- // get current subjects
- String subjectString = alertParameters.getSimpleValue(ROLE_ID, "");
- currentRoles = AlertSender.unfence(subjectString, String.class);
- }
-
- @Override
- public void saveView() {
- String roleIds = AlertSender.fence(currentRoles);
-
- PropertySimple p = alertParameters.getSimple(ROLE_ID);
- if (p == null) {
- p = new PropertySimple(ROLE_ID, roleIds);
- alertParameters.put(p);
- } else {
- p.setStringValue(roleIds);
- }
-
- alertParameters = persistConfiguration(alertParameters);
- }
-
- public List<String> getCurrentRoles() {
- return currentRoles;
- }
-
- public void setCurrentRoles(List<String> currentRoles) {
- this.currentRoles = currentRoles;
- }
-
- public Map<String, String> getAvailableRolesMap() {
- return available;
- }
-}
diff --git a/modules/enterprise/server/plugins/alert-roles/src/main/resources/META-INF/rhq-serverplugin.xml b/modules/enterprise/server/plugins/alert-roles/src/main/resources/META-INF/rhq-serverplugin.xml
index 7d7551c..4e50100 100644
--- a/modules/enterprise/server/plugins/alert-roles/src/main/resources/META-INF/rhq-serverplugin.xml
+++ b/modules/enterprise/server/plugins/alert-roles/src/main/resources/META-INF/rhq-serverplugin.xml
@@ -14,19 +14,13 @@
Used to send notifications to all users in the selected system roles.
</serverplugin:help>
- <!-- startup & tear down listener, + scheduled jobs
- <serverplugin:plugin-component class="Foo" />
- -->
-
<!-- How does this sender show up in drop downs etc -->
<short-name>System Roles</short-name>
<!-- Class that does the actual sending -->
<plugin-class>RolesSender</plugin-class>
- <custom-ui>
- <ui-snippet-name>roles.xhtml</ui-snippet-name>
- <backing-bean-class>RolesBackingBean</backing-bean-class>
- <backing-bean-name>rolesBean</backing-bean-name>
- </custom-ui>
+ <alert-configuration>
+ <c:simple-property name="roleId" type="string" required="true" description="The roles (ids are |-separated) to be notified"/>
+ </alert-configuration>
</alert-plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/plugins/alert-roles/src/main/resources/roles.xhtml b/modules/enterprise/server/plugins/alert-roles/src/main/resources/roles.xhtml
deleted file mode 100644
index f807414..0000000
--- a/modules/enterprise/server/plugins/alert-roles/src/main/resources/roles.xhtml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:c="http://java.sun.com/jstl/core"
- xmlns:a4j="https://richfaces.org/a4j"
- xmlns:rich="http://richfaces.ajax4jsf.org/rich">
-
-<body>
- <rich:pickList fastMoveControlsVisible="false"
- sourceListWidth="200px"
- targetListWidth="200px"
- copyControlLabel="Add Roles"
- removeControlLabel="Remove Roles"
- value="#{rolesBean.currentRoles}">
- <f:selectItems value="#{rolesBean.availableRolesMap}" />
- </rich:pickList>
-</body>
-
-</html>
\ No newline at end of file
13 years, 8 months
[rhq] modules/enterprise
by ips
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 287 ++++++----
2 files changed, 180 insertions(+), 109 deletions(-)
New commits:
commit c1145e500bd70a985a0b609de0f42655902d23a6
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Oct 4 16:58:21 2010 -0400
finish support for top-level maps - both static and dynamic/open; disable window logger
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index ed2ce42..c486f1d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -38,7 +38,9 @@
2. In hosted mode, the windows are not automatically closed,
although you can easily close them manually in the usual way
-->
+ <!--
<set-property name="log_WindowLogger" value="ENABLED" />
+ -->
<!--
You probably will want to disable the default `DivLogger` as well:
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 fdc2d9c..d9c3dd7 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
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.components.configuration;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.EnumSet;
@@ -29,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.Alignment;
@@ -138,9 +140,12 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * A SmartGWT widget for editing an RHQ {@link Configuration}, which conforms to a {@link ConfigurationDefinition}.
+ *
* @author Greg Hinkle
* @author Ian Springer
*/
+@SuppressWarnings({"UnnecessarySemicolon"})
public class ConfigurationEditor extends LocatableVLayout {
private ConfigurationGWTServiceAsync configurationService = GWTServiceLookup.getConfigurationService();
@@ -170,7 +175,6 @@ public class ConfigurationEditor extends LocatableVLayout {
public static enum ConfigType {
plugin, resource
}
-
; // Need this extra semicolon for the qdox parser
public ConfigurationEditor(String locatorId) {
@@ -330,6 +334,11 @@ public class ConfigurationEditor extends LocatableVLayout {
this.markForRedraw();
}
+ public void reset() {
+ this.configuration = this.originalConfiguration;
+ reload();
+ }
+
protected HLayout buildRawPane() {
LocatableHLayout layout = new LocatableHLayout(extendLocatorId("Raw"));
@@ -457,7 +466,6 @@ public class ConfigurationEditor extends LocatableVLayout {
}
public SectionStackSection buildGroupSection(String locatorId, PropertyGroupDefinition group) {
-
SectionStackSection section;
if (group == null) {
section = new SectionStackSection("General Properties");
@@ -473,18 +481,25 @@ public class ConfigurationEditor extends LocatableVLayout {
section.setExpanded(!group.isDefaultHidden());
}
- ArrayList<PropertyDefinition> definitions = new ArrayList<PropertyDefinition>(((group == null) ? definition
- .getNonGroupedProperties() : definition.getPropertiesInGroup(group.getName())));
- Collections.sort(definitions, new PropertyDefinitionComparator());
+ List<PropertyDefinition> propertyDefinitions = new ArrayList<PropertyDefinition>(((group == null) ? definition
+ .getNonGroupedProperties() : definition.getPropertiesInGroup(group.getName())));
- DynamicForm form = buildPropertiesForm(locatorId + "_Props", definitions, configuration);
+ DynamicForm form = buildPropertiesForm(locatorId + "_Props", propertyDefinitions, configuration);
section.addItem(form);
return section;
}
- private DynamicForm buildPropertiesForm(String locatorId, List<PropertyDefinition> definitions,
+ private DynamicForm buildPropertiesForm(String locatorId, Collection<PropertyDefinition> propertyDefinitions,
AbstractPropertyMap propertyMap) {
+ List<PropertyDefinition> propertyDefinitionsList;
+ if (!(propertyDefinitions instanceof List)) {
+ propertyDefinitionsList = new ArrayList<PropertyDefinition>(propertyDefinitions);
+ } else {
+ propertyDefinitionsList = (List<PropertyDefinition>)propertyDefinitions;
+ }
+ Collections.sort(propertyDefinitionsList, new PropertyDefinitionComparator());
+
LocatableDynamicForm form = new LocatableDynamicForm(locatorId);
form.setValuesManager(valuesManager);
form.setValidateOnChange(true);
@@ -503,11 +518,17 @@ public class ConfigurationEditor extends LocatableVLayout {
form.setCellPadding(5);
form.setColWidths(190, 28, 210);
- ArrayList<FormItem> fields = new ArrayList<FormItem>();
+ List<FormItem> fields = new ArrayList<FormItem>();
+ addItemsForPropertiesRecursively(locatorId, propertyDefinitionsList, propertyMap, fields);
+ form.setFields(fields.toArray(new FormItem[fields.size()]));
+
+ return form;
+ }
+ private void addItemsForPropertiesRecursively(String locatorId, Collection<PropertyDefinition> propertyDefinitions,
+ AbstractPropertyMap propertyMap, List<FormItem> fields) {
boolean odd = true;
-
- for (PropertyDefinition propertyDefinition : definitions) {
+ for (PropertyDefinition propertyDefinition : propertyDefinitions) {
Property property = propertyMap.get(propertyDefinition.getName());
if (property == null) {
if (propertyDefinition instanceof PropertyDefinitionSimple) {
@@ -515,17 +536,17 @@ public class ConfigurationEditor extends LocatableVLayout {
propertyMap.put(property);
}
}
- addItems(locatorId + "_" + propertyDefinition.getName(), fields, propertyDefinition, property, odd);
+ addItemsForPropertyRecursively(locatorId + "_" + propertyDefinition.getName(), propertyDefinition, property,
+ odd, fields);
odd = !odd;
}
-
- form.setFields(fields.toArray(new FormItem[fields.size()]));
-
- return form;
}
- public void addItems(String locatorId, ArrayList<FormItem> fields, PropertyDefinition propertyDefinition,
- Property property, boolean oddRow) {
+ public void addItemsForPropertyRecursively(String locatorId, PropertyDefinition propertyDefinition,
+ Property property,
+ boolean oddRow,
+ List<FormItem> fields) {
+ List<FormItem> fieldsForThisProperty = new ArrayList<FormItem>();
StaticTextItem nameItem = new StaticTextItem();
nameItem.setStartRow(true);
@@ -534,30 +555,50 @@ public class ConfigurationEditor extends LocatableVLayout {
.getName()) + "</b>";
nameItem.setValue(title);
nameItem.setShowTitle(false);
- nameItem.setCellStyle(oddRow ? "OddRow" : "EvenRow");
+ fieldsForThisProperty.add(nameItem);
fields.add(nameItem);
FormItem valueItem;
if (propertyDefinition instanceof PropertyDefinitionSimple) {
- valueItem = buildSimpleField(fields, (PropertyDefinitionSimple) propertyDefinition, oddRow, property);
+ PropertyDefinitionSimple propertyDefinitionSimple = (PropertyDefinitionSimple)propertyDefinition;
+ PropertySimple propertySimple = (PropertySimple)property;
+
+ valueItem = buildSimpleField(propertyDefinitionSimple, propertySimple);
+
+ FormItem unsetItem = buildUnsetItem(propertyDefinitionSimple, propertySimple, valueItem);
+ fieldsForThisProperty.add(unsetItem);
+ fields.add(unsetItem);
+
+ fieldsForThisProperty.add(valueItem);
fields.add(valueItem);
StaticTextItem descriptionItem = new StaticTextItem();
descriptionItem.setValue(propertyDefinition.getDescription());
descriptionItem.setShowTitle(false);
descriptionItem.setEndRow(true);
- descriptionItem.setCellStyle(oddRow ? "OddRow" : "EvenRow");
+ fieldsForThisProperty.add(descriptionItem);
fields.add(descriptionItem);
} else if (propertyDefinition instanceof PropertyDefinitionList) {
if (((PropertyDefinitionList) propertyDefinition).getMemberDefinition() instanceof PropertyDefinitionMap) {
// List of Maps is a specially supported case with summary fields as columns in a table
- buildListOfMapsField(locatorId, fields,
- (PropertyDefinitionMap) ((PropertyDefinitionList) propertyDefinition).getMemberDefinition(),
- oddRow, (PropertyList) property);
+ // Note: This field spans 3 columns.
+ CanvasItem listOfMapsItem = buildListOfMapsField(locatorId,
+ (PropertyDefinitionMap)((PropertyDefinitionList)propertyDefinition).getMemberDefinition(),
+ oddRow, (PropertyList)property);
+ fields.add(listOfMapsItem);
}
+ // TODO (ips): Add support for lists of simples.
} else if (propertyDefinition instanceof PropertyDefinitionMap) {
- buildMapsField(fields, (PropertyDefinitionMap) propertyDefinition, (PropertyMap) property);
+ // Note: This field spans 3 columns.
+ FormItem mapField =
+ buildMapField(locatorId, (PropertyDefinitionMap)propertyDefinition, (PropertyMap)property);
+ fields.add(mapField);
+ }
+
+ // Set row background color.
+ for (FormItem field : fieldsForThisProperty) {
+ field.setCellStyle(oddRow ? "OddRow" : "EvenRow");
}
}
@@ -565,13 +606,39 @@ public class ConfigurationEditor extends LocatableVLayout {
return this.invalidPropertyNames;
}
- private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap,
- final PropertyMap propertyMap) {
+ private FormItem buildMapField(String parentLocatorId, PropertyDefinitionMap propertyDefinitionMap,
+ final PropertyMap propertyMap) {
+ Canvas canvas;
+ Map<String, PropertyDefinition> memberPropertyDefinitions = propertyDefinitionMap.getPropertyDefinitions();
+ String locatorId = parentLocatorId + "_" + propertyDefinitionMap.getName();
+ if (memberPropertyDefinitions == null || memberPropertyDefinitions.isEmpty()) {
+ canvas = buildDynamicMapField(locatorId, propertyDefinitionMap, propertyMap);
+ } else {
+ canvas = buildStaticMapField(locatorId, propertyDefinitionMap, propertyMap);
+ }
+ CanvasItem canvasItem = buildComplexPropertyField(canvas);
+
+ return canvasItem;
+ }
+
+ private CanvasItem buildComplexPropertyField(Canvas canvas) {
+ CanvasItem canvasItem = new CanvasItem();
+ canvasItem.setCanvas(canvas);
+ canvasItem.setColSpan(3);
+ canvasItem.setEndRow(true);
+ canvasItem.setShowTitle(false);
+ return canvasItem;
+ }
+
+ private Canvas buildDynamicMapField(String parentLocatorId, PropertyDefinitionMap propertyDefinitionMap,
+ final PropertyMap propertyMap) {
+ Log.debug("Building dynamic map field for " + propertyMap + "...");
+
// create the property grid
final PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.getNameField().setName("Name");
propertyGrid.getValuesField().setName("Value");
-
+
// create the editors
Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
TextItem textEditor = new TextItem();
@@ -580,27 +647,26 @@ public class ConfigurationEditor extends LocatableVLayout {
// set the editors and attribute name where to find the record type
propertyGrid.setEditorsMap("fieldType", editorsMap);
- if (propertyDefinitionMap != null) {
- ListGridRecord[] records = new ListGridRecord[propertyDefinitionMap.getPropertyDefinitions().size()];
- int i = 0;
- // TODO (ips): For open maps, create the records based on props, not propDefs.
- // TODO (ips): Render unset checkboxes amd descriptions for member props, just as we would for top-level simples.
- for (PropertyDefinition propDef : propertyDefinitionMap.getPropertyDefinitions().values()) {
- ListGridRecord record = new ListGridRecord();
- String propertyName = propDef.getName();
- record.setAttribute("Name", propertyName);
- PropertySimple prop = propertyMap.getSimple(propertyName);
- String value = (prop != null) ? prop.getStringValue() : null;
- record.setAttribute("Value", value);
- record.setAttribute("fieldType", "simpleText");
- record.setAttribute("readOnly", propDef.isReadOnly());
- records[i++] = record;
+ ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()];
+ int i = 0;
+ for (Property prop : propertyMap.getMap().values()) {
+ if (!(prop instanceof PropertySimple)) {
+ Log.warn("Unsupported Configuration permutation: PropertyMap " + propertyMap
+ + " contains non-simple member Property " + prop + " - skipping...");
+ continue;
}
- propertyGrid.setData(records);
+ PropertySimple propSimple = (PropertySimple)prop;
+ ListGridRecord record = new ListGridRecord();
+ String propertyName = prop.getName();
+ record.setAttribute("Name", propertyName);
+ String value = propSimple.getStringValue();
+ record.setAttribute("Value", value);
+ record.setAttribute("fieldType", "simpleText");
+ records[i++] = record;
}
+ propertyGrid.setData(records);
VLayout canvas = new VLayout();
-
canvas.addMember(propertyGrid);
// Footer
@@ -610,8 +676,8 @@ public class ConfigurationEditor extends LocatableVLayout {
footer.setMembersMargin(15);
canvas.addMember(footer);
- // Properties can only be added to or deleted from non-read-only "open" maps.
- if (propertyDefinitionMap.getPropertyDefinitions().isEmpty() && !propertyDefinitionMap.isReadOnly()) {
+ // Properties can only be added to or deleted from non-read-only dynamic maps.
+ if (!propertyDefinitionMap.isReadOnly()) {
final IButton deleteButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
deleteButton.setDisabled(true);
deleteButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
@@ -688,19 +754,21 @@ public class ConfigurationEditor extends LocatableVLayout {
}
});
- propertyGrid.draw();
-
- CanvasItem canvasItem = new CanvasItem();
- canvasItem.setCanvas(canvas);
- // item.setHeight(500);
- canvasItem.setColSpan(3);
- canvasItem.setEndRow(true);
- canvasItem.setShowTitle(false);
- fields.add(canvasItem);
+ return canvas;
+ }
+
+ private Canvas buildStaticMapField(String parentLocatorId, PropertyDefinitionMap propertyDefinitionMap,
+ PropertyMap propertyMap) {
+ Log.debug("Building static map field for " + propertyMap + "...");
+
+ return buildPropertiesForm(parentLocatorId, propertyDefinitionMap.getPropertyDefinitions().values(), propertyMap);
+
}
- private void buildListOfMapsField(final String locatorId, ArrayList<FormItem> fields,
- final PropertyDefinitionMap propertyDefinition, boolean oddRow, final PropertyList propertyList) {
+ private CanvasItem buildListOfMapsField(final String locatorId,
+ final PropertyDefinitionMap memberPropertyDefinitionMap, boolean oddRow,
+ final PropertyList propertyList) {
+ Log.debug("Building list-of-maps field for " + propertyList + "...");
final ListGrid summaryTable = new ListGrid();
// summaryTable.setID("config_summaryTable_" + propertyDefinition.getName());
@@ -711,7 +779,7 @@ public class ConfigurationEditor extends LocatableVLayout {
summaryTable.setAutoFitData(Autofit.HORIZONTAL);
ArrayList<ListGridField> fieldsList = new ArrayList<ListGridField>();
- ArrayList<PropertyDefinition> definitions = new ArrayList<PropertyDefinition>(propertyDefinition
+ ArrayList<PropertyDefinition> definitions = new ArrayList<PropertyDefinition>(memberPropertyDefinitionMap
.getPropertyDefinitions().values());
Collections.sort(definitions, new PropertyDefinitionComparator());
@@ -757,7 +825,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void onRecordClick(RecordClickEvent recordClickEvent) {
com.allen_sauer.gwt.log.client.Log.info("You want to edit: " + recordClickEvent.getRecord());
displayMapEditor(locatorId + "_MapEdit", summaryTable, recordClickEvent.getRecord(),
- propertyDefinition, propertyList, (PropertyMap) recordClickEvent.getRecord().getAttributeAsObject(
+ memberPropertyDefinitionMap, propertyList, (PropertyMap) recordClickEvent.getRecord().getAttributeAsObject(
"_RHQ_PROPERTY"));
}
});
@@ -805,7 +873,7 @@ public class ConfigurationEditor extends LocatableVLayout {
addRowButton.setIcon(Window.getImgURL("[SKIN]/actions/add.png"));
addRowButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- displayMapEditor(locatorId + "_MapEdit", summaryTable, null, propertyDefinition, propertyList, null);
+ displayMapEditor(locatorId + "_MapEdit", summaryTable, null, memberPropertyDefinitionMap, propertyList, null);
}
});
@@ -813,13 +881,9 @@ public class ConfigurationEditor extends LocatableVLayout {
summaryTableHolder.setMembers(summaryTable, toolStrip);
- CanvasItem item = new CanvasItem();
- item.setCanvas(summaryTableHolder);
- // item.setHeight(500);
- item.setColSpan(3);
- item.setEndRow(true);
- item.setShowTitle(false);
- fields.add(item);
+ CanvasItem item = buildComplexPropertyField(summaryTableHolder);
+
+ return item;
}
private ListGridRecord[] buildSummaryRecords(PropertyList propertyList, ArrayList<PropertyDefinition> definitions) {
@@ -827,7 +891,6 @@ public class ConfigurationEditor extends LocatableVLayout {
int i = 0;
for (Property row : propertyList.getList()) {
PropertyMap rowMap = (PropertyMap) row;
-
ListGridRecord record = buildSummaryRecord(definitions, rowMap);
rows[i++] = record;
}
@@ -871,32 +934,13 @@ public class ConfigurationEditor extends LocatableVLayout {
return record;
}
- private FormItem buildSimpleField(ArrayList<FormItem> fields, final PropertyDefinitionSimple propertyDefinition,
- boolean oddRow, final Property property) {
- final PropertySimple propertySimple = (PropertySimple) property;
+ private FormItem buildSimpleField(final PropertyDefinitionSimple propertyDefinition,
+ final PropertySimple propertySimple
+ ) {
+ Log.debug("Building simple field for " + propertySimple + "...");
FormItem valueItem = null;
- boolean isUnset = (property == null || propertySimple.getStringValue() == null)
- && propertyDefinition.isRequired() == false;
-
- CheckboxItem unsetItem = null;
- if (!propertyDefinition.isRequired()) {
- unsetItem = new CheckboxItem();
- unsetItem.setValue(isUnset);
- unsetItem.setDisabled(readOnly);
- unsetItem.setShowLabel(false);
- unsetItem.setShowTitle(false);
- unsetItem.setLabelAsTitle(false);
- unsetItem.setColSpan(1);
- unsetItem.setCellStyle(oddRow ? "OddRow" : "EvenRow");
- fields.add(unsetItem);
- } else {
- SpacerItem spacer = new SpacerItem();
- spacer.setCellStyle(oddRow ? "OddRow" : "EvenRow");
- fields.add(spacer);
- }
-
List<PropertyDefinitionEnumeration> enumeratedValues = propertyDefinition.getEnumeratedValues();
if (enumeratedValues != null && !enumeratedValues.isEmpty()) {
@@ -911,7 +955,7 @@ public class ConfigurationEditor extends LocatableVLayout {
valueItem = new RadioGroupItem();
}
valueItem.setValueMap(valueOptions);
- if (property != null) {
+ if (propertySimple != null) {
valueItem.setValue(propertySimple.getStringValue());
}
} else {
@@ -921,15 +965,15 @@ public class ConfigurationEditor extends LocatableVLayout {
case FILE:
case DIRECTORY:
valueItem = new TextItem();
- valueItem.setValue(property == null ? "" : propertySimple.getStringValue());
+ valueItem.setValue(propertySimple == null ? "" : propertySimple.getStringValue());
break;
case LONG_STRING:
valueItem = new TextAreaItem();
- valueItem.setValue(property == null ? "" : propertySimple.getStringValue());
+ valueItem.setValue(propertySimple == null ? "" : propertySimple.getStringValue());
break;
case PASSWORD:
valueItem = new PasswordItem();
- valueItem.setValue(property == null ? "" : propertySimple.getStringValue());
+ valueItem.setValue(propertySimple == null ? "" : propertySimple.getStringValue());
break;
case BOOLEAN:
valueItem = new RadioGroupItem();
@@ -937,19 +981,19 @@ public class ConfigurationEditor extends LocatableVLayout {
valMap.put("true", "Yes");
valMap.put("false", "No");
valueItem.setValueMap(valMap);
- valueItem.setValue(property == null || propertySimple.getStringValue() == null ? false : propertySimple
+ valueItem.setValue(propertySimple == null || propertySimple.getStringValue() == null ? false : propertySimple
.getBooleanValue());
break;
case INTEGER:
case LONG:
valueItem = new IntegerItem();
- if (property != null && propertySimple.getStringValue() != null)
+ if (propertySimple != null && propertySimple.getStringValue() != null)
valueItem.setValue(propertySimple.getLongValue());
break;
case FLOAT:
case DOUBLE:
valueItem = new FloatItem();
- valueItem.setValue(property == null || propertySimple.getStringValue() == null ? 0 : propertySimple
+ valueItem.setValue(propertySimple == null || propertySimple.getStringValue() == null ? 0 : propertySimple
.getDoubleValue());
break;
}
@@ -957,7 +1001,7 @@ public class ConfigurationEditor extends LocatableVLayout {
valueItem.setRequired(propertyDefinition.isRequired());
- List<Validator> validators = buildValidators(propertyDefinition, property);
+ List<Validator> validators = buildValidators(propertyDefinition, propertySimple);
valueItem.setValidators(validators.toArray(new Validator[validators.size()]));
/*
@@ -973,9 +1017,8 @@ public class ConfigurationEditor extends LocatableVLayout {
*/
valueItem.setShowTitle(false);
- valueItem.setDisabled(isUnset || readOnly);
+ valueItem.setDisabled(isReadOnly(propertyDefinition) || isUnset(propertyDefinition, propertySimple));
valueItem.setWidth(220);
- valueItem.setCellStyle(oddRow ? "OddRow" : "EvenRow");
final FormItem finalValueItem = valueItem;
@@ -992,30 +1035,56 @@ public class ConfigurationEditor extends LocatableVLayout {
boolean isValidNow = ConfigurationEditor.this.invalidPropertyNames.isEmpty();
boolean validationStateChanged = (isValidNow != wasValidBefore);
for (PropertyValueChangeListener validationStateChangeListener : ConfigurationEditor.this.validationStateChangeListeners) {
- PropertyValueChangeEvent event = new PropertyValueChangeEvent(property, propertyDefinition,
+ PropertyValueChangeEvent event = new PropertyValueChangeEvent(propertySimple, propertyDefinition,
validationStateChanged, ConfigurationEditor.this.invalidPropertyNames);
validationStateChangeListener.propertyValueChanged(event);
}
}
});
- if (unsetItem != null) {
+ return valueItem;
+ }
+
+ private boolean isUnset(PropertyDefinitionSimple propertyDefinition, PropertySimple propertySimple) {
+ return (!propertyDefinition.isRequired() &&
+ (propertySimple == null || propertySimple.getStringValue() == null));
+ }
+
+ private FormItem buildUnsetItem(PropertyDefinitionSimple propertyDefinition, final PropertySimple property,
+ final FormItem valueItem) {
+ FormItem item;
+ if (!propertyDefinition.isRequired()) {
+ CheckboxItem unsetItem = new CheckboxItem();
+ boolean unset = isUnset(propertyDefinition, property);
+ unsetItem.setValue(unset);
+ unsetItem.setDisabled(isReadOnly(propertyDefinition));
+ unsetItem.setShowLabel(false);
+ unsetItem.setShowTitle(false);
+ unsetItem.setLabelAsTitle(false);
+ unsetItem.setColSpan(1);
+
unsetItem.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent changeEvent) {
Boolean isUnset = (Boolean) changeEvent.getValue();
if (isUnset) {
- finalValueItem.setDisabled(true);
- finalValueItem.setValue((String) null);
+ valueItem.setDisabled(true);
+ valueItem.setValue((String) null);
} else {
- finalValueItem.setDisabled(false);
- finalValueItem.focusInItem();
+ valueItem.setDisabled(false);
+ valueItem.focusInItem();
}
- propertySimple.setValue(finalValueItem.getValue());
+ property.setValue(valueItem.getValue());
}
});
+ item = unsetItem;
+ } else {
+ item = new SpacerItem();
}
+ return item;
+ }
- return valueItem;
+ private boolean isReadOnly(PropertyDefinition propertyDefinition) {
+ return propertyDefinition.isReadOnly() || this.readOnly;
}
private List<Validator> buildValidators(PropertyDefinitionSimple propertyDefinition, Property property) {
13 years, 8 months
[rhq] modules/enterprise
by John Sanda
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 2
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java | 126 +++++-----
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml | 35 ++
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml | 36 ++
4 files changed, 141 insertions(+), 58 deletions(-)
New commits:
commit 5e74d53f806d7d87fa769647a5be15827077806f
Author: John Sanda <jsanda(a)redhat.com>
Date: Mon Oct 4 16:02:31 2010 -0400
Adding more tests, and adding call to set type on updated property definition
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index 04a3995..f46c7a4 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -367,6 +367,8 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
if (newProperty instanceof PropertyDefinitionSimple) {
PropertyDefinitionSimple newPDS = (PropertyDefinitionSimple) newProperty;
+ existingPDS.setType(newPDS.getType());
+
// handle <property-options>?
List<PropertyDefinitionEnumeration> existingOptions = existingPDS.getEnumeratedValues();
List<PropertyDefinitionEnumeration> newOptions = newPDS.getEnumeratedValues();
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index 5e2913b..2324a43 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -23,6 +23,8 @@
package org.rhq.enterprise.server.configuration.metadata;
+import java.util.List;
+
import javax.persistence.EntityManager;
import javax.transaction.SystemException;
@@ -32,6 +34,9 @@ import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionList;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionMap;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
@@ -40,7 +45,17 @@ import org.rhq.test.AssertUtils;
import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginConfigDefFor;
import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginDescriptor;
-
+import static java.util.Arrays.asList;
+
+/**
+ * These are data-driven tests that exercise the plugin upgrade functionality around configurations such as plugin
+ * configurations and resource configurations. The data sets that are used are defined in two plugin descriptors. One
+ * is the original version and the other is the upgraded version. In order to avoid inter-dependencies between test
+ * methods, a separate plugin configuration should be used for each test method. A separate resource type is declared
+ * for each test, further documenting and delinating where each configuration is used. In the test methods, the
+ * original and updated coniguration definitions are initialized with an xpath expression that specifies the owning
+ * resource type.
+ */
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
PluginDescriptor originalDescriptor;
@@ -62,7 +77,7 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
@Test
- public void addNewUngroupedPropertyDef() {
+ public void addNewUngroupedSimplePropertyDef() {
initConfigDefs("servers[name='MyServer1']", "test");
String propertyName = "newUngroupedProperty";
@@ -93,13 +108,7 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
"not change", expected, actual);
}
- // This test fails with,
- //
- // PersistentObjectException: detached entity passed to persist
- //
- // I get the exception with both PropertyGroupDefinition and PropertyDefinitionSimple when I have tried various
- // approaches to get past the exception.
- @Test(enabled = false)
+ @Test
public void addNewGroup() {
initConfigDefs("servers[name='GroupTests']", "GroupTests");
@@ -107,14 +116,50 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
findGroup("newGroup", originalConfigDef));
}
-// void assertGroupDefinitionExists() {
-// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
-// if (groupDef.getName().equals("groupToBeRemoved")) {
-// assertTrue(groupDef.getId() != 0);
-// assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId()));
-// }
-// }
-// }
+ @Test
+ public void replaceMemberDefinitionOfPropertyList() {
+ initConfigDefs("servers[name='UpdatedPropertyList']", "ReplaceMemberDefinitionOfPropertyList");
+
+ String propertyName = "myList";
+ PropertyDefinitionList expectedList = updatedConfigDef.getPropertyDefinitionList(propertyName);
+ PropertyDefinitionList actualList = originalConfigDef.getPropertyDefinitionList(propertyName);
+
+ assertPropertyDefinitionMatches("The member definition should be replaced with the new version", expectedList, actualList);
+ }
+
+ // Test is currently failing with,
+ //
+ // IllegalArgumentException: Removing a detached instance org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple
+ //
+ // I beleive that this is a problem with the test environment and not with production code.
+ @Test(enabled = false)
+ public void updateMapWithRemovedProperty() {
+ initConfigDefs("servers[name='UpdatedMapWithRemovedProperty']", "UpdateMapWithRemovedProperty");
+
+ String propertyName = "myMap";
+ PropertyDefinitionMap map = originalConfigDef.getPropertyDefinitionMap(propertyName);
+ assertEquals("Expected property to be removed when it is removed from parent map", 0,
+ map.getPropertyDefinitions().size());
+ }
+
+ @Test
+ public void updateMapWithUpdatedProperty() {
+ initConfigDefs("servers[name='UpdatedMapWithUpdatedProperty']", "UpdateMapWithUpdatedProperty");
+
+ String propertyName = "propertyToUpdate";
+ String mapPropertyName = "myMap";
+
+ PropertyDefinitionMap expectedMap = updatedConfigDef.getPropertyDefinitionMap(mapPropertyName);
+ PropertyDefinitionSimple expected = expectedMap.getPropertyDefinitionSimple(propertyName);
+
+ PropertyDefinitionMap actualMap = originalConfigDef.getPropertyDefinitionMap(mapPropertyName);
+ PropertyDefinitionSimple actual = actualMap.getPropertyDefinitionSimple(propertyName);
+
+ List<String> ignoredProperties = asList("id", "parentPropertyMapDefinition");
+
+ assertPropertyDefinitionMatches("Expected property who is a child of map to get updated and remain in the map",
+ expected, actual, ignoredProperties);
+ }
private void initConfigDefs(String path, String configName) {
loadAndPersistConfigDefs(path, configName);
@@ -132,8 +177,6 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
EntityManager entityMgr = getEntityManager();
entityMgr.persist(originalConfigDef);
- //entityMgr.persist(updatedConfigDef);
-
getTransactionManager().commit();
} catch (Exception e) {
try {
@@ -146,21 +189,8 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
private void updateConfigDef() {
- try {
- getTransactionManager().begin();
-
- ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager();
- configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef);
-
- getTransactionManager().commit();
- } catch (Exception e) {
- try {
- getTransactionManager().rollback();
- } catch (SystemException e1) {
- throw new RuntimeException(e1);
- }
- throw new RuntimeException(e);
- }
+ ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager();
+ configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef);
}
private String getPackagePath() {
@@ -176,33 +206,13 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
return null;
}
- void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected,
- PropertyDefinitionSimple actual) {
+ void assertPropertyDefinitionMatches(String msg, PropertyDefinition expected, PropertyDefinition actual) {
AssertUtils.assertPropertiesMatch(msg, expected, actual, "id", "configurationDefinition");
}
- @Test(enabled = false)
- public void existingUngroupedPropertyDefShouldBeUpdated() throws Exception {
- PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("foo");
- PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("foo");
-
- assertPropertyDefinitionMatches("Existing ungrouped property defs should be updated", expected, actual);
- }
-
- @Test(enabled = false)
- public void propertyDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
- assertNull(
- "A property def in the original configuration def that is removed in the new configuration def should be deleted",
- originalConfigDef.getPropertyDefinitionSimple("propertyToBeRemoved")
- );
+ void assertPropertyDefinitionMatches(String msg, PropertyDefinition expected, PropertyDefinition actual,
+ List<String> ignoredProperties) {
+ AssertUtils.assertPropertiesMatch(msg, expected, actual, ignoredProperties);
}
- @Test(enabled = false)
- public void propertyGroupDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
- for (PropertyGroupDefinition def : originalConfigDef.getGroupDefinitions()) {
- if (def.getName().equals("groupToBeRemoved")) {
- fail("Expected property group 'groupToBeRemoved' to be deleted since it is not in the new configuration def.");
- }
- }
- }
}
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
index dd8fcfa..23f3a1b 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -26,4 +26,39 @@
</c:group>
</plugin-configuration>
</server>
+
+ <server name="UpdatedPropertyList">
+ <plugin-configuration>
+ <c:list-property name="myList"
+ displayName="My Test List"
+ readOnly="false"
+ description="Update Property List Test"
+ required="true"
+ min="1"
+ max="5">
+ <c:simple-property name="myListMember"
+ type="double"
+ default="3.14"
+ description="PI"/>
+ </c:list-property>
+ </plugin-configuration>
+ </server>
+
+ <server name="UpdatedMapWithRemovedProperty">
+ <plugin-configuration>
+ <c:map-property name="myMap">
+ <c:simple-property name="propertyToRemove"/>
+ </c:map-property>
+ </plugin-configuration>
+ </server>
+
+ <server name="UpdatedMapWithUpdatedProperty">
+ <plugin-configuration>
+ <c:map-property name="myMap">
+ <c:simple-property name="propertyToUpdate"
+ default="ten"
+ required="false"/>
+ </c:map-property>
+ </plugin-configuration>
+ </server>
</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
index d090e76..4c61512 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -42,4 +42,40 @@
</c:group>
</plugin-configuration>
</server>
+
+ <server name="UpdatedPropertyList">
+ <plugin-configuration>
+ <c:list-property name="myList"
+ displayName="My Test List"
+ readOnly="false"
+ description="Update Property List Test"
+ required="true"
+ min="1"
+ max="5">
+ <c:map-property name="myMap">
+ <c:simple-property name="myListMember"
+ type="double"
+ default="3.14"
+ description="PI"/>
+ </c:map-property>
+ </c:list-property>
+ </plugin-configuration>
+ </server>
+
+ <server name="UpdatedMapWithRemovedProperty">
+ <plugin-configuration>
+ <c:map-property name="myMap"/>
+ </plugin-configuration>
+ </server>
+
+ <server name="UpdatedMapWithUpdatedProperty">
+ <plugin-configuration>
+ <c:map-property name="myMap">
+ <c:simple-property name="propertyToUpdate"
+ type="integer"
+ default="10"
+ required="true"/>
+ </c:map-property>
+ </plugin-configuration>
+ </server>
</plugin>
13 years, 8 months
[rhq] modules/core modules/enterprise
by mazz
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/SubjectCriteria.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java | 203 ++++++++++
modules/enterprise/server/plugins/alert-subject/pom.xml | 21 -
modules/enterprise/server/plugins/alert-subject/src/main/java/org/rhq/enterprise/server/plugins/alertSubject/SubjectsBackingBean.java | 84 ----
modules/enterprise/server/plugins/alert-subject/src/main/resources/META-INF/rhq-serverplugin.xml | 14
modules/enterprise/server/plugins/alert-subject/src/main/resources/subjects.xhtml | 22 -
9 files changed, 241 insertions(+), 146 deletions(-)
New commits:
commit 51ddbfc1c712a4e7cad1812007e77ef17de3e3ba
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Mon Oct 4 15:25:22 2010 -0400
implement the new alert-subject server plugin notification editor. this needs to be tested to make sure the sender still works. but the notification configuration is consistent with how it was before so it should work
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/SubjectCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/SubjectCriteria.java
index 4e9418c..af0882f 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/SubjectCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/SubjectCriteria.java
@@ -22,10 +22,13 @@
*/
package org.rhq.core.domain.criteria;
+import java.util.List;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.util.CriteriaUtils;
import org.rhq.core.domain.util.PageOrdering;
/**
@@ -45,7 +48,8 @@ public class SubjectCriteria extends Criteria {
private String filterPhoneNumber;
private String filterDepartment;
private Boolean filterFactive;
- private Integer filterRoleId;
+ private Integer filterRoleId; // needs overrides
+ private List<Integer> filterIds; // needs overrides
private boolean fetchConfiguration;
private boolean fetchRoles;
@@ -64,6 +68,8 @@ public class SubjectCriteria extends Criteria {
+ " FROM Subject innerSubject " //
+ " JOIN innerSubject.roles innerRole " //
+ " WHERE innerRole.id = ? )");
+
+ filterOverrides.put("ids", "id IN ( ? )");
}
@Override
@@ -111,6 +117,10 @@ public class SubjectCriteria extends Criteria {
this.filterRoleId = filterRoleId;
}
+ public void addFilterIds(Integer... filterIds) {
+ this.filterIds = CriteriaUtils.getListIgnoringNulls(filterIds);
+ }
+
public void fetchConfiguration(boolean fetchConfiguration) {
this.fetchConfiguration = fetchConfiguration;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
index 5b8b0b4..0dabe26 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
@@ -99,4 +99,6 @@ public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
public void setExtraConfiguration(Configuration extraConfiguration) {
this.extraConfiguration = extraConfiguration;
}
+
+ public abstract boolean validate();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 390357c..7d8745d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -147,8 +147,12 @@ public class NewNotificationEditor extends LocatableDynamicForm {
@Override
public void onClick(ClickEvent event) {
if (validate(false)) {
- saveNewNotification();
- closeFunction.run();
+ AbstractNotificationSenderForm senderForm = (AbstractNotificationSenderForm) senderCanvasItem
+ .getCanvas();
+ if (senderForm.validate()) {
+ saveNewNotification();
+ closeFunction.run();
+ }
}
}
});
@@ -214,7 +218,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
// For those that want to write their own custom alert plugins, you are restricted to
// using configuration definitions as the only way to configure the sender.
if ("System Users".equals(sender)) {
- newCanvas = null; // TODO
+ newCanvas = new SystemUsersNotificationSenderForm(newLocatorId, notificationToEdit, sender);
} else if ("System Roles".equals(sender)) {
newCanvas = null; // TODO
} else if ("Resource Operations".equals(sender)) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
index 4a16380..65ddcd9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
@@ -41,6 +41,8 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
*/
public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
+ private ConfigurationEditor configEditor;
+
public SimpleNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
super(locatorId, notif, sender);
}
@@ -53,10 +55,10 @@ public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm
new AsyncCallback<ConfigurationDefinition>() {
@Override
public void onSuccess(ConfigurationDefinition configDef) {
- ConfigurationEditor configEditor = new ConfigurationEditor(extendLocatorId("configEditor"),
- configDef, getConfiguration());
- configEditor.setHeight(500);
- configEditor.setWidth(500);
+ configEditor = new ConfigurationEditor(extendLocatorId("configEditor"), configDef,
+ getConfiguration());
+ configEditor.setHeight(400);
+ configEditor.setWidth(600);
addMember(configEditor);
markForRedraw();
}
@@ -72,4 +74,13 @@ public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm
}
});
}
+
+ @Override
+ public boolean validate() {
+ if (configEditor != null) {
+ return configEditor.validate();
+ }
+ return true;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java
new file mode 100644
index 0000000..cdbaedf
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SystemUsersNotificationSenderForm.java
@@ -0,0 +1,203 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.configuration.PropertySimple;
+import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.admin.users.UsersDataSource;
+import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * This notification form will be used for the System Users sender. This form lets
+ * you pick users that the sender will send notifications to.
+ *
+ * @author John Mazzitelli
+ */
+public class SystemUsersNotificationSenderForm extends AbstractNotificationSenderForm {
+
+ // the alert configuration property name where the IDs are stored in |-separated form
+ private static final String PROPNAME = "subjectId";
+
+ private SubjectSelector selector;
+
+ public SystemUsersNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
+ super(locatorId, notif, sender);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+
+ String subjectIds = getConfiguration().getSimpleValue(PROPNAME, ""); // we know the subject plugin defines this
+ if (subjectIds != null && subjectIds.length() > 0) {
+ try {
+ List<Integer> ids = unfence(subjectIds, Integer.class);
+ SubjectCriteria criteria = new SubjectCriteria();
+ criteria.addFilterIds(ids.toArray(new Integer[ids.size()]));
+ GWTServiceLookup.getSubjectService().findSubjectsByCriteria(criteria,
+ new AsyncCallback<PageList<Subject>>() {
+ @Override
+ public void onSuccess(PageList<Subject> result) {
+ createNewSelector(result);
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Cannot determine current users - starting empty",
+ caught);
+ createNewSelector(null);
+ }
+ });
+ } catch (Exception e) {
+ CoreGUI.getErrorHandler().handleError("Cannot use current users - starting empty", e);
+ createNewSelector(null);
+ }
+ } else {
+ createNewSelector(null);
+ }
+ }
+
+ private void createNewSelector(Collection<Subject> preselectedSubjects) {
+ String selectorLocatorId = extendLocatorId("userSelector");
+ selector = new SubjectSelector(selectorLocatorId, preselectedSubjects);
+ selector.setWidth(400);
+ selector.setHeight(300);
+ addMember(selector);
+ markForRedraw();
+ }
+
+ @Override
+ public boolean validate() {
+ if (selector != null) {
+ try {
+ HashSet<Integer> selectedIds = selector.getSelection();
+ String newPropValue = fence(selectedIds);
+ getConfiguration().put(new PropertySimple(PROPNAME, newPropValue));
+ return true;
+ } catch (Exception e) {
+ CoreGUI.getErrorHandler().handleError("Cannot save the selected users", e);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @SuppressWarnings("unchecked")
+ private <T> List<T> unfence(String fencedData, Class<T> type) {
+ String delimiter = "\\|";
+ String[] elements = fencedData.split(delimiter);
+ List<T> results = new ArrayList<T>(elements.length);
+
+ if (Integer.class.equals(type)) {
+ for (String next : elements) {
+ if (next.length() != 0) {
+ results.add((T) Integer.valueOf(next));
+ }
+ }
+ } else if (String.class.equals(type)) {
+ for (String next : elements) {
+ if (next.length() != 0) {
+ results.add((T) next);
+ }
+ }
+ } else {
+ throw new IllegalArgumentException("No support for unfencing data of type " + type);
+ }
+ return results;
+ }
+
+ /**
+ * Takes the list of elements e1, e2, e3 and fences
+ * them with '|' delimiters such that the result looks
+ * like "|e1|e2|e3|"
+ */
+ private String fence(Collection<?> elements) {
+ if (elements.size() == 0) {
+ return "";
+ }
+ StringBuilder builder = new StringBuilder();
+ builder.append('|');
+ for (Object next : elements) {
+ builder.append(String.valueOf(next)).append('|');
+ }
+ return builder.toString();
+ }
+
+ private class SubjectSelector extends AbstractSelector<Subject> {
+
+ public SubjectSelector(String id, Collection<Subject> subjects) {
+ super(id);
+ if (subjects != null) {
+ ListGridRecord[] data = (new UsersDataSource()).buildRecords(subjects);
+ setAssigned(data);
+ }
+ }
+
+ @Override
+ protected RPCDataSource<Subject> getDataSource() {
+ return new SelectedSubjectsDataSource();
+ }
+
+ @Override
+ protected DynamicForm getAvailableFilterForm() {
+ return null; // No Filters Currently
+ }
+
+ @Override
+ protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
+ return null; // No Filters Currently
+ }
+
+ public class SelectedSubjectsDataSource extends UsersDataSource {
+
+ @Override
+ public ListGridRecord[] buildRecords(Collection<Subject> subjects) {
+ ListGridRecord[] records = super.buildRecords(subjects);
+ for (ListGridRecord record : records) {
+ if (selection.contains(record.getAttributeAsInt("id"))) {
+ record.setEnabled(false);
+ }
+ }
+ return records;
+ }
+ }
+
+ }
+}
diff --git a/modules/enterprise/server/plugins/alert-subject/pom.xml b/modules/enterprise/server/plugins/alert-subject/pom.xml
index 09f2ddc..03e4631 100644
--- a/modules/enterprise/server/plugins/alert-subject/pom.xml
+++ b/modules/enterprise/server/plugins/alert-subject/pom.xml
@@ -23,31 +23,10 @@
<properties>
<scm.module.path>modules/enterprise/server/plugins/alert-subject/</scm.module.path>
- <seam.version>2.1.0.SP1</seam.version>
</properties>
<dependencies>
- <dependency>
- <groupId>org.jboss.seam</groupId>
- <artifactId>jboss-seam</artifactId>
- <version>${seam.version}</version>
- <exclusions>
- <exclusion>
- <groupId>xml-apis</groupId>
- <artifactId>xml-apis</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
-
- <dependency>
- <groupId>jboss.jboss-embeddable-ejb3</groupId>
- <artifactId>jboss-ejb3-all</artifactId>
- <version>1.0.0.Alpha9</version>
- <scope>compile</scope>
- </dependency>
-
</dependencies>
<build>
diff --git a/modules/enterprise/server/plugins/alert-subject/src/main/java/org/rhq/enterprise/server/plugins/alertSubject/SubjectsBackingBean.java b/modules/enterprise/server/plugins/alert-subject/src/main/java/org/rhq/enterprise/server/plugins/alertSubject/SubjectsBackingBean.java
deleted file mode 100644
index b98bb1b..0000000
--- a/modules/enterprise/server/plugins/alert-subject/src/main/java/org/rhq/enterprise/server/plugins/alertSubject/SubjectsBackingBean.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.server.plugins.alertSubject;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.configuration.PropertySimple;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.enterprise.server.plugin.pc.alert.AlertSender;
-import org.rhq.enterprise.server.plugin.pc.alert.CustomAlertSenderBackingBean;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * Backing Bean for the subjects sender alert sender plugin custom UI
- * @author Joseph Marques
- */
-public class SubjectsBackingBean extends CustomAlertSenderBackingBean {
-
- private Map<String, String> available;
- private List<String> currentSubjects;
- private static final String SUBJECT_ID = "subjectId";
-
- @Override
- public void loadView() {
- // get available/all subjects
- List<Subject> allSubjects = LookupUtil.getSubjectManager().findAllSubjects(new PageControl());
- available = new HashMap<String, String>();
- for (Subject subject : allSubjects) {
- String subjectId = String.valueOf(subject.getId());
- available.put(subject.getName(), subjectId);
- }
-
- // get current subjects
- String subjectString = alertParameters.getSimpleValue(SUBJECT_ID, "");
- currentSubjects = AlertSender.unfence(subjectString, String.class);
- }
-
- @Override
- public void saveView() {
- String subjectIds = AlertSender.fence(currentSubjects);
-
- PropertySimple p = alertParameters.getSimple(SUBJECT_ID);
- if (p == null) {
- p = new PropertySimple(SUBJECT_ID, subjectIds);
- alertParameters.put(p);
- } else {
- p.setStringValue(subjectIds);
- }
-
- alertParameters = persistConfiguration(alertParameters);
- }
-
- public List<String> getCurrentSubjects() {
- return currentSubjects;
- }
-
- public void setCurrentSubjects(List<String> currentSubjects) {
- this.currentSubjects = currentSubjects;
- }
-
- public Map<String, String> getAvailableSubjectsMap() {
- return available;
- }
-
-}
diff --git a/modules/enterprise/server/plugins/alert-subject/src/main/resources/META-INF/rhq-serverplugin.xml b/modules/enterprise/server/plugins/alert-subject/src/main/resources/META-INF/rhq-serverplugin.xml
index 6260aa4..277df97 100644
--- a/modules/enterprise/server/plugins/alert-subject/src/main/resources/META-INF/rhq-serverplugin.xml
+++ b/modules/enterprise/server/plugins/alert-subject/src/main/resources/META-INF/rhq-serverplugin.xml
@@ -15,21 +15,13 @@
Used to send notifications to registered users in the system.
</serverplugin:help>
- <!-- startup & tear down listener, + scheduled jobs
- <serverplugin:plugin-component class="Foo" />
- -->
-
-
-
<!-- How does this sender show up in drop downs etc -->
<short-name>System Users</short-name>
<!-- Class that does the actual sending -->
<plugin-class>SubjectsSender</plugin-class>
- <custom-ui>
- <ui-snippet-name>subjects.xhtml</ui-snippet-name>
- <backing-bean-class>SubjectsBackingBean</backing-bean-class>
- <backing-bean-name>subjectsBean</backing-bean-name>
- </custom-ui>
+ <alert-configuration>
+ <c:simple-property name="subjectId" type="string" required="true" description="The subjects (ids are |-separated) to be notified"/>
+ </alert-configuration>
</alert-plugin>
\ No newline at end of file
diff --git a/modules/enterprise/server/plugins/alert-subject/src/main/resources/subjects.xhtml b/modules/enterprise/server/plugins/alert-subject/src/main/resources/subjects.xhtml
deleted file mode 100644
index 39d86e8..0000000
--- a/modules/enterprise/server/plugins/alert-subject/src/main/resources/subjects.xhtml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:c="http://java.sun.com/jstl/core"
- xmlns:a4j="https://richfaces.org/a4j"
- xmlns:rich="http://richfaces.ajax4jsf.org/rich">
-
-<body>
- <rich:pickList fastMoveControlsVisible="false"
- sourceListWidth="200px"
- targetListWidth="200px"
- copyControlLabel="Add Subjects"
- removeControlLabel="Remove Subjects"
- value="#{subjectsBean.currentSubjects}">
- <f:selectItems value="#{subjectsBean.availableSubjectsMap}" />
- </rich:pickList>
-</body>
-
-</html>
\ No newline at end of file
13 years, 8 months
[rhq] Branch 'resource-upgrade' - 21 commits - .classpath modules/core modules/enterprise
by lkrejci
.classpath | 2
modules/core/dbutils/pom.xml | 2
modules/core/dbutils/src/main/scripts/dbsetup-build.xml | 2
modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml | 19
modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml | 19
modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml | 5
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 16
modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java | 16
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java | 15
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java | 23
modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java | 51 +
modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java | 26
modules/enterprise/gui/coregui/pom.xml | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml | 44 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 34 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java | 33 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java | 102 +++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 80 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java | 75 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 157 ++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java | 24
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java | 57 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java | 175 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java | 293 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java | 129 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java | 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java | 21
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java | 44 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java | 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java | 107 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java | 28
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java | 54 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java | 132 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java | 65 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 147 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java | 47 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java | 49 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java | 47 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java | 66 +-
modules/enterprise/server/jar/pom.xml | 7
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java | 26
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java | 36 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java | 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 8
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 80 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 9
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java | 77 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java | 27
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java | 19
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java | 199 +++---
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java | 70 ++
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml | 29
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml | 45 +
102 files changed, 2484 insertions(+), 725 deletions(-)
New commits:
commit 65c3b23735a092f9675cb2e878b79039b5ab9c93
Merge: e7fb6ed... ebd4ec6...
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon Oct 4 18:37:55 2010 +0200
Merge branch 'master' into resource-upgrade
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
index 150a692,4e14b75..a004680
--- 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
@@@ -238,11 -274,11 +275,15 @@@ public class ResourceGWTServiceImpl ext
}
public void unignoreResources(Integer[] resourceIds) {
- discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
-}
+
+ public List<ResourceError> findResourceErrors(int resourceId) {
+ return SerialUtility.prepare(resourceManager.findResourceErrors(getSessionSubject(), resourceId),
+ "ResourceService.getResourceErrors");
+ }
+}
commit ebd4ec6f3c0ec9232970ee6c58ebdecf16b5b4a2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:59:28 2010 -0400
be able to resize the new notif dialog
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index f707dc1..117fcb0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -284,8 +284,8 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
winModal.setShowModalMask(true);
winModal.setAutoSize(true);
winModal.setAutoCenter(true);
- //winModal.setShowResizer(true);
- //winModal.setCanDragResize(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
winModal.centerInPage();
winModal.addCloseClickHandler(new CloseClickHandler() {
@Override
commit f0b0a15a1804d4606a03af3fb89ccfc0fb5bff91
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:32:53 2010 -0400
add gwt-log to eclipse classpath
diff --git a/.classpath b/.classpath
index 0a567d7..1a1236c 100644
--- a/.classpath
+++ b/.classpath
@@ -252,6 +252,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.0.3/gwt-user-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/com/google/code/gwt-log/gwt-log/3.0.3/gwt-log-3.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
commit 9325dbcc42782c4a89be13acb7243dc08b618ec2
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 1 21:15:08 2010 -0400
work on completing impl of map-of-simples in ConfigurationEditor
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 343a709..fdc2d9c 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
@@ -39,6 +39,7 @@ import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
+import com.smartgwt.client.util.ValueCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
@@ -73,6 +74,8 @@ import com.smartgwt.client.widgets.form.validator.Validator;
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.CellSavedEvent;
+import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
@@ -115,11 +118,13 @@ import org.rhq.core.domain.configuration.definition.constraint.FloatRangeConstra
import org.rhq.core.domain.configuration.definition.constraint.IntegerRangeConstraint;
import org.rhq.core.domain.configuration.definition.constraint.RegexConstraint;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.PropertyGrid;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.CanvasUtility;
+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;
@@ -561,12 +566,12 @@ public class ConfigurationEditor extends LocatableVLayout {
}
private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap,
- PropertyMap propertyMap) {
+ final PropertyMap propertyMap) {
// create the property grid
- PropertyGrid propertyGrid = new PropertyGrid();
+ final PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.getNameField().setName("Name");
propertyGrid.getValuesField().setName("Value");
-
+
// create the editors
Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
TextItem textEditor = new TextItem();
@@ -575,29 +580,123 @@ public class ConfigurationEditor extends LocatableVLayout {
// set the editors and attribute name where to find the record type
propertyGrid.setEditorsMap("fieldType", editorsMap);
- if (propertyMap != null) {
- ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()];
+ if (propertyDefinitionMap != null) {
+ ListGridRecord[] records = new ListGridRecord[propertyDefinitionMap.getPropertyDefinitions().size()];
int i = 0;
- for (Property property : propertyMap.getMap().values()) {
+ // TODO (ips): For open maps, create the records based on props, not propDefs.
+ // TODO (ips): Render unset checkboxes amd descriptions for member props, just as we would for top-level simples.
+ for (PropertyDefinition propDef : propertyDefinitionMap.getPropertyDefinitions().values()) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute("Name", property.getName());
- record.setAttribute("Value", ((PropertySimple) property).getStringValue());
+ String propertyName = propDef.getName();
+ record.setAttribute("Name", propertyName);
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ String value = (prop != null) ? prop.getStringValue() : null;
+ record.setAttribute("Value", value);
record.setAttribute("fieldType", "simpleText");
+ record.setAttribute("readOnly", propDef.isReadOnly());
records[i++] = record;
}
propertyGrid.setData(records);
}
- propertyGrid.draw();
+ VLayout canvas = new VLayout();
+
+ canvas.addMember(propertyGrid);
+
+ // Footer
+ ToolStrip footer = new ToolStrip();
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
+ canvas.addMember(footer);
+
+ // Properties can only be added to or deleted from non-read-only "open" maps.
+ if (propertyDefinitionMap.getPropertyDefinitions().isEmpty() && !propertyDefinitionMap.isReadOnly()) {
+ final IButton deleteButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
+ deleteButton.setDisabled(true);
+ deleteButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ final ListGridRecord[] selectedRecords = propertyGrid.getSelection();
+ String noun = (selectedRecords.length == 1) ? "property" : "properties";
+ String message = "Are you sure you want to delete the selected" + noun + "?";
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ for (ListGridRecord selectedRecord : selectedRecords) {
+ propertyGrid.removeData(selectedRecord);
+ String propertyName = selectedRecord.getAttribute("Name");
+ propertyMap.getMap().remove(propertyName);
+ }
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(deleteButton);
- CanvasItem item = new CanvasItem();
- item.setCanvas(propertyGrid);
- // item.setHeight(500);
- item.setColSpan(3);
- item.setEndRow(true);
- item.setShowTitle(false);
- fields.add(item);
+ propertyGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ int count = propertyGrid.getSelection().length;
+ deleteButton.setDisabled(count < 1);
+ }
+ });
+
+ final IButton newButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "New");
+ newButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.askforValue("Enter the name of the property to be added.", new ValueCallback() {
+ @Override
+ public void execute(String propertyName) {
+ if (propertyMap.get(propertyName) != null) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Cannot add property named '" + propertyName
+ + "', because the set already contains a property with that name.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient)));
+ } else {
+ propertyMap.put(new PropertySimple(propertyName, null));
+
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute("Name", propertyName);
+ record.setAttribute("Value", "");
+ record.setAttribute("fieldType", "simpleText");
+
+ propertyGrid.addData(record);
+ propertyGrid.focus();
+ propertyGrid.enableSpecificEditor(record);
+
+ CoreGUI.getMessageCenter().notify(new Message("Added property to the set.", EnumSet.of(
+ Message.Option.Transient)));
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(newButton);
+ }
+ propertyGrid.addCellSavedHandler(new CellSavedHandler() {
+ @Override
+ public void onCellSaved(CellSavedEvent cellSavedEvent) {
+ Record record = cellSavedEvent.getRecord();
+ String propertyName = record.getAttribute("Name");
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ if (prop == null) {
+ prop = new PropertySimple(propertyName, null);
+ }
+ String value = record.getAttribute("Value");
+ prop.setStringValue(value);
+ }
+ });
+
+ propertyGrid.draw();
+
+ CanvasItem canvasItem = new CanvasItem();
+ canvasItem.setCanvas(canvas);
+ // item.setHeight(500);
+ canvasItem.setColSpan(3);
+ canvasItem.setEndRow(true);
+ canvasItem.setShowTitle(false);
+ fields.add(canvasItem);
}
private void buildListOfMapsField(final String locatorId, ArrayList<FormItem> fields,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
index ee6b7d7..73340fa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
@@ -38,7 +38,6 @@ import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
* @author Dan Mihai Ile
*/
public class PropertyGrid extends ListGrid {
-
/**
* Map to hold the editors
*/
@@ -56,7 +55,7 @@ public class PropertyGrid extends ListGrid {
*/
public PropertyGrid() {
- // create the 2 fields, one for names, other for values
+ // Create the 2 fields - one for names, other for values.
ListGridField nameField = new ListGridField();
nameField.setCanEdit(false);
ListGridField valueField = new ListGridField();
@@ -100,7 +99,7 @@ public class PropertyGrid extends ListGrid {
/**
* Set the name of the attribute from where the row will get the editor name
- * to be used on the {@link Map} from where the rows will get it's editors
+ * to be used on the {@link Map} from where the rows will get its editors
* <p/>
* When an edit starts the {@link PropertyGrid} will retrieve the key of the
* editor form the row's attributes and use that key on the map to get the
@@ -120,8 +119,9 @@ public class PropertyGrid extends ListGrid {
*
* @param record the record
*/
- private void enableSpecificEditor(Record record) {
- if (editorsMap != null) {
+ public void enableSpecificEditor(Record record) {
+ boolean readOnly = record.getAttributeAsBoolean("readOnly");
+ if (editorsMap != null && !readOnly) {
String attribute = record.getAttribute(valueFieldAttribute);
if (editorsMap.containsKey(attribute)) {
FormItem formItem = editorsMap.get(attribute);
@@ -129,5 +129,4 @@ public class PropertyGrid extends ListGrid {
}
}
}
-
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 429ef36..3a0b464 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -39,6 +39,10 @@ public class Message {
public enum Severity { Info, Warning, Error, Fatal };
public enum Option { Transient, Sticky, BackgroundJobResult };
+ public Message(String conciseMessage) {
+ this(conciseMessage, (Severity)null);
+ }
+
public Message(String conciseMessage, Severity severity) {
this(conciseMessage, null, severity);
}
@@ -46,7 +50,11 @@ public class Message {
public Message(String conciseMessage, String detailedMessage) {
this(conciseMessage, detailedMessage, null);
}
-
+
+ public Message(String conciseMessage, EnumSet<Option> options) {
+ this(conciseMessage, null, options);
+ }
+
public Message(String conciseMessage, String detailedMessage, Severity severity) {
this(conciseMessage, detailedMessage, severity, null);
}
commit 614e969e489795a4408f23e474507f174c95fdf2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 18:00:25 2010 -0400
Reverting a change made in 6415ed10e3b0d967b712a7be0aa0a3fcf4ce95cb, it
breaks rendering of single-element paths (like "#Bundles or #Reports).
The BookmarkableView's renderView needs to be invoked.
I didn't see any ill effect of adding this back in, so I'm not sure of the
intent of the original change. May need more work.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index e9b7788..cf9e470 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -304,12 +304,19 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
}
if (this.currentCanvas instanceof BookmarkableView) {
- viewPath.next();
- if (!viewPath.isEnd()) {
- ((BookmarkableView) this.currentCanvas).renderView(viewPath);
- }
+ ((BookmarkableView) this.currentCanvas).renderView(viewPath.next());
}
+ // reverting this is as it breaks rendering of single-element paths (like "#Bundles or
+ // #Reports. the BookmarkableView's renderView needs to be invoked.
+ //
+ //if (this.currentCanvas instanceof BookmarkableView) {
+ // viewPath.next();
+ // if (!viewPath.isEnd()) {
+ // ((BookmarkableView) this.currentCanvas).renderView(viewPath);
+ // }
+ //}
+
refreshBreadCrumbTrail();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
index fb382fa..4dc2182 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
@@ -45,6 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.Breadcrumb;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewId;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.bundle.BundleTopView;
import org.rhq.enterprise.gui.coregui.client.bundle.deploy.BundleDeployWizard;
import org.rhq.enterprise.gui.coregui.client.bundle.deployment.BundleDeploymentView;
import org.rhq.enterprise.gui.coregui.client.bundle.destination.BundleDestinationListView;
@@ -98,7 +99,7 @@ public class BundleView extends LocatableVLayout implements BookmarkableView {
this.bundle = bundle;
- addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", "Bundles"));
+ addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", BundleTopView.VIEW_ID));
headerLabel = new HeaderLabel("subsystems/bundle/Bundle_24.png", bundle.getName());
commit 53a86e032a7df9e9c35bb50c9bde6fca72c722aa
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work
- support for locked nodes
- support for autogroups for non-inventory managers. Now that AGs are
backed by compat groups it's necessary for non-inv-managers
to be able to create and access the private groups that they own. Private
groups (aka subject-owned groups) are new, they are basically groups
that are tagged with the creating subjectId. Those groups can be
created (via a new slsb call) and fetched (via a new ResourceGroupCriteria
filter) w/o inventory manager perms.
- note: i had to move rhq_subject to auth-schema from authz-schema and
slightly change the dbsetup order to make it ok for rhq_resource_group to
reference rhq_subject.
- schema spec bumped to 2.97
- added ResourceLineageComposite to combine Resource and locked/viewable
info.
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 c06c636..d6cfdba 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
@@ -628,6 +628,7 @@ public class ResourceTreeView extends LocatableVLayout {
}
if (!root.equals(ResourceTreeView.this.rootResource)) {
+
if (treeGrid != null) {
treeGrid.destroy();
}
commit 4d9fbbc3af633a1e59f5148edcb6bab040d618c0
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 18:59:21 2010 -0400
create the catch-all simple notif sender config editor
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
index 357943f..5b8b0b4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
@@ -37,9 +37,41 @@ public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
private Configuration configuration;
private Configuration extraConfiguration;
+ private final String sender;
- public AbstractNotificationSenderForm(String locatorId) {
+ public AbstractNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
super(locatorId);
+
+ this.sender = sender;
+
+ if (notif != null) {
+ // make our own deep copies of the configs so we can throw them away without
+ // affecting the actual notif in case the user clicks cancel
+ Configuration notifConfig = notif.getConfiguration();
+ Configuration notifExtraConfig = notif.getExtraConfiguration();
+
+ if (notifConfig != null) {
+ configuration = notifConfig.deepCopy(true);
+ } else {
+ configuration = new Configuration(); // must not be null
+ }
+ if (notifExtraConfig != null) {
+ extraConfiguration = notifExtraConfig.deepCopy(true);
+ } else {
+ extraConfiguration = null; // allowed to be null
+ }
+ } else {
+ configuration = new Configuration();
+ extraConfiguration = null;
+ }
+ }
+
+ /**
+ * The name of the alert sender that is to be configured.
+ * @return the sender name
+ */
+ public String getSender() {
+ return sender;
}
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 92d8f75..390357c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -197,11 +197,33 @@ public class NewNotificationEditor extends LocatableDynamicForm {
if (oldCanvas != null) {
oldCanvas.markForDestroy();
}
-
- // TODO: need to create different forms for different types of senders
- SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender));
+ AbstractNotificationSenderForm newCanvas = createNotificationSenderForm(newAlertSender);
senderCanvasItem.setCanvas(newCanvas);
-
markForRedraw();
}
+
+ private AbstractNotificationSenderForm createNotificationSenderForm(String sender) {
+ String newLocatorId = extendLocatorId(sender);
+ AbstractNotificationSenderForm newCanvas;
+
+ // NOTE: today there is no way for an alert server plugin developer
+ // to be able to provide us with a custom UI component to render (like we used to be able
+ // to do when the ui was implemented in JSF and the server plugin can give us a JSF snippet).
+ // We have to hard code the names of the "special" plugins that require special UIs which
+ // are necessary to build the sender configuration for these special alert senders.
+ // For those that want to write their own custom alert plugins, you are restricted to
+ // using configuration definitions as the only way to configure the sender.
+ if ("System Users".equals(sender)) {
+ newCanvas = null; // TODO
+ } else if ("System Roles".equals(sender)) {
+ newCanvas = null; // TODO
+ } else if ("Resource Operations".equals(sender)) {
+ newCanvas = null; // TODO
+ } else {
+ // catch all - all other senders are assumed to just have simple configuration definition
+ // that can be used by our configuration editor UI component to ask for config values.
+ newCanvas = new SimpleNotificationSenderForm(newLocatorId, notificationToEdit, sender);
+ }
+ return newCanvas;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
index a70bd82..4a16380 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
@@ -23,8 +23,15 @@
package org.rhq.enterprise.gui.coregui.client.alert.definitions;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.Label;
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+
/**
* This notification form will be used for most alert senders since most alert senders
* only need to be given a simple set of configuration properties where the user
@@ -34,14 +41,35 @@ import com.smartgwt.client.widgets.Label;
*/
public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
- public SimpleNotificationSenderForm(String locatorId) {
- super(locatorId);
+ public SimpleNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
+ super(locatorId, notif, sender);
}
@Override
- protected void onInit() {
- super.onInit();
- // TODO add config editor
- addMember(new Label("simple form : " + getLocatorId()));
+ protected void onDraw() {
+ super.onDraw();
+
+ GWTServiceLookup.getAlertDefinitionService().getConfigurationDefinitionForSender(getSender(),
+ new AsyncCallback<ConfigurationDefinition>() {
+ @Override
+ public void onSuccess(ConfigurationDefinition configDef) {
+ ConfigurationEditor configEditor = new ConfigurationEditor(extendLocatorId("configEditor"),
+ configDef, getConfiguration());
+ configEditor.setHeight(500);
+ configEditor.setWidth(500);
+ addMember(configEditor);
+ markForRedraw();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ String errMsg = "Cannot get alert sender configuration definition";
+ CoreGUI.getErrorHandler().handleError(errMsg, caught);
+ Label label = new Label(errMsg);
+ label.setIcon("[SKIN]/Dialog/error.png");
+ addMember(label);
+ markForRedraw();
+ }
+ });
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
index ee93aed..ceb427e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
@@ -22,6 +22,7 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.util.PageList;
@@ -43,4 +44,6 @@ public interface AlertDefinitionGWTService extends RemoteService {
String[] getAlertNotificationConfigurationPreview(AlertNotification[] notifs) throws Exception;
String[] getAllAlertSenders() throws Exception;
+
+ ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception;
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
index b906473..ada48ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.exception.ThrowableUtil;
@@ -122,4 +123,15 @@ public class AlertDefinitionGWTServiceImpl extends AbstractGWTServiceImpl implem
throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
+
+ @Override
+ public ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception {
+ try {
+ ConfigurationDefinition results = alertNotifManager.getConfigurationDefinitionForSender(sender);
+ return SerialUtility.prepare(results, "getConfigurationDefinitionForSender");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
}
\ No newline at end of file
commit 54400ac63137b081d50b7bdac7419b44e9ab2dbc
Merge: 9cfec33... cd224c2...
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 16:48:03 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit cd224c2d8b3c2a2ed53d5b66ec4bbdb66b404a41
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 14:33:01 2010 -0400
start building framework for the different forms needed for the different senders
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
new file mode 100644
index 0000000..357943f
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
@@ -0,0 +1,70 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Superclass to all alert senders' forms. Instances of this class
+ * are displayed when switching the drop-down option menu selecting
+ * a specific sender.
+ *
+ * @author John Mazzitelli
+ */
+public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
+
+ private Configuration configuration;
+ private Configuration extraConfiguration;
+
+ public AbstractNotificationSenderForm(String locatorId) {
+ super(locatorId);
+ }
+
+ /**
+ * The {@link AlertNotification#getConfiguration()} for the new alert definition notification.
+ *
+ * @return the configuration
+ */
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
+ /**
+ * The {@link AlertNotification#getExtraConfiguration()} for the new alert definition notification.
+ *
+ * @return the extra configuration
+ */
+ public Configuration getExtraConfiguration() {
+ return extraConfiguration;
+ }
+
+ public void setExtraConfiguration(Configuration extraConfiguration) {
+ this.extraConfiguration = extraConfiguration;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 5da3c43..92d8f75 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -28,12 +28,14 @@ import java.util.LinkedHashMap;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.FormItemIfFunction;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
@@ -54,6 +56,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
private final Runnable closeFunction; // this is called after a button is pressed and the editor should close
private SelectItem notificationSenderSelectItem;
+ private CanvasItem senderCanvasItem;
public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition,
ArrayList<AlertNotification> notifs, AlertNotification notifToEdit, Runnable closeFunc) {
@@ -71,17 +74,30 @@ public class NewNotificationEditor extends LocatableDynamicForm {
setMargin(20);
+ // this is the container that will house the sender-specific form components
+ senderCanvasItem = new CanvasItem();
+ senderCanvasItem.setShowTitle(false);
+ senderCanvasItem.setColSpan(2);
+
notificationSenderSelectItem = new SelectItem("notificationSender", "Notification Sender");
+ notificationSenderSelectItem.setDefaultToFirstOption(true);
+ notificationSenderSelectItem.setWrapTitle(false);
+ notificationSenderSelectItem.setRedrawOnChange(true);
+ notificationSenderSelectItem.setWidth("*");
if (notificationToEdit != null) {
// we were given a notification to edit, you can't change the sender type, its the only option
notificationSenderSelectItem.setDisabled(true);
+ String senderName = notificationToEdit.getSenderName();
LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>(1);
- senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName());
+ senders.put(senderName, senderName);
notificationSenderSelectItem.setValueMap(senders);
+ switchToAlertSender(senderName);
+ senderCanvasItem.setVisible(true);
} else {
notificationSenderSelectItem.setValueMap("Loading...");
notificationSenderSelectItem.setDisabled(true);
+ senderCanvasItem.setVisible(false); // don't show it yet, until we determine what senders exist
// we are creating a new notification, need to provide all senders as options
GWTServiceLookup.getAlertDefinitionService().getAllAlertSenders(new AsyncCallback<String[]>() {
@Override
@@ -94,6 +110,8 @@ public class NewNotificationEditor extends LocatableDynamicForm {
notificationSenderSelectItem.setValueMap(senders);
notificationSenderSelectItem.setDisabled(false);
notificationSenderSelectItem.redraw();
+ switchToAlertSender(result[0]);
+ senderCanvasItem.show();
} else {
CoreGUI.getErrorHandler().handleError("No alert senders available");
}
@@ -106,10 +124,13 @@ public class NewNotificationEditor extends LocatableDynamicForm {
});
}
- notificationSenderSelectItem.setDefaultToFirstOption(true);
- notificationSenderSelectItem.setWrapTitle(false);
- notificationSenderSelectItem.setRedrawOnChange(true);
- notificationSenderSelectItem.setWidth("*");
+ notificationSenderSelectItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ String newAlertSender = event.getValue().toString();
+ switchToAlertSender(newAlertSender);
+ }
+ });
SpacerItem spacer1 = new SpacerItem();
spacer1.setColSpan(2);
@@ -145,7 +166,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
ArrayList<FormItem> formItems = new ArrayList<FormItem>();
formItems.add(notificationSenderSelectItem);
formItems.add(spacer1);
- // TODO put config editor here
+ formItems.add(senderCanvasItem);
formItems.add(spacer2);
formItems.add(ok);
formItems.add(cancel);
@@ -166,20 +187,21 @@ public class NewNotificationEditor extends LocatableDynamicForm {
notif = notificationToEdit;
}
- // notif.setConfiguration(configuration);
- // notif.setExtraConfiguration(extraConfiguration);
+ AbstractNotificationSenderForm senderForm = (AbstractNotificationSenderForm) senderCanvasItem.getCanvas();
+ notif.setConfiguration(senderForm.getConfiguration());
+ notif.setExtraConfiguration(senderForm.getExtraConfiguration());
}
- private class ShowIfSenderFunction implements FormItemIfFunction {
- private final String senderName;
-
- public ShowIfSenderFunction(String senderName) {
- this.senderName = senderName;
+ private void switchToAlertSender(String newAlertSender) {
+ Canvas oldCanvas = senderCanvasItem.getCanvas();
+ if (oldCanvas != null) {
+ oldCanvas.markForDestroy();
}
- public boolean execute(FormItem item, Object value, DynamicForm form) {
- String selectedSenderString = form.getValue("notificationSender").toString();
- return senderName.equals(selectedSenderString);
- }
+ // TODO: need to create different forms for different types of senders
+ SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender));
+ senderCanvasItem.setCanvas(newCanvas);
+
+ markForRedraw();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index bc585ac..f707dc1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -237,7 +237,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
configField.setWidth("75%");
getListGrid().setFields(senderField, configField);
- getListGrid().addDoubleClickHandler(new DoubleClickHandler() {
+ setListGridDoubleClickHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(DoubleClickEvent event) {
ListGrid listGrid = (ListGrid) event.getSource();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
new file mode 100644
index 0000000..a70bd82
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
@@ -0,0 +1,47 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import com.smartgwt.client.widgets.Label;
+
+/**
+ * This notification form will be used for most alert senders since most alert senders
+ * only need to be given a simple set of configuration properties where the user
+ * provides values via the normal configuration editor.
+ *
+ * @author John Mazzitelli
+ */
+public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
+
+ public SimpleNotificationSenderForm(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ // TODO add config editor
+ addMember(new Label("simple form : " + getLocatorId()));
+ }
+}
commit 7101d3d1535d107523615a2a7f7d4d56ec1f537e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 14:32:00 2010 -0400
provide a way to add a double-click handler to the Table API
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 c933047..f5c9a40 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
@@ -35,6 +35,8 @@ import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
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.SelectItem;
@@ -122,6 +124,7 @@ public class Table extends LocatableHLayout {
;
+ private DoubleClickHandler doubleClickHandler;
private List<TableActionInfo> tableActions = new ArrayList<TableActionInfo>();
private boolean tableActionDisableOverride = false;
protected List<Canvas> extraWidgets = new ArrayList<Canvas>();
@@ -259,6 +262,15 @@ public class Table extends LocatableHLayout {
// Now give subclasses a chance to configure the table
configureTable();
+ listGrid.addDoubleClickHandler(new DoubleClickHandler() {
+ @Override
+ public void onDoubleClick(DoubleClickEvent event) {
+ if (doubleClickHandler != null && !getTableActionDisableOverride()) {
+ doubleClickHandler.onDoubleClick(event);
+ }
+ }
+ });
+
setTableInfo(new Label("Total: " + listGrid.getTotalRows()));
// NOTE: It is essential that we wait to hide any excluded fields until after super.onDraw() is called, since
@@ -480,6 +492,10 @@ public class Table extends LocatableHLayout {
tableActions.add(info);
}
+ public void setListGridDoubleClickHandler(DoubleClickHandler handler) {
+ doubleClickHandler = handler;
+ }
+
public void addExtraWidget(Canvas canvas) {
this.extraWidgets.add(canvas);
}
@@ -502,6 +518,9 @@ public class Table extends LocatableHLayout {
* buttons regardless of which rows are selected. This method let's
* you set this override-disable flag.
*
+ * Note: this also effects the double-click handler - if this disable override
+ * is on, the double-click handler is not called.
+ *
* @param disabled if true, all table action buttons will be disabled
* if false, table action buttons will be enabled based on their predefined
* selection enablement rule.
commit ef62478885fcdd851184b31e9d5a94ebad5f7d29
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 1 14:51:33 2010 -0400
integrate gwt-log and convert over all System.out.println's to logging; add test config view (#TestConfig) for testing config editor
diff --git a/modules/enterprise/gui/coregui/pom.xml b/modules/enterprise/gui/coregui/pom.xml
index c8dce21..21dd681 100644
--- a/modules/enterprise/gui/coregui/pom.xml
+++ b/modules/enterprise/gui/coregui/pom.xml
@@ -107,6 +107,12 @@
<version>1.0.0</version>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gwt-log</groupId>
+ <artifactId>gwt-log</artifactId>
+ <version>3.0.3</version>
+ </dependency>
+
<!-- for file uploads -->
<dependency>
<groupId>commons-fileupload</groupId>
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 8db747c..ed2ce42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -1,5 +1,5 @@
-<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6//EN"
- "http://google-web-toolkit.googlecode.com/svn/releases/1.6/distro-source/c...">
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0//EN"
+ "http://google-web-toolkit.googlecode.com/svn/releases/2.0/distro-source/c...">
<module>
@@ -11,20 +11,45 @@
<inherits name="com.smartgwt.tools.SmartGwtTools"/>
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
-<!--
- <inherits name="com.smartclient.theme.graphite.Graphite"/>
--->
+ <!--
+ <inherits name="com.smartclient.theme.graphite.Graphite"/>
+ -->
<inherits name='ca.nanometrics.gflot.GFlot'/>
<!--
- <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/>
+ <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/>
-->
-<!-- <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator">
+ <!-- ============================ gwt-log ============================= -->
+
+ <!-- For development, a default of 'DEBUG' is recommended. -->
+ <inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG" />
+
+ <!-- For production, most teams prefer to set the default log level to 'OFF'. -->
+ <!--<inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" />-->
+
+ <!--
+ Enable experimental WindowLogger, which logs messages to a separate
+ popup window. There are currently a couple of restrictions:
+
+ 1. When Firefox is configured to open new Windows as new tabs,
+ WindowLogger does not work
+ 2. In hosted mode, the windows are not automatically closed,
+ although you can easily close them manually in the usual way
+ -->
+ <set-property name="log_WindowLogger" value="ENABLED" />
+
+ <!--
+ You probably will want to disable the default `DivLogger` as well:
+ -->
+ <set-property name="log_DivLogger" value="DISABLED" />
+
+ <!--
+ <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator">
<when-type-assignable class="org.rhq.core.domain.util.Recordizable"/>
- </generate-with>-->
-
+ </generate-with>
+ -->
<replace-with class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl">
<when-type-is class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl"/>
@@ -47,6 +72,7 @@
<entry-point class='org.rhq.enterprise.gui.coregui.client.CoreGUI'/>
<entry-point class='org.rhq.enterprise.gui.coregui.client.SearchGUI'/>
+
<servlet path="/AlertGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertGWTServiceImpl"/>
<servlet path="/AlertDefinitionGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl"/>
<servlet path="/AuthorizationGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AuthorizationGWTServiceImpl"/>
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index 34cf23e..e9b7788 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
@@ -45,6 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceT
import org.rhq.enterprise.gui.coregui.client.menu.MenuBarView;
import org.rhq.enterprise.gui.coregui.client.report.ReportTopView;
import org.rhq.enterprise.gui.coregui.client.report.tag.TaggedView;
+import org.rhq.enterprise.gui.coregui.client.test.TestConfigurationView;
import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler;
import org.rhq.enterprise.gui.coregui.client.util.WidgetUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.MessageBar;
@@ -84,7 +86,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public void onModuleLoad() {
String hostPageBaseURL = GWT.getHostPageBaseURL();
if (hostPageBaseURL.indexOf("/coregui/") == -1) {
- System.out.println("Suppressing load of CoreGUI module");
+ Log.info("Suppressing load of CoreGUI module");
return; // suppress loading this module if not using the new GWT app
}
@@ -165,7 +167,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) {
String event = URL.decodeComponent(stringValueChangeEvent.getValue());
- //System.out.println("Handling history event: " + event);
+ com.allen_sauer.gwt.log.client.Log.debug("Handling history event: " + event);
currentPath = event;
currentViewPath = new ViewPath(event);
@@ -208,6 +210,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
canvas = new AlertsView("Alert");
} else if (breadcrumbName.equals(ReportTopView.VIEW_ID)) {
canvas = new ReportTopView("Report");
+ } else if (breadcrumbName.equals(TestConfigurationView.VIEW_ID)) {
+ canvas = new TestConfigurationView("TestConfig");
} else {
canvas = null;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
index bd0aabe..d252fb8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
@@ -89,7 +89,7 @@ public class DemoCanvas extends Canvas {
configSelectMenu.addItemClickHandler(new ItemClickHandler() {
public void onItemClick(ItemClickEvent itemClickEvent) {
int x = configSelectMenu.getItemNum(itemClickEvent.getItem());
- System.out.println("Loading: " + x);
+ com.allen_sauer.gwt.log.client.Log.info("Loading: " + x);
topTabSet.removeTab(configTab);
switch (x) {
case 0:
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 24ef812..3d79afd 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
@@ -178,7 +178,7 @@ public class LoginView extends Canvas {
ResourceTypeRepository.Cache.getInstance().getResourceTypes((Integer[]) null,
EnumSet.allOf(ResourceTypeRepository.MetadataType.class), new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("Preloaded [" + types.size() + "] resource types");
+ com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] resource types");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
index 2266993..55588e9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
@@ -41,7 +41,7 @@ public class SearchGUI implements EntryPoint {
public void onModuleLoad() {
if (SearchBar.existsOnPage() == false) {
- System.out.println("Suppressing load of SearchGUI module");
+ com.allen_sauer.gwt.log.client.Log.info("Suppressing load of SearchGUI module");
return;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index 5219213..ecbd719 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -22,6 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
@@ -30,7 +31,6 @@ import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.util.SC;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.SubjectCriteria;
@@ -66,7 +66,7 @@ public class UserSessionManager {
private static Timer sessionTimer = new Timer() {
@Override
public void run() {
- System.out.println("Session Timer Expired");
+ Log.info("Session timer expired.");
new LoginView().showLoginDialog(); // log user out, show login dialog
}
};
@@ -88,7 +88,7 @@ public class UserSessionManager {
try {
b.setCallback(new RequestCallback() {
public void onResponseReceived(final Request request, final Response response) {
- System.out.println("response text = " + response.getText());
+ com.allen_sauer.gwt.log.client.Log.info("response text = " + response.getText());
String sessionIdString = response.getText();
if (sessionIdString != null && sessionIdString.length() > 0) {
@@ -96,20 +96,20 @@ public class UserSessionManager {
final int subjectId = Integer.parseInt(parts[0]);
final String sessionId = parts[1]; // not null
final long lastAccess = Long.parseLong(parts[2]);
- System.out.println("sessionAccess-subjectId: " + subjectId);
- System.out.println("sessionAccess-sessionId: " + sessionId);
- System.out.println("sessionAccess-lastAccess: " + lastAccess);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-subjectId: " + subjectId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-sessionId: " + sessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-lastAccess: " + lastAccess);
String previousSessionId = getPreviousSessionId(); // may be null
- System.out.println("sessionAccess-previousSessionId: " + previousSessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-previousSessionId: " + previousSessionId);
if (previousSessionId == null || previousSessionId.equals(sessionId) == false) {
// persist sessionId if different from previously saved sessionId
- System.out.println("sessionAccess-savingSessionId: " + sessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-savingSessionId: " + sessionId);
saveSessionId(sessionId);
// new sessions get the full 29 minutes to expire
- System.out.println("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT);
sessionTimer.schedule(SESSION_TIMEOUT);
} else {
@@ -124,7 +124,7 @@ public class UserSessionManager {
expiryMillis = SESSION_TIMEOUT; // guarantees maximum is 29 minutes
}
- System.out.println("sessionAccess-reschedulingSessionTimeout: " + expiryMillis);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-reschedulingSessionTimeout: " + expiryMillis);
sessionTimer.schedule((int) expiryMillis);
}
@@ -143,13 +143,13 @@ public class UserSessionManager {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
"UserSessionManager: Failed to load user's subject", caught);
- System.out.println("Failed to load user's subject");
+ com.allen_sauer.gwt.log.client.Log.info("Failed to load user's subject");
new LoginView().showLoginDialog();
}
public void onSuccess(PageList<Subject> result) {
- System.out.println("Found subject");
Subject subject = result.get(0);
+ Log.debug("Found subject [" + subject + "].");
subject.setSessionId(Integer.valueOf(sessionId));
// reset the session subject to the latest, for wrapping in user preferences
@@ -187,7 +187,7 @@ public class UserSessionManager {
@Override
public void onFailure(Throwable caught) {
- SC.say("Unable to determine login status, check server status");
+ Log.error("Unable to determine login status - check Server status.");
}
});
}
@@ -213,7 +213,7 @@ public class UserSessionManager {
// now continue with the rest of the login logic
loggedIn = true;
- System.out.println("Refreshing Session Timer");
+ Log.info("Refreshing session timer...");
sessionTimer.schedule(millis);
}
@@ -223,7 +223,7 @@ public class UserSessionManager {
}
loggedIn = false;
- System.out.println("Destroying Session Timer");
+ Log.info("Destroying session timer...");
sessionTimer.cancel();
// log out the web session on the server-side in a delayed fashion,
@@ -250,7 +250,7 @@ public class UserSessionManager {
}
public static boolean isLoggedIn() {
- //System.out.println("isLoggedIn = " + loggedIn);
+ Log.trace("isLoggedIn = " + loggedIn);
return loggedIn;
}
@@ -272,5 +272,4 @@ public class UserSessionManager {
public static UserPreferences getUserPreferences() {
return userPreferences;
}
-
}
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 61b58b7..a950c34 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
@@ -153,7 +153,7 @@ public class AlertDataSource extends RPCDataSource<Alert> {
public void onSuccess(PageList<Alert> result) {
long fetchTime = System.currentTimeMillis() - start;
- System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
response.setTotalRows(result.getTotalSize());
@@ -284,7 +284,7 @@ public class AlertDataSource extends RPCDataSource<Alert> {
CoreGUI.getMessageCenter().notify(
new Message("Acknowledged [" + alertIds.length + "] alerts", Message.Severity.Info));
- System.out.println("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + ".");
+ com.allen_sauer.gwt.log.client.Log.info("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + ".");
alertsView.refresh();
}
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 d21ab76..ad825a9 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
@@ -96,7 +96,7 @@ public class AlertPortletDataSource extends AlertDataSource {
public void onSuccess(PageList<Alert> result) {
long fetchTime = System.currentTimeMillis() - start;
- System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
response.setData(buildRecords(result));
response.setTotalRows(result.size());
processResponse(request.getRequestId(), response);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
index 7da68cd..fa823e3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
@@ -106,7 +106,7 @@ public class BundleTopView extends LocatableHLayout implements BookmarkableView
if (viewPath.isEnd()) {
if (currentNextPath == null && bundlesListView != null) {
// refresh
- System.out.println("Refreshing BundleTopView");
+ com.allen_sauer.gwt.log.client.Log.info("Refreshing BundleTopView");
bundlesListView.refresh();
} else {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
index c90ca57..bc296cc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
@@ -33,7 +33,7 @@ public class FullHTMLPane extends HTMLPane {
public FullHTMLPane(String url) {
this();
- //System.out.println("Creating IFrame pane with URL [" + url + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Creating IFrame pane with URL [" + url + "]...");
setContentsURL(url);
}
}
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 eb1e2d2..343a709 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
@@ -241,7 +241,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void onSuccess(Configuration result) {
configuration = result;
- System.out.println("Config retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.info("Config retreived in: " + (System.currentTimeMillis() - start));
reload();
}
});
@@ -250,7 +250,7 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.resourceConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getResourceConfigurationDefinition();
if (definition == null) {
loadingLabel.hide();
@@ -276,7 +276,7 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.pluginConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getPluginConfigurationDefinition();
if (definition == null) {
showError("Connection settings are not supported by this Resource.");
@@ -302,7 +302,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.RAW
|| definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) {
- System.out.println("Loading files view...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading files view...");
Tab tab = new LocatableTab("Files", "Files");
tab.setPane(buildRawPane());
tabSet.addTab(tab);
@@ -310,7 +310,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED
|| definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) {
- System.out.println("Loading properties view...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading properties view...");
Tab tab = new LocatableTab("Properties", "Properties");
tab.setPane(buildStructuredPane());
tabSet.addTab(tab);
@@ -358,10 +358,10 @@ public class ConfigurationEditor extends LocatableVLayout {
fileTree.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
String path = selectionEvent.getRecord().getAttribute("name");
- System.out.println("Getting Path: " + path);
+ com.allen_sauer.gwt.log.client.Log.info("Getting Path: " + path);
rawEditor.setValue(filesMap.get(path).getContents());
rawEditor.redraw();
- System.out.println("Data: " + filesMap.get(path).getContents());
+ com.allen_sauer.gwt.log.client.Log.info("Data: " + filesMap.get(path).getContents());
}
});
@@ -391,7 +391,7 @@ public class ConfigurationEditor extends LocatableVLayout {
}
for (PropertyGroupDefinition definition : definitions) {
- // System.out.println("building: " + definition.getDisplayName());
+ // com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName());
sectionStack.addSection(buildGroupSection(layout.extendLocatorId(definition.getName()), definition));
}
@@ -656,7 +656,7 @@ public class ConfigurationEditor extends LocatableVLayout {
editField.setCanHide(false);
editField.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent recordClickEvent) {
- System.out.println("You want to edit: " + recordClickEvent.getRecord());
+ com.allen_sauer.gwt.log.client.Log.info("You want to edit: " + recordClickEvent.getRecord());
displayMapEditor(locatorId + "_MapEdit", summaryTable, recordClickEvent.getRecord(),
propertyDefinition, propertyList, (PropertyMap) recordClickEvent.getRecord().getAttributeAsObject(
"_RHQ_PROPERTY"));
@@ -678,7 +678,7 @@ public class ConfigurationEditor extends LocatableVLayout {
removeField.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(final RecordClickEvent recordClickEvent) {
- System.out.println("You want to delete: " + recordClickEvent.getRecordNum());
+ com.allen_sauer.gwt.log.client.Log.info("You want to delete: " + recordClickEvent.getRecordNum());
SC.confirm("Are you sure you want to delete this row?", new BooleanCallback() {
public void execute(Boolean aBoolean) {
if (aBoolean) {
@@ -865,7 +865,7 @@ public class ConfigurationEditor extends LocatableVLayout {
Click handlers seem to be turned off for disabled fields... need an alternative
valueItem.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- System.out.println("Click in value field");
+ com.allen_sauer.gwt.log.client.Log.info("Click in value field");
clickEvent.getItem().setDisabled(false);
unsetItem.setValue(false);
@@ -1000,10 +1000,10 @@ public class ConfigurationEditor extends LocatableVLayout {
list.add(finalMap);
ListGridRecord record = buildSummaryRecord(definitions, finalMap);
- System.out.println("here");
+ com.allen_sauer.gwt.log.client.Log.info("here");
try {
summaryTable.addData(record);
- System.out.println("there");
+ com.allen_sauer.gwt.log.client.Log.info("there");
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
index 9e0e480..7136199 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
@@ -73,7 +73,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(Configuration result) {
configuration = result;
- System.out.println("Got config");
+ com.allen_sauer.gwt.log.client.Log.info("Got config");
reload();
}
});
@@ -85,7 +85,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(ConfigurationDefinition result) {
definition = result;
- System.out.println("Got def");
+ com.allen_sauer.gwt.log.client.Log.info("Got def");
reload();
}
@@ -108,7 +108,7 @@ public class ListGridConfigurationEditor extends VLayout {
sectionStack.setOverflow(Overflow.VISIBLE);
for (PropertyGroupDefinition definition : definitions) {
- System.out.println("building: " + definition.getDisplayName());
+ com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName());
sectionStack.addSection(buildGroupSection(definition));
}
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 f4b3cad..ca5a929 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
@@ -198,7 +198,7 @@ public class DashboardView extends LocatableVLayout {
picker.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
Object v = changedEvent.getValue();
- System.out.println("color chagned to " + v);
+ com.allen_sauer.gwt.log.client.Log.info("color chagned to " + v);
setBackgroundColor(String.valueOf(v));
storedDashboard.getConfiguration().put(new PropertySimple(Dashboard.CFG_BACKGROUND, String.valueOf(v)));
save();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
index 7e0fb8e..422c244 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
@@ -314,7 +314,7 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView
}
}
} else {
- System.out.println("WARN: While rendering DashboardsView tabSet is null.");
+ com.allen_sauer.gwt.log.client.Log.info("WARN: While rendering DashboardsView tabSet is null.");
}
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
index 8a3d355..aad543c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
@@ -81,7 +81,7 @@ public class PortalLayout extends LocatableHLayout {
colNum++;
}
save();
- System.out.println("Rearranged column indexes");
+ com.allen_sauer.gwt.log.client.Log.info("Rearranged column indexes");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
index a21e4f5..b30714f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
@@ -96,7 +96,7 @@ public abstract class AbstractMeasurementDataTraitDataSource extends RPCDataSour
public void onSuccess(PageList<MeasurementDataTrait> result) {
long fetchDuration = System.currentTimeMillis() - startTime;
- System.out.println(result.size() + " traits fetched in: " + fetchDuration + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " traits fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
index 08f3473..e1181ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
@@ -105,7 +105,7 @@ public abstract class AbstractMeasurementScheduleDataSource extends RPCDataSourc
public void onSuccess(PageList<MeasurementSchedule> result) {
long fetchDuration = System.currentTimeMillis() - startTime;
- System.out.println(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
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 6c9127b..9e2442b 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
@@ -110,7 +110,7 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
public void onSelectionChanged(SelectionEvent selectionEvent) {
if (selectionEvent.getState()) {
Record selectedNode = selectionEvent.getRecord();
- System.out.println("Node selected in tree: " + selectedNode);
+ com.allen_sauer.gwt.log.client.Log.info("Node selected in tree: " + selectedNode);
ResourceType type = (ResourceType) selectedNode.getAttributeAsObject("resourceType");
if (type != null) {
// It's a cluster group node, not a subcategory node or an autoTypeGroup node.
@@ -118,14 +118,14 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
if (key == null) {
// The root group was selected.
String groupId = selectedNode.getAttribute("id");
- //System.out.println("Selecting group [" + groupId + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting group [" + groupId + "]...");
String viewPath = ResourceGroupTopView.VIEW_ID + "/" + groupId;
String currentViewPath = History.getToken();
if (!currentViewPath.startsWith(viewPath)) {
CoreGUI.goToView(viewPath);
}
} else {
- //System.out.println("Selecting cluster group [" + key + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting cluster group [" + key + "]...");
selectClusterGroup(key);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
index ccf8ee3..7bf4903 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
@@ -65,19 +65,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void enableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView,
- int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
- this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
+ final int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
+ this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
- CoreGUI.getErrorHandler().handleError("Failed to enable collection of metrics "
+ CoreGUI.getErrorHandler().handleError("Failed to enable collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Enabled collection of metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Enabled collection of selected metric" + s + ".",
+ "Enabled collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"].", Message.Severity.Info));
@@ -87,18 +89,20 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void disableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView, int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
- this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
+ this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
- CoreGUI.getErrorHandler().handleError("Failed to disable collection of metrics "
+ CoreGUI.getErrorHandler().handleError("Failed to disable collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Disabled collection of metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Disabled collection of selected metric" + s + ".",
+ "Disabled collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"].", Message.Severity.Info));
@@ -109,19 +113,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void updateSchedules(AbstractMeasurementScheduleListView measurementScheduleListView,
int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames, final long collectionInterval) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
this.measurementService.updateSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, collectionInterval,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
CoreGUI.getErrorHandler().handleError("Failed to set collection interval to " + (collectionInterval / 1000)
- + " seconds for metrics " + measurementDefinitionDisplayNames + " for Resource group with id ["
+ + " seconds for metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id ["
+ resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Collection interval for metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Updated collection intervals of selected metric" + s + ".",
+ "Collection interval for metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"] set to " + (collectionInterval / 1000) + " seconds.", Message.Severity.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 e1bed72..6382fcb 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
@@ -165,7 +165,7 @@ public class ResourceSearchView extends Table {
long start = System.currentTimeMillis();
getListGrid().fetchData(c);
- System.out.println("Loaded in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.info("Loaded in: " + (System.currentTimeMillis() - start));
}
}
});*/
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
index bccf8c5..35eb2d6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
@@ -133,12 +133,12 @@ public class NewResourceTreeDataSource extends DataSource {
ResourceCriteria criteria = new ResourceCriteria();
if (p == null) {
- System.out.println("DataSourceTree: Loading initial data");
+ com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading initial data");
criteria.addFilterId(rootId);
} else {
- System.out.println("DataSourceTree: Loading " + p);
+ com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading " + p);
criteria.addFilterParentResourceId(Integer.parseInt(p));
}
@@ -319,7 +319,7 @@ public class NewResourceTreeDataSource extends DataSource {
String parentId = resource.getParentResource() == null ? null
: (resource.getParentResource().getId() + "_" + resource.getResourceType().getName());
- // System.out.println(id + " / " + parentId);
+ // com.allen_sauer.gwt.log.client.Log.info(id + " / " + parentId);
setID(id);
setParentID(parentId);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
index bad1ada..da08c04 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
@@ -124,7 +124,7 @@ public class NewResourceTreeView extends LocatableVLayout {
if (treeGrid.getSelectedRecord() instanceof ResourceTreeDatasource.ResourceTreeNode) {
ResourceTreeDatasource.ResourceTreeNode node = (ResourceTreeDatasource.ResourceTreeNode) treeGrid
.getSelectedRecord();
- System.out.println("Resource selected in tree: " + node.getResource());
+ com.allen_sauer.gwt.log.client.Log.info("Resource selected in tree: " + node.getResource());
String newToken = "Resource/" + node.getResource().getId();
String currentToken = History.getToken();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
index 1c73198..d577c4d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
@@ -107,7 +107,6 @@ public class ResourceTreeDatasource extends DataSource {
case UPDATE:
//executeAdd(lstRec, false);
break;
-
default:
break;
}
@@ -119,12 +118,12 @@ public class ResourceTreeDatasource extends DataSource {
//final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId");
- // System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
+ // com.allen_sauer.gwt.log.client.Log.info("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
ResourceCriteria criteria = new ResourceCriteria();
if (parentResourceId == null) {
- System.out.println("ResourceTreeDatasource: Loading initial data...");
+ com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading initial data...");
// criteria.addFilterId(rootId);
@@ -133,7 +132,7 @@ public class ResourceTreeDatasource extends DataSource {
return;
} else {
- System.out.println("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]...");
+ com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]...");
criteria.addFilterParentResourceId(Integer.parseInt(parentResourceId));
}
@@ -205,14 +204,14 @@ public class ResourceTreeDatasource extends DataSource {
Resource parentResource = resource.getParentResource();
ResourceSubCategory subcategory = type.getSubCategory();
if (subcategory != null) {
- //System.out.println("Processing " + subcategory + "...");
+ com.allen_sauer.gwt.log.client.Log.debug("Processing " + subcategory + "...");
do {
String subcategoryNodeId = SubCategoryTreeNode.idOf(subcategory, parentResource);
if (!subcategoryNodes.containsKey(subcategoryNodeId)) {
SubCategoryTreeNode subcategoryNode = new SubCategoryTreeNode(subcategory,
parentResource);
subcategoryNodes.put(subcategoryNode.getID(), subcategoryNode);
- //System.out.println("Adding " + subcategoryNode + " to tree...");
+ com.allen_sauer.gwt.log.client.Log.debug("Adding " + subcategoryNode + " to tree...");
updatedNodes.add(subcategoryNode);
}
} while ((subcategory = subcategory.getParentSubCategory()) != null);
@@ -221,7 +220,7 @@ public class ResourceTreeDatasource extends DataSource {
if (!type.isSingleton()) {
AutoGroupTreeNode autogroupNode = new AutoGroupTreeNode(resource);
autogroupNodes.put(autogroupNodeId, autogroupNode);
- //System.out.println("Adding " + autogroupNode + " to tree...");
+ com.allen_sauer.gwt.log.client.Log.debug("Adding " + autogroupNode + " to tree...");
updatedNodes.add(autogroupNode);
}
}
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 4cea21b..c06c636 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
@@ -159,7 +159,7 @@ public class ResourceTreeView extends LocatableVLayout {
treeGrid.deselectAllRecords();
}
} else if (selectedRecord instanceof AutoGroupTreeNode) {
- System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
+ com.allen_sauer.gwt.log.client.Log.info("AutoGroup Node selected in tree: " + selectedRecord);
AutoGroupTreeNode agNode = (AutoGroupTreeNode) selectedRecord;
selectedNodeId = agNode.getID();
@@ -173,7 +173,7 @@ public class ResourceTreeView extends LocatableVLayout {
}
});
} else {
- System.out.println("Unhandled Node selected in tree: " + selectedRecord);
+ com.allen_sauer.gwt.log.client.Log.info("Unhandled Node selected in tree: " + selectedRecord);
}
}
}
@@ -628,7 +628,6 @@ public class ResourceTreeView extends LocatableVLayout {
}
if (!root.equals(ResourceTreeView.this.rootResource)) {
-
if (treeGrid != null) {
treeGrid.destroy();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
index 4556da0..116e1ad 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
@@ -118,8 +118,7 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Pro
public void onSuccess(PluginConfigurationUpdate result) {
CoreGUI.getMessageCenter().notify(
new Message("Connection settings updated.",
- "Connection settings updated for Resource [" + resource.getName() + "].",
- Message.Severity.Info));
+ "Connection settings updated for Resource [" + resource.getName() + "]."));
reloadConfiguration();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
index 5d0be9d..e76e2ca 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
@@ -113,7 +113,7 @@ public class OperationCreateWizard extends AbstractWizard {
}
private void execute() {
- System.out.println("TODO Executed operation!!");
+ com.allen_sauer.gwt.log.client.Log.info("TODO Executed operation!!");
OperationGWTServiceAsync operationService = GWTServiceLookup.getOperationService();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
index cfa51bf..1c01176 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
@@ -109,7 +109,7 @@ public class ResourceTypeRepository {
}
});
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start));
+ // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start));
}
public void loadResourceTypes(final PageList<ResourceGroup> groups, final ResourceTypeLoadedInGroupCallback callback) {
@@ -142,7 +142,7 @@ public class ResourceTypeRepository {
}
});
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start));
+ // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start));
}
public void getResourceTypes(Integer[] resourceTypeIds, final TypesLoadedCallback callback) {
@@ -234,7 +234,7 @@ public class ResourceTypeRepository {
criteria.setPageControl(PageControl.getUnlimitedInstance());
- System.out.println("Loading " + typesNeeded.size()
+ com.allen_sauer.gwt.log.client.Log.info("Loading " + typesNeeded.size()
+ ((metadataTypes != null) ? (" types: " + metadataTypes) : ""));
resourceTypeService.findResourceTypesByCriteria(criteria, new AsyncCallback<PageList<ResourceType>>() {
@@ -313,7 +313,7 @@ public class ResourceTypeRepository {
public void preloadAll() {
getResourceTypes((Integer[]) null, EnumSet.allOf(MetadataType.class), new TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("Preloaded [" + types.size() + "] Resource types.");
+ com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] Resource types.");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
index da5b92e..f6e1730 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
@@ -119,7 +119,7 @@ public class DropDownMenuBarView extends LocatableVLayout {
resourcesMenu.addItem(favoritesMenu);
menu.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- System.out.println("over here");
+ com.allen_sauer.gwt.log.client.Log.info("over here");
favoritesMenu.refresh();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
index 657c4d3..5e6d943 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
@@ -165,7 +165,7 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
- //System.out.println("ChangedEvent: " + changedEvent.getValue());
+ com.allen_sauer.gwt.log.client.Log.debug("ChangedEvent: " + changedEvent.getValue());
Object intermediate = changedEvent.getValue();
if (!(intermediate instanceof Integer)) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
index 47dcded..42c830b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
@@ -140,7 +140,7 @@ public class SearchBar extends SimplePanel {
}
public SearchBar() {
- System.out.println("Loading SearchBar...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading SearchBar...");
// in the future, will be instantiated directly from a higher-level widget
if (existsOnPage()) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java
new file mode 100644
index 0000000..bfcb322
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java
@@ -0,0 +1,293 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+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.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionEnumeration;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionList;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionMap;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
+import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
+import org.rhq.core.domain.configuration.definition.PropertySimpleType;
+
+/**
+ * A utility class that provides methods for creating a test {@link ConfigurationDefinition} and a
+ * {@link Configuration} that conforms to that definition.
+ *
+ * @author Ian Springer
+ */
+public abstract class TestConfigurationFactory {
+ public static ConfigurationDefinition createConfigurationDefinition() {
+ ConfigurationDefinition configurationDefinition = new ConfigurationDefinition("TestConfig", "a test config");
+ Map<String, PropertyDefinition> propertyDefinitions = new HashMap<String, PropertyDefinition>();
+ configurationDefinition.setPropertyDefinitions(propertyDefinitions);
+
+ PropertyDefinitionSimple simplePropDef;
+
+ simplePropDef = createStringPropDef1();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = createStringPropDef2();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("LongString", "a Long String simple prop", false,
+ PropertySimpleType.LONG_STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Password", "a Password simple prop", false,
+ PropertySimpleType.PASSWORD);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Boolean", "a required Boolean simple prop", true,
+ PropertySimpleType.BOOLEAN);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+ simplePropDef.setRequired(true);
+
+ simplePropDef = createIntegerPropDef();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Float", "a Float simple prop", false, PropertySimpleType.FLOAT);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("StringEnum1",
+ "a String enum prop with <=5 items - should be rendered as radio buttons", false,
+ PropertySimpleType.STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ ArrayList<PropertyDefinitionEnumeration> propDefEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ propDefEnums.add(new PropertyDefinitionEnumeration("NY", "NY"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("NJ", "NJ", true));
+ propDefEnums.add(new PropertyDefinitionEnumeration("PA", "PA"));
+ simplePropDef.setEnumeratedValues(propDefEnums, false);
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("StringEnum2",
+ "a String enum prop with >5 items - should be rendered as a popup menu", false, PropertySimpleType.STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propDefEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ propDefEnums.add(new PropertyDefinitionEnumeration("red", "red"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("orange", "orange", true));
+ propDefEnums.add(new PropertyDefinitionEnumeration("yellow", "yellow"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("green", "green"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("blue", "blue"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("purple", "purple"));
+ simplePropDef.setEnumeratedValues(propDefEnums, false);
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ PropertyDefinitionMap mapPropDef = new PropertyDefinitionMap("MapOfSimples", "a map of simples", false);
+ mapPropDef.put(createStringPropDef1());
+ mapPropDef.put(createStringPropDef2());
+ mapPropDef.put(createIntegerPropDef());
+ mapPropDef.setDisplayName(mapPropDef.getName());
+ propertyDefinitions.put(mapPropDef.getName(), mapPropDef);
+
+ PropertyDefinitionMap openMapPropDef = new PropertyDefinitionMap("OpenMapOfSimples", "an open map of simples",
+ false);
+ openMapPropDef.setDisplayName(openMapPropDef.getName());
+ propertyDefinitions.put(openMapPropDef.getName(), openMapPropDef);
+
+ PropertyDefinitionMap readOnlyOpenMapPropDef = new PropertyDefinitionMap("ReadOnlyOpenMapOfSimples",
+ "a read-only open map of simples", false);
+ readOnlyOpenMapPropDef.setDisplayName(readOnlyOpenMapPropDef.getName());
+ readOnlyOpenMapPropDef.setReadOnly(true);
+ propertyDefinitions.put(readOnlyOpenMapPropDef.getName(), readOnlyOpenMapPropDef);
+
+ PropertyDefinitionList listOfSimplesPropDef = new PropertyDefinitionList("ListOfStrings",
+ "another list of Strings", true, new PropertyDefinitionSimple("note", "a note", false,
+ PropertySimpleType.STRING));
+ listOfSimplesPropDef.setDisplayName(listOfSimplesPropDef.getName());
+ propertyDefinitions.put(listOfSimplesPropDef.getName(), listOfSimplesPropDef);
+
+ PropertyDefinitionMap mapInListPropDef =
+ new PropertyDefinitionMap("MapOfSimplesInList", "a map of simples in a list", false);
+ mapInListPropDef.put(createStringPropDef1());
+ mapInListPropDef.put(createStringPropDef2());
+ mapInListPropDef.put(createIntegerPropDef());
+ mapInListPropDef.setDisplayName(mapInListPropDef.getName());
+
+ PropertyDefinitionList listPropDef = new PropertyDefinitionList("ListOfMaps", "a list of maps", true,
+ mapInListPropDef);
+ listPropDef.setDisplayName(listPropDef.getName());
+ propertyDefinitions.put(listPropDef.getName(), listPropDef);
+
+ PropertyDefinitionMap mapInReadOnlyListPropDef =
+ new PropertyDefinitionMap("MapOfSimplesInReadOnlyList", "a map of simples in a list", false);
+ mapInReadOnlyListPropDef.put(createStringPropDef1());
+ mapInReadOnlyListPropDef.put(createStringPropDef2());
+ mapInReadOnlyListPropDef.put(createIntegerPropDef());
+ mapInReadOnlyListPropDef.setDisplayName(mapInReadOnlyListPropDef.getName());
+
+ PropertyDefinitionList readOnlyListPropDef = new PropertyDefinitionList("ReadOnlyListOfMaps",
+ "a read-only list of maps", true, mapInReadOnlyListPropDef);
+ readOnlyListPropDef.setDisplayName(readOnlyListPropDef.getName());
+ readOnlyListPropDef.setReadOnly(true);
+ propertyDefinitions.put(readOnlyListPropDef.getName(), readOnlyListPropDef);
+
+ PropertyGroupDefinition propertyGroupDefinition = new PropertyGroupDefinition("myGroup");
+ propertyGroupDefinition.setDisplayName(propertyGroupDefinition.getName());
+ propertyGroupDefinition.setDescription("this is an example group");
+
+ PropertyDefinitionSimple myString = new PropertyDefinitionSimple("myString1", "my little string", true,
+ PropertySimpleType.STRING);
+ myString.setDisplayName(myString.getName());
+ myString.setSummary(true);
+ propertyDefinitions.put(myString.getName(), myString);
+ myString.setPropertyGroupDefinition(propertyGroupDefinition);
+
+ PropertyDefinitionSimple myString2 = new PropertyDefinitionSimple("myString2", "my other little string", true,
+ PropertySimpleType.STRING);
+ myString2.setDisplayName(myString2.getName());
+ myString2.setSummary(true);
+ propertyDefinitions.put(myString2.getName(), myString2);
+ myString2.setPropertyGroupDefinition(propertyGroupDefinition);
+
+ PropertyGroupDefinition propertyGroupDefinition2 = new PropertyGroupDefinition("myGroup2");
+ propertyGroupDefinition2.setDisplayName(propertyGroupDefinition2.getName());
+ propertyGroupDefinition2.setDescription("this is another example group");
+
+ PropertyDefinitionSimple myString3 = new PropertyDefinitionSimple("myString3", "my third string", true,
+ PropertySimpleType.STRING);
+ myString3.setDisplayName((myString3.getName()));
+ myString3.setSummary(true);
+ propertyDefinitions.put(myString3.getName(), myString3);
+ myString3.setPropertyGroupDefinition(propertyGroupDefinition2);
+
+ PropertyDefinitionSimple enumExample = new PropertyDefinitionSimple("myEnum",
+ "a grouped enum prop with <=5 items", false, PropertySimpleType.STRING);
+ enumExample.setDisplayName(enumExample.getName());
+ ArrayList<PropertyDefinitionEnumeration> myEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ myEnums.add(new PropertyDefinitionEnumeration("Burlington", "Burlington"));
+ myEnums.add(new PropertyDefinitionEnumeration("Camden", "Camden", true));
+ myEnums.add(new PropertyDefinitionEnumeration("Gloucester", "Gloucester"));
+ enumExample.setEnumeratedValues(myEnums, false);
+ propertyDefinitions.put(enumExample.getName(), enumExample);
+ enumExample.setPropertyGroupDefinition(propertyGroupDefinition2);
+
+ return configurationDefinition;
+ }
+
+ public static Configuration createConfiguration() {
+ Configuration configuration = new Configuration();
+ configuration.setNotes("a test config");
+ configuration.setVersion(1);
+
+ configuration.put(new PropertySimple("String1", "blah"));
+ configuration.put(new PropertySimple("String2",
+ "a really, really, really, really, really long value that won't fit in the text input box"));
+ configuration.put(new PropertySimple("LongString", "blah blah blah\nblah blah blah"));
+ configuration.put(new PropertySimple("Password", null));
+ configuration.put(new PropertySimple("Boolean", false));
+ configuration.put(new PropertySimple("Integer", 666));
+ configuration.put(new PropertySimple("Float", Math.PI));
+
+ configuration.put(new PropertySimple("StringEnum1", "PA"));
+ configuration.put(new PropertySimple("StringEnum2", "blue"));
+
+ PropertyMap propMap1 = new PropertyMap("MapOfSimples");
+ propMap1.put(new PropertySimple("String1", "One"));
+ propMap1.put(new PropertySimple("String2", "Two"));
+ propMap1.put(new PropertySimple("Integer", 11));
+ configuration.put(propMap1);
+
+ PropertyMap openPropMap1 = new PropertyMap("OpenMapOfSimples");
+ openPropMap1.put(new PropertySimple("PROCESSOR_ARCHITECTURE", "x86"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_IDENTIFIER", "x86 Family 6 Model 15 Stepping 6, GenuineIntel"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_LEVEL", "6"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_REVISION", "0f06"));
+ configuration.put(openPropMap1);
+
+ PropertyMap openPropMap2 = new PropertyMap("ReadOnlyOpenMapOfSimples");
+ openPropMap2.put(new PropertySimple("ANT_HOME", "C:\\opt\\ant-1.6.5"));
+ openPropMap2.put(new PropertySimple("ANT_OPTS", "-Xms128M -Xmx256M"));
+ configuration.put(openPropMap2);
+
+ configuration.put(new PropertyList("ListOfStrings", new PropertySimple("note", "Do"), new PropertySimple(
+ "note", "Re"), new PropertySimple("note", "Mi"), new PropertySimple("note", "Fa"), new PropertySimple(
+ "note", "So"), new PropertySimple("note", "La"), new PropertySimple("note", "Ti")));
+
+ PropertyMap propMap2 = new PropertyMap("MapOfSimples");
+ propMap2.put(new PropertySimple("String1", "Uno"));
+ propMap2.put(new PropertySimple("String2", "Dos"));
+ propMap2.put(new PropertySimple("Integer", Integer.MIN_VALUE));
+ PropertyMap propMap3 = new PropertyMap("MapOfSimples");
+ propMap3.put(new PropertySimple("String1", "Un"));
+ propMap3.put(new PropertySimple("String2", "Deux"));
+ propMap3.put(new PropertySimple("Integer", Integer.MAX_VALUE));
+ configuration.put(new PropertyList("ListOfMaps", propMap2, propMap3));
+
+ PropertyMap propMap4 = new PropertyMap("MapOfSimples");
+ propMap4.put(new PropertySimple("String1", "A"));
+ propMap4.put(new PropertySimple("String2", "B"));
+ propMap4.put(new PropertySimple("Integer", 999));
+ PropertyMap propMap5 = new PropertyMap("MapOfSimples");
+ propMap5.put(new PropertySimple("String1", "a"));
+ propMap5.put(new PropertySimple("String2", "b"));
+ propMap5.put(new PropertySimple("Integer", 0));
+ configuration.put(new PropertyList("ReadOnlyListOfMaps", propMap4, propMap5));
+
+ configuration.put(new PropertySimple("myString1", "grouped String 1"));
+ configuration.put(new PropertySimple("myString2", "grouped String 2"));
+ configuration.put(new PropertySimple("myString3", "strings are cool"));
+ configuration.put(new PropertySimple("myEnum", "Burlington"));
+
+ return configuration;
+ }
+
+ private static PropertyDefinitionSimple createStringPropDef1() {
+ PropertyDefinitionSimple stringPropDef1;
+ stringPropDef1 = new PropertyDefinitionSimple("String1",
+ "an optional String simple prop", false, PropertySimpleType.STRING);
+ stringPropDef1.setDisplayName(stringPropDef1.getName());
+ return stringPropDef1;
+ }
+
+ private static PropertyDefinitionSimple createStringPropDef2() {
+ PropertyDefinitionSimple stringPropDef2;
+ stringPropDef2 = new PropertyDefinitionSimple("String2",
+ "a read-only String simple prop", false, PropertySimpleType.STRING);
+ stringPropDef2.setDisplayName(stringPropDef2.getName());
+ stringPropDef2.setReadOnly(true);
+ return stringPropDef2;
+ }
+
+ private static PropertyDefinitionSimple createIntegerPropDef() {
+ PropertyDefinitionSimple integerPropDef;
+ integerPropDef = new PropertyDefinitionSimple("Integer",
+ "a required summary Integer simple prop", true, PropertySimpleType.INTEGER);
+ integerPropDef.setDisplayName(integerPropDef.getName());
+ integerPropDef.setSummary(true);
+ return integerPropDef;
+ }
+
+ private TestConfigurationFactory() {
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java
new file mode 100644
index 0000000..0349718
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java
@@ -0,0 +1,129 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.test;
+
+import java.util.EnumSet;
+
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeEvent;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * @author Ian Springer
+ */
+public class TestConfigurationView
+ extends LocatableVLayout implements PropertyValueChangeListener {
+ public static final String VIEW_ID = "TestConfig";
+
+ private ConfigurationEditor editor;
+ private LocatableIButton saveButton;
+ private ConfigurationDefinition configurationDefinition;
+ private Configuration configuration;
+
+ public TestConfigurationView(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+ build();
+ }
+
+ public void build() {
+ setWidth100();
+ setHeight100();
+
+ ToolStrip toolStrip = new ToolStrip();
+ toolStrip.setWidth100();
+
+ toolStrip.addMember(new LayoutSpacer());
+
+ this.saveButton = new LocatableIButton(this.extendLocatorId("Save"), "Save");
+ this.saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ save();
+ }
+ });
+ this.saveButton.disable();
+ toolStrip.addMember(this.saveButton);
+
+ addMember(toolStrip);
+
+ this.configurationDefinition = TestConfigurationFactory.createConfigurationDefinition();
+ this.configuration = TestConfigurationFactory.createConfiguration();
+
+ reloadConfiguration();
+ }
+
+ private void reloadConfiguration() {
+ this.saveButton.disable();
+ if (editor != null) {
+ editor.destroy();
+ removeMember(editor);
+ }
+
+ editor = new ConfigurationEditor(extendLocatorId("Editor"), this.configurationDefinition, this.configuration);
+ editor.setOverflow(Overflow.AUTO);
+ editor.addValidationStateChangeListener(this);
+ addMember(editor);
+ }
+
+ private void save() {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Configuration updated.", "Test configuration updated."));
+ }
+
+ @Override
+ public void propertyValueChanged(PropertyValueChangeEvent event) {
+ MessageCenter messageCenter = CoreGUI.getMessageCenter();
+ Message message;
+ if (event.isValidationStateChanged()) {
+ if (event.getInvalidPropertyNames().isEmpty()) {
+ this.saveButton.enable();
+ message = new Message("All properties now have valid values, so the configuration can now be saved.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient));
+ }
+ else {
+ this.saveButton.disable();
+ message = new Message(
+ "One or more properties have invalid values. The values must be corrected before the configuration can be saved.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ }
+ messageCenter.notify(message);
+ }
+ else {
+ this.saveButton.enable();
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index a717108..2640674 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -56,7 +56,7 @@ public abstract class RPCDataSource<T> extends DataSource {
public RPCDataSource(String name) {
if (name != null) {
- System.out.println("Trying to build DS: " + name);
+ com.allen_sauer.gwt.log.client.Log.info("Trying to build DS: " + name);
setID(name);
}
// TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data
@@ -245,7 +245,7 @@ public abstract class RPCDataSource<T> extends DataSource {
@SuppressWarnings("unchecked")
public static <S> S[] getArrayFilter(DSRequest request, String paramName, Class<S> type) {
- //System.out.println("Fetching array " + paramName + " (" + type + ")");
+ com.allen_sauer.gwt.log.client.Log.debug("Fetching array " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -272,14 +272,14 @@ public abstract class RPCDataSource<T> extends DataSource {
throw new IllegalArgumentException("No support for passing array filters of type " + type);
}
- //System.out.println("Result array = " + resultArray);
+ com.allen_sauer.gwt.log.client.Log.debug("Result array = " + resultArray);
return resultArray;
}
@SuppressWarnings("unchecked")
public static <S> S getFilter(DSRequest request, String paramName, Class<S> type) {
- //System.out.println("Fetching " + paramName + " (" + type + ")");
+ com.allen_sauer.gwt.log.client.Log.debug("Fetching " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -301,7 +301,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
}
- //System.out.println("Result = " + result);
+ com.allen_sauer.gwt.log.client.Log.debug("Result = " + result);
return result;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
index 360fd86..17049a8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
@@ -38,7 +38,7 @@ public class TreeUtility {
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
- System.out.println("* " + toString(node));
+ com.allen_sauer.gwt.log.client.Log.info("* " + toString(node));
TreeNode[] childNodes = tree.getChildren(node);
for (TreeNode childNode : childNodes) {
printTreeNode(tree, childNode);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
index 5790c70..5714634 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
@@ -165,7 +165,7 @@ public class WidgetUtility {
indent.append(" ");
}
- System.out.println(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]");
+ com.allen_sauer.gwt.log.client.Log.info(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]");
}
private static List<Widget> getChildren(Widget widget) {
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 8da5ef0..6b356ae 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
@@ -120,6 +120,10 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
label.setWidth(400);
+ // TODO: Create some custom edge images in greed, yellow, red, etc. so we can add nice rounded corners to the
+ // label.
+ //label.setShowEdges(true);
+
String icon = (contents != null) ? SEVERITY_TO_ICON_MAP.get(message.getSeverity()) : 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 d51bc47..1a6968d 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
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.List;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.Timer;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.AnimationEffect;
@@ -158,6 +159,8 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
public void onMessage(final Message message) {
if (!message.isTransient()) {
+ logMessage(message);
+
final Label label = new Label(message.conciseMessage);
label.setMargin(5);
label.setAutoFit(true);
@@ -193,6 +196,25 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
}
}
+ private void logMessage(Message message) {
+ // TODO: Format the message better.
+ String logMessage = message.toString();
+ switch (message.getSeverity()) {
+ case Info:
+ Log.info(logMessage);
+ break;
+ case Warning:
+ Log.warn(logMessage);
+ break;
+ case Error:
+ Log.error(logMessage);
+ break;
+ case Fatal:
+ Log.fatal(logMessage);
+ break;
+ }
+ }
+
private String getSeverityIcon(Message.Severity severity) {
String iconSrc = null;
switch (severity) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
index 2064f63..8ae0364 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
@@ -55,7 +55,7 @@ public class MonitoringRequestCallback implements RequestCallback {
if (STATUS_CODE_OK == response.getStatusCode()) {
RPCManager.getInstance().succeedCall(this);
callback.onResponseReceived(request, response);
- //System.out.println("MonitoringRequestCallback: OK");
+ com.allen_sauer.gwt.log.client.Log.debug("MonitoringRequestCallback: OK");
} else {
RPCManager.getInstance().failCall(this);
callback.onResponseReceived(request, response);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
index 10213f4..3e2e007 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
@@ -62,7 +62,7 @@ public class RPCManager {
}
public void succeedCall(MonitoringRequestCallback callback) {
- //System.out.println("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms.");
+ com.allen_sauer.gwt.log.client.Log.debug("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms.");
inProgress.remove(callback);
refresh();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index 63b71a0..08d8046 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -102,7 +102,7 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
public RawConfiguration dummy(RawConfiguration config) {
- System.out.println(config.getPath());
+ com.allen_sauer.gwt.log.client.Log.info(config.getPath());
return new RawConfiguration();
// Dummy method for gwt compiler
}
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 7c3acfb..e090640 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
@@ -25,6 +25,8 @@ import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Set;
+import com.allen_sauer.gwt.log.client.Log;
+
import org.rhq.core.domain.resource.Resource;
/**
@@ -37,7 +39,7 @@ public class ObjectFilter {
for (Object object : collection) {
filterFields(object, goodFields);
}
- System.out.println("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
+ com.allen_sauer.gwt.log.client.Log.info("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
return collection;
}
@@ -51,11 +53,11 @@ public class ObjectFilter {
// Only clearing objects, no point in clearing primitives as it
// doesn't save any space on the stream
if (!f.getType().isPrimitive()) {
- // System.out.println("clearing " + f.getName());
+ Log.debug("Clearing " + f.getName() + "...");
f.setAccessible(true);
f.set(object, null);
} else {
- // System.out.println("Can't do " + f.getType());
+ Log.debug("Can't do " + f.getType());
}
}
}
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 14c6f8d..4e14b75 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
@@ -111,7 +111,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
- System.out.println("Loading GWT RPC Services");
+ com.allen_sauer.gwt.log.client.Log.info("Loading GWT RPC Services");
}
public ResourceGWTServiceImpl() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
index c74aa3c..4d6706c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
@@ -26,7 +26,7 @@ public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implement
}
public RawConfiguration dummy(RawConfiguration config) {
- System.out.println(config.getPath());
+ com.allen_sauer.gwt.log.client.Log.info(config.getPath());
return new RawConfiguration();
}
}
\ No newline at end of file
commit 198bfdca2ff0c5f150e2f98a20655a5bde66d247
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Oct 1 13:48:22 2010 -0400
add jxpath to eclipse .classpath
diff --git a/.classpath b/.classpath
index c13d973..0a567d7 100644
--- a/.classpath
+++ b/.classpath
@@ -254,5 +254,6 @@
<classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>
commit 374f578bc10335cd4cd93a8800b264ee5dcd5ee2
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Oct 1 13:18:06 2010 -0400
fix all current gwt services to wrap exceptions that are gwt-serializable
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
index a1f47c9..dc7497f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.alert.Alert;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AlertGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
@@ -35,15 +36,27 @@ public class AlertGWTServiceImpl extends AbstractGWTServiceImpl implements Alert
private AlertManagerLocal alertManager = LookupUtil.getAlertManager();
public PageList<Alert> findAlertsByCriteria(AlertCriteria criteria) {
- return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria),
- "AlertService.findAlertsByCriteria");
+ try {
+ return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria),
+ "AlertService.findAlertsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteResourceAlerts(Integer[] alertIds) {
- this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds);
+ try {
+ this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void acknowledgeResourceAlerts(Integer[] alertIds) {
- this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds);
+ try {
+ this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
index 7218061..4b8d73f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
import java.util.Set;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AuthorizationGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
@@ -32,30 +33,53 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class AuthorizationGWTServiceImpl extends AbstractGWTServiceImpl implements AuthorizationGWTService {
+ private static final long serialVersionUID = 1L;
+
private AuthorizationManagerLocal authorizationManager = LookupUtil.getAuthorizationManager();
public Set<Permission> getExplicitResourcePermissions(int resourceId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions(
- getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions(
+ getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getImplicitResourcePermissions(int resourceId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions(
- getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions(
+ getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getExplicitGroupPermissions(int groupId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions(
- getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions(
+ getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getImplicitGroupPermissions(int groupId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions(
- getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions(
+ getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getExplicitGlobalPermissions() {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager
- .getExplicitGlobalPermissions(getSessionSubject())), "AuthorizationManager.getExplicitGlobalPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager
+ .getExplicitGlobalPermissions(getSessionSubject())),
+ "AuthorizationManager.getExplicitGlobalPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
index cbf72c7..4b636f0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
@@ -18,10 +18,10 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AvailabilityGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
@@ -32,15 +32,16 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class AvailabilityGWTServiceImpl extends AbstractGWTServiceImpl implements AvailabilityGWTService {
+ private static final long serialVersionUID = 1L;
private AvailabilityManagerLocal availabilityManager = LookupUtil.getAvailabilityManager();
public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
-
- return SerialUtility.prepare(
- availabilityManager.findAvailabilityForResource(getSessionSubject(), resourceId, pc),
- "AvailabilityService.findAvailabilityForResource"
- );
-
+ try {
+ return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
+ resourceId, pc), "AvailabilityService.findAvailabilityForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
index f3f8323..211735d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
@@ -38,32 +38,28 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ClusterGWTServiceImpl extends AbstractGWTServiceImpl implements ClusterGWTService {
+ private static final long serialVersionUID = 1L;
private ClusterManagerLocal clusterManager = LookupUtil.getClusterManager();
-
public ResourceGroup createAutoClusterBackingGroup(ClusterKey clusterKey, boolean addResources) {
- return SerialUtility.prepare(
- clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey, addResources),
- "ClusterGWTServiceImpl.createAutoClusterBackingGroup");
+ return SerialUtility.prepare(clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey,
+ addResources), "ClusterGWTServiceImpl.createAutoClusterBackingGroup");
}
public ResourceGroup getAutoClusterBackingGroup(ClusterKey clusterKey) {
- return SerialUtility.prepare(
- clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey),
- "ClusterGWTServiceImpl.getAutoClusterBackingGroup");
+ return SerialUtility.prepare(clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey),
+ "ClusterGWTServiceImpl.getAutoClusterBackingGroup");
}
public List<Resource> getAutoClusterResources(ClusterKey clusterKey) {
- return SerialUtility.prepare(
- clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey),
- "ClusterGWTServiceImpl.getAutoClusterResources");
+ return SerialUtility.prepare(clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey),
+ "ClusterGWTServiceImpl.getAutoClusterResources");
}
public ClusterFlyweight getClusterTree(int groupId) {
- return SerialUtility.prepare(
- clusterManager.getClusterTree(getSessionSubject(), groupId),
- "ClusterGWTServiceImpl.getClusterTree");
+ return SerialUtility.prepare(clusterManager.getClusterTree(getSessionSubject(), groupId),
+ "ClusterGWTServiceImpl.getClusterTree");
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index 487b167..63b71a0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -1,6 +1,5 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.RawConfiguration;
@@ -9,79 +8,97 @@ import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
-import org.rhq.enterprise.server.configuration.ConfigurationUpdateStillInProgressException;
import org.rhq.enterprise.server.util.LookupUtil;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implements ConfigurationGWTService {
+ private static final long serialVersionUID = 1L;
private ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
public Configuration getPluginConfiguration(int resourceId) {
-
-
- Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId);
-
- return SerialUtility.prepare(configuration, "PluginConfiguration");
+ try {
+ Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId);
+ return SerialUtility.prepare(configuration, "PluginConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public ConfigurationDefinition getPluginConfigurationDefinition(int resourceTypeId) {
-
- ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType(getSessionSubject(), resourceTypeId);
- return SerialUtility.prepare(definition, "PluginDefinition");
+ try {
+ ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType(
+ getSessionSubject(), resourceTypeId);
+ return SerialUtility.prepare(definition, "PluginDefinition");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
public Configuration getResourceConfiguration(int resourceId) {
-
- Configuration configuration = configurationManager.getResourceConfiguration(getSessionSubject(), resourceId);
- return SerialUtility.prepare(configuration, "ResourceConfiguration");
+ try {
+ Configuration configuration = configurationManager
+ .getResourceConfiguration(getSessionSubject(), resourceId);
+ return SerialUtility.prepare(configuration, "ResourceConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public ConfigurationDefinition getResourceConfigurationDefinition(int resourceTypeId) {
-
- ConfigurationDefinition definition = configurationManager.getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId);
- return SerialUtility.prepare(definition, "ResourceDefinition");
+ try {
+ ConfigurationDefinition definition = configurationManager
+ .getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId);
+ return SerialUtility.prepare(definition, "ResourceDefinition");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates(
- Integer resourceId, Long beginDate, Long endDate, boolean suppressOldest, PageControl pc) {
-
- PageList<ResourceConfigurationUpdate> result =
- configurationManager.findResourceConfigurationUpdates(
- getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc);
-
- return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates");
+ public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates(Integer resourceId, Long beginDate,
+ Long endDate, boolean suppressOldest, PageControl pc) {
+ try {
+ PageList<ResourceConfigurationUpdate> result = configurationManager.findResourceConfigurationUpdates(
+ getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc);
+ return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
public ResourceConfigurationUpdate updateResourceConfiguration(int resourceId, Configuration configuration) {
- ResourceConfigurationUpdate update =
- configurationManager.updateResourceConfiguration(getSessionSubject(), resourceId, configuration);
-
- return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration");
+ try {
+ ResourceConfigurationUpdate update = configurationManager.updateResourceConfiguration(getSessionSubject(),
+ resourceId, configuration);
+ return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PluginConfigurationUpdate updatePluginConfiguration(int resourceId, Configuration configuration) {
- PluginConfigurationUpdate update =
- configurationManager.updatePluginConfiguration(getSessionSubject(), resourceId, configuration);
-
- return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration");
+ try {
+ PluginConfigurationUpdate update = configurationManager.updatePluginConfiguration(getSessionSubject(),
+ resourceId, configuration);
+ return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria(ResourceConfigurationUpdateCriteria criteria) {
- PageList<ResourceConfigurationUpdate> updates =
- configurationManager.findResourceConfigurationUpdatesByCriteria(
- getSessionSubject(), criteria
- );
-
- return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria");
+ public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria(
+ ResourceConfigurationUpdateCriteria criteria) {
+ try {
+ PageList<ResourceConfigurationUpdate> updates = configurationManager
+ .findResourceConfigurationUpdatesByCriteria(getSessionSubject(), criteria);
+ return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public RawConfiguration dummy(RawConfiguration config) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
index 91c45f8..2d112fb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.criteria.PackageVersionCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ContentGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.content.ContentManagerLocal;
@@ -35,16 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ContentGWTServiceImpl extends AbstractGWTServiceImpl implements ContentGWTService {
+ private static final long serialVersionUID = 1L;
private ContentManagerLocal contentManager = LookupUtil.getContentManager();
-
-
public PageList<PackageVersion> findPackageVersionsByCriteria(PackageVersionCriteria criteria) {
- return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria),
+ try {
+ return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria),
"ContentService.findPackageVersionsByCriteria");
-
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
index 1d28f7d..742c68e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import java.util.List;
import org.rhq.core.domain.dashboard.Dashboard;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.DashboardGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.dashboard.DashboardManagerLocal;
@@ -35,25 +36,42 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class DashboardGWTServiceImpl extends AbstractGWTServiceImpl implements DashboardGWTService {
- private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal();
+ private static final long serialVersionUID = 1L;
+ private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal();
public List<Dashboard> findDashboardsForSubject() {
- return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()),
+ try {
+ return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()),
"DashboardManager.findDashboardsForSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<Dashboard> findSharedDashboards() {
- return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()),
+ try {
+ return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()),
"DashboardManager.findSharedDashboards");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Dashboard storeDashboard(Dashboard dashboard) {
- return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(),dashboard),
+ try {
+ return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(), dashboard),
"DashboardManager.storeDashboard");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeDashboard(int dashboardId) {
- dashboardManager.removeDashboard(getSessionSubject(), dashboardId);
+ try {
+ dashboardManager.removeDashboard(getSessionSubject(), dashboardId);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
index 665f370..3dbae8e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
@@ -30,6 +30,7 @@ import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.event.composite.EventComposite;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.EventGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.event.EventManagerLocal;
@@ -46,37 +47,66 @@ public class EventGWTServiceImpl extends AbstractGWTServiceImpl implements Event
private EventManagerLocal eventManager = LookupUtil.getEventManager();
public EventSeverity[] getSeverityBuckets(int resourceId, long begin, long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end,
- numBuckets), "EventService.getSeverityBuckets");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end,
+ numBuckets), "EventService.getSeverityBuckets");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public EventSeverity[] getSeverityBucketsForAutoGroup(int parentResourceId, int resourceTypeId, long begin,
long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(), parentResourceId,
- resourceTypeId, begin, end, numBuckets), "EventService.getSeverityBucketsForAutoGroup");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(),
+ parentResourceId, resourceTypeId, begin, end, numBuckets),
+ "EventService.getSeverityBucketsForAutoGroup");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public EventSeverity[] getSeverityBucketsForCompGroup(int resourceGroupId, long begin, long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(), resourceGroupId,
- begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(),
+ resourceGroupId, begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<Event> findEventsByCriteria(EventCriteria criteria) {
- return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria),
- "EventService.findEventsByCriteria");
+ try {
+ return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria),
+ "EventService.findEventsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<EventComposite> findEventCompositesByCriteria(EventCriteria criteria) {
- return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria),
- "EventService.findEventsByCriteria");
+ try {
+ return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria),
+ "EventService.findEventsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int deleteEventsForContext(EntityContext context, List<Integer> eventIds) {
- return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds);
+ try {
+ return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int purgeEventsForContext(EntityContext context) {
- return eventManager.purgeEventsForContext(getSessionSubject(), context);
+ try {
+ return eventManager.purgeEventsForContext(getSessionSubject(), context);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
index 78232b6..1cc9170 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
@@ -34,6 +34,7 @@ import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowCo
import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.MeasurementDataGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.measurement.CallTimeDataManagerLocal;
@@ -58,89 +59,140 @@ public class MeasurementDataGWTServiceImpl extends AbstractGWTServiceImpl implem
private MeasurementDefinitionManagerLocal definitionManager = LookupUtil.getMeasurementDefinitionManager();
public List<MeasurementDataTrait> findCurrentTraitsForResource(int resourceId, DisplayType displayType) {
- return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId,
- displayType), "MeasurementDataService.findCurrentTraitsForResource");
+ try {
+ return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId,
+ displayType), "MeasurementDataService.findCurrentTraitsForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<MeasurementData> findLiveData(int resourceId, int[] definitionIds) {
- return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds),
- "MeasurementDataService.findLiveData");
+ try {
+ return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds),
+ "MeasurementDataService.findLiveData");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<List<MeasurementDataNumericHighLowComposite>> findDataForResource(int resourceId, int[] definitionIds,
long beginTime, long endTime, int numPoints) {
- return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId, definitionIds,
- beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource");
+ try {
+ return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId,
+ definitionIds, beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<CallTimeDataComposite> findCallTimeDataForResource(int scheduleId, long start, long end,
PageControl pageControl) {
- return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(), scheduleId,
- start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource");
+ try {
+ return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(),
+ scheduleId, start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementDefinition> findMeasurementDefinitionsByCriteria(MeasurementDefinitionCriteria criteria) {
- return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(),
- criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria");
+ try {
+ return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(),
+ criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementSchedule> findMeasurementSchedulesByCriteria(MeasurementScheduleCriteria criteria) {
- return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria),
- "MeasurementDataService.findMeasurementSchedulesByCriteria");
+ try {
+ return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria),
+ "MeasurementDataService.findMeasurementSchedulesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
- public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter, String parentNameFilter, PageControl pc) {
- return SerialUtility.prepare(
- measurementOOBManager.getSchedulesWithOOBs(
- getSessionSubject(),
- metricNameFilter,
- resourceNameFilter,
- parentNameFilter,
- pc),
+ public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter,
+ String parentNameFilter, PageControl pc) {
+ try {
+ return SerialUtility.prepare(measurementOOBManager.getSchedulesWithOOBs(getSessionSubject(),
+ metricNameFilter, resourceNameFilter, parentNameFilter, pc),
"MeasurementDataService.getSchedulesWithOOBs");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementOOBComposite> getHighestNOOBsForResource(int resourceId, int n) {
- return SerialUtility.prepare(
- measurementOOBManager.getHighestNOOBsForResource(
- getSessionSubject(),
- resourceId,
- n),
- "MeasurementDataService.getHighestNOOBsForResource");
+ try {
+ return SerialUtility.prepare(measurementOOBManager.getHighestNOOBsForResource(getSessionSubject(),
+ resourceId, n), "MeasurementDataService.getHighestNOOBsForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void enableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) {
- scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ try {
+ scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void disableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) {
- scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ try {
+ scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSchedulesForResource(int resourceId, int[] measurementDefinitionIds, long collectionInterval) {
- scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds,
+ try {
+ scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds,
collectionInterval);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void enableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) {
- scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds);
+ try {
+ scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void disableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) {
- scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds);
+ try {
+ scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds,
- long collectionInterval) {
- scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds,
- collectionInterval);
- }
+ long collectionInterval) {
+ try {
+ scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds, collectionInterval);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
public PageList<MeasurementDataTrait> findTraitsByCriteria(MeasurementDataTraitCriteria criteria) {
- return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria),
- "MeasurementDataService.findTraitsByCriteria");
+ try {
+ return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria),
+ "MeasurementDataService.findTraitsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
-
-
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 62dc79b..7c3acfb 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
@@ -18,22 +18,20 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.resource.Resource;
-
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collection;
-import java.util.List;
import java.util.Set;
+import org.rhq.core.domain.resource.Resource;
+
/**
* @author Greg Hinkle
*/
public class ObjectFilter {
-
public static <T extends Collection<?>> T filterFieldsInCollection(T collection, Set<String> goodFields) {
long sizeOfBefore = sizeOf(collection);
for (Object object : collection) {
@@ -45,7 +43,6 @@ public class ObjectFilter {
}
public static <T> T filterFields(T object, Set<String> goodFields) {
-
try {
Field[] fields = Resource.class.getDeclaredFields();
for (Field f : fields) {
@@ -54,11 +51,11 @@ public class ObjectFilter {
// Only clearing objects, no point in clearing primitives as it
// doesn't save any space on the stream
if (!f.getType().isPrimitive()) {
-// System.out.println("clearing " + f.getName());
+ // System.out.println("clearing " + f.getName());
f.setAccessible(true);
f.set(object, null);
} else {
-// System.out.println("Can't do " + f.getType());
+ // System.out.println("Can't do " + f.getType());
}
}
}
@@ -67,11 +64,9 @@ public class ObjectFilter {
e.printStackTrace();
}
-
return object;
}
-
private static int sizeOf(Object object) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(50000);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
index a7f72ed..4519e00 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
@@ -33,6 +33,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.OperationGWTService;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.create.ExecutionSchedule;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
@@ -52,29 +53,33 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O
public PageList<ResourceOperationHistory> findResourceOperationHistoriesByCriteria(
ResourceOperationHistoryCriteria criteria) {
- return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(),
- criteria), "OperationService.findResourceOperationHistoriesByCriteria");
-
+ try {
+ return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(),
+ criteria), "OperationService.findResourceOperationHistoriesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<GroupOperationHistory> findGroupOperationHistoriesByCriteria(GroupOperationHistoryCriteria criteria) {
- return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(),
- criteria), "OperationService.findGroupOperationHistoriesByCriteria");
+ try {
+ return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(),
+ criteria), "OperationService.findGroupOperationHistoriesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void scheduleResourceOperation(int resourceId, String operationName, Configuration parameters,
ExecutionSchedule schedule, String description, int timeout) throws RuntimeException {
- ResourceOperationSchedule opSchedule;
try {
-
+ ResourceOperationSchedule opSchedule;
if (schedule.getStart() == ExecutionSchedule.Start.Immediately) {
opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName,
0, 0, 0, 0, parameters, description);
} else {
-
CronTrigger ct = new CronTrigger("resource " + resourceId + "_" + operationName, "group", schedule
.getCronString());
-
opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName,
parameters, ct, description);
}
@@ -88,34 +93,40 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O
*/
public List<DisambiguationReport<ResourceOperationLastCompletedComposite>> findRecentCompletedOperations(
int pageSize) {
+ try {
+ PageControl pageControl = new PageControl(0, pageSize);
+ PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager
+ .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl);
- PageControl pageControl = new PageControl(0, pageSize);
- PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager
- .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl);
-
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager
- .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR,
- DefaultDisambiguationUpdateStrategies.getDefault());
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager
+ .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR,
+ DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedLastCompletedResourceOps;
+ return disambiguatedLastCompletedResourceOps;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
/** Find scheduled operations, disambiguate them and return that list.
*
*/
public List<DisambiguationReport<ResourceOperationScheduleComposite>> findScheduledOperations(int pageSize) {
+ try {
+ PageControl pageControl = new PageControl(0, pageSize);
+ PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager
+ .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl);
- PageControl pageControl = new PageControl(0, pageSize);
- PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager
- .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl);
-
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager
- .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR,
- DefaultDisambiguationUpdateStrategies.getDefault());
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager
+ .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR,
+ DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedNextScheduledResourceOps;
+ return disambiguatedNextScheduledResourceOps;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
private static final IntExtractor<ResourceOperationLastCompletedComposite> RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR = new IntExtractor<ResourceOperationLastCompletedComposite>() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
index 45c2c5e..073a6f7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.criteria.RepoCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.RepoGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.content.RepoManagerLocal;
@@ -35,13 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class RepoGWTServiceImpl extends AbstractGWTServiceImpl implements RepoGWTService {
+ private static final long serialVersionUID = 1L;
+
private RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
public PageList<Repo> findReposByCriteria(RepoCriteria criteria) {
- return SerialUtility.prepare(
- repoManager.findReposByCriteria(getSessionSubject(), criteria),
+ try {
+ return SerialUtility.prepare(repoManager.findReposByCriteria(getSessionSubject(), criteria),
"ContentService.findReposByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
index 5ac22b5..fb00c3a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.resource.InventorySummary;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceBossGWTService;
import org.rhq.enterprise.server.resource.ResourceBossLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -34,6 +35,8 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceBossGWTService {
+ private static final long serialVersionUID = 1L;
+
private ResourceBossLocal resourceBoss = LookupUtil.getResourceBoss();
public InventorySummary getInventorySummaryForLoggedInUser() {
@@ -42,6 +45,10 @@ public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implement
}
public InventorySummary getInventorySummary(Subject user) {
- return resourceBoss.getInventorySummary(user);
+ try {
+ return resourceBoss.getInventorySummary(user);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
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 2e2f6d6..14c6f8d 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
@@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.discovery.DiscoveryBossLocal;
@@ -57,6 +58,8 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceGWTService {
+ private static final long serialVersionUID = 1L;
+
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceFactoryManagerLocal resourceFactoryManager = LookupUtil.getResourceFactoryManager();
private DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss();
@@ -122,8 +125,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourcesByCriteria");
} catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
@@ -139,8 +141,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourceCompositesByCriteria");
} catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
@@ -148,18 +149,21 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
* Criteria passed in not currently used.
*/
public List<DisambiguationReport<ProblemResourceComposite>> findProblemResources(long ctime, int maxItems) {
+ try {
+ List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>();
+ MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager();
+ ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
- List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>();
- MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager();
- ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
-
- //retrieve list of discovered problem resources. Grab all, live scrolling data
- located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems));
+ //retrieve list of discovered problem resources. Grab all, live scrolling data
+ located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems));
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located,
- RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault());
- return translated;
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located,
+ RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault());
+ return translated;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
private static final IntExtractor<ProblemResourceComposite> RESOURCE_ID_EXTRACTOR = new IntExtractor<ProblemResourceComposite>() {
@@ -169,71 +173,112 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
};
public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
- "ResourceService.getResourceLineageAndSiblings");
+ try {
+ return SerialUtility.prepare(
+ resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
+ "ResourceService.getResourceLineageAndSiblings");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Resource getPlatformForResource(int resourceId) {
- return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId),
- "ResourceService.getPlatformForResource");
+ try {
+ return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId),
+ "ResourceService.getPlatformForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems) {
- List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms(
- getSessionSubject(), ctime, maxItems);
+ try {
+ List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms(
+ getSessionSubject(), ctime, maxItems);
- for (RecentlyAddedResourceComposite platform : platforms) {
- List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers(
- getSessionSubject(), ctime, platform.getId());
- platform.setChildren(servers);
- }
+ for (RecentlyAddedResourceComposite platform : platforms) {
+ List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers(
+ getSessionSubject(), ctime, platform.getId());
+ platform.setChildren(servers);
+ }
- return platforms;
+ return platforms;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<Integer> uninventoryResources(int[] resourceIds) {
- return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds),
- "ResourceService.uninventoryResources");
+ try {
+ return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds),
+ "ResourceService.uninventoryResources");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResource(Resource resource) {
- resourceManager.updateResource(getSessionSubject(), resource);
+ try {
+ resourceManager.updateResource(getSessionSubject(), resource);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void createResource(int parentResourceId, int newResourceTypeId, String newResourceName,
Configuration newResourceConfiguration) {
+ try {
- ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager()
- .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId);
- Configuration pluginConfig = null;
- if (pluginConfigDefinition != null) {
- ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate();
- pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration()
- : new Configuration();
+ ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager()
+ .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId);
+ Configuration pluginConfig = null;
+ if (pluginConfigDefinition != null) {
+ ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate();
+ pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration()
+ : new Configuration();
- // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs
- // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition);
- }
+ // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs
+ // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition);
+ }
- resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId,
- newResourceName, pluginConfig, newResourceConfiguration);
+ resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId,
+ newResourceName, pluginConfig, newResourceConfiguration);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(HashSet<InventoryStatus> statuses, PageControl pc) {
- return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet
- .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers");
+ try {
+ return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet
+ .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void importResources(Integer[] resourceIds) {
- discoveryBoss.importResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.importResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void ignoreResources(Integer[] resourceIds) {
- discoveryBoss.ignoreResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.ignoreResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void unignoreResources(Integer[] resourceIds) {
- discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
index 6ff33b3..c74aa3c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
@@ -1,25 +1,28 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
-import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceTypeGWTService {
- public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) {
+ private static final long serialVersionUID = 1L;
- ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager();
+ public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) {
+ try {
+ ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager();
- return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria), "ResourceTypes.findResourceTypesByCriteria");
+ return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria),
+ "ResourceTypes.findResourceTypesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public RawConfiguration dummy(RawConfiguration config) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
index 7b278e1..ed7e50d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.RoleCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.RoleGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.authz.RoleManagerLocal;
@@ -31,34 +32,64 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class RoleGWTServiceImpl extends AbstractGWTServiceImpl implements RoleGWTService {
+ private static final long serialVersionUID = 1L;
+
private RoleManagerLocal roleManager = LookupUtil.getRoleManager();
public PageList<Role> findRolesByCriteria(RoleCriteria criteria) {
- return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria),
- "RoleService.findRolesByCriteria");
+ try {
+ return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria),
+ "RoleService.findRolesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Role createRole(Role role) {
- return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole");
+ try {
+ return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Role updateRole(Role role) {
- return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole");
+ try {
+ return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeRoles(Integer[] roleIds) {
- roleManager.deleteRoles(getSessionSubject(), roleIds);
+ try {
+ roleManager.deleteRoles(getSessionSubject(), roleIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedResourceGroups(int roleId, int[] resourceGroupIds) {
- roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds);
+ try {
+ roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedSubjects(int roleId, int[] subjectIds) {
- roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds);
+ try {
+ roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedRolesForSubject(int subjectId, int[] roleIds) {
- roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds);
+ try {
+ roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
index cff798c..ae72b4c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
@@ -24,6 +24,7 @@ import org.rhq.core.domain.criteria.SavedSearchCriteria;
import org.rhq.core.domain.search.SavedSearch;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.core.domain.search.SearchSuggestion;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SearchGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.search.SavedSearchManagerLocal;
@@ -35,36 +36,62 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class SearchGWTServiceImpl extends AbstractGWTServiceImpl implements SearchGWTService {
+ private static final long serialVersionUID = 1L;
+
private SavedSearchManagerLocal savedSearchManager = LookupUtil.getSavedSearchManager();
public List<SearchSuggestion> getTabAwareSuggestions(SearchSubsystem searchSubsystem, String expression,
int caretPosition, String tab) {
- SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
- List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab);
- return results;
+ try {
+ SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
+ List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab);
+ return results;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<SearchSuggestion> getSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition) {
- SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
- List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition);
- return results;
+ try {
+ SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
+ List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition);
+ return results;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int createSavedSearch(SavedSearch savedSearch) {
- return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch);
+ try {
+ return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSavedSearch(SavedSearch savedSearch) {
- savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch);
+ try {
+ savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteSavedSearch(int savedSearchId) {
- savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId);
+ try {
+ savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<SavedSearch> findSavedSearchesByCriteria(SavedSearchCriteria criteria) {
- return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria),
- "SearchService.findRolesByCriteria");
+ try {
+ return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria),
+ "SearchService.findRolesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
index 32e1d2c..6f86e45 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
@@ -21,35 +21,53 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.SubjectCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SubjectGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.exception.LoginException;
import org.rhq.enterprise.server.util.LookupUtil;
-
/**
* @author Greg Hinkle
*/
public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements SubjectGWTService {
+ private static final long serialVersionUID = 1L;
+
private SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
public void changePassword(String username, String password) {
- subjectManager.changePassword(getSessionSubject(), username, password);
+ try {
+ subjectManager.changePassword(getSessionSubject(), username, password);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void createPrincipal(String username, String password) {
- subjectManager.createPrincipal(getSessionSubject(), username, password);
+ try {
+ subjectManager.createPrincipal(getSessionSubject(), username, password);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject createSubject(Subject subjectToCreate) {
- return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate),
+ try {
+ return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate),
"SubjectManager.createSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteSubjects(int[] subjectIds) {
- subjectManager.deleteSubjects(getSessionSubject(),subjectIds);
+ try {
+ subjectManager.deleteSubjects(getSessionSubject(), subjectIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject login(String username, String password) {
@@ -61,15 +79,28 @@ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements Sub
}
public void logout(Subject subject) {
- subjectManager.logout(subject.getSessionId());
+ try {
+ subjectManager.logout(subject.getSessionId());
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject updateSubject(Subject subjectToModify) {
- return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify),
+ try {
+ return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify),
"SubjectManager.updateSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<Subject> findSubjectsByCriteria(SubjectCriteria criteria) {
- return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria), "SubjectManager.findSubjectsByCriteria");
+ try {
+ return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria),
+ "SubjectManager.findSubjectsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
index af12a6a..43431c7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.common.ProductInfo;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SystemGWTService;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -27,9 +28,16 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Ian Springer
*/
public class SystemGWTServiceImpl extends AbstractGWTServiceImpl implements SystemGWTService {
+
+ private static final long serialVersionUID = 1L;
+
private SystemManagerLocal systemManager = LookupUtil.getSystemManager();
public ProductInfo getProductInfo() {
- return this.systemManager.getProductInfo(getSessionSubject());
+ try {
+ return this.systemManager.getProductInfo(getSessionSubject());
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
index 20add85..7ab6941 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
@@ -28,6 +28,7 @@ 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.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.TagGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.tagging.TagManagerLocal;
@@ -38,49 +39,90 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class TagGWTServiceImpl extends AbstractGWTServiceImpl implements TagGWTService {
+ private static final long serialVersionUID = 1L;
+
private TagManagerLocal tagManager = LookupUtil.getTagManager();
public PageList<Tag> findTagsByCriteria(TagCriteria tagCriteria) {
- return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria),
+ try {
+ return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria),
"TagService.findTagsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Tag> addTags(Set<Tag> tags) {
- return SerialUtility.prepare(
- tagManager.addTags(getSessionSubject(), tags),
- "TagService.addTags");
+ try {
+ return SerialUtility.prepare(tagManager.addTags(getSessionSubject(), tags), "TagService.addTags");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeTags(Set<Tag> tags) {
- tagManager.removeTags(getSessionSubject(), tags);
+ try {
+ tagManager.removeTags(getSessionSubject(), tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResourceTags(int resourceId, Set<Tag> tags) {
- tagManager.updateResourceTags(getSessionSubject(), resourceId, tags);
+ try {
+ tagManager.updateResourceTags(getSessionSubject(), resourceId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResourceGroupTags(int resourceGroupId, Set<Tag> tags) {
- tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags);
+ try {
+ tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleTags(int bundleId, Set<Tag> tags) {
- tagManager.updateBundleTags(getSessionSubject(), bundleId, tags);
+ try {
+ tagManager.updateBundleTags(getSessionSubject(), bundleId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleVersionTags(int bundleVersionId, Set<Tag> tags) {
- tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags);
+ try {
+ tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleDeploymentTags(int bundleDeploymentId, Set<Tag> tags) {
- tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags);
+ try {
+ tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleDestinationTags(int bundleDestinationId, Set<Tag> tags) {
- tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags);
+ try {
+ tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<TagReportComposite> findTagReportCompositesByCriteria(TagCriteria tagCriteria) {
- return SerialUtility.prepare(tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria),
+ try {
+ return SerialUtility.prepare(
+ tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria),
"TagService.findTagReportCompositesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
commit 4027a3a94c8399ce08485df9043a4386f668cf2b
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work
- support for locked nodes
- support for autogroups for non-inventory managers. Now that AGs are
backed by compat groups it's necessary for non-inv-managers
to be able to create and access the private groups that they own. Private
groups (aka subject-owned groups) are new, they are basically groups
that are tagged with the creating subjectId. Those groups can be
created (via a new slsb call) and fetched (via a new ResourceGroupCriteria
filter) w/o inventory manager perms.
- note: i had to move rhq_subject to auth-schema from authz-schema and
slightly change the dbsetup order to make it ok for rhq_resource_group to
reference rhq_subject.
- schema spec bumped to 2.97
- added ResourceLineageComposite to combine Resource and locked/viewable
info.
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 02aa606..4035ed5 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.96</db.schema.version>
+ <db.schema.version>2.97</db.schema.version>
</properties>
<dependencies>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
index f4993e5..b0ee520 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
@@ -39,7 +39,7 @@ To run the default target, you must set one of the following properties to true:
<property name="dbsetup.scripts.dir" value="${basedir}/src/main/scripts/dbsetup" />
<property name="dbsetup.output.dir" value="${basedir}/target/dbsetup" /> <!-- away from classes so it doesn't go into the jar -->
<!-- define the setup creation processing order. note, removals are done in the reverse order -->
- <property name="dbsetup.subsystems" value="config,cluster,inventory,auth,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/>
+ <property name="dbsetup.subsystems" value="config,cluster,auth,inventory,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/>
<property name="dbsetup.combined.schema" value="${dbsetup.output.dir}/all-schema.xml" />
<property name="dbsetup.combined.data" value="${dbsetup.output.dir}/all-data.xml" />
<property name="dbsetup.tstamp.file" value="${dbsetup.output.dir}/dbsetup-combine.tstamp" />
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
index d24b386..9b77256 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
@@ -16,5 +16,24 @@
</index>
</table>
+
+ <table name="RHQ_SUBJECT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
+ <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
+ <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
+ <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
</dbsetup>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
index 8d9f738..b1385e9 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
@@ -50,25 +50,6 @@
</constraint>
</table>
- <table name="RHQ_SUBJECT">
- <column name="ID" default="sequence-only" initial="10001"
- primarykey="true" required="true" type="INTEGER"/>
- <column name="NAME" required="true" size="100" type="VARCHAR2"/>
- <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
- <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
- <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
- <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
- <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
- <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
- <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
- <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
- <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
-
- <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
- <field ref="NAME"/>
- </index>
- </table>
-
<table name="RHQ_SUBJECT_ROLE_MAP">
<column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
<column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
index 6246880..5d89c2d 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
@@ -168,11 +168,14 @@
<column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <!-- This is only set if this is a subject-owned group (like an autogroup) -->
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/>
+
<!-- These two only set if this is a backing group for a resource auto-cluster -->
<column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/>
<column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
- <!-- This only set if this is a backing group for a resource auto-group -->
+ <!-- This is only set if this is a backing group for a resource auto-group -->
<column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
<column name="VISIBLE" type="BOOLEAN"/>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index f0940ab..b477b09 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -3226,9 +3226,21 @@
REFERENCES RHQ_RESOURCE (ID)
</statement>
</schema-directSQL>
-
</schemaSpec>
-
+
+ <schemaSpec version="2.97">
+ <!-- Support subject-owned groups (e.g. autogroups) -->
+ <schema-addColumn table="RHQ_RESOURCE_GROUP" column="SUBJECT_ID" columnType="INTEGER" />
+ <schema-directSQL>
+ <statement desc="Creating RHQ_RESOURCE_GROUP foreign key relation to RHQ_SUBJECT for owned groups">
+ ALTER TABLE RHQ_RESOURCE_GROUP
+ ADD CONSTRAINT RHQ_RG_SUBJECT_ID_FK
+ FOREIGN KEY (SUBJECT_ID)
+ REFERENCES RHQ_SUBJECT (ID)
+ </statement>
+ </schema-directSQL>
+ </schemaSpec>
+
</dbupgrade>
</target>
</project>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
index 477a128..4a93c1f 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
@@ -24,11 +24,13 @@ package org.rhq.core.domain.auth;
import java.io.Serializable;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -37,6 +39,7 @@ import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.QueryHint;
import javax.persistence.SequenceGenerator;
@@ -47,6 +50,7 @@ import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.Recordizable;
/**
@@ -271,6 +275,10 @@ public class Subject implements Serializable, Recordizable {
@ManyToMany
private java.util.Set<Role> ldapRoles;
+ // When a subject is removed any owned groups should also be removed
+ @OneToMany(mappedBy = "subject", fetch = FetchType.LAZY)
+ private List<ResourceGroup> ownedGroups = null;
+
@Transient
private Integer sessionId = null;
@@ -448,6 +456,14 @@ public class Subject implements Serializable, Recordizable {
getLdapRoles().remove(role);
}
+ public List<ResourceGroup> getOwnedGroups() {
+ return ownedGroups;
+ }
+
+ public void setOwnedGroups(List<ResourceGroup> ownedGroups) {
+ this.ownedGroups = ownedGroups;
+ }
+
@Override
public String toString() {
return "org.rhq.core.domain.auth.Subject[id=" + id + ",name=" + name + "]";
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
index 2278c7f..835821a 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
@@ -46,6 +46,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
private Boolean filterRecursive;
private Integer filterResourceTypeId; // requires overrides
private String filterResourceTypeName; // requires overrides
+ private Integer filterSubjectId; // requires overrides
private Integer filterAutoGroupParentResourceId; // requires overrides
private String filterPluginName; // requires overrides
private GroupCategory filterGroupCategory;
@@ -56,6 +57,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
private Integer filterExplicitResourceTypeId; // requires overrides
private String filterExplicitResourceTypeName; // requires overrides
private Integer filterGroupDefinitionId; // requires overrides
+ private Boolean filterPrivate; /* if true, show only private groups for the calling user */
private Boolean filterVisible = true; /* only show visible groups by default */
private boolean fetchExplicitResources;
@@ -74,6 +76,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
filterOverrides.put("resourceTypeId", "resourceType.id = ?");
filterOverrides.put("resourceTypeName", "resourceType.name like ?");
filterOverrides.put("autoGroupParentResourceId", "autoGroupParentResource.id = ?");
+ filterOverrides.put("subjectId", "subject.id = ?");
filterOverrides.put("pluginName", "resourceType.plugin like ?");
filterOverrides.put("downMemberCount", "" //
+ "id IN ( SELECT implicitGroup.id " //
@@ -148,6 +151,14 @@ public class ResourceGroupCriteria extends TaggedCriteria {
this.filterResourceTypeName = filterResourceTypeName;
}
+ /**
+ * Requires MANAGE_INVENTORY. Use addFilterPrivate(true) to filter on the caller's private groups.
+ * @param filterSubjectId.
+ */
+ public void addFilterSubjectId(Integer filterSubjectId) {
+ this.filterSubjectId = filterSubjectId;
+ }
+
public void addFilterAutoGroupParentResourceId(Integer filterAutoGroupParentResourceId) {
this.filterAutoGroupParentResourceId = filterAutoGroupParentResourceId;
}
@@ -199,6 +210,14 @@ public class ResourceGroupCriteria extends TaggedCriteria {
this.filterGroupDefinitionId = filterGroupDefinitionId;
}
+ public void addFilterPrivate(Boolean filterPrivate) {
+ this.filterPrivate = filterPrivate;
+ }
+
+ public boolean isFilterPrivate() {
+ return (Boolean.TRUE.equals(this.filterPrivate));
+ }
+
public void addFilterVisible(Boolean filterVisible) {
this.filterVisible = filterVisible;
}
@@ -258,8 +277,8 @@ public class ResourceGroupCriteria extends TaggedCriteria {
@Override
public boolean isInventoryManagerRequired() {
- // presently only inventory managers can view/manage group definitions
- return this.filterGroupDefinitionId != null;
+ // presently only inventory managers can view/manage group definitions or see other user's private groups
+ return this.filterGroupDefinitionId != null || this.filterSubjectId != null;
}
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java
new file mode 100644
index 0000000..713a558
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java
@@ -0,0 +1,51 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.domain.resource.composite;
+
+import java.io.Serializable;
+
+import org.rhq.core.domain.resource.Resource;
+
+/**
+ * @author jay shaughnessy
+ */
+public class ResourceLineageComposite implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Resource resource;
+ private boolean isLocked;
+
+ // for gwt serialization
+ @SuppressWarnings("unused")
+ private ResourceLineageComposite() {
+ }
+
+ public ResourceLineageComposite(Resource resource, boolean isLocked) {
+ this.resource = resource;
+ this.isLocked = isLocked;
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ public boolean isLocked() {
+ return isLocked;
+ }
+}
\ No newline at end of file
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
index 46d6bcb..5250c11 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
@@ -55,6 +55,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.bundle.BundleDestination;
import org.rhq.core.domain.configuration.group.AbstractGroupConfigurationUpdate;
@@ -432,6 +433,12 @@ public class ResourceGroup extends Group {
@ManyToOne
private ResourceType resourceType; // if non-null, it implies a compatible group
+ // The group owner. Certain groups (like autogroups) are not associated with Roles. Instead, they
+ // are bound to specific owners. Subject-Owned groups defer to member-level authorization as needed.
+ @JoinColumn(name = "SUBJECT_ID", referencedColumnName = "ID", nullable = true)
+ @ManyToOne
+ private Subject subject = null;
+
@Column(name = "CLUSTER_KEY", nullable = true)
private String clusterKey;
@@ -612,6 +619,25 @@ public class ResourceGroup extends Group {
}
}
+ public Subject getSubject() {
+ return subject;
+ }
+
+ public void setSubject(Subject subject) {
+ if (this.id > 0 && null != this.subject) {
+ throw new IllegalStateException("The group owner can not be changed after the group is created.");
+ }
+
+ this.subject = subject;
+ }
+
+ /**
+ * @return true if this is a subject-owned group, private to the set subject
+ */
+ public boolean isPrivateGroup() {
+ return (null != this.subject);
+ }
+
public String getClusterKey() {
return clusterKey;
}
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 b282e41..7ad683a 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
@@ -32,6 +32,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.resource.composite.ProblemResourceComposite;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -44,9 +45,7 @@ public interface ResourceGWTService extends RemoteService {
PageList<ResourceComposite> findResourceCompositesByCriteria(ResourceCriteria criteria);
- List<Resource> getResourceLineage(int resourceId);
-
- List<Resource> getResourceLineageAndSiblings(int resourceId);
+ List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId);
List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
index d968e19..f48fd96 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
@@ -37,6 +37,14 @@ public interface ResourceGroupGWTService extends RemoteService {
GroupDefinition createGroupDefinition(GroupDefinition groupDefinition);
+ /**
+ * The owner will be set to the session subject.
+ * @param group
+ * @param resourceIds initial members
+ * @return
+ */
+ ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds);
+
ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds);
void deleteGroupDefinitions(int[] groupDefinitionIds);
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 50700f2..33b22e9 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
@@ -243,4 +243,9 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
public String getSubTabName() {
return subTabName;
}
+
+ public String getBaseViewPath() {
+ return baseViewPath;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index be66cb9..8d8db75 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -270,7 +270,12 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.addFilterId(groupId);
- criteria.addFilterVisible(null);
+
+ // for autogroups we need to add more criteria
+ if (AUTO_GROUP_VIEW_PATH.equals(getBaseViewPath())) {
+ criteria.addFilterVisible(null);
+ criteria.addFilterPrivate(true);
+ }
GWTServiceLookup.getResourceGroupService().findResourceGroupCompositesByCriteria(criteria,
new AsyncCallback<PageList<ResourceGroupComposite>>() {
@@ -280,6 +285,11 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
}
public void onSuccess(PageList<ResourceGroupComposite> result) {
+ if (result.isEmpty()) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to load group composite for group with id " + groupId);
+ }
+
groupComposite = result.get(0);
loadResourceType(groupComposite, viewPath, globalPermissions);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
index 71e6c61..f1dad07 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
@@ -23,6 +23,7 @@ import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceTreeDatasource.ResourceTreeNode;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
/**
@@ -40,15 +41,19 @@ public class CustomResourceTreeGrid extends LocatableTreeGrid {
if (record instanceof TreeNode) {
boolean open = getTree().isOpen((TreeNode) record);
- if (record instanceof ResourceTreeDatasource.ResourceTreeNode) {
- Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource();
+ if (record instanceof ResourceTreeNode) {
+ ResourceTreeNode node = (ResourceTreeNode) record;
- boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP;
+ if (node.isLocked()) {
+ return "global/Locked_16.png";
- String category = resource.getResourceType().getCategory().getDisplayName();
-
- return "types/" + category + "_" + (up ? "up" : "down") + "_16.png";
+ } else {
+ Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource();
+ String category = resource.getResourceType().getCategory().getDisplayName();
+ boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP;
+ return "types/" + category + "_" + (up ? "up" : "down") + "_16.png";
+ }
} else {
return "resources/folder_group_" + (open ? "opened" : "closed") + ".png";
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
index e577491..1c73198 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
@@ -30,7 +30,6 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
-import com.smartgwt.client.data.fields.DataSourceImageField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
import com.smartgwt.client.types.DSDataFormat;
@@ -38,8 +37,6 @@ import com.smartgwt.client.types.DSProtocol;
import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.measurement.AvailabilityType;
-import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceSubCategory;
@@ -61,15 +58,17 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
*/
public class ResourceTreeDatasource extends DataSource {
private List<Resource> initialData;
+ private List<Resource> lockedData;
private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
- public ResourceTreeDatasource(List<Resource> initialData) {
+ public ResourceTreeDatasource(List<Resource> initialData, List<Resource> lockedData) {
setClientOnly(false);
setDataProtocol(DSProtocol.CLIENTCUSTOM);
setDataFormat(DSDataFormat.CUSTOM);
this.initialData = initialData;
+ this.lockedData = (null != lockedData) ? lockedData : new ArrayList<Resource>();
DataSourceField idDataField = new DataSourceTextField("id", "ID");
idDataField.setPrimaryKey(true);
@@ -80,22 +79,12 @@ public class ResourceTreeDatasource extends DataSource {
DataSourceTextField descriptionDataField = new DataSourceTextField("description", "Description");
descriptionDataField.setCanEdit(false);
- DataSourceImageField availabilityDataField = new DataSourceImageField("currentAvailability", "Availability");
- descriptionDataField.setCanEdit(false);
-
DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID");
parentIdField.setForeignKey("id");
- // parentIdField.setRootValue(rootId);
-
- // DataSourceTextField parentKeyField = new DataSourceTextField("parentKey", "Parent KEY");
- // parentKeyField.setForeignKey("id");
- // parentKeyField.setRootValue(rootId);
-
- // nameDataField.setType(FieldType.);
setDropExtraFields(false);
- setFields(idDataField, nameDataField, descriptionDataField, availabilityDataField);
+ setFields(idDataField, nameDataField, descriptionDataField);
}
@Override
@@ -127,7 +116,7 @@ public class ResourceTreeDatasource extends DataSource {
}
public void executeFetch(final String requestId, final DSRequest request, final DSResponse response) {
- final long start = System.currentTimeMillis();
+ //final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId");
// System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
@@ -173,7 +162,7 @@ public class ResourceTreeDatasource extends DataSource {
ResourceTypeRepository.MetadataType.subCategory),
new ResourceTypeRepository.ResourceTypeLoadedCallback() {
public void onResourceTypeLoaded(List<Resource> result) {
- TreeNode[] treeNodes = buildNodes(result);
+ TreeNode[] treeNodes = buildNodes(result, lockedData);
response.setData(treeNodes);
processResponse(requestId, response);
response.setStatus(DSResponse.STATUS_SUCCESS);
@@ -187,11 +176,11 @@ public class ResourceTreeDatasource extends DataSource {
* @param resources
* @return
*/
- public static TreeNode[] buildNodes(List<Resource> resources) {
+ public static TreeNode[] buildNodes(List<Resource> resources, List<Resource> lockedData) {
ResourceTreeNode[] nodes = new ResourceTreeNode[resources.size()];
for (int i = 0; i < resources.size(); i++) {
Resource resource = resources.get(i);
- ResourceTreeNode node = new ResourceTreeNode(resource);
+ ResourceTreeNode node = new ResourceTreeNode(resource, lockedData.contains(resource));
nodes[i] = node;
}
@@ -352,9 +341,11 @@ public class ResourceTreeDatasource extends DataSource {
public static class ResourceTreeNode extends EnhancedTreeNode {
private Resource resource;
+ private boolean isLocked;
- private ResourceTreeNode(Resource resource) {
+ private ResourceTreeNode(Resource resource, boolean isLocked) {
this.resource = resource;
+ this.isLocked = isLocked;
String id = idOf(resource);
setID(id);
@@ -371,21 +362,12 @@ public class ResourceTreeDatasource extends DataSource {
setParentID(parentId);
setAttribute(Attributes.PARENT_ID, parentId);
- // System.out.println(id + " / " + parentId);
- // setAttribute("parentKey", resource.getParentResource() == null ? 0 : (resource.getParentResource().getId() + resource.getResourceType().getName()));
-
String name = resource.getName();
setName(name);
setAttribute(Attributes.NAME, name);
setAttribute(Attributes.DESCRIPTION, resource.getDescription());
- ResourceAvailability currentAvail = resource.getCurrentAvailability();
- setAttribute(
- "currentAvailability",
- (null != currentAvail && currentAvail.getAvailabilityType() == AvailabilityType.UP) ? "/images/icons/availability_green_16.png"
- : "/images/icons/availability_red_16.png");
-
Set<ResourceType> childTypes = resource.getResourceType().getChildResourceTypes();
setIsFolder((childTypes != null && !childTypes.isEmpty()));
}
@@ -394,6 +376,10 @@ public class ResourceTreeDatasource extends DataSource {
return this.resource;
}
+ public boolean isLocked() {
+ return isLocked;
+ }
+
public static String idOf(Resource resource) {
return idOf(resource.getId());
}
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 0d16bea..4cea21b 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
@@ -63,6 +63,7 @@ import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.Breadcrumb;
@@ -142,14 +143,20 @@ public class ResourceTreeView extends LocatableVLayout {
if (!selectionEvent.isRightButtonDown() && selectionEvent.getState()) {
ListGridRecord selectedRecord = treeGrid.getSelectedRecord();
if (selectedRecord instanceof ResourceTreeNode) {
- System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
-
ResourceTreeNode resourceNode = (ResourceTreeNode) selectedRecord;
- selectedNodeId = resourceNode.getID();
- String viewPath = "Resource/" + resourceNode.getResource().getId();
- String currentViewPath = History.getToken();
- if (!currentViewPath.startsWith(viewPath)) {
- CoreGUI.goToView(viewPath);
+
+ if (!resourceNode.isLocked()) {
+ System.out.println("Resource Node selected in tree: " + selectedRecord);
+
+ selectedNodeId = resourceNode.getID();
+ String viewPath = "Resource/" + resourceNode.getResource().getId();
+ String currentViewPath = History.getToken();
+ if (!currentViewPath.startsWith(viewPath)) {
+ CoreGUI.goToView(viewPath);
+ }
+ } else {
+ // TODO: Can we select the previous node? Or do we need a "Locked" hover etc...
+ treeGrid.deselectAllRecords();
}
} else if (selectedRecord instanceof AutoGroupTreeNode) {
System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
@@ -183,7 +190,9 @@ public class ResourceTreeView extends LocatableVLayout {
if (event.getNode() instanceof AutoGroupTreeNode) {
showContextMenu((AutoGroupTreeNode) event.getNode());
} else if (event.getNode() instanceof ResourceTreeNode) {
- showContextMenu((ResourceTreeNode) event.getNode());
+ if (!((ResourceTreeNode) event.getNode()).isLocked()) {
+ showContextMenu((ResourceTreeNode) event.getNode());
+ }
}
}
});
@@ -207,6 +216,7 @@ public class ResourceTreeView extends LocatableVLayout {
// get the backing group if it exists, otherwise create the group
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
+ criteria.addFilterPrivate(true);
criteria.addFilterResourceTypeId(agNode.getResourceType().getId());
criteria.addFilterAutoGroupParentResourceId(agNode.getParentResource().getId());
criteria.addFilterVisible(false);
@@ -224,8 +234,7 @@ public class ResourceTreeView extends LocatableVLayout {
backingGroup.setAutoGroupParentResource(agNode.getParentResource());
backingGroup.setResourceType(agNode.getResourceType());
backingGroup.setVisible(false);
- backingGroup.setRecursive(false);
- resourceGroupService.createResourceGroup(backingGroup, childIds,
+ resourceGroupService.createPrivateResourceGroup(backingGroup, childIds,
new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError("Failed to create resource autogroup", caught);
@@ -596,65 +605,79 @@ public class ResourceTreeView extends LocatableVLayout {
selectedNodeId = ResourceTreeNode.idOf(selectedResourceId);
final ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
- // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource
- resourceService.getResourceLineageAndSiblings(selectedResourceId, new AsyncCallback<List<Resource>>() {
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught);
- }
- public void onSuccess(List<Resource> result) {
- Resource root = result.get(0);
+ // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource
+ resourceService.getResourceLineageAndSiblings(selectedResourceId,
+ new AsyncCallback<List<ResourceLineageComposite>>() {
- if (!root.equals(ResourceTreeView.this.rootResource)) {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught);
+ }
- if (treeGrid != null) {
- treeGrid.destroy();
- }
- buildTree();
+ public void onSuccess(List<ResourceLineageComposite> result) {
+ Resource root = result.get(0).getResource();
- setRootResource(root);
+ final List<Resource> lineage = new ArrayList<Resource>(result.size());
+ final List<Resource> lockedData = new ArrayList<Resource>();
- // seed datasource with initial resource list
- ResourceTreeDatasource dataSource = new ResourceTreeDatasource(result);
- treeGrid.setDataSource(dataSource);
+ for (ResourceLineageComposite r : result) {
+ lineage.add(r.getResource());
+ if (r.isLocked()) {
+ lockedData.add(r.getResource());
+ }
+ }
- addMember(treeGrid);
+ if (!root.equals(ResourceTreeView.this.rootResource)) {
- treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() {
- public void execute(DSResponse response, Object rawData, DSRequest request) {
- System.out.println("Done fetching data for tree.");
- updateSelection();
+ if (treeGrid != null) {
+ treeGrid.destroy();
}
- });
+ buildTree();
- updateSelection();
+ setRootResource(root);
- } else {
- ResourceTypeRepository.Cache.getInstance().loadResourceTypes(
- result,
- EnumSet.of(ResourceTypeRepository.MetadataType.operations,
- ResourceTypeRepository.MetadataType.children,
- ResourceTypeRepository.MetadataType.subCategory),
- new ResourceTypeRepository.ResourceTypeLoadedCallback() {
- public void onResourceTypeLoaded(List<Resource> result) {
- treeGrid.getTree().linkNodes(ResourceTreeDatasource.buildNodes(result));
-
- TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId);
- if (selectedNode != null) {
- updateSelection();
-
- } else {
- CoreGUI.getMessageCenter().notify(
- new Message("Failed to select Resource [" + selectedResourceId + "] in tree.",
- Message.Severity.Warning));
- }
+ // seed datasource with initial resource list and which ancestor resources are locked
+ ResourceTreeDatasource dataSource = new ResourceTreeDatasource(lineage, lockedData);
+ treeGrid.setDataSource(dataSource);
+ addMember(treeGrid);
+
+ treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() {
+ public void execute(DSResponse response, Object rawData, DSRequest request) {
+ System.out.println("Done fetching data for tree.");
+ updateSelection();
}
});
+ updateSelection();
+
+ } else {
+ ResourceTypeRepository.Cache.getInstance().loadResourceTypes(
+ lineage,
+ EnumSet.of(ResourceTypeRepository.MetadataType.operations,
+ ResourceTypeRepository.MetadataType.children,
+ ResourceTypeRepository.MetadataType.subCategory),
+ new ResourceTypeRepository.ResourceTypeLoadedCallback() {
+ public void onResourceTypeLoaded(List<Resource> result) {
+ treeGrid.getTree()
+ .linkNodes(ResourceTreeDatasource.buildNodes(lineage, lockedData));
+
+ TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId);
+ if (selectedNode != null) {
+ updateSelection();
+
+ } else {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Failed to select Resource [" + selectedResourceId
+ + "] in tree.", Message.Severity.Warning));
+ }
+
+ }
+ });
+
+ }
}
- }
- });
+ });
}
public void setSelectedAutoGroup(final Integer selectedAutoGroupId) {
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 66a25be..2e2f6d6 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
@@ -39,6 +39,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.resource.composite.ProblemResourceComposite;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
@@ -167,13 +168,8 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
}
};
- public List<Resource> getResourceLineage(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineage(resourceId),
- "ResourceService.getResourceLineage");
- }
-
- public List<Resource> getResourceLineageAndSiblings(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(resourceId),
+ public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) {
+ return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
"ResourceService.getResourceLineageAndSiblings");
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
index 1ddecc3..2015091 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
@@ -87,6 +87,17 @@ public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
}
+ public ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds) {
+ try {
+ Subject user = getSessionSubject();
+ group = groupManager.createPrivateResourceGroup(user, group);
+ groupManager.setAssignedResources(user, group.getId(), resourceIds, true);
+ return SerialUtility.prepare(group, "ResourceGroupService.createResourceGroup");
+ } catch (Throwable t) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(t));
+ }
+ }
+
public ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds) {
try {
Subject user = getSessionSubject();
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index 4e1a53d..37ec2c9 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -48,6 +48,7 @@ import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.server.PersistenceUtility;
@@ -58,6 +59,7 @@ import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.core.CustomJaasDeploymentServiceMBean;
import org.rhq.enterprise.server.exception.LoginException;
+import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -69,7 +71,6 @@ import org.rhq.enterprise.server.util.CriteriaQueryRunner;
*/
@Stateless
public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRemote {
- @SuppressWarnings("unused")
private final Log log = LogFactory.getLog(SubjectManagerBean.class);
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
@@ -79,6 +80,10 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe
private AuthorizationManagerLocal authorizationManager;
@EJB
+ @IgnoreDependency
+ private ResourceGroupManagerLocal resourceGroupManager;
+
+ @EJB
private SystemManagerLocal systemManager;
@EJB
@@ -508,6 +513,25 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe
deletePrincipal(subject, doomedSubject);
}
+ // one more thing, delete any owned groups
+ List<ResourceGroup> ownedGroups = doomedSubject.getOwnedGroups();
+ if (!ownedGroups.isEmpty()) {
+ int size = ownedGroups.size();
+ int[] ownedGroupIds = new int[size];
+ for (int i = 0; (i < size); ++i) {
+ ownedGroupIds[i] = ownedGroups.get(i).getId();
+ }
+ try {
+ resourceGroupManager.deleteResourceGroups(subject, ownedGroupIds);
+ } catch (Throwable t) {
+ if (log.isDebugEnabled()) {
+ log.error("Error deleting owned group " + ownedGroupIds, t);
+ } else {
+ log.error("Error deleting owned group " + ownedGroupIds + ": " + t.getMessage());
+ }
+ }
+ }
+
deleteSubject(subject, doomedSubject);
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
index d675177..1a14a56 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.server.authz;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
@@ -32,6 +33,8 @@ import javax.persistence.Query;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Permission.Target;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.enterprise.server.RHQConstants;
/**
@@ -117,12 +120,33 @@ public class AuthorizationManagerBean implements AuthorizationManagerLocal {
return true;
}
- Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION);
- query.setParameter("subject", subject);
- query.setParameter("permission", permission);
- query.setParameter("groupId", groupId);
- long count = (Long) query.getSingleResult();
- return (count != 0);
+ ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
+ Subject owner = group.getSubject();
+
+ if (null == owner) {
+ // role-owned group
+ Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION);
+ query.setParameter("subject", subject);
+ query.setParameter("permission", permission);
+ query.setParameter("groupId", groupId);
+ long count = (Long) query.getSingleResult();
+ return (count != 0);
+
+ } else {
+ // don't let a user other than the owner do anything with this group
+ if (!subject.equals(owner)) {
+ return false;
+ }
+
+ // subject-owned group, requires perm check against each group member
+ Set<Resource> members = group.getExplicitResources();
+ List<Integer> memberIds = new ArrayList<Integer>(members.size());
+ for (Resource member : members) {
+ memberIds.add(member.getId());
+ }
+
+ return hasResourcePermission(owner, permission, memberIds);
+ }
}
public boolean hasResourcePermission(Subject subject, Permission permission, int resourceId) {
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 0528b06..bf213c0 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
@@ -94,6 +94,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceHealthComposite;
import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight;
import org.rhq.core.domain.resource.composite.ResourceInstallCount;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.core.domain.resource.composite.ResourceWithAvailability;
import org.rhq.core.domain.resource.flyweight.FlyweightCache;
@@ -721,27 +722,68 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
return resourceLineage;
}
- public List<Resource> getResourceLineageAndSiblings(int resourceId) {
- List<Resource> resourceLineage = getResourceLineage(resourceId);
- List<Resource> result = new LinkedList<Resource>();
+ public List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId) {
+ boolean isInventoryManager = authorizationManager.isInventoryManager(subject);
- Resource platform = resourceLineage.get(0);
- result.add(platform);
- for (Resource resource : resourceLineage) {
- if (resource.getParentResource() != null) {
- // This ensures Hibernate actually fetches the parent Resource.
- resource.getParentResource().getId();
- }
- Set<Resource> childResources = resource.getChildResources();
- result.addAll(childResources);
- for (Resource childResource : childResources) {
- // This ensures Hibernate actually fetches the parent Resource.
- childResource.getParentResource().getId();
- Set<Resource> grandchildResources = childResource.getChildResources();
- result.addAll(grandchildResources);
- for (Resource grandchildResource : grandchildResources) {
+ // get the raw resource lineage up to the platform. We'll check the auth below
+ List<Resource> rawResourceLineage = getResourceLineage(resourceId);
+ int depth = rawResourceLineage.size();
+ Resource parent = (depth > 1) ? rawResourceLineage.get(depth - 2) : null;
+
+ // record which of the raw ancestry is locked from view
+ List<ResourceLineageComposite> resourceLineage = new ArrayList<ResourceLineageComposite>(rawResourceLineage
+ .size());
+ for (Resource resource : rawResourceLineage) {
+ resourceLineage.add(new ResourceLineageComposite(resource, !authorizationManager.canViewResource(subject,
+ resource.getId())));
+ }
+
+ // fill out the tree, including only the direct ancestors and all viewable relations
+ List<ResourceLineageComposite> result = new LinkedList<ResourceLineageComposite>();
+
+ for (ResourceLineageComposite ancestor : resourceLineage) {
+ // always include a direct ancestor
+ result.add(ancestor);
+
+ // if the ancestor is not locked, include relevant children. Also, always show viewable
+ // siblings of the target resource.
+ if (!ancestor.isLocked() || ancestor.getResource() == parent) {
+
+ // get children
+ Set<Resource> children = ancestor.getResource().getChildResources();
+ // only add the viewable children
+ List<Resource> viewableChildren = new ArrayList<Resource>(children.size());
+ for (Resource child : children) {
+ boolean isCommitted = (child.getInventoryStatus() == InventoryStatus.COMMITTED);
+ boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject, child
+ .getId()));
+ if (isCommitted && isViewable) {
+ // if not a direct ancestor add to the list (direct ancestors already added by default)
+ if (!rawResourceLineage.contains(child)) {
+ child.getParentResource().getId();
+ result.add(new ResourceLineageComposite(child, false));
+ }
+ viewableChildren.add(child);
+ }
+ }
+
+ // get grandchildren
+ for (Resource child : viewableChildren) {
// This ensures Hibernate actually fetches the parent Resource.
- grandchildResource.getParentResource().getId();
+ child.getParentResource().getId();
+ Set<Resource> grandChildren = child.getChildResources();
+ for (Resource grandChild : grandChildren) {
+ boolean isCommitted = (grandChild.getInventoryStatus() == InventoryStatus.COMMITTED);
+ boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject,
+ grandChild.getId()));
+ if (isCommitted && isViewable) {
+ // if not a direct ancestor add to the list (direct ancestors already added by default)
+ if (!rawResourceLineage.contains(grandChild)) {
+ grandChild.getParentResource().getId();
+ result.add(new ResourceLineageComposite(grandChild, false));
+ }
+ }
+ }
}
}
}
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 78ece78..6f2ae41 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
@@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceHealthComposite;
import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight;
import org.rhq.core.domain.resource.composite.ResourceInstallCount;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.composite.ResourceWithAvailability;
import org.rhq.core.domain.resource.flyweight.ResourceFlyweight;
import org.rhq.core.domain.resource.group.ResourceGroup;
@@ -156,11 +157,13 @@ public interface ResourceManagerLocal {
/**
* Returns the lineage of a resource plus all the siblings of the resources in the lineage. This is
- * useful for prepopulating all the resources visible in an expanded tree.
+ * useful for prepopulating all the resources visible in an expanded tree. Composites are returned
+ * that indicate whether the resource is viewable or should be locked in the tree.
+ *
* @param resourceId id of resource
- * @return resoure lineage and siblings
+ * @return resource lineage and siblings
*/
- List<Resource> getResourceLineageAndSiblings(int resourceId);
+ List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId);
/**
* Looks up the root of a subtree in the inventory. This will generally find the platform on which
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
index 0e7500f..f75d32d 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
@@ -146,6 +146,15 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
}
}
+ public ResourceGroup createPrivateResourceGroup(Subject subject, //
+ @XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) {
+
+ group.setSubject(subject);
+ group.setRecursive(false);
+
+ return resourceGroupManager.createResourceGroup(subjectManager.getOverlord(), group);
+ }
+
@RequiredPermission(Permission.MANAGE_INVENTORY)
public ResourceGroup createResourceGroup(Subject user, //
@XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) {
@@ -1017,8 +1026,9 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
*/
public PageList<ResourceGroupComposite> findResourceGroupCompositesByCriteria(Subject subject,
ResourceGroupCriteria criteria) {
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- ;
+
+ CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria);
+
String replacementSelectList = ""
+ " new org.rhq.core.domain.resource.group.composite.ResourceGroupComposite( "
+ " ( SELECT COUNT(avail) FROM resourcegroup.explicitResources res JOIN res.currentAvailability avail ) AS explicitCount,"
@@ -1028,17 +1038,6 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
+ " resourcegroup ) ";
generator.alterProjection(replacementSelectList);
- if (criteria.isSecurityManagerRequired()
- && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
- throw new PermissionException("Subject [" + subject.getName()
- + "] requires SecurityManager permission for requested query criteria.");
- }
-
- if (authorizationManager.isInventoryManager(subject) == false) {
- generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null,
- subject.getId());
- }
-
CriteriaQueryRunner<ResourceGroupComposite> queryRunner = new CriteriaQueryRunner<ResourceGroupComposite>(
criteria, generator, entityManager);
PageList<ResourceGroupComposite> results = queryRunner.execute();
@@ -1299,18 +1298,35 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
public void setAssignedResources(Subject subject, int groupId, int[] resourceIds, boolean setType)
throws ResourceGroupDeleteException {
+ ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
+ if (group.isPrivateGroup()) {
+ List<Integer> ids = new ArrayList<Integer>(resourceIds.length);
+ for (int id : resourceIds) {
+ ids.add(id);
+ }
+ if (!authorizationManager.canViewResources(subject, ids)) {
+ throw new PermissionException("Subject [" + subject.getName()
+ + "] does not have VIEW permission for all specified resources.");
+ }
+ } else {
+ if (!authorizationManager.isInventoryManager(subject)) {
+ throw new PermissionException("Subject [" + subject.getName()
+ + "] is not authorized for [ MANAGE_INVENTORY ]. Required for changing group membership ");
+ }
+ }
+
List<Integer> currentMembers = resourceManager.findExplicitResourceIdsByResourceGroup(groupId);
List<Integer> newMembers = ArrayUtils.wrapInList(resourceIds); // members needing addition
newMembers.removeAll(currentMembers);
if (newMembers.size() > 0) {
- addResourcesToGroup(subject, groupId, ArrayUtils.unwrapCollection(newMembers));
+ addResourcesToGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(newMembers));
}
List<Integer> extraMembers = new ArrayList<Integer>(currentMembers); // members needing removal
extraMembers.removeAll(ArrayUtils.wrapInList(resourceIds));
if (extraMembers.size() > 0) {
- removeResourcesFromGroup(subject, groupId, ArrayUtils.unwrapCollection(extraMembers));
+ removeResourcesFromGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(extraMembers));
}
// As a result of the membership change ensure that the group type is set correctly.
@@ -1461,28 +1477,45 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
@SuppressWarnings("unchecked")
public PageList<ResourceGroup> findResourceGroupsByCriteria(Subject subject, ResourceGroupCriteria criteria) {
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- ;
+ CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria);
+
+ CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager);
+ PageList<ResourceGroup> result = queryRunner.execute();
+ return result;
+ }
+
+ private CriteriaQueryGenerator getCriteriaQueryGenerator(Subject subject, ResourceGroupCriteria criteria) {
if (criteria.isSecurityManagerRequired()
&& !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
throw new PermissionException("Subject [" + subject.getName()
+ "] requires SecurityManager permission for requested query criteria.");
}
- if (criteria.isInventoryManagerRequired()
- && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_INVENTORY)) {
+ boolean isInventoryManager = authorizationManager.isInventoryManager(subject);
+ boolean groupAuthzRequired = (!(criteria.isFilterPrivate() || isInventoryManager));
+
+ if (criteria.isInventoryManagerRequired() && !isInventoryManager) {
throw new PermissionException("Subject [" + subject.getName()
+ "] requires InventoryManager permission for requested query criteria.");
}
- if (authorizationManager.isInventoryManager(subject) == false) {
+ // if we're searching for private groups set the subject filter to the current user's subjectId
+ // setting it here prevents the caller from spoofing a different user. This is why the subject and
+ // private filters are different. The suject filter can specifiy any use and therefore requires
+ // inventory manager.
+ if (criteria.isFilterPrivate()) {
+ criteria.addFilterPrivate(null);
+ criteria.addFilterSubjectId(subject.getId());
+ }
+
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ if (groupAuthzRequired) {
generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null,
subject.getId());
}
- CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager);
- return queryRunner.execute();
+ return generator;
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
index de96dbf..a0481b1 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
@@ -42,6 +42,28 @@ import org.rhq.core.domain.util.PageList;
@Local
public interface ResourceGroupManagerLocal {
+ /**
+ * NOTE: This is only used to support AutoGroups currently but the idea may be expanded in the future.
+ *
+ * Creates a private, "user-owned" (aka "subject-owned") resource group. This group differs from a role-owned
+ * group in that it can not be assigned to a role, instead it is owned by the user that creates it. It comprises
+ * only a set of resources for which the user has, minimally, view permission. Since a user's view permissions
+ * can change, membership and authz checking must be performed as needed when taking any action on the group.
+ * <br/><br/>
+ * A user does not need MANAGE_INVENTORY to create a sub-group because it is private to his view.
+ * <br/><br/>
+ * This call does not populate the group with members, it only creates the group. The group is automatically set
+ * to be non-recursive.
+ * <br/><br/>
+ * All user-owned groups are deleted if the the user is deleted.
+ *
+ * @param user The user for which the group will be created.
+ * @param group The group characteristics. Any membership defined here is ignored. The recursivity setting is
+ * ignored.
+ * @return The new group.
+ */
+ ResourceGroup createPrivateResourceGroup(Subject user, ResourceGroup group);
+
ResourceGroup getResourceGroupById(Subject user, int id, GroupCategory category)
throws ResourceGroupNotFoundException;
@@ -108,7 +130,10 @@ public interface ResourceGroupManagerLocal {
/**
* This method ensures that the explicit group membership is set to the specified resources. Members
* will be added or removed as necessary. Make sure you pass the correct value for the <setType>
- * parameter.
+ * parameter.
+ * <br/><br/>
+ * For global groups requires MANAGE_INVENTORY. For private groups requires VIEW permission on all specified
+ * resources.
*
* @param subject
* @param groupId
commit dd657e98f4d906e6bb6b58b3948d1b7d7282b4ec
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Sep 28 12:35:44 2010 -0400
AutoGroup/ResourceTree work
- Fix up breadcrumbs for AutoGroup selections and also fix up some path
- issues that were happening when selecting AG resources.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index bb39f2d..34cf23e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -254,10 +254,13 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
if (viewPath.matches("(" + ResourceTopView.VIEW_ID + "|" + ResourceGroupTopView.VIEW_ID + ")/[^/]*")) {
// e.g. "Resource/10001"
if (!currentViewPath.startsWith(viewPath)) {
- // The Resource that was selected is not the same Resource that was previously selected -
- // grab the end portion of the previous history URL and append it to the new history URL,
- // so the same tab is selected for the new Resource.
- String suffix = currentViewPath.replaceFirst("^[^/]*/[^/]*", "");
+ // The Node that was selected is not the same Node that was previously selected - it
+ // may not even be the same node type. For example, the user could have moved from a
+ // resource to an autogroup in the same tree. Try to keep the tab selection sticky as best as
+ // possible while moving from one view to another by grabbing the end portion of the previous
+ // history URL and append it to the new history URL. The suffix is assumed to follow the
+ // ID (numeric) portion of the currentViewPath.
+ String suffix = currentViewPath.replaceFirst("\\D*[^/]*", "");
viewPath += suffix;
}
}
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 6a7cba9..0d16bea 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
@@ -236,7 +236,6 @@ public class ResourceTreeView extends LocatableVLayout {
// get back to this node given the id of the backing group (from the viewpath)
autoGroupNodeMap.put(result.getId(), agNode);
callback.onSuccess(result);
- //renderAutoGroup(result);
}
});
} else {
@@ -302,6 +301,23 @@ public class ResourceTreeView extends LocatableVLayout {
}
}
+ private void adjustBreadcrumb(TreeNode node, ViewId viewId) {
+ if (node instanceof ResourceTreeNode) {
+ Resource nr = ((ResourceTreeNode) node).getResource();
+ String display = node.getName() + " <span class=\"subtitle\">" + nr.getResourceType().getName() + "</span>";
+ String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png";
+
+ viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
+
+ } else if (node instanceof AutoGroupTreeNode) {
+ String name = ((AutoGroupTreeNode) node).getBackingGroupName();
+ String display = node.getName() + " <span class=\"subtitle\">" + name + "</span>";
+ String icon = "types/" + ((AutoGroupTreeNode) node).getResourceType().getCategory() + "_up_16.png";
+
+ viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
+ }
+ }
+
private void showContextMenu(AutoGroupTreeNode agNode) {
getAutoGroupBackingGroup(agNode, new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
@@ -680,23 +696,6 @@ public class ResourceTreeView extends LocatableVLayout {
}
}
- private void adjustBreadcrumb(TreeNode node, ViewId viewId) {
- if (node instanceof ResourceTreeNode) {
-
- Resource nr = ((ResourceTreeNode) node).getResource();
- String display = node.getName() + " <span class=\"subtitle\">" + nr.getResourceType().getName() + "</span>";
- String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png";
-
- viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
-
- } else {
-
- // if (node.getName() != null) {
- // viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), node.getName(), null, true));
- // }
- }
- }
-
/*private List<Resource> preload(final List<Resource> lineage) {
final ArrayList<Resource> list = new ArrayList<Resource>(lineage);
@@ -730,8 +729,9 @@ public class ResourceTreeView extends LocatableVLayout {
currentViewId = viewPath.getCurrent();
String currentViewIdPath = currentViewId.getPath();
if ("AutoGroup".equals(currentViewIdPath)) {
- ViewId nextViewId = viewPath.getNext();
- Integer autoGroupId = Integer.parseInt(nextViewId.getPath());
+ // Move the currentViewId to the ID portion to play better with other code
+ currentViewId = viewPath.getNext();
+ Integer autoGroupId = Integer.parseInt(currentViewId.getPath());
setSelectedAutoGroup(autoGroupId);
} else {
Integer resourceId = Integer.parseInt(currentViewId.getPath());
commit 9cfec33df4ca3f5975a2a6ba72c6b6a5ddc09cdd
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 16:47:49 2010 -0400
Updating tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index bc0d6c5..5e2913b 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -24,11 +24,13 @@
package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager;
+import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
@@ -91,6 +93,20 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
"not change", expected, actual);
}
+ // This test fails with,
+ //
+ // PersistentObjectException: detached entity passed to persist
+ //
+ // I get the exception with both PropertyGroupDefinition and PropertyDefinitionSimple when I have tried various
+ // approaches to get past the exception.
+ @Test(enabled = false)
+ public void addNewGroup() {
+ initConfigDefs("servers[name='GroupTests']", "GroupTests");
+
+ assertNotNull("The new property should be added to the configuration definition",
+ findGroup("newGroup", originalConfigDef));
+ }
+
// void assertGroupDefinitionExists() {
// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
// if (groupDef.getName().equals("groupToBeRemoved")) {
@@ -107,17 +123,24 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
private void loadAndPersistConfigDefs(String path, String configName) {
originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName);
+ assertNotNull(originalConfigDef);
updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName);
+ assertNotNull(updatedConfigDef);
try {
getTransactionManager().begin();
EntityManager entityMgr = getEntityManager();
entityMgr.persist(originalConfigDef);
- entityMgr.persist(updatedConfigDef);
+ //entityMgr.persist(updatedConfigDef);
getTransactionManager().commit();
} catch (Exception e) {
+ try {
+ getTransactionManager().rollback();
+ } catch (SystemException e1) {
+ throw new RuntimeException(e1);
+ }
throw new RuntimeException(e);
}
}
@@ -131,6 +154,11 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().commit();
} catch (Exception e) {
+ try {
+ getTransactionManager().rollback();
+ } catch (SystemException e1) {
+ throw new RuntimeException(e1);
+ }
throw new RuntimeException(e);
}
}
@@ -139,6 +167,15 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
return "/" + getClass().getPackage().getName().replace('.', '/') + "/";
}
+ private PropertyGroupDefinition findGroup(String name, ConfigurationDefinition configDef) {
+ for (PropertyGroupDefinition groupDef : configDef.getGroupDefinitions()) {
+ if (groupDef.getName().equals(name)) {
+ return groupDef;
+ }
+ }
+ return null;
+ }
+
void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected,
PropertyDefinitionSimple actual) {
AssertUtils.assertPropertiesMatch(msg, expected, actual, "id", "configurationDefinition");
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
index 131cff7..dd8fcfa 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -18,4 +18,12 @@
description="This property exists only in version 1 of the plugin"/>
</plugin-configuration>
</server>
+
+ <server name="GroupTests">
+ <plugin-configuration>
+ <c:group name="existingGroup">
+ <c:simple-property name="existingGroupProperty"/>
+ </c:group>
+ </plugin-configuration>
+ </server>
</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
index 2c94f72..d090e76 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -25,4 +25,21 @@
summary="false"/>
</plugin-configuration>
</server>
+
+ <server name="GroupTests">
+ <plugin-configuration>
+ <c:group name="existingGroup">
+ <c:simple-property name="existingGroupProperty"/>
+ </c:group>
+
+ <c:group name="newGroup">
+ <c:simple-property name="newGroupProperty"
+ description="A new, grouped property"
+ activationPolicy="immediate"
+ default="new grouped property"
+ displayName="New Group Property"
+ readOnly="true"/>
+ </c:group>
+ </plugin-configuration>
+ </server>
</plugin>
commit 7f0ee950e729a69708326e6ad7b5c8df7ebd749f
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 11:01:51 2010 -0400
Adding more tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index 1658e18..bc0d6c5 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -24,8 +24,6 @@
package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager;
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -38,12 +36,11 @@ import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.AssertUtils;
-import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginConfigDefFor;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginDescriptor;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- EntityManager entityMgr;
-
PluginDescriptor originalDescriptor;
PluginDescriptor updatedDescriptor;
@@ -63,16 +60,37 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
@Test
- public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
+ public void addNewUngroupedPropertyDef() {
initConfigDefs("servers[name='MyServer1']", "test");
- PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar");
- PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar");
+ String propertyName = "newUngroupedProperty";
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName);
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName);
assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition",
expected, actual);
}
+ @Test
+ public void removePropertyDefThatIsNotInNewDescriptor() {
+ initConfigDefs("servers[name='MyServer1']", "test");
+
+ assertNull("The property exists in version 1 but not in version 2 of the plugin; therefore, it should be " +
+ "removed the configuration definition", originalConfigDef.get("v1OnlyProperty"));
+ }
+
+ @Test
+ public void doNotModifyExistingPropertyDefThatIsNotModifiedInUpgrade() {
+ initConfigDefs("servers[name='MyServer1']", "test");
+
+ String propertyName = "myExistingProperty";
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName);
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName);
+
+ assertPropertyDefinitionMatches("Existing property that is not changed in new version of pluign should " +
+ "not change", expected, actual);
+ }
+
// void assertGroupDefinitionExists() {
// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
// if (groupDef.getName().equals("groupToBeRemoved")) {
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
index 0c7d362..131cff7 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -7,7 +7,15 @@
<server name="MyServer1">
<plugin-configuration>
- <c:simple-property name="myProperty1"/>
+ <c:simple-property name="myExistingProperty"
+ type="integer"
+ units="megabytes"
+ default="256"
+ required="true"
+ description="My Existing Property"/>
+
+ <c:simple-property name="v1OnlyProperty"
+ description="This property exists only in version 1 of the plugin"/>
</plugin-configuration>
</server>
</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
index 8997f8f..2c94f72 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -7,8 +7,22 @@
<server name="MyServer1">
<plugin-configuration>
- <c:simple-property name="myProperty1"/>
- <c:simple-property name="bar" description="bar property"/>
+ <c:simple-property name="myExistingProperty"
+ type="integer"
+ units="megabytes"
+ default="256"
+ required="true"
+ description="My Existing Property"/>
+
+ <c:simple-property name="newUngroupedProperty"
+ description="A new, ungrouped property"
+ activationPolicy="immediate"
+ default="new property"
+ required="true"
+ displayName="My New Ungrouped Property"
+ readOnly="true"
+ type="longString"
+ summary="false"/>
</plugin-configuration>
</server>
</plugin>
commit 423bfa5e3c976746bd61d917464eff8da2cbac46
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:52:34 2010 -0400
Guarding against hibernate exception that can occur when using delete-orphan
While adding/updating tests I was running into,
HibernateException: A collection with cascade="all-delete-orphan" was no longer
referenced by the owning entity instance
The solution is to make sure that the managed collection references do
not change
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
index 101d894..782dc99 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
@@ -78,7 +78,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@IndexColumn(name = "order_index")
@OneToMany(mappedBy = "propertyDefinitionSimple", fetch = FetchType.EAGER)
- private List<PropertyDefinitionEnumeration> enumeratedValues;
+ private List<PropertyDefinitionEnumeration> enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>();
/**
* This property's default value. This field should have a non-null value for properties whose
@@ -122,10 +122,6 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
*/
@NotNull
public Set<Constraint> getConstraints() {
- if (this.constraints == null) {
- this.constraints = new LinkedHashSet<Constraint>();
- }
-
return this.constraints;
}
@@ -148,15 +144,11 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
*/
@NotNull
public List<PropertyDefinitionEnumeration> getEnumeratedValues() {
- if (this.enumeratedValues == null) {
- this.enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>();
- }
-
return this.enumeratedValues;
}
public void setEnumeratedValues(List<PropertyDefinitionEnumeration> enumeratedValues, boolean allowCustomEnumValue) {
- this.enumeratedValues = enumeratedValues;
+ addEnumeratedValues(enumeratedValues.toArray(new PropertyDefinitionEnumeration[enumeratedValues.size()]));
this.allowCustomEnumeratedValue = allowCustomEnumValue;
ensureOrdering();
}
commit d6f69c80499f3e959825ab50b613ad45cd472404
Merge: b56a7c0... 3c5a00e...
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:21:43 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit b56a7c0af0071ebee3b350ac1769a52e8a8b3a75
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:17:01 2010 -0400
Getting infrastructure in place for testing plugin upgrade code
Trying to clean up and get tests in ConfigurationMetadataManagerBean in a
working, maintainable state.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
index a27b677..101d894 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
@@ -23,6 +23,7 @@
package org.rhq.core.domain.configuration.definition;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -69,7 +70,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@OneToMany(mappedBy = "propertyDefinitionSimple", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
- private Set<Constraint> constraints;
+ private Set<Constraint> constraints = new HashSet<Constraint>();
/**
* The <options> within <property-options> for a <simple-property>
diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml
index 4c4e9a5..b54dfd8 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -400,6 +400,13 @@
<version>1.8</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index 87d254a..1658e18 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -23,113 +23,102 @@
package org.rhq.enterprise.server.configuration.metadata;
-import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser;
-import org.rhq.core.clientapi.descriptor.DescriptorPackages;
-import org.rhq.core.clientapi.descriptor.configuration.ConfigurationDescriptor;
+import javax.persistence.EntityManager;
+import javax.transaction.NotSupportedException;
+import javax.transaction.SystemException;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.enterprise.server.resource.metadata.test.UpdateSubsytemTestBase;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.AssertUtils;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import javax.persistence.EntityManager;
-import javax.transaction.TransactionManager;
-import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.util.ValidationEventCollector;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import java.io.FileNotFoundException;
-import java.net.URL;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- ConfigurationMetadataManagerLocal configurationMetadataMgr;
-
EntityManager entityMgr;
- ConfigurationDefinition originalConfigurationDef;
+ PluginDescriptor originalDescriptor;
+
+ PluginDescriptor updatedDescriptor;
- ConfigurationDefinition newConfigurationDef;
+ ConfigurationDefinition originalConfigDef;
- @BeforeClass(enabled = false)
- public void setupClass() throws Exception {
+ ConfigurationDefinition updatedConfigDef;
+
+ @BeforeClass
+ public void setupClass() {
String pluginFileBaseName = "configuration_metadata_manager_bean_test";
String version1 = pluginFileBaseName + "_v1.xml";
String version2 = pluginFileBaseName + "_v2.xml";
- getTransactionManager().begin();
- entityMgr = getEntityManager();
+ originalDescriptor = loadPluginDescriptor(getPackagePath() + version1);
+ updatedDescriptor = loadPluginDescriptor(getPackagePath() + version2);
+ }
- configurationMetadataMgr = LookupUtil.getConfigurationMetadataManager();
+ @Test
+ public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
+ initConfigDefs("servers[name='MyServer1']", "test");
- originalConfigurationDef = createAndSaveConfigurationDef(version1);
- newConfigurationDef = loadPluginConfigurationFromFile(version2);
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar");
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar");
- assertGroupDefinitionExists();
+ assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition",
+ expected, actual);
+ }
- originalConfigurationDef = entityMgr.getReference(ConfigurationDefinition.class,
- originalConfigurationDef.getId());
+// void assertGroupDefinitionExists() {
+// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
+// if (groupDef.getName().equals("groupToBeRemoved")) {
+// assertTrue(groupDef.getId() != 0);
+// assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId()));
+// }
+// }
+// }
+
+ private void initConfigDefs(String path, String configName) {
+ loadAndPersistConfigDefs(path, configName);
+ updateConfigDef();
+ }
- configurationMetadataMgr.updateConfigurationDefinition(newConfigurationDef, originalConfigurationDef);
+ private void loadAndPersistConfigDefs(String path, String configName) {
+ originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName);
+ updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName);
- originalConfigurationDef = entityMgr.find(ConfigurationDefinition.class, originalConfigurationDef.getId());
+ try {
+ getTransactionManager().begin();
- assertNotNull(originalConfigurationDef);
- }
+ EntityManager entityMgr = getEntityManager();
+ entityMgr.persist(originalConfigDef);
+ entityMgr.persist(updatedConfigDef);
- void assertGroupDefinitionExists() {
- for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
- if (groupDef.getName().equals("groupToBeRemoved")) {
- assertTrue(groupDef.getId() != 0);
- assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId()));
- }
+ getTransactionManager().commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
- @AfterClass(enabled = false)
- public void tearDownClass() throws Exception {
- getTransactionManager().rollback();
- }
-
- private ConfigurationDefinition createAndSaveConfigurationDef(String file) throws Exception {
- ConfigurationDefinition configurationDef = loadPluginConfigurationFromFile(file);
- entityMgr.persist(configurationDef);
- return configurationDef;
- }
+ private void updateConfigDef() {
+ try {
+ getTransactionManager().begin();
- private ConfigurationDefinition loadPluginConfigurationFromFile(String file) throws Exception {
- PluginDescriptor pluginDescriptor = loadPluginDescriptor(file);
- ConfigurationDescriptor configurationDescriptor = pluginDescriptor.getServers().get(0).getPluginConfiguration();
- return ConfigurationMetadataParser.parse("test", configurationDescriptor);
- }
+ ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager();
+ configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef);
- private PluginDescriptor loadPluginDescriptor(String file) throws Exception {
- URL pluginDescriptorURL = getClass().getResource(file);
- if (pluginDescriptorURL == null) {
- throw new FileNotFoundException("File " + file + " not found");
+ getTransactionManager().commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
+ }
- JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
- URL pluginSchemaURL = this.getClass().getClassLoader().getResource("rhq-plugin.xsd");
- Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(pluginSchemaURL);
-
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- ValidationEventCollector vec = new ValidationEventCollector();
- unmarshaller.setEventHandler(vec);
- unmarshaller.setSchema(pluginSchema);
-
- return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream());
+ private String getPackagePath() {
+ return "/" + getClass().getPackage().getName().replace('.', '/') + "/";
}
void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected,
@@ -138,18 +127,9 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
@Test(enabled = false)
- public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
- PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("bar");
- PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("bar");
-
- assertPropertyDefinitionMatches("New ungrouped property defs shoould be added to the configuration definition",
- expected, actual);
- }
-
- @Test(enabled = false)
public void existingUngroupedPropertyDefShouldBeUpdated() throws Exception {
- PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("foo");
- PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("foo");
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("foo");
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("foo");
assertPropertyDefinitionMatches("Existing ungrouped property defs should be updated", expected, actual);
}
@@ -158,13 +138,13 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
public void propertyDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
assertNull(
"A property def in the original configuration def that is removed in the new configuration def should be deleted",
- originalConfigurationDef.getPropertyDefinitionSimple("propertyToBeRemoved")
+ originalConfigDef.getPropertyDefinitionSimple("propertyToBeRemoved")
);
}
@Test(enabled = false)
public void propertyGroupDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
- for (PropertyGroupDefinition def : originalConfigurationDef.getGroupDefinitions()) {
+ for (PropertyGroupDefinition def : originalConfigDef.getGroupDefinitions()) {
if (def.getName().equals("groupToBeRemoved")) {
fail("Expected property group 'groupToBeRemoved' to be deleted since it is not in the new configuration def.");
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java
new file mode 100644
index 0000000..8eb4632
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java
@@ -0,0 +1,70 @@
+package org.rhq.enterprise.server.configuration.metadata;
+
+import java.io.FileNotFoundException;
+import java.net.URL;
+
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.util.ValidationEventCollector;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.apache.commons.jxpath.JXPathContext;
+
+import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser;
+import org.rhq.core.clientapi.descriptor.DescriptorPackages;
+import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ResourceDescriptor;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+
+public class PluginDescriptorUtil {
+
+ public static PluginDescriptor loadPluginDescriptor(String file) {
+ try {
+ URL pluginDescriptorURL = PluginDescriptorUtil.class.getResource(file);
+ if (pluginDescriptorURL == null) {
+ throw new FileNotFoundException("File " + file + " not found");
+ }
+
+ JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
+ URL pluginSchemaURL = PluginDescriptorUtil.class.getClassLoader().getResource("rhq-plugin.xsd");
+ Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(
+ pluginSchemaURL);
+ Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+ ValidationEventCollector vec = new ValidationEventCollector();
+ unmarshaller.setEventHandler(vec);
+ unmarshaller.setSchema(pluginSchema);
+
+ return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static Object find(PluginDescriptor descriptor, String path) {
+ JXPathContext context = JXPathContext.newContext(descriptor);
+ return context.getValue(path);
+ }
+
+ public static ConfigurationDefinition loadPluginConfigDefFor(PluginDescriptor descriptor, String path,
+ String configName) {
+ try {
+ ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path);
+ return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getPluginConfiguration());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static ConfigurationDefinition loadResourceConfigDefFor(PluginDescriptor descriptor, String path,
+ String configName) {
+ try {
+ ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path);
+ return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getResourceConfiguration());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
new file mode 100644
index 0000000..0c7d362
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -0,0 +1,13 @@
+<plugin name="ConfigurationMetadataManagerBeanTest"
+ package="org.rhq.enterprise.server.confiuguration.metadata"
+ version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="MyServer1">
+ <plugin-configuration>
+ <c:simple-property name="myProperty1"/>
+ </plugin-configuration>
+ </server>
+</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
new file mode 100644
index 0000000..8997f8f
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -0,0 +1,14 @@
+<plugin name="ConfigurationMetadataManagerBeanTest"
+ package="org.rhq.enterprise.server.confiuguration.metadata"
+ version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="MyServer1">
+ <plugin-configuration>
+ <c:simple-property name="myProperty1"/>
+ <c:simple-property name="bar" description="bar property"/>
+ </plugin-configuration>
+ </server>
+</plugin>
commit f0fffb5636ef2cdf89f6a1a1b1808e5d2fd98b6c
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Sep 28 17:15:48 2010 -0400
[BZ 619781] Handling more scenarios for settting connection properties to default values
Adding logic to handle three additional scenarios each of which involves
connection properties that are required and specify a default value:
1) A new property is added to a new group
2) An existing property not part of a group added to an existing group
3) A property previously in a group moved outside of a group
There were also some scenarios when properties were moved into or out of a group
and the group reference was not getting set or unset.
ConfigurationMetadataManagerBean has been modifed to update these references.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
index ad0c84b..ecad316 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.server.configuration.metadata;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import java.util.HashSet;
import java.util.Set;
@@ -35,6 +36,8 @@ public class ConfigurationDefinitionUpdateReport {
private Set<PropertyDefinition> newPropertyDefs = new HashSet<PropertyDefinition>();
+ private Set<PropertyDefinition> updatedPropertyDefs = new HashSet<PropertyDefinition>();
+
public ConfigurationDefinitionUpdateReport(ConfigurationDefinition configurationDefinition) {
configurationDef = configurationDefinition;
}
@@ -44,11 +47,23 @@ public class ConfigurationDefinitionUpdateReport {
}
public void addNewPropertyDefinition(PropertyDefinition propertyDef) {
- newPropertyDefs.add(propertyDef);
+ if (propertyDef instanceof PropertyDefinitionSimple) {
+ newPropertyDefs.add(propertyDef);
+ }
}
public Set<PropertyDefinition> getNewPropertyDefinitions() {
return newPropertyDefs;
}
+ public void addUpdatedPropertyDefinition(PropertyDefinition propertyDef) {
+ if (propertyDef instanceof PropertyDefinitionSimple) {
+ updatedPropertyDefs.add(propertyDef);
+ }
+ }
+
+ public Set<PropertyDefinition> getUpdatedPropertyDefinitions() {
+ return updatedPropertyDefs;
+ }
+
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index 8427c8b..04a3995 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -74,6 +74,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
PropertyDefinition existingProp = existingDefinition.get(newProperty.getName());
if (existingProp != null) {
updatePropertyDefinition(existingProp, newProperty);
+ updateReport.addUpdatedPropertyDefinition(newProperty);
} else {
existingDefinition.put(newProperty);
updateReport.addNewPropertyDefinition(newProperty);
@@ -130,6 +131,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
PropertyDefinition existingProperty = existingDefinition.getPropertyDefinitions().get(nDef.getName());
if (existingProperty != null) {
updatePropertyDefinition(existingProperty, nDef);
+ updateReport.addUpdatedPropertyDefinition(nDef);
} else {
existingDefinition.put(nDef);
updateReport.addNewPropertyDefinition(nDef);
@@ -157,6 +159,11 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
entityManager.persist(def);
def.setPropertyGroupDefinition(group);
def.setConfigurationDefinition(existingDefinition);
+
+ if (!exPDefs.containsKey(def.getName())) {
+ updateReport.addNewPropertyDefinition(def);
+ }
+
exPDefs.put(def.getName(), def);
}
}
@@ -309,6 +316,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
existingProperty.setRequired(newProperty.isRequired());
existingProperty.setReadOnly(newProperty.isReadOnly());
existingProperty.setSummary(newProperty.isSummary());
+ existingProperty.setPropertyGroupDefinition(newProperty.getPropertyGroupDefinition());
/*
* After the general things have been set, go through the subtypes of PropertyDefinition. If the new type is the
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index a136561..ff81a6e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@ -969,7 +969,8 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
.updateConfigurationDefinition(resourceType.getPluginConfigurationDefinition(),
existingConfigurationDefinition);
- if (updateReport.getNewPropertyDefinitions().size() > 0) {
+ if (updateReport.getNewPropertyDefinitions().size() > 0 ||
+ updateReport.getUpdatedPropertyDefinitions().size() > 0) {
Subject overlord = subjectManager.getOverlord();
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
@@ -991,6 +992,7 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
private void updateResourcePluginConfiguration(Resource resource, ConfigurationDefinitionUpdateReport updateReport) {
Configuration pluginConfiguration = resource.getPluginConfiguration();
+ boolean modified = false;
int numberOfProperties = pluginConfiguration.getProperties().size();
ConfigurationTemplate template = updateReport.getConfigurationDefinition().getDefaultTemplate();
Configuration templateConfiguration = template.getConfiguration();
@@ -999,10 +1001,23 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
if (propertyDef.isRequired()) {
Property templateProperty = templateConfiguration.get(propertyDef.getName());
pluginConfiguration.put(templateProperty.deepCopy(false));
+ modified = true;
}
}
- if (pluginConfiguration.getProperties().size() > numberOfProperties) {
+ for (PropertyDefinition propertyDef : updateReport.getUpdatedPropertyDefinitions()) {
+ if (propertyDef.isRequired()) {
+ String propertyValue = pluginConfiguration.getSimpleValue(propertyDef.getName(), null);
+ if (propertyValue == null) {
+ Property templateProperty = templateConfiguration.get(propertyDef.getName());
+ pluginConfiguration.put(templateProperty.deepCopy(false));
+ modified = true;
+ }
+ }
+ }
+
+// if (pluginConfiguration.getProperties().size() > numberOfProperties) {
+ if (modified) {
resource.setMtime(new Date().getTime());
}
}
13 years, 8 months
[rhq] Branch 'resource-upgrade' - 4 commits - modules/core
by lkrejci
modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java | 231 +++---
modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/DiscoverySuspendedException.java | 50 +
modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java | 57 -
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java | 2
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ForwardingProxy.java | 72 ++
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java | 334 +++++++++-
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java | 205 +++---
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponent.java | 67 +-
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponentInterface.java | 36 +
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java | 7
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/NothingDiscoveringDiscoveryComponent.java | 42 +
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling1/rhq-plugin.xml | 2
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling2/rhq-plugin.xml | 2
modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/v2/rhq-plugin.xml | 2
14 files changed, 854 insertions(+), 255 deletions(-)
New commits:
commit e7fb6edacd4c172a236cfc39b19096f03cef85ee
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon Oct 4 18:34:25 2010 +0200
Discovery now recurses to child resource types of the existing resources even if the discovery of the existing resources' type is disallowed due to upgrade failure.
This means that no new siblings will be discovered but the existing resources "contents" will be up-to-date with the plugin version.
Added tests for this behaviour and updated the existing to reflect the changes.
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index 99a0513..ec40b0c 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -91,6 +91,7 @@ import org.rhq.core.pc.plugin.BlacklistedException;
import org.rhq.core.pc.plugin.CanonicalResourceKey;
import org.rhq.core.pc.plugin.PluginComponentFactory;
import org.rhq.core.pc.plugin.PluginManager;
+import org.rhq.core.pc.upgrade.DiscoverySuspendedException;
import org.rhq.core.pc.upgrade.ResourceUpgradeDelegate;
import org.rhq.core.pc.util.DiscoveryComponentProxyFactory;
import org.rhq.core.pc.util.FacetLockType;
@@ -289,18 +290,22 @@ public class InventoryManager extends AgentService implements ContainerService,
* @param context the context for use by the discovery component
* @return the details of all discovered resources, may be empty or <code>null</code>
*
+ * @throws DiscoverySuspendedException if the discovery is suspended due to a resource upgrade failure
* @throws Exception if the discovery component threw an exception
*/
public Set<DiscoveredResourceDetails> invokeDiscoveryComponent(ResourceContainer parentResourceContainer,
- ResourceDiscoveryComponent component, ResourceDiscoveryContext context) throws Exception {
+ ResourceDiscoveryComponent component, ResourceDiscoveryContext context) throws DiscoverySuspendedException, Exception {
Resource parentResource = parentResourceContainer == null ? null : parentResourceContainer.getResource();
if (resourceUpgradeDelegate.hasUpgradeFailedInChildren(parentResource, context.getResourceType())) {
- log.debug("Discovery of [" + context.getResourceType() + "] has been disallowed under "
- + (parentResource == null ? " the platform " : parentResource)
- + " because some of its siblings failed to upgrade.");
- return null;
+ String message = "Discovery of [" + context.getResourceType() + "] has been suspended under "
+ + (parentResource == null ? " the platform " : parentResource)
+ + " because some of its siblings failed to upgrade.";
+
+ log.debug(message);
+
+ throw new DiscoverySuspendedException(message);
}
long timeout = getDiscoveryComponentTimeout(context.getResourceType());
@@ -699,19 +704,29 @@ public class InventoryManager extends AgentService implements ContainerService,
// Ask the plugin's discovery component to find the new resource, throwing exceptions if it cannot be
// found at all.
- Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentResourceContainer,
- discoveryComponent, discoveryContext);
- if ((discoveredResources == null) || discoveredResources.isEmpty()) {
- log.info("Plugin Error: During manual add, discovery component method ["
- + discoveryComponent.getClass().getName() + ".discoverResources()] returned "
- + discoveredResources + " when passed a single plugin configuration "
- + "(either the resource type was blacklisted or the plugin developer "
- + "did not implement support for manually discovered resources correctly).");
- throw new PluginContainerException("The [" + resourceType.getPlugin()
- + "] plugin does not properly support manual addition of [" + resourceType.getName()
- + "] resources.");
+ try {
+ Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentResourceContainer,
+ discoveryComponent, discoveryContext);
+ if ((discoveredResources == null) || discoveredResources.isEmpty()) {
+ log.info("Plugin Error: During manual add, discovery component method ["
+ + discoveryComponent.getClass().getName() + ".discoverResources()] returned "
+ + discoveredResources + " when passed a single plugin configuration "
+ + "(either the resource type was blacklisted or the plugin developer "
+ + "did not implement support for manually discovered resources correctly).");
+ throw new PluginContainerException("The [" + resourceType.getPlugin()
+ + "] plugin does not properly support manual addition of [" + resourceType.getName()
+ + "] resources.");
+ }
+ discoveredResourceDetails = discoveredResources.iterator().next();
+ } catch (DiscoverySuspendedException e) {
+ String message = "The discovery class [" + discoveryComponent.getClass().getName() + "]" +
+ " uses a legacy implementation of \"manual add\" functionality. Some of the child resources" +
+ " with the resource type [" + resourceType + "] under the parent resource [" + parentResourceContainer.getResource() + "]" +
+ " failed to upgrade, which makes it impossible to support the legacy manual-add implementation. Either upgrade the plugin [" +
+ resourceType.getPlugin() + "] to successfully upgrade all resources or consider implementing the ManuallAdd facet.";
+ log.info(message);
+ throw new PluginContainerException(message, e);
}
- discoveredResourceDetails = discoveredResources.iterator().next();
}
// Create the new Resource and add it to inventory if it isn't already there.
@@ -1844,6 +1859,8 @@ public class InventoryManager extends AgentService implements ContainerService,
try {
discoveredResources = invokeDiscoveryComponent(null, component, context);
+ } catch (DiscoverySuspendedException e) {
+ log.error("Discovery seems to be suspended for platforms due to upgrade error.", e);
} catch (Throwable e) {
log.warn("Platform plugin discovery failed - skipping", e);
}
@@ -2179,35 +2196,47 @@ public class InventoryManager extends AgentService implements ContainerService,
parentResourceContext, SystemInfoFactory.createSystemInfo(), processScanResults,
Collections.EMPTY_LIST, this.configuration.getContainerName(),
this.configuration.getPluginContainerDeployment());
- Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentContainer,
- discoveryComponent, context);
newResources = new HashSet<Resource>();
- if ((discoveredResources != null) && (!discoveredResources.isEmpty())) {
- IdentityHashMap<Configuration, DiscoveredResourceDetails> pluginConfigObjects = new IdentityHashMap<Configuration, DiscoveredResourceDetails>();
- for (DiscoveredResourceDetails discoveredResource : discoveredResources) {
- if (discoveredResource == null) {
- throw new IllegalStateException("Plugin error: Discovery class "
- + discoveryComponent.getClass().getName()
- + " returned a Set containing one or more null items.");
- }
- if (!discoveredResource.getResourceType().equals(resourceType)) {
- throw new IllegalStateException("Plugin error: Discovery class "
- + discoveryComponent.getClass().getName()
- + " returned a DiscoveredResourceDetails with an incorrect ResourceType (was "
- + discoveredResource.getResourceType().getName() + " but should have been "
- + resourceType.getName());
+ try {
+ Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentContainer,
+ discoveryComponent, context);
+ if ((discoveredResources != null) && (!discoveredResources.isEmpty())) {
+ IdentityHashMap<Configuration, DiscoveredResourceDetails> pluginConfigObjects = new IdentityHashMap<Configuration, DiscoveredResourceDetails>();
+ for (DiscoveredResourceDetails discoveredResource : discoveredResources) {
+ if (discoveredResource == null) {
+ throw new IllegalStateException("Plugin error: Discovery class "
+ + discoveryComponent.getClass().getName()
+ + " returned a Set containing one or more null items.");
+ }
+ if (!discoveredResource.getResourceType().equals(resourceType)) {
+ throw new IllegalStateException("Plugin error: Discovery class "
+ + discoveryComponent.getClass().getName()
+ + " returned a DiscoveredResourceDetails with an incorrect ResourceType (was "
+ + discoveredResource.getResourceType().getName() + " but should have been "
+ + resourceType.getName());
+ }
+ if (null != pluginConfigObjects
+ .put(discoveredResource.getPluginConfiguration(), discoveredResource)) {
+ throw new IllegalStateException("The plugin component "
+ + discoveryComponent.getClass().getName()
+ + " returned multiple resources that point to the same plugin configuration object on the "
+ + "resource type [" + resourceType + "]. This is not allowed, please use "
+ + "ResoureDiscoveryContext.getDefaultPluginConfiguration() "
+ + "for each discovered resource.");
+ }
+ Resource newResource = InventoryManager.createNewResource(discoveredResource);
+ newResources.add(newResource);
}
- if (null != pluginConfigObjects
- .put(discoveredResource.getPluginConfiguration(), discoveredResource)) {
- throw new IllegalStateException("The plugin component "
- + discoveryComponent.getClass().getName()
- + " returned multiple resources that point to the same plugin configuration object on the "
- + "resource type [" + resourceType + "]. This is not allowed, please use "
- + "ResoureDiscoveryContext.getDefaultPluginConfiguration() "
- + "for each discovered resource.");
+ }
+ } catch (DiscoverySuspendedException e) {
+ //ok, the discovery is suspended for this resource type under this parent.
+ //but we can continue the discovery in the child resource types of the existing resources.
+ //we can therefore pretend that the discovery returned the existing resources so that
+ //we can recurse into their children up in the call-chain.
+ for(Resource existingResource : parentResource.getChildResources()) {
+ if (resourceType.equals(existingResource.getResourceType())) {
+ newResources.add(existingResource);
}
- Resource newResource = InventoryManager.createNewResource(discoveredResource);
- newResources.add(newResource);
}
}
} catch (Throwable e) {
@@ -2654,14 +2683,14 @@ public class InventoryManager extends AgentService implements ContainerService,
if (container != null) {
if (container.getResourceComponentState() == ResourceComponentState.STARTED) {
try {
- resourceUpgradeDelegate.processAndQueue(container);
+ if (resourceUpgradeDelegate.processAndQueue(container)) {
+ for (Resource child : resource.getChildResources()) {
+ upgradeResource(child);
+ }
+ }
} catch (PluginContainerException e) {
log.error("Exception thrown while upgrading [" + resource + "].", e);
}
-
- for (Resource child : resource.getChildResources()) {
- upgradeResource(child);
- }
} else {
String message = "The resource container for resource [" + resource
+ "] wasn't started while upgrading.";
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/DiscoverySuspendedException.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/DiscoverySuspendedException.java
new file mode 100644
index 0000000..5cb695d
--- /dev/null
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/DiscoverySuspendedException.java
@@ -0,0 +1,50 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.pc.upgrade;
+
+import org.rhq.core.pc.inventory.InventoryManager;
+
+/**
+ * This exception is thrown from the {@link InventoryManager#invokeDiscoveryComponent(org.rhq.core.pc.inventory.ResourceContainer, org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent, org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext)} if the
+ * discovery is suspended for given resource type due to a resource upgrade failure.
+ *
+ * @author Lukas Krejci
+ */
+public class DiscoverySuspendedException extends Exception {
+
+ private static final long serialVersionUID = 1L;
+
+ public DiscoverySuspendedException() {
+ super();
+ }
+
+ public DiscoverySuspendedException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public DiscoverySuspendedException(String message) {
+ super(message);
+ }
+
+ public DiscoverySuspendedException(Throwable cause) {
+ super(cause);
+ }
+
+}
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
index 98a897e..06d2cd0 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/upgrade/ResourceUpgradeDelegate.java
@@ -26,6 +26,7 @@ import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.rhq.core.clientapi.agent.PluginContainerException;
import org.rhq.core.clientapi.agent.upgrade.ResourceUpgradeRequest;
import org.rhq.core.domain.resource.Resource;
@@ -61,7 +62,7 @@ public class ResourceUpgradeDelegate {
private Set<Resource> failedResources = new HashSet<Resource>();
private Map<Resource, Set<ResourceType>> failedResourceTypesPerParent = new HashMap<Resource, Set<ResourceType>>();
private boolean mergeFailed;
-
+
public ResourceUpgradeDelegate(InventoryManager inventoryManager) {
this.inventoryManager = inventoryManager;
}
@@ -84,13 +85,17 @@ public class ResourceUpgradeDelegate {
/**
* Asks the resource's discovery component to upgrade the resource.
* @param resourceContainer
- * @return true if the resource was queued for upgrade, false otherwise
+ * @return true if the resource was queued for upgrade with no problems,
+ * false if there was some problem upgrading and the resource container was deactivated as
+ * a results of that.
* @throws PluginContainerException on error
*/
- public void processAndQueue(ResourceContainer resourceContainer) throws PluginContainerException {
+ public boolean processAndQueue(ResourceContainer resourceContainer) throws PluginContainerException {
if (enabled) {
- executeResourceUpgradeFacetAndStoreRequest(resourceContainer);
+ return executeResourceUpgradeFacetAndStoreRequest(resourceContainer);
}
+
+ return true;
}
/**
@@ -99,7 +104,7 @@ public class ResourceUpgradeDelegate {
public boolean hasUpgradeMergeFailed() {
return mergeFailed;
}
-
+
/**
* Tells whether given resource had a upgrade failure during the {@link #processAndQueue(ResourceContainer)} invocation.
*
@@ -109,7 +114,7 @@ public class ResourceUpgradeDelegate {
public boolean hasUpgradeFailed(Resource resource) {
return mergeFailed || failedResources.contains(resource);
}
-
+
/**
* Tells whether at least one of the children with given resource type of the given parent resource
* had an upgrade failure during {@link #processAndQueue(ResourceContainer)} invocation.
@@ -120,35 +125,35 @@ public class ResourceUpgradeDelegate {
if (mergeFailed) {
return true;
}
-
+
Set<ResourceType> failedTypes = failedResourceTypesPerParent.get(parentResource);
-
+
return failedTypes != null && failedTypes.contains(childrenResourceType);
}
-
+
public void sendRequests() throws Throwable {
if (enabled && requests.size() > 0) {
try {
inventoryManager.mergeResourcesFromUpgrade(requests);
} catch (Throwable t) {
mergeFailed = true;
-
+
//deactivate all the resources to be upgraded. We might have a problem
//because they have not been upgraded because the merge failed.
- for(ResourceUpgradeRequest request : requests) {
+ for (ResourceUpgradeRequest request : requests) {
ResourceContainer container = inventoryManager.getResourceContainer(request.getResourceId());
if (container != null) {
inventoryManager.deactivateResource(container.getResource());
}
}
-
+
throw t;
}
}
}
@SuppressWarnings("unchecked")
- private <T extends ResourceComponent> void executeResourceUpgradeFacetAndStoreRequest(
+ private <T extends ResourceComponent> boolean executeResourceUpgradeFacetAndStoreRequest(
ResourceContainer resourceContainer) throws PluginContainerException {
ResourceComponent<T> parentResourceComponent = resourceContainer.getResourceContext()
@@ -166,16 +171,16 @@ public class ResourceUpgradeDelegate {
if (!(discoveryComponent instanceof ResourceUpgradeFacet)) {
//well, there's no point in continuing if the resource doesn't support the facet
- return;
+ return true;
}
ResourceUpgradeContext<ResourceComponent<T>> upgradeContext = inventoryManager.createResourceUpgradeContext(
resource, parentResourceComponent, discoveryComponent);
ResourceUpgradeRequest request = new ResourceUpgradeRequest(resource.getId());
-
+
request.setTimestamp(System.currentTimeMillis());
-
+
ResourceUpgradeReport upgradeReport = null;
try {
upgradeReport = inventoryManager.invokeDiscoveryComponentResourceUpgradeFacet(resource.getResourceType(),
@@ -189,13 +194,13 @@ public class ResourceUpgradeDelegate {
String upgradeErrors = null;
if ((upgradeErrors = checkUpgradeValid(resource, upgradeReport)) != null) {
String errorString = "Upgrading the resource [" + resource + "] using these updates [" + upgradeReport
- + "] would render the inventory invalid because of the following reasons: " + upgradeErrors;
-
+ + "] would render the inventory invalid because of the following reasons: " + upgradeErrors;
+
log.error(errorString);
-
+
IllegalStateException ex = new IllegalStateException(errorString);
ex.fillInStackTrace();
-
+
request.setErrorProperties(ex);
} else {
request.fillInFromReport(upgradeReport);
@@ -207,20 +212,24 @@ public class ResourceUpgradeDelegate {
if (request.hasSomethingToUpgrade()) {
requests.add(request);
}
-
+
if (request.getUpgradeErrorMessage() != null) {
failedResources.add(resource);
-
+
Set<ResourceType> failedResourceTypesInParent = failedResourceTypesPerParent.get(parentResource);
if (failedResourceTypesInParent == null) {
failedResourceTypesInParent = new HashSet<ResourceType>();
failedResourceTypesPerParent.put(parentResource, failedResourceTypesInParent);
}
-
+
failedResourceTypesInParent.add(resource.getResourceType());
-
+
inventoryManager.deactivateResource(resource);
+
+ return false;
}
+
+ return true;
}
private String checkUpgradeValid(Resource resource, ResourceUpgradeReport upgradeReport) {
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
index 7eafafc..ebb73be 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
@@ -156,9 +156,9 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
//check that the resources are upgraded
checkResourcesUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE), 1);
- checkResourcesUpgraded(resources.get(PARENT_TYPE), 2);
- checkResourcesUpgraded(resources.get(SIBLING_TYPE), 30);
- checkResourcesUpgraded(resources.get(TEST_TYPE), 30);
+ checkResourcesUpgraded(resources.get(PARENT_TYPE), 3);
+ checkResourcesUpgraded(resources.get(SIBLING_TYPE), 45);
+ checkResourcesUpgraded(resources.get(TEST_TYPE), 45);
}
public Expectations getExpectations(Mockery context) throws Exception {
@@ -206,19 +206,24 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
checkNumberOfResources(resources, ROOT_TYPE, 1);
checkNumberOfResources(resources, PARENT_DEP_TYPE, 1);
- checkNumberOfResources(resources, PARENT_TYPE, 2);
- checkResourcesUpgraded(resources.get(PARENT_TYPE), 2);
+ checkResourcesUpgraded(resources.get(PARENT_TYPE), 3);
checkResourcesUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE), 1);
Resource parent0 = findResourceWithOrdinal(PARENT_TYPE, 0);
Resource parent1 = findResourceWithOrdinal(PARENT_TYPE, 1);
-
- Set<Resource> siblingsUnderParent0 = filterResources(parent0.getChildResources(), SIBLING_TYPE);
+ Resource parent2 = findResourceWithOrdinal(PARENT_TYPE, 2);
+
Set<Resource> testsUnderParent0 = filterResources(parent0.getChildResources(), TEST_TYPE);
- Set<Resource> siblingsUnderParent1 = filterResources(parent1.getChildResources(), SIBLING_TYPE);
+ Set<Resource> siblingsUnderParent0 = filterResources(parent0.getChildResources(), SIBLING_TYPE);
Set<Resource> testsUnderParent1 = filterResources(parent1.getChildResources(), TEST_TYPE);
-
+ Set<Resource> siblingsUnderParent1 = filterResources(parent1.getChildResources(), SIBLING_TYPE);
+ Set<Resource> testsUnderParent2 = filterResources(parent2.getChildResources(), TEST_TYPE);
+ Set<Resource> siblingsUnderParent2 = filterResources(parent2.getChildResources(), SIBLING_TYPE);
+
+ //first check for the successful upgrades
+ checkResourcesUpgraded(testsUnderParent2, 15);
+ checkResourcesUpgraded(siblingsUnderParent2, 15);
checkResourcesUpgraded(siblingsUnderParent0, 15);
checkResourcesUpgraded(testsUnderParent1, 15);
@@ -257,10 +262,72 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
}
@Test
- public void testFailureOnDependencies() {
- //TODO implement
- //check that stuff works if there is an upgrade failure on some of the resources
- //in the plugin some "in the middle" of the plugin dep graph
+ public void testFailureOnDependencies() throws Exception {
+ setCurrentServerSideInventory(new FakeServerInventory());
+
+ executeTestWithPlugins(getAllDepsFor(TEST_V1_PLUGIN_NAME, PARENT_SIBLING_V1_PLUGIN_NAME),
+ new AbstractTestPayload(true, Collections.<ResType> emptyList()) {
+ public void test(Map<ResType, Set<Resource>> resourceUpgradeTestResources) {
+ //in here we set up the failures that are going to happen when
+ //the v2 plugins are run
+
+ Resource parent = findResourceWithOrdinal(PARENT_DEP_TYPE, 0);
+ assertNotNull(parent, "Failed to find the parent to setup the failures for.");
+
+ addChildrenToFail(parent, PARENT_TYPE, 0);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+
+ executeTestWithPlugins(getAllDepsFor(TEST_V2_PLUGIN_NAME, PARENT_SIBLING_V2_PLUGIN_NAME),
+ new AbstractTestPayload(false, ALL_TYPES) {
+ public void test(Map<ResType, Set<Resource>> resources) {
+ checkPresenceOfResourceTypes(resources, getExpectedResourceTypes());
+
+ checkNumberOfResources(resources, ROOT_TYPE, 1);
+ checkNumberOfResources(resources, PARENT_DEP_TYPE, 1);
+ checkResourcesUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE), 1);
+
+ //check that the failed resources have the error attached to them
+ //we find the resource instance from the map provided to this method
+ //because that map contains the resources as found on the server-side
+ //(i.e. they include error objects).
+ Resource parent0 = getEqualFrom(resources.get(PARENT_TYPE), findResourceWithOrdinal(PARENT_TYPE, 0));
+ Resource parent1 = getEqualFrom(resources.get(PARENT_TYPE), findResourceWithOrdinal(PARENT_TYPE, 1));
+
+ //v2 plugin discovers 3 resources but because parent0 failed to upgrade,
+ //the discovery shouldn't have occurred leaving us with the 2 already existing resources.
+ checkNumberOfResources(resources, PARENT_TYPE, 2);
+ checkResourceFailedUpgrade(parent0);
+ checkOthersUpgraded(resources.get(PARENT_TYPE), parent0);
+
+ //parent1 upgraded ok, so discovering its children should have executed.
+ //this is v2, so we should find 15 of each.
+ checkResourcesUpgraded(filterResources(parent1.getChildResources(), TEST_TYPE), 15);
+ checkResourcesUpgraded(filterResources(parent1.getChildResources(), SIBLING_TYPE), 15);
+
+ //these shouldn't have been upgraded. in v1 we had 10 resources of TEST_TYPE
+ //and 10 resources of SIBLING_TYPE and that's what we should be seeing
+ //now.
+ checkResourcesNotUpgraded(filterResources(parent0.getChildResources(), TEST_TYPE), 10);
+ checkResourcesNotUpgraded(filterResources(parent0.getChildResources(), SIBLING_TYPE), 10);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
}
@SuppressWarnings("unchecked")
@@ -317,6 +384,22 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
}
}
+ private static void checkResourcesNotUpgraded(Set<Resource> resources, int expectedSize) {
+ assertEquals(resources.size(), expectedSize, "The set of resources has unexpected size.");
+ for(Resource res : resources) {
+ assertFalse(res.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX), "Resource " + res
+ + " seems to be upgraded even though it shouldn't.");
+
+ ResourceContainer rc = PluginContainer.getInstance().getInventoryManager().getResourceContainer(res);
+
+ assertEquals(rc.getResourceComponentState(), ResourceComponentState.STOPPED,
+ "A resource that has not been upgraded due to upgrade error in parent should be stopped.");
+
+ //recurse, since the whole subtree under the failed resource should be not upgraded and stopped.
+ checkResourcesNotUpgraded(res.getChildResources(), res.getChildResources().size());
+ }
+ }
+
private static void checkResourceFailedUpgrade(Resource resource) {
assertFalse(resource.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX), "Resource " + resource
+ " seems to be upgraded even though it shouldn't.");
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/v2/rhq-plugin.xml b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/v2/rhq-plugin.xml
index 3d709b0..0f6671b 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/v2/rhq-plugin.xml
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/v2/rhq-plugin.xml
@@ -21,7 +21,7 @@
</runs-inside>
<plugin-configuration>
- <c:simple-property name="count" default="2" />
+ <c:simple-property name="count" default="3" />
<c:simple-property name="key" default="UPGRADED-test-resource-parent-%n,parent-%p" />
</plugin-configuration>
commit 9533fc2898f18af7262f513049d7261516787f4f
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon Oct 4 14:50:49 2010 +0200
Upgrade even the non-commited resources to prevent duplication of resources in the auto-discovery queue
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index c6f1169..99a0513 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -2650,11 +2650,6 @@ public class InventoryManager extends AgentService implements ContainerService,
}
private void upgradeResource(Resource resource) {
- //only process committed resources
- if (resource.getInventoryStatus() != InventoryStatus.COMMITTED) {
- return;
- }
-
ResourceContainer container = getResourceContainer(resource);
if (container != null) {
if (container.getResourceComponentState() == ResourceComponentState.STARTED) {
@@ -2668,8 +2663,17 @@ public class InventoryManager extends AgentService implements ContainerService,
upgradeResource(child);
}
} else {
- log.error("The resource container for resource [" + resource
- + "] wasn't started during upgrade. This should not happen.");
+ String message = "The resource container for resource [" + resource
+ + "] wasn't started while upgrading.";
+
+ if (resource.getChildResources().isEmpty()) {
+ log.info(message
+ + " If this is the first time the plugin container starts up and has completely empty inventory, you can ignore this message.");
+ } else {
+ log.error(message
+ + " This can potentially cause the discovery to find resources logically equivalent to already "
+ + "existing resources if the corresponding plugins support upgrade for that particular resource type.");
+ }
}
} else {
log.error("Resource container not initialized for resource [" + resource
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
index 39597ee..0dd3459 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/FakeServerInventory.java
@@ -80,8 +80,6 @@ public class FakeServerInventory {
this.failing = failing;
}
- //need to synchronize, because resource upgrade is async and can overlap with
- //resource discovery.
public synchronized CustomAction mergeInventoryReport(final InventoryStatus requiredInventoryStatus) {
return new CustomAction("updateServerSideInventory") {
public Object invoke(Invocation invocation) throws Throwable {
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
index 04858c6..8b966c3 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
@@ -71,7 +71,7 @@ public class ResourceUpgradeTest extends ResourceUpgradeTestBase {
}
@Test
- public void testIgnoreUncommittedResources() throws Exception {
+ public void testIncludeUncommittedResources() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
initialSyncAndDiscovery(InventoryStatus.NEW);
@@ -82,11 +82,12 @@ public class ResourceUpgradeTest extends ResourceUpgradeTestBase {
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
- assertEquals(discoveredResource.getResourceKey(), "resource-key-v1");
- assertEquals(discoveredResource.getName(), "resource-name-v1");
- assertEquals(discoveredResource.getDescription(), "resource-description-v1");
+ assertEquals(discoveredResource.getResourceKey(), "resource-key-v2");
+ assertEquals(discoveredResource.getName(), "resource-name-v2");
+ assertEquals(discoveredResource.getDescription(), "resource-description-v2");
}
+ @SuppressWarnings("unchecked")
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
@@ -95,6 +96,9 @@ public class ResourceUpgradeTest extends ResourceUpgradeTestBase {
between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
+
+ oneOf(getCurrentDiscoveryServerService()).upgradeResources(with(any(Set.class)));
+ will(getCurrentServerSideInventory().upgradeResources());
}
};
}
commit 8ecbe7dec08b0e2e1f86ad8e1e56efd9f651cc7e
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon Oct 4 14:32:55 2010 +0200
code formatting
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
index de52cd8..c6f1169 100644
--- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
+++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/inventory/InventoryManager.java
@@ -242,16 +242,19 @@ public class InventoryManager extends AgentService implements ContainerService,
// inside EmbJopr).
if (configuration.isInsideAgent()) {
// After an initial delay (5s by default), periodically run an availability check (every 1m by default).
- availabilityThreadPoolExecutor.scheduleWithFixedDelay(availabilityExecutor, configuration
- .getAvailabilityScanInitialDelay(), configuration.getAvailabilityScanPeriod(), TimeUnit.SECONDS);
+ availabilityThreadPoolExecutor.scheduleWithFixedDelay(availabilityExecutor,
+ configuration.getAvailabilityScanInitialDelay(), configuration.getAvailabilityScanPeriod(),
+ TimeUnit.SECONDS);
// After an initial delay (10s by default), periodically run a server discovery scan (every 15m by default).
- inventoryThreadPoolExecutor.scheduleWithFixedDelay(serverScanExecutor, configuration
- .getServerDiscoveryInitialDelay(), configuration.getServerDiscoveryPeriod(), TimeUnit.SECONDS);
+ inventoryThreadPoolExecutor.scheduleWithFixedDelay(serverScanExecutor,
+ configuration.getServerDiscoveryInitialDelay(), configuration.getServerDiscoveryPeriod(),
+ TimeUnit.SECONDS);
// After an initial delay (20s by default), periodically run a service discovery scan (every 1d by default).
- inventoryThreadPoolExecutor.scheduleWithFixedDelay(serviceScanExecutor, configuration
- .getServiceDiscoveryInitialDelay(), configuration.getServiceDiscoveryPeriod(), TimeUnit.SECONDS);
+ inventoryThreadPoolExecutor.scheduleWithFixedDelay(serviceScanExecutor,
+ configuration.getServiceDiscoveryInitialDelay(), configuration.getServiceDiscoveryPeriod(),
+ TimeUnit.SECONDS);
}
} finally {
inventoryLock.writeLock().unlock();
@@ -288,22 +291,23 @@ public class InventoryManager extends AgentService implements ContainerService,
*
* @throws Exception if the discovery component threw an exception
*/
- public Set<DiscoveredResourceDetails> invokeDiscoveryComponent(ResourceContainer parentResourceContainer, ResourceDiscoveryComponent component,
- ResourceDiscoveryContext context) throws Exception {
+ public Set<DiscoveredResourceDetails> invokeDiscoveryComponent(ResourceContainer parentResourceContainer,
+ ResourceDiscoveryComponent component, ResourceDiscoveryContext context) throws Exception {
Resource parentResource = parentResourceContainer == null ? null : parentResourceContainer.getResource();
-
+
if (resourceUpgradeDelegate.hasUpgradeFailedInChildren(parentResource, context.getResourceType())) {
- log.debug("Discovery of [" + context.getResourceType() + "] has been disallowed under " + (parentResource == null ? " the platform " : parentResource) +
- " because some of its siblings failed to upgrade.");
+ log.debug("Discovery of [" + context.getResourceType() + "] has been disallowed under "
+ + (parentResource == null ? " the platform " : parentResource)
+ + " because some of its siblings failed to upgrade.");
return null;
}
-
+
long timeout = getDiscoveryComponentTimeout(context.getResourceType());
try {
- ResourceDiscoveryComponent proxy = this.discoveryComponentProxyFactory.getDiscoveryComponentProxy(context
- .getResourceType(), component, timeout);
+ ResourceDiscoveryComponent proxy = this.discoveryComponentProxyFactory.getDiscoveryComponentProxy(
+ context.getResourceType(), component, timeout);
Set<DiscoveredResourceDetails> results = proxy.discoverResources(context);
return results;
} catch (TimeoutException te) {
@@ -335,8 +339,8 @@ public class InventoryManager extends AgentService implements ContainerService,
long timeout = getDiscoveryComponentTimeout(context.getResourceType());
try {
- ManualAddFacet proxy = this.discoveryComponentProxyFactory.getDiscoveryComponentProxy(context
- .getResourceType(), component, timeout, ManualAddFacet.class);
+ ManualAddFacet proxy = this.discoveryComponentProxyFactory.getDiscoveryComponentProxy(
+ context.getResourceType(), component, timeout, ManualAddFacet.class);
DiscoveredResourceDetails result = proxy.discoverResource(pluginConfig, context);
return result;
} catch (TimeoutException te) {
@@ -375,8 +379,8 @@ public class InventoryManager extends AgentService implements ContainerService,
component, timeout, ClassLoaderFacet.class);
ResourceDiscoveryContext discoveryContext = new ResourceDiscoveryContext(resourceType, parentComponent,
- parentResourceContext, SystemInfoFactory.createSystemInfo(), null, null, this.configuration
- .getContainerName(), this.configuration.getPluginContainerDeployment());
+ parentResourceContext, SystemInfoFactory.createSystemInfo(), null, null,
+ this.configuration.getContainerName(), this.configuration.getPluginContainerDeployment());
// Configurations are not immutable, so clone the plugin config, so the plugin will not be able to change the
// actual PC-managed plugin config.
@@ -384,8 +388,7 @@ public class InventoryManager extends AgentService implements ContainerService,
// TODO (ips): Clone the ResourceType too for the same reason.
DiscoveredResourceDetails details = new DiscoveredResourceDetails(resourceType, resource.getResourceKey(),
- resource.getName(), resource.getVersion(), resource.getDescription(), pluginConfigClone,
- null); // TODO: I have a feeling we'll need process info, how to get it??
+ resource.getName(), resource.getVersion(), resource.getDescription(), pluginConfigClone, null); // TODO: I have a feeling we'll need process info, how to get it??
List<URL> results = proxy.getAdditionalClasspathUrls(discoveryContext, details);
@@ -592,7 +595,8 @@ public class InventoryManager extends AgentService implements ContainerService,
@NotNull
// TODO (ips): Perhaps refactor this so that it shares code with AvailablityExecutor.checkInventory().
- public Availability getCurrentAvailability(Resource resource) {
+ public
+ Availability getCurrentAvailability(Resource resource) {
AvailabilityType availType = null; // i.e. UNKNOWN;
ResourceContainer resourceContainer = getResourceContainer(resource);
if (resourceContainer != null) {
@@ -665,8 +669,8 @@ public class InventoryManager extends AgentService implements ContainerService,
ResourceDiscoveryContext<ResourceComponent> discoveryContext = new ResourceDiscoveryContext<ResourceComponent>(
resourceType, parentResourceComponent, parentResourceContainer.getResourceContext(),
SystemInfoFactory.createSystemInfo(), new ArrayList<ProcessScanResult>(0),
- new ArrayList<Configuration>(0), this.configuration.getContainerName(), this.configuration
- .getPluginContainerDeployment());
+ new ArrayList<Configuration>(0), this.configuration.getContainerName(),
+ this.configuration.getPluginContainerDeployment());
// Ask the plugin's discovery component to find the new resource, throwing exceptions if it cannot be
// found at all.
@@ -695,8 +699,8 @@ public class InventoryManager extends AgentService implements ContainerService,
// Ask the plugin's discovery component to find the new resource, throwing exceptions if it cannot be
// found at all.
- Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentResourceContainer, discoveryComponent,
- discoveryContext);
+ Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentResourceContainer,
+ discoveryComponent, discoveryContext);
if ((discoveredResources == null) || discoveredResources.isEmpty()) {
log.info("Plugin Error: During manual add, discovery component method ["
+ discoveryComponent.getClass().getName() + ".discoverResources()] returned "
@@ -850,8 +854,7 @@ public class InventoryManager extends AgentService implements ContainerService,
if ((this.platform != null) && (this.platform.getInventoryStatus() == InventoryStatus.NEW)
&& newPlatformWasDeletedRecently) {
// let's make sure we are registered; its probable that our platform was deleted and we need to re-register
- log
- .info("No committed resources to send in our availability report - the platform/agent was deleted, let's re-register again");
+ log.info("No committed resources to send in our availability report - the platform/agent was deleted, let's re-register again");
registerWithServer();
newPlatformWasDeletedRecently = false; // we've tried to recover from our platform being deleted, let's not do it again
}
@@ -891,8 +894,8 @@ public class InventoryManager extends AgentService implements ContainerService,
log.debug("Availability report content: " + report.toString(log.isTraceEnabled()));
}
- boolean ok = configuration.getServerServices().getDiscoveryServerService().mergeAvailabilityReport(
- report);
+ boolean ok = configuration.getServerServices().getDiscoveryServerService()
+ .mergeAvailabilityReport(report);
if (!ok) {
// I guess I could immediately call executeAvailabilityScanImmediately and pass its results to
// mergeAvailabilityReport again right now, but what happens if we've queued up a bunch of
@@ -955,8 +958,7 @@ public class InventoryManager extends AgentService implements ContainerService,
if ((this.platform != null) && (this.platform.getInventoryStatus() == InventoryStatus.NEW)
&& newPlatformWasDeletedRecently) {
// let's make sure we are registered; its probable that our platform was deleted and we need to re-register
- log
- .info("The inventory report was invalid probably because the platform/Agent was deleted; let's re-register...");
+ log.info("The inventory report was invalid probably because the platform/Agent was deleted; let's re-register...");
registerWithServer();
newPlatformWasDeletedRecently = false; // we've tried to recover from our platform being deleted, let's not do it again
}
@@ -974,8 +976,8 @@ public class InventoryManager extends AgentService implements ContainerService,
if (syncInfo != null) {
synchInventory(syncInfo);
} else {
- purgeObsoleteResources(Collections.<String>emptySet());
-
+ purgeObsoleteResources(Collections.<String> emptySet());
+
//can't live without a platform, but we just deleted it. Let's rediscover it.
discoverPlatform();
}
@@ -1113,7 +1115,7 @@ public class InventoryManager extends AgentService implements ContainerService,
return;
}
boolean scan = removeResourceAndIndicateIfScanIsNeeded(resourceContainer.getResource());
-
+
//only actually schedule the scanning when we are finished with resource upgrade. The resource upgrade
//happens before any scanning infrastructure is established.
if (!resourceUpgradeDelegate.enabled() && scan) {
@@ -1152,8 +1154,8 @@ public class InventoryManager extends AgentService implements ContainerService,
parent.removeChildResource(resource);
}
- PluginContainer.getInstance().getMeasurementManager().unscheduleCollection(
- Collections.singleton(resource.getId()));
+ PluginContainer.getInstance().getMeasurementManager()
+ .unscheduleCollection(Collections.singleton(resource.getId()));
if (this.resourceContainers.remove(resource.getUuid()) == null) {
if (log.isDebugEnabled()) {
@@ -1258,8 +1260,8 @@ public class InventoryManager extends AgentService implements ContainerService,
logMessage.append("description, ");
}
- logMessage.replace(logMessage.length() - 1, logMessage.length(), "to become [").append(
- existingResource.toString()).append("]");
+ logMessage.replace(logMessage.length() - 1, logMessage.length(), "to become [")
+ .append(existingResource.toString()).append("]");
log.info(logMessage.toString());
} else {
@@ -1429,7 +1431,7 @@ public class InventoryManager extends AgentService implements ContainerService,
}
return;
}
-
+
ResourceComponent component = container.getResourceComponent();
// if the component already exists and is started, and the resource's plugin config has not changed, there is
@@ -1490,8 +1492,8 @@ public class InventoryManager extends AgentService implements ContainerService,
log.warn("Cannot give activated resource its discovery component. Cause: " + e);
}
- ConfigurationUtility.normalizeConfiguration(resource.getPluginConfiguration(), type
- .getPluginConfigurationDefinition());
+ ConfigurationUtility.normalizeConfiguration(resource.getPluginConfiguration(),
+ type.getPluginConfigurationDefinition());
ResourceComponent parentComponent = null;
if (resource.getParentResource() != null) {
@@ -1855,8 +1857,7 @@ public class InventoryManager extends AgentService implements ContainerService,
}
} else {
// This is very strange - there are no platform types - we should never be missing the built-in platform plugin.
- log
- .error("Missing platform plugin(s) - falling back to dummy platform impl; this should only occur in tests!");
+ log.error("Missing platform plugin(s) - falling back to dummy platform impl; this should only occur in tests!");
// TODO: Set sysprop (e.g. rhq.test.mode=true) in integration tests,
// and throw a runtime exception here if that sysprop is not set.
return getTestPlatform();
@@ -2049,7 +2050,7 @@ public class InventoryManager extends AgentService implements ContainerService,
public boolean hasUpgradeMergeFailed() {
return resourceUpgradeDelegate.hasUpgradeMergeFailed();
}
-
+
/**
* Always use this before accessing the event listeners because this ensures
* thread safety.
@@ -2176,9 +2177,10 @@ public class InventoryManager extends AgentService implements ContainerService,
try {
ResourceDiscoveryContext context = new ResourceDiscoveryContext(resourceType, parentComponent,
parentResourceContext, SystemInfoFactory.createSystemInfo(), processScanResults,
- Collections.EMPTY_LIST, this.configuration.getContainerName(), this.configuration
- .getPluginContainerDeployment());
- Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentContainer, discoveryComponent, context);
+ Collections.EMPTY_LIST, this.configuration.getContainerName(),
+ this.configuration.getPluginContainerDeployment());
+ Set<DiscoveredResourceDetails> discoveredResources = invokeDiscoveryComponent(parentContainer,
+ discoveryComponent, context);
newResources = new HashSet<Resource>();
if ((discoveredResources != null) && (!discoveredResources.isEmpty())) {
IdentityHashMap<Configuration, DiscoveredResourceDetails> pluginConfigObjects = new IdentityHashMap<Configuration, DiscoveredResourceDetails>();
@@ -2403,8 +2405,8 @@ public class InventoryManager extends AgentService implements ContainerService,
if (log.isDebugEnabled()) {
log.debug("Merging [" + modifiedResourceIds.size() + "] modified Resources into local inventory...");
}
- Set<Resource> modifiedResources = configuration.getServerServices().getDiscoveryServerService().getResources(
- modifiedResourceIds, false);
+ Set<Resource> modifiedResources = configuration.getServerServices().getDiscoveryServerService()
+ .getResources(modifiedResourceIds, false);
syncSchedules(modifiedResources); // RHQ-792, mtime is the indicator that schedules should be sync'ed too
for (Resource modifiedResource : modifiedResources) {
mergeResource(modifiedResource);
@@ -2620,12 +2622,12 @@ public class InventoryManager extends AgentService implements ContainerService,
private void upgradeResources() {
try {
-
+
if (!configuration.isInsideAgent()) {
log.debug("Skipping resource upgrade in embedded mode.");
return;
}
-
+
log.debug("Executing resource upgrade.");
boolean syncResult = handleReport(new InventoryReport(getAgent()), true);
@@ -2635,7 +2637,7 @@ public class InventoryManager extends AgentService implements ContainerService,
}
upgradeResource(getPlatform());
-
+
log.debug("Sending the upgrade requests to the server.");
resourceUpgradeDelegate.sendRequests();
commit 9050f4bfab5114ff31e19cb9c04b2d087dba2bff
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Mon Oct 4 14:04:52 2010 +0200
Adding the test for handling the failure to upgrade some of the resources on the leaf of the plugin dependency graph.
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ForwardingProxy.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ForwardingProxy.java
new file mode 100644
index 0000000..7c7d277
--- /dev/null
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ForwardingProxy.java
@@ -0,0 +1,72 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.pc.upgrade;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+/**
+ * This class provides a simple proxy that just forwards the calls to the
+ * actual object.
+ * <p>
+ * This seemingly pointless behavior is useful when dealing with the classes
+ * loaded in different classloaders.
+ * <p>
+ * The arguments passed to the method invocations of the proxy must unfortunately be "understandable"
+ * both in the "current" classloader and in the context of the classloader that loaded the target object.
+ * I don't know about a generic solution to this problem.
+ * A partial solution would be to serialize the arguments and deserialize them in the context
+ * of the target classloader but that doesn't cut it for non-serializable classes obviously.
+ *
+ * @author Lukas Krejci
+ */
+public class ForwardingProxy {
+
+ private static class ForwardingHandler implements InvocationHandler {
+ private Object target;
+
+ public ForwardingHandler(Object target) {
+ this.target = target;
+ }
+
+ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+ Method targetMethod = findMethodOnTarget(method);
+
+ return targetMethod.invoke(target, args);
+ }
+
+ private Method findMethodOnTarget(Method method) throws SecurityException, NoSuchMethodException {
+ Class<?>[] origParamTypes = method.getParameterTypes();
+
+ return target.getClass().getMethod(method.getName(), origParamTypes);
+ }
+ }
+
+ public static <T> T forward(Object target, Class<T> targetInterface, Class<?>... additionalInterfaces) {
+ Class<?>[] interfaces = new Class<?>[additionalInterfaces.length + 1];
+ interfaces[0] = targetInterface;
+ System.arraycopy(additionalInterfaces, 0, interfaces, 1, additionalInterfaces.length);
+
+ Object proxy = Proxy.newProxyInstance(targetInterface.getClassLoader(), interfaces, new ForwardingHandler(target));
+ return targetInterface.cast(proxy);
+ }
+}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
index 5949b76..7eafafc 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeFailureHandlingTest.java
@@ -20,14 +20,17 @@
package org.rhq.core.pc.upgrade;
import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -36,10 +39,20 @@ import org.jmock.Expectations;
import org.jmock.Mockery;
import org.testng.annotations.Test;
+import org.rhq.core.clientapi.agent.PluginContainerException;
+import org.rhq.core.clientapi.agent.discovery.InvalidPluginConfigurationClientException;
import org.rhq.core.clientapi.server.discovery.InvalidInventoryReportException;
import org.rhq.core.clientapi.server.discovery.InventoryReport;
+import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.ResourceErrorType;
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.pc.PluginContainer;
+import org.rhq.core.pc.inventory.InventoryManager;
+import org.rhq.core.pc.inventory.ResourceContainer;
+import org.rhq.core.pc.inventory.ResourceContainer.ResourceComponentState;
+import org.rhq.core.pc.upgrade.plugins.multi.base.BaseResourceComponentInterface;
import org.rhq.core.pluginapi.upgrade.ResourceUpgradeFacet;
/**
@@ -76,7 +89,7 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
private static final String TEST_V2_PLUGIN_NAME = "/resource-upgrade-test-plugin-multi-test-2.0.0.jar";
private static final String UPGRADED_RESOURCE_KEY_PREFIX = "UPGRADED";
-
+
private static final HashMap<String, List<String>> DEPS;
static {
@@ -100,9 +113,12 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
private static final ResType SIBLING_TYPE = new ResType("TestResourceSibling", "test");
private static final ResType PARENT_TYPE = new ResType("TestResourceParent", "test");
private static final ResType PARENT_DEP_TYPE = new ResType("ParentDependency", "parentdep");
- private static final ResType PARENT_SIBLING_TYPE = new ResType("ParentDepSibling", "parentsibling");
+ private static final ResType PARENT_DEP_SIBLING_TYPE = new ResType("ParentDepSibling", "parentsibling");
private static final ResType ROOT_TYPE = new ResType("Root", "root");
+ private static List<ResType> ALL_TYPES = Arrays.asList(TEST_TYPE, SIBLING_TYPE, PARENT_TYPE, PARENT_DEP_TYPE,
+ PARENT_DEP_SIBLING_TYPE, ROOT_TYPE);
+
protected Collection<String> getRequiredPlugins() {
return Arrays.asList(BASE_PLUGIN_NAME, PARENT_DEP_V1_PLUGIN_NAME, PARENT_DEP_V2_PLUGIN_NAME,
PARENT_SIBLING_V1_PLUGIN_NAME, PARENT_SIBLING_V2_PLUGIN_NAME, ROOT_PLUGIN_NAME, SIBLING_V1_PLUGIN_NAME,
@@ -129,26 +145,20 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
});
//now let's run with v2 plugins and check the layout of the inventory
- executeTestWithPlugins(
- getAllDepsFor(TEST_V2_PLUGIN_NAME, PARENT_SIBLING_V2_PLUGIN_NAME),
- new AbstractTestPayload(false, Arrays.asList(TEST_TYPE, SIBLING_TYPE, PARENT_TYPE, PARENT_DEP_TYPE,
- PARENT_SIBLING_TYPE, ROOT_TYPE)) {
+ executeTestWithPlugins(getAllDepsFor(TEST_V2_PLUGIN_NAME, PARENT_SIBLING_V2_PLUGIN_NAME),
+ new AbstractTestPayload(false, ALL_TYPES) {
public void test(Map<ResType, Set<Resource>> resources) {
checkPresenceOfResourceTypes(resources, getExpectedResourceTypes());
checkNumberOfResources(resources, ROOT_TYPE, 1);
checkNumberOfResources(resources, PARENT_DEP_TYPE, 1);
- checkNumberOfResources(resources, PARENT_SIBLING_TYPE, 1);
- checkNumberOfResources(resources, PARENT_TYPE, 2);
- checkNumberOfResources(resources, SIBLING_TYPE, 30);
- checkNumberOfResources(resources, TEST_TYPE, 30);
-
+
//check that the resources are upgraded
- checkResourcesUpgraded(resources.get(PARENT_SIBLING_TYPE));
- checkResourcesUpgraded(resources.get(PARENT_TYPE));
- checkResourcesUpgraded(resources.get(SIBLING_TYPE));
- checkResourcesUpgraded(resources.get(TEST_TYPE));
+ checkResourcesUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE), 1);
+ checkResourcesUpgraded(resources.get(PARENT_TYPE), 2);
+ checkResourcesUpgraded(resources.get(SIBLING_TYPE), 30);
+ checkResourcesUpgraded(resources.get(TEST_TYPE), 30);
}
public Expectations getExpectations(Mockery context) throws Exception {
@@ -162,10 +172,88 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
}
@Test
- public void testFailureOnLeaf() {
- //TODO implement
- //check that the system behaves correctly if there is an upgrade failure
- //at the leaf node of the plugin dep graph
+ public void testFailureOnLeaf() throws Exception {
+ setCurrentServerSideInventory(new FakeServerInventory());
+
+ executeTestWithPlugins(getAllDepsFor(TEST_V1_PLUGIN_NAME, PARENT_SIBLING_V1_PLUGIN_NAME),
+ new AbstractTestPayload(true, Collections.<ResType> emptyList()) {
+ public void test(Map<ResType, Set<Resource>> resourceUpgradeTestResources) {
+ //in here we set up the failures that are going to happen when
+ //the v2 plugins are run
+
+ Resource parent0 = findResourceWithOrdinal(PARENT_TYPE, 0);
+ assertNotNull(parent0, "Failed to find the parent to setup the failures for.");
+ Resource parent1 = findResourceWithOrdinal(PARENT_TYPE, 1);
+ assertNotNull(parent1, "Failed to find the parent to setup the failures for.");
+
+ addChildrenToFail(parent0, TEST_TYPE, 1, 2);
+ addChildrenToFail(parent1, SIBLING_TYPE, 1);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
+
+ executeTestWithPlugins(getAllDepsFor(TEST_V2_PLUGIN_NAME, PARENT_SIBLING_V2_PLUGIN_NAME),
+ new AbstractTestPayload(false, ALL_TYPES) {
+ public void test(Map<ResType, Set<Resource>> resources) {
+ checkPresenceOfResourceTypes(resources, getExpectedResourceTypes());
+
+ checkNumberOfResources(resources, ROOT_TYPE, 1);
+ checkNumberOfResources(resources, PARENT_DEP_TYPE, 1);
+ checkNumberOfResources(resources, PARENT_TYPE, 2);
+
+ checkResourcesUpgraded(resources.get(PARENT_TYPE), 2);
+ checkResourcesUpgraded(resources.get(PARENT_DEP_SIBLING_TYPE), 1);
+
+ Resource parent0 = findResourceWithOrdinal(PARENT_TYPE, 0);
+ Resource parent1 = findResourceWithOrdinal(PARENT_TYPE, 1);
+
+ Set<Resource> siblingsUnderParent0 = filterResources(parent0.getChildResources(), SIBLING_TYPE);
+ Set<Resource> testsUnderParent0 = filterResources(parent0.getChildResources(), TEST_TYPE);
+ Set<Resource> siblingsUnderParent1 = filterResources(parent1.getChildResources(), SIBLING_TYPE);
+ Set<Resource> testsUnderParent1 = filterResources(parent1.getChildResources(), TEST_TYPE);
+
+ checkResourcesUpgraded(siblingsUnderParent0, 15);
+ checkResourcesUpgraded(testsUnderParent1, 15);
+
+ //there should be no newly discovered sibling resources of the failed ones
+ assertEquals(testsUnderParent0.size(), 10);
+ assertEquals(siblingsUnderParent1.size(), 10);
+
+ //check that the failed resources have the error attached to them
+ //we find the resource instance from the map provided to this method
+ //because that map contains the resources as found on the server-side
+ //(i.e. they include error objects).
+ Resource failedTest1 = getEqualFrom(resources.get(TEST_TYPE),
+ findResourceWithOrdinal(testsUnderParent0, 1));
+ Resource failedTest2 = getEqualFrom(resources.get(TEST_TYPE),
+ findResourceWithOrdinal(testsUnderParent0, 2));
+
+ checkResourceFailedUpgrade(failedTest1);
+ checkResourceFailedUpgrade(failedTest2);
+ checkOthersUpgraded(testsUnderParent0, failedTest1, failedTest2);
+
+ Resource failedSibling = getEqualFrom(resources.get(SIBLING_TYPE),
+ findResourceWithOrdinal(siblingsUnderParent1, 1));
+
+ checkResourceFailedUpgrade(failedSibling);
+ checkOthersUpgraded(siblingsUnderParent1, failedSibling);
+ }
+
+ public Expectations getExpectations(Mockery context) throws Exception {
+ return new Expectations() {
+ {
+ defineDefaultExpectations(this);
+ }
+ };
+ }
+ });
}
@Test
@@ -180,13 +268,14 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
protected void defineDefaultExpectations(Expectations expectations) {
super.defineDefaultExpectations(expectations);
try {
- expectations.allowing(getCurrentDiscoveryServerService())
- .mergeInventoryReport(expectations.with(Expectations.any(InventoryReport.class)));
+ expectations.allowing(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ expectations.with(Expectations.any(InventoryReport.class)));
expectations.will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
- expectations.allowing(getCurrentDiscoveryServerService()).upgradeResources(expectations.with(Expectations.any(Set.class)));
+ expectations.allowing(getCurrentDiscoveryServerService()).upgradeResources(
+ expectations.with(Expectations.any(Set.class)));
expectations.will(getCurrentServerSideInventory().upgradeResources());
-
+
expectations.allowing(getCurrentDiscoveryServerService()).postProcessNewlyCommittedResources(
expectations.with(Expectations.any(Set.class)));
@@ -214,10 +303,112 @@ public class ResourceUpgradeFailureHandlingTest extends ResourceUpgradeTestBase
private static void checkNumberOfResources(Map<ResType, Set<Resource>> resources, ResType type, int count) {
assertEquals(resources.get(type).size(), count, "Unexpected number of " + type + " discovered.");
}
-
- private static void checkResourcesUpgraded(Set<Resource> resources) {
- for(Resource res : resources) {
- assertTrue(res.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX), "Resource " + res + " doesn't seem to be upgraded even though it should.");
+
+ private static void checkResourcesUpgraded(Set<Resource> resources, int expectedSize) {
+ assertEquals(resources.size(), expectedSize, "The set of resources has unexpected size.");
+ for (Resource res : resources) {
+ assertTrue(res.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX), "Resource " + res
+ + " doesn't seem to be upgraded even though it should.");
+
+ ResourceContainer rc = PluginContainer.getInstance().getInventoryManager().getResourceContainer(res);
+
+ assertEquals(rc.getResourceComponentState(), ResourceComponentState.STARTED,
+ "A resource that successfully upgraded should be started.");
+ }
+ }
+
+ private static void checkResourceFailedUpgrade(Resource resource) {
+ assertFalse(resource.getResourceKey().startsWith(UPGRADED_RESOURCE_KEY_PREFIX), "Resource " + resource
+ + " seems to be upgraded even though it shouldn't.");
+ assertTrue(resource.getResourceErrors(ResourceErrorType.UPGRADE).size() == 1,
+ "The failed resource should have an error associated with it.");
+
+ ResourceContainer rc = PluginContainer.getInstance().getInventoryManager().getResourceContainer(resource);
+
+ assertEquals(rc.getResourceComponentState(), ResourceComponentState.STOPPED,
+ "A resource that failed to upgrade should be stopped.");
+ }
+
+ private static void checkOthersUpgraded(Set<Resource> resources, Resource... failedResource) {
+ Set<Resource> others = new HashSet<Resource>(resources);
+ others.removeAll(Arrays.asList(failedResource));
+ checkResourcesUpgraded(others, others.size());
+ }
+
+ private void addChildrenToFail(Resource parent, ResType childResType, int... childrenOrdinals) {
+ InventoryManager inventoryManager = PluginContainer.getInstance().getInventoryManager();
+ ResourceContainer parentContainer = inventoryManager.getResourceContainer(parent);
+ BaseResourceComponentInterface parentComponent = (BaseResourceComponentInterface) parentContainer
+ .getResourceComponent();
+
+ Map<String, Set<Integer>> childrenToFail = new HashMap<String, Set<Integer>>();
+ Set<Integer> ordinals = new HashSet<Integer>();
+ for (int i = 0; i < childrenOrdinals.length; ++i) {
+ ordinals.add(childrenOrdinals[i]);
+ }
+
+ childrenToFail.put(childResType.getResourceTypeName(), ordinals);
+
+ Configuration newPluginConfig = parentComponent.createPluginConfigurationWithMarkedFailures(childrenToFail);
+
+ try {
+ int resourceId = parent.getId();
+ inventoryManager.updatePluginConfiguration(resourceId, newPluginConfig);
+ } catch (InvalidPluginConfigurationClientException e) {
+ fail("Updating plugin configuration failed.", e);
+ } catch (PluginContainerException e) {
+ fail("Updating plugin configuration failed.", e);
+ }
+ }
+
+ private Resource findResourceWithOrdinal(ResType resType, int ordinal) {
+ ResourceType resourceType = PluginContainer.getInstance().getPluginManager().getMetadataManager()
+ .getType(resType.getResourceTypeName(), resType.getResourceTypePluginName());
+
+ InventoryManager inventoryManager = PluginContainer.getInstance().getInventoryManager();
+ Set<Resource> resources = inventoryManager.getResourcesWithType(resourceType);
+
+ return findResourceWithOrdinal(resources, ordinal);
+ }
+
+ private Resource findResourceWithOrdinal(Set<Resource> resources, int ordinal) {
+ for (Resource r : resources) {
+ Configuration pluginConfig = r.getPluginConfiguration();
+ String ordinalString = pluginConfig.getSimpleValue("ordinal", null);
+
+ if (ordinalString != null && Integer.parseInt(ordinalString) == ordinal) {
+ return r;
+ }
+ }
+
+ return null;
+ }
+
+ private Set<Resource> filterResources(Set<Resource> resources, ResType resType) {
+ Set<Resource> ret = new HashSet<Resource>(resources);
+
+ Iterator<Resource> it = ret.iterator();
+
+ while (it.hasNext()) {
+ ResourceType resourceType = it.next().getResourceType();
+
+ if (!resourceType.getName().equals(resType.getResourceTypeName())
+ || !resourceType.getPlugin().equals(resType.getResourceTypePluginName())) {
+
+ it.remove();
+ }
}
+
+ return ret;
+ }
+
+ private static <T> T getEqualFrom(Collection<? extends T> collection, T object) {
+ for (T other : collection) {
+ if (object.equals(other)) {
+ return other;
+ }
+ }
+
+ return null;
}
}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
index d47d00c..04858c6 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/ResourceUpgradeTest.java
@@ -37,12 +37,13 @@ import java.util.Set;
import org.jmock.Expectations;
import org.jmock.Mockery;
+import org.testng.annotations.Test;
+
import org.rhq.core.clientapi.server.discovery.InventoryReport;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.pc.PluginContainer;
import org.rhq.core.pc.inventory.ResourceContainer;
-import org.testng.annotations.Test;
/**
* Test cases for resource upgrade.
@@ -55,234 +56,255 @@ public class ResourceUpgradeTest extends ResourceUpgradeTestBase {
private static final String PLUGIN_V1_FILENAME = "/resource-upgrade-test-plugin-1.0.0.jar";
private static final String PLUGIN_V2_FILENAME = "/resource-upgrade-test-plugin-2.0.0.jar";
private static final String FAILING_PLUGIN_FILE_NAME = "/resource-upgrade-test-plugin-3.0.0.jar";
-
+
private static final String SINGLETON_RESOURCE_TYPE_NAME = "Resource";
private static final String SINGLETON_RESOURCE_TYPE_PLUGIN_NAME = "ResourceUpgradeTest";
- private static final ResType SINGLETON_TYPE = new ResType(SINGLETON_RESOURCE_TYPE_NAME, SINGLETON_RESOURCE_TYPE_PLUGIN_NAME);
-
+ private static final ResType SINGLETON_TYPE = new ResType(SINGLETON_RESOURCE_TYPE_NAME,
+ SINGLETON_RESOURCE_TYPE_PLUGIN_NAME);
+
private static List<ResType> getMyExpectedTypes() {
return Arrays.asList(SINGLETON_TYPE);
}
-
+
protected Collection<String> getRequiredPlugins() {
return Arrays.asList(PLUGIN_V1_FILENAME, PLUGIN_V2_FILENAME, FAILING_PLUGIN_FILE_NAME);
}
-
+
@Test
public void testIgnoreUncommittedResources() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
initialSyncAndDiscovery(InventoryStatus.NEW);
-
- TestPayload testNoChange = new AbstractTestPayload(false, getMyExpectedTypes()) {
+
+ TestPayload testNoChange = new AbstractTestPayload(false, getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> discoveredResources) {
- assertEquals(discoveredResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(discoveredResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
assertEquals(discoveredResource.getResourceKey(), "resource-key-v1");
assertEquals(discoveredResource.getName(), "resource-name-v1");
assertEquals(discoveredResource.getDescription(), "resource-description-v1");
}
-
+
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
defineDefaultExpectations(this);
-
- between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+
+ between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
}
};
}
};
-
+
executeTestWithPlugins(Collections.singleton(PLUGIN_V2_FILENAME), testNoChange);
}
-
+
@Test
public void testUpgradeData() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
upgradeTest(false);
}
-
+
@Test
public void testInventoryReinitializationFromServerDuringUpgrade() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
upgradeTest(true);
}
-
+
@Test
public void testSkipUpgradeWhenServerUnavailable() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
initialSyncAndDiscovery(InventoryStatus.COMMITTED);
-
+
getCurrentServerSideInventory().setFailing(true);
- TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
+ TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> discoveredResources) {
- assertEquals(discoveredResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(discoveredResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
-
+
assertEquals(discoveredResource.getResourceKey(), "resource-key-v1");
assertEquals(discoveredResource.getName(), "resource-name-v1");
assertEquals(discoveredResource.getDescription(), "resource-description-v1");
}
-
+
@SuppressWarnings("unchecked")
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
defineDefaultExpectations(this);
-
- between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+
+ between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
-
+
never(getCurrentDiscoveryServerService()).upgradeResources(with(any(Set.class)));
}
};
}
};
-
+
executeTestWithPlugins(Collections.singleton(PLUGIN_V2_FILENAME), test);
}
-
+
@Test
public void testUpgradeWithPlatformDeletedOnServer() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
initialSyncAndDiscovery(InventoryStatus.COMMITTED);
-
- TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
+
+ TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> discoveredResources) {
- assertEquals(discoveredResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(discoveredResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
-
+
assertEquals(discoveredResource.getResourceKey(), "resource-key-v2");
assertEquals(discoveredResource.getName(), "resource-name-v2");
assertEquals(discoveredResource.getDescription(), "resource-description-v2");
- ResourceContainer container = PluginContainer.getInstance().getInventoryManager().getResourceContainer(discoveredResource);
+ ResourceContainer container = PluginContainer.getInstance().getInventoryManager()
+ .getResourceContainer(discoveredResource);
File dataDir = container.getResourceContext().getDataDirectory();
-
+
File marker = new File(dataDir, "upgrade-succeeded");
-
- assertFalse(marker.exists(), "The upgrade seems to have occured even though there shouldn't have been a resource to upgrade.");
+
+ assertFalse(marker.exists(),
+ "The upgrade seems to have occured even though there shouldn't have been a resource to upgrade.");
}
-
+
@SuppressWarnings("unchecked")
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
defineDefaultExpectations(this);
-
+
//the first merge will be triggered from within the upgrade process and we are
//going to report null sync.
- oneOf(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+ oneOf(getCurrentDiscoveryServerService())
+ .mergeInventoryReport(with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().clearPlatform());
-
+
//the rest of the inventory merges are executed by discoveries, so let's import the
//discovered stuff into the server-side inventory.
- between(1, 3).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+ between(1, 3).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
-
+
never(getCurrentDiscoveryServerService()).upgradeResources(with(any(Set.class)));
}
};
}
};
-
+
executeTestWithPlugins(Collections.singleton(PLUGIN_V2_FILENAME), test);
}
-
+
@Test
public void testUpgradeFailureHandling() throws Exception {
setCurrentServerSideInventory(new FakeServerInventory());
initialSyncAndDiscovery(InventoryStatus.COMMITTED);
-
- TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
+
+ TestPayload test = new AbstractTestPayload(false, getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> resourceUpgradeTestResources) {
- assertEquals(resourceUpgradeTestResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(resourceUpgradeTestResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = resourceUpgradeTestResources.get(SINGLETON_TYPE).iterator().next();
-
- assertTrue(discoveredResource.getResourceErrors().size() > 0, "There should be upgrade errors persisted on the server side.");
-
+
+ assertTrue(discoveredResource.getResourceErrors().size() > 0,
+ "There should be upgrade errors persisted on the server side.");
+
//the discovery of the failed resource mustn't have run
- ResourceContainer container = PluginContainer.getInstance().getInventoryManager().getResourceContainer(discoveredResource);
+ ResourceContainer container = PluginContainer.getInstance().getInventoryManager()
+ .getResourceContainer(discoveredResource);
File dataDir = container.getResourceContext().getDataDirectory();
-
+
File marker = new File(dataDir, "failing-discovery-ran");
-
- assertFalse(marker.exists(), "The discovery of the resource type with a failed upgraded resource must not be executed but it was.");
+
+ assertFalse(marker.exists(),
+ "The discovery of the resource type with a failed upgraded resource must not be executed but it was.");
}
-
+
@SuppressWarnings("unchecked")
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
defineDefaultExpectations(this);
-
- between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+
+ between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
-
+
oneOf(getCurrentDiscoveryServerService()).upgradeResources(with(any(Set.class)));
will(getCurrentServerSideInventory().upgradeResources());
}
};
}
};
-
+
executeTestWithPlugins(Collections.singleton(FAILING_PLUGIN_FILE_NAME), test);
}
-
+
private void initialSyncAndDiscovery(final InventoryStatus requiredInventoryStatus) throws Exception {
cleanDataDir();
- executeTestWithPlugins(Collections.singleton(PLUGIN_V1_FILENAME), new AbstractTestPayload(true, getMyExpectedTypes()) {
+ executeTestWithPlugins(Collections.singleton(PLUGIN_V1_FILENAME), new AbstractTestPayload(true,
+ getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> discoveredResources) {
- assertEquals(discoveredResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(discoveredResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
-
+
assertEquals(discoveredResource.getResourceKey(), "resource-key-v1");
assertEquals(discoveredResource.getName(), "resource-name-v1");
assertEquals(discoveredResource.getDescription(), "resource-description-v1");
}
-
+
public Expectations getExpectations(Mockery context) throws Exception {
return new Expectations() {
{
defineDefaultExpectations(this);
-
- between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+
+ between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(requiredInventoryStatus));
}
};
}
- });
-
+ });
+
}
-
private void upgradeTest(boolean clearInventoryDat) throws Exception {
initialSyncAndDiscovery(InventoryStatus.COMMITTED);
-
- executeTestWithPlugins(Collections.singleton(PLUGIN_V2_FILENAME), new AbstractTestPayload(clearInventoryDat, getMyExpectedTypes()) {
+
+ executeTestWithPlugins(Collections.singleton(PLUGIN_V2_FILENAME), new AbstractTestPayload(clearInventoryDat,
+ getMyExpectedTypes()) {
public void test(Map<ResType, Set<Resource>> discoveredResources) {
- assertEquals(discoveredResources.size(), 1, "Expected single test resource but multiple found.");
-
+ assertEquals(discoveredResources.get(SINGLETON_TYPE).size(), 1,
+ "Expected single test resource but multiple found.");
+
Resource discoveredResource = discoveredResources.get(SINGLETON_TYPE).iterator().next();
-
+
assertEquals(discoveredResource.getResourceKey(), "resource-key-v2");
assertEquals(discoveredResource.getName(), "resource-name-v2");
assertEquals(discoveredResource.getDescription(), "resource-description-v2");
-
- ResourceContainer container = PluginContainer.getInstance().getInventoryManager().getResourceContainer(discoveredResource);
+
+ ResourceContainer container = PluginContainer.getInstance().getInventoryManager()
+ .getResourceContainer(discoveredResource);
File dataDir = container.getResourceContext().getDataDirectory();
-
+
File marker = new File(dataDir, "upgrade-succeeded");
-
- assertTrue(marker.exists(), "The upgrade success marker file wasn't found. This means the upgrade didn't actually run.");
+
+ assertTrue(marker.exists(),
+ "The upgrade success marker file wasn't found. This means the upgrade didn't actually run.");
}
@SuppressWarnings("unchecked")
@@ -290,10 +312,11 @@ public class ResourceUpgradeTest extends ResourceUpgradeTestBase {
return new Expectations() {
{
defineDefaultExpectations(this);
-
- between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(with(any(InventoryReport.class)));
+
+ between(1, 4).of(getCurrentDiscoveryServerService()).mergeInventoryReport(
+ with(any(InventoryReport.class)));
will(getCurrentServerSideInventory().mergeInventoryReport(InventoryStatus.COMMITTED));
-
+
oneOf(getCurrentDiscoveryServerService()).upgradeResources(with(any(Set.class)));
will(getCurrentServerSideInventory().upgradeResources());
}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponent.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponent.java
index c5bbf3a..04d3767 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponent.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponent.java
@@ -19,11 +19,18 @@
package org.rhq.core.pc.upgrade.plugins.multi.base;
-import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.Property;
+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.domain.measurement.AvailabilityType;
import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
import org.rhq.core.pluginapi.inventory.ResourceComponent;
@@ -33,13 +40,11 @@ import org.rhq.core.pluginapi.inventory.ResourceContext;
*
* @author Lukas Krejci
*/
-public class BaseResourceComponent<T extends ResourceComponent> implements ResourceComponent<T> {
+public class BaseResourceComponent<T extends ResourceComponent> implements ResourceComponent<T>, BaseResourceComponentInterface {
private ResourceContext<T> context;
private final Log log = LogFactory.getLog(getClass());
- private Set<Integer> childrenToFailUpgrade;
-
public AvailabilityType getAvailability() {
return AvailabilityType.UP;
}
@@ -57,11 +62,57 @@ public class BaseResourceComponent<T extends ResourceComponent> implements Resou
return context.getPluginConfiguration().getSimple("ordinal").getIntegerValue();
}
- public Set<Integer> getChildrenToFailUpgrade() {
- return childrenToFailUpgrade == null ? Collections.<Integer>emptySet() : childrenToFailUpgrade;
+ public Map<String, Set<Integer>> getChildrenToFailUpgrade() {
+
+ Map<String, Set<Integer>> ret = new HashMap<String, Set<Integer>>();
+
+ Configuration pluginConfig = context.getPluginConfiguration();
+ PropertyList childrenToFail = pluginConfig.getList("childrenToFail");
+
+ if (childrenToFail != null) {
+ for(Property p : childrenToFail.getList()) {
+ PropertyMap entry = (PropertyMap) p;
+
+ String type = entry.getSimpleValue("type", null);
+
+ PropertyList typeList = entry.getList("children");
+
+ if (type != null && typeList != null) {
+ Set<Integer> ordinals = new HashSet<Integer>();
+
+ for(Property pp : typeList.getList()) {
+ ordinals.add(((PropertySimple)pp).getIntegerValue());
+ }
+
+ ret.put(type, ordinals);
+ }
+ }
+ }
+
+ return ret;
}
- public void setChildrenToFailUpgrade(Set<Integer> childrenToFailUpgrade) {
- this.childrenToFailUpgrade = childrenToFailUpgrade;
+ public Configuration createPluginConfigurationWithMarkedFailures(Map<String, Set<Integer>> childrenToFailUpgrade) {
+ Configuration ret = context.getPluginConfiguration().clone();
+ PropertyList list = new PropertyList("childrenToFail");
+
+ for(Map.Entry<String, Set<Integer>> entry : childrenToFailUpgrade.entrySet()) {
+ PropertyMap configEntry = new PropertyMap("childrenInType");
+ configEntry.put(new PropertySimple("type", entry.getKey()));
+
+ PropertyList typeList = new PropertyList("children");
+
+ for(Integer childOrdinal : entry.getValue()) {
+ typeList.add(new PropertySimple("ordinal", childOrdinal));
+ }
+
+ configEntry.put(typeList);
+
+ list.add(configEntry);
+ }
+
+ ret.put(list);
+
+ return ret;
}
}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponentInterface.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponentInterface.java
new file mode 100644
index 0000000..1c9bef0
--- /dev/null
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseResourceComponentInterface.java
@@ -0,0 +1,36 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.pc.upgrade.plugins.multi.base;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.rhq.core.domain.configuration.Configuration;
+
+/**
+ * This is to support proxying to required methods from the tests.
+ *
+ * @author Lukas Krejci
+ */
+public interface BaseResourceComponentInterface {
+
+ Configuration createPluginConfigurationWithMarkedFailures(Map<String, Set<Integer>> childrenToFailUpgrade);
+
+}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
index ec1cb20..5b8af94 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/BaseUpgradingDiscoveryComponent.java
@@ -19,6 +19,8 @@
package org.rhq.core.pc.upgrade.plugins.multi.base;
+import java.util.Set;
+
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.resource.ResourceUpgradeReport;
import org.rhq.core.pluginapi.upgrade.ResourceUpgradeContext;
@@ -41,7 +43,10 @@ public class BaseUpgradingDiscoveryComponent<T extends BaseResourceComponent> ex
boolean fail = Boolean.getBoolean(pluginConfig.getSimpleValue("failUpgrade", "false"));
if (!fail && parent != null) {
- fail = parent.getChildrenToFailUpgrade().contains(Integer.valueOf(ordinal));
+ String typeName = inventoriedResource.getResourceType().getName();
+ Set<Integer> failingOrdinals = parent.getChildrenToFailUpgrade().get(typeName);
+
+ fail = failingOrdinals != null && failingOrdinals.contains(Integer.valueOf(ordinal));
}
if (fail) {
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/NothingDiscoveringDiscoveryComponent.java b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/NothingDiscoveringDiscoveryComponent.java
new file mode 100644
index 0000000..b6189e5
--- /dev/null
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/base/NothingDiscoveringDiscoveryComponent.java
@@ -0,0 +1,42 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.pc.upgrade.plugins.multi.base;
+
+import java.util.Collections;
+import java.util.Set;
+
+import org.rhq.core.pluginapi.inventory.DiscoveredResourceDetails;
+import org.rhq.core.pluginapi.inventory.InvalidPluginConfigurationException;
+import org.rhq.core.pluginapi.inventory.ResourceComponent;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryComponent;
+import org.rhq.core.pluginapi.inventory.ResourceDiscoveryContext;
+
+/**
+ *
+ * @author Lukas Krejci
+ */
+public class NothingDiscoveringDiscoveryComponent<T extends ResourceComponent> implements ResourceDiscoveryComponent<T> {
+
+ public Set<DiscoveredResourceDetails> discoverResources(ResourceDiscoveryContext<T> context)
+ throws InvalidPluginConfigurationException, Exception {
+
+ return Collections.emptySet();
+ }
+}
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling1/rhq-plugin.xml b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling1/rhq-plugin.xml
index d3ea7b7..e3b4f9b 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling1/rhq-plugin.xml
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling1/rhq-plugin.xml
@@ -11,7 +11,7 @@
<depends plugin="base" useClasses="true"/>
- <server name="Bogus" class="BaseDiscoveryComponent">
+ <server name="Bogus" class="BaseDiscoveryComponent" discovery="NothingDiscoveringDiscoveryComponent">
<!-- This service is put in the type hierarchy in the v1/v2 test plugins -->
<service name="TestResourceSibling"
discovery="BaseDiscoveryComponent"
diff --git a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling2/rhq-plugin.xml b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling2/rhq-plugin.xml
index f7f7a2c..e7792b9 100644
--- a/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling2/rhq-plugin.xml
+++ b/modules/core/plugin-container/src/test/java/org/rhq/core/pc/upgrade/plugins/multi/sibling2/rhq-plugin.xml
@@ -10,7 +10,7 @@
<depends plugin="base" useClasses="true"/>
- <server name="Bogus" class="BaseDiscoveryComponent">
+ <server name="Bogus" class="BaseDiscoveryComponent" discovery="NothingDiscoveringDiscoveryComponent">
<!-- This service is put in the type hierarchy in the v1/v2 test plugins -->
<service name="TestResourceSibling"
discovery="BaseUpgradingDiscoveryComponent"
13 years, 8 months
[rhq] Branch 'perftest' - 36 commits - .classpath modules/core modules/enterprise
by Heiko W. Rupp
.classpath | 2
modules/core/dbutils/pom.xml | 2
modules/core/dbutils/src/main/scripts/dbsetup-build.xml | 2
modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml | 19
modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml | 19
modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml | 5
modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 16
modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java | 16
modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java | 15
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java | 23
modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java | 51 +
modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java | 26
modules/core/domain/src/main/java/org/rhq/core/domain/util/StringUtils.java | 44 -
modules/core/domain/src/test/java/org/rhq/core/domain/util/StringUtilsTest.java | 47 +
modules/enterprise/gui/coregui/pom.xml | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml | 44 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 57 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java | 33 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java | 102 +++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewConditionEditor.java | 39 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 229 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java | 133 ++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java | 20
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java | 75 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java | 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 218 +++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeEvent.java | 59 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeListener.java | 30 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java | 27
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/AbstractWizard.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java | 24
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java | 65 --
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java | 175 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java | 74 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java | 78 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java | 136 ++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java | 293 ++++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java | 129 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java | 74 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java | 103 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java | 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java | 104 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java | 28
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java | 21
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java | 44 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java | 22
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java | 107 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java | 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java | 28
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java | 54 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java | 132 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java | 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java | 65 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 147 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java | 19
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java | 47 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java | 49 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java | 47 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java | 66 +-
modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css | 14
modules/enterprise/server/jar/pom.xml | 7
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java | 26
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java | 36 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java | 17
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 8
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 80 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 9
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java | 77 +-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java | 27
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java | 19
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java | 199 +++---
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java | 70 ++
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml | 29
modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml | 45 +
117 files changed, 3406 insertions(+), 1064 deletions(-)
New commits:
commit f33382c030b0f9d1765ef12892ca2ba964444bb4
Merge: 4802908... ebd4ec6...
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Oct 4 12:12:43 2010 +0200
Merge branch 'master' into perftest
Conflicts:
modules/enterprise/server/jar/pom.xml
diff --cc modules/enterprise/server/jar/pom.xml
index f9c1952,b54dfd8..5c94154
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@@ -402,19 -402,12 +402,26 @@@
</dependency>
<dependency>
+ <groupId>org.rhq.helpers</groupId>
+ <artifactId>perftest-support</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sourceforge.jexcelapi</groupId>
+ <artifactId>jxl</artifactId>
+ <version>2.6.8</version>
+ <scope>test</scope>
+ </dependency>
+
++ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
-
++
</dependencies>
<build>
commit ebd4ec6f3c0ec9232970ee6c58ebdecf16b5b4a2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:59:28 2010 -0400
be able to resize the new notif dialog
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index f707dc1..117fcb0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -284,8 +284,8 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
winModal.setShowModalMask(true);
winModal.setAutoSize(true);
winModal.setAutoCenter(true);
- //winModal.setShowResizer(true);
- //winModal.setCanDragResize(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
winModal.centerInPage();
winModal.addCloseClickHandler(new CloseClickHandler() {
@Override
commit f0b0a15a1804d4606a03af3fb89ccfc0fb5bff91
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:32:53 2010 -0400
add gwt-log to eclipse classpath
diff --git a/.classpath b/.classpath
index 0a567d7..1a1236c 100644
--- a/.classpath
+++ b/.classpath
@@ -252,6 +252,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.0.3/gwt-user-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/com/google/code/gwt-log/gwt-log/3.0.3/gwt-log-3.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
commit 9325dbcc42782c4a89be13acb7243dc08b618ec2
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 1 21:15:08 2010 -0400
work on completing impl of map-of-simples in ConfigurationEditor
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 343a709..fdc2d9c 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
@@ -39,6 +39,7 @@ import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
+import com.smartgwt.client.util.ValueCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
@@ -73,6 +74,8 @@ import com.smartgwt.client.widgets.form.validator.Validator;
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.CellSavedEvent;
+import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
@@ -115,11 +118,13 @@ import org.rhq.core.domain.configuration.definition.constraint.FloatRangeConstra
import org.rhq.core.domain.configuration.definition.constraint.IntegerRangeConstraint;
import org.rhq.core.domain.configuration.definition.constraint.RegexConstraint;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.PropertyGrid;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.CanvasUtility;
+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;
@@ -561,12 +566,12 @@ public class ConfigurationEditor extends LocatableVLayout {
}
private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap,
- PropertyMap propertyMap) {
+ final PropertyMap propertyMap) {
// create the property grid
- PropertyGrid propertyGrid = new PropertyGrid();
+ final PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.getNameField().setName("Name");
propertyGrid.getValuesField().setName("Value");
-
+
// create the editors
Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
TextItem textEditor = new TextItem();
@@ -575,29 +580,123 @@ public class ConfigurationEditor extends LocatableVLayout {
// set the editors and attribute name where to find the record type
propertyGrid.setEditorsMap("fieldType", editorsMap);
- if (propertyMap != null) {
- ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()];
+ if (propertyDefinitionMap != null) {
+ ListGridRecord[] records = new ListGridRecord[propertyDefinitionMap.getPropertyDefinitions().size()];
int i = 0;
- for (Property property : propertyMap.getMap().values()) {
+ // TODO (ips): For open maps, create the records based on props, not propDefs.
+ // TODO (ips): Render unset checkboxes amd descriptions for member props, just as we would for top-level simples.
+ for (PropertyDefinition propDef : propertyDefinitionMap.getPropertyDefinitions().values()) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute("Name", property.getName());
- record.setAttribute("Value", ((PropertySimple) property).getStringValue());
+ String propertyName = propDef.getName();
+ record.setAttribute("Name", propertyName);
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ String value = (prop != null) ? prop.getStringValue() : null;
+ record.setAttribute("Value", value);
record.setAttribute("fieldType", "simpleText");
+ record.setAttribute("readOnly", propDef.isReadOnly());
records[i++] = record;
}
propertyGrid.setData(records);
}
- propertyGrid.draw();
+ VLayout canvas = new VLayout();
+
+ canvas.addMember(propertyGrid);
+
+ // Footer
+ ToolStrip footer = new ToolStrip();
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
+ canvas.addMember(footer);
+
+ // Properties can only be added to or deleted from non-read-only "open" maps.
+ if (propertyDefinitionMap.getPropertyDefinitions().isEmpty() && !propertyDefinitionMap.isReadOnly()) {
+ final IButton deleteButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
+ deleteButton.setDisabled(true);
+ deleteButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ final ListGridRecord[] selectedRecords = propertyGrid.getSelection();
+ String noun = (selectedRecords.length == 1) ? "property" : "properties";
+ String message = "Are you sure you want to delete the selected" + noun + "?";
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ for (ListGridRecord selectedRecord : selectedRecords) {
+ propertyGrid.removeData(selectedRecord);
+ String propertyName = selectedRecord.getAttribute("Name");
+ propertyMap.getMap().remove(propertyName);
+ }
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(deleteButton);
- CanvasItem item = new CanvasItem();
- item.setCanvas(propertyGrid);
- // item.setHeight(500);
- item.setColSpan(3);
- item.setEndRow(true);
- item.setShowTitle(false);
- fields.add(item);
+ propertyGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ int count = propertyGrid.getSelection().length;
+ deleteButton.setDisabled(count < 1);
+ }
+ });
+
+ final IButton newButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "New");
+ newButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.askforValue("Enter the name of the property to be added.", new ValueCallback() {
+ @Override
+ public void execute(String propertyName) {
+ if (propertyMap.get(propertyName) != null) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Cannot add property named '" + propertyName
+ + "', because the set already contains a property with that name.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient)));
+ } else {
+ propertyMap.put(new PropertySimple(propertyName, null));
+
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute("Name", propertyName);
+ record.setAttribute("Value", "");
+ record.setAttribute("fieldType", "simpleText");
+
+ propertyGrid.addData(record);
+ propertyGrid.focus();
+ propertyGrid.enableSpecificEditor(record);
+
+ CoreGUI.getMessageCenter().notify(new Message("Added property to the set.", EnumSet.of(
+ Message.Option.Transient)));
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(newButton);
+ }
+ propertyGrid.addCellSavedHandler(new CellSavedHandler() {
+ @Override
+ public void onCellSaved(CellSavedEvent cellSavedEvent) {
+ Record record = cellSavedEvent.getRecord();
+ String propertyName = record.getAttribute("Name");
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ if (prop == null) {
+ prop = new PropertySimple(propertyName, null);
+ }
+ String value = record.getAttribute("Value");
+ prop.setStringValue(value);
+ }
+ });
+
+ propertyGrid.draw();
+
+ CanvasItem canvasItem = new CanvasItem();
+ canvasItem.setCanvas(canvas);
+ // item.setHeight(500);
+ canvasItem.setColSpan(3);
+ canvasItem.setEndRow(true);
+ canvasItem.setShowTitle(false);
+ fields.add(canvasItem);
}
private void buildListOfMapsField(final String locatorId, ArrayList<FormItem> fields,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
index ee6b7d7..73340fa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
@@ -38,7 +38,6 @@ import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
* @author Dan Mihai Ile
*/
public class PropertyGrid extends ListGrid {
-
/**
* Map to hold the editors
*/
@@ -56,7 +55,7 @@ public class PropertyGrid extends ListGrid {
*/
public PropertyGrid() {
- // create the 2 fields, one for names, other for values
+ // Create the 2 fields - one for names, other for values.
ListGridField nameField = new ListGridField();
nameField.setCanEdit(false);
ListGridField valueField = new ListGridField();
@@ -100,7 +99,7 @@ public class PropertyGrid extends ListGrid {
/**
* Set the name of the attribute from where the row will get the editor name
- * to be used on the {@link Map} from where the rows will get it's editors
+ * to be used on the {@link Map} from where the rows will get its editors
* <p/>
* When an edit starts the {@link PropertyGrid} will retrieve the key of the
* editor form the row's attributes and use that key on the map to get the
@@ -120,8 +119,9 @@ public class PropertyGrid extends ListGrid {
*
* @param record the record
*/
- private void enableSpecificEditor(Record record) {
- if (editorsMap != null) {
+ public void enableSpecificEditor(Record record) {
+ boolean readOnly = record.getAttributeAsBoolean("readOnly");
+ if (editorsMap != null && !readOnly) {
String attribute = record.getAttribute(valueFieldAttribute);
if (editorsMap.containsKey(attribute)) {
FormItem formItem = editorsMap.get(attribute);
@@ -129,5 +129,4 @@ public class PropertyGrid extends ListGrid {
}
}
}
-
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 429ef36..3a0b464 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -39,6 +39,10 @@ public class Message {
public enum Severity { Info, Warning, Error, Fatal };
public enum Option { Transient, Sticky, BackgroundJobResult };
+ public Message(String conciseMessage) {
+ this(conciseMessage, (Severity)null);
+ }
+
public Message(String conciseMessage, Severity severity) {
this(conciseMessage, null, severity);
}
@@ -46,7 +50,11 @@ public class Message {
public Message(String conciseMessage, String detailedMessage) {
this(conciseMessage, detailedMessage, null);
}
-
+
+ public Message(String conciseMessage, EnumSet<Option> options) {
+ this(conciseMessage, null, options);
+ }
+
public Message(String conciseMessage, String detailedMessage, Severity severity) {
this(conciseMessage, detailedMessage, severity, null);
}
commit 614e969e489795a4408f23e474507f174c95fdf2
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 18:00:25 2010 -0400
Reverting a change made in 6415ed10e3b0d967b712a7be0aa0a3fcf4ce95cb, it
breaks rendering of single-element paths (like "#Bundles or #Reports).
The BookmarkableView's renderView needs to be invoked.
I didn't see any ill effect of adding this back in, so I'm not sure of the
intent of the original change. May need more work.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index e9b7788..cf9e470 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -304,12 +304,19 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
}
if (this.currentCanvas instanceof BookmarkableView) {
- viewPath.next();
- if (!viewPath.isEnd()) {
- ((BookmarkableView) this.currentCanvas).renderView(viewPath);
- }
+ ((BookmarkableView) this.currentCanvas).renderView(viewPath.next());
}
+ // reverting this is as it breaks rendering of single-element paths (like "#Bundles or
+ // #Reports. the BookmarkableView's renderView needs to be invoked.
+ //
+ //if (this.currentCanvas instanceof BookmarkableView) {
+ // viewPath.next();
+ // if (!viewPath.isEnd()) {
+ // ((BookmarkableView) this.currentCanvas).renderView(viewPath);
+ // }
+ //}
+
refreshBreadCrumbTrail();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
index fb382fa..4dc2182 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
@@ -45,6 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.Breadcrumb;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewId;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.bundle.BundleTopView;
import org.rhq.enterprise.gui.coregui.client.bundle.deploy.BundleDeployWizard;
import org.rhq.enterprise.gui.coregui.client.bundle.deployment.BundleDeploymentView;
import org.rhq.enterprise.gui.coregui.client.bundle.destination.BundleDestinationListView;
@@ -98,7 +99,7 @@ public class BundleView extends LocatableVLayout implements BookmarkableView {
this.bundle = bundle;
- addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", "Bundles"));
+ addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", BundleTopView.VIEW_ID));
headerLabel = new HeaderLabel("subsystems/bundle/Bundle_24.png", bundle.getName());
commit 53a86e032a7df9e9c35bb50c9bde6fca72c722aa
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work
- support for locked nodes
- support for autogroups for non-inventory managers. Now that AGs are
backed by compat groups it's necessary for non-inv-managers
to be able to create and access the private groups that they own. Private
groups (aka subject-owned groups) are new, they are basically groups
that are tagged with the creating subjectId. Those groups can be
created (via a new slsb call) and fetched (via a new ResourceGroupCriteria
filter) w/o inventory manager perms.
- note: i had to move rhq_subject to auth-schema from authz-schema and
slightly change the dbsetup order to make it ok for rhq_resource_group to
reference rhq_subject.
- schema spec bumped to 2.97
- added ResourceLineageComposite to combine Resource and locked/viewable
info.
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 c06c636..d6cfdba 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
@@ -628,6 +628,7 @@ public class ResourceTreeView extends LocatableVLayout {
}
if (!root.equals(ResourceTreeView.this.rootResource)) {
+
if (treeGrid != null) {
treeGrid.destroy();
}
commit 4d9fbbc3af633a1e59f5148edcb6bab040d618c0
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 18:59:21 2010 -0400
create the catch-all simple notif sender config editor
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
index 357943f..5b8b0b4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
@@ -37,9 +37,41 @@ public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
private Configuration configuration;
private Configuration extraConfiguration;
+ private final String sender;
- public AbstractNotificationSenderForm(String locatorId) {
+ public AbstractNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
super(locatorId);
+
+ this.sender = sender;
+
+ if (notif != null) {
+ // make our own deep copies of the configs so we can throw them away without
+ // affecting the actual notif in case the user clicks cancel
+ Configuration notifConfig = notif.getConfiguration();
+ Configuration notifExtraConfig = notif.getExtraConfiguration();
+
+ if (notifConfig != null) {
+ configuration = notifConfig.deepCopy(true);
+ } else {
+ configuration = new Configuration(); // must not be null
+ }
+ if (notifExtraConfig != null) {
+ extraConfiguration = notifExtraConfig.deepCopy(true);
+ } else {
+ extraConfiguration = null; // allowed to be null
+ }
+ } else {
+ configuration = new Configuration();
+ extraConfiguration = null;
+ }
+ }
+
+ /**
+ * The name of the alert sender that is to be configured.
+ * @return the sender name
+ */
+ public String getSender() {
+ return sender;
}
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 92d8f75..390357c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -197,11 +197,33 @@ public class NewNotificationEditor extends LocatableDynamicForm {
if (oldCanvas != null) {
oldCanvas.markForDestroy();
}
-
- // TODO: need to create different forms for different types of senders
- SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender));
+ AbstractNotificationSenderForm newCanvas = createNotificationSenderForm(newAlertSender);
senderCanvasItem.setCanvas(newCanvas);
-
markForRedraw();
}
+
+ private AbstractNotificationSenderForm createNotificationSenderForm(String sender) {
+ String newLocatorId = extendLocatorId(sender);
+ AbstractNotificationSenderForm newCanvas;
+
+ // NOTE: today there is no way for an alert server plugin developer
+ // to be able to provide us with a custom UI component to render (like we used to be able
+ // to do when the ui was implemented in JSF and the server plugin can give us a JSF snippet).
+ // We have to hard code the names of the "special" plugins that require special UIs which
+ // are necessary to build the sender configuration for these special alert senders.
+ // For those that want to write their own custom alert plugins, you are restricted to
+ // using configuration definitions as the only way to configure the sender.
+ if ("System Users".equals(sender)) {
+ newCanvas = null; // TODO
+ } else if ("System Roles".equals(sender)) {
+ newCanvas = null; // TODO
+ } else if ("Resource Operations".equals(sender)) {
+ newCanvas = null; // TODO
+ } else {
+ // catch all - all other senders are assumed to just have simple configuration definition
+ // that can be used by our configuration editor UI component to ask for config values.
+ newCanvas = new SimpleNotificationSenderForm(newLocatorId, notificationToEdit, sender);
+ }
+ return newCanvas;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
index a70bd82..4a16380 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
@@ -23,8 +23,15 @@
package org.rhq.enterprise.gui.coregui.client.alert.definitions;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.Label;
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+
/**
* This notification form will be used for most alert senders since most alert senders
* only need to be given a simple set of configuration properties where the user
@@ -34,14 +41,35 @@ import com.smartgwt.client.widgets.Label;
*/
public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
- public SimpleNotificationSenderForm(String locatorId) {
- super(locatorId);
+ public SimpleNotificationSenderForm(String locatorId, AlertNotification notif, String sender) {
+ super(locatorId, notif, sender);
}
@Override
- protected void onInit() {
- super.onInit();
- // TODO add config editor
- addMember(new Label("simple form : " + getLocatorId()));
+ protected void onDraw() {
+ super.onDraw();
+
+ GWTServiceLookup.getAlertDefinitionService().getConfigurationDefinitionForSender(getSender(),
+ new AsyncCallback<ConfigurationDefinition>() {
+ @Override
+ public void onSuccess(ConfigurationDefinition configDef) {
+ ConfigurationEditor configEditor = new ConfigurationEditor(extendLocatorId("configEditor"),
+ configDef, getConfiguration());
+ configEditor.setHeight(500);
+ configEditor.setWidth(500);
+ addMember(configEditor);
+ markForRedraw();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ String errMsg = "Cannot get alert sender configuration definition";
+ CoreGUI.getErrorHandler().handleError(errMsg, caught);
+ Label label = new Label(errMsg);
+ label.setIcon("[SKIN]/Dialog/error.png");
+ addMember(label);
+ markForRedraw();
+ }
+ });
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
index ee93aed..ceb427e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
@@ -22,6 +22,7 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.util.PageList;
@@ -43,4 +44,6 @@ public interface AlertDefinitionGWTService extends RemoteService {
String[] getAlertNotificationConfigurationPreview(AlertNotification[] notifs) throws Exception;
String[] getAllAlertSenders() throws Exception;
+
+ ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception;
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
index b906473..ada48ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.exception.ThrowableUtil;
@@ -122,4 +123,15 @@ public class AlertDefinitionGWTServiceImpl extends AbstractGWTServiceImpl implem
throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
+
+ @Override
+ public ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception {
+ try {
+ ConfigurationDefinition results = alertNotifManager.getConfigurationDefinitionForSender(sender);
+ return SerialUtility.prepare(results, "getConfigurationDefinitionForSender");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
}
\ No newline at end of file
commit 54400ac63137b081d50b7bdac7419b44e9ab2dbc
Merge: 9cfec33... cd224c2...
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 16:48:03 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit cd224c2d8b3c2a2ed53d5b66ec4bbdb66b404a41
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 14:33:01 2010 -0400
start building framework for the different forms needed for the different senders
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
new file mode 100644
index 0000000..357943f
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java
@@ -0,0 +1,70 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Superclass to all alert senders' forms. Instances of this class
+ * are displayed when switching the drop-down option menu selecting
+ * a specific sender.
+ *
+ * @author John Mazzitelli
+ */
+public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
+
+ private Configuration configuration;
+ private Configuration extraConfiguration;
+
+ public AbstractNotificationSenderForm(String locatorId) {
+ super(locatorId);
+ }
+
+ /**
+ * The {@link AlertNotification#getConfiguration()} for the new alert definition notification.
+ *
+ * @return the configuration
+ */
+ public Configuration getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(Configuration configuration) {
+ this.configuration = configuration;
+ }
+
+ /**
+ * The {@link AlertNotification#getExtraConfiguration()} for the new alert definition notification.
+ *
+ * @return the extra configuration
+ */
+ public Configuration getExtraConfiguration() {
+ return extraConfiguration;
+ }
+
+ public void setExtraConfiguration(Configuration extraConfiguration) {
+ this.extraConfiguration = extraConfiguration;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 5da3c43..92d8f75 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -28,12 +28,14 @@ import java.util.LinkedHashMap;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
-import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.FormItemIfFunction;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
@@ -54,6 +56,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
private final Runnable closeFunction; // this is called after a button is pressed and the editor should close
private SelectItem notificationSenderSelectItem;
+ private CanvasItem senderCanvasItem;
public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition,
ArrayList<AlertNotification> notifs, AlertNotification notifToEdit, Runnable closeFunc) {
@@ -71,17 +74,30 @@ public class NewNotificationEditor extends LocatableDynamicForm {
setMargin(20);
+ // this is the container that will house the sender-specific form components
+ senderCanvasItem = new CanvasItem();
+ senderCanvasItem.setShowTitle(false);
+ senderCanvasItem.setColSpan(2);
+
notificationSenderSelectItem = new SelectItem("notificationSender", "Notification Sender");
+ notificationSenderSelectItem.setDefaultToFirstOption(true);
+ notificationSenderSelectItem.setWrapTitle(false);
+ notificationSenderSelectItem.setRedrawOnChange(true);
+ notificationSenderSelectItem.setWidth("*");
if (notificationToEdit != null) {
// we were given a notification to edit, you can't change the sender type, its the only option
notificationSenderSelectItem.setDisabled(true);
+ String senderName = notificationToEdit.getSenderName();
LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>(1);
- senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName());
+ senders.put(senderName, senderName);
notificationSenderSelectItem.setValueMap(senders);
+ switchToAlertSender(senderName);
+ senderCanvasItem.setVisible(true);
} else {
notificationSenderSelectItem.setValueMap("Loading...");
notificationSenderSelectItem.setDisabled(true);
+ senderCanvasItem.setVisible(false); // don't show it yet, until we determine what senders exist
// we are creating a new notification, need to provide all senders as options
GWTServiceLookup.getAlertDefinitionService().getAllAlertSenders(new AsyncCallback<String[]>() {
@Override
@@ -94,6 +110,8 @@ public class NewNotificationEditor extends LocatableDynamicForm {
notificationSenderSelectItem.setValueMap(senders);
notificationSenderSelectItem.setDisabled(false);
notificationSenderSelectItem.redraw();
+ switchToAlertSender(result[0]);
+ senderCanvasItem.show();
} else {
CoreGUI.getErrorHandler().handleError("No alert senders available");
}
@@ -106,10 +124,13 @@ public class NewNotificationEditor extends LocatableDynamicForm {
});
}
- notificationSenderSelectItem.setDefaultToFirstOption(true);
- notificationSenderSelectItem.setWrapTitle(false);
- notificationSenderSelectItem.setRedrawOnChange(true);
- notificationSenderSelectItem.setWidth("*");
+ notificationSenderSelectItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ String newAlertSender = event.getValue().toString();
+ switchToAlertSender(newAlertSender);
+ }
+ });
SpacerItem spacer1 = new SpacerItem();
spacer1.setColSpan(2);
@@ -145,7 +166,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
ArrayList<FormItem> formItems = new ArrayList<FormItem>();
formItems.add(notificationSenderSelectItem);
formItems.add(spacer1);
- // TODO put config editor here
+ formItems.add(senderCanvasItem);
formItems.add(spacer2);
formItems.add(ok);
formItems.add(cancel);
@@ -166,20 +187,21 @@ public class NewNotificationEditor extends LocatableDynamicForm {
notif = notificationToEdit;
}
- // notif.setConfiguration(configuration);
- // notif.setExtraConfiguration(extraConfiguration);
+ AbstractNotificationSenderForm senderForm = (AbstractNotificationSenderForm) senderCanvasItem.getCanvas();
+ notif.setConfiguration(senderForm.getConfiguration());
+ notif.setExtraConfiguration(senderForm.getExtraConfiguration());
}
- private class ShowIfSenderFunction implements FormItemIfFunction {
- private final String senderName;
-
- public ShowIfSenderFunction(String senderName) {
- this.senderName = senderName;
+ private void switchToAlertSender(String newAlertSender) {
+ Canvas oldCanvas = senderCanvasItem.getCanvas();
+ if (oldCanvas != null) {
+ oldCanvas.markForDestroy();
}
- public boolean execute(FormItem item, Object value, DynamicForm form) {
- String selectedSenderString = form.getValue("notificationSender").toString();
- return senderName.equals(selectedSenderString);
- }
+ // TODO: need to create different forms for different types of senders
+ SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender));
+ senderCanvasItem.setCanvas(newCanvas);
+
+ markForRedraw();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index bc585ac..f707dc1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -237,7 +237,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
configField.setWidth("75%");
getListGrid().setFields(senderField, configField);
- getListGrid().addDoubleClickHandler(new DoubleClickHandler() {
+ setListGridDoubleClickHandler(new DoubleClickHandler() {
@Override
public void onDoubleClick(DoubleClickEvent event) {
ListGrid listGrid = (ListGrid) event.getSource();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
new file mode 100644
index 0000000..a70bd82
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java
@@ -0,0 +1,47 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import com.smartgwt.client.widgets.Label;
+
+/**
+ * This notification form will be used for most alert senders since most alert senders
+ * only need to be given a simple set of configuration properties where the user
+ * provides values via the normal configuration editor.
+ *
+ * @author John Mazzitelli
+ */
+public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
+
+ public SimpleNotificationSenderForm(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ // TODO add config editor
+ addMember(new Label("simple form : " + getLocatorId()));
+ }
+}
commit 7101d3d1535d107523615a2a7f7d4d56ec1f537e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Oct 1 14:32:00 2010 -0400
provide a way to add a double-click handler to the Table API
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 c933047..f5c9a40 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
@@ -35,6 +35,8 @@ import com.smartgwt.client.widgets.Img;
import com.smartgwt.client.widgets.Label;
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.SelectItem;
@@ -122,6 +124,7 @@ public class Table extends LocatableHLayout {
;
+ private DoubleClickHandler doubleClickHandler;
private List<TableActionInfo> tableActions = new ArrayList<TableActionInfo>();
private boolean tableActionDisableOverride = false;
protected List<Canvas> extraWidgets = new ArrayList<Canvas>();
@@ -259,6 +262,15 @@ public class Table extends LocatableHLayout {
// Now give subclasses a chance to configure the table
configureTable();
+ listGrid.addDoubleClickHandler(new DoubleClickHandler() {
+ @Override
+ public void onDoubleClick(DoubleClickEvent event) {
+ if (doubleClickHandler != null && !getTableActionDisableOverride()) {
+ doubleClickHandler.onDoubleClick(event);
+ }
+ }
+ });
+
setTableInfo(new Label("Total: " + listGrid.getTotalRows()));
// NOTE: It is essential that we wait to hide any excluded fields until after super.onDraw() is called, since
@@ -480,6 +492,10 @@ public class Table extends LocatableHLayout {
tableActions.add(info);
}
+ public void setListGridDoubleClickHandler(DoubleClickHandler handler) {
+ doubleClickHandler = handler;
+ }
+
public void addExtraWidget(Canvas canvas) {
this.extraWidgets.add(canvas);
}
@@ -502,6 +518,9 @@ public class Table extends LocatableHLayout {
* buttons regardless of which rows are selected. This method let's
* you set this override-disable flag.
*
+ * Note: this also effects the double-click handler - if this disable override
+ * is on, the double-click handler is not called.
+ *
* @param disabled if true, all table action buttons will be disabled
* if false, table action buttons will be enabled based on their predefined
* selection enablement rule.
commit ef62478885fcdd851184b31e9d5a94ebad5f7d29
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 1 14:51:33 2010 -0400
integrate gwt-log and convert over all System.out.println's to logging; add test config view (#TestConfig) for testing config editor
diff --git a/modules/enterprise/gui/coregui/pom.xml b/modules/enterprise/gui/coregui/pom.xml
index c8dce21..21dd681 100644
--- a/modules/enterprise/gui/coregui/pom.xml
+++ b/modules/enterprise/gui/coregui/pom.xml
@@ -107,6 +107,12 @@
<version>1.0.0</version>
</dependency>
+ <dependency>
+ <groupId>com.google.code.gwt-log</groupId>
+ <artifactId>gwt-log</artifactId>
+ <version>3.0.3</version>
+ </dependency>
+
<!-- for file uploads -->
<dependency>
<groupId>commons-fileupload</groupId>
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index 8db747c..ed2ce42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -1,5 +1,5 @@
-<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6//EN"
- "http://google-web-toolkit.googlecode.com/svn/releases/1.6/distro-source/c...">
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0//EN"
+ "http://google-web-toolkit.googlecode.com/svn/releases/2.0/distro-source/c...">
<module>
@@ -11,20 +11,45 @@
<inherits name="com.smartgwt.tools.SmartGwtTools"/>
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
-<!--
- <inherits name="com.smartclient.theme.graphite.Graphite"/>
--->
+ <!--
+ <inherits name="com.smartclient.theme.graphite.Graphite"/>
+ -->
<inherits name='ca.nanometrics.gflot.GFlot'/>
<!--
- <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/>
+ <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/>
-->
-<!-- <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator">
+ <!-- ============================ gwt-log ============================= -->
+
+ <!-- For development, a default of 'DEBUG' is recommended. -->
+ <inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG" />
+
+ <!-- For production, most teams prefer to set the default log level to 'OFF'. -->
+ <!--<inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" />-->
+
+ <!--
+ Enable experimental WindowLogger, which logs messages to a separate
+ popup window. There are currently a couple of restrictions:
+
+ 1. When Firefox is configured to open new Windows as new tabs,
+ WindowLogger does not work
+ 2. In hosted mode, the windows are not automatically closed,
+ although you can easily close them manually in the usual way
+ -->
+ <set-property name="log_WindowLogger" value="ENABLED" />
+
+ <!--
+ You probably will want to disable the default `DivLogger` as well:
+ -->
+ <set-property name="log_DivLogger" value="DISABLED" />
+
+ <!--
+ <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator">
<when-type-assignable class="org.rhq.core.domain.util.Recordizable"/>
- </generate-with>-->
-
+ </generate-with>
+ -->
<replace-with class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl">
<when-type-is class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl"/>
@@ -47,6 +72,7 @@
<entry-point class='org.rhq.enterprise.gui.coregui.client.CoreGUI'/>
<entry-point class='org.rhq.enterprise.gui.coregui.client.SearchGUI'/>
+
<servlet path="/AlertGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertGWTServiceImpl"/>
<servlet path="/AlertDefinitionGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl"/>
<servlet path="/AuthorizationGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AuthorizationGWTServiceImpl"/>
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index 34cf23e..e9b7788 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
@@ -45,6 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceT
import org.rhq.enterprise.gui.coregui.client.menu.MenuBarView;
import org.rhq.enterprise.gui.coregui.client.report.ReportTopView;
import org.rhq.enterprise.gui.coregui.client.report.tag.TaggedView;
+import org.rhq.enterprise.gui.coregui.client.test.TestConfigurationView;
import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler;
import org.rhq.enterprise.gui.coregui.client.util.WidgetUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.MessageBar;
@@ -84,7 +86,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public void onModuleLoad() {
String hostPageBaseURL = GWT.getHostPageBaseURL();
if (hostPageBaseURL.indexOf("/coregui/") == -1) {
- System.out.println("Suppressing load of CoreGUI module");
+ Log.info("Suppressing load of CoreGUI module");
return; // suppress loading this module if not using the new GWT app
}
@@ -165,7 +167,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) {
String event = URL.decodeComponent(stringValueChangeEvent.getValue());
- //System.out.println("Handling history event: " + event);
+ com.allen_sauer.gwt.log.client.Log.debug("Handling history event: " + event);
currentPath = event;
currentViewPath = new ViewPath(event);
@@ -208,6 +210,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
canvas = new AlertsView("Alert");
} else if (breadcrumbName.equals(ReportTopView.VIEW_ID)) {
canvas = new ReportTopView("Report");
+ } else if (breadcrumbName.equals(TestConfigurationView.VIEW_ID)) {
+ canvas = new TestConfigurationView("TestConfig");
} else {
canvas = null;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
index bd0aabe..d252fb8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java
@@ -89,7 +89,7 @@ public class DemoCanvas extends Canvas {
configSelectMenu.addItemClickHandler(new ItemClickHandler() {
public void onItemClick(ItemClickEvent itemClickEvent) {
int x = configSelectMenu.getItemNum(itemClickEvent.getItem());
- System.out.println("Loading: " + x);
+ com.allen_sauer.gwt.log.client.Log.info("Loading: " + x);
topTabSet.removeTab(configTab);
switch (x) {
case 0:
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 24ef812..3d79afd 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
@@ -178,7 +178,7 @@ public class LoginView extends Canvas {
ResourceTypeRepository.Cache.getInstance().getResourceTypes((Integer[]) null,
EnumSet.allOf(ResourceTypeRepository.MetadataType.class), new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("Preloaded [" + types.size() + "] resource types");
+ com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] resource types");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
index 2266993..55588e9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java
@@ -41,7 +41,7 @@ public class SearchGUI implements EntryPoint {
public void onModuleLoad() {
if (SearchBar.existsOnPage() == false) {
- System.out.println("Suppressing load of SearchGUI module");
+ com.allen_sauer.gwt.log.client.Log.info("Suppressing load of SearchGUI module");
return;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index 5219213..ecbd719 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -22,6 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
@@ -30,7 +31,6 @@ import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.util.SC;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.SubjectCriteria;
@@ -66,7 +66,7 @@ public class UserSessionManager {
private static Timer sessionTimer = new Timer() {
@Override
public void run() {
- System.out.println("Session Timer Expired");
+ Log.info("Session timer expired.");
new LoginView().showLoginDialog(); // log user out, show login dialog
}
};
@@ -88,7 +88,7 @@ public class UserSessionManager {
try {
b.setCallback(new RequestCallback() {
public void onResponseReceived(final Request request, final Response response) {
- System.out.println("response text = " + response.getText());
+ com.allen_sauer.gwt.log.client.Log.info("response text = " + response.getText());
String sessionIdString = response.getText();
if (sessionIdString != null && sessionIdString.length() > 0) {
@@ -96,20 +96,20 @@ public class UserSessionManager {
final int subjectId = Integer.parseInt(parts[0]);
final String sessionId = parts[1]; // not null
final long lastAccess = Long.parseLong(parts[2]);
- System.out.println("sessionAccess-subjectId: " + subjectId);
- System.out.println("sessionAccess-sessionId: " + sessionId);
- System.out.println("sessionAccess-lastAccess: " + lastAccess);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-subjectId: " + subjectId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-sessionId: " + sessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-lastAccess: " + lastAccess);
String previousSessionId = getPreviousSessionId(); // may be null
- System.out.println("sessionAccess-previousSessionId: " + previousSessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-previousSessionId: " + previousSessionId);
if (previousSessionId == null || previousSessionId.equals(sessionId) == false) {
// persist sessionId if different from previously saved sessionId
- System.out.println("sessionAccess-savingSessionId: " + sessionId);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-savingSessionId: " + sessionId);
saveSessionId(sessionId);
// new sessions get the full 29 minutes to expire
- System.out.println("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT);
sessionTimer.schedule(SESSION_TIMEOUT);
} else {
@@ -124,7 +124,7 @@ public class UserSessionManager {
expiryMillis = SESSION_TIMEOUT; // guarantees maximum is 29 minutes
}
- System.out.println("sessionAccess-reschedulingSessionTimeout: " + expiryMillis);
+ com.allen_sauer.gwt.log.client.Log.info("sessionAccess-reschedulingSessionTimeout: " + expiryMillis);
sessionTimer.schedule((int) expiryMillis);
}
@@ -143,13 +143,13 @@ public class UserSessionManager {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
"UserSessionManager: Failed to load user's subject", caught);
- System.out.println("Failed to load user's subject");
+ com.allen_sauer.gwt.log.client.Log.info("Failed to load user's subject");
new LoginView().showLoginDialog();
}
public void onSuccess(PageList<Subject> result) {
- System.out.println("Found subject");
Subject subject = result.get(0);
+ Log.debug("Found subject [" + subject + "].");
subject.setSessionId(Integer.valueOf(sessionId));
// reset the session subject to the latest, for wrapping in user preferences
@@ -187,7 +187,7 @@ public class UserSessionManager {
@Override
public void onFailure(Throwable caught) {
- SC.say("Unable to determine login status, check server status");
+ Log.error("Unable to determine login status - check Server status.");
}
});
}
@@ -213,7 +213,7 @@ public class UserSessionManager {
// now continue with the rest of the login logic
loggedIn = true;
- System.out.println("Refreshing Session Timer");
+ Log.info("Refreshing session timer...");
sessionTimer.schedule(millis);
}
@@ -223,7 +223,7 @@ public class UserSessionManager {
}
loggedIn = false;
- System.out.println("Destroying Session Timer");
+ Log.info("Destroying session timer...");
sessionTimer.cancel();
// log out the web session on the server-side in a delayed fashion,
@@ -250,7 +250,7 @@ public class UserSessionManager {
}
public static boolean isLoggedIn() {
- //System.out.println("isLoggedIn = " + loggedIn);
+ Log.trace("isLoggedIn = " + loggedIn);
return loggedIn;
}
@@ -272,5 +272,4 @@ public class UserSessionManager {
public static UserPreferences getUserPreferences() {
return userPreferences;
}
-
}
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 61b58b7..a950c34 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
@@ -153,7 +153,7 @@ public class AlertDataSource extends RPCDataSource<Alert> {
public void onSuccess(PageList<Alert> result) {
long fetchTime = System.currentTimeMillis() - start;
- System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
response.setTotalRows(result.getTotalSize());
@@ -284,7 +284,7 @@ public class AlertDataSource extends RPCDataSource<Alert> {
CoreGUI.getMessageCenter().notify(
new Message("Acknowledged [" + alertIds.length + "] alerts", Message.Severity.Info));
- System.out.println("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + ".");
+ com.allen_sauer.gwt.log.client.Log.info("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + ".");
alertsView.refresh();
}
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 d21ab76..ad825a9 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
@@ -96,7 +96,7 @@ public class AlertPortletDataSource extends AlertDataSource {
public void onSuccess(PageList<Alert> result) {
long fetchTime = System.currentTimeMillis() - start;
- System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms");
response.setData(buildRecords(result));
response.setTotalRows(result.size());
processResponse(request.getRequestId(), response);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
index 7da68cd..fa823e3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java
@@ -106,7 +106,7 @@ public class BundleTopView extends LocatableHLayout implements BookmarkableView
if (viewPath.isEnd()) {
if (currentNextPath == null && bundlesListView != null) {
// refresh
- System.out.println("Refreshing BundleTopView");
+ com.allen_sauer.gwt.log.client.Log.info("Refreshing BundleTopView");
bundlesListView.refresh();
} else {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
index c90ca57..bc296cc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java
@@ -33,7 +33,7 @@ public class FullHTMLPane extends HTMLPane {
public FullHTMLPane(String url) {
this();
- //System.out.println("Creating IFrame pane with URL [" + url + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Creating IFrame pane with URL [" + url + "]...");
setContentsURL(url);
}
}
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 eb1e2d2..343a709 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
@@ -241,7 +241,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void onSuccess(Configuration result) {
configuration = result;
- System.out.println("Config retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.info("Config retreived in: " + (System.currentTimeMillis() - start));
reload();
}
});
@@ -250,7 +250,7 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.resourceConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getResourceConfigurationDefinition();
if (definition == null) {
loadingLabel.hide();
@@ -276,7 +276,7 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.pluginConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getPluginConfigurationDefinition();
if (definition == null) {
showError("Connection settings are not supported by this Resource.");
@@ -302,7 +302,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.RAW
|| definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) {
- System.out.println("Loading files view...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading files view...");
Tab tab = new LocatableTab("Files", "Files");
tab.setPane(buildRawPane());
tabSet.addTab(tab);
@@ -310,7 +310,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED
|| definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) {
- System.out.println("Loading properties view...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading properties view...");
Tab tab = new LocatableTab("Properties", "Properties");
tab.setPane(buildStructuredPane());
tabSet.addTab(tab);
@@ -358,10 +358,10 @@ public class ConfigurationEditor extends LocatableVLayout {
fileTree.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
String path = selectionEvent.getRecord().getAttribute("name");
- System.out.println("Getting Path: " + path);
+ com.allen_sauer.gwt.log.client.Log.info("Getting Path: " + path);
rawEditor.setValue(filesMap.get(path).getContents());
rawEditor.redraw();
- System.out.println("Data: " + filesMap.get(path).getContents());
+ com.allen_sauer.gwt.log.client.Log.info("Data: " + filesMap.get(path).getContents());
}
});
@@ -391,7 +391,7 @@ public class ConfigurationEditor extends LocatableVLayout {
}
for (PropertyGroupDefinition definition : definitions) {
- // System.out.println("building: " + definition.getDisplayName());
+ // com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName());
sectionStack.addSection(buildGroupSection(layout.extendLocatorId(definition.getName()), definition));
}
@@ -656,7 +656,7 @@ public class ConfigurationEditor extends LocatableVLayout {
editField.setCanHide(false);
editField.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent recordClickEvent) {
- System.out.println("You want to edit: " + recordClickEvent.getRecord());
+ com.allen_sauer.gwt.log.client.Log.info("You want to edit: " + recordClickEvent.getRecord());
displayMapEditor(locatorId + "_MapEdit", summaryTable, recordClickEvent.getRecord(),
propertyDefinition, propertyList, (PropertyMap) recordClickEvent.getRecord().getAttributeAsObject(
"_RHQ_PROPERTY"));
@@ -678,7 +678,7 @@ public class ConfigurationEditor extends LocatableVLayout {
removeField.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(final RecordClickEvent recordClickEvent) {
- System.out.println("You want to delete: " + recordClickEvent.getRecordNum());
+ com.allen_sauer.gwt.log.client.Log.info("You want to delete: " + recordClickEvent.getRecordNum());
SC.confirm("Are you sure you want to delete this row?", new BooleanCallback() {
public void execute(Boolean aBoolean) {
if (aBoolean) {
@@ -865,7 +865,7 @@ public class ConfigurationEditor extends LocatableVLayout {
Click handlers seem to be turned off for disabled fields... need an alternative
valueItem.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- System.out.println("Click in value field");
+ com.allen_sauer.gwt.log.client.Log.info("Click in value field");
clickEvent.getItem().setDisabled(false);
unsetItem.setValue(false);
@@ -1000,10 +1000,10 @@ public class ConfigurationEditor extends LocatableVLayout {
list.add(finalMap);
ListGridRecord record = buildSummaryRecord(definitions, finalMap);
- System.out.println("here");
+ com.allen_sauer.gwt.log.client.Log.info("here");
try {
summaryTable.addData(record);
- System.out.println("there");
+ com.allen_sauer.gwt.log.client.Log.info("there");
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
index 9e0e480..7136199 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java
@@ -73,7 +73,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(Configuration result) {
configuration = result;
- System.out.println("Got config");
+ com.allen_sauer.gwt.log.client.Log.info("Got config");
reload();
}
});
@@ -85,7 +85,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(ConfigurationDefinition result) {
definition = result;
- System.out.println("Got def");
+ com.allen_sauer.gwt.log.client.Log.info("Got def");
reload();
}
@@ -108,7 +108,7 @@ public class ListGridConfigurationEditor extends VLayout {
sectionStack.setOverflow(Overflow.VISIBLE);
for (PropertyGroupDefinition definition : definitions) {
- System.out.println("building: " + definition.getDisplayName());
+ com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName());
sectionStack.addSection(buildGroupSection(definition));
}
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 f4b3cad..ca5a929 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
@@ -198,7 +198,7 @@ public class DashboardView extends LocatableVLayout {
picker.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
Object v = changedEvent.getValue();
- System.out.println("color chagned to " + v);
+ com.allen_sauer.gwt.log.client.Log.info("color chagned to " + v);
setBackgroundColor(String.valueOf(v));
storedDashboard.getConfiguration().put(new PropertySimple(Dashboard.CFG_BACKGROUND, String.valueOf(v)));
save();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
index 7e0fb8e..422c244 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
@@ -314,7 +314,7 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView
}
}
} else {
- System.out.println("WARN: While rendering DashboardsView tabSet is null.");
+ com.allen_sauer.gwt.log.client.Log.info("WARN: While rendering DashboardsView tabSet is null.");
}
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
index 8a3d355..aad543c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java
@@ -81,7 +81,7 @@ public class PortalLayout extends LocatableHLayout {
colNum++;
}
save();
- System.out.println("Rearranged column indexes");
+ com.allen_sauer.gwt.log.client.Log.info("Rearranged column indexes");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
index a21e4f5..b30714f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java
@@ -96,7 +96,7 @@ public abstract class AbstractMeasurementDataTraitDataSource extends RPCDataSour
public void onSuccess(PageList<MeasurementDataTrait> result) {
long fetchDuration = System.currentTimeMillis() - startTime;
- System.out.println(result.size() + " traits fetched in: " + fetchDuration + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " traits fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
index 08f3473..e1181ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java
@@ -105,7 +105,7 @@ public abstract class AbstractMeasurementScheduleDataSource extends RPCDataSourc
public void onSuccess(PageList<MeasurementSchedule> result) {
long fetchDuration = System.currentTimeMillis() - startTime;
- System.out.println(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms");
+ com.allen_sauer.gwt.log.client.Log.info(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result));
// For paging to work, we have to specify size of full result set.
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 6c9127b..9e2442b 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
@@ -110,7 +110,7 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
public void onSelectionChanged(SelectionEvent selectionEvent) {
if (selectionEvent.getState()) {
Record selectedNode = selectionEvent.getRecord();
- System.out.println("Node selected in tree: " + selectedNode);
+ com.allen_sauer.gwt.log.client.Log.info("Node selected in tree: " + selectedNode);
ResourceType type = (ResourceType) selectedNode.getAttributeAsObject("resourceType");
if (type != null) {
// It's a cluster group node, not a subcategory node or an autoTypeGroup node.
@@ -118,14 +118,14 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka
if (key == null) {
// The root group was selected.
String groupId = selectedNode.getAttribute("id");
- //System.out.println("Selecting group [" + groupId + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting group [" + groupId + "]...");
String viewPath = ResourceGroupTopView.VIEW_ID + "/" + groupId;
String currentViewPath = History.getToken();
if (!currentViewPath.startsWith(viewPath)) {
CoreGUI.goToView(viewPath);
}
} else {
- //System.out.println("Selecting cluster group [" + key + "]...");
+ com.allen_sauer.gwt.log.client.Log.debug("Selecting cluster group [" + key + "]...");
selectClusterGroup(key);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
index ccf8ee3..7bf4903 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java
@@ -65,19 +65,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void enableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView,
- int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
- this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
+ final int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
+ this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
- CoreGUI.getErrorHandler().handleError("Failed to enable collection of metrics "
+ CoreGUI.getErrorHandler().handleError("Failed to enable collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Enabled collection of metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Enabled collection of selected metric" + s + ".",
+ "Enabled collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"].", Message.Severity.Info));
@@ -87,18 +89,20 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void disableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView, int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) {
- this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
+ this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
- CoreGUI.getErrorHandler().handleError("Failed to disable collection of metrics "
+ CoreGUI.getErrorHandler().handleError("Failed to disable collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Disabled collection of metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Disabled collection of selected metric" + s + ".",
+ "Disabled collection of metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"].", Message.Severity.Info));
@@ -109,19 +113,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override
protected void updateSchedules(AbstractMeasurementScheduleListView measurementScheduleListView,
int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames, final long collectionInterval) {
+ final String s = (measurementDefinitionIds.length > 1) ? "s" : "";
this.measurementService.updateSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, collectionInterval,
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable throwable) {
CoreGUI.getErrorHandler().handleError("Failed to set collection interval to " + (collectionInterval / 1000)
- + " seconds for metrics " + measurementDefinitionDisplayNames + " for Resource group with id ["
+ + " seconds for metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id ["
+ resourceGroupId + "].",
throwable);
}
@Override
public void onSuccess(Void aVoid) {
- CoreGUI.getMessageCenter().notify(new Message("Collection interval for metrics "
+ CoreGUI.getMessageCenter().notify(new Message("Updated collection intervals of selected metric" + s + ".",
+ "Collection interval for metric" + s + " "
+ measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId +
"] set to " + (collectionInterval / 1000) + " seconds.", Message.Severity.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 e1bed72..6382fcb 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
@@ -165,7 +165,7 @@ public class ResourceSearchView extends Table {
long start = System.currentTimeMillis();
getListGrid().fetchData(c);
- System.out.println("Loaded in: " + (System.currentTimeMillis() - start));
+ com.allen_sauer.gwt.log.client.Log.info("Loaded in: " + (System.currentTimeMillis() - start));
}
}
});*/
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
index bccf8c5..35eb2d6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java
@@ -133,12 +133,12 @@ public class NewResourceTreeDataSource extends DataSource {
ResourceCriteria criteria = new ResourceCriteria();
if (p == null) {
- System.out.println("DataSourceTree: Loading initial data");
+ com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading initial data");
criteria.addFilterId(rootId);
} else {
- System.out.println("DataSourceTree: Loading " + p);
+ com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading " + p);
criteria.addFilterParentResourceId(Integer.parseInt(p));
}
@@ -319,7 +319,7 @@ public class NewResourceTreeDataSource extends DataSource {
String parentId = resource.getParentResource() == null ? null
: (resource.getParentResource().getId() + "_" + resource.getResourceType().getName());
- // System.out.println(id + " / " + parentId);
+ // com.allen_sauer.gwt.log.client.Log.info(id + " / " + parentId);
setID(id);
setParentID(parentId);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
index bad1ada..da08c04 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java
@@ -124,7 +124,7 @@ public class NewResourceTreeView extends LocatableVLayout {
if (treeGrid.getSelectedRecord() instanceof ResourceTreeDatasource.ResourceTreeNode) {
ResourceTreeDatasource.ResourceTreeNode node = (ResourceTreeDatasource.ResourceTreeNode) treeGrid
.getSelectedRecord();
- System.out.println("Resource selected in tree: " + node.getResource());
+ com.allen_sauer.gwt.log.client.Log.info("Resource selected in tree: " + node.getResource());
String newToken = "Resource/" + node.getResource().getId();
String currentToken = History.getToken();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
index 1c73198..d577c4d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
@@ -107,7 +107,6 @@ public class ResourceTreeDatasource extends DataSource {
case UPDATE:
//executeAdd(lstRec, false);
break;
-
default:
break;
}
@@ -119,12 +118,12 @@ public class ResourceTreeDatasource extends DataSource {
//final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId");
- // System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
+ // com.allen_sauer.gwt.log.client.Log.info("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
ResourceCriteria criteria = new ResourceCriteria();
if (parentResourceId == null) {
- System.out.println("ResourceTreeDatasource: Loading initial data...");
+ com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading initial data...");
// criteria.addFilterId(rootId);
@@ -133,7 +132,7 @@ public class ResourceTreeDatasource extends DataSource {
return;
} else {
- System.out.println("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]...");
+ com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]...");
criteria.addFilterParentResourceId(Integer.parseInt(parentResourceId));
}
@@ -205,14 +204,14 @@ public class ResourceTreeDatasource extends DataSource {
Resource parentResource = resource.getParentResource();
ResourceSubCategory subcategory = type.getSubCategory();
if (subcategory != null) {
- //System.out.println("Processing " + subcategory + "...");
+ com.allen_sauer.gwt.log.client.Log.debug("Processing " + subcategory + "...");
do {
String subcategoryNodeId = SubCategoryTreeNode.idOf(subcategory, parentResource);
if (!subcategoryNodes.containsKey(subcategoryNodeId)) {
SubCategoryTreeNode subcategoryNode = new SubCategoryTreeNode(subcategory,
parentResource);
subcategoryNodes.put(subcategoryNode.getID(), subcategoryNode);
- //System.out.println("Adding " + subcategoryNode + " to tree...");
+ com.allen_sauer.gwt.log.client.Log.debug("Adding " + subcategoryNode + " to tree...");
updatedNodes.add(subcategoryNode);
}
} while ((subcategory = subcategory.getParentSubCategory()) != null);
@@ -221,7 +220,7 @@ public class ResourceTreeDatasource extends DataSource {
if (!type.isSingleton()) {
AutoGroupTreeNode autogroupNode = new AutoGroupTreeNode(resource);
autogroupNodes.put(autogroupNodeId, autogroupNode);
- //System.out.println("Adding " + autogroupNode + " to tree...");
+ com.allen_sauer.gwt.log.client.Log.debug("Adding " + autogroupNode + " to tree...");
updatedNodes.add(autogroupNode);
}
}
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 4cea21b..c06c636 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
@@ -159,7 +159,7 @@ public class ResourceTreeView extends LocatableVLayout {
treeGrid.deselectAllRecords();
}
} else if (selectedRecord instanceof AutoGroupTreeNode) {
- System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
+ com.allen_sauer.gwt.log.client.Log.info("AutoGroup Node selected in tree: " + selectedRecord);
AutoGroupTreeNode agNode = (AutoGroupTreeNode) selectedRecord;
selectedNodeId = agNode.getID();
@@ -173,7 +173,7 @@ public class ResourceTreeView extends LocatableVLayout {
}
});
} else {
- System.out.println("Unhandled Node selected in tree: " + selectedRecord);
+ com.allen_sauer.gwt.log.client.Log.info("Unhandled Node selected in tree: " + selectedRecord);
}
}
}
@@ -628,7 +628,6 @@ public class ResourceTreeView extends LocatableVLayout {
}
if (!root.equals(ResourceTreeView.this.rootResource)) {
-
if (treeGrid != null) {
treeGrid.destroy();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
index 4556da0..116e1ad 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
@@ -118,8 +118,7 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Pro
public void onSuccess(PluginConfigurationUpdate result) {
CoreGUI.getMessageCenter().notify(
new Message("Connection settings updated.",
- "Connection settings updated for Resource [" + resource.getName() + "].",
- Message.Severity.Info));
+ "Connection settings updated for Resource [" + resource.getName() + "]."));
reloadConfiguration();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
index 5d0be9d..e76e2ca 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java
@@ -113,7 +113,7 @@ public class OperationCreateWizard extends AbstractWizard {
}
private void execute() {
- System.out.println("TODO Executed operation!!");
+ com.allen_sauer.gwt.log.client.Log.info("TODO Executed operation!!");
OperationGWTServiceAsync operationService = GWTServiceLookup.getOperationService();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
index cfa51bf..1c01176 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
@@ -109,7 +109,7 @@ public class ResourceTypeRepository {
}
});
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start));
+ // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start));
}
public void loadResourceTypes(final PageList<ResourceGroup> groups, final ResourceTypeLoadedInGroupCallback callback) {
@@ -142,7 +142,7 @@ public class ResourceTypeRepository {
}
});
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start));
+ // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start));
}
public void getResourceTypes(Integer[] resourceTypeIds, final TypesLoadedCallback callback) {
@@ -234,7 +234,7 @@ public class ResourceTypeRepository {
criteria.setPageControl(PageControl.getUnlimitedInstance());
- System.out.println("Loading " + typesNeeded.size()
+ com.allen_sauer.gwt.log.client.Log.info("Loading " + typesNeeded.size()
+ ((metadataTypes != null) ? (" types: " + metadataTypes) : ""));
resourceTypeService.findResourceTypesByCriteria(criteria, new AsyncCallback<PageList<ResourceType>>() {
@@ -313,7 +313,7 @@ public class ResourceTypeRepository {
public void preloadAll() {
getResourceTypes((Integer[]) null, EnumSet.allOf(MetadataType.class), new TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("Preloaded [" + types.size() + "] Resource types.");
+ com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] Resource types.");
}
});
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
index da5b92e..f6e1730 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java
@@ -119,7 +119,7 @@ public class DropDownMenuBarView extends LocatableVLayout {
resourcesMenu.addItem(favoritesMenu);
menu.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- System.out.println("over here");
+ com.allen_sauer.gwt.log.client.Log.info("over here");
favoritesMenu.refresh();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
index 657c4d3..5e6d943 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
@@ -165,7 +165,7 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
- //System.out.println("ChangedEvent: " + changedEvent.getValue());
+ com.allen_sauer.gwt.log.client.Log.debug("ChangedEvent: " + changedEvent.getValue());
Object intermediate = changedEvent.getValue();
if (!(intermediate instanceof Integer)) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
index 47dcded..42c830b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java
@@ -140,7 +140,7 @@ public class SearchBar extends SimplePanel {
}
public SearchBar() {
- System.out.println("Loading SearchBar...");
+ com.allen_sauer.gwt.log.client.Log.info("Loading SearchBar...");
// in the future, will be instantiated directly from a higher-level widget
if (existsOnPage()) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java
new file mode 100644
index 0000000..bfcb322
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java
@@ -0,0 +1,293 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+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.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionEnumeration;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionList;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionMap;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
+import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
+import org.rhq.core.domain.configuration.definition.PropertySimpleType;
+
+/**
+ * A utility class that provides methods for creating a test {@link ConfigurationDefinition} and a
+ * {@link Configuration} that conforms to that definition.
+ *
+ * @author Ian Springer
+ */
+public abstract class TestConfigurationFactory {
+ public static ConfigurationDefinition createConfigurationDefinition() {
+ ConfigurationDefinition configurationDefinition = new ConfigurationDefinition("TestConfig", "a test config");
+ Map<String, PropertyDefinition> propertyDefinitions = new HashMap<String, PropertyDefinition>();
+ configurationDefinition.setPropertyDefinitions(propertyDefinitions);
+
+ PropertyDefinitionSimple simplePropDef;
+
+ simplePropDef = createStringPropDef1();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = createStringPropDef2();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("LongString", "a Long String simple prop", false,
+ PropertySimpleType.LONG_STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Password", "a Password simple prop", false,
+ PropertySimpleType.PASSWORD);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Boolean", "a required Boolean simple prop", true,
+ PropertySimpleType.BOOLEAN);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+ simplePropDef.setRequired(true);
+
+ simplePropDef = createIntegerPropDef();
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("Float", "a Float simple prop", false, PropertySimpleType.FLOAT);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("StringEnum1",
+ "a String enum prop with <=5 items - should be rendered as radio buttons", false,
+ PropertySimpleType.STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ ArrayList<PropertyDefinitionEnumeration> propDefEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ propDefEnums.add(new PropertyDefinitionEnumeration("NY", "NY"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("NJ", "NJ", true));
+ propDefEnums.add(new PropertyDefinitionEnumeration("PA", "PA"));
+ simplePropDef.setEnumeratedValues(propDefEnums, false);
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ simplePropDef = new PropertyDefinitionSimple("StringEnum2",
+ "a String enum prop with >5 items - should be rendered as a popup menu", false, PropertySimpleType.STRING);
+ simplePropDef.setDisplayName(simplePropDef.getName());
+ propDefEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ propDefEnums.add(new PropertyDefinitionEnumeration("red", "red"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("orange", "orange", true));
+ propDefEnums.add(new PropertyDefinitionEnumeration("yellow", "yellow"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("green", "green"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("blue", "blue"));
+ propDefEnums.add(new PropertyDefinitionEnumeration("purple", "purple"));
+ simplePropDef.setEnumeratedValues(propDefEnums, false);
+ propertyDefinitions.put(simplePropDef.getName(), simplePropDef);
+
+ PropertyDefinitionMap mapPropDef = new PropertyDefinitionMap("MapOfSimples", "a map of simples", false);
+ mapPropDef.put(createStringPropDef1());
+ mapPropDef.put(createStringPropDef2());
+ mapPropDef.put(createIntegerPropDef());
+ mapPropDef.setDisplayName(mapPropDef.getName());
+ propertyDefinitions.put(mapPropDef.getName(), mapPropDef);
+
+ PropertyDefinitionMap openMapPropDef = new PropertyDefinitionMap("OpenMapOfSimples", "an open map of simples",
+ false);
+ openMapPropDef.setDisplayName(openMapPropDef.getName());
+ propertyDefinitions.put(openMapPropDef.getName(), openMapPropDef);
+
+ PropertyDefinitionMap readOnlyOpenMapPropDef = new PropertyDefinitionMap("ReadOnlyOpenMapOfSimples",
+ "a read-only open map of simples", false);
+ readOnlyOpenMapPropDef.setDisplayName(readOnlyOpenMapPropDef.getName());
+ readOnlyOpenMapPropDef.setReadOnly(true);
+ propertyDefinitions.put(readOnlyOpenMapPropDef.getName(), readOnlyOpenMapPropDef);
+
+ PropertyDefinitionList listOfSimplesPropDef = new PropertyDefinitionList("ListOfStrings",
+ "another list of Strings", true, new PropertyDefinitionSimple("note", "a note", false,
+ PropertySimpleType.STRING));
+ listOfSimplesPropDef.setDisplayName(listOfSimplesPropDef.getName());
+ propertyDefinitions.put(listOfSimplesPropDef.getName(), listOfSimplesPropDef);
+
+ PropertyDefinitionMap mapInListPropDef =
+ new PropertyDefinitionMap("MapOfSimplesInList", "a map of simples in a list", false);
+ mapInListPropDef.put(createStringPropDef1());
+ mapInListPropDef.put(createStringPropDef2());
+ mapInListPropDef.put(createIntegerPropDef());
+ mapInListPropDef.setDisplayName(mapInListPropDef.getName());
+
+ PropertyDefinitionList listPropDef = new PropertyDefinitionList("ListOfMaps", "a list of maps", true,
+ mapInListPropDef);
+ listPropDef.setDisplayName(listPropDef.getName());
+ propertyDefinitions.put(listPropDef.getName(), listPropDef);
+
+ PropertyDefinitionMap mapInReadOnlyListPropDef =
+ new PropertyDefinitionMap("MapOfSimplesInReadOnlyList", "a map of simples in a list", false);
+ mapInReadOnlyListPropDef.put(createStringPropDef1());
+ mapInReadOnlyListPropDef.put(createStringPropDef2());
+ mapInReadOnlyListPropDef.put(createIntegerPropDef());
+ mapInReadOnlyListPropDef.setDisplayName(mapInReadOnlyListPropDef.getName());
+
+ PropertyDefinitionList readOnlyListPropDef = new PropertyDefinitionList("ReadOnlyListOfMaps",
+ "a read-only list of maps", true, mapInReadOnlyListPropDef);
+ readOnlyListPropDef.setDisplayName(readOnlyListPropDef.getName());
+ readOnlyListPropDef.setReadOnly(true);
+ propertyDefinitions.put(readOnlyListPropDef.getName(), readOnlyListPropDef);
+
+ PropertyGroupDefinition propertyGroupDefinition = new PropertyGroupDefinition("myGroup");
+ propertyGroupDefinition.setDisplayName(propertyGroupDefinition.getName());
+ propertyGroupDefinition.setDescription("this is an example group");
+
+ PropertyDefinitionSimple myString = new PropertyDefinitionSimple("myString1", "my little string", true,
+ PropertySimpleType.STRING);
+ myString.setDisplayName(myString.getName());
+ myString.setSummary(true);
+ propertyDefinitions.put(myString.getName(), myString);
+ myString.setPropertyGroupDefinition(propertyGroupDefinition);
+
+ PropertyDefinitionSimple myString2 = new PropertyDefinitionSimple("myString2", "my other little string", true,
+ PropertySimpleType.STRING);
+ myString2.setDisplayName(myString2.getName());
+ myString2.setSummary(true);
+ propertyDefinitions.put(myString2.getName(), myString2);
+ myString2.setPropertyGroupDefinition(propertyGroupDefinition);
+
+ PropertyGroupDefinition propertyGroupDefinition2 = new PropertyGroupDefinition("myGroup2");
+ propertyGroupDefinition2.setDisplayName(propertyGroupDefinition2.getName());
+ propertyGroupDefinition2.setDescription("this is another example group");
+
+ PropertyDefinitionSimple myString3 = new PropertyDefinitionSimple("myString3", "my third string", true,
+ PropertySimpleType.STRING);
+ myString3.setDisplayName((myString3.getName()));
+ myString3.setSummary(true);
+ propertyDefinitions.put(myString3.getName(), myString3);
+ myString3.setPropertyGroupDefinition(propertyGroupDefinition2);
+
+ PropertyDefinitionSimple enumExample = new PropertyDefinitionSimple("myEnum",
+ "a grouped enum prop with <=5 items", false, PropertySimpleType.STRING);
+ enumExample.setDisplayName(enumExample.getName());
+ ArrayList<PropertyDefinitionEnumeration> myEnums = new ArrayList<PropertyDefinitionEnumeration>();
+ myEnums.add(new PropertyDefinitionEnumeration("Burlington", "Burlington"));
+ myEnums.add(new PropertyDefinitionEnumeration("Camden", "Camden", true));
+ myEnums.add(new PropertyDefinitionEnumeration("Gloucester", "Gloucester"));
+ enumExample.setEnumeratedValues(myEnums, false);
+ propertyDefinitions.put(enumExample.getName(), enumExample);
+ enumExample.setPropertyGroupDefinition(propertyGroupDefinition2);
+
+ return configurationDefinition;
+ }
+
+ public static Configuration createConfiguration() {
+ Configuration configuration = new Configuration();
+ configuration.setNotes("a test config");
+ configuration.setVersion(1);
+
+ configuration.put(new PropertySimple("String1", "blah"));
+ configuration.put(new PropertySimple("String2",
+ "a really, really, really, really, really long value that won't fit in the text input box"));
+ configuration.put(new PropertySimple("LongString", "blah blah blah\nblah blah blah"));
+ configuration.put(new PropertySimple("Password", null));
+ configuration.put(new PropertySimple("Boolean", false));
+ configuration.put(new PropertySimple("Integer", 666));
+ configuration.put(new PropertySimple("Float", Math.PI));
+
+ configuration.put(new PropertySimple("StringEnum1", "PA"));
+ configuration.put(new PropertySimple("StringEnum2", "blue"));
+
+ PropertyMap propMap1 = new PropertyMap("MapOfSimples");
+ propMap1.put(new PropertySimple("String1", "One"));
+ propMap1.put(new PropertySimple("String2", "Two"));
+ propMap1.put(new PropertySimple("Integer", 11));
+ configuration.put(propMap1);
+
+ PropertyMap openPropMap1 = new PropertyMap("OpenMapOfSimples");
+ openPropMap1.put(new PropertySimple("PROCESSOR_ARCHITECTURE", "x86"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_IDENTIFIER", "x86 Family 6 Model 15 Stepping 6, GenuineIntel"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_LEVEL", "6"));
+ openPropMap1.put(new PropertySimple("PROCESSOR_REVISION", "0f06"));
+ configuration.put(openPropMap1);
+
+ PropertyMap openPropMap2 = new PropertyMap("ReadOnlyOpenMapOfSimples");
+ openPropMap2.put(new PropertySimple("ANT_HOME", "C:\\opt\\ant-1.6.5"));
+ openPropMap2.put(new PropertySimple("ANT_OPTS", "-Xms128M -Xmx256M"));
+ configuration.put(openPropMap2);
+
+ configuration.put(new PropertyList("ListOfStrings", new PropertySimple("note", "Do"), new PropertySimple(
+ "note", "Re"), new PropertySimple("note", "Mi"), new PropertySimple("note", "Fa"), new PropertySimple(
+ "note", "So"), new PropertySimple("note", "La"), new PropertySimple("note", "Ti")));
+
+ PropertyMap propMap2 = new PropertyMap("MapOfSimples");
+ propMap2.put(new PropertySimple("String1", "Uno"));
+ propMap2.put(new PropertySimple("String2", "Dos"));
+ propMap2.put(new PropertySimple("Integer", Integer.MIN_VALUE));
+ PropertyMap propMap3 = new PropertyMap("MapOfSimples");
+ propMap3.put(new PropertySimple("String1", "Un"));
+ propMap3.put(new PropertySimple("String2", "Deux"));
+ propMap3.put(new PropertySimple("Integer", Integer.MAX_VALUE));
+ configuration.put(new PropertyList("ListOfMaps", propMap2, propMap3));
+
+ PropertyMap propMap4 = new PropertyMap("MapOfSimples");
+ propMap4.put(new PropertySimple("String1", "A"));
+ propMap4.put(new PropertySimple("String2", "B"));
+ propMap4.put(new PropertySimple("Integer", 999));
+ PropertyMap propMap5 = new PropertyMap("MapOfSimples");
+ propMap5.put(new PropertySimple("String1", "a"));
+ propMap5.put(new PropertySimple("String2", "b"));
+ propMap5.put(new PropertySimple("Integer", 0));
+ configuration.put(new PropertyList("ReadOnlyListOfMaps", propMap4, propMap5));
+
+ configuration.put(new PropertySimple("myString1", "grouped String 1"));
+ configuration.put(new PropertySimple("myString2", "grouped String 2"));
+ configuration.put(new PropertySimple("myString3", "strings are cool"));
+ configuration.put(new PropertySimple("myEnum", "Burlington"));
+
+ return configuration;
+ }
+
+ private static PropertyDefinitionSimple createStringPropDef1() {
+ PropertyDefinitionSimple stringPropDef1;
+ stringPropDef1 = new PropertyDefinitionSimple("String1",
+ "an optional String simple prop", false, PropertySimpleType.STRING);
+ stringPropDef1.setDisplayName(stringPropDef1.getName());
+ return stringPropDef1;
+ }
+
+ private static PropertyDefinitionSimple createStringPropDef2() {
+ PropertyDefinitionSimple stringPropDef2;
+ stringPropDef2 = new PropertyDefinitionSimple("String2",
+ "a read-only String simple prop", false, PropertySimpleType.STRING);
+ stringPropDef2.setDisplayName(stringPropDef2.getName());
+ stringPropDef2.setReadOnly(true);
+ return stringPropDef2;
+ }
+
+ private static PropertyDefinitionSimple createIntegerPropDef() {
+ PropertyDefinitionSimple integerPropDef;
+ integerPropDef = new PropertyDefinitionSimple("Integer",
+ "a required summary Integer simple prop", true, PropertySimpleType.INTEGER);
+ integerPropDef.setDisplayName(integerPropDef.getName());
+ integerPropDef.setSummary(true);
+ return integerPropDef;
+ }
+
+ private TestConfigurationFactory() {
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java
new file mode 100644
index 0000000..0349718
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java
@@ -0,0 +1,129 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.test;
+
+import java.util.EnumSet;
+
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeEvent;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * @author Ian Springer
+ */
+public class TestConfigurationView
+ extends LocatableVLayout implements PropertyValueChangeListener {
+ public static final String VIEW_ID = "TestConfig";
+
+ private ConfigurationEditor editor;
+ private LocatableIButton saveButton;
+ private ConfigurationDefinition configurationDefinition;
+ private Configuration configuration;
+
+ public TestConfigurationView(String locatorId) {
+ super(locatorId);
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+ build();
+ }
+
+ public void build() {
+ setWidth100();
+ setHeight100();
+
+ ToolStrip toolStrip = new ToolStrip();
+ toolStrip.setWidth100();
+
+ toolStrip.addMember(new LayoutSpacer());
+
+ this.saveButton = new LocatableIButton(this.extendLocatorId("Save"), "Save");
+ this.saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ save();
+ }
+ });
+ this.saveButton.disable();
+ toolStrip.addMember(this.saveButton);
+
+ addMember(toolStrip);
+
+ this.configurationDefinition = TestConfigurationFactory.createConfigurationDefinition();
+ this.configuration = TestConfigurationFactory.createConfiguration();
+
+ reloadConfiguration();
+ }
+
+ private void reloadConfiguration() {
+ this.saveButton.disable();
+ if (editor != null) {
+ editor.destroy();
+ removeMember(editor);
+ }
+
+ editor = new ConfigurationEditor(extendLocatorId("Editor"), this.configurationDefinition, this.configuration);
+ editor.setOverflow(Overflow.AUTO);
+ editor.addValidationStateChangeListener(this);
+ addMember(editor);
+ }
+
+ private void save() {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Configuration updated.", "Test configuration updated."));
+ }
+
+ @Override
+ public void propertyValueChanged(PropertyValueChangeEvent event) {
+ MessageCenter messageCenter = CoreGUI.getMessageCenter();
+ Message message;
+ if (event.isValidationStateChanged()) {
+ if (event.getInvalidPropertyNames().isEmpty()) {
+ this.saveButton.enable();
+ message = new Message("All properties now have valid values, so the configuration can now be saved.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient));
+ }
+ else {
+ this.saveButton.disable();
+ message = new Message(
+ "One or more properties have invalid values. The values must be corrected before the configuration can be saved.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ }
+ messageCenter.notify(message);
+ }
+ else {
+ this.saveButton.enable();
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index a717108..2640674 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -56,7 +56,7 @@ public abstract class RPCDataSource<T> extends DataSource {
public RPCDataSource(String name) {
if (name != null) {
- System.out.println("Trying to build DS: " + name);
+ com.allen_sauer.gwt.log.client.Log.info("Trying to build DS: " + name);
setID(name);
}
// TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data
@@ -245,7 +245,7 @@ public abstract class RPCDataSource<T> extends DataSource {
@SuppressWarnings("unchecked")
public static <S> S[] getArrayFilter(DSRequest request, String paramName, Class<S> type) {
- //System.out.println("Fetching array " + paramName + " (" + type + ")");
+ com.allen_sauer.gwt.log.client.Log.debug("Fetching array " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -272,14 +272,14 @@ public abstract class RPCDataSource<T> extends DataSource {
throw new IllegalArgumentException("No support for passing array filters of type " + type);
}
- //System.out.println("Result array = " + resultArray);
+ com.allen_sauer.gwt.log.client.Log.debug("Result array = " + resultArray);
return resultArray;
}
@SuppressWarnings("unchecked")
public static <S> S getFilter(DSRequest request, String paramName, Class<S> type) {
- //System.out.println("Fetching " + paramName + " (" + type + ")");
+ com.allen_sauer.gwt.log.client.Log.debug("Fetching " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -301,7 +301,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
}
- //System.out.println("Result = " + result);
+ com.allen_sauer.gwt.log.client.Log.debug("Result = " + result);
return result;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
index 360fd86..17049a8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java
@@ -38,7 +38,7 @@ public class TreeUtility {
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
- System.out.println("* " + toString(node));
+ com.allen_sauer.gwt.log.client.Log.info("* " + toString(node));
TreeNode[] childNodes = tree.getChildren(node);
for (TreeNode childNode : childNodes) {
printTreeNode(tree, childNode);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
index 5790c70..5714634 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java
@@ -165,7 +165,7 @@ public class WidgetUtility {
indent.append(" ");
}
- System.out.println(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]");
+ com.allen_sauer.gwt.log.client.Log.info(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]");
}
private static List<Widget> getChildren(Widget widget) {
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 8da5ef0..6b356ae 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
@@ -120,6 +120,10 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
label.setWidth(400);
+ // TODO: Create some custom edge images in greed, yellow, red, etc. so we can add nice rounded corners to the
+ // label.
+ //label.setShowEdges(true);
+
String icon = (contents != null) ? SEVERITY_TO_ICON_MAP.get(message.getSeverity()) : 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 d51bc47..1a6968d 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
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.List;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.Timer;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.AnimationEffect;
@@ -158,6 +159,8 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
public void onMessage(final Message message) {
if (!message.isTransient()) {
+ logMessage(message);
+
final Label label = new Label(message.conciseMessage);
label.setMargin(5);
label.setAutoFit(true);
@@ -193,6 +196,25 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
}
}
+ private void logMessage(Message message) {
+ // TODO: Format the message better.
+ String logMessage = message.toString();
+ switch (message.getSeverity()) {
+ case Info:
+ Log.info(logMessage);
+ break;
+ case Warning:
+ Log.warn(logMessage);
+ break;
+ case Error:
+ Log.error(logMessage);
+ break;
+ case Fatal:
+ Log.fatal(logMessage);
+ break;
+ }
+ }
+
private String getSeverityIcon(Message.Severity severity) {
String iconSrc = null;
switch (severity) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
index 2064f63..8ae0364 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
@@ -55,7 +55,7 @@ public class MonitoringRequestCallback implements RequestCallback {
if (STATUS_CODE_OK == response.getStatusCode()) {
RPCManager.getInstance().succeedCall(this);
callback.onResponseReceived(request, response);
- //System.out.println("MonitoringRequestCallback: OK");
+ com.allen_sauer.gwt.log.client.Log.debug("MonitoringRequestCallback: OK");
} else {
RPCManager.getInstance().failCall(this);
callback.onResponseReceived(request, response);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
index 10213f4..3e2e007 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java
@@ -62,7 +62,7 @@ public class RPCManager {
}
public void succeedCall(MonitoringRequestCallback callback) {
- //System.out.println("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms.");
+ com.allen_sauer.gwt.log.client.Log.debug("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms.");
inProgress.remove(callback);
refresh();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index 63b71a0..08d8046 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -102,7 +102,7 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
public RawConfiguration dummy(RawConfiguration config) {
- System.out.println(config.getPath());
+ com.allen_sauer.gwt.log.client.Log.info(config.getPath());
return new RawConfiguration();
// Dummy method for gwt compiler
}
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 7c3acfb..e090640 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
@@ -25,6 +25,8 @@ import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Set;
+import com.allen_sauer.gwt.log.client.Log;
+
import org.rhq.core.domain.resource.Resource;
/**
@@ -37,7 +39,7 @@ public class ObjectFilter {
for (Object object : collection) {
filterFields(object, goodFields);
}
- System.out.println("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
+ com.allen_sauer.gwt.log.client.Log.info("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
return collection;
}
@@ -51,11 +53,11 @@ public class ObjectFilter {
// Only clearing objects, no point in clearing primitives as it
// doesn't save any space on the stream
if (!f.getType().isPrimitive()) {
- // System.out.println("clearing " + f.getName());
+ Log.debug("Clearing " + f.getName() + "...");
f.setAccessible(true);
f.set(object, null);
} else {
- // System.out.println("Can't do " + f.getType());
+ Log.debug("Can't do " + f.getType());
}
}
}
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 14c6f8d..4e14b75 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
@@ -111,7 +111,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
- System.out.println("Loading GWT RPC Services");
+ com.allen_sauer.gwt.log.client.Log.info("Loading GWT RPC Services");
}
public ResourceGWTServiceImpl() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
index c74aa3c..4d6706c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
@@ -26,7 +26,7 @@ public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implement
}
public RawConfiguration dummy(RawConfiguration config) {
- System.out.println(config.getPath());
+ com.allen_sauer.gwt.log.client.Log.info(config.getPath());
return new RawConfiguration();
}
}
\ No newline at end of file
commit 198bfdca2ff0c5f150e2f98a20655a5bde66d247
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Oct 1 13:48:22 2010 -0400
add jxpath to eclipse .classpath
diff --git a/.classpath b/.classpath
index c13d973..0a567d7 100644
--- a/.classpath
+++ b/.classpath
@@ -254,5 +254,6 @@
<classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
<classpathentry kind="output" path="eclipse-classes"/>
</classpath>
commit 374f578bc10335cd4cd93a8800b264ee5dcd5ee2
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Oct 1 13:18:06 2010 -0400
fix all current gwt services to wrap exceptions that are gwt-serializable
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
index a1f47c9..dc7497f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.alert.Alert;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AlertGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
@@ -35,15 +36,27 @@ public class AlertGWTServiceImpl extends AbstractGWTServiceImpl implements Alert
private AlertManagerLocal alertManager = LookupUtil.getAlertManager();
public PageList<Alert> findAlertsByCriteria(AlertCriteria criteria) {
- return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria),
- "AlertService.findAlertsByCriteria");
+ try {
+ return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria),
+ "AlertService.findAlertsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteResourceAlerts(Integer[] alertIds) {
- this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds);
+ try {
+ this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void acknowledgeResourceAlerts(Integer[] alertIds) {
- this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds);
+ try {
+ this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
index 7218061..4b8d73f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java
@@ -22,6 +22,7 @@ import java.util.HashSet;
import java.util.Set;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AuthorizationGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
@@ -32,30 +33,53 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class AuthorizationGWTServiceImpl extends AbstractGWTServiceImpl implements AuthorizationGWTService {
+ private static final long serialVersionUID = 1L;
+
private AuthorizationManagerLocal authorizationManager = LookupUtil.getAuthorizationManager();
public Set<Permission> getExplicitResourcePermissions(int resourceId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions(
- getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions(
+ getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getImplicitResourcePermissions(int resourceId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions(
- getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions(
+ getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getExplicitGroupPermissions(int groupId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions(
- getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions(
+ getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getImplicitGroupPermissions(int groupId) {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions(
- getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions(
+ getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Permission> getExplicitGlobalPermissions() {
- return SerialUtility.prepare(new HashSet<Permission>(authorizationManager
- .getExplicitGlobalPermissions(getSessionSubject())), "AuthorizationManager.getExplicitGlobalPermissions");
+ try {
+ return SerialUtility.prepare(new HashSet<Permission>(authorizationManager
+ .getExplicitGlobalPermissions(getSessionSubject())),
+ "AuthorizationManager.getExplicitGlobalPermissions");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
index cbf72c7..4b636f0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java
@@ -18,10 +18,10 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.measurement.Availability;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AvailabilityGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
@@ -32,15 +32,16 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class AvailabilityGWTServiceImpl extends AbstractGWTServiceImpl implements AvailabilityGWTService {
+ private static final long serialVersionUID = 1L;
private AvailabilityManagerLocal availabilityManager = LookupUtil.getAvailabilityManager();
public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
-
- return SerialUtility.prepare(
- availabilityManager.findAvailabilityForResource(getSessionSubject(), resourceId, pc),
- "AvailabilityService.findAvailabilityForResource"
- );
-
+ try {
+ return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
+ resourceId, pc), "AvailabilityService.findAvailabilityForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
index f3f8323..211735d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java
@@ -38,32 +38,28 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ClusterGWTServiceImpl extends AbstractGWTServiceImpl implements ClusterGWTService {
+ private static final long serialVersionUID = 1L;
private ClusterManagerLocal clusterManager = LookupUtil.getClusterManager();
-
public ResourceGroup createAutoClusterBackingGroup(ClusterKey clusterKey, boolean addResources) {
- return SerialUtility.prepare(
- clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey, addResources),
- "ClusterGWTServiceImpl.createAutoClusterBackingGroup");
+ return SerialUtility.prepare(clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey,
+ addResources), "ClusterGWTServiceImpl.createAutoClusterBackingGroup");
}
public ResourceGroup getAutoClusterBackingGroup(ClusterKey clusterKey) {
- return SerialUtility.prepare(
- clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey),
- "ClusterGWTServiceImpl.getAutoClusterBackingGroup");
+ return SerialUtility.prepare(clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey),
+ "ClusterGWTServiceImpl.getAutoClusterBackingGroup");
}
public List<Resource> getAutoClusterResources(ClusterKey clusterKey) {
- return SerialUtility.prepare(
- clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey),
- "ClusterGWTServiceImpl.getAutoClusterResources");
+ return SerialUtility.prepare(clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey),
+ "ClusterGWTServiceImpl.getAutoClusterResources");
}
public ClusterFlyweight getClusterTree(int groupId) {
- return SerialUtility.prepare(
- clusterManager.getClusterTree(getSessionSubject(), groupId),
- "ClusterGWTServiceImpl.getClusterTree");
+ return SerialUtility.prepare(clusterManager.getClusterTree(getSessionSubject(), groupId),
+ "ClusterGWTServiceImpl.getClusterTree");
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index 487b167..63b71a0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -1,6 +1,5 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.configuration.RawConfiguration;
@@ -9,79 +8,97 @@ import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
-import org.rhq.enterprise.server.configuration.ConfigurationUpdateStillInProgressException;
import org.rhq.enterprise.server.util.LookupUtil;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implements ConfigurationGWTService {
+ private static final long serialVersionUID = 1L;
private ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
public Configuration getPluginConfiguration(int resourceId) {
-
-
- Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId);
-
- return SerialUtility.prepare(configuration, "PluginConfiguration");
+ try {
+ Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId);
+ return SerialUtility.prepare(configuration, "PluginConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public ConfigurationDefinition getPluginConfigurationDefinition(int resourceTypeId) {
-
- ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType(getSessionSubject(), resourceTypeId);
- return SerialUtility.prepare(definition, "PluginDefinition");
+ try {
+ ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType(
+ getSessionSubject(), resourceTypeId);
+ return SerialUtility.prepare(definition, "PluginDefinition");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
public Configuration getResourceConfiguration(int resourceId) {
-
- Configuration configuration = configurationManager.getResourceConfiguration(getSessionSubject(), resourceId);
- return SerialUtility.prepare(configuration, "ResourceConfiguration");
+ try {
+ Configuration configuration = configurationManager
+ .getResourceConfiguration(getSessionSubject(), resourceId);
+ return SerialUtility.prepare(configuration, "ResourceConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public ConfigurationDefinition getResourceConfigurationDefinition(int resourceTypeId) {
-
- ConfigurationDefinition definition = configurationManager.getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId);
- return SerialUtility.prepare(definition, "ResourceDefinition");
+ try {
+ ConfigurationDefinition definition = configurationManager
+ .getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId);
+ return SerialUtility.prepare(definition, "ResourceDefinition");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates(
- Integer resourceId, Long beginDate, Long endDate, boolean suppressOldest, PageControl pc) {
-
- PageList<ResourceConfigurationUpdate> result =
- configurationManager.findResourceConfigurationUpdates(
- getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc);
-
- return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates");
+ public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates(Integer resourceId, Long beginDate,
+ Long endDate, boolean suppressOldest, PageControl pc) {
+ try {
+ PageList<ResourceConfigurationUpdate> result = configurationManager.findResourceConfigurationUpdates(
+ getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc);
+ return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
public ResourceConfigurationUpdate updateResourceConfiguration(int resourceId, Configuration configuration) {
- ResourceConfigurationUpdate update =
- configurationManager.updateResourceConfiguration(getSessionSubject(), resourceId, configuration);
-
- return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration");
+ try {
+ ResourceConfigurationUpdate update = configurationManager.updateResourceConfiguration(getSessionSubject(),
+ resourceId, configuration);
+ return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PluginConfigurationUpdate updatePluginConfiguration(int resourceId, Configuration configuration) {
- PluginConfigurationUpdate update =
- configurationManager.updatePluginConfiguration(getSessionSubject(), resourceId, configuration);
-
- return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration");
+ try {
+ PluginConfigurationUpdate update = configurationManager.updatePluginConfiguration(getSessionSubject(),
+ resourceId, configuration);
+ return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria(ResourceConfigurationUpdateCriteria criteria) {
- PageList<ResourceConfigurationUpdate> updates =
- configurationManager.findResourceConfigurationUpdatesByCriteria(
- getSessionSubject(), criteria
- );
-
- return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria");
+ public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria(
+ ResourceConfigurationUpdateCriteria criteria) {
+ try {
+ PageList<ResourceConfigurationUpdate> updates = configurationManager
+ .findResourceConfigurationUpdatesByCriteria(getSessionSubject(), criteria);
+ return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public RawConfiguration dummy(RawConfiguration config) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
index 91c45f8..2d112fb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.criteria.PackageVersionCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ContentGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.content.ContentManagerLocal;
@@ -35,16 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ContentGWTServiceImpl extends AbstractGWTServiceImpl implements ContentGWTService {
+ private static final long serialVersionUID = 1L;
private ContentManagerLocal contentManager = LookupUtil.getContentManager();
-
-
public PageList<PackageVersion> findPackageVersionsByCriteria(PackageVersionCriteria criteria) {
- return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria),
+ try {
+ return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria),
"ContentService.findPackageVersionsByCriteria");
-
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
index 1d28f7d..742c68e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import java.util.List;
import org.rhq.core.domain.dashboard.Dashboard;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.DashboardGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.dashboard.DashboardManagerLocal;
@@ -35,25 +36,42 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class DashboardGWTServiceImpl extends AbstractGWTServiceImpl implements DashboardGWTService {
- private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal();
+ private static final long serialVersionUID = 1L;
+ private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal();
public List<Dashboard> findDashboardsForSubject() {
- return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()),
+ try {
+ return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()),
"DashboardManager.findDashboardsForSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<Dashboard> findSharedDashboards() {
- return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()),
+ try {
+ return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()),
"DashboardManager.findSharedDashboards");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Dashboard storeDashboard(Dashboard dashboard) {
- return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(),dashboard),
+ try {
+ return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(), dashboard),
"DashboardManager.storeDashboard");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeDashboard(int dashboardId) {
- dashboardManager.removeDashboard(getSessionSubject(), dashboardId);
+ try {
+ dashboardManager.removeDashboard(getSessionSubject(), dashboardId);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
index 665f370..3dbae8e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java
@@ -30,6 +30,7 @@ import org.rhq.core.domain.event.Event;
import org.rhq.core.domain.event.EventSeverity;
import org.rhq.core.domain.event.composite.EventComposite;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.EventGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.event.EventManagerLocal;
@@ -46,37 +47,66 @@ public class EventGWTServiceImpl extends AbstractGWTServiceImpl implements Event
private EventManagerLocal eventManager = LookupUtil.getEventManager();
public EventSeverity[] getSeverityBuckets(int resourceId, long begin, long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end,
- numBuckets), "EventService.getSeverityBuckets");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end,
+ numBuckets), "EventService.getSeverityBuckets");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public EventSeverity[] getSeverityBucketsForAutoGroup(int parentResourceId, int resourceTypeId, long begin,
long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(), parentResourceId,
- resourceTypeId, begin, end, numBuckets), "EventService.getSeverityBucketsForAutoGroup");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(),
+ parentResourceId, resourceTypeId, begin, end, numBuckets),
+ "EventService.getSeverityBucketsForAutoGroup");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public EventSeverity[] getSeverityBucketsForCompGroup(int resourceGroupId, long begin, long end, int numBuckets) {
- return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(), resourceGroupId,
- begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup");
+ try {
+ return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(),
+ resourceGroupId, begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<Event> findEventsByCriteria(EventCriteria criteria) {
- return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria),
- "EventService.findEventsByCriteria");
+ try {
+ return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria),
+ "EventService.findEventsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<EventComposite> findEventCompositesByCriteria(EventCriteria criteria) {
- return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria),
- "EventService.findEventsByCriteria");
+ try {
+ return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria),
+ "EventService.findEventsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int deleteEventsForContext(EntityContext context, List<Integer> eventIds) {
- return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds);
+ try {
+ return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int purgeEventsForContext(EntityContext context) {
- return eventManager.purgeEventsForContext(getSessionSubject(), context);
+ try {
+ return eventManager.purgeEventsForContext(getSessionSubject(), context);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
index 78232b6..1cc9170 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java
@@ -34,6 +34,7 @@ import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowCo
import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.MeasurementDataGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.measurement.CallTimeDataManagerLocal;
@@ -58,89 +59,140 @@ public class MeasurementDataGWTServiceImpl extends AbstractGWTServiceImpl implem
private MeasurementDefinitionManagerLocal definitionManager = LookupUtil.getMeasurementDefinitionManager();
public List<MeasurementDataTrait> findCurrentTraitsForResource(int resourceId, DisplayType displayType) {
- return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId,
- displayType), "MeasurementDataService.findCurrentTraitsForResource");
+ try {
+ return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId,
+ displayType), "MeasurementDataService.findCurrentTraitsForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<MeasurementData> findLiveData(int resourceId, int[] definitionIds) {
- return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds),
- "MeasurementDataService.findLiveData");
+ try {
+ return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds),
+ "MeasurementDataService.findLiveData");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<List<MeasurementDataNumericHighLowComposite>> findDataForResource(int resourceId, int[] definitionIds,
long beginTime, long endTime, int numPoints) {
- return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId, definitionIds,
- beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource");
+ try {
+ return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId,
+ definitionIds, beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<CallTimeDataComposite> findCallTimeDataForResource(int scheduleId, long start, long end,
PageControl pageControl) {
- return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(), scheduleId,
- start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource");
+ try {
+ return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(),
+ scheduleId, start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementDefinition> findMeasurementDefinitionsByCriteria(MeasurementDefinitionCriteria criteria) {
- return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(),
- criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria");
+ try {
+ return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(),
+ criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementSchedule> findMeasurementSchedulesByCriteria(MeasurementScheduleCriteria criteria) {
- return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria),
- "MeasurementDataService.findMeasurementSchedulesByCriteria");
+ try {
+ return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria),
+ "MeasurementDataService.findMeasurementSchedulesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
- public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter, String parentNameFilter, PageControl pc) {
- return SerialUtility.prepare(
- measurementOOBManager.getSchedulesWithOOBs(
- getSessionSubject(),
- metricNameFilter,
- resourceNameFilter,
- parentNameFilter,
- pc),
+ public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter,
+ String parentNameFilter, PageControl pc) {
+ try {
+ return SerialUtility.prepare(measurementOOBManager.getSchedulesWithOOBs(getSessionSubject(),
+ metricNameFilter, resourceNameFilter, parentNameFilter, pc),
"MeasurementDataService.getSchedulesWithOOBs");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<MeasurementOOBComposite> getHighestNOOBsForResource(int resourceId, int n) {
- return SerialUtility.prepare(
- measurementOOBManager.getHighestNOOBsForResource(
- getSessionSubject(),
- resourceId,
- n),
- "MeasurementDataService.getHighestNOOBsForResource");
+ try {
+ return SerialUtility.prepare(measurementOOBManager.getHighestNOOBsForResource(getSessionSubject(),
+ resourceId, n), "MeasurementDataService.getHighestNOOBsForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void enableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) {
- scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ try {
+ scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void disableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) {
- scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ try {
+ scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSchedulesForResource(int resourceId, int[] measurementDefinitionIds, long collectionInterval) {
- scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds,
+ try {
+ scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds,
collectionInterval);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void enableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) {
- scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds);
+ try {
+ scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void disableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) {
- scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds);
+ try {
+ scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds,
- long collectionInterval) {
- scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds,
- collectionInterval);
- }
+ long collectionInterval) {
+ try {
+ scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId,
+ measurementDefinitionIds, collectionInterval);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
public PageList<MeasurementDataTrait> findTraitsByCriteria(MeasurementDataTraitCriteria criteria) {
- return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria),
- "MeasurementDataService.findTraitsByCriteria");
+ try {
+ return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria),
+ "MeasurementDataService.findTraitsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
-
-
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 62dc79b..7c3acfb 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
@@ -18,22 +18,20 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.resource.Resource;
-
import java.io.ByteArrayOutputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Collection;
-import java.util.List;
import java.util.Set;
+import org.rhq.core.domain.resource.Resource;
+
/**
* @author Greg Hinkle
*/
public class ObjectFilter {
-
public static <T extends Collection<?>> T filterFieldsInCollection(T collection, Set<String> goodFields) {
long sizeOfBefore = sizeOf(collection);
for (Object object : collection) {
@@ -45,7 +43,6 @@ public class ObjectFilter {
}
public static <T> T filterFields(T object, Set<String> goodFields) {
-
try {
Field[] fields = Resource.class.getDeclaredFields();
for (Field f : fields) {
@@ -54,11 +51,11 @@ public class ObjectFilter {
// Only clearing objects, no point in clearing primitives as it
// doesn't save any space on the stream
if (!f.getType().isPrimitive()) {
-// System.out.println("clearing " + f.getName());
+ // System.out.println("clearing " + f.getName());
f.setAccessible(true);
f.set(object, null);
} else {
-// System.out.println("Can't do " + f.getType());
+ // System.out.println("Can't do " + f.getType());
}
}
}
@@ -67,11 +64,9 @@ public class ObjectFilter {
e.printStackTrace();
}
-
return object;
}
-
private static int sizeOf(Object object) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(50000);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
index a7f72ed..4519e00 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
@@ -33,6 +33,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.OperationGWTService;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.create.ExecutionSchedule;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
@@ -52,29 +53,33 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O
public PageList<ResourceOperationHistory> findResourceOperationHistoriesByCriteria(
ResourceOperationHistoryCriteria criteria) {
- return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(),
- criteria), "OperationService.findResourceOperationHistoriesByCriteria");
-
+ try {
+ return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(),
+ criteria), "OperationService.findResourceOperationHistoriesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<GroupOperationHistory> findGroupOperationHistoriesByCriteria(GroupOperationHistoryCriteria criteria) {
- return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(),
- criteria), "OperationService.findGroupOperationHistoriesByCriteria");
+ try {
+ return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(),
+ criteria), "OperationService.findGroupOperationHistoriesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void scheduleResourceOperation(int resourceId, String operationName, Configuration parameters,
ExecutionSchedule schedule, String description, int timeout) throws RuntimeException {
- ResourceOperationSchedule opSchedule;
try {
-
+ ResourceOperationSchedule opSchedule;
if (schedule.getStart() == ExecutionSchedule.Start.Immediately) {
opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName,
0, 0, 0, 0, parameters, description);
} else {
-
CronTrigger ct = new CronTrigger("resource " + resourceId + "_" + operationName, "group", schedule
.getCronString());
-
opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName,
parameters, ct, description);
}
@@ -88,34 +93,40 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O
*/
public List<DisambiguationReport<ResourceOperationLastCompletedComposite>> findRecentCompletedOperations(
int pageSize) {
+ try {
+ PageControl pageControl = new PageControl(0, pageSize);
+ PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager
+ .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl);
- PageControl pageControl = new PageControl(0, pageSize);
- PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager
- .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl);
-
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager
- .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR,
- DefaultDisambiguationUpdateStrategies.getDefault());
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager
+ .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR,
+ DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedLastCompletedResourceOps;
+ return disambiguatedLastCompletedResourceOps;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
/** Find scheduled operations, disambiguate them and return that list.
*
*/
public List<DisambiguationReport<ResourceOperationScheduleComposite>> findScheduledOperations(int pageSize) {
+ try {
+ PageControl pageControl = new PageControl(0, pageSize);
+ PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager
+ .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl);
- PageControl pageControl = new PageControl(0, pageSize);
- PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager
- .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl);
-
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager
- .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR,
- DefaultDisambiguationUpdateStrategies.getDefault());
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager
+ .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR,
+ DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedNextScheduledResourceOps;
+ return disambiguatedNextScheduledResourceOps;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
private static final IntExtractor<ResourceOperationLastCompletedComposite> RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR = new IntExtractor<ResourceOperationLastCompletedComposite>() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
index 45c2c5e..073a6f7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.content.Repo;
import org.rhq.core.domain.criteria.RepoCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.RepoGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.content.RepoManagerLocal;
@@ -35,13 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class RepoGWTServiceImpl extends AbstractGWTServiceImpl implements RepoGWTService {
+ private static final long serialVersionUID = 1L;
+
private RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
public PageList<Repo> findReposByCriteria(RepoCriteria criteria) {
- return SerialUtility.prepare(
- repoManager.findReposByCriteria(getSessionSubject(), criteria),
+ try {
+ return SerialUtility.prepare(repoManager.findReposByCriteria(getSessionSubject(), criteria),
"ContentService.findReposByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
index 5ac22b5..fb00c3a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.resource.InventorySummary;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceBossGWTService;
import org.rhq.enterprise.server.resource.ResourceBossLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -34,6 +35,8 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceBossGWTService {
+ private static final long serialVersionUID = 1L;
+
private ResourceBossLocal resourceBoss = LookupUtil.getResourceBoss();
public InventorySummary getInventorySummaryForLoggedInUser() {
@@ -42,6 +45,10 @@ public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implement
}
public InventorySummary getInventorySummary(Subject user) {
- return resourceBoss.getInventorySummary(user);
+ try {
+ return resourceBoss.getInventorySummary(user);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
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 2e2f6d6..14c6f8d 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
@@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.discovery.DiscoveryBossLocal;
@@ -57,6 +58,8 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceGWTService {
+ private static final long serialVersionUID = 1L;
+
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceFactoryManagerLocal resourceFactoryManager = LookupUtil.getResourceFactoryManager();
private DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss();
@@ -122,8 +125,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourcesByCriteria");
} catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
@@ -139,8 +141,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourceCompositesByCriteria");
} catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException(e);
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
}
}
@@ -148,18 +149,21 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
* Criteria passed in not currently used.
*/
public List<DisambiguationReport<ProblemResourceComposite>> findProblemResources(long ctime, int maxItems) {
+ try {
+ List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>();
+ MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager();
+ ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
- List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>();
- MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager();
- ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
-
- //retrieve list of discovered problem resources. Grab all, live scrolling data
- located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems));
+ //retrieve list of discovered problem resources. Grab all, live scrolling data
+ located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems));
- //translate the returned problem resources to disambiguated links
- List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located,
- RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault());
- return translated;
+ //translate the returned problem resources to disambiguated links
+ List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located,
+ RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault());
+ return translated;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
private static final IntExtractor<ProblemResourceComposite> RESOURCE_ID_EXTRACTOR = new IntExtractor<ProblemResourceComposite>() {
@@ -169,71 +173,112 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
};
public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
- "ResourceService.getResourceLineageAndSiblings");
+ try {
+ return SerialUtility.prepare(
+ resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
+ "ResourceService.getResourceLineageAndSiblings");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Resource getPlatformForResource(int resourceId) {
- return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId),
- "ResourceService.getPlatformForResource");
+ try {
+ return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId),
+ "ResourceService.getPlatformForResource");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems) {
- List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms(
- getSessionSubject(), ctime, maxItems);
+ try {
+ List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms(
+ getSessionSubject(), ctime, maxItems);
- for (RecentlyAddedResourceComposite platform : platforms) {
- List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers(
- getSessionSubject(), ctime, platform.getId());
- platform.setChildren(servers);
- }
+ for (RecentlyAddedResourceComposite platform : platforms) {
+ List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers(
+ getSessionSubject(), ctime, platform.getId());
+ platform.setChildren(servers);
+ }
- return platforms;
+ return platforms;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<Integer> uninventoryResources(int[] resourceIds) {
- return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds),
- "ResourceService.uninventoryResources");
+ try {
+ return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds),
+ "ResourceService.uninventoryResources");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResource(Resource resource) {
- resourceManager.updateResource(getSessionSubject(), resource);
+ try {
+ resourceManager.updateResource(getSessionSubject(), resource);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void createResource(int parentResourceId, int newResourceTypeId, String newResourceName,
Configuration newResourceConfiguration) {
+ try {
- ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager()
- .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId);
- Configuration pluginConfig = null;
- if (pluginConfigDefinition != null) {
- ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate();
- pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration()
- : new Configuration();
+ ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager()
+ .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId);
+ Configuration pluginConfig = null;
+ if (pluginConfigDefinition != null) {
+ ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate();
+ pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration()
+ : new Configuration();
- // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs
- // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition);
- }
+ // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs
+ // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition);
+ }
- resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId,
- newResourceName, pluginConfig, newResourceConfiguration);
+ resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId,
+ newResourceName, pluginConfig, newResourceConfiguration);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(HashSet<InventoryStatus> statuses, PageControl pc) {
- return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet
- .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers");
+ try {
+ return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet
+ .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void importResources(Integer[] resourceIds) {
- discoveryBoss.importResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.importResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void ignoreResources(Integer[] resourceIds) {
- discoveryBoss.ignoreResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.ignoreResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void unignoreResources(Integer[] resourceIds) {
- discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ try {
+ discoveryBoss.unignoreResources(getSessionSubject(), resourceIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
index 6ff33b3..c74aa3c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java
@@ -1,25 +1,28 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.RawConfiguration;
import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
-import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceTypeGWTService {
- public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) {
+ private static final long serialVersionUID = 1L;
- ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager();
+ public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) {
+ try {
+ ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager();
- return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria), "ResourceTypes.findResourceTypesByCriteria");
+ return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria),
+ "ResourceTypes.findResourceTypesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public RawConfiguration dummy(RawConfiguration config) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
index 7b278e1..ed7e50d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.RoleCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.RoleGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.authz.RoleManagerLocal;
@@ -31,34 +32,64 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class RoleGWTServiceImpl extends AbstractGWTServiceImpl implements RoleGWTService {
+ private static final long serialVersionUID = 1L;
+
private RoleManagerLocal roleManager = LookupUtil.getRoleManager();
public PageList<Role> findRolesByCriteria(RoleCriteria criteria) {
- return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria),
- "RoleService.findRolesByCriteria");
+ try {
+ return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria),
+ "RoleService.findRolesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Role createRole(Role role) {
- return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole");
+ try {
+ return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Role updateRole(Role role) {
- return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole");
+ try {
+ return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeRoles(Integer[] roleIds) {
- roleManager.deleteRoles(getSessionSubject(), roleIds);
+ try {
+ roleManager.deleteRoles(getSessionSubject(), roleIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedResourceGroups(int roleId, int[] resourceGroupIds) {
- roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds);
+ try {
+ roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedSubjects(int roleId, int[] subjectIds) {
- roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds);
+ try {
+ roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void setAssignedRolesForSubject(int subjectId, int[] roleIds) {
- roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds);
+ try {
+ roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
index cff798c..ae72b4c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java
@@ -24,6 +24,7 @@ import org.rhq.core.domain.criteria.SavedSearchCriteria;
import org.rhq.core.domain.search.SavedSearch;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.core.domain.search.SearchSuggestion;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SearchGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.search.SavedSearchManagerLocal;
@@ -35,36 +36,62 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class SearchGWTServiceImpl extends AbstractGWTServiceImpl implements SearchGWTService {
+ private static final long serialVersionUID = 1L;
+
private SavedSearchManagerLocal savedSearchManager = LookupUtil.getSavedSearchManager();
public List<SearchSuggestion> getTabAwareSuggestions(SearchSubsystem searchSubsystem, String expression,
int caretPosition, String tab) {
- SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
- List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab);
- return results;
+ try {
+ SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
+ List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab);
+ return results;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<SearchSuggestion> getSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition) {
- SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
- List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition);
- return results;
+ try {
+ SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem);
+ List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition);
+ return results;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public int createSavedSearch(SavedSearch savedSearch) {
- return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch);
+ try {
+ return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateSavedSearch(SavedSearch savedSearch) {
- savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch);
+ try {
+ savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteSavedSearch(int savedSearchId) {
- savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId);
+ try {
+ savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public List<SavedSearch> findSavedSearchesByCriteria(SavedSearchCriteria criteria) {
- return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria),
- "SearchService.findRolesByCriteria");
+ try {
+ return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria),
+ "SearchService.findRolesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
index 32e1d2c..6f86e45 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
@@ -21,35 +21,53 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.SubjectCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SubjectGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.exception.LoginException;
import org.rhq.enterprise.server.util.LookupUtil;
-
/**
* @author Greg Hinkle
*/
public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements SubjectGWTService {
+ private static final long serialVersionUID = 1L;
+
private SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
public void changePassword(String username, String password) {
- subjectManager.changePassword(getSessionSubject(), username, password);
+ try {
+ subjectManager.changePassword(getSessionSubject(), username, password);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void createPrincipal(String username, String password) {
- subjectManager.createPrincipal(getSessionSubject(), username, password);
+ try {
+ subjectManager.createPrincipal(getSessionSubject(), username, password);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject createSubject(Subject subjectToCreate) {
- return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate),
+ try {
+ return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate),
"SubjectManager.createSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void deleteSubjects(int[] subjectIds) {
- subjectManager.deleteSubjects(getSessionSubject(),subjectIds);
+ try {
+ subjectManager.deleteSubjects(getSessionSubject(), subjectIds);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject login(String username, String password) {
@@ -61,15 +79,28 @@ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements Sub
}
public void logout(Subject subject) {
- subjectManager.logout(subject.getSessionId());
+ try {
+ subjectManager.logout(subject.getSessionId());
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Subject updateSubject(Subject subjectToModify) {
- return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify),
+ try {
+ return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify),
"SubjectManager.updateSubject");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<Subject> findSubjectsByCriteria(SubjectCriteria criteria) {
- return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria), "SubjectManager.findSubjectsByCriteria");
+ try {
+ return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria),
+ "SubjectManager.findSubjectsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
index af12a6a..43431c7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.common.ProductInfo;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.SystemGWTService;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -27,9 +28,16 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Ian Springer
*/
public class SystemGWTServiceImpl extends AbstractGWTServiceImpl implements SystemGWTService {
+
+ private static final long serialVersionUID = 1L;
+
private SystemManagerLocal systemManager = LookupUtil.getSystemManager();
public ProductInfo getProductInfo() {
- return this.systemManager.getProductInfo(getSessionSubject());
+ try {
+ return this.systemManager.getProductInfo(getSessionSubject());
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
index 20add85..7ab6941 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java
@@ -28,6 +28,7 @@ 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.PageList;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.TagGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.tagging.TagManagerLocal;
@@ -38,49 +39,90 @@ import org.rhq.enterprise.server.util.LookupUtil;
*/
public class TagGWTServiceImpl extends AbstractGWTServiceImpl implements TagGWTService {
+ private static final long serialVersionUID = 1L;
+
private TagManagerLocal tagManager = LookupUtil.getTagManager();
public PageList<Tag> findTagsByCriteria(TagCriteria tagCriteria) {
- return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria),
+ try {
+ return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria),
"TagService.findTagsByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public Set<Tag> addTags(Set<Tag> tags) {
- return SerialUtility.prepare(
- tagManager.addTags(getSessionSubject(), tags),
- "TagService.addTags");
+ try {
+ return SerialUtility.prepare(tagManager.addTags(getSessionSubject(), tags), "TagService.addTags");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void removeTags(Set<Tag> tags) {
- tagManager.removeTags(getSessionSubject(), tags);
+ try {
+ tagManager.removeTags(getSessionSubject(), tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResourceTags(int resourceId, Set<Tag> tags) {
- tagManager.updateResourceTags(getSessionSubject(), resourceId, tags);
+ try {
+ tagManager.updateResourceTags(getSessionSubject(), resourceId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateResourceGroupTags(int resourceGroupId, Set<Tag> tags) {
- tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags);
+ try {
+ tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleTags(int bundleId, Set<Tag> tags) {
- tagManager.updateBundleTags(getSessionSubject(), bundleId, tags);
+ try {
+ tagManager.updateBundleTags(getSessionSubject(), bundleId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleVersionTags(int bundleVersionId, Set<Tag> tags) {
- tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags);
+ try {
+ tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleDeploymentTags(int bundleDeploymentId, Set<Tag> tags) {
- tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags);
+ try {
+ tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public void updateBundleDestinationTags(int bundleDestinationId, Set<Tag> tags) {
- tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags);
+ try {
+ tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags);
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
public PageList<TagReportComposite> findTagReportCompositesByCriteria(TagCriteria tagCriteria) {
- return SerialUtility.prepare(tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria),
+ try {
+ return SerialUtility.prepare(
+ tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria),
"TagService.findTagReportCompositesByCriteria");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
}
}
commit 4027a3a94c8399ce08485df9043a4386f668cf2b
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work
- support for locked nodes
- support for autogroups for non-inventory managers. Now that AGs are
backed by compat groups it's necessary for non-inv-managers
to be able to create and access the private groups that they own. Private
groups (aka subject-owned groups) are new, they are basically groups
that are tagged with the creating subjectId. Those groups can be
created (via a new slsb call) and fetched (via a new ResourceGroupCriteria
filter) w/o inventory manager perms.
- note: i had to move rhq_subject to auth-schema from authz-schema and
slightly change the dbsetup order to make it ok for rhq_resource_group to
reference rhq_subject.
- schema spec bumped to 2.97
- added ResourceLineageComposite to combine Resource and locked/viewable
info.
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index 02aa606..4035ed5 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -22,7 +22,7 @@
<properties>
<scm.module.path>modules/core/dbutils/</scm.module.path>
- <db.schema.version>2.96</db.schema.version>
+ <db.schema.version>2.97</db.schema.version>
</properties>
<dependencies>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
index f4993e5..b0ee520 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml
@@ -39,7 +39,7 @@ To run the default target, you must set one of the following properties to true:
<property name="dbsetup.scripts.dir" value="${basedir}/src/main/scripts/dbsetup" />
<property name="dbsetup.output.dir" value="${basedir}/target/dbsetup" /> <!-- away from classes so it doesn't go into the jar -->
<!-- define the setup creation processing order. note, removals are done in the reverse order -->
- <property name="dbsetup.subsystems" value="config,cluster,inventory,auth,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/>
+ <property name="dbsetup.subsystems" value="config,cluster,auth,inventory,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/>
<property name="dbsetup.combined.schema" value="${dbsetup.output.dir}/all-schema.xml" />
<property name="dbsetup.combined.data" value="${dbsetup.output.dir}/all-data.xml" />
<property name="dbsetup.tstamp.file" value="${dbsetup.output.dir}/dbsetup-combine.tstamp" />
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
index d24b386..9b77256 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml
@@ -16,5 +16,24 @@
</index>
</table>
+
+ <table name="RHQ_SUBJECT">
+ <column name="ID" default="sequence-only" initial="10001"
+ primarykey="true" required="true" type="INTEGER"/>
+ <column name="NAME" required="true" size="100" type="VARCHAR2"/>
+ <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
+ <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
+ <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
+ <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
+ <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
+ <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
+ <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
+
+ <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
+ <field ref="NAME"/>
+ </index>
+ </table>
</dbsetup>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
index 8d9f738..b1385e9 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml
@@ -50,25 +50,6 @@
</constraint>
</table>
- <table name="RHQ_SUBJECT">
- <column name="ID" default="sequence-only" initial="10001"
- primarykey="true" required="true" type="INTEGER"/>
- <column name="NAME" required="true" size="100" type="VARCHAR2"/>
- <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/>
- <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/>
- <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/>
- <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/>
- <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/>
- <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/>
- <column name="DEPARTMENT" size="100" type="VARCHAR2"/>
- <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/>
- <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/>
-
- <index name="RHQ_SUBJECT_AUTH_KEY" unique="true">
- <field ref="NAME"/>
- </index>
- </table>
-
<table name="RHQ_SUBJECT_ROLE_MAP">
<column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/>
<column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/>
diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
index 6246880..5d89c2d 100644
--- a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
+++ b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml
@@ -168,11 +168,14 @@
<column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <!-- This is only set if this is a subject-owned group (like an autogroup) -->
+ <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/>
+
<!-- These two only set if this is a backing group for a resource auto-cluster -->
<column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/>
<column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
- <!-- This only set if this is a backing group for a resource auto-group -->
+ <!-- This is only set if this is a backing group for a resource auto-group -->
<column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
<column name="VISIBLE" type="BOOLEAN"/>
diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
index f0940ab..b477b09 100644
--- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
+++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml
@@ -3226,9 +3226,21 @@
REFERENCES RHQ_RESOURCE (ID)
</statement>
</schema-directSQL>
-
</schemaSpec>
-
+
+ <schemaSpec version="2.97">
+ <!-- Support subject-owned groups (e.g. autogroups) -->
+ <schema-addColumn table="RHQ_RESOURCE_GROUP" column="SUBJECT_ID" columnType="INTEGER" />
+ <schema-directSQL>
+ <statement desc="Creating RHQ_RESOURCE_GROUP foreign key relation to RHQ_SUBJECT for owned groups">
+ ALTER TABLE RHQ_RESOURCE_GROUP
+ ADD CONSTRAINT RHQ_RG_SUBJECT_ID_FK
+ FOREIGN KEY (SUBJECT_ID)
+ REFERENCES RHQ_SUBJECT (ID)
+ </statement>
+ </schema-directSQL>
+ </schemaSpec>
+
</dbupgrade>
</target>
</project>
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
index 477a128..4a93c1f 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java
@@ -24,11 +24,13 @@ package org.rhq.core.domain.auth;
import java.io.Serializable;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@@ -37,6 +39,7 @@ import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.QueryHint;
import javax.persistence.SequenceGenerator;
@@ -47,6 +50,7 @@ import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.Recordizable;
/**
@@ -271,6 +275,10 @@ public class Subject implements Serializable, Recordizable {
@ManyToMany
private java.util.Set<Role> ldapRoles;
+ // When a subject is removed any owned groups should also be removed
+ @OneToMany(mappedBy = "subject", fetch = FetchType.LAZY)
+ private List<ResourceGroup> ownedGroups = null;
+
@Transient
private Integer sessionId = null;
@@ -448,6 +456,14 @@ public class Subject implements Serializable, Recordizable {
getLdapRoles().remove(role);
}
+ public List<ResourceGroup> getOwnedGroups() {
+ return ownedGroups;
+ }
+
+ public void setOwnedGroups(List<ResourceGroup> ownedGroups) {
+ this.ownedGroups = ownedGroups;
+ }
+
@Override
public String toString() {
return "org.rhq.core.domain.auth.Subject[id=" + id + ",name=" + name + "]";
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
index 2278c7f..835821a 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java
@@ -46,6 +46,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
private Boolean filterRecursive;
private Integer filterResourceTypeId; // requires overrides
private String filterResourceTypeName; // requires overrides
+ private Integer filterSubjectId; // requires overrides
private Integer filterAutoGroupParentResourceId; // requires overrides
private String filterPluginName; // requires overrides
private GroupCategory filterGroupCategory;
@@ -56,6 +57,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
private Integer filterExplicitResourceTypeId; // requires overrides
private String filterExplicitResourceTypeName; // requires overrides
private Integer filterGroupDefinitionId; // requires overrides
+ private Boolean filterPrivate; /* if true, show only private groups for the calling user */
private Boolean filterVisible = true; /* only show visible groups by default */
private boolean fetchExplicitResources;
@@ -74,6 +76,7 @@ public class ResourceGroupCriteria extends TaggedCriteria {
filterOverrides.put("resourceTypeId", "resourceType.id = ?");
filterOverrides.put("resourceTypeName", "resourceType.name like ?");
filterOverrides.put("autoGroupParentResourceId", "autoGroupParentResource.id = ?");
+ filterOverrides.put("subjectId", "subject.id = ?");
filterOverrides.put("pluginName", "resourceType.plugin like ?");
filterOverrides.put("downMemberCount", "" //
+ "id IN ( SELECT implicitGroup.id " //
@@ -148,6 +151,14 @@ public class ResourceGroupCriteria extends TaggedCriteria {
this.filterResourceTypeName = filterResourceTypeName;
}
+ /**
+ * Requires MANAGE_INVENTORY. Use addFilterPrivate(true) to filter on the caller's private groups.
+ * @param filterSubjectId.
+ */
+ public void addFilterSubjectId(Integer filterSubjectId) {
+ this.filterSubjectId = filterSubjectId;
+ }
+
public void addFilterAutoGroupParentResourceId(Integer filterAutoGroupParentResourceId) {
this.filterAutoGroupParentResourceId = filterAutoGroupParentResourceId;
}
@@ -199,6 +210,14 @@ public class ResourceGroupCriteria extends TaggedCriteria {
this.filterGroupDefinitionId = filterGroupDefinitionId;
}
+ public void addFilterPrivate(Boolean filterPrivate) {
+ this.filterPrivate = filterPrivate;
+ }
+
+ public boolean isFilterPrivate() {
+ return (Boolean.TRUE.equals(this.filterPrivate));
+ }
+
public void addFilterVisible(Boolean filterVisible) {
this.filterVisible = filterVisible;
}
@@ -258,8 +277,8 @@ public class ResourceGroupCriteria extends TaggedCriteria {
@Override
public boolean isInventoryManagerRequired() {
- // presently only inventory managers can view/manage group definitions
- return this.filterGroupDefinitionId != null;
+ // presently only inventory managers can view/manage group definitions or see other user's private groups
+ return this.filterGroupDefinitionId != null || this.filterSubjectId != null;
}
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java
new file mode 100644
index 0000000..713a558
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java
@@ -0,0 +1,51 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.core.domain.resource.composite;
+
+import java.io.Serializable;
+
+import org.rhq.core.domain.resource.Resource;
+
+/**
+ * @author jay shaughnessy
+ */
+public class ResourceLineageComposite implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private Resource resource;
+ private boolean isLocked;
+
+ // for gwt serialization
+ @SuppressWarnings("unused")
+ private ResourceLineageComposite() {
+ }
+
+ public ResourceLineageComposite(Resource resource, boolean isLocked) {
+ this.resource = resource;
+ this.isLocked = isLocked;
+ }
+
+ public Resource getResource() {
+ return resource;
+ }
+
+ public boolean isLocked() {
+ return isLocked;
+ }
+}
\ No newline at end of file
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
index 46d6bcb..5250c11 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java
@@ -55,6 +55,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.bundle.BundleDestination;
import org.rhq.core.domain.configuration.group.AbstractGroupConfigurationUpdate;
@@ -432,6 +433,12 @@ public class ResourceGroup extends Group {
@ManyToOne
private ResourceType resourceType; // if non-null, it implies a compatible group
+ // The group owner. Certain groups (like autogroups) are not associated with Roles. Instead, they
+ // are bound to specific owners. Subject-Owned groups defer to member-level authorization as needed.
+ @JoinColumn(name = "SUBJECT_ID", referencedColumnName = "ID", nullable = true)
+ @ManyToOne
+ private Subject subject = null;
+
@Column(name = "CLUSTER_KEY", nullable = true)
private String clusterKey;
@@ -612,6 +619,25 @@ public class ResourceGroup extends Group {
}
}
+ public Subject getSubject() {
+ return subject;
+ }
+
+ public void setSubject(Subject subject) {
+ if (this.id > 0 && null != this.subject) {
+ throw new IllegalStateException("The group owner can not be changed after the group is created.");
+ }
+
+ this.subject = subject;
+ }
+
+ /**
+ * @return true if this is a subject-owned group, private to the set subject
+ */
+ public boolean isPrivateGroup() {
+ return (null != this.subject);
+ }
+
public String getClusterKey() {
return clusterKey;
}
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 b282e41..7ad683a 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
@@ -32,6 +32,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.resource.composite.ProblemResourceComposite;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -44,9 +45,7 @@ public interface ResourceGWTService extends RemoteService {
PageList<ResourceComposite> findResourceCompositesByCriteria(ResourceCriteria criteria);
- List<Resource> getResourceLineage(int resourceId);
-
- List<Resource> getResourceLineageAndSiblings(int resourceId);
+ List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId);
List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
index d968e19..f48fd96 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
@@ -37,6 +37,14 @@ public interface ResourceGroupGWTService extends RemoteService {
GroupDefinition createGroupDefinition(GroupDefinition groupDefinition);
+ /**
+ * The owner will be set to the session subject.
+ * @param group
+ * @param resourceIds initial members
+ * @return
+ */
+ ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds);
+
ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds);
void deleteGroupDefinitions(int[] groupDefinitionIds);
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 50700f2..33b22e9 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
@@ -243,4 +243,9 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
public String getSubTabName() {
return subTabName;
}
+
+ public String getBaseViewPath() {
+ return baseViewPath;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index be66cb9..8d8db75 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -270,7 +270,12 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.addFilterId(groupId);
- criteria.addFilterVisible(null);
+
+ // for autogroups we need to add more criteria
+ if (AUTO_GROUP_VIEW_PATH.equals(getBaseViewPath())) {
+ criteria.addFilterVisible(null);
+ criteria.addFilterPrivate(true);
+ }
GWTServiceLookup.getResourceGroupService().findResourceGroupCompositesByCriteria(criteria,
new AsyncCallback<PageList<ResourceGroupComposite>>() {
@@ -280,6 +285,11 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
}
public void onSuccess(PageList<ResourceGroupComposite> result) {
+ if (result.isEmpty()) {
+ CoreGUI.getErrorHandler().handleError(
+ "Failed to load group composite for group with id " + groupId);
+ }
+
groupComposite = result.get(0);
loadResourceType(groupComposite, viewPath, globalPermissions);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
index 71e6c61..f1dad07 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java
@@ -23,6 +23,7 @@ import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceTreeDatasource.ResourceTreeNode;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
/**
@@ -40,15 +41,19 @@ public class CustomResourceTreeGrid extends LocatableTreeGrid {
if (record instanceof TreeNode) {
boolean open = getTree().isOpen((TreeNode) record);
- if (record instanceof ResourceTreeDatasource.ResourceTreeNode) {
- Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource();
+ if (record instanceof ResourceTreeNode) {
+ ResourceTreeNode node = (ResourceTreeNode) record;
- boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP;
+ if (node.isLocked()) {
+ return "global/Locked_16.png";
- String category = resource.getResourceType().getCategory().getDisplayName();
-
- return "types/" + category + "_" + (up ? "up" : "down") + "_16.png";
+ } else {
+ Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource();
+ String category = resource.getResourceType().getCategory().getDisplayName();
+ boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP;
+ return "types/" + category + "_" + (up ? "up" : "down") + "_16.png";
+ }
} else {
return "resources/folder_group_" + (open ? "opened" : "closed") + ".png";
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
index e577491..1c73198 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
@@ -30,7 +30,6 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.DataSourceField;
-import com.smartgwt.client.data.fields.DataSourceImageField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
import com.smartgwt.client.types.DSDataFormat;
@@ -38,8 +37,6 @@ import com.smartgwt.client.types.DSProtocol;
import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.criteria.ResourceCriteria;
-import org.rhq.core.domain.measurement.AvailabilityType;
-import org.rhq.core.domain.measurement.ResourceAvailability;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceSubCategory;
@@ -61,15 +58,17 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
*/
public class ResourceTreeDatasource extends DataSource {
private List<Resource> initialData;
+ private List<Resource> lockedData;
private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
- public ResourceTreeDatasource(List<Resource> initialData) {
+ public ResourceTreeDatasource(List<Resource> initialData, List<Resource> lockedData) {
setClientOnly(false);
setDataProtocol(DSProtocol.CLIENTCUSTOM);
setDataFormat(DSDataFormat.CUSTOM);
this.initialData = initialData;
+ this.lockedData = (null != lockedData) ? lockedData : new ArrayList<Resource>();
DataSourceField idDataField = new DataSourceTextField("id", "ID");
idDataField.setPrimaryKey(true);
@@ -80,22 +79,12 @@ public class ResourceTreeDatasource extends DataSource {
DataSourceTextField descriptionDataField = new DataSourceTextField("description", "Description");
descriptionDataField.setCanEdit(false);
- DataSourceImageField availabilityDataField = new DataSourceImageField("currentAvailability", "Availability");
- descriptionDataField.setCanEdit(false);
-
DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID");
parentIdField.setForeignKey("id");
- // parentIdField.setRootValue(rootId);
-
- // DataSourceTextField parentKeyField = new DataSourceTextField("parentKey", "Parent KEY");
- // parentKeyField.setForeignKey("id");
- // parentKeyField.setRootValue(rootId);
-
- // nameDataField.setType(FieldType.);
setDropExtraFields(false);
- setFields(idDataField, nameDataField, descriptionDataField, availabilityDataField);
+ setFields(idDataField, nameDataField, descriptionDataField);
}
@Override
@@ -127,7 +116,7 @@ public class ResourceTreeDatasource extends DataSource {
}
public void executeFetch(final String requestId, final DSRequest request, final DSResponse response) {
- final long start = System.currentTimeMillis();
+ //final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId");
// System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
@@ -173,7 +162,7 @@ public class ResourceTreeDatasource extends DataSource {
ResourceTypeRepository.MetadataType.subCategory),
new ResourceTypeRepository.ResourceTypeLoadedCallback() {
public void onResourceTypeLoaded(List<Resource> result) {
- TreeNode[] treeNodes = buildNodes(result);
+ TreeNode[] treeNodes = buildNodes(result, lockedData);
response.setData(treeNodes);
processResponse(requestId, response);
response.setStatus(DSResponse.STATUS_SUCCESS);
@@ -187,11 +176,11 @@ public class ResourceTreeDatasource extends DataSource {
* @param resources
* @return
*/
- public static TreeNode[] buildNodes(List<Resource> resources) {
+ public static TreeNode[] buildNodes(List<Resource> resources, List<Resource> lockedData) {
ResourceTreeNode[] nodes = new ResourceTreeNode[resources.size()];
for (int i = 0; i < resources.size(); i++) {
Resource resource = resources.get(i);
- ResourceTreeNode node = new ResourceTreeNode(resource);
+ ResourceTreeNode node = new ResourceTreeNode(resource, lockedData.contains(resource));
nodes[i] = node;
}
@@ -352,9 +341,11 @@ public class ResourceTreeDatasource extends DataSource {
public static class ResourceTreeNode extends EnhancedTreeNode {
private Resource resource;
+ private boolean isLocked;
- private ResourceTreeNode(Resource resource) {
+ private ResourceTreeNode(Resource resource, boolean isLocked) {
this.resource = resource;
+ this.isLocked = isLocked;
String id = idOf(resource);
setID(id);
@@ -371,21 +362,12 @@ public class ResourceTreeDatasource extends DataSource {
setParentID(parentId);
setAttribute(Attributes.PARENT_ID, parentId);
- // System.out.println(id + " / " + parentId);
- // setAttribute("parentKey", resource.getParentResource() == null ? 0 : (resource.getParentResource().getId() + resource.getResourceType().getName()));
-
String name = resource.getName();
setName(name);
setAttribute(Attributes.NAME, name);
setAttribute(Attributes.DESCRIPTION, resource.getDescription());
- ResourceAvailability currentAvail = resource.getCurrentAvailability();
- setAttribute(
- "currentAvailability",
- (null != currentAvail && currentAvail.getAvailabilityType() == AvailabilityType.UP) ? "/images/icons/availability_green_16.png"
- : "/images/icons/availability_red_16.png");
-
Set<ResourceType> childTypes = resource.getResourceType().getChildResourceTypes();
setIsFolder((childTypes != null && !childTypes.isEmpty()));
}
@@ -394,6 +376,10 @@ public class ResourceTreeDatasource extends DataSource {
return this.resource;
}
+ public boolean isLocked() {
+ return isLocked;
+ }
+
public static String idOf(Resource resource) {
return idOf(resource.getId());
}
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 0d16bea..4cea21b 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
@@ -63,6 +63,7 @@ import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.Breadcrumb;
@@ -142,14 +143,20 @@ public class ResourceTreeView extends LocatableVLayout {
if (!selectionEvent.isRightButtonDown() && selectionEvent.getState()) {
ListGridRecord selectedRecord = treeGrid.getSelectedRecord();
if (selectedRecord instanceof ResourceTreeNode) {
- System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
-
ResourceTreeNode resourceNode = (ResourceTreeNode) selectedRecord;
- selectedNodeId = resourceNode.getID();
- String viewPath = "Resource/" + resourceNode.getResource().getId();
- String currentViewPath = History.getToken();
- if (!currentViewPath.startsWith(viewPath)) {
- CoreGUI.goToView(viewPath);
+
+ if (!resourceNode.isLocked()) {
+ System.out.println("Resource Node selected in tree: " + selectedRecord);
+
+ selectedNodeId = resourceNode.getID();
+ String viewPath = "Resource/" + resourceNode.getResource().getId();
+ String currentViewPath = History.getToken();
+ if (!currentViewPath.startsWith(viewPath)) {
+ CoreGUI.goToView(viewPath);
+ }
+ } else {
+ // TODO: Can we select the previous node? Or do we need a "Locked" hover etc...
+ treeGrid.deselectAllRecords();
}
} else if (selectedRecord instanceof AutoGroupTreeNode) {
System.out.println("AutoGroup Node selected in tree: " + selectedRecord);
@@ -183,7 +190,9 @@ public class ResourceTreeView extends LocatableVLayout {
if (event.getNode() instanceof AutoGroupTreeNode) {
showContextMenu((AutoGroupTreeNode) event.getNode());
} else if (event.getNode() instanceof ResourceTreeNode) {
- showContextMenu((ResourceTreeNode) event.getNode());
+ if (!((ResourceTreeNode) event.getNode()).isLocked()) {
+ showContextMenu((ResourceTreeNode) event.getNode());
+ }
}
}
});
@@ -207,6 +216,7 @@ public class ResourceTreeView extends LocatableVLayout {
// get the backing group if it exists, otherwise create the group
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
+ criteria.addFilterPrivate(true);
criteria.addFilterResourceTypeId(agNode.getResourceType().getId());
criteria.addFilterAutoGroupParentResourceId(agNode.getParentResource().getId());
criteria.addFilterVisible(false);
@@ -224,8 +234,7 @@ public class ResourceTreeView extends LocatableVLayout {
backingGroup.setAutoGroupParentResource(agNode.getParentResource());
backingGroup.setResourceType(agNode.getResourceType());
backingGroup.setVisible(false);
- backingGroup.setRecursive(false);
- resourceGroupService.createResourceGroup(backingGroup, childIds,
+ resourceGroupService.createPrivateResourceGroup(backingGroup, childIds,
new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError("Failed to create resource autogroup", caught);
@@ -596,65 +605,79 @@ public class ResourceTreeView extends LocatableVLayout {
selectedNodeId = ResourceTreeNode.idOf(selectedResourceId);
final ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
- // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource
- resourceService.getResourceLineageAndSiblings(selectedResourceId, new AsyncCallback<List<Resource>>() {
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught);
- }
- public void onSuccess(List<Resource> result) {
- Resource root = result.get(0);
+ // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource
+ resourceService.getResourceLineageAndSiblings(selectedResourceId,
+ new AsyncCallback<List<ResourceLineageComposite>>() {
- if (!root.equals(ResourceTreeView.this.rootResource)) {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught);
+ }
- if (treeGrid != null) {
- treeGrid.destroy();
- }
- buildTree();
+ public void onSuccess(List<ResourceLineageComposite> result) {
+ Resource root = result.get(0).getResource();
- setRootResource(root);
+ final List<Resource> lineage = new ArrayList<Resource>(result.size());
+ final List<Resource> lockedData = new ArrayList<Resource>();
- // seed datasource with initial resource list
- ResourceTreeDatasource dataSource = new ResourceTreeDatasource(result);
- treeGrid.setDataSource(dataSource);
+ for (ResourceLineageComposite r : result) {
+ lineage.add(r.getResource());
+ if (r.isLocked()) {
+ lockedData.add(r.getResource());
+ }
+ }
- addMember(treeGrid);
+ if (!root.equals(ResourceTreeView.this.rootResource)) {
- treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() {
- public void execute(DSResponse response, Object rawData, DSRequest request) {
- System.out.println("Done fetching data for tree.");
- updateSelection();
+ if (treeGrid != null) {
+ treeGrid.destroy();
}
- });
+ buildTree();
- updateSelection();
+ setRootResource(root);
- } else {
- ResourceTypeRepository.Cache.getInstance().loadResourceTypes(
- result,
- EnumSet.of(ResourceTypeRepository.MetadataType.operations,
- ResourceTypeRepository.MetadataType.children,
- ResourceTypeRepository.MetadataType.subCategory),
- new ResourceTypeRepository.ResourceTypeLoadedCallback() {
- public void onResourceTypeLoaded(List<Resource> result) {
- treeGrid.getTree().linkNodes(ResourceTreeDatasource.buildNodes(result));
-
- TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId);
- if (selectedNode != null) {
- updateSelection();
-
- } else {
- CoreGUI.getMessageCenter().notify(
- new Message("Failed to select Resource [" + selectedResourceId + "] in tree.",
- Message.Severity.Warning));
- }
+ // seed datasource with initial resource list and which ancestor resources are locked
+ ResourceTreeDatasource dataSource = new ResourceTreeDatasource(lineage, lockedData);
+ treeGrid.setDataSource(dataSource);
+ addMember(treeGrid);
+
+ treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() {
+ public void execute(DSResponse response, Object rawData, DSRequest request) {
+ System.out.println("Done fetching data for tree.");
+ updateSelection();
}
});
+ updateSelection();
+
+ } else {
+ ResourceTypeRepository.Cache.getInstance().loadResourceTypes(
+ lineage,
+ EnumSet.of(ResourceTypeRepository.MetadataType.operations,
+ ResourceTypeRepository.MetadataType.children,
+ ResourceTypeRepository.MetadataType.subCategory),
+ new ResourceTypeRepository.ResourceTypeLoadedCallback() {
+ public void onResourceTypeLoaded(List<Resource> result) {
+ treeGrid.getTree()
+ .linkNodes(ResourceTreeDatasource.buildNodes(lineage, lockedData));
+
+ TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId);
+ if (selectedNode != null) {
+ updateSelection();
+
+ } else {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Failed to select Resource [" + selectedResourceId
+ + "] in tree.", Message.Severity.Warning));
+ }
+
+ }
+ });
+
+ }
}
- }
- });
+ });
}
public void setSelectedAutoGroup(final Integer selectedAutoGroupId) {
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 66a25be..2e2f6d6 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
@@ -39,6 +39,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport;
import org.rhq.core.domain.resource.composite.ProblemResourceComposite;
import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.util.IntExtractor;
@@ -167,13 +168,8 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
}
};
- public List<Resource> getResourceLineage(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineage(resourceId),
- "ResourceService.getResourceLineage");
- }
-
- public List<Resource> getResourceLineageAndSiblings(int resourceId) {
- return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(resourceId),
+ public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) {
+ return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId),
"ResourceService.getResourceLineageAndSiblings");
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
index 1ddecc3..2015091 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
@@ -87,6 +87,17 @@ public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implemen
}
}
+ public ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds) {
+ try {
+ Subject user = getSessionSubject();
+ group = groupManager.createPrivateResourceGroup(user, group);
+ groupManager.setAssignedResources(user, group.getId(), resourceIds, true);
+ return SerialUtility.prepare(group, "ResourceGroupService.createResourceGroup");
+ } catch (Throwable t) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(t));
+ }
+ }
+
public ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds) {
try {
Subject user = getSessionSubject();
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index 4e1a53d..37ec2c9 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -48,6 +48,7 @@ import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.server.PersistenceUtility;
@@ -58,6 +59,7 @@ import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.core.CustomJaasDeploymentServiceMBean;
import org.rhq.enterprise.server.exception.LoginException;
+import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -69,7 +71,6 @@ import org.rhq.enterprise.server.util.CriteriaQueryRunner;
*/
@Stateless
public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRemote {
- @SuppressWarnings("unused")
private final Log log = LogFactory.getLog(SubjectManagerBean.class);
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
@@ -79,6 +80,10 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe
private AuthorizationManagerLocal authorizationManager;
@EJB
+ @IgnoreDependency
+ private ResourceGroupManagerLocal resourceGroupManager;
+
+ @EJB
private SystemManagerLocal systemManager;
@EJB
@@ -508,6 +513,25 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe
deletePrincipal(subject, doomedSubject);
}
+ // one more thing, delete any owned groups
+ List<ResourceGroup> ownedGroups = doomedSubject.getOwnedGroups();
+ if (!ownedGroups.isEmpty()) {
+ int size = ownedGroups.size();
+ int[] ownedGroupIds = new int[size];
+ for (int i = 0; (i < size); ++i) {
+ ownedGroupIds[i] = ownedGroups.get(i).getId();
+ }
+ try {
+ resourceGroupManager.deleteResourceGroups(subject, ownedGroupIds);
+ } catch (Throwable t) {
+ if (log.isDebugEnabled()) {
+ log.error("Error deleting owned group " + ownedGroupIds, t);
+ } else {
+ log.error("Error deleting owned group " + ownedGroupIds + ": " + t.getMessage());
+ }
+ }
+ }
+
deleteSubject(subject, doomedSubject);
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
index d675177..1a14a56 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.server.authz;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
@@ -32,6 +33,8 @@ import javax.persistence.Query;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Permission.Target;
+import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.enterprise.server.RHQConstants;
/**
@@ -117,12 +120,33 @@ public class AuthorizationManagerBean implements AuthorizationManagerLocal {
return true;
}
- Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION);
- query.setParameter("subject", subject);
- query.setParameter("permission", permission);
- query.setParameter("groupId", groupId);
- long count = (Long) query.getSingleResult();
- return (count != 0);
+ ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
+ Subject owner = group.getSubject();
+
+ if (null == owner) {
+ // role-owned group
+ Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION);
+ query.setParameter("subject", subject);
+ query.setParameter("permission", permission);
+ query.setParameter("groupId", groupId);
+ long count = (Long) query.getSingleResult();
+ return (count != 0);
+
+ } else {
+ // don't let a user other than the owner do anything with this group
+ if (!subject.equals(owner)) {
+ return false;
+ }
+
+ // subject-owned group, requires perm check against each group member
+ Set<Resource> members = group.getExplicitResources();
+ List<Integer> memberIds = new ArrayList<Integer>(members.size());
+ for (Resource member : members) {
+ memberIds.add(member.getId());
+ }
+
+ return hasResourcePermission(owner, permission, memberIds);
+ }
}
public boolean hasResourcePermission(Subject subject, Permission permission, int resourceId) {
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 0528b06..bf213c0 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
@@ -94,6 +94,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceHealthComposite;
import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight;
import org.rhq.core.domain.resource.composite.ResourceInstallCount;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.core.domain.resource.composite.ResourceWithAvailability;
import org.rhq.core.domain.resource.flyweight.FlyweightCache;
@@ -721,27 +722,68 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
return resourceLineage;
}
- public List<Resource> getResourceLineageAndSiblings(int resourceId) {
- List<Resource> resourceLineage = getResourceLineage(resourceId);
- List<Resource> result = new LinkedList<Resource>();
+ public List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId) {
+ boolean isInventoryManager = authorizationManager.isInventoryManager(subject);
- Resource platform = resourceLineage.get(0);
- result.add(platform);
- for (Resource resource : resourceLineage) {
- if (resource.getParentResource() != null) {
- // This ensures Hibernate actually fetches the parent Resource.
- resource.getParentResource().getId();
- }
- Set<Resource> childResources = resource.getChildResources();
- result.addAll(childResources);
- for (Resource childResource : childResources) {
- // This ensures Hibernate actually fetches the parent Resource.
- childResource.getParentResource().getId();
- Set<Resource> grandchildResources = childResource.getChildResources();
- result.addAll(grandchildResources);
- for (Resource grandchildResource : grandchildResources) {
+ // get the raw resource lineage up to the platform. We'll check the auth below
+ List<Resource> rawResourceLineage = getResourceLineage(resourceId);
+ int depth = rawResourceLineage.size();
+ Resource parent = (depth > 1) ? rawResourceLineage.get(depth - 2) : null;
+
+ // record which of the raw ancestry is locked from view
+ List<ResourceLineageComposite> resourceLineage = new ArrayList<ResourceLineageComposite>(rawResourceLineage
+ .size());
+ for (Resource resource : rawResourceLineage) {
+ resourceLineage.add(new ResourceLineageComposite(resource, !authorizationManager.canViewResource(subject,
+ resource.getId())));
+ }
+
+ // fill out the tree, including only the direct ancestors and all viewable relations
+ List<ResourceLineageComposite> result = new LinkedList<ResourceLineageComposite>();
+
+ for (ResourceLineageComposite ancestor : resourceLineage) {
+ // always include a direct ancestor
+ result.add(ancestor);
+
+ // if the ancestor is not locked, include relevant children. Also, always show viewable
+ // siblings of the target resource.
+ if (!ancestor.isLocked() || ancestor.getResource() == parent) {
+
+ // get children
+ Set<Resource> children = ancestor.getResource().getChildResources();
+ // only add the viewable children
+ List<Resource> viewableChildren = new ArrayList<Resource>(children.size());
+ for (Resource child : children) {
+ boolean isCommitted = (child.getInventoryStatus() == InventoryStatus.COMMITTED);
+ boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject, child
+ .getId()));
+ if (isCommitted && isViewable) {
+ // if not a direct ancestor add to the list (direct ancestors already added by default)
+ if (!rawResourceLineage.contains(child)) {
+ child.getParentResource().getId();
+ result.add(new ResourceLineageComposite(child, false));
+ }
+ viewableChildren.add(child);
+ }
+ }
+
+ // get grandchildren
+ for (Resource child : viewableChildren) {
// This ensures Hibernate actually fetches the parent Resource.
- grandchildResource.getParentResource().getId();
+ child.getParentResource().getId();
+ Set<Resource> grandChildren = child.getChildResources();
+ for (Resource grandChild : grandChildren) {
+ boolean isCommitted = (grandChild.getInventoryStatus() == InventoryStatus.COMMITTED);
+ boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject,
+ grandChild.getId()));
+ if (isCommitted && isViewable) {
+ // if not a direct ancestor add to the list (direct ancestors already added by default)
+ if (!rawResourceLineage.contains(grandChild)) {
+ grandChild.getParentResource().getId();
+ result.add(new ResourceLineageComposite(grandChild, false));
+ }
+ }
+ }
}
}
}
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 78ece78..6f2ae41 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
@@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourceHealthComposite;
import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight;
import org.rhq.core.domain.resource.composite.ResourceInstallCount;
+import org.rhq.core.domain.resource.composite.ResourceLineageComposite;
import org.rhq.core.domain.resource.composite.ResourceWithAvailability;
import org.rhq.core.domain.resource.flyweight.ResourceFlyweight;
import org.rhq.core.domain.resource.group.ResourceGroup;
@@ -156,11 +157,13 @@ public interface ResourceManagerLocal {
/**
* Returns the lineage of a resource plus all the siblings of the resources in the lineage. This is
- * useful for prepopulating all the resources visible in an expanded tree.
+ * useful for prepopulating all the resources visible in an expanded tree. Composites are returned
+ * that indicate whether the resource is viewable or should be locked in the tree.
+ *
* @param resourceId id of resource
- * @return resoure lineage and siblings
+ * @return resource lineage and siblings
*/
- List<Resource> getResourceLineageAndSiblings(int resourceId);
+ List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId);
/**
* Looks up the root of a subtree in the inventory. This will generally find the platform on which
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
index 0e7500f..f75d32d 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java
@@ -146,6 +146,15 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
}
}
+ public ResourceGroup createPrivateResourceGroup(Subject subject, //
+ @XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) {
+
+ group.setSubject(subject);
+ group.setRecursive(false);
+
+ return resourceGroupManager.createResourceGroup(subjectManager.getOverlord(), group);
+ }
+
@RequiredPermission(Permission.MANAGE_INVENTORY)
public ResourceGroup createResourceGroup(Subject user, //
@XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) {
@@ -1017,8 +1026,9 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
*/
public PageList<ResourceGroupComposite> findResourceGroupCompositesByCriteria(Subject subject,
ResourceGroupCriteria criteria) {
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- ;
+
+ CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria);
+
String replacementSelectList = ""
+ " new org.rhq.core.domain.resource.group.composite.ResourceGroupComposite( "
+ " ( SELECT COUNT(avail) FROM resourcegroup.explicitResources res JOIN res.currentAvailability avail ) AS explicitCount,"
@@ -1028,17 +1038,6 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
+ " resourcegroup ) ";
generator.alterProjection(replacementSelectList);
- if (criteria.isSecurityManagerRequired()
- && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
- throw new PermissionException("Subject [" + subject.getName()
- + "] requires SecurityManager permission for requested query criteria.");
- }
-
- if (authorizationManager.isInventoryManager(subject) == false) {
- generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null,
- subject.getId());
- }
-
CriteriaQueryRunner<ResourceGroupComposite> queryRunner = new CriteriaQueryRunner<ResourceGroupComposite>(
criteria, generator, entityManager);
PageList<ResourceGroupComposite> results = queryRunner.execute();
@@ -1299,18 +1298,35 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
public void setAssignedResources(Subject subject, int groupId, int[] resourceIds, boolean setType)
throws ResourceGroupDeleteException {
+ ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
+ if (group.isPrivateGroup()) {
+ List<Integer> ids = new ArrayList<Integer>(resourceIds.length);
+ for (int id : resourceIds) {
+ ids.add(id);
+ }
+ if (!authorizationManager.canViewResources(subject, ids)) {
+ throw new PermissionException("Subject [" + subject.getName()
+ + "] does not have VIEW permission for all specified resources.");
+ }
+ } else {
+ if (!authorizationManager.isInventoryManager(subject)) {
+ throw new PermissionException("Subject [" + subject.getName()
+ + "] is not authorized for [ MANAGE_INVENTORY ]. Required for changing group membership ");
+ }
+ }
+
List<Integer> currentMembers = resourceManager.findExplicitResourceIdsByResourceGroup(groupId);
List<Integer> newMembers = ArrayUtils.wrapInList(resourceIds); // members needing addition
newMembers.removeAll(currentMembers);
if (newMembers.size() > 0) {
- addResourcesToGroup(subject, groupId, ArrayUtils.unwrapCollection(newMembers));
+ addResourcesToGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(newMembers));
}
List<Integer> extraMembers = new ArrayList<Integer>(currentMembers); // members needing removal
extraMembers.removeAll(ArrayUtils.wrapInList(resourceIds));
if (extraMembers.size() > 0) {
- removeResourcesFromGroup(subject, groupId, ArrayUtils.unwrapCollection(extraMembers));
+ removeResourcesFromGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(extraMembers));
}
// As a result of the membership change ensure that the group type is set correctly.
@@ -1461,28 +1477,45 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
@SuppressWarnings("unchecked")
public PageList<ResourceGroup> findResourceGroupsByCriteria(Subject subject, ResourceGroupCriteria criteria) {
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- ;
+ CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria);
+
+ CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager);
+ PageList<ResourceGroup> result = queryRunner.execute();
+ return result;
+ }
+
+ private CriteriaQueryGenerator getCriteriaQueryGenerator(Subject subject, ResourceGroupCriteria criteria) {
if (criteria.isSecurityManagerRequired()
&& !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
throw new PermissionException("Subject [" + subject.getName()
+ "] requires SecurityManager permission for requested query criteria.");
}
- if (criteria.isInventoryManagerRequired()
- && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_INVENTORY)) {
+ boolean isInventoryManager = authorizationManager.isInventoryManager(subject);
+ boolean groupAuthzRequired = (!(criteria.isFilterPrivate() || isInventoryManager));
+
+ if (criteria.isInventoryManagerRequired() && !isInventoryManager) {
throw new PermissionException("Subject [" + subject.getName()
+ "] requires InventoryManager permission for requested query criteria.");
}
- if (authorizationManager.isInventoryManager(subject) == false) {
+ // if we're searching for private groups set the subject filter to the current user's subjectId
+ // setting it here prevents the caller from spoofing a different user. This is why the subject and
+ // private filters are different. The suject filter can specifiy any use and therefore requires
+ // inventory manager.
+ if (criteria.isFilterPrivate()) {
+ criteria.addFilterPrivate(null);
+ criteria.addFilterSubjectId(subject.getId());
+ }
+
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ if (groupAuthzRequired) {
generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null,
subject.getId());
}
- CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager);
- return queryRunner.execute();
+ return generator;
}
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
index de96dbf..a0481b1 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java
@@ -42,6 +42,28 @@ import org.rhq.core.domain.util.PageList;
@Local
public interface ResourceGroupManagerLocal {
+ /**
+ * NOTE: This is only used to support AutoGroups currently but the idea may be expanded in the future.
+ *
+ * Creates a private, "user-owned" (aka "subject-owned") resource group. This group differs from a role-owned
+ * group in that it can not be assigned to a role, instead it is owned by the user that creates it. It comprises
+ * only a set of resources for which the user has, minimally, view permission. Since a user's view permissions
+ * can change, membership and authz checking must be performed as needed when taking any action on the group.
+ * <br/><br/>
+ * A user does not need MANAGE_INVENTORY to create a sub-group because it is private to his view.
+ * <br/><br/>
+ * This call does not populate the group with members, it only creates the group. The group is automatically set
+ * to be non-recursive.
+ * <br/><br/>
+ * All user-owned groups are deleted if the the user is deleted.
+ *
+ * @param user The user for which the group will be created.
+ * @param group The group characteristics. Any membership defined here is ignored. The recursivity setting is
+ * ignored.
+ * @return The new group.
+ */
+ ResourceGroup createPrivateResourceGroup(Subject user, ResourceGroup group);
+
ResourceGroup getResourceGroupById(Subject user, int id, GroupCategory category)
throws ResourceGroupNotFoundException;
@@ -108,7 +130,10 @@ public interface ResourceGroupManagerLocal {
/**
* This method ensures that the explicit group membership is set to the specified resources. Members
* will be added or removed as necessary. Make sure you pass the correct value for the <setType>
- * parameter.
+ * parameter.
+ * <br/><br/>
+ * For global groups requires MANAGE_INVENTORY. For private groups requires VIEW permission on all specified
+ * resources.
*
* @param subject
* @param groupId
commit dd657e98f4d906e6bb6b58b3948d1b7d7282b4ec
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Sep 28 12:35:44 2010 -0400
AutoGroup/ResourceTree work
- Fix up breadcrumbs for AutoGroup selections and also fix up some path
- issues that were happening when selecting AG resources.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index bb39f2d..34cf23e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -254,10 +254,13 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
if (viewPath.matches("(" + ResourceTopView.VIEW_ID + "|" + ResourceGroupTopView.VIEW_ID + ")/[^/]*")) {
// e.g. "Resource/10001"
if (!currentViewPath.startsWith(viewPath)) {
- // The Resource that was selected is not the same Resource that was previously selected -
- // grab the end portion of the previous history URL and append it to the new history URL,
- // so the same tab is selected for the new Resource.
- String suffix = currentViewPath.replaceFirst("^[^/]*/[^/]*", "");
+ // The Node that was selected is not the same Node that was previously selected - it
+ // may not even be the same node type. For example, the user could have moved from a
+ // resource to an autogroup in the same tree. Try to keep the tab selection sticky as best as
+ // possible while moving from one view to another by grabbing the end portion of the previous
+ // history URL and append it to the new history URL. The suffix is assumed to follow the
+ // ID (numeric) portion of the currentViewPath.
+ String suffix = currentViewPath.replaceFirst("\\D*[^/]*", "");
viewPath += suffix;
}
}
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 6a7cba9..0d16bea 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
@@ -236,7 +236,6 @@ public class ResourceTreeView extends LocatableVLayout {
// get back to this node given the id of the backing group (from the viewpath)
autoGroupNodeMap.put(result.getId(), agNode);
callback.onSuccess(result);
- //renderAutoGroup(result);
}
});
} else {
@@ -302,6 +301,23 @@ public class ResourceTreeView extends LocatableVLayout {
}
}
+ private void adjustBreadcrumb(TreeNode node, ViewId viewId) {
+ if (node instanceof ResourceTreeNode) {
+ Resource nr = ((ResourceTreeNode) node).getResource();
+ String display = node.getName() + " <span class=\"subtitle\">" + nr.getResourceType().getName() + "</span>";
+ String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png";
+
+ viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
+
+ } else if (node instanceof AutoGroupTreeNode) {
+ String name = ((AutoGroupTreeNode) node).getBackingGroupName();
+ String display = node.getName() + " <span class=\"subtitle\">" + name + "</span>";
+ String icon = "types/" + ((AutoGroupTreeNode) node).getResourceType().getCategory() + "_up_16.png";
+
+ viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
+ }
+ }
+
private void showContextMenu(AutoGroupTreeNode agNode) {
getAutoGroupBackingGroup(agNode, new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
@@ -680,23 +696,6 @@ public class ResourceTreeView extends LocatableVLayout {
}
}
- private void adjustBreadcrumb(TreeNode node, ViewId viewId) {
- if (node instanceof ResourceTreeNode) {
-
- Resource nr = ((ResourceTreeNode) node).getResource();
- String display = node.getName() + " <span class=\"subtitle\">" + nr.getResourceType().getName() + "</span>";
- String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png";
-
- viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true));
-
- } else {
-
- // if (node.getName() != null) {
- // viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), node.getName(), null, true));
- // }
- }
- }
-
/*private List<Resource> preload(final List<Resource> lineage) {
final ArrayList<Resource> list = new ArrayList<Resource>(lineage);
@@ -730,8 +729,9 @@ public class ResourceTreeView extends LocatableVLayout {
currentViewId = viewPath.getCurrent();
String currentViewIdPath = currentViewId.getPath();
if ("AutoGroup".equals(currentViewIdPath)) {
- ViewId nextViewId = viewPath.getNext();
- Integer autoGroupId = Integer.parseInt(nextViewId.getPath());
+ // Move the currentViewId to the ID portion to play better with other code
+ currentViewId = viewPath.getNext();
+ Integer autoGroupId = Integer.parseInt(currentViewId.getPath());
setSelectedAutoGroup(autoGroupId);
} else {
Integer resourceId = Integer.parseInt(currentViewId.getPath());
commit 9cfec33df4ca3f5975a2a6ba72c6b6a5ddc09cdd
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 16:47:49 2010 -0400
Updating tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index bc0d6c5..5e2913b 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -24,11 +24,13 @@
package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager;
+import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
@@ -91,6 +93,20 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
"not change", expected, actual);
}
+ // This test fails with,
+ //
+ // PersistentObjectException: detached entity passed to persist
+ //
+ // I get the exception with both PropertyGroupDefinition and PropertyDefinitionSimple when I have tried various
+ // approaches to get past the exception.
+ @Test(enabled = false)
+ public void addNewGroup() {
+ initConfigDefs("servers[name='GroupTests']", "GroupTests");
+
+ assertNotNull("The new property should be added to the configuration definition",
+ findGroup("newGroup", originalConfigDef));
+ }
+
// void assertGroupDefinitionExists() {
// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
// if (groupDef.getName().equals("groupToBeRemoved")) {
@@ -107,17 +123,24 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
private void loadAndPersistConfigDefs(String path, String configName) {
originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName);
+ assertNotNull(originalConfigDef);
updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName);
+ assertNotNull(updatedConfigDef);
try {
getTransactionManager().begin();
EntityManager entityMgr = getEntityManager();
entityMgr.persist(originalConfigDef);
- entityMgr.persist(updatedConfigDef);
+ //entityMgr.persist(updatedConfigDef);
getTransactionManager().commit();
} catch (Exception e) {
+ try {
+ getTransactionManager().rollback();
+ } catch (SystemException e1) {
+ throw new RuntimeException(e1);
+ }
throw new RuntimeException(e);
}
}
@@ -131,6 +154,11 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().commit();
} catch (Exception e) {
+ try {
+ getTransactionManager().rollback();
+ } catch (SystemException e1) {
+ throw new RuntimeException(e1);
+ }
throw new RuntimeException(e);
}
}
@@ -139,6 +167,15 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
return "/" + getClass().getPackage().getName().replace('.', '/') + "/";
}
+ private PropertyGroupDefinition findGroup(String name, ConfigurationDefinition configDef) {
+ for (PropertyGroupDefinition groupDef : configDef.getGroupDefinitions()) {
+ if (groupDef.getName().equals(name)) {
+ return groupDef;
+ }
+ }
+ return null;
+ }
+
void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected,
PropertyDefinitionSimple actual) {
AssertUtils.assertPropertiesMatch(msg, expected, actual, "id", "configurationDefinition");
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
index 131cff7..dd8fcfa 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -18,4 +18,12 @@
description="This property exists only in version 1 of the plugin"/>
</plugin-configuration>
</server>
+
+ <server name="GroupTests">
+ <plugin-configuration>
+ <c:group name="existingGroup">
+ <c:simple-property name="existingGroupProperty"/>
+ </c:group>
+ </plugin-configuration>
+ </server>
</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
index 2c94f72..d090e76 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -25,4 +25,21 @@
summary="false"/>
</plugin-configuration>
</server>
+
+ <server name="GroupTests">
+ <plugin-configuration>
+ <c:group name="existingGroup">
+ <c:simple-property name="existingGroupProperty"/>
+ </c:group>
+
+ <c:group name="newGroup">
+ <c:simple-property name="newGroupProperty"
+ description="A new, grouped property"
+ activationPolicy="immediate"
+ default="new grouped property"
+ displayName="New Group Property"
+ readOnly="true"/>
+ </c:group>
+ </plugin-configuration>
+ </server>
</plugin>
commit 48029081f328dd5de0b3a9e617f42bd28f287db0
Merge: 067f701... cf57ff1...
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Thu Sep 30 20:59:10 2010 +0200
Merge branch 'master' into perftest
commit cf57ff1d2706723c74d1a66c914a69e4d68f0b91
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 14:48:49 2010 -0400
introduce the start of the new notification editor.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
new file mode 100644
index 0000000..1711bd5
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -0,0 +1,161 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 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.enterprise.gui.coregui.client.alert.definitions;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.FormItemIfFunction;
+import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.SelectItem;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+
+import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+
+/**
+ * @author John Mazzitelli
+ */
+public class NewNotificationEditor extends LocatableDynamicForm {
+
+ private final AlertDefinition alertDefinition; // the definition we are adding the notification to
+ private final ArrayList<AlertNotification> notifications; // if we are creating a new notification, it gets added to this list
+ private final AlertNotification notificationToEdit; // the notification that this editor is editing (may be null)
+ private final Runnable closeFunction; // this is called after a button is pressed and the editor should close
+
+ private SelectItem notificationSenderSelectItem;
+
+ public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition,
+ ArrayList<AlertNotification> notifs, AlertNotification notifToEdit, Runnable closeFunc) {
+
+ super(locatorId);
+ this.alertDefinition = alertDefinition;
+ this.notifications = notifs;
+ this.notificationToEdit = notifToEdit;
+ this.closeFunction = closeFunc;
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+
+ setMargin(20);
+
+ notificationSenderSelectItem = new SelectItem("notificationSender", "Notification Sender");
+
+ LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>();
+ if (notificationToEdit != null) {
+ // we were given a notification to edit, you can't change the sender type, its the only option
+ senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName());
+ notificationSenderSelectItem.setDisabled(true);
+ } else {
+ // we are creating a new notification, need to provide all senders as options
+ senders.put("System Users", "System Users");
+ senders.put("dummySender", "Dummy Sender");
+ }
+
+ notificationSenderSelectItem.setValueMap(senders);
+ notificationSenderSelectItem.setDefaultToFirstOption(true);
+ notificationSenderSelectItem.setWrapTitle(false);
+ notificationSenderSelectItem.setRedrawOnChange(true);
+ notificationSenderSelectItem.setWidth("*");
+
+ SpacerItem spacer1 = new SpacerItem();
+ spacer1.setColSpan(2);
+ spacer1.setHeight(5);
+
+ SpacerItem spacer2 = new SpacerItem();
+ spacer2.setColSpan(2);
+ spacer2.setHeight(5);
+
+ ButtonItem ok = new ButtonItem("okButtonItem", "OK");
+ ok.setEndRow(false);
+ ok.setAlign(Alignment.RIGHT);
+ ok.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ if (validate(false)) {
+ saveNewNotification();
+ closeFunction.run();
+ }
+ }
+ });
+
+ ButtonItem cancel = new ButtonItem("cancelButtonItem", "Cancel");
+ cancel.setStartRow(false);
+ cancel.setAlign(Alignment.LEFT);
+ cancel.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ closeFunction.run();
+ }
+ });
+
+ ArrayList<FormItem> formItems = new ArrayList<FormItem>();
+ formItems.add(notificationSenderSelectItem);
+ formItems.add(spacer1);
+ // TODO put config editor here
+ formItems.add(spacer2);
+ formItems.add(ok);
+ formItems.add(cancel);
+
+ setFields(formItems.toArray(new FormItem[formItems.size()]));
+ };
+
+ private void saveNewNotification() {
+ AlertNotification notif;
+
+ if (notificationToEdit == null) {
+ // we are adding a new notification - we just add it to the end of the list
+ String selectedSender = notificationSenderSelectItem.getValue().toString();
+ notif = new AlertNotification(selectedSender);
+ notif.setAlertDefinition(alertDefinition);
+ notifications.add(notif);
+ } else {
+ notif = notificationToEdit;
+ }
+
+ // notif.setConfiguration(configuration);
+ // notif.setExtraConfiguration(extraConfiguration);
+ }
+
+ private class ShowIfSenderFunction implements FormItemIfFunction {
+ private final String senderName;
+
+ public ShowIfSenderFunction(String senderName) {
+ this.senderName = senderName;
+ }
+
+ public boolean execute(FormItem item, Object value, DynamicForm form) {
+ String selectedSenderString = form.getValue("notificationSender").toString();
+ return senderName.equals(selectedSenderString);
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index b8e4644..bc585ac 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -123,6 +123,11 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
@Override
public void saveAlertDefinition() {
+ if (notifications != null && notifications.size() > 0) {
+ for (AlertNotification notif : notifications) {
+ notif.setAlertDefinition(alertDefinition);
+ }
+ }
alertDefinition.setAlertNotifications(notifications);
// make our own new internal copy since we gave ours to the definition object
@@ -184,7 +189,6 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
record.setAttribute(FIELD_SENDER, from.getSenderName());
// our executeFetch will fill in the real value for FIELD_CONFIGURATION
record.setAttribute(FIELD_CONFIGURATION, "(unknown)");
- // TODO what's the extraConfiguration the notification?
return record;
}
@@ -290,15 +294,15 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
}
});
- // NewNotificationEditor newEditor = new NewNotificationEditor(
- // extendLocatorId("newNotificationEditor"), notifications, new Runnable() {
- // @Override
- // public void run() {
- // winModal.markForDestroy();
- // table.refresh();
- // }
- // });
- /// winModal.addItem(newEditor);
+ NewNotificationEditor newEditor = new NewNotificationEditor(extendLocatorId("newNotificationEditor"),
+ alertDefinition, notifications, notifToEdit, new Runnable() {
+ @Override
+ public void run() {
+ winModal.markForDestroy();
+ table.refresh();
+ }
+ });
+ winModal.addItem(newEditor);
winModal.show();
}
}
commit 0b06e79336f625dcd36e15004d746ee2228e13aa
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 14:48:26 2010 -0400
add cancel button
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewConditionEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewConditionEditor.java
index 3fcc64e..361ad78 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewConditionEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewConditionEditor.java
@@ -96,14 +96,15 @@ public class NewConditionEditor extends LocatableDynamicForm {
private boolean supportsOperations = false;
private boolean supportsEvents = false;
private boolean supportsResourceConfig = false;
- private Runnable okFunction; // this is called after the OK button is pressed and a new condition is saved
+ private Runnable closeFunction; // this is called after a button is pressed and the editor should close
private ResourceType resourceType;
- public NewConditionEditor(String locatorId, HashSet<AlertCondition> conditions, ResourceType rtype, Runnable okFunc) {
+ public NewConditionEditor(String locatorId, HashSet<AlertCondition> conditions, ResourceType rtype,
+ Runnable closeFunc) {
super(locatorId);
this.conditions = conditions;
- this.okFunction = okFunc;
+ this.closeFunction = closeFunc;
this.resourceType = rtype;
this.supportsEvents = (rtype.getEventDefinitions() != null && rtype.getEventDefinitions().size() > 0);
@@ -174,26 +175,40 @@ public class NewConditionEditor extends LocatableDynamicForm {
conditionTypeSelectItem.setRedrawOnChange(true);
conditionTypeSelectItem.setWidth("*");
- SpacerItem spacer = new SpacerItem();
- spacer.setColSpan(2);
- spacer.setHeight(5);
+ SpacerItem spacer1 = new SpacerItem();
+ spacer1.setColSpan(2);
+ spacer1.setHeight(5);
- ButtonItem ok = new ButtonItem("buttonItem", "OK");
- ok.setColSpan(2);
- ok.setAlign(Alignment.CENTER);
+ SpacerItem spacer2 = new SpacerItem();
+ spacer2.setColSpan(2);
+ spacer2.setHeight(5);
+
+ ButtonItem ok = new ButtonItem("okButtonItem", "OK");
+ ok.setEndRow(false);
+ ok.setAlign(Alignment.RIGHT);
ok.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
if (validate(false)) {
saveNewCondition();
- okFunction.run();
+ closeFunction.run();
}
}
});
+ ButtonItem cancel = new ButtonItem("cancelButtonItem", "Cancel");
+ cancel.setStartRow(false);
+ cancel.setAlign(Alignment.LEFT);
+ cancel.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ closeFunction.run();
+ }
+ });
+
ArrayList<FormItem> formItems = new ArrayList<FormItem>();
formItems.add(conditionTypeSelectItem);
- formItems.add(spacer);
+ formItems.add(spacer1);
formItems.addAll(buildAvailabilityChangeFormItems());
if (supportsMetrics) {
formItems.addAll(buildMetricThresholdFormItems());
@@ -216,7 +231,9 @@ public class NewConditionEditor extends LocatableDynamicForm {
if (supportsResourceConfig) {
formItems.addAll(buildResourceConfigChangeFormItems());
}
+ formItems.add(spacer2);
formItems.add(ok);
+ formItems.add(cancel);
setFields(formItems.toArray(new FormItem[formItems.size()]));
};
commit 5135c435804aef06ae9f37b1cebe72f2d79f580e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 12:19:04 2010 -0400
get notification tab ready to support editing an existing notif as well as adding new ones. this adds double click handler
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index cffdd78..b8e4644 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -34,6 +34,9 @@ import com.smartgwt.client.types.Overflow;
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.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
@@ -42,7 +45,6 @@ import org.rhq.core.domain.alert.notification.AlertNotification;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.Table;
import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
-import org.rhq.enterprise.gui.coregui.client.components.table.Table.SelectionEnablement;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -140,57 +142,6 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
if (!formBuilt) {
table = new NotificationTable(extendLocatorId("notificationsTable"));
- table.setShowHeader(false);
-
- final NotificationDataSource dataSource = new NotificationDataSource();
- table.setDataSource(dataSource);
-
- table.addTableAction(this.extendLocatorId("add"), "Add", SelectionEnablement.ALWAYS, null,
- new TableAction() {
- @Override
- public void executeAction(ListGridRecord[] selection) {
- final Window winModal = new LocatableWindow(NotificationsAlertDefinitionForm.this
- .extendLocatorId("newNotificationEditorWindow"));
- winModal.setTitle("Add Notification");
- winModal.setOverflow(Overflow.VISIBLE);
- winModal.setShowMinimizeButton(false);
- 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();
- }
- });
-
- // NewNotificationEditor newEditor = new NewNotificationEditor(
- // extendLocatorId("newNotificationEditor"), notifications, new Runnable() {
- // @Override
- // public void run() {
- // winModal.markForDestroy();
- // table.refresh();
- // }
- // });
- /// winModal.addItem(newEditor);
- winModal.show();
- }
- });
- table.addTableAction(this.extendLocatorId("delete"), "Delete", SelectionEnablement.ANY, "Are you sure?",
- new TableAction() {
- @Override
- public void executeAction(ListGridRecord[] selection) {
- for (ListGridRecord record : selection) {
- AlertNotification notif = dataSource.copyValues(record);
- notifications.remove(notif);
- }
- table.refresh();
- }
- });
addMember(table);
@@ -268,6 +219,10 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
private class NotificationTable extends Table {
public NotificationTable(String locatorId) {
super(locatorId);
+ setShowHeader(false);
+
+ final NotificationDataSource dataSource = new NotificationDataSource();
+ setDataSource(dataSource);
}
@Override
@@ -277,6 +232,74 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
ListGridField configField = new ListGridField(FIELD_CONFIGURATION, "Configuration");
configField.setWidth("75%");
getListGrid().setFields(senderField, configField);
+
+ getListGrid().addDoubleClickHandler(new DoubleClickHandler() {
+ @Override
+ public void onDoubleClick(DoubleClickEvent event) {
+ ListGrid listGrid = (ListGrid) event.getSource();
+ ListGridRecord[] selectedRows = listGrid.getSelection();
+ if (selectedRows != null && selectedRows.length == 1) {
+ AlertNotification notif = ((NotificationDataSource) getDataSource())
+ .copyValues(selectedRows[0]);
+ popupNotificationEditor(notif);
+ }
+ }
+ });
+
+ addTableAction(this.extendLocatorId("add"), "Add", SelectionEnablement.ALWAYS, null, new TableAction() {
+ @Override
+ public void executeAction(ListGridRecord[] selection) {
+ popupNotificationEditor(null);
+ }
+ });
+
+ addTableAction(this.extendLocatorId("delete"), "Delete", SelectionEnablement.ANY, "Are you sure?",
+ new TableAction() {
+ @Override
+ public void executeAction(ListGridRecord[] selection) {
+ for (ListGridRecord record : selection) {
+ AlertNotification notif = ((NotificationDataSource) getDataSource()).copyValues(record);
+ notifications.remove(notif);
+ }
+ table.refresh();
+ }
+ });
+ }
+
+ private void popupNotificationEditor(AlertNotification notifToEdit) {
+ final Window winModal = new LocatableWindow(NotificationsAlertDefinitionForm.this
+ .extendLocatorId("notificationEditorWindow"));
+ if (notifToEdit == null) {
+ winModal.setTitle("Add Notification");
+ } else {
+ winModal.setTitle("Edit Notification");
+ }
+ winModal.setOverflow(Overflow.VISIBLE);
+ winModal.setShowMinimizeButton(false);
+ 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();
+ }
+ });
+
+ // NewNotificationEditor newEditor = new NewNotificationEditor(
+ // extendLocatorId("newNotificationEditor"), notifications, new Runnable() {
+ // @Override
+ // public void run() {
+ // winModal.markForDestroy();
+ // table.refresh();
+ // }
+ // });
+ /// winModal.addItem(newEditor);
+ winModal.show();
}
}
}
commit 7f0ee950e729a69708326e6ad7b5c8df7ebd749f
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 11:01:51 2010 -0400
Adding more tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index 1658e18..bc0d6c5 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -24,8 +24,6 @@
package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager;
-import javax.transaction.NotSupportedException;
-import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -38,12 +36,11 @@ import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.AssertUtils;
-import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginConfigDefFor;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginDescriptor;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- EntityManager entityMgr;
-
PluginDescriptor originalDescriptor;
PluginDescriptor updatedDescriptor;
@@ -63,16 +60,37 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
@Test
- public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
+ public void addNewUngroupedPropertyDef() {
initConfigDefs("servers[name='MyServer1']", "test");
- PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar");
- PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar");
+ String propertyName = "newUngroupedProperty";
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName);
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName);
assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition",
expected, actual);
}
+ @Test
+ public void removePropertyDefThatIsNotInNewDescriptor() {
+ initConfigDefs("servers[name='MyServer1']", "test");
+
+ assertNull("The property exists in version 1 but not in version 2 of the plugin; therefore, it should be " +
+ "removed the configuration definition", originalConfigDef.get("v1OnlyProperty"));
+ }
+
+ @Test
+ public void doNotModifyExistingPropertyDefThatIsNotModifiedInUpgrade() {
+ initConfigDefs("servers[name='MyServer1']", "test");
+
+ String propertyName = "myExistingProperty";
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName);
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName);
+
+ assertPropertyDefinitionMatches("Existing property that is not changed in new version of pluign should " +
+ "not change", expected, actual);
+ }
+
// void assertGroupDefinitionExists() {
// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
// if (groupDef.getName().equals("groupToBeRemoved")) {
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
index 0c7d362..131cff7 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -7,7 +7,15 @@
<server name="MyServer1">
<plugin-configuration>
- <c:simple-property name="myProperty1"/>
+ <c:simple-property name="myExistingProperty"
+ type="integer"
+ units="megabytes"
+ default="256"
+ required="true"
+ description="My Existing Property"/>
+
+ <c:simple-property name="v1OnlyProperty"
+ description="This property exists only in version 1 of the plugin"/>
</plugin-configuration>
</server>
</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
index 8997f8f..2c94f72 100644
--- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -7,8 +7,22 @@
<server name="MyServer1">
<plugin-configuration>
- <c:simple-property name="myProperty1"/>
- <c:simple-property name="bar" description="bar property"/>
+ <c:simple-property name="myExistingProperty"
+ type="integer"
+ units="megabytes"
+ default="256"
+ required="true"
+ description="My Existing Property"/>
+
+ <c:simple-property name="newUngroupedProperty"
+ description="A new, ungrouped property"
+ activationPolicy="immediate"
+ default="new property"
+ required="true"
+ displayName="My New Ungrouped Property"
+ readOnly="true"
+ type="longString"
+ summary="false"/>
</plugin-configuration>
</server>
</plugin>
commit 423bfa5e3c976746bd61d917464eff8da2cbac46
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:52:34 2010 -0400
Guarding against hibernate exception that can occur when using delete-orphan
While adding/updating tests I was running into,
HibernateException: A collection with cascade="all-delete-orphan" was no longer
referenced by the owning entity instance
The solution is to make sure that the managed collection references do
not change
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
index 101d894..782dc99 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
@@ -78,7 +78,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@IndexColumn(name = "order_index")
@OneToMany(mappedBy = "propertyDefinitionSimple", fetch = FetchType.EAGER)
- private List<PropertyDefinitionEnumeration> enumeratedValues;
+ private List<PropertyDefinitionEnumeration> enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>();
/**
* This property's default value. This field should have a non-null value for properties whose
@@ -122,10 +122,6 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
*/
@NotNull
public Set<Constraint> getConstraints() {
- if (this.constraints == null) {
- this.constraints = new LinkedHashSet<Constraint>();
- }
-
return this.constraints;
}
@@ -148,15 +144,11 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
*/
@NotNull
public List<PropertyDefinitionEnumeration> getEnumeratedValues() {
- if (this.enumeratedValues == null) {
- this.enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>();
- }
-
return this.enumeratedValues;
}
public void setEnumeratedValues(List<PropertyDefinitionEnumeration> enumeratedValues, boolean allowCustomEnumValue) {
- this.enumeratedValues = enumeratedValues;
+ addEnumeratedValues(enumeratedValues.toArray(new PropertyDefinitionEnumeration[enumeratedValues.size()]));
this.allowCustomEnumeratedValue = allowCustomEnumValue;
ensureOrdering();
}
commit d6f69c80499f3e959825ab50b613ad45cd472404
Merge: b56a7c0... 3c5a00e...
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:21:43 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit 3c5a00e40f93589f3fd333502d3b0d4ffde0c743
Author: Joseph Marques <joseph(a)redhat.com>
Date: Thu Sep 30 22:19:06 2010 -0400
cosmetic - reformatting
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 242aa4b..8da5ef0 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
@@ -82,6 +82,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
clearMessage();
this.label = createLabel(message);
+
addMember(this.label);
markForRedraw();
commit 4288e5e7ec99e01767be54eb91a2698b2e515036
Author: Joseph Marques <joseph(a)redhat.com>
Date: Thu Sep 30 22:18:48 2010 -0400
tweak display of top/center message
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 02d3e33..242aa4b 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
@@ -40,8 +40,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
private static final String LOCATOR_ID = "MessageBar";
private static final int AUTO_HIDE_DELAY_MILLIS = 30000; // 30 seconds
- private static final Map<Message.Severity, String> SEVERITY_TO_STYLE_NAME_MAP =
- new HashMap<Message.Severity, String>();
+ private static final Map<Message.Severity, String> SEVERITY_TO_STYLE_NAME_MAP = new HashMap<Message.Severity, String>();
static {
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Info, "InfoBlock");
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Warning, "WarnBlock");
@@ -49,8 +48,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Fatal, "FatalBlock");
}
- private static final Map<Message.Severity, String> SEVERITY_TO_ICON_MAP =
- new HashMap<Message.Severity, String>();
+ private static final Map<Message.Severity, String> SEVERITY_TO_ICON_MAP = new HashMap<Message.Severity, String>();
static {
SEVERITY_TO_ICON_MAP.put(Message.Severity.Info, "info/icn_info_blue.png");
SEVERITY_TO_ICON_MAP.put(Message.Severity.Warning, "info/icn_info_orange.png");
@@ -70,7 +68,6 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
super.onDraw();
setWidth100();
- setAutoHeight();
setHeight(35);
setAlign(Alignment.CENTER);
@@ -112,17 +109,15 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
private Label createLabel(Message message) {
Label label = new Label();
- String contents = (message.getConciseMessage() != null) ?
- message.getConciseMessage() : message.getDetailedMessage();
+ String contents = (message.getConciseMessage() != null) ? message.getConciseMessage() : message
+ .getDetailedMessage();
label.setContents(contents);
+ label.setAlign(Alignment.CENTER);
String styleName = (contents != null) ? SEVERITY_TO_STYLE_NAME_MAP.get(message.getSeverity()) : null;
label.setStyleName(styleName);
- label.setAutoHeight();
- label.setHeight(30);
- label.setAutoWidth();
- label.setWidth("75%");
+ label.setWidth(400);
String icon = (contents != null) ? SEVERITY_TO_ICON_MAP.get(message.getSeverity()) : null;
label.setIcon(icon);
commit be9e31c733dcb1e75299025ed32caa3af28584a1
Author: Joseph Marques <joseph(a)redhat.com>
Date: Thu Sep 30 19:14:57 2010 -0400
minor fixes to SearchBarPanel for maintainability
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
index 0d920ef..657c4d3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java
@@ -29,7 +29,6 @@ import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.SpacerItem;
-import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.grid.ListGridField;
@@ -44,6 +43,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
/**
* @author Greg Hinkle
+ * @author Joseph Marques
*/
public class SearchBarPane extends LocatableHLayout {
@@ -54,6 +54,31 @@ public class SearchBarPane extends LocatableHLayout {
setHeight(28);
}
+ public enum SearchType {
+ RESOURCE("Resources"), //
+ GROUP("Resource Groups");
+
+ private String displayName;
+
+ private SearchType(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public static String[] getValueMap() {
+ SearchType[] searchTypes = SearchType.values();
+ String[] results = new String[searchTypes.length];
+ int i = 0;
+ for (SearchType nextType : searchTypes) {
+ results[i++] = nextType.getDisplayName();
+ }
+ return results;
+ }
+ }
+
@Override
protected void onDraw() {
super.onDraw();
@@ -63,9 +88,10 @@ public class SearchBarPane extends LocatableHLayout {
form.setColWidths("120", "140", "400");
final SelectItem searchType = new SelectItem("searchType", "Search");
+ String[] valueMap = SearchType.getValueMap();
+ searchType.setValueMap(valueMap);
+ searchType.setValue(valueMap[0]);
searchType.setWidth(120);
- searchType.setValueMap("Resources", "Resource Groups"/*, "Bundles", "Packages", "Users", "Roles"*/);
- searchType.setValue("Resources");
searchType.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent event) {
@@ -74,21 +100,7 @@ public class SearchBarPane extends LocatableHLayout {
});
ComboBoxItem resourceSearch = getResourceComboBox();
- resourceSearch.setShowIfCondition(new FormItemIfFunction() {
- public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
- return form.getValueAsString("searchType").equals("Resources");
- }
- });
-
ComboBoxItem groupSearch = getGroupComboBox();
- groupSearch.setShowIfCondition(new FormItemIfFunction() {
- public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
- return form.getValueAsString("searchType").equals("Resource Groups");
- }
- });
-
- TextItem query = new TextItem("query");
- query.setShowTitle(false);
ButtonItem search = new ButtonItem("Search", "Search");
search.setStartRow(false);
@@ -102,14 +114,7 @@ public class SearchBarPane extends LocatableHLayout {
}
private ComboBoxItem getResourceComboBox() {
-
- final ComboBoxItem comboBox = new ComboBoxItem("query", "Query");
- comboBox.setWidth(400);
- comboBox.setShowTitle(false);
- comboBox.setHint("resource search");
- comboBox.setShowHintInField(true);
-
- comboBox.setOptionDataSource(new ResourceDatasource());
+ final ComboBoxItem comboBox = getBaseComboBox(SearchType.RESOURCE);
ListGridField nameField = ResourceDataSourceField.NAME.getListGridField(250);
ListGridField descriptionField = ResourceDataSourceField.DESCRIPTION.getListGridField();
@@ -124,38 +129,13 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.setValueField("id");
comboBox.setDisplayField(ResourceDataSourceField.NAME.propertyName());
- comboBox.setPickListWidth(800);
- comboBox.setTextMatchStyle(TextMatchStyle.SUBSTRING);
- comboBox.setCompleteOnTab(true);
-
- comboBox.addChangedHandler(new ChangedHandler() {
- public void onChanged(ChangedEvent changedEvent) {
- try {
- Integer resourceId = (Integer) changedEvent.getValue();
- comboBox.setValue("");
-
- String link = LinkManager.getResourceLink(resourceId);
- if (!link.contains("#")) {
- com.google.gwt.user.client.Window.Location.assign(link);
- } else {
- History.newItem(link.substring(1));
- }
- } catch (Exception e) {
- }
- }
- });
+ comboBox.setOptionDataSource(new ResourceDatasource());
return comboBox;
}
private ComboBoxItem getGroupComboBox() {
- final ComboBoxItem comboBox = new ComboBoxItem("query", "Query");
- comboBox.setWidth(400);
- comboBox.setShowTitle(false);
- comboBox.setHint("group search");
- comboBox.setShowHintInField(true);
-
- comboBox.setOptionDataSource(new ResourceGroupsDataSource());
+ final ComboBoxItem comboBox = getBaseComboBox(SearchType.GROUP);
ListGridField nameField = ResourceGroupDataSourceField.NAME.getListGridField(250);
ListGridField descriptionField = ResourceGroupDataSourceField.DESCRIPTION.getListGridField();
@@ -167,27 +147,57 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.setValueField("id");
comboBox.setDisplayField(ResourceGroupDataSourceField.NAME.propertyName());
+ comboBox.setOptionDataSource(new ResourceGroupsDataSource());
+
+ return comboBox;
+ }
+
+ private ComboBoxItem getBaseComboBox(final SearchType searchType) {
+ final ComboBoxItem comboBox = new ComboBoxItem("query", "Query");
+ comboBox.setWidth(400);
+ comboBox.setShowTitle(false);
+ comboBox.setHint("search");
+ comboBox.setShowHintInField(true);
+
comboBox.setPickListWidth(800);
comboBox.setTextMatchStyle(TextMatchStyle.SUBSTRING);
comboBox.setCompleteOnTab(true);
comboBox.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
- try {
- Integer groupId = (Integer) changedEvent.getValue();
- comboBox.setValue("");
-
- String link = LinkManager.getResourceGroupLink(groupId);
- if (!link.contains("#")) {
- com.google.gwt.user.client.Window.Location.assign(link);
- } else {
- History.newItem(link.substring(1));
- }
- } catch (Exception e) {
+ //System.out.println("ChangedEvent: " + changedEvent.getValue());
+
+ Object intermediate = changedEvent.getValue();
+ if (!(intermediate instanceof Integer)) {
+ return;
+ }
+
+ Integer id = (Integer) changedEvent.getValue();
+ comboBox.setValue("");
+
+ String link = null;
+ if (searchType == SearchType.RESOURCE) {
+ link = LinkManager.getResourceLink(id);
+ } else if (searchType == SearchType.GROUP) {
+ link = LinkManager.getResourceGroupLink(id);
+ } else {
+ throw new IllegalArgumentException("There is no global search type for " + searchType);
+ }
+
+ if (!link.contains("#")) {
+ com.google.gwt.user.client.Window.Location.assign(link);
+ } else {
+ History.newItem(link.substring(1));
}
}
});
+ comboBox.setShowIfCondition(new FormItemIfFunction() {
+ public boolean execute(FormItem formItem, Object o, DynamicForm dynamicForm) {
+ return dynamicForm.getValueAsString("searchType").equals(searchType.getDisplayName());
+ }
+ });
+
return comboBox;
}
commit acf0d09358c36e094bb041ebf5106a921009a51a
Author: Joseph Marques <joseph(a)redhat.com>
Date: Thu Sep 30 17:30:43 2010 -0400
prevent exceptions when using integer-based filters that might pass empty string instead of null
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index 1184697..a717108 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -286,7 +286,7 @@ public abstract class RPCDataSource<T> extends DataSource {
S result = null;
Object value = criteriaMap.get(paramName);
- if (value == null) {
+ if (value == null || value.toString().equals("")) {
// nothing to do, result is already null
} else {
String strValue = value.toString();
commit 3f5cc3fd0018b723b4082e9f31b20d94bed328c8
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 30 21:55:29 2010 -0400
implement v2 of the new MessageCenter API; fix a few bugs in resource and plugin config relating to authz checking and to Save button
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
index 5e66764..9aaa0e9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
@@ -39,7 +39,7 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.MetadataType;
-import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
/**
@@ -129,13 +129,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new TransientMessage("[" + result + "] alert definitions enabled", Severity.Info));
+ new Message("[" + result + "] alert definitions enabled.", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleTransientError("Failed to enable alert definitions", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to enable alert definitions", caught);
}
});
}
@@ -156,13 +156,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new TransientMessage("[" + result + "] alert definitions disabled", Severity.Info));
+ new Message("[" + result + "] alert definitions disabled.", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleTransientError("Failed to disable alert definitions", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to disable alert definitions.", caught);
}
});
}
@@ -183,13 +183,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new TransientMessage("[" + result + "] alert definitions deleted", Severity.Info));
+ new Message("[" + result + "] alert definitions deleted.", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleTransientError("Failed to delete alert definitions", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to delete alert definitions.", caught);
}
});
}
@@ -202,13 +202,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new TransientMessage("Alert definition is created", Severity.Info));
+ new Message("Alert definition is created", Severity.Info));
alertDefinition.setId(result.intValue());
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleTransientError("Failed to create alert definition", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to create alert definition.", caught);
}
});
} else {
@@ -217,12 +217,12 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(AlertDefinition result) {
CoreGUI.getMessageCenter().notify(
- new TransientMessage("Alert definition is updated", Severity.Info));
+ new Message("Alert definition is updated.", Severity.Info));
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleTransientError("Failed to update alert definition", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to update alert definition.", caught);
}
});
}
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 544ded9..eb1e2d2 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
@@ -159,8 +159,8 @@ public class ConfigurationEditor extends LocatableVLayout {
private boolean readOnly = false;
private Set<String> invalidPropertyNames = new HashSet<String>();
- private Set<ValidationStateChangeListener> validationStateChangeListeners =
- new HashSet<ValidationStateChangeListener>();
+ private Set<PropertyValueChangeListener> validationStateChangeListeners =
+ new HashSet<PropertyValueChangeListener>();
public static enum ConfigType {
plugin, resource
@@ -218,7 +218,7 @@ public class ConfigurationEditor extends LocatableVLayout {
return this.valuesManager.hasErrors();
}
- public void addValidationStateChangeListener(ValidationStateChangeListener validationStateChangeListener) {
+ public void addValidationStateChangeListener(PropertyValueChangeListener validationStateChangeListener) {
this.validationStateChangeListeners.add(validationStateChangeListener);
}
@@ -250,11 +250,11 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.resourceConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getResourceConfigurationDefinition();
if (definition == null) {
loadingLabel.hide();
- showError("No configuration supported for this resource");
+ showError("Configuration is not supported by this Resource.");
}
reload();
}
@@ -276,10 +276,10 @@ public class ConfigurationEditor extends LocatableVLayout {
EnumSet.of(ResourceTypeRepository.MetadataType.pluginConfigurationDefinition),
new ResourceTypeRepository.TypesLoadedCallback() {
public void onTypesLoaded(Map<Integer, ResourceType> types) {
- System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
+ //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start));
definition = types.get(resourceTypeId).getPluginConfigurationDefinition();
if (definition == null) {
- showError("No configuration supported for this resource");
+ showError("Connection settings are not supported by this Resource.");
}
reload();
}
@@ -556,6 +556,10 @@ public class ConfigurationEditor extends LocatableVLayout {
}
}
+ public Set<String> getInvalidPropertyNames() {
+ return this.invalidPropertyNames;
+ }
+
private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap,
PropertyMap propertyMap) {
// create the property grid
@@ -564,7 +568,7 @@ public class ConfigurationEditor extends LocatableVLayout {
propertyGrid.getValuesField().setName("Value");
// create the editors
- HashMap<String, FormItem> editorsMap = new HashMap<String, FormItem>();
+ Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
TextItem textEditor = new TextItem();
editorsMap.put("simpleText", textEditor);
@@ -768,8 +772,8 @@ public class ConfigurationEditor extends LocatableVLayout {
return record;
}
- private FormItem buildSimpleField(ArrayList<FormItem> fields, PropertyDefinitionSimple propertyDefinition,
- boolean oddRow, Property property) {
+ private FormItem buildSimpleField(ArrayList<FormItem> fields, final PropertyDefinitionSimple propertyDefinition,
+ boolean oddRow, final Property property) {
final PropertySimple propertySimple = (PropertySimple) property;
FormItem valueItem = null;
@@ -887,10 +891,11 @@ public class ConfigurationEditor extends LocatableVLayout {
ConfigurationEditor.this.invalidPropertyNames.add(propertySimple.getName());
}
boolean isValidNow = ConfigurationEditor.this.invalidPropertyNames.isEmpty();
- if (isValidNow != wasValidBefore) {
- for (ValidationStateChangeListener validationStateChangeListener : ConfigurationEditor.this.validationStateChangeListeners) {
- validationStateChangeListener.validationStateChanged(isValidNow);
- }
+ boolean validationStateChanged = (isValidNow != wasValidBefore);
+ for (PropertyValueChangeListener validationStateChangeListener : ConfigurationEditor.this.validationStateChangeListeners) {
+ PropertyValueChangeEvent event = new PropertyValueChangeEvent(property, propertyDefinition,
+ validationStateChanged, ConfigurationEditor.this.invalidPropertyNames);
+ validationStateChangeListener.propertyValueChanged(event);
}
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeEvent.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeEvent.java
new file mode 100644
index 0000000..2ba852d
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeEvent.java
@@ -0,0 +1,59 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.components.configuration;
+
+import java.util.Set;
+
+import org.rhq.core.domain.configuration.Property;
+import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+
+/**
+ * @author Ian Springer
+ */
+public class PropertyValueChangeEvent {
+ private Property property;
+ private PropertyDefinition propertyDefinition;
+ private boolean validationStateChanged;
+ private Set<String> invalidPropertyNames;
+
+ public PropertyValueChangeEvent(Property property, PropertyDefinition propertyDefinition, boolean validationStatechanged,
+ Set<String> invalidPropertyNames) {
+ this.property = property;
+ this.propertyDefinition = propertyDefinition;
+ this.validationStateChanged = validationStatechanged;
+ this.invalidPropertyNames = invalidPropertyNames;
+ }
+
+ public Property getProperty() {
+ return property;
+ }
+
+ public PropertyDefinition getPropertyDefinition() {
+ return propertyDefinition;
+ }
+
+ public boolean isValidationStateChanged() {
+ return validationStateChanged;
+ }
+
+ public Set<String> getInvalidPropertyNames() {
+ return invalidPropertyNames;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeListener.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeListener.java
new file mode 100644
index 0000000..0ed46f4
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/PropertyValueChangeListener.java
@@ -0,0 +1,30 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.components.configuration;
+
+/**
+ * A listener that can register to be notified by a {@link ConfigurationEditor} when a configuration property's value
+ * changes.
+ *
+ * @author Ian Springer
+ */
+public interface PropertyValueChangeListener {
+ void propertyValueChanged(PropertyValueChangeEvent event);
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java
deleted file mode 100644
index 154c731..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright 2010, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * 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.components.configuration;
-
-/**
- * @author Ian Springer
- */
-public interface ValidationStateChangeListener {
- void validationStateChanged(boolean isValid);
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
index 1008b83..4e66027 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
@@ -37,7 +37,6 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupListView;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
/**
* A wizard for creating a new Resource group.
@@ -92,13 +91,11 @@ public class GroupCreateWizard extends AbstractWizard {
public void onSuccess(ResourceGroup result) {
String groupUrl = LinkManager.getResourceGroupLink(result.getId());
- CoreGUI.getMessageCenter().notify(
- new TransientMessage("Resource group created. [<a href='" + groupUrl + "'>View Group</a>]",
- Message.Severity.Info));
- CoreGUI.getMessageCenter().notify(
- new Message("Created new " + result.getGroupCategory().name().toLowerCase() + " Resource group '"
- + result.getName() + "' with " + memberStep.getSelectedResourceIds().length + " members.",
- Message.Severity.Info));
+ String conciseMessage = "Resource group created. [<a href='" + groupUrl + "'>View Group</a>]";
+ String detailedMessage =
+ "Created new " + result.getGroupCategory().name().toLowerCase() + " Resource group '"
+ + result.getName() + "' with " + memberStep.getSelectedResourceIds().length + " members.";
+ CoreGUI.getMessageCenter().notify(new Message(conciseMessage, detailedMessage));
resourceGroupListView.refresh();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
index b002f0b..f5afb2c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configuration;
+import java.util.EnumSet;
+
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.IButton;
@@ -33,19 +35,21 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
-import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeEvent;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener;
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.MessageCenter;
-import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * A view for editing a Resource's configuration.
+ *
* @author Greg Hinkle
* @author Ian Springer
*/
-public class ResourceConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
+public class ResourceConfigurationEditView extends LocatableVLayout implements PropertyValueChangeListener {
private Resource resource;
private ResourcePermission resourcePermission;
private ConfigurationEditor editor;
@@ -76,20 +80,30 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
save();
}
});
- this.saveButton.disable();
toolStrip.addMember(saveButton);
+
+ addMember(toolStrip);
+ reloadConfiguration();
- editor = new ConfigurationEditor(this.getLocatorId(), resource.getId(), resource.getResourceType().getId());
+ if (!this.resourcePermission.isConfigureWrite()) {
+ Message message = new Message("You do not have permission to edit this Resource's configuration.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ CoreGUI.getMessageCenter().notify(message);
+ }
+ }
+
+ private void reloadConfiguration() {
+ this.saveButton.disable();
+ if (editor != null) {
+ editor.destroy();
+ removeMember(editor);
+ }
+ editor = new ConfigurationEditor(this.extendLocatorId("Editor"), resource.getId(),
+ resource.getResourceType().getId());
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
editor.setReadOnly(!this.resourcePermission.isConfigureWrite());
-
- addMember(toolStrip);
addMember(editor);
-
- Message message = new TransientMessage("You do not have permission to edit this Resource's configuration.",
- Message.Severity.Info, true);
- CoreGUI.getMessageCenter().notify(message);
}
private void save() {
@@ -103,24 +117,31 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
public void onSuccess(ResourceConfigurationUpdate result) {
CoreGUI.getMessageCenter().notify(
- new Message("Configuration updated for Resource [" + resource.getName() + "].",
+ new Message("Configuration updated.",
+ "Configuration updated for Resource [" + resource.getName() + "].",
Message.Severity.Info));
-
+ reloadConfiguration();
}
});
}
@Override
- public void validationStateChanged(boolean isValid) {
+ public void propertyValueChanged(PropertyValueChangeEvent event) {
MessageCenter messageCenter = CoreGUI.getMessageCenter();
Message message;
- if (isValid) {
- this.saveButton.enable();
- message = new TransientMessage("All configuration properties now have valid values, so the configuration can now be saved.", Message.Severity.Info);
+ if (event.isValidationStateChanged()) {
+ if (event.getInvalidPropertyNames().isEmpty()) {
+ this.saveButton.enable();
+ message = new Message("All configuration properties now have valid values, so the configuration can now be saved.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient));
+ } else {
+ this.saveButton.disable();
+ message = new Message("One or more configuration properties have invalid values. The values must be corrected before the configuration can be saved.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ }
+ messageCenter.notify(message);
} else {
- this.saveButton.disable();
- message = new TransientMessage("One or more configuration properties have invalid values. The values must be corrected before the configuration can be saved.", Message.Severity.Error, true);
+ this.saveButton.enable();
}
- messageCenter.notify(message);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
index 1483cfa..4556da0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.inventory;
+import java.util.EnumSet;
+
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.events.ClickEvent;
@@ -32,19 +34,21 @@ import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
-import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeEvent;
+import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener;
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.MessageCenter;
-import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
+ * A view for editing a Resource's plugin configuration (aka connection settings).
+ *
* @author Greg Hinkle
* @author Ian Springer
*/
-public class PluginConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
+public class PluginConfigurationEditView extends LocatableVLayout implements PropertyValueChangeListener {
private Resource resource;
private ResourcePermission resourcePermission;
private ConfigurationEditor editor;
@@ -76,20 +80,30 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
}
});
this.saveButton.disable();
- toolStrip.addMember(saveButton);
+ toolStrip.addMember(this.saveButton);
+
+ addMember(toolStrip);
+ reloadConfiguration();
+
+ if (!this.resourcePermission.isInventory()) {
+ Message message = new Message("You do not have permission to edit this Resource's connection settings.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient));
+ CoreGUI.getMessageCenter().notify(message);
+ }
+ }
- editor = new ConfigurationEditor(this.getLocatorId(), resource.getId(), resource.getResourceType().getId(),
- ConfigurationEditor.ConfigType.plugin);
+ private void reloadConfiguration() {
+ this.saveButton.disable();
+ if (editor != null) {
+ editor.destroy();
+ removeMember(editor);
+ }
+ editor = new ConfigurationEditor(extendLocatorId("Editor"), resource.getId(),
+ resource.getResourceType().getId(), ConfigurationEditor.ConfigType.plugin);
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
editor.setReadOnly(!this.resourcePermission.isInventory());
-
- addMember(toolStrip);
addMember(editor);
-
- Message message = new TransientMessage("You do not have permission to edit this Resource's connection properties.",
- Message.Severity.Info, true);
- CoreGUI.getMessageCenter().notify(message);
}
private void save() {
@@ -103,24 +117,31 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
public void onSuccess(PluginConfigurationUpdate result) {
CoreGUI.getMessageCenter().notify(
- new Message("Connection settings updated for Resource [" + resource.getName() + "].",
+ new Message("Connection settings updated.",
+ "Connection settings updated for Resource [" + resource.getName() + "].",
Message.Severity.Info));
-
+ reloadConfiguration();
}
});
}
@Override
- public void validationStateChanged(boolean isValid) {
+ public void propertyValueChanged(PropertyValueChangeEvent event) {
MessageCenter messageCenter = CoreGUI.getMessageCenter();
Message message;
- if (isValid) {
- this.saveButton.enable();
- message = new TransientMessage("All connection properties now have valid values, so the configuration can now be saved.", Message.Severity.Info);
+ if (event.isValidationStateChanged()) {
+ if (event.getInvalidPropertyNames().isEmpty()) {
+ this.saveButton.enable();
+ message = new Message("All connection settings now have valid values, so the settings can now be saved.",
+ Message.Severity.Info, EnumSet.of(Message.Option.Transient));
+ } else {
+ this.saveButton.disable();
+ message = new Message("One or more connection settings have invalid values. The values must be corrected before the settings can be saved.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient, Message.Option.Sticky));
+ }
+ messageCenter.notify(message);
} else {
- this.saveButton.disable();
- message = new TransientMessage("One or more connection properties have invalid values. The values must be corrected before the configuration can be saved.", Message.Severity.Error, true);
+ this.saveButton.enable();
}
- messageCenter.notify(message);
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
index 6e5f80b..49bb67e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
@@ -20,31 +20,21 @@ package org.rhq.enterprise.gui.coregui.client.util;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
/**
* @author Greg Hinkle
*/
public class ErrorHandler {
-
public void handleError(String message) {
handleError(message, null);
}
public void handleError(String message, Throwable t) {
- Message errorMessage = new Message(message, (t == null) ? null : t.toString(), Message.Severity.Error);
- CoreGUI.getMessageCenter().notify(errorMessage);
-
- if (t != null) {
- t.printStackTrace();
- }
- }
-
- public void handleTransientError(String message, Throwable t) {
- Message errorMessage = new TransientMessage(message, (t == null) ? null : t.toString(), Message.Severity.Error);
+ Message errorMessage = new Message(message, (t == null) ? null : t.toString(), Message.Severity.Fatal);
CoreGUI.getMessageCenter().notify(errorMessage);
if (t != null) {
+ System.err.println(message);
t.printStackTrace();
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 97cc7ab..429ef36 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -19,36 +19,55 @@
package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.Date;
+import java.util.EnumSet;
/**
+ * A message to be displayed to the user in one or more places.
+ *
* @author Greg Hinkle
+ * @author Ian Springer
*/
@SuppressWarnings({"UnnecessarySemicolon"})
public class Message {
- protected String title;
- protected String detail;
+ protected String conciseMessage;
+ protected String detailedMessage;
protected Date fired = new Date();
protected Severity severity;
+ protected EnumSet<Option> options;
// TODO: Add Debug severity?
- public enum Severity { Info, Warning, Error };
+ public enum Severity { Info, Warning, Error, Fatal };
+ public enum Option { Transient, Sticky, BackgroundJobResult };
+
+ public Message(String conciseMessage, Severity severity) {
+ this(conciseMessage, null, severity);
+ }
+
+ public Message(String conciseMessage, String detailedMessage) {
+ this(conciseMessage, detailedMessage, null);
+ }
+
+ public Message(String conciseMessage, String detailedMessage, Severity severity) {
+ this(conciseMessage, detailedMessage, severity, null);
+ }
- public Message(String title, Severity severity) {
- this(title, null, severity);
+ public Message(String conciseMessage, Severity severity, EnumSet<Option> options) {
+ this(conciseMessage, null, severity, options);
}
- public Message(String title, String detail, Severity severity) {
- this.title = title;
- this.detail = detail;
+ public Message(String conciseMessage, String detailedMessage, Severity severity, EnumSet<Option> options) {
+ this.conciseMessage = conciseMessage;
+ this.detailedMessage = detailedMessage;
this.severity = (severity != null) ? severity : Severity.Info;
+ this.options = (options != null) ? options : EnumSet.noneOf(Option.class);
}
- public String getTitle() {
- return title;
+ public String getConciseMessage() {
+ return conciseMessage;
}
- public String getDetail() {
- return detail;
+ public String getDetailedMessage() {
+ return detailedMessage;
}
public Date getFired() {
@@ -59,13 +78,26 @@ public class Message {
return severity;
}
+ public boolean isTransient() {
+ return options.contains(Option.Transient);
+ }
+
+ public boolean isSticky() {
+ return options.contains(Option.Sticky);
+ }
+
+ public boolean isBackgroundJobResult() {
+ return options.contains(Option.BackgroundJobResult);
+ }
+
@Override
public String toString() {
return "Message{" +
- "title='" + title + '\'' +
- ", detail='" + detail + '\'' +
- ", fired=" + fired +
- ", severity=" + severity +
+ "conciseMessage='" + this.conciseMessage + '\'' +
+ ", detailedMessage='" + this.detailedMessage + '\'' +
+ ", fired=" + this.fired +
+ ", severity=" + this.severity +
+ ", options=" + this.options +
'}';
}
}
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 b03499f..02d3e33 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
@@ -46,6 +46,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Info, "InfoBlock");
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Warning, "WarnBlock");
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Error, "ErrorBlock");
+ SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Fatal, "FatalBlock");
}
private static final Map<Message.Severity, String> SEVERITY_TO_ICON_MAP =
@@ -70,7 +71,7 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
setWidth100();
setAutoHeight();
- setHeight(40);
+ setHeight(35);
setAlign(Alignment.CENTER);
@@ -79,18 +80,16 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
@Override
public void onMessage(Message message) {
- if (message instanceof TransientMessage) {
- TransientMessage transientMessage = (TransientMessage)message;
-
+ if (!message.isBackgroundJobResult()) {
// First clear any previous message.
clearMessage();
- this.label = createLabel(transientMessage);
- addMember(this.label);
+ this.label = createLabel(message);
+ addMember(this.label);
markForRedraw();
// Auto-clear the message after 30 seconds unless it's been designated as sticky.
- if (!transientMessage.isSticky()) {
+ if (!message.isSticky()) {
Timer hideTimer = new Timer() {
@Override
public void run() {
@@ -113,17 +112,15 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
private Label createLabel(Message message) {
Label label = new Label();
- String contents = message.getTitle();
- if (message.getDetail() != null) {
- contents += ": " + message.getDetail();
- }
+ String contents = (message.getConciseMessage() != null) ?
+ message.getConciseMessage() : message.getDetailedMessage();
label.setContents(contents);
String styleName = (contents != null) ? SEVERITY_TO_STYLE_NAME_MAP.get(message.getSeverity()) : null;
label.setStyleName(styleName);
label.setAutoHeight();
- label.setHeight(35);
+ label.setHeight(30);
label.setAutoWidth();
label.setWidth("75%");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
index a3c29dd..a9070b1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
@@ -29,12 +29,14 @@ public class MessageCenter {
private LinkedList<Message> messages = new LinkedList<Message>();
private List<MessageListener> listeners = new ArrayList<MessageListener>();
- private static final int MAX_MESSAGES = 100;
+ private static final int MAX_MESSAGES = 50;
public void notify(Message message) {
- this.messages.add(message);
- if (messages.size() > MAX_MESSAGES) {
- messages.removeFirst();
+ if (!message.isTransient()) {
+ this.messages.add(message);
+ if (messages.size() > MAX_MESSAGES) {
+ messages.removeFirst();
+ }
}
for (MessageListener listener : listeners) {
listener.onMessage(message);
@@ -45,6 +47,11 @@ public class MessageCenter {
this.listeners.add(listener);
}
+ /**
+ * Returns a list of recently published non-transient messages.
+ *
+ * @return a list of recently published non-transient messages
+ */
public List<Message> getMessages() {
return messages;
}
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 5d81646..d51bc47 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
@@ -86,7 +86,7 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
MenuItem[] items = new MenuItem[messages.size()];
for (int i = 0, messagesSize = messages.size(); i < messagesSize; i++) {
final Message message = messages.get(i);
- MenuItem messageItem = new MenuItem(message.title, getSeverityIcon(message.severity));
+ MenuItem messageItem = new MenuItem(message.conciseMessage, getSeverityIcon(message.severity));
items[i] = messageItem;
@@ -116,7 +116,7 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
form.setWrapItemTitles(false);
StaticTextItem title = new StaticTextItem("title", "Title");
- title.setValue(message.title);
+ title.setValue(message.conciseMessage);
StaticTextItem severity = new StaticTextItem("severity", "Severity");
FormItemIcon severityIcon = new FormItemIcon();
@@ -129,7 +129,7 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
StaticTextItem detail = new StaticTextItem("detail", "Detail");
detail.setTitleOrientation(TitleOrientation.TOP);
- detail.setValue(message.detail);
+ detail.setValue(message.detailedMessage);
detail.setColSpan(2);
ButtonItem okButton = new ButtonItem("Ok", "Ok");
@@ -139,7 +139,7 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
form.setItems(title, severity, date, detail, okButton);
final Window window = new LocatableWindow(this.extendLocatorId("Message"));
- window.setTitle(message.title);
+ window.setTitle(message.conciseMessage);
window.setWidth(600);
window.setHeight(400);
window.setIsModal(true);
@@ -157,8 +157,8 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
}
public void onMessage(final Message message) {
- if (!(message instanceof TransientMessage)) {
- final Label label = new Label(message.title);
+ if (!message.isTransient()) {
+ final Label label = new Label(message.conciseMessage);
label.setMargin(5);
label.setAutoFit(true);
label.setHeight(25);
@@ -168,7 +168,7 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
label.setIcon(iconSrc);
- label.setTooltip(message.detail);
+ label.setTooltip(message.detailedMessage);
label.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
@@ -196,13 +196,14 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
private String getSeverityIcon(Message.Severity severity) {
String iconSrc = null;
switch (severity) {
- case Info:
+ case Info:
iconSrc = "info/icn_info_blue.png";
break;
- case Warning:
+ case Warning:
iconSrc = "info/icn_info_orange.png";
break;
- case Error:
+ case Error:
+ case Fatal:
iconSrc = "info/icn_info_red.png";
break;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java
deleted file mode 100644
index 318c4a5..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright 2010, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * 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.util.message;
-
-/**
- * @author Ian Springer
- */
-public class TransientMessage extends Message {
- private boolean sticky;
-
- public TransientMessage(String title, Severity severity) {
- super(title, severity);
- }
-
- public TransientMessage(String title, String detail, Severity severity) {
- super(title, detail, severity);
- }
-
- public TransientMessage(String title, Severity severity, boolean sticky) {
- this(title, null, severity, sticky);
- }
-
- public TransientMessage(String title, String detail, Severity severity, boolean sticky) {
- super(title, detail, severity);
- this.sticky = sticky;
- }
-
- public boolean isSticky() {
- return this.sticky;
- }
-}
commit dd8fc9bcd360542eb8933be9c34995d06e638fcb
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 17:28:16 2010 -0400
write transient messages when enabling/disabling/creating alert defs
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
index cbf368d..5e66764 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ResourceAlertDefinitionsView.java
@@ -39,7 +39,7 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository.MetadataType;
-import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
/**
@@ -129,13 +129,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new Message("[" + result + "] alert definitions enabled", Severity.Info));
+ new TransientMessage("[" + result + "] alert definitions enabled", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to enable alert definitions", caught);
+ CoreGUI.getErrorHandler().handleTransientError("Failed to enable alert definitions", caught);
}
});
}
@@ -156,13 +156,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new Message("[" + result + "] alert definitions disabled", Severity.Info));
+ new TransientMessage("[" + result + "] alert definitions disabled", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to disable alert definitions", caught);
+ CoreGUI.getErrorHandler().handleTransientError("Failed to disable alert definitions", caught);
}
});
}
@@ -183,13 +183,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
@Override
public void onSuccess(Integer result) {
CoreGUI.getMessageCenter().notify(
- new Message("[" + result + "] alert definitions deleted", Severity.Info));
+ new TransientMessage("[" + result + "] alert definitions deleted", Severity.Info));
ResourceAlertDefinitionsView.this.refresh();
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to delete alert definitions", caught);
+ CoreGUI.getErrorHandler().handleTransientError("Failed to delete alert definitions", caught);
}
});
}
@@ -201,13 +201,14 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
Integer.valueOf(resource.getId()), new AsyncCallback<Integer>() {
@Override
public void onSuccess(Integer result) {
- CoreGUI.getMessageCenter().notify(new Message("Alert definition is created", Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new TransientMessage("Alert definition is created", Severity.Info));
alertDefinition.setId(result.intValue());
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to create alert definition", caught);
+ CoreGUI.getErrorHandler().handleTransientError("Failed to create alert definition", caught);
}
});
} else {
@@ -215,12 +216,13 @@ public class ResourceAlertDefinitionsView extends AbstractAlertDefinitionsView {
alertDefinition, true, new AsyncCallback<AlertDefinition>() {
@Override
public void onSuccess(AlertDefinition result) {
- CoreGUI.getMessageCenter().notify(new Message("Alert definition is updated", Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new TransientMessage("Alert definition is updated", Severity.Info));
}
@Override
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to update alert definition", caught);
+ CoreGUI.getErrorHandler().handleTransientError("Failed to update alert definition", caught);
}
});
}
commit b3cf656d35e05a0c0b1130f994747900596a8f0e
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 17:27:56 2010 -0400
provide a convienence method to write out a transient error message
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
index d410c54..6e5f80b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.util;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
/**
* @author Greg Hinkle
@@ -38,4 +39,13 @@ public class ErrorHandler {
t.printStackTrace();
}
}
+
+ public void handleTransientError(String message, Throwable t) {
+ Message errorMessage = new TransientMessage(message, (t == null) ? null : t.toString(), Message.Severity.Error);
+ CoreGUI.getMessageCenter().notify(errorMessage);
+
+ if (t != null) {
+ t.printStackTrace();
+ }
+ }
}
commit efd0a83daf83a5e667dbf0f0352aa28f03b806ef
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 30 16:44:44 2010 -0400
add authz checks to resource and plugin config views - if the user doesn't have the needed perms, the config editor is put in read-only mode and a transient message is displayed to inform them why the config is not editable
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 b2c532d..05c37b6 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
@@ -238,7 +238,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.inventoryTab, this.inventoryChildren, canvas, visible, true);
visible = facets.contains(ResourceTypeFacet.PLUGIN_CONFIGURATION);
canvas = (visible) ? new PluginConfigurationEditView(this.inventoryTab.extendLocatorId("PluginConfigView"),
- resource) : null;
+ resourceComposite) : null;
updateSubTab(this.inventoryTab, this.inventoryConn, canvas, visible, true);
updateSubTab(this.inventoryTab, this.inventoryGroups, ResourceGroupListView.getGroupsOf(this.inventoryTab
.extendLocatorId("GroupsView"), resource.getId()), true, true);
@@ -275,7 +275,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
if (updateTab(this.configurationTab, facets.contains(ResourceTypeFacet.CONFIGURATION), resourcePermissions
.isConfigureRead())) {
updateSubTab(this.configurationTab, this.configCurrent, new ResourceConfigurationEditView(this
- .extendLocatorId("ResourceConfigView"), resource), true, true);
+ .extendLocatorId("ResourceConfigView"), resourceComposite), true, true);
updateSubTab(this.configurationTab, this.configHistory, ConfigurationHistoryView.getHistoryOf(
resource.getId()), true, true);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
index 9843339..b002f0b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
@@ -29,6 +29,8 @@ import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
@@ -45,13 +47,15 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class ResourceConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
private Resource resource;
+ private ResourcePermission resourcePermission;
private ConfigurationEditor editor;
private IButton saveButton;
- public ResourceConfigurationEditView(String locatorId, Resource resource) {
+ public ResourceConfigurationEditView(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
- this.resource = resource;
+ this.resource = resourceComposite.getResource();
+ this.resourcePermission = resourceComposite.getResourcePermission();
}
@Override
@@ -78,9 +82,14 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
editor = new ConfigurationEditor(this.getLocatorId(), resource.getId(), resource.getResourceType().getId());
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
+ editor.setReadOnly(!this.resourcePermission.isConfigureWrite());
addMember(toolStrip);
addMember(editor);
+
+ Message message = new TransientMessage("You do not have permission to edit this Resource's configuration.",
+ Message.Severity.Info, true);
+ CoreGUI.getMessageCenter().notify(message);
}
private void save() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
index d179046..1483cfa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
@@ -28,6 +28,8 @@ import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PluginConfigurationUpdate;
import org.rhq.core.domain.resource.Resource;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
+import org.rhq.core.domain.resource.composite.ResourcePermission;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
@@ -44,13 +46,15 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class PluginConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
private Resource resource;
+ private ResourcePermission resourcePermission;
private ConfigurationEditor editor;
private LocatableIButton saveButton;
- public PluginConfigurationEditView(String locatorId, Resource resource) {
+ public PluginConfigurationEditView(String locatorId, ResourceComposite resourceComposite) {
super(locatorId);
- this.resource = resource;
+ this.resource = resourceComposite.getResource();
+ this.resourcePermission = resourceComposite.getResourcePermission();
}
@Override
@@ -60,7 +64,6 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
}
public void build() {
-
ToolStrip toolStrip = new ToolStrip();
toolStrip.setWidth100();
@@ -79,9 +82,14 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
ConfigurationEditor.ConfigType.plugin);
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
+ editor.setReadOnly(!this.resourcePermission.isInventory());
addMember(toolStrip);
addMember(editor);
+
+ Message message = new TransientMessage("You do not have permission to edit this Resource's connection properties.",
+ Message.Severity.Info, true);
+ CoreGUI.getMessageCenter().notify(message);
}
private void save() {
commit 29888fd3a7ed804c812b299f1509ae5980321b3a
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Sep 30 16:18:14 2010 -0400
populate the notif drop down with all sender names
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index 1711bd5..5da3c43 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -26,6 +26,7 @@ package org.rhq.enterprise.gui.coregui.client.alert.definitions;
import java.util.ArrayList;
import java.util.LinkedHashMap;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.FormItemIfFunction;
@@ -38,6 +39,8 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
/**
@@ -70,18 +73,39 @@ public class NewNotificationEditor extends LocatableDynamicForm {
notificationSenderSelectItem = new SelectItem("notificationSender", "Notification Sender");
- LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>();
if (notificationToEdit != null) {
// we were given a notification to edit, you can't change the sender type, its the only option
- senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName());
notificationSenderSelectItem.setDisabled(true);
+ LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>(1);
+ senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName());
+ notificationSenderSelectItem.setValueMap(senders);
} else {
+ notificationSenderSelectItem.setValueMap("Loading...");
+ notificationSenderSelectItem.setDisabled(true);
// we are creating a new notification, need to provide all senders as options
- senders.put("System Users", "System Users");
- senders.put("dummySender", "Dummy Sender");
+ GWTServiceLookup.getAlertDefinitionService().getAllAlertSenders(new AsyncCallback<String[]>() {
+ @Override
+ public void onSuccess(String[] result) {
+ if (result != null && result.length > 0) {
+ LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>(result.length);
+ for (String senderName : result) {
+ senders.put(senderName, senderName);
+ }
+ notificationSenderSelectItem.setValueMap(senders);
+ notificationSenderSelectItem.setDisabled(false);
+ notificationSenderSelectItem.redraw();
+ } else {
+ CoreGUI.getErrorHandler().handleError("No alert senders available");
+ }
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Cannot get alert senders", caught);
+ }
+ });
}
- notificationSenderSelectItem.setValueMap(senders);
notificationSenderSelectItem.setDefaultToFirstOption(true);
notificationSenderSelectItem.setWrapTitle(false);
notificationSenderSelectItem.setRedrawOnChange(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
index 4819bac..ee93aed 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java
@@ -41,4 +41,6 @@ public interface AlertDefinitionGWTService extends RemoteService {
int removeAlertDefinitions(Integer[] alertDefinitionIds) throws Exception;
String[] getAlertNotificationConfigurationPreview(AlertNotification[] notifs) throws Exception;
+
+ String[] getAllAlertSenders() throws Exception;
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
index d1f492b..b906473 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
+import java.util.List;
+
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.alert.notification.AlertNotification;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
@@ -26,12 +28,14 @@ import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.gui.coregui.client.gwt.AlertDefinitionGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
+import org.rhq.enterprise.server.alert.AlertNotificationManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
public class AlertDefinitionGWTServiceImpl extends AbstractGWTServiceImpl implements AlertDefinitionGWTService {
private static final long serialVersionUID = 1L;
private AlertDefinitionManagerLocal alertDefManager = LookupUtil.getAlertDefinitionManager();
+ private AlertNotificationManagerLocal alertNotifManager = LookupUtil.getAlertNotificationManager();
@Override
public PageList<AlertDefinition> findAlertDefinitionsByCriteria(AlertDefinitionCriteria criteria) {
@@ -106,4 +110,16 @@ public class AlertDefinitionGWTServiceImpl extends AbstractGWTServiceImpl implem
}
}
+ @Override
+ public String[] getAllAlertSenders() throws Exception {
+ try {
+ List<String> results = alertNotifManager.listAllAlertSenders();
+ if (results == null) {
+ return null;
+ }
+ return SerialUtility.prepare(results.toArray(new String[results.size()]), "getAllAlertSenders");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
}
\ No newline at end of file
commit b973891c83704c9d19f3fdf9f7a1515d275771c7
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 30 15:48:59 2010 -0400
comment out some debug println's
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
index 3ad6835..e577491 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java
@@ -216,14 +216,14 @@ public class ResourceTreeDatasource extends DataSource {
Resource parentResource = resource.getParentResource();
ResourceSubCategory subcategory = type.getSubCategory();
if (subcategory != null) {
- System.out.println("Processing " + subcategory + "...");
+ //System.out.println("Processing " + subcategory + "...");
do {
String subcategoryNodeId = SubCategoryTreeNode.idOf(subcategory, parentResource);
if (!subcategoryNodes.containsKey(subcategoryNodeId)) {
SubCategoryTreeNode subcategoryNode = new SubCategoryTreeNode(subcategory,
parentResource);
subcategoryNodes.put(subcategoryNode.getID(), subcategoryNode);
- System.out.println("Adding " + subcategoryNode + " to tree...");
+ //System.out.println("Adding " + subcategoryNode + " to tree...");
updatedNodes.add(subcategoryNode);
}
} while ((subcategory = subcategory.getParentSubCategory()) != null);
@@ -232,7 +232,7 @@ public class ResourceTreeDatasource extends DataSource {
if (!type.isSingleton()) {
AutoGroupTreeNode autogroupNode = new AutoGroupTreeNode(resource);
autogroupNodes.put(autogroupNodeId, autogroupNode);
- System.out.println("Adding " + autogroupNode + " to tree...");
+ //System.out.println("Adding " + autogroupNode + " to tree...");
updatedNodes.add(autogroupNode);
}
}
@@ -330,10 +330,12 @@ public class ResourceTreeDatasource extends DataSource {
}
/**
- * Given a Resource, generate a unique ID for the AGNode.
+ * Given an autogroup's parent Resource and member ResourceType, generate a unique ID for an autogroup TreeNode.
*
- * @param resource requires resourceType field be set. requires parentResource field be set (null for no parent)
- * @return The name string or null if the parentResource is null;
+ * @param parentResource requires resourceType field be set. requires parentResource field be set (null for no parent)
+ * @param resourceType the member ResourceType
+ *
+ * @return The name string or null if the parentResource is null
*/
public static String idOf(Resource parentResource, ResourceType resourceType) {
return (parentResource != null) ? "autogroup_" + resourceType.getId() + "_" + parentResource.getId() : null;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index f4137b2..1184697 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -245,7 +245,7 @@ public abstract class RPCDataSource<T> extends DataSource {
@SuppressWarnings("unchecked")
public static <S> S[] getArrayFilter(DSRequest request, String paramName, Class<S> type) {
- System.out.println("Fetching array " + paramName + " (" + type + ")");
+ //System.out.println("Fetching array " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -272,14 +272,14 @@ public abstract class RPCDataSource<T> extends DataSource {
throw new IllegalArgumentException("No support for passing array filters of type " + type);
}
- System.out.println("Result array = " + resultArray);
+ //System.out.println("Result array = " + resultArray);
return resultArray;
}
@SuppressWarnings("unchecked")
public static <S> S getFilter(DSRequest request, String paramName, Class<S> type) {
- System.out.println("Fetching " + paramName + " (" + type + ")");
+ //System.out.println("Fetching " + paramName + " (" + type + ")");
Criteria criteria = request.getCriteria();
Map<String, Object> criteriaMap = criteria.getValues();
@@ -301,7 +301,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
}
- System.out.println("Result = " + result);
+ //System.out.println("Result = " + result);
return result;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
index 434d06d..2064f63 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java
@@ -31,7 +31,6 @@ import org.rhq.enterprise.gui.coregui.client.UserSessionManager;
* @author Greg Hinkle
*/
public class MonitoringRequestCallback implements RequestCallback {
-
@SuppressWarnings("unused")
private int id;
private String name;
@@ -56,11 +55,11 @@ public class MonitoringRequestCallback implements RequestCallback {
if (STATUS_CODE_OK == response.getStatusCode()) {
RPCManager.getInstance().succeedCall(this);
callback.onResponseReceived(request, response);
- System.out.println("MonitoringRequestCallback: OK");
+ //System.out.println("MonitoringRequestCallback: OK");
} else {
RPCManager.getInstance().failCall(this);
callback.onResponseReceived(request, response);
- System.out.println("MonitoringRequestCallback: " + response.getStatusCode() + "/"
+ System.err.println("MonitoringRequestCallback: " + response.getStatusCode() + "/"
+ response.getStatusText());
// if we have a rich and coordinated client-side loggedIn state, do we need to check upon failure here?
@@ -72,7 +71,7 @@ public class MonitoringRequestCallback implements RequestCallback {
@Override
public void onFailure(Throwable caught) {
- SC.say("Unable to determine login status, check server status");
+ SC.say("Unable to determine login status - check Server status.");
}
});
}
commit 6415ed10e3b0d967b712a7be0aa0a3fcf4ce95cb
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Sep 30 15:40:37 2010 -0400
fix bug in core-domain StringUtils.deCamelCase() and add unit test for that method; add support for transient messages to the message center - transient messages are displayed in the header and generally auto-clear after 30 seconds
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/util/StringUtils.java b/modules/core/domain/src/main/java/org/rhq/core/domain/util/StringUtils.java
index 938b07f..01a6ddb 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/util/StringUtils.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/util/StringUtils.java
@@ -33,8 +33,14 @@ import java.util.Set;
public class StringUtils {
private static final Set<String> LOWERCASE_WORDS = new HashSet<String>();
static {
+ // conjunctions
LOWERCASE_WORDS.add("And");
LOWERCASE_WORDS.add("Or");
+
+ // articles
+ LOWERCASE_WORDS.add("A");
+ LOWERCASE_WORDS.add("An");
+ LOWERCASE_WORDS.add("The");
}
/*
@@ -65,39 +71,47 @@ public class StringUtils {
+ target.substring(nextDash + 2);
}
- StringBuilder currentWord = new StringBuilder();
char currentChar;
- char previousChar = 0;
- for (int i = 0; i < target.length(); i++) {
+ // Always make the first char upper case.
+ char previousChar = Character.toUpperCase(target.charAt(0));
+ StringBuilder currentWord = new StringBuilder();
+ currentWord.append(previousChar);
+ for (int i = 1; i < target.length(); i++) {
currentChar = target.charAt(i);
// Make sure to insert spaces in the middle of acronyms or multi-digit numbers.
- if ((i != 0) &&
- ((Character.isDigit(currentChar) && !Character.isDigit(previousChar))
+ if ((previousChar == ' ' && currentChar != ' ')
+ || (Character.isDigit(currentChar) && !Character.isDigit(previousChar))
|| (Character.isUpperCase(currentChar) && (!Character.isUpperCase(previousChar)
- || ((i < (target.length() - 1)) && Character.isLowerCase(target.charAt(i + 1))))))) {
+ || ((i < (target.length() - 1)) && Character.isLowerCase(target.charAt(i + 1)))))) {
// We're at the start of a new word.
- appendWord(result, currentWord);
+ appendWord(result, currentWord.toString());
currentWord = new StringBuilder();
// Append a space before the next word.
result.append(' ');
}
- currentWord.append(currentChar);
+ if (currentChar != ' ') {
+ currentWord.append(currentChar);
+ }
previousChar = currentChar;
}
// Append the final word.
- appendWord(result, currentWord);
+ appendWord(result, currentWord.toString());
return result.toString();
}
- private static void appendWord(StringBuilder result, StringBuilder nextWord) {
- String word = nextWord.toString();
- if (LOWERCASE_WORDS.contains(word)) {
- result.append(word.toLowerCase());
- } else {
- result.append(word);
+ private static void appendWord(StringBuilder result, String word) {
+ if (word.length() >= 1) {
+ if (LOWERCASE_WORDS.contains(word)) {
+ result.append(word.toLowerCase());
+ } else {
+ result.append(Character.toUpperCase(word.charAt(0)));
+ if (word.length() > 1) {
+ result.append(word.substring(1));
+ }
+ }
}
}
diff --git a/modules/core/domain/src/test/java/org/rhq/core/domain/util/StringUtilsTest.java b/modules/core/domain/src/test/java/org/rhq/core/domain/util/StringUtilsTest.java
new file mode 100644
index 0000000..fde0c6b
--- /dev/null
+++ b/modules/core/domain/src/test/java/org/rhq/core/domain/util/StringUtilsTest.java
@@ -0,0 +1,47 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.core.domain.util;
+
+import static org.testng.Assert.*;
+
+import org.testng.annotations.Test;
+
+/**
+ * Tests for {@link StringUtils}.
+ *
+ * @author Ian Springer
+ */
+public class StringUtilsTest {
+ @Test
+ public void testDeCamelCase() {
+ testDeCamelCase("RedGreenBlue", "Red Green Blue");
+ testDeCamelCase("redGreenBlue", "Red Green Blue");
+ testDeCamelCase("Red Green Blue", "Red Green Blue");
+ testDeCamelCase("red green blue", "Red Green Blue");
+ testDeCamelCase("RHQServer", "RHQ Server");
+ testDeCamelCase("Blink182", "Blink 182");
+ testDeCamelCase("SimonAndGarfunkel", "Simon and Garfunkel");
+ }
+
+ private void testDeCamelCase(String input, String expectedResult) {
+ String result = StringUtils.deCamelCase(input);
+ assertEquals(result, expectedResult, "For input \"" + input + "\": ");
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
index e342b11..bb39f2d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
@@ -47,6 +47,7 @@ import org.rhq.enterprise.gui.coregui.client.report.ReportTopView;
import org.rhq.enterprise.gui.coregui.client.report.tag.TaggedView;
import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler;
import org.rhq.enterprise.gui.coregui.client.util.WidgetUtility;
+import org.rhq.enterprise.gui.coregui.client.util.message.MessageBar;
import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -61,6 +62,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
private static ErrorHandler errorHandler = new ErrorHandler();
+ private static MessageBar messageBar;
+
private static BreadcrumbTrailPane breadCrumbTrailPane;
private static MessageCenter messageCenter;
@@ -130,6 +133,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
MenuBarView menuBarView = new MenuBarView("TopMenu");
menuBarView.setWidth("100%");
+ messageBar = new MessageBar();
+
breadCrumbTrailPane = new BreadcrumbTrailPane();
Canvas canvas = new Canvas(CONTENT_CANVAS_ID);
@@ -139,9 +144,11 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
rootCanvas = new RootCanvas();
rootCanvas.setOverflow(Overflow.HIDDEN);
rootCanvas.addMember(menuBarView);
+
+ rootCanvas.addMember(messageBar);
rootCanvas.addMember(breadCrumbTrailPane);
rootCanvas.addMember(canvas);
- rootCanvas.addMember(new Footer("CoreFooter"));
+ rootCanvas.addMember(new Footer());
rootCanvas.draw();
History.addValueChangeHandler(this);
@@ -267,8 +274,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
}
private class RootCanvas extends VLayout implements BookmarkableView {
- ViewId currentViewId;
- Canvas currentCanvas;
+ private ViewId currentViewId;
+ private Canvas currentCanvas;
private RootCanvas() {
setWidth100();
@@ -280,14 +287,20 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
// default view
History.newItem(DEFAULT_VIEW_PATH);
} else {
- if (!viewPath.getCurrent().equals(currentViewId)) {
- currentViewId = viewPath.getCurrent();
+ messageBar.clearMessage();
- currentCanvas = createContent(viewPath.getCurrent().getPath());
- setContent(currentCanvas);
+ ViewId topLevelViewId = viewPath.getCurrent(); // e.g. Administration
+ if (!topLevelViewId.equals(this.currentViewId)) {
+ this.currentViewId = topLevelViewId;
+ this.currentCanvas = createContent(this.currentViewId.getPath());
+ setContent(this.currentCanvas);
}
- if (currentCanvas instanceof BookmarkableView) {
- ((BookmarkableView) currentCanvas).renderView(viewPath.next()); // e.g.
+
+ if (this.currentCanvas instanceof BookmarkableView) {
+ viewPath.next();
+ if (!viewPath.isEnd()) {
+ ((BookmarkableView) this.currentCanvas).renderView(viewPath);
+ }
}
refreshBreadCrumbTrail();
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 36514aa..d7121e3 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
@@ -40,9 +40,10 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
* @author Joseph Marques
*/
public class Footer extends LocatableToolStrip {
+ private static final String LOCATOR_ID = "CoreFooter";
- public Footer(String locatorId) {
- super(locatorId);
+ public Footer() {
+ super(LOCATOR_ID);
setHeight(30);
setAlign(VerticalAlignment.CENTER);
// setPadding(5);
@@ -55,7 +56,7 @@ public class Footer extends LocatableToolStrip {
super.onDraw();
final UserSessionState userSessionState = new UserSessionState("UserSessionState");
- final MessageCenterView recentMessage = new MessageCenterView(extendLocatorId("MessageCenter"));
+ final MessageCenterView recentMessage = new MessageCenterView(extendLocatorId(MessageCenterView.LOCATOR_ID));
recentMessage.setWidth("*");
final FavoritesButton favoritesButton = new FavoritesButton(extendLocatorId("Favorites"));
final AlertsMessage alertsMessage = new AlertsMessage(extendLocatorId("Alerts"));
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 432cd2b..544ded9 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
@@ -65,6 +65,7 @@ import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
+import com.smartgwt.client.widgets.form.validator.CustomValidator;
import com.smartgwt.client.widgets.form.validator.FloatRangeValidator;
import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
import com.smartgwt.client.widgets.form.validator.RegExpValidator;
@@ -136,7 +137,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
* @author Ian Springer
*/
public class ConfigurationEditor extends LocatableVLayout {
-
private ConfigurationGWTServiceAsync configurationService = GWTServiceLookup.getConfigurationService();
private TabSet tabSet;
@@ -854,7 +854,7 @@ public class ConfigurationEditor extends LocatableVLayout {
valueItem.setRequired(propertyDefinition.isRequired());
- List<Validator> validators = buildValidators(propertyDefinition, valueItem);
+ List<Validator> validators = buildValidators(propertyDefinition, property);
valueItem.setValidators(validators.toArray(new Validator[validators.size()]));
/*
@@ -879,6 +879,7 @@ public class ConfigurationEditor extends LocatableVLayout {
finalValueItem.addChangedHandler(new ChangedHandler() {
public void onChanged(ChangedEvent changedEvent) {
boolean wasValidBefore = ConfigurationEditor.this.invalidPropertyNames.isEmpty();
+ propertySimple.setErrorMessage(null);
if (changedEvent.getItem().validate()) {
ConfigurationEditor.this.invalidPropertyNames.remove(propertySimple.getName());
propertySimple.setValue(changedEvent.getValue());
@@ -888,7 +889,7 @@ public class ConfigurationEditor extends LocatableVLayout {
boolean isValidNow = ConfigurationEditor.this.invalidPropertyNames.isEmpty();
if (isValidNow != wasValidBefore) {
for (ValidationStateChangeListener validationStateChangeListener : ConfigurationEditor.this.validationStateChangeListeners) {
- validationStateChangeListener.validateStateChanged(isValidNow);
+ validationStateChangeListener.validationStateChanged(isValidNow);
}
}
}
@@ -913,7 +914,7 @@ public class ConfigurationEditor extends LocatableVLayout {
return valueItem;
}
- private List<Validator> buildValidators(PropertyDefinitionSimple propertyDefinition, FormItem valueItem) {
+ private List<Validator> buildValidators(PropertyDefinitionSimple propertyDefinition, Property property) {
List<Validator> validators = new ArrayList<Validator>();
if (propertyDefinition.getConstraints() != null) {
Set<Constraint> constraints = propertyDefinition.getConstraints();
@@ -941,11 +942,16 @@ public class ConfigurationEditor extends LocatableVLayout {
validators.add(validator);
} else if (constraint instanceof RegexConstraint) {
RegExpValidator validator =
- new RegExpValidator("^" + ((RegexConstraint) constraint).getDetails() + "$");
+ new RegExpValidator("^" + constraint.getDetails() + "$");
validators.add(validator);
}
}
}
+ if (property.getErrorMessage() != null) {
+ this.invalidPropertyNames.add(property.getName());
+ PluginReportedErrorValidator validator = new PluginReportedErrorValidator(property);
+ validators.add(validator);
+ }
return validators;
}
@@ -1043,4 +1049,22 @@ public class ConfigurationEditor extends LocatableVLayout {
return new Integer(o1.getOrder()).compareTo(o2.getOrder());
}
}
+
+ private class PluginReportedErrorValidator extends CustomValidator {
+ private Property property;
+
+ public PluginReportedErrorValidator(Property property) {
+ this.property = property;
+ }
+
+ @Override
+ protected boolean condition(Object value) {
+ String errorMessage = this.property.getErrorMessage();
+ boolean valid = (errorMessage != null);
+ if (!valid) {
+ setErrorMessage(errorMessage);
+ }
+ return valid;
+ }
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java
index d8f7a85..154c731 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ValidationStateChangeListener.java
@@ -23,5 +23,5 @@ package org.rhq.enterprise.gui.coregui.client.components.configuration;
* @author Ian Springer
*/
public interface ValidationStateChangeListener {
- void validateStateChanged(boolean isValid);
+ void validationStateChanged(boolean isValid);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/AbstractWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/AbstractWizard.java
index 9c8e513..57d29b5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/AbstractWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/wizard/AbstractWizard.java
@@ -18,15 +18,13 @@
*/
package org.rhq.enterprise.gui.coregui.client.components.wizard;
-import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.smartgwt.client.widgets.IButton;
public abstract class AbstractWizard implements Wizard {
-
- private ArrayList<WizardStep> steps;
+ private List<WizardStep> steps;
private WizardView view;
private String windowTitle = "";
private String title = "";
@@ -63,7 +61,7 @@ public abstract class AbstractWizard implements Wizard {
return steps;
}
- public void setSteps(ArrayList<WizardStep> steps) {
+ public void setSteps(List<WizardStep> steps) {
this.steps = steps;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
index fbbf71e..1008b83 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/wizard/GroupCreateWizard.java
@@ -30,18 +30,21 @@ import com.smartgwt.client.widgets.IButton;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.components.wizard.AbstractWizard;
import org.rhq.enterprise.gui.coregui.client.components.wizard.WizardStep;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupListView;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
/**
+ * A wizard for creating a new Resource group.
+ *
* @author Greg Hinkle
*/
public class GroupCreateWizard extends AbstractWizard {
-
private ResourceGroupListView resourceGroupListView;
private GroupCreateStep createStep;
@@ -50,7 +53,7 @@ public class GroupCreateWizard extends AbstractWizard {
public GroupCreateWizard(ResourceGroupListView resourceGroupListView) {
this.resourceGroupListView = resourceGroupListView;
- ArrayList<WizardStep> steps = new ArrayList<WizardStep>();
+ List<WizardStep> steps = new ArrayList<WizardStep>();
steps.add(createStep = new GroupCreateStep());
steps.add(memberStep = new GroupMembersStep(this));
@@ -84,13 +87,18 @@ public class GroupCreateWizard extends AbstractWizard {
groupService.createResourceGroup(createStep.getGroup(), memberStep.getSelectedResourceIds(),
new AsyncCallback<ResourceGroup>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to create resource group", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to create Resource group.", caught);
}
public void onSuccess(ResourceGroup result) {
+ String groupUrl = LinkManager.getResourceGroupLink(result.getId());
CoreGUI.getMessageCenter().notify(
- new Message("Saved new group " + result.getName(), Message.Severity.Info));
-
+ new TransientMessage("Resource group created. [<a href='" + groupUrl + "'>View Group</a>]",
+ Message.Severity.Info));
+ CoreGUI.getMessageCenter().notify(
+ new Message("Created new " + result.getGroupCategory().name().toLowerCase() + " Resource group '"
+ + result.getName() + "' with " + memberStep.getSelectedResourceIds().length + " members.",
+ Message.Severity.Info));
resourceGroupListView.refresh();
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
index 7964a74..9843339 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ResourceConfigurationEditView.java
@@ -34,18 +34,19 @@ import org.rhq.enterprise.gui.coregui.client.components.configuration.Configurat
import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
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.MessageBar;
+import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
+import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* @author Greg Hinkle
+ * @author Ian Springer
*/
public class ResourceConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
private Resource resource;
private ConfigurationEditor editor;
private IButton saveButton;
- private MessageBar messageBar;
public ResourceConfigurationEditView(String locatorId, Resource resource) {
super(locatorId);
@@ -74,14 +75,11 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
this.saveButton.disable();
toolStrip.addMember(saveButton);
- this.messageBar = new MessageBar();
-
editor = new ConfigurationEditor(this.getLocatorId(), resource.getId(), resource.getResourceType().getId());
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
addMember(toolStrip);
- addMember(this.messageBar);
addMember(editor);
}
@@ -91,12 +89,12 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
GWTServiceLookup.getConfigurationService().updateResourceConfiguration(resource.getId(), updatedConfiguration,
new AsyncCallback<ResourceConfigurationUpdate>() {
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Failed to update configuration", caught);
+ CoreGUI.getErrorHandler().handleError("Failed to update configuration.", caught);
}
public void onSuccess(ResourceConfigurationUpdate result) {
CoreGUI.getMessageCenter().notify(
- new Message("Configuration updated for resource [" + resource.getName() + "]",
+ new Message("Configuration updated for Resource [" + resource.getName() + "].",
Message.Severity.Info));
}
@@ -104,14 +102,16 @@ public class ResourceConfigurationEditView extends LocatableVLayout implements V
}
@Override
- public void validateStateChanged(boolean isValid) {
+ public void validationStateChanged(boolean isValid) {
+ MessageCenter messageCenter = CoreGUI.getMessageCenter();
+ Message message;
if (isValid) {
this.saveButton.enable();
- this.messageBar.hide();
+ message = new TransientMessage("All configuration properties now have valid values, so the configuration can now be saved.", Message.Severity.Info);
} else {
this.saveButton.disable();
- Message message = new Message("One or more properties have invalid values. The values must be fixed before the configuration can be saved.", Message.Severity.Error);
- this.messageBar.setMessage(message);
+ message = new TransientMessage("One or more configuration properties have invalid values. The values must be corrected before the configuration can be saved.", Message.Severity.Error, true);
}
+ messageCenter.notify(message);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
index 357255a..d179046 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java
@@ -33,19 +33,19 @@ import org.rhq.enterprise.gui.coregui.client.components.configuration.Configurat
import org.rhq.enterprise.gui.coregui.client.components.configuration.ValidationStateChangeListener;
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.MessageBar;
+import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter;
+import org.rhq.enterprise.gui.coregui.client.util.message.TransientMessage;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* @author Greg Hinkle
+ * @author Ian Springer
*/
public class PluginConfigurationEditView extends LocatableVLayout implements ValidationStateChangeListener {
-
private Resource resource;
private ConfigurationEditor editor;
private LocatableIButton saveButton;
- private MessageBar messageBar;
public PluginConfigurationEditView(String locatorId, Resource resource) {
super(locatorId);
@@ -75,15 +75,12 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
this.saveButton.disable();
toolStrip.addMember(saveButton);
- this.messageBar = new MessageBar();
-
editor = new ConfigurationEditor(this.getLocatorId(), resource.getId(), resource.getResourceType().getId(),
ConfigurationEditor.ConfigType.plugin);
editor.setOverflow(Overflow.AUTO);
editor.addValidationStateChangeListener(this);
addMember(toolStrip);
- addMember(this.messageBar);
addMember(editor);
}
@@ -103,18 +100,19 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Val
}
});
-
}
@Override
- public void validateStateChanged(boolean isValid) {
+ public void validationStateChanged(boolean isValid) {
+ MessageCenter messageCenter = CoreGUI.getMessageCenter();
+ Message message;
if (isValid) {
this.saveButton.enable();
- this.messageBar.hide();
+ message = new TransientMessage("All connection properties now have valid values, so the configuration can now be saved.", Message.Severity.Info);
} else {
this.saveButton.disable();
- Message message = new Message("One or more properties have invalid values. The values must be fixed before the configuration can be saved.", Message.Severity.Error);
- this.messageBar.setMessage(message);
+ message = new TransientMessage("One or more connection properties have invalid values. The values must be corrected before the configuration can be saved.", Message.Severity.Error, true);
}
+ messageCenter.notify(message);
}
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 905b0c7..97cc7ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -23,8 +23,8 @@ import java.util.Date;
/**
* @author Greg Hinkle
*/
+@SuppressWarnings({"UnnecessarySemicolon"})
public class Message {
-
protected String title;
protected String detail;
protected Date fired = new Date();
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 e025ab1..b03499f 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
@@ -22,52 +22,114 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.HashMap;
import java.util.Map;
+import com.google.gwt.user.client.Timer;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Label;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
+
/**
* 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.
*
* @author Ian Springer
*/
-public class MessageBar extends Label {
- public static final Map<Message.Severity, String> SEVERITY_TO_STYLE_NAME_MAP = new HashMap();
+public class MessageBar extends LocatableHLayout implements MessageCenter.MessageListener {
+ private static final String LOCATOR_ID = "MessageBar";
+ private static final int AUTO_HIDE_DELAY_MILLIS = 30000; // 30 seconds
+
+ private static final Map<Message.Severity, String> SEVERITY_TO_STYLE_NAME_MAP =
+ new HashMap<Message.Severity, String>();
static {
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Info, "InfoBlock");
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Warning, "WarnBlock");
SEVERITY_TO_STYLE_NAME_MAP.put(Message.Severity.Error, "ErrorBlock");
}
+ private static final Map<Message.Severity, String> SEVERITY_TO_ICON_MAP =
+ new HashMap<Message.Severity, String>();
+ static {
+ SEVERITY_TO_ICON_MAP.put(Message.Severity.Info, "info/icn_info_blue.png");
+ SEVERITY_TO_ICON_MAP.put(Message.Severity.Warning, "info/icn_info_orange.png");
+ SEVERITY_TO_ICON_MAP.put(Message.Severity.Error, "info/icn_info_red.png");
+ }
+
+ private Label label;
+
+ public MessageBar() {
+ super(LOCATOR_ID);
+
+ setOverflow(Overflow.VISIBLE);
+ }
+
@Override
protected void onDraw() {
super.onDraw();
setWidth100();
setAutoHeight();
+ setHeight(40);
- hide();
+ setAlign(Alignment.CENTER);
+
+ CoreGUI.getMessageCenter().addMessageListener(this);
}
- public void setMessage(Message message) {
+ @Override
+ public void onMessage(Message message) {
+ if (message instanceof TransientMessage) {
+ TransientMessage transientMessage = (TransientMessage)message;
+
+ // First clear any previous message.
+ clearMessage();
+
+ this.label = createLabel(transientMessage);
+ addMember(this.label);
+ markForRedraw();
- String contents;
- if (message != null) {
- contents = message.getTitle();
- if (message.getDetail() != null) {
- contents += ": " + message.getDetail();
+ // Auto-clear the message after 30 seconds unless it's been designated as sticky.
+ if (!transientMessage.isSticky()) {
+ Timer hideTimer = new Timer() {
+ @Override
+ public void run() {
+ clearMessage();
+ }
+ };
+ hideTimer.schedule(AUTO_HIDE_DELAY_MILLIS);
}
- } else {
- contents = null;
}
- setContents(contents);
- if (contents != null) {
- String styleName = SEVERITY_TO_STYLE_NAME_MAP.get(message.getSeverity());
- setStyleName(styleName);
+ }
+
+ public void clearMessage() {
+ if (this.label != null) {
+ this.label.destroy();
+ removeMember(this.label);
+ markForRedraw();
}
- markForRedraw();
- if (contents != null) {
- show();
- } else {
- hide();
+ }
+
+ private Label createLabel(Message message) {
+ Label label = new Label();
+
+ String contents = message.getTitle();
+ if (message.getDetail() != null) {
+ contents += ": " + message.getDetail();
}
+ label.setContents(contents);
+
+ String styleName = (contents != null) ? SEVERITY_TO_STYLE_NAME_MAP.get(message.getSeverity()) : null;
+ label.setStyleName(styleName);
+
+ label.setAutoHeight();
+ label.setHeight(35);
+ label.setAutoWidth();
+ label.setWidth("75%");
+
+ String icon = (contents != null) ? SEVERITY_TO_ICON_MAP.get(message.getSeverity()) : null;
+ label.setIcon(icon);
+
+ return label;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
index afce657..a3c29dd 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenter.java
@@ -20,15 +20,14 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.ArrayList;
import java.util.LinkedList;
+import java.util.List;
/**
* @author Greg Hinkle
*/
public class MessageCenter {
-
private LinkedList<Message> messages = new LinkedList<Message>();
-
- private ArrayList<MessageListener> listeners = new ArrayList<MessageListener>();
+ private List<MessageListener> listeners = new ArrayList<MessageListener>();
private static final int MAX_MESSAGES = 100;
@@ -46,7 +45,7 @@ public class MessageCenter {
this.listeners.add(listener);
}
- public LinkedList<Message> getMessages() {
+ public List<Message> getMessages() {
return messages;
}
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 7b6d850..5d81646 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
@@ -18,7 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.util.message;
-import java.util.LinkedList;
+import java.util.List;
import com.google.gwt.user.client.Timer;
import com.smartgwt.client.types.Alignment;
@@ -53,6 +53,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableWindow;
* @author Greg Hinkle
*/
public class MessageCenterView extends LocatableHLayout implements MessageCenter.MessageListener {
+ public static final String LOCATOR_ID = "MessageCenter";
public MessageCenterView(String locatorId) {
super(locatorId, 5);
@@ -78,16 +79,16 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
recentEventsButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- LinkedList<Message> messages = CoreGUI.getMessageCenter().getMessages();
+ List<Message> messages = CoreGUI.getMessageCenter().getMessages();
if (messages.isEmpty()) {
- recentEventsMenu.setItems(new MenuItem("No recent messages"));
+ recentEventsMenu.setItems(new MenuItem("No recent messages."));
} else {
MenuItem[] items = new MenuItem[messages.size()];
- int i = 0;
- for (final Message message : messages) {
+ for (int i = 0, messagesSize = messages.size(); i < messagesSize; i++) {
+ final Message message = messages.get(i);
MenuItem messageItem = new MenuItem(message.title, getSeverityIcon(message.severity));
- items[i++] = messageItem;
+ items[i] = messageItem;
messageItem.addClickHandler(new com.smartgwt.client.widgets.menu.events.ClickHandler() {
public void onClick(MenuItemClickEvent event) {
@@ -156,38 +157,40 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
}
public void onMessage(final Message message) {
- final Label label = new Label(message.title);
- label.setMargin(5);
- label.setAutoFit(true);
- label.setHeight(25);
- label.setWrap(false);
+ if (!(message instanceof TransientMessage)) {
+ final Label label = new Label(message.title);
+ label.setMargin(5);
+ label.setAutoFit(true);
+ label.setHeight(25);
+ label.setWrap(false);
- String iconSrc = getSeverityIcon(message.severity);
+ String iconSrc = getSeverityIcon(message.severity);
- label.setIcon(iconSrc);
+ label.setIcon(iconSrc);
- label.setTooltip(message.detail);
+ label.setTooltip(message.detail);
- label.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
- showDetails(message);
- }
- });
-
- addMember(label, 1);
- redraw();
-
- Timer hideTimer = new Timer() {
- @Override
- public void run() {
- label.animateHide(AnimationEffect.FADE, new AnimationCallback() {
- public void execute(boolean b) {
- label.destroy();
- }
- });
- }
- };
- hideTimer.schedule(10000);
+ label.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ showDetails(message);
+ }
+ });
+
+ addMember(label, 1);
+ redraw();
+
+ Timer hideTimer = new Timer() {
+ @Override
+ public void run() {
+ label.animateHide(AnimationEffect.FADE, new AnimationCallback() {
+ public void execute(boolean b) {
+ label.destroy();
+ }
+ });
+ }
+ };
+ hideTimer.schedule(10000);
+ }
}
private String getSeverityIcon(Message.Severity severity) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java
new file mode 100644
index 0000000..318c4a5
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/TransientMessage.java
@@ -0,0 +1,48 @@
+/*
+ * RHQ Management Platform
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * 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.util.message;
+
+/**
+ * @author Ian Springer
+ */
+public class TransientMessage extends Message {
+ private boolean sticky;
+
+ public TransientMessage(String title, Severity severity) {
+ super(title, severity);
+ }
+
+ public TransientMessage(String title, String detail, Severity severity) {
+ super(title, detail, severity);
+ }
+
+ public TransientMessage(String title, Severity severity, boolean sticky) {
+ this(title, null, severity, sticky);
+ }
+
+ public TransientMessage(String title, String detail, Severity severity, boolean sticky) {
+ super(title, detail, severity);
+ this.sticky = sticky;
+ }
+
+ public boolean isSticky() {
+ return this.sticky;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
index c5d324e..85d1b83 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
@@ -361,29 +361,29 @@ a:hover {
}
.InfoBlock,.ConfirmationBlock,.WarnBlock,.ErrorBlock,.FatalBlock {
- padding: 4px;
+ /*padding: 4px;*/
border-width: 1px;
- border-top-style: solid;
- font-size: 10px;
+ border-style: solid;
+ /*font-size: 10px;*/
color: #000000;
}
.InfoBlock,.ConfirmationBlock {
background-color: #BFF1B5; /* light green */
- border-top-color: #00AC3D; /* medium green */
+ border-color: #00AC3D; /* medium green */
}
.WarnBlock {
background-color: #FFFD99; /* light yellow */
- border-top-color: #FF9C15; /* medium orange */
+ border-color: #FF9C15; /* medium orange */
}
.ErrorBlock {
background-color: #FF9999; /* light red */
- border-top-color: #EE4444; /* medium red */
+ border-color: #EE4444; /* medium red */
}
.FatalBlock {
background-color: #FF6666; /* slightly darker light red */
- border-top-color: #EE1111; /* slightly darker medium red */
+ border-color: #EE1111; /* slightly darker medium red */
}
commit b56a7c0af0071ebee3b350ac1769a52e8a8b3a75
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Sep 30 09:17:01 2010 -0400
Getting infrastructure in place for testing plugin upgrade code
Trying to clean up and get tests in ConfigurationMetadataManagerBean in a
working, maintainable state.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
index a27b677..101d894 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java
@@ -23,6 +23,7 @@
package org.rhq.core.domain.configuration.definition;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -69,7 +70,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@OneToMany(mappedBy = "propertyDefinitionSimple", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER)
- private Set<Constraint> constraints;
+ private Set<Constraint> constraints = new HashSet<Constraint>();
/**
* The <options> within <property-options> for a <simple-property>
diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml
index 4c4e9a5..b54dfd8 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -400,6 +400,13 @@
<version>1.8</version>
<scope>test</scope>
</dependency>
+
+ <dependency>
+ <groupId>commons-jxpath</groupId>
+ <artifactId>commons-jxpath</artifactId>
+ <version>1.3</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
index 87d254a..1658e18 100644
--- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java
@@ -23,113 +23,102 @@
package org.rhq.enterprise.server.configuration.metadata;
-import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser;
-import org.rhq.core.clientapi.descriptor.DescriptorPackages;
-import org.rhq.core.clientapi.descriptor.configuration.ConfigurationDescriptor;
+import javax.persistence.EntityManager;
+import javax.transaction.NotSupportedException;
+import javax.transaction.SystemException;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition;
-import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.enterprise.server.resource.metadata.test.UpdateSubsytemTestBase;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.test.AssertUtils;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-import javax.persistence.EntityManager;
-import javax.transaction.TransactionManager;
-import javax.xml.XMLConstants;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-import javax.xml.bind.util.ValidationEventCollector;
-import javax.xml.validation.Schema;
-import javax.xml.validation.SchemaFactory;
-import java.io.FileNotFoundException;
-import java.net.URL;
+import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- ConfigurationMetadataManagerLocal configurationMetadataMgr;
-
EntityManager entityMgr;
- ConfigurationDefinition originalConfigurationDef;
+ PluginDescriptor originalDescriptor;
+
+ PluginDescriptor updatedDescriptor;
- ConfigurationDefinition newConfigurationDef;
+ ConfigurationDefinition originalConfigDef;
- @BeforeClass(enabled = false)
- public void setupClass() throws Exception {
+ ConfigurationDefinition updatedConfigDef;
+
+ @BeforeClass
+ public void setupClass() {
String pluginFileBaseName = "configuration_metadata_manager_bean_test";
String version1 = pluginFileBaseName + "_v1.xml";
String version2 = pluginFileBaseName + "_v2.xml";
- getTransactionManager().begin();
- entityMgr = getEntityManager();
+ originalDescriptor = loadPluginDescriptor(getPackagePath() + version1);
+ updatedDescriptor = loadPluginDescriptor(getPackagePath() + version2);
+ }
- configurationMetadataMgr = LookupUtil.getConfigurationMetadataManager();
+ @Test
+ public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
+ initConfigDefs("servers[name='MyServer1']", "test");
- originalConfigurationDef = createAndSaveConfigurationDef(version1);
- newConfigurationDef = loadPluginConfigurationFromFile(version2);
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar");
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar");
- assertGroupDefinitionExists();
+ assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition",
+ expected, actual);
+ }
- originalConfigurationDef = entityMgr.getReference(ConfigurationDefinition.class,
- originalConfigurationDef.getId());
+// void assertGroupDefinitionExists() {
+// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
+// if (groupDef.getName().equals("groupToBeRemoved")) {
+// assertTrue(groupDef.getId() != 0);
+// assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId()));
+// }
+// }
+// }
+
+ private void initConfigDefs(String path, String configName) {
+ loadAndPersistConfigDefs(path, configName);
+ updateConfigDef();
+ }
- configurationMetadataMgr.updateConfigurationDefinition(newConfigurationDef, originalConfigurationDef);
+ private void loadAndPersistConfigDefs(String path, String configName) {
+ originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName);
+ updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName);
- originalConfigurationDef = entityMgr.find(ConfigurationDefinition.class, originalConfigurationDef.getId());
+ try {
+ getTransactionManager().begin();
- assertNotNull(originalConfigurationDef);
- }
+ EntityManager entityMgr = getEntityManager();
+ entityMgr.persist(originalConfigDef);
+ entityMgr.persist(updatedConfigDef);
- void assertGroupDefinitionExists() {
- for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) {
- if (groupDef.getName().equals("groupToBeRemoved")) {
- assertTrue(groupDef.getId() != 0);
- assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId()));
- }
+ getTransactionManager().commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
}
- @AfterClass(enabled = false)
- public void tearDownClass() throws Exception {
- getTransactionManager().rollback();
- }
-
- private ConfigurationDefinition createAndSaveConfigurationDef(String file) throws Exception {
- ConfigurationDefinition configurationDef = loadPluginConfigurationFromFile(file);
- entityMgr.persist(configurationDef);
- return configurationDef;
- }
+ private void updateConfigDef() {
+ try {
+ getTransactionManager().begin();
- private ConfigurationDefinition loadPluginConfigurationFromFile(String file) throws Exception {
- PluginDescriptor pluginDescriptor = loadPluginDescriptor(file);
- ConfigurationDescriptor configurationDescriptor = pluginDescriptor.getServers().get(0).getPluginConfiguration();
- return ConfigurationMetadataParser.parse("test", configurationDescriptor);
- }
+ ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager();
+ configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef);
- private PluginDescriptor loadPluginDescriptor(String file) throws Exception {
- URL pluginDescriptorURL = getClass().getResource(file);
- if (pluginDescriptorURL == null) {
- throw new FileNotFoundException("File " + file + " not found");
+ getTransactionManager().commit();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
}
+ }
- JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
- URL pluginSchemaURL = this.getClass().getClassLoader().getResource("rhq-plugin.xsd");
- Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(pluginSchemaURL);
-
- Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- ValidationEventCollector vec = new ValidationEventCollector();
- unmarshaller.setEventHandler(vec);
- unmarshaller.setSchema(pluginSchema);
-
- return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream());
+ private String getPackagePath() {
+ return "/" + getClass().getPackage().getName().replace('.', '/') + "/";
}
void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected,
@@ -138,18 +127,9 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
}
@Test(enabled = false)
- public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception {
- PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("bar");
- PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("bar");
-
- assertPropertyDefinitionMatches("New ungrouped property defs shoould be added to the configuration definition",
- expected, actual);
- }
-
- @Test(enabled = false)
public void existingUngroupedPropertyDefShouldBeUpdated() throws Exception {
- PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("foo");
- PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("foo");
+ PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("foo");
+ PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("foo");
assertPropertyDefinitionMatches("Existing ungrouped property defs should be updated", expected, actual);
}
@@ -158,13 +138,13 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
public void propertyDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
assertNull(
"A property def in the original configuration def that is removed in the new configuration def should be deleted",
- originalConfigurationDef.getPropertyDefinitionSimple("propertyToBeRemoved")
+ originalConfigDef.getPropertyDefinitionSimple("propertyToBeRemoved")
);
}
@Test(enabled = false)
public void propertyGroupDefNotInNewConfigurationDefShouldBeRemoved() throws Exception {
- for (PropertyGroupDefinition def : originalConfigurationDef.getGroupDefinitions()) {
+ for (PropertyGroupDefinition def : originalConfigDef.getGroupDefinitions()) {
if (def.getName().equals("groupToBeRemoved")) {
fail("Expected property group 'groupToBeRemoved' to be deleted since it is not in the new configuration def.");
}
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java
new file mode 100644
index 0000000..8eb4632
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java
@@ -0,0 +1,70 @@
+package org.rhq.enterprise.server.configuration.metadata;
+
+import java.io.FileNotFoundException;
+import java.net.URL;
+
+import javax.xml.XMLConstants;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.util.ValidationEventCollector;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+
+import org.apache.commons.jxpath.JXPathContext;
+
+import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser;
+import org.rhq.core.clientapi.descriptor.DescriptorPackages;
+import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor;
+import org.rhq.core.clientapi.descriptor.plugin.ResourceDescriptor;
+import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
+
+public class PluginDescriptorUtil {
+
+ public static PluginDescriptor loadPluginDescriptor(String file) {
+ try {
+ URL pluginDescriptorURL = PluginDescriptorUtil.class.getResource(file);
+ if (pluginDescriptorURL == null) {
+ throw new FileNotFoundException("File " + file + " not found");
+ }
+
+ JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN);
+ URL pluginSchemaURL = PluginDescriptorUtil.class.getClassLoader().getResource("rhq-plugin.xsd");
+ Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(
+ pluginSchemaURL);
+ Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+ ValidationEventCollector vec = new ValidationEventCollector();
+ unmarshaller.setEventHandler(vec);
+ unmarshaller.setSchema(pluginSchema);
+
+ return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static Object find(PluginDescriptor descriptor, String path) {
+ JXPathContext context = JXPathContext.newContext(descriptor);
+ return context.getValue(path);
+ }
+
+ public static ConfigurationDefinition loadPluginConfigDefFor(PluginDescriptor descriptor, String path,
+ String configName) {
+ try {
+ ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path);
+ return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getPluginConfiguration());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static ConfigurationDefinition loadResourceConfigDefFor(PluginDescriptor descriptor, String path,
+ String configName) {
+ try {
+ ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path);
+ return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getResourceConfiguration());
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
new file mode 100644
index 0000000..0c7d362
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml
@@ -0,0 +1,13 @@
+<plugin name="ConfigurationMetadataManagerBeanTest"
+ package="org.rhq.enterprise.server.confiuguration.metadata"
+ version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="MyServer1">
+ <plugin-configuration>
+ <c:simple-property name="myProperty1"/>
+ </plugin-configuration>
+ </server>
+</plugin>
diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
new file mode 100644
index 0000000..8997f8f
--- /dev/null
+++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml
@@ -0,0 +1,14 @@
+<plugin name="ConfigurationMetadataManagerBeanTest"
+ package="org.rhq.enterprise.server.confiuguration.metadata"
+ version="2.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="urn:xmlns:rhq-plugin"
+ xmlns:c="urn:xmlns:rhq-configuration">
+
+ <server name="MyServer1">
+ <plugin-configuration>
+ <c:simple-property name="myProperty1"/>
+ <c:simple-property name="bar" description="bar property"/>
+ </plugin-configuration>
+ </server>
+</plugin>
commit f0fffb5636ef2cdf89f6a1a1b1808e5d2fd98b6c
Author: John Sanda <jsanda(a)redhat.com>
Date: Tue Sep 28 17:15:48 2010 -0400
[BZ 619781] Handling more scenarios for settting connection properties to default values
Adding logic to handle three additional scenarios each of which involves
connection properties that are required and specify a default value:
1) A new property is added to a new group
2) An existing property not part of a group added to an existing group
3) A property previously in a group moved outside of a group
There were also some scenarios when properties were moved into or out of a group
and the group reference was not getting set or unset.
ConfigurationMetadataManagerBean has been modifed to update these references.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
index ad0c84b..ecad316 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.server.configuration.metadata;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.configuration.definition.PropertyDefinition;
+import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import java.util.HashSet;
import java.util.Set;
@@ -35,6 +36,8 @@ public class ConfigurationDefinitionUpdateReport {
private Set<PropertyDefinition> newPropertyDefs = new HashSet<PropertyDefinition>();
+ private Set<PropertyDefinition> updatedPropertyDefs = new HashSet<PropertyDefinition>();
+
public ConfigurationDefinitionUpdateReport(ConfigurationDefinition configurationDefinition) {
configurationDef = configurationDefinition;
}
@@ -44,11 +47,23 @@ public class ConfigurationDefinitionUpdateReport {
}
public void addNewPropertyDefinition(PropertyDefinition propertyDef) {
- newPropertyDefs.add(propertyDef);
+ if (propertyDef instanceof PropertyDefinitionSimple) {
+ newPropertyDefs.add(propertyDef);
+ }
}
public Set<PropertyDefinition> getNewPropertyDefinitions() {
return newPropertyDefs;
}
+ public void addUpdatedPropertyDefinition(PropertyDefinition propertyDef) {
+ if (propertyDef instanceof PropertyDefinitionSimple) {
+ updatedPropertyDefs.add(propertyDef);
+ }
+ }
+
+ public Set<PropertyDefinition> getUpdatedPropertyDefinitions() {
+ return updatedPropertyDefs;
+ }
+
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
index 8427c8b..04a3995 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java
@@ -74,6 +74,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
PropertyDefinition existingProp = existingDefinition.get(newProperty.getName());
if (existingProp != null) {
updatePropertyDefinition(existingProp, newProperty);
+ updateReport.addUpdatedPropertyDefinition(newProperty);
} else {
existingDefinition.put(newProperty);
updateReport.addNewPropertyDefinition(newProperty);
@@ -130,6 +131,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
PropertyDefinition existingProperty = existingDefinition.getPropertyDefinitions().get(nDef.getName());
if (existingProperty != null) {
updatePropertyDefinition(existingProperty, nDef);
+ updateReport.addUpdatedPropertyDefinition(nDef);
} else {
existingDefinition.put(nDef);
updateReport.addNewPropertyDefinition(nDef);
@@ -157,6 +159,11 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
entityManager.persist(def);
def.setPropertyGroupDefinition(group);
def.setConfigurationDefinition(existingDefinition);
+
+ if (!exPDefs.containsKey(def.getName())) {
+ updateReport.addNewPropertyDefinition(def);
+ }
+
exPDefs.put(def.getName(), def);
}
}
@@ -309,6 +316,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa
existingProperty.setRequired(newProperty.isRequired());
existingProperty.setReadOnly(newProperty.isReadOnly());
existingProperty.setSummary(newProperty.isSummary());
+ existingProperty.setPropertyGroupDefinition(newProperty.getPropertyGroupDefinition());
/*
* After the general things have been set, go through the subtypes of PropertyDefinition. If the new type is the
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
index a136561..ff81a6e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java
@@ -969,7 +969,8 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
.updateConfigurationDefinition(resourceType.getPluginConfigurationDefinition(),
existingConfigurationDefinition);
- if (updateReport.getNewPropertyDefinitions().size() > 0) {
+ if (updateReport.getNewPropertyDefinitions().size() > 0 ||
+ updateReport.getUpdatedPropertyDefinitions().size() > 0) {
Subject overlord = subjectManager.getOverlord();
ResourceCriteria criteria = new ResourceCriteria();
criteria.addFilterResourceTypeId(existingType.getId());
@@ -991,6 +992,7 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
private void updateResourcePluginConfiguration(Resource resource, ConfigurationDefinitionUpdateReport updateReport) {
Configuration pluginConfiguration = resource.getPluginConfiguration();
+ boolean modified = false;
int numberOfProperties = pluginConfiguration.getProperties().size();
ConfigurationTemplate template = updateReport.getConfigurationDefinition().getDefaultTemplate();
Configuration templateConfiguration = template.getConfiguration();
@@ -999,10 +1001,23 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
if (propertyDef.isRequired()) {
Property templateProperty = templateConfiguration.get(propertyDef.getName());
pluginConfiguration.put(templateProperty.deepCopy(false));
+ modified = true;
}
}
- if (pluginConfiguration.getProperties().size() > numberOfProperties) {
+ for (PropertyDefinition propertyDef : updateReport.getUpdatedPropertyDefinitions()) {
+ if (propertyDef.isRequired()) {
+ String propertyValue = pluginConfiguration.getSimpleValue(propertyDef.getName(), null);
+ if (propertyValue == null) {
+ Property templateProperty = templateConfiguration.get(propertyDef.getName());
+ pluginConfiguration.put(templateProperty.deepCopy(false));
+ modified = true;
+ }
+ }
+ }
+
+// if (pluginConfiguration.getProperties().size() > numberOfProperties) {
+ if (modified) {
resource.setMtime(new Date().getTime());
}
}
13 years, 8 months
[rhq] modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
New commits:
commit ebd4ec6f3c0ec9232970ee6c58ebdecf16b5b4a2
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:59:28 2010 -0400
be able to resize the new notif dialog
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index f707dc1..117fcb0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -284,8 +284,8 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement
winModal.setShowModalMask(true);
winModal.setAutoSize(true);
winModal.setAutoCenter(true);
- //winModal.setShowResizer(true);
- //winModal.setCanDragResize(true);
+ winModal.setShowResizer(true);
+ winModal.setCanDragResize(true);
winModal.centerInPage();
winModal.addCloseClickHandler(new CloseClickHandler() {
@Override
13 years, 8 months
[rhq] .classpath
by mazz
.classpath | 1 +
1 file changed, 1 insertion(+)
New commits:
commit f0b0a15a1804d4606a03af3fb89ccfc0fb5bff91
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 2 21:32:53 2010 -0400
add gwt-log to eclipse classpath
diff --git a/.classpath b/.classpath
index 0a567d7..1a1236c 100644
--- a/.classpath
+++ b/.classpath
@@ -252,6 +252,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.0.3/gwt-user-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/com/google/code/gwt-log/gwt-log/3.0.3/gwt-log-3.0.3.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
13 years, 8 months
[rhq] modules/enterprise
by ips
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 131 ++++++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java | 10
3 files changed, 129 insertions(+), 23 deletions(-)
New commits:
commit 9325dbcc42782c4a89be13acb7243dc08b618ec2
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Oct 1 21:15:08 2010 -0400
work on completing impl of map-of-simples in ConfigurationEditor
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 343a709..fdc2d9c 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
@@ -39,6 +39,7 @@ import com.smartgwt.client.types.TreeModelType;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
+import com.smartgwt.client.util.ValueCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
@@ -73,6 +74,8 @@ import com.smartgwt.client.widgets.form.validator.Validator;
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.CellSavedEvent;
+import com.smartgwt.client.widgets.grid.events.CellSavedHandler;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
@@ -115,11 +118,13 @@ import org.rhq.core.domain.configuration.definition.constraint.FloatRangeConstra
import org.rhq.core.domain.configuration.definition.constraint.IntegerRangeConstraint;
import org.rhq.core.domain.configuration.definition.constraint.RegexConstraint;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.PropertyGrid;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository;
import org.rhq.enterprise.gui.coregui.client.util.CanvasUtility;
+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;
@@ -561,12 +566,12 @@ public class ConfigurationEditor extends LocatableVLayout {
}
private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap,
- PropertyMap propertyMap) {
+ final PropertyMap propertyMap) {
// create the property grid
- PropertyGrid propertyGrid = new PropertyGrid();
+ final PropertyGrid propertyGrid = new PropertyGrid();
propertyGrid.getNameField().setName("Name");
propertyGrid.getValuesField().setName("Value");
-
+
// create the editors
Map<String, FormItem> editorsMap = new HashMap<String, FormItem>();
TextItem textEditor = new TextItem();
@@ -575,29 +580,123 @@ public class ConfigurationEditor extends LocatableVLayout {
// set the editors and attribute name where to find the record type
propertyGrid.setEditorsMap("fieldType", editorsMap);
- if (propertyMap != null) {
- ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()];
+ if (propertyDefinitionMap != null) {
+ ListGridRecord[] records = new ListGridRecord[propertyDefinitionMap.getPropertyDefinitions().size()];
int i = 0;
- for (Property property : propertyMap.getMap().values()) {
+ // TODO (ips): For open maps, create the records based on props, not propDefs.
+ // TODO (ips): Render unset checkboxes amd descriptions for member props, just as we would for top-level simples.
+ for (PropertyDefinition propDef : propertyDefinitionMap.getPropertyDefinitions().values()) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute("Name", property.getName());
- record.setAttribute("Value", ((PropertySimple) property).getStringValue());
+ String propertyName = propDef.getName();
+ record.setAttribute("Name", propertyName);
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ String value = (prop != null) ? prop.getStringValue() : null;
+ record.setAttribute("Value", value);
record.setAttribute("fieldType", "simpleText");
+ record.setAttribute("readOnly", propDef.isReadOnly());
records[i++] = record;
}
propertyGrid.setData(records);
}
- propertyGrid.draw();
+ VLayout canvas = new VLayout();
+
+ canvas.addMember(propertyGrid);
+
+ // Footer
+ ToolStrip footer = new ToolStrip();
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
+ canvas.addMember(footer);
+
+ // Properties can only be added to or deleted from non-read-only "open" maps.
+ if (propertyDefinitionMap.getPropertyDefinitions().isEmpty() && !propertyDefinitionMap.isReadOnly()) {
+ final IButton deleteButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete");
+ deleteButton.setDisabled(true);
+ deleteButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ final ListGridRecord[] selectedRecords = propertyGrid.getSelection();
+ String noun = (selectedRecords.length == 1) ? "property" : "properties";
+ String message = "Are you sure you want to delete the selected" + noun + "?";
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ for (ListGridRecord selectedRecord : selectedRecords) {
+ propertyGrid.removeData(selectedRecord);
+ String propertyName = selectedRecord.getAttribute("Name");
+ propertyMap.getMap().remove(propertyName);
+ }
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(deleteButton);
- CanvasItem item = new CanvasItem();
- item.setCanvas(propertyGrid);
- // item.setHeight(500);
- item.setColSpan(3);
- item.setEndRow(true);
- item.setShowTitle(false);
- fields.add(item);
+ propertyGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ int count = propertyGrid.getSelection().length;
+ deleteButton.setDisabled(count < 1);
+ }
+ });
+
+ final IButton newButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "New");
+ newButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.askforValue("Enter the name of the property to be added.", new ValueCallback() {
+ @Override
+ public void execute(String propertyName) {
+ if (propertyMap.get(propertyName) != null) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("Cannot add property named '" + propertyName
+ + "', because the set already contains a property with that name.",
+ Message.Severity.Error, EnumSet.of(Message.Option.Transient)));
+ } else {
+ propertyMap.put(new PropertySimple(propertyName, null));
+
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute("Name", propertyName);
+ record.setAttribute("Value", "");
+ record.setAttribute("fieldType", "simpleText");
+
+ propertyGrid.addData(record);
+ propertyGrid.focus();
+ propertyGrid.enableSpecificEditor(record);
+
+ CoreGUI.getMessageCenter().notify(new Message("Added property to the set.", EnumSet.of(
+ Message.Option.Transient)));
+ }
+ }
+ });
+ }
+ });
+ footer.addMember(newButton);
+ }
+ propertyGrid.addCellSavedHandler(new CellSavedHandler() {
+ @Override
+ public void onCellSaved(CellSavedEvent cellSavedEvent) {
+ Record record = cellSavedEvent.getRecord();
+ String propertyName = record.getAttribute("Name");
+ PropertySimple prop = propertyMap.getSimple(propertyName);
+ if (prop == null) {
+ prop = new PropertySimple(propertyName, null);
+ }
+ String value = record.getAttribute("Value");
+ prop.setStringValue(value);
+ }
+ });
+
+ propertyGrid.draw();
+
+ CanvasItem canvasItem = new CanvasItem();
+ canvasItem.setCanvas(canvas);
+ // item.setHeight(500);
+ canvasItem.setColSpan(3);
+ canvasItem.setEndRow(true);
+ canvasItem.setShowTitle(false);
+ fields.add(canvasItem);
}
private void buildListOfMapsField(final String locatorId, ArrayList<FormItem> fields,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
index ee6b7d7..73340fa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java
@@ -38,7 +38,6 @@ import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
* @author Dan Mihai Ile
*/
public class PropertyGrid extends ListGrid {
-
/**
* Map to hold the editors
*/
@@ -56,7 +55,7 @@ public class PropertyGrid extends ListGrid {
*/
public PropertyGrid() {
- // create the 2 fields, one for names, other for values
+ // Create the 2 fields - one for names, other for values.
ListGridField nameField = new ListGridField();
nameField.setCanEdit(false);
ListGridField valueField = new ListGridField();
@@ -100,7 +99,7 @@ public class PropertyGrid extends ListGrid {
/**
* Set the name of the attribute from where the row will get the editor name
- * to be used on the {@link Map} from where the rows will get it's editors
+ * to be used on the {@link Map} from where the rows will get its editors
* <p/>
* When an edit starts the {@link PropertyGrid} will retrieve the key of the
* editor form the row's attributes and use that key on the map to get the
@@ -120,8 +119,9 @@ public class PropertyGrid extends ListGrid {
*
* @param record the record
*/
- private void enableSpecificEditor(Record record) {
- if (editorsMap != null) {
+ public void enableSpecificEditor(Record record) {
+ boolean readOnly = record.getAttributeAsBoolean("readOnly");
+ if (editorsMap != null && !readOnly) {
String attribute = record.getAttribute(valueFieldAttribute);
if (editorsMap.containsKey(attribute)) {
FormItem formItem = editorsMap.get(attribute);
@@ -129,5 +129,4 @@ public class PropertyGrid extends ListGrid {
}
}
}
-
}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 429ef36..3a0b464 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -39,6 +39,10 @@ public class Message {
public enum Severity { Info, Warning, Error, Fatal };
public enum Option { Transient, Sticky, BackgroundJobResult };
+ public Message(String conciseMessage) {
+ this(conciseMessage, (Severity)null);
+ }
+
public Message(String conciseMessage, Severity severity) {
this(conciseMessage, null, severity);
}
@@ -46,7 +50,11 @@ public class Message {
public Message(String conciseMessage, String detailedMessage) {
this(conciseMessage, detailedMessage, null);
}
-
+
+ public Message(String conciseMessage, EnumSet<Option> options) {
+ this(conciseMessage, null, options);
+ }
+
public Message(String conciseMessage, String detailedMessage, Severity severity) {
this(conciseMessage, detailedMessage, severity, null);
}
13 years, 8 months