/*
* 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.smartgwt.client.types.Alignment;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.layout.Layout;
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.ResourceType;
import org.rhq.core.domain.resource.composite.ResourceTypeTemplateCountComposite;
import org.rhq.coregui.client.IconEnum;
import org.rhq.coregui.client.ImageManager;
import org.rhq.coregui.client.LinkManager;
import org.rhq.coregui.client.PermissionsLoadedListener;
import org.rhq.coregui.client.PermissionsLoader;
import org.rhq.coregui.client.ViewPath;
import org.rhq.coregui.client.components.TitleBar;
import org.rhq.coregui.client.components.view.ViewName;
import org.rhq.coregui.client.util.enhanced.EnhancedVLayout;
/**
* @author Jay Shaughnessy
*
*/
public class MetricTemplateTypeView extends ResourceTypeTreeView {
public static final ViewName VIEW_ID = new ViewName("MetricTemplates", MSG.view_adminConfig_metricTemplates(),
IconEnum.METRIC);
public static final String VIEW_PATH = ResourceTypeTreeView.VIEW_PATH + VIEW_ID;
public static final String ATTR_ENABLED_TEMPLATES = "enabledTemplates";
public static final String ATTR_DISABLED_TEMPLATES = "disabledTemplates";
private Layout canvas;
public MetricTemplateTypeView() {
super();
}
@Override
protected String getEditLink(String typeId) {
if (null == typeId) {
return LinkManager.getAdminTemplatesLink(VIEW_ID.getName());
}
return LinkManager.getAdminTemplatesEditLink(VIEW_ID.getName(), Integer.valueOf(typeId));
}
@Override
protected TitleBar getTitleBar() {
return new TitleBar(MSG.view_adminConfig_metricTemplates(), ImageManager.getMetricEditIcon());
}
@Override
protected Collection<ListGridField> getAdditionalListGridFields(boolean isTreeGrid) {
List<ListGridField> fields = new ArrayList<ListGridField>(2);
ListGridField enabledTemplatesField = (isTreeGrid) //
? new TreeGridField(ATTR_ENABLED_TEMPLATES, MSG.view_adminTemplates_enabledTemplates())
: new ListGridField(ATTR_ENABLED_TEMPLATES, MSG.view_adminTemplates_enabledTemplates());
enabledTemplatesField.setWidth("150");
enabledTemplatesField.setAlign(Alignment.CENTER);
enabledTemplatesField.setPrompt(MSG.view_adminTemplates_prompt_enabledMetricTemplates());
fields.add(enabledTemplatesField);
ListGridField disabledTemplatesField = (isTreeGrid) //
? new TreeGridField(ATTR_DISABLED_TEMPLATES, MSG.view_adminTemplates_disabledTemplates())
: new ListGridField(ATTR_DISABLED_TEMPLATES, MSG.view_adminTemplates_disabledTemplates());
disabledTemplatesField.setWidth("150");
disabledTemplatesField.setAlign(Alignment.CENTER);
disabledTemplatesField.setPrompt(MSG.view_adminTemplates_prompt_disabledMetricTemplates());
fields.add(disabledTemplatesField);
return fields;
}
@Override
protected void editTemplates(final ResourceType type, ViewPath viewPath) {
new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() {
public void onPermissionsLoaded(Set<Permission> permissions) {
Layout metricCanvas = getCanvas();
TemplateSchedulesView templateSchedulesView = new TemplateSchedulesView(type, permissions);
prepareSubCanvas(metricCanvas, templateSchedulesView, true);
switchToCanvas(MetricTemplateTypeView.this, metricCanvas);
}
});
}
private Layout getCanvas() {
if (this.canvas == null) {
EnhancedVLayout layout = new EnhancedVLayout();
layout.setHeight100();
layout.setWidth100();
layout.setMargin(5);
this.canvas = layout;
}
return this.canvas;
}
@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_TEMPLATES, composite.getEnabledMetricCount());
setAttribute(ATTR_DISABLED_TEMPLATES, composite.getDisabledMetricCount());
// If the type has no metrics then metric templates are enabled for the type
if (0 == (composite.getEnabledMetricCount() + composite.getDisabledMetricCount())) {
setAttribute(ATTRIB_EDIT, ImageManager.getEditDisabledIcon());
}
}
}
@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_TEMPLATES, composite.getEnabledMetricCount());
setAttribute(ATTR_DISABLED_TEMPLATES, composite.getDisabledMetricCount());
// If the type has no metrics then metric templates are enabled for the type
if (0 == (composite.getEnabledMetricCount() + composite.getDisabledMetricCount())) {
setAttribute(ATTRIB_EDIT, ImageManager.getEditDisabledIcon());
}
}
@Override
public ResourceTypeTreeNode copy() {
ResourceTypeTreeNode dup = super.copy();
dup.setAttribute(ATTR_ENABLED_TEMPLATES, this.getAttributeAsLong(ATTR_ENABLED_TEMPLATES));
dup.setAttribute(ATTR_DISABLED_TEMPLATES, this.getAttributeAsLong(ATTR_DISABLED_TEMPLATES));
return dup;
}
}
}
}