/**
* Copyright (C) 2012 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.dashboard.ui.formatters;
import org.jboss.dashboard.LocaleManager;
import org.jboss.dashboard.annotation.config.Config;
import org.jboss.dashboard.ui.NavigationManager;
import org.jboss.dashboard.ui.SessionManager;
import org.jboss.dashboard.ui.UIServices;
import org.jboss.dashboard.ui.components.URLMarkupGenerator;
import org.jboss.dashboard.ui.taglib.formatter.Formatter;
import org.jboss.dashboard.ui.taglib.formatter.FormatterException;
import org.jboss.dashboard.security.WorkspacePermission;
import org.jboss.dashboard.security.PanelPermission;
import org.jboss.dashboard.ui.taglib.LocalizeTag;
import org.apache.commons.lang.StringEscapeUtils;
import org.jboss.dashboard.users.UserStatus;
import org.jboss.dashboard.workspace.Panel;
import org.jboss.dashboard.workspace.PanelSession;
import org.jboss.dashboard.workspace.SectionRegion;
import org.jboss.dashboard.workspace.WorkspaceImpl;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Formatter that displays a panel menu
*/
public class RenderPanelMenuFormatter extends Formatter {
@Inject @Config("panelProperties/CloseMenu.png")
private String closeIco;
@Inject @Config("panelProperties/EditMod.png")
private String editModeIco;
@Inject @Config("panelProperties/Erase.png")
private String eraseIco;
@Inject @Config("panelProperties/HelpMod.png")
private String helpModeIco;
@Inject @Config("panelProperties/PropertiesMod.png")
private String propertiesModeIco;
@Inject @Config("panelProperties/ShowMod.png")
private String showModeIco;
@Inject @Config("panelProperties/Refresh.png")
private String refreshIco;
/**
* Perform the required logic for this Formatter. Inside, the methods
* setAttribute and renderFragment are intended to be used to generate the
* output and set parameters for this output.
* Method getParameter is intended to retrieve input parameters by name.
* <p/>
* Exceptions are to be catched inside the method, and not to be thrown, normally,
* formatters could use a error fragment to be displayed when an error happens
* in displaying. But if the error is unexpected, it can be wrapped inside a
* FormatterException.
*
* @param request user request
* @param response response to the user
* @throws org.jboss.dashboard.ui.taglib.formatter.FormatterException
* in case of an unexpected exception.
*/
public void service(HttpServletRequest request, HttpServletResponse response) throws FormatterException {
Panel panel = (Panel) getParameter("panel");
PanelSession status = SessionManager.getPanelSession(panel);
SectionRegion sectionRegion = panel.getSection().getSectionRegion(panel.getRegion().getId());
boolean columnRegion = panel.getRegion().isColumnRegion();
WorkspaceImpl workspace = NavigationManager.lookup().getCurrentWorkspace();
boolean userIsAdmin = false;
if (workspace != null) {
WorkspacePermission permToCheck = WorkspacePermission.newInstance(workspace, WorkspacePermission.ACTION_ADMIN);
userIsAdmin = UserStatus.lookup().hasPermission(permToCheck);
}
if (!userIsAdmin) return;
PanelPermission editPanelPerm = PanelPermission.newInstance(panel, PanelPermission.ACTION_EDIT);
boolean userCanEditPanel = UserStatus.lookup().hasPermission(editPanelPerm);
renderFragment("movePanel");
setAttribute("cursorStyle", "move");
setAttribute("title", StringEscapeUtils.escapeHtml((String) LocaleManager.lookup().localize(panel.getTitle())));
renderFragment("menuLink");
renderFragment("menuStart");
setAttribute("title", LocalizeTag.getLocalizedValue(panel.getTitle(), getLang(), true));
renderFragment("menuTitle");
//Invalidate cache button.
if (panel.getCacheTime() > 0)
renderMenuOption("ui.panel.refresh", getPanelActionLink(request, response, panel, "_invalidate-cache"), refreshIco, "R", panel.getCacheTime() > 0);
if (status.isShowMode()) {
boolean isEditModeEnabled = !status.isEditMode() && panel.supportsEditMode() && userCanEditPanel;
//Edit button.
if (isEditModeEnabled) renderMenuOption("ui.panel.editMode", getPanelActionLink(request, response, panel, "_edit-mode"), editModeIco, "L", isEditModeEnabled);
} else {
//Show mode.
renderMenuOption("ui.panel.showMode", getPanelActionLink(request, response, panel, "_show-mode"), showModeIco, "S", !status.isShowMode());
}
//Properties mode
renderMenuOption("ui.panel.editProperties", getPanelActionLink(request, response, panel, "_start-config"), propertiesModeIco, "P", true);
//Close button
renderFragment("menuSeparator");
renderMenuOption("ui.panel.close", getPanelActionLink(request, response, panel, "_close"), eraseIco, "D", true, false);
//Help mode
renderMenuOption("ui.panel.helpMode", getPanelActionLink(request, response, panel, "_help-mode"), helpModeIco, "?", !status.isHelpMode() && panel.supportsHelpMode());
setAttribute("imageKey", closeIco);
renderFragment("menuEnd");
}
protected void renderMenuOption(String key, String url, String image, String alt, boolean enabled) {
renderMenuOption(key, url, image, alt, enabled, true);
}
protected void renderMenuOption(String key, String url, String image, String alt, boolean enabled, boolean isAjax) {
setAttribute("menukey", key);
setAttribute("url", url);
setAttribute("imageKey", image);
setAttribute("imageAlt", alt);
setAttribute("isAjax", isAjax);
renderFragment("menuEntry" + (enabled ? "" : "Disabled"));
}
protected String getPanelActionLink(HttpServletRequest request, HttpServletResponse response, Panel panel, String action) {
URLMarkupGenerator markupGenerator = UIServices.lookup().getUrlMarkupGenerator();
return markupGenerator.getLinkToPanelAction(panel, action, true);
}
public String getEditModeIco() {
return editModeIco;
}
public void setEditModeIco(String editModeIco) {
this.editModeIco = editModeIco;
}
public String getEraseIco() {
return eraseIco;
}
public void setEraseIco(String eraseIco) {
this.eraseIco = eraseIco;
}
public String getHelpModeIco() {
return helpModeIco;
}
public void setHelpMode(String helpModeIco) {
this.helpModeIco = helpModeIco;
}
public String getPropertiesModeIco() {
return propertiesModeIco;
}
public void setPropertiesModeIco(String propertiesModeIco) {
this.propertiesModeIco = propertiesModeIco;
}
public String getShowModeIco() {
return showModeIco;
}
public void setShowModeIco(String showModeIco) {
this.showModeIco = showModeIco;
}
public String getRefreshIco() {
return refreshIco;
}
public void setRefreshIco(String refreshIco) {
this.refreshIco = refreshIco;
}
public String getCloseIco() {
return closeIco;
}
public void setCloseIco(String closeIco) {
this.closeIco = closeIco;
}
}