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@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@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>
rhq-commits@lists.fedorahosted.org