/* * RHQ Management Platform * Copyright 2011, 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.coregui.client.admin.templates; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import com.smartgwt.client.widgets.tree.TreeGrid; import com.smartgwt.client.widgets.tree.TreeGridField; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.resource.composite.ResourceTypeTemplateCountComposite; import org.rhq.core.domain.util.ResourceTypeUtility; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.IconEnum; import org.rhq.coregui.client.ImageManager; import org.rhq.coregui.client.PermissionsLoadedListener; import org.rhq.coregui.client.PermissionsLoader; import org.rhq.coregui.client.components.TitleBar; import org.rhq.coregui.client.components.view.ViewName; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.gwt.ResourceTypeGWTServiceAsync; import org.rhq.coregui.client.util.message.Message; /** * Allows a user to ignore or unignore specific resource types. * * @author John Mazzitelli */ public class IgnoreResourceTypesView extends ResourceTypeTreeView { public static final ViewName VIEW_ID = new ViewName("IgnoreResourceTypes", MSG.view_adminConfig_ignoreResourceTypes(), IconEnum.SERVICES); public static final String VIEW_PATH = ResourceTypeTreeView.VIEW_PATH + VIEW_ID; private static final String ATTR_ENABLED = "enabled"; public IgnoreResourceTypesView() { super(); } @Override protected String getEditColumnTitle() { return MSG.view_adminConfig_changeTitle(); } @Override protected String getEditLink(String typeId) { return null; // there is no separate edit canvas, we'll do it inline inside editTemplates } @Override protected TitleBar getTitleBar() { return new TitleBar(MSG.view_adminConfig_ignoreResourceTypes(), ImageManager.getResourceIcon(ResourceCategory.SERVICE)); } @Override protected Collection<ListGridField> getAdditionalListGridFields(boolean isTreeGrid) { List<ListGridField> fields = new ArrayList<ListGridField>(1); ListGridField enabledTemplatesField = (isTreeGrid) ? new TreeGridField(ATTR_ENABLED, MSG.common_title_enabled()) : new ListGridField(ATTR_ENABLED, MSG.common_title_enabled()); enabledTemplatesField.setWidth("150"); enabledTemplatesField.setAlign(Alignment.CENTER); // enabledTemplatesField.setPrompt(MSG.common_title_enabled()); enabledTemplatesField.setType(ListGridFieldType.IMAGE); fields.add(enabledTemplatesField); return fields; } @Override protected void editTemplates(final ResourceType type, final RecordClickEvent event) { new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() { public void onPermissionsLoaded(Set<Permission> permissions) { if (!permissions.contains(Permission.MANAGE_INVENTORY)) { SC.warn(MSG.view_adminConfig_ignoreResourceTypes_noperm()); return; } final boolean newIgnoreFlag = !type.isIgnored(); String msg = newIgnoreFlag ? MSG.view_adminConfig_ignoreResourceTypes_confirmIgnore(ResourceTypeUtility .displayName(type)) : MSG.view_adminConfig_ignoreResourceTypes_confirmUnignore(ResourceTypeUtility .displayName(type)); SC.ask(MSG.common_msg_areYouSure(), msg, new BooleanCallback() { public void execute(Boolean value) { if (Boolean.TRUE.equals(value)) { // call server to flip ignore flag on type // if we are going to ignore a type, then increase the timeout since this might take a while if there are lots of resources of the type ResourceTypeGWTServiceAsync service; if (newIgnoreFlag) { service = GWTServiceLookup.getResourceTypeGWTService(300000); // arbitrarily picking 5m CoreGUI.getMessageCenter().notify( new Message(MSG.view_adminConfig_ignoreResourceTypes_pleaseWait())); } else { service = GWTServiceLookup.getResourceTypeGWTService(); } service.setResourceTypeIgnoreFlag(type.getId(), newIgnoreFlag, new AsyncCallback<Void>() { public void onSuccess(Void result) { type.setIgnored(newIgnoreFlag); // this type reference is inside our cache so make sure we update it String msg = newIgnoreFlag ? MSG .view_adminConfig_ignoreResourceTypes_successIgnore(ResourceTypeUtility .displayName(type)) : MSG .view_adminConfig_ignoreResourceTypes_successUnignore(ResourceTypeUtility .displayName(type)); CoreGUI.getMessageCenter().notify(new Message(msg)); // refresh the listgrid // (note: try as I might, could not figure out how to get the 1 listgrid to refresh, so do all of them here) CoreGUI.refresh(); } public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( MSG.view_adminConfig_ignoreResourceTypes_failure(), caught); } }); } } }); } }); } @Override protected ResourceTypeTreeNodeBuilder getNodeBuilderInstance(ListGrid platformsList, ListGrid platformServicesList, TreeGrid serversTreeGrid) { return new NodeBuilder(platformsList, platformServicesList, serversTreeGrid); } public static class NodeBuilder extends ResourceTypeTreeNodeBuilder { public NodeBuilder(ListGrid platformsList, ListGrid platformServicesList, TreeGrid serversTreeGrid) { super(platformsList, platformServicesList, serversTreeGrid); } @Override ResourceTypeListGridRecord getGridRecordInstance(ResourceTypeTemplateCountComposite composite) { return new GridRecord(composite); } public static class GridRecord extends ResourceTypeListGridRecord { public GridRecord(ResourceTypeTemplateCountComposite composite) { super(composite); setAttribute(ATTR_ENABLED, ImageManager.getAvailabilityIcon(!composite.getType().isIgnored())); } } @Override ResourceTypeTreeNode getTreeNodeInstance(ResourceTypeTemplateCountComposite composite, String plugin) { return new TreeNode(composite, plugin); } public static class TreeNode extends ResourceTypeTreeNode { public TreeNode(ResourceTypeTemplateCountComposite composite, String plugin) { super(composite, plugin); setAttribute(ATTR_ENABLED, ImageManager.getAvailabilityIcon(!composite.getType().isIgnored())); } @Override public ResourceTypeTreeNode copy() { ResourceTypeTreeNode dup = super.copy(); dup.setAttribute(ATTR_ENABLED, this.getAttribute(ATTR_ENABLED)); return dup; } } } }