modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
| 49 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/TemplateAlertDefinitionsView.java
| 134 ++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertTemplateGWTService.java
| 44 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
| 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java
| 171 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertTemplateGWTServiceImpl.java
| 85 ++++
modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
| 8
8 files changed, 366 insertions(+), 132 deletions(-)
New commits:
commit e17fe828c93ecadae7cd07ca14ea643c15beac08
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 23 11:58:59 2010 -0400
there was a bug in the resource type repo code such that
if we loaded a resource type in the cache already but the cache
did not load any metadata, the typeCacheLevel map did not
have the type in it, which causes the if-stmt to erroneously conclude
it did not have to add the type to the typesNeeded collection (the containsKey
resulted in false, meaning the else clause got invoked).
This commit changes the if-stmt to cover that additional edge case.
I added a comment above the if-stmt to indicate the three cases in
which we should be adding to the typesNeeded collection.
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 1c01176..c998010 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
@@ -26,6 +26,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.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -160,8 +161,17 @@ public class ResourceTypeRepository {
});
}
- public void getResourceTypes(Integer[] resourceTypeIds, final
EnumSet<MetadataType> metadataTypes,
+ public void getResourceTypes(Integer[] resourceTypeIds, EnumSet<MetadataType>
metadataTypesNeeded,
final TypesLoadedCallback callback) {
+
+ // note metadataTypesNeeded == null implies EnumSet.noneOf(MetadataType.class)
+ final EnumSet<MetadataType> metadataTypes;
+ if (metadataTypesNeeded == null) {
+ metadataTypes = EnumSet.noneOf(MetadataType.class);
+ } else {
+ metadataTypes = metadataTypesNeeded;
+ }
+
ResourceTypeCriteria criteria = new ResourceTypeCriteria();
final Map<Integer, ResourceType> cachedTypes = new HashMap<Integer,
ResourceType>();
@@ -172,9 +182,14 @@ public class ResourceTypeRepository {
} else {
for (Integer typeId : resourceTypeIds) {
- if (!typeCache.containsKey(typeId)
- || (metadataTypes != null &&
(typeCacheLevel.containsKey(typeId)) && !typeCacheLevel.get(typeId)
- .containsAll(metadataTypes))) {
+ // we need to query for data if:
+ // 1. we don't have the resource type in our cache at all, or...
+ // 2. we have the basic resource type but no additional metadata, but the
caller is asking for additional metadata
+ // 3. we have the resource type and some additional metadata, but the
caller is asking for metadata that we don't have
+ if (!typeCache.containsKey(typeId) // 1.
+ || (!metadataTypes.isEmpty() &&
(!typeCacheLevel.containsKey(typeId) // 2.
+ || !typeCacheLevel.get(typeId).containsAll(metadataTypes)))) // 3.
+ {
typesNeeded.add(typeId);
} else {
cachedTypes.put(typeId, typeCache.get(typeId));
@@ -193,41 +208,42 @@ public class ResourceTypeRepository {
if (metadataTypes != null) {
for (MetadataType metadataType : metadataTypes) {
switch (metadataType) {
- case children:
- criteria.fetchChildResourceTypes(true);
- break;
- case content:
- criteria.fetchPackageTypes(true);
- break;
- case events:
- criteria.fetchEventDefinitions(true);
- break;
- case measurements:
- criteria.fetchMetricDefinitions(true);
- break;
- case operations:
- criteria.fetchOperationDefinitions(true);
- break;
- case parentTypes:
- criteria.fetchParentResourceTypes(true);
- break;
- case pluginConfigurationDefinition:
- criteria.fetchPluginConfigurationDefinition(true);
- break;
- case processScans:
- criteria.fetchProcessScans(true);
- break;
- case productVersions:
- criteria.fetchProductVersions(true);
- break;
- case resourceConfigurationDefinition:
- criteria.fetchResourceConfigurationDefinition(true);
- break;
- case subCategory:
- criteria.fetchSubCategory(true);
- break;
- default:
- System.err.println("ERROR: metadataType " +
metadataType.name() + " not incorporated into ResourceType criteria.");
+ case children:
+ criteria.fetchChildResourceTypes(true);
+ break;
+ case content:
+ criteria.fetchPackageTypes(true);
+ break;
+ case events:
+ criteria.fetchEventDefinitions(true);
+ break;
+ case measurements:
+ criteria.fetchMetricDefinitions(true);
+ break;
+ case operations:
+ criteria.fetchOperationDefinitions(true);
+ break;
+ case parentTypes:
+ criteria.fetchParentResourceTypes(true);
+ break;
+ case pluginConfigurationDefinition:
+ criteria.fetchPluginConfigurationDefinition(true);
+ break;
+ case processScans:
+ criteria.fetchProcessScans(true);
+ break;
+ case productVersions:
+ criteria.fetchProductVersions(true);
+ break;
+ case resourceConfigurationDefinition:
+ criteria.fetchResourceConfigurationDefinition(true);
+ break;
+ case subCategory:
+ criteria.fetchSubCategory(true);
+ break;
+ default:
+ Log.error("ERROR: metadataType " + metadataType.name()
+ + " not incorporated into ResourceType criteria.");
}
}
}
@@ -249,43 +265,44 @@ public class ResourceTypeRepository {
if (metadataTypes != null) {
for (MetadataType metadataType : metadataTypes) {
switch (metadataType) {
- case children:
-
cachedType.setChildResourceTypes(type.getChildResourceTypes());
- break;
- case content:
-
cachedType.setPackageTypes(type.getPackageTypes());
- break;
- case events:
-
cachedType.setPackageTypes(type.getPackageTypes());
- break;
- case measurements:
-
cachedType.setMetricDefinitions(type.getMetricDefinitions());
- break;
- case operations:
-
cachedType.setOperationDefinitions(type.getOperationDefinitions());
- break;
- case parentTypes:
-
cachedType.setParentResourceTypes(type.getParentResourceTypes());
- break;
- case pluginConfigurationDefinition:
- cachedType
-
.setPluginConfigurationDefinition(type.getPluginConfigurationDefinition());
- break;
- case processScans:
-
cachedType.setProcessScans(type.getProcessScans());
- break;
- case productVersions:
-
cachedType.setProductVersions(type.getProductVersions());
- break;
- case resourceConfigurationDefinition:
-
cachedType.setResourceConfigurationDefinition(type
- .getResourceConfigurationDefinition());
- break;
- case subCategory:
-
cachedType.setSubCategory(type.getSubCategory());
- break;
- default:
- System.err.println("ERROR: metadataType
" + metadataType.name() + " not merged into cached ResourceType.");
+ case children:
+
cachedType.setChildResourceTypes(type.getChildResourceTypes());
+ break;
+ case content:
+ cachedType.setPackageTypes(type.getPackageTypes());
+ break;
+ case events:
+ cachedType.setPackageTypes(type.getPackageTypes());
+ break;
+ case measurements:
+
cachedType.setMetricDefinitions(type.getMetricDefinitions());
+ break;
+ case operations:
+
cachedType.setOperationDefinitions(type.getOperationDefinitions());
+ break;
+ case parentTypes:
+
cachedType.setParentResourceTypes(type.getParentResourceTypes());
+ break;
+ case pluginConfigurationDefinition:
+ cachedType
+
.setPluginConfigurationDefinition(type.getPluginConfigurationDefinition());
+ break;
+ case processScans:
+ cachedType.setProcessScans(type.getProcessScans());
+ break;
+ case productVersions:
+
cachedType.setProductVersions(type.getProductVersions());
+ break;
+ case resourceConfigurationDefinition:
+ cachedType.setResourceConfigurationDefinition(type
+ .getResourceConfigurationDefinition());
+ break;
+ case subCategory:
+ cachedType.setSubCategory(type.getSubCategory());
+ break;
+ default:
+ System.err.println("ERROR: metadataType " +
metadataType.name()
+ + " not merged into cached
ResourceType.");
}
}
}
@@ -295,7 +312,7 @@ public class ResourceTypeRepository {
cachedTypes.put(type.getId(), type);
}
- if (metadataTypes != null) {
+ if (metadataTypes != null && !metadataTypes.isEmpty()) {
if (typeCacheLevel.containsKey(type.getId())) {
typeCacheLevel.get(type.getId()).addAll(metadataTypes);
} else {
commit 3544cc5af47788cb6d7a1b23a82389e2abdd4578
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Sat Oct 23 11:49:51 2010 -0400
add new alert template GWT service to support alert template modifications
complete the alert template component so it calls the new GWT service to manipulate
alert templates in the DB
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 f0916e2..3097982 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
@@ -78,6 +78,7 @@
<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="/AlertTemplateGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.AlertTemplateGWTServiceImpl"/>
<servlet path="/AuthorizationGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.AuthorizationGWTServiceImpl"/>
<servlet path="/AvailabilityGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.AvailabilityGWTServiceImpl"/>
<servlet path="/BundleGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.BundleGWTServiceImpl"/>
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
index bd0a433..6e6c9c4 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/ResourceTypeTreeView.java
@@ -18,7 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.templates;
-import com.google.gwt.user.client.rpc.AsyncCallback;
+import java.util.Map;
+
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.SelectionStyle;
@@ -38,10 +39,8 @@ import com.smartgwt.client.widgets.tree.TreeGrid;
import com.smartgwt.client.widgets.tree.TreeGridField;
import com.smartgwt.client.widgets.tree.TreeNode;
-import org.rhq.core.domain.criteria.ResourceTypeCriteria;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
-import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.LinkManager;
@@ -50,7 +49,8 @@ import org.rhq.enterprise.gui.coregui.client.ViewPath;
import
org.rhq.enterprise.gui.coregui.client.alert.definitions.TemplateAlertDefinitionsView;
import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
-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.TypesLoadedCallback;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -205,33 +205,20 @@ public class ResourceTypeTreeView extends LocatableVLayout
implements Bookmarkab
parentCanvas.markForRedraw();
}
- private void editAlertTemplate(final int resourceTypeId, final ViewPath viewPath) {
- ResourceTypeCriteria criteria = new ResourceTypeCriteria();
- criteria.addFilterId(resourceTypeId);
- // TODO we need to fetch some collections here
-
-
GWTServiceLookup.getResourceTypeGWTService().findResourceTypesByCriteria(criteria,
- new AsyncCallback<PageList<ResourceType>>() {
- @Override
- public void onSuccess(PageList<ResourceType> result) {
- if (result != null && result.size() == 1) {
- ResourceType rt = result.get(0);
- Layout alertCanvas = getAlertTemplateCanvas();
- String locatorId =
extendLocatorId("alertTemplateDef");
- TemplateAlertDefinitionsView def = new
TemplateAlertDefinitionsView(locatorId, rt);
- def.renderView(viewPath.next());
- prepareSubCanvas(alertCanvas, def, viewPath.isEnd()); //
don't show our back button if we are going to a template details pane which has its
own back button
- switchToCanvas(ResourceTypeTreeView.this, alertCanvas);
- } else {
- CoreGUI.getErrorHandler().handleError("Failed to get
resource type: " + resourceTypeId);
- }
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError("Error getting resource
type: " + resourceTypeId, caught);
- }
- });
+ private void editAlertTemplate(int resourceTypeId, final ViewPath viewPath) {
+ final Integer[] idArray = new Integer[] { resourceTypeId };
+ ResourceTypeRepository.Cache.getInstance().getResourceTypes(idArray, new
TypesLoadedCallback() {
+ @Override
+ public void onTypesLoaded(Map<Integer, ResourceType> types) {
+ ResourceType rt = types.get(idArray[0]);
+ Layout alertCanvas = getAlertTemplateCanvas();
+ String locatorId = extendLocatorId("alertTemplateDef");
+ TemplateAlertDefinitionsView def = new
TemplateAlertDefinitionsView(locatorId, rt);
+ def.renderView(viewPath.next());
+ prepareSubCanvas(alertCanvas, def, viewPath.isEnd()); // don't show
our back button if we are going to a template details pane which has its own back button
+ switchToCanvas(ResourceTypeTreeView.this, alertCanvas);
+ }
+ });
}
private void editMetricTemplate(int resourceTypeId) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/TemplateAlertDefinitionsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/TemplateAlertDefinitionsView.java
index c26a8f9..ef91200 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/TemplateAlertDefinitionsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/TemplateAlertDefinitionsView.java
@@ -25,14 +25,18 @@ package org.rhq.enterprise.gui.coregui.client.alert.definitions;
import java.util.EnumSet;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.resource.ResourceType;
+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.Message.Severity;
/**
* @author John Mazzitelli
@@ -87,6 +91,16 @@ public class TemplateAlertDefinitionsView extends
AbstractAlertDefinitionsView {
}
@Override
+ public SingleAlertDefinitionView getDetailsView(int id) {
+ SingleAlertDefinitionView view = super.getDetailsView(id);
+ if (id == 0) {
+ // when creating a new alert def, make sure to set this in the new alert def
+ view.getAlertDefinition().setResourceType(resourceType);
+ }
+ return view;
+ }
+
+ @Override
protected boolean isAllowedToModifyAlertDefinitions() {
// TODO: see if user can modify template alerts
return true;
@@ -94,48 +108,122 @@ public class TemplateAlertDefinitionsView extends
AbstractAlertDefinitionsView {
@Override
protected void newButtonPressed(ListGridRecord[] selection) {
- // TODO Auto-generated method stub
- String str = "this is not implemented yet but you selected";
- for (ListGridRecord record : selection) {
- str += ": " + record.getAttribute("name");
- }
- SC.say(str);
+ newDetails();
}
@Override
protected void enableButtonPressed(ListGridRecord[] selection) {
- // TODO Auto-generated method stub
- String str = "this is not implemented yet but you selected";
+ if (selection.length == 0) {
+ return;
+ }
+
+ final Integer[] alertDefIds = new Integer[selection.length];
+ int i = 0;
for (ListGridRecord record : selection) {
- str += ": " + record.getAttribute("name");
+ Integer id =
record.getAttributeAsInt(AbstractAlertDefinitionsDataSource.FIELD_ID);
+ alertDefIds[i++] = id;
}
- SC.say(str);
+
+ GWTServiceLookup.getAlertTemplateService().enableAlertTemplates(alertDefIds, new
AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void v) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("[" + alertDefIds.length + "] alert
templates enabled.", Severity.Info));
+ TemplateAlertDefinitionsView.this.refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to enable alert
templates", caught);
+ }
+ });
}
@Override
protected void disableButtonPressed(ListGridRecord[] selection) {
- // TODO Auto-generated method stub
- String str = "this is not implemented yet but you selected";
+ if (selection.length == 0) {
+ return;
+ }
+
+ final Integer[] alertDefIds = new Integer[selection.length];
+ int i = 0;
for (ListGridRecord record : selection) {
- str += ": " + record.getAttribute("name");
+ Integer id =
record.getAttributeAsInt(AbstractAlertDefinitionsDataSource.FIELD_ID);
+ alertDefIds[i++] = id;
}
- SC.say(str);
+
+ GWTServiceLookup.getAlertTemplateService().disableAlertTemplates(alertDefIds, new
AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void v) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("[" + alertDefIds.length + "] alert
templates disabled.", Severity.Info));
+ TemplateAlertDefinitionsView.this.refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to disable alert
templates", caught);
+ }
+ });
}
@Override
protected void deleteButtonPressed(ListGridRecord[] selection) {
- // TODO Auto-generated method stub
- String str = "this is not implemented yet but you selected";
+ if (selection.length == 0) {
+ return;
+ }
+
+ final Integer[] alertDefIds = new Integer[selection.length];
+ int i = 0;
for (ListGridRecord record : selection) {
- str += ": " + record.getAttribute("name");
+ Integer id =
record.getAttributeAsInt(AbstractAlertDefinitionsDataSource.FIELD_ID);
+ alertDefIds[i++] = id;
}
- SC.say(str);
+
+ GWTServiceLookup.getAlertTemplateService().removeAlertTemplates(alertDefIds, new
AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void v) {
+ CoreGUI.getMessageCenter().notify(
+ new Message("[" + alertDefIds.length + "] alert
templates deleted.", Severity.Info));
+ TemplateAlertDefinitionsView.this.refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to delete alert
templates", caught);
+ }
+ });
}
@Override
- protected void commitAlertDefinition(AlertDefinition alertDefinition) {
- // TODO call into server SLSB to store alert def
- // AlertTemplateManagerLocal alertTemplateManager =
LookupUtil.getAlertTemplateManager();
- // alertTemplateManager.updateAlertTemplate(subject, alertDef, true);
+ protected void commitAlertDefinition(final AlertDefinition alertDefinition) {
+ if (alertDefinition.getId() == 0) {
+
GWTServiceLookup.getAlertTemplateService().createAlertTemplate(alertDefinition,
+ Integer.valueOf(this.resourceType.getId()), new
AsyncCallback<Integer>() {
+ @Override
+ public void onSuccess(Integer result) {
+ CoreGUI.getMessageCenter().notify(new Message("Alert
template is created", Severity.Info));
+ alertDefinition.setId(result.intValue());
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to create
alert template.", caught);
+ }
+ });
+ } else {
+
GWTServiceLookup.getAlertTemplateService().updateAlertTemplate(alertDefinition, true,
+ new AsyncCallback<AlertDefinition>() {
+ @Override
+ public void onSuccess(AlertDefinition result) {
+ CoreGUI.getMessageCenter().notify(new Message("Alert
template is updated.", Severity.Info));
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update
alert template.", caught);
+ }
+ });
+ }
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertTemplateGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertTemplateGWTService.java
new file mode 100644
index 0000000..da8bf55
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertTemplateGWTService.java
@@ -0,0 +1,44 @@
+/*
+ * 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.enterprise.gui.coregui.client.gwt;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+import org.rhq.core.domain.alert.AlertDefinition;
+
+public interface AlertTemplateGWTService extends RemoteService {
+
+ int createAlertTemplate(AlertDefinition alertDefinition, Integer resourceTypeId)
throws Exception;
+
+ /**
+ * Updates a alert template definition.
+ *
+ * @param alertDefinition
+ * @param purgeInternals must be true if you are updating conditions or dampening
settings, can be false otherwise
+ * @return the updated definition
+ * @throws Exception
+ */
+ AlertDefinition updateAlertTemplate(AlertDefinition alertDefinition, boolean
purgeInternals) throws Exception;
+
+ void enableAlertTemplates(Integer[] alertDefinitionIds) throws Exception;
+
+ void disableAlertTemplates(Integer[] alertDefinitionIds) throws Exception;
+
+ void removeAlertTemplates(Integer[] alertDefinitionIds) throws Exception;
+}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index 92fc25d..67218c5 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -41,6 +41,10 @@ public class GWTServiceLookup {
return secure(AlertDefinitionGWTServiceAsync.Util.getInstance());
}
+ public static AlertTemplateGWTServiceAsync getAlertTemplateService() {
+ return secure(AlertTemplateGWTServiceAsync.Util.getInstance());
+ }
+
public static GroupAlertDefinitionGWTServiceAsync getGroupAlertDefinitionService() {
return secure(GroupAlertDefinitionGWTServiceAsync.Util.getInstance());
}
@@ -169,7 +173,7 @@ public class GWTServiceLookup {
Log.debug("SessionRpcRequestBuilder is adding sessionId to request:
" + sessionId);
rb.setHeader(UserSessionManager.SESSION_NAME, sessionId);
} else {
- Log.error("SessionRpcRequestBuilder constructed without a value for
" + UserSessionManager.SESSION_NAME);
+ Log.error("SessionRpcRequestBuilder built without a value for "
+ UserSessionManager.SESSION_NAME);
}
return rb;
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertTemplateGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertTemplateGWTServiceImpl.java
new file mode 100644
index 0000000..55a24e3
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertTemplateGWTServiceImpl.java
@@ -0,0 +1,85 @@
+/*
+ * 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.enterprise.gui.coregui.server.gwt;
+
+import org.rhq.core.domain.alert.AlertDefinition;
+import org.rhq.core.util.exception.ThrowableUtil;
+import org.rhq.enterprise.gui.coregui.client.gwt.AlertTemplateGWTService;
+import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+public class AlertTemplateGWTServiceImpl extends AbstractGWTServiceImpl implements
AlertTemplateGWTService {
+ private static final long serialVersionUID = 1L;
+
+ private AlertTemplateManagerLocal alertTemplateManager =
LookupUtil.getAlertTemplateManager();
+
+ @Override
+ public int createAlertTemplate(AlertDefinition alertDefinition, Integer
resourceTypeId) throws Exception {
+ try {
+ int results = alertTemplateManager
+ .createAlertTemplate(getSessionSubject(), alertDefinition,
resourceTypeId);
+ return results;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ @Override
+ public AlertDefinition updateAlertTemplate(AlertDefinition alertDefinition, boolean
purgeInternals)
+ throws Exception {
+ try {
+ AlertDefinition results =
alertTemplateManager.updateAlertTemplate(getSessionSubject(), alertDefinition,
+ purgeInternals);
+ return SerialUtility.prepare(results,
"AlertTemplateService.updateAlertTemplate");
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ @Override
+ public void enableAlertTemplates(Integer[] alertDefinitionIds) throws Exception {
+ try {
+ alertTemplateManager.enableAlertTemplates(getSessionSubject(),
alertDefinitionIds);
+ return;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ @Override
+ public void disableAlertTemplates(Integer[] alertDefinitionIds) throws Exception {
+ try {
+ alertTemplateManager.disableAlertTemplates(getSessionSubject(),
alertDefinitionIds);
+ return;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+
+ @Override
+ public void removeAlertTemplates(Integer[] alertDefinitionIds) throws Exception {
+ try {
+ alertTemplateManager.removeAlertTemplates(getSessionSubject(),
alertDefinitionIds);
+ return;
+ } catch (Exception e) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(e));
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index 40e7f16..1202124 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -49,6 +49,10 @@
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl</servlet-class>
</servlet>
<servlet>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI
AlertTemplateGWTService</servlet-name>
+
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.AlertTemplateGWTServiceImpl</servlet-class>
+ </servlet>
+ <servlet>
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI
GroupAlertDefinitionGWTService</servlet-name>
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.GroupAlertDefinitionGWTServiceImpl</servlet-class>
</servlet>
@@ -159,6 +163,10 @@
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/AlertDefinitionGWTService</url-pattern>
</servlet-mapping>
<servlet-mapping>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI
AlertTemplateGWTService</servlet-name>
+
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/AlertTemplateGWTService</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI
GroupAlertDefinitionGWTService</servlet-name>
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/GroupAlertDefinitionGWTService</url-pattern>
</servlet-mapping>