/*
* RHQ Management Platform
* Copyright (C) 2005-2011 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.coregui.client.admin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.common.ProductInfo;
import org.rhq.coregui.client.CoreGUI;
import org.rhq.coregui.client.IconEnum;
import org.rhq.coregui.client.UserSessionManager;
import org.rhq.coregui.client.admin.roles.RolesView;
import org.rhq.coregui.client.admin.storage.StorageNodeAdminView;
import org.rhq.coregui.client.admin.templates.AlertDefinitionTemplateTypeView;
import org.rhq.coregui.client.admin.templates.DriftDefinitionTemplateTypeView;
import org.rhq.coregui.client.admin.templates.IgnoreResourceTypesView;
import org.rhq.coregui.client.admin.templates.MetricTemplateTypeView;
import org.rhq.coregui.client.admin.templates.MissingPolicyResourceTypesView;
import org.rhq.coregui.client.admin.topology.AffinityGroupTableView;
import org.rhq.coregui.client.admin.topology.AgentTableView;
import org.rhq.coregui.client.admin.topology.PartitionEventTableView;
import org.rhq.coregui.client.admin.topology.ServerTableView;
import org.rhq.coregui.client.admin.users.UsersView;
import org.rhq.coregui.client.components.FullHTMLPane;
import org.rhq.coregui.client.components.TitleBar;
import org.rhq.coregui.client.components.view.AbstractSectionedLeftNavigationView;
import org.rhq.coregui.client.components.view.NavigationItem;
import org.rhq.coregui.client.components.view.NavigationSection;
import org.rhq.coregui.client.components.view.ViewFactory;
import org.rhq.coregui.client.components.view.ViewName;
import org.rhq.coregui.client.util.enhanced.EnhancedVLayout;
import org.rhq.coregui.client.util.preferences.UserPreferenceNames.UiSubsystem;
/**
* The Administration top-level view.
*
* @author Greg Hinkle
* @author Ian Springer
*/
public class AdministrationView extends AbstractSectionedLeftNavigationView {
public static final ViewName VIEW_ID = new ViewName("Administration", MSG.view_admin_administration());
public static final ViewName SECTION_SECURITY_VIEW_ID = new ViewName("Security", MSG.view_admin_security());
public static final ViewName SECTION_TOPOLOGY_VIEW_ID = new ViewName("Topology", MSG.view_admin_topology());
public static final ViewName SECTION_CONFIGURATION_VIEW_ID = new ViewName("Configuration",
MSG.common_title_configuration());
public static final ViewName SECTION_CONTENT_VIEW_ID = new ViewName("Content", MSG.view_admin_content());
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available
public static final ViewName PAGE_CONTENT_SOURCES_VIEW_ID = new ViewName("ContentSources",
MSG.view_adminContent_contentSources(), IconEnum.CONTENT);
public static final ViewName PAGE_REPOS_VIEW_ID = new ViewName("Repositories", MSG.common_title_repositories(),
IconEnum.CONTENT);
public AdministrationView() {
super(VIEW_ID.getName());
}
@Override
protected List<NavigationSection> getNavigationSections() {
List<NavigationSection> sections = new ArrayList<NavigationSection>();
NavigationSection securitySection = buildSecuritySection();
sections.add(securitySection);
NavigationSection topologySection = buildTopologySection();
sections.add(topologySection);
NavigationSection configurationSection = buildConfigurationSection();
sections.add(configurationSection);
if (UserSessionManager.getUserPreferences().getShowUiSubsystems().get(UiSubsystem.CONTENT)) {
NavigationSection contentSection = buildContentSection();
sections.add(contentSection);
}
return sections;
}
protected VLayout defaultView() {
EnhancedVLayout vLayout = new EnhancedVLayout();
vLayout.setWidth100();
// TODO: Admin icon.
TitleBar titleBar = new TitleBar(MSG.view_admin_administration(), IconEnum.ADMIN.getIcon24x24Path());
vLayout.addMember(titleBar);
ProductInfo productInfo = CoreGUI.get().getProductInfo();
Label label = new Label(MSG.view_admin_landing(productInfo.getShortName()));
label.setPadding(10);
vLayout.addMember(label);
return vLayout;
}
private NavigationSection buildSecuritySection() {
NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new UsersView(getGlobalPermissions().contains(Permission.MANAGE_SECURITY));
}
});
NavigationItem rolesItem = new NavigationItem(RolesView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new RolesView(getGlobalPermissions().contains(Permission.MANAGE_SECURITY));
}
});
return new NavigationSection(SECTION_SECURITY_VIEW_ID, usersItem, rolesItem);
}
private NavigationSection buildTopologySection() {
ProductInfo productInfo = CoreGUI.get().getProductInfo();
boolean isRHQ = (productInfo != null) && "RHQ".equals(productInfo.getShortName()); // use this to hide experimental features from product
NavigationItem serversItem = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new ServerTableView(null, false);
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
NavigationItem storageNodesItem = new NavigationItem(StorageNodeAdminView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new StorageNodeAdminView();
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
NavigationItem agentsItem = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AgentTableView(null, false);
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
NavigationItem affinityGroupsItem = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AffinityGroupTableView();
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
NavigationItem partitionEventsItem = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new PartitionEventTableView(PartitionEventTableView.VIEW_ID.getTitle());
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
// Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList
List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem,
storageNodesItem, agentsItem, affinityGroupsItem, partitionEventsItem));
NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID,
navigationItems.toArray(new NavigationItem[] {}));
return topologyRegion;
}
private NavigationSection buildConfigurationSection() {
NavigationItem systemSettingsItem = new NavigationItem(SystemSettingsView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new SystemSettingsView();
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
systemSettingsItem.setRefreshRequired(true); // refresh so it always reloads the latest settings
NavigationItem alertTemplatesItem = new NavigationItem(AlertDefinitionTemplateTypeView.VIEW_ID,
new ViewFactory() {
public Canvas createView() {
return new AlertDefinitionTemplateTypeView();
}
});
alertTemplatesItem.setRefreshRequired(true); // we always need a new page
NavigationItem driftTemplatesItem = new NavigationItem(DriftDefinitionTemplateTypeView.VIEW_ID,
new ViewFactory() {
public Canvas createView() {
return new DriftDefinitionTemplateTypeView();
}
});
driftTemplatesItem.setRefreshRequired(true); // we always need a new page
NavigationItem metricTemplatesItem = new NavigationItem(MetricTemplateTypeView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new MetricTemplateTypeView();
}
});
metricTemplatesItem.setRefreshRequired(true); // we always need a new page
NavigationItem ignoreResourceTypesItem = new NavigationItem(IgnoreResourceTypesView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new IgnoreResourceTypesView();
}
});
ignoreResourceTypesItem.setRefreshRequired(true); // we always need a new page
NavigationItem missingResourcePolicyItem = new NavigationItem(MissingPolicyResourceTypesView.VIEW_ID,
new ViewFactory() {
public Canvas createView() {
return new MissingPolicyResourceTypesView();
}
});
missingResourcePolicyItem.setRefreshRequired(true); // we always need a new page
NavigationItem downloadsItem = new NavigationItem(DownloadsView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new DownloadsView();
}
});
NavigationItem agentPluginsItem = new NavigationItem(AgentPluginTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AgentPluginTableView();
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
NavigationItem serverPluginsItem = new NavigationItem(ServerPluginTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new ServerPluginTableView();
}
}, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
Map<UiSubsystem, Boolean> showSubsystems = UserSessionManager.getUserPreferences().getShowUiSubsystems();
List<NavigationItem> items = new ArrayList<NavigationItem>(9);
items.add(systemSettingsItem);
if (showSubsystems.get(UiSubsystem.ALERTS)) {
items.add(alertTemplatesItem);
}
if (showSubsystems.get(UiSubsystem.DRIFT)) {
items.add(driftTemplatesItem);
}
items.add(metricTemplatesItem);
items.add(ignoreResourceTypesItem);
items.add(missingResourcePolicyItem);
items.add(downloadsItem);
items.add(agentPluginsItem);
items.add(serverPluginsItem);
return new NavigationSection(SECTION_CONFIGURATION_VIEW_ID, items.toArray(new NavigationItem[items.size()]));
}
private NavigationSection buildContentSection() {
NavigationItem contentSourcesItem = new NavigationItem(PAGE_CONTENT_SOURCES_VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new FullHTMLPane("/portal/rhq/content/listContentProviders-plain.xhtml");
}
}, getGlobalPermissions().contains(Permission.MANAGE_REPOSITORIES));
NavigationItem reposItem = new NavigationItem(PAGE_REPOS_VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new FullHTMLPane("/portal/rhq/content/listRepos-plain.xhtml");
}
});
return new NavigationSection(SECTION_CONTENT_VIEW_ID, contentSourcesItem, reposItem);
}
}