org.web4thejob.web.panel.DefaultPanelCommandsAuthorizationPanel Maven / Gradle / Ivy
/*
* Copyright (c) 2012-2013 Veniamin Isaias.
*
* This file is part of web4thejob.
*
* Web4thejob is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or any later version.
*
* Web4thejob 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with web4thejob. If not, see .
*/
package org.web4thejob.web.panel;
import org.springframework.context.annotation.Scope;
import org.web4thejob.command.Command;
import org.web4thejob.command.CommandAware;
import org.web4thejob.command.CommandEnum;
import org.web4thejob.command.Subcommand;
import org.web4thejob.context.ContextUtil;
import org.web4thejob.security.SecuredResource;
import org.web4thejob.util.CoreUtil;
import org.web4thejob.web.panel.base.AbstractSecuredResourceAuthorizationPanel;
import org.zkoss.zul.Html;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import java.util.ArrayList;
import java.util.List;
/**
* @author Veniamin Isaias
* @since 1.0.0
*/
@org.springframework.stereotype.Component
@Scope("prototype")
public class DefaultPanelCommandsAuthorizationPanel extends
AbstractSecuredResourceAuthorizationPanel implements
PanelCommandsAuthorizationPanel, ListitemRenderer {
public DefaultPanelCommandsAuthorizationPanel() {
this(false);
}
protected DefaultPanelCommandsAuthorizationPanel(boolean readOnly) {
super(readOnly);
}
@Override
protected String getRootElementName() {
return PanelCommandsAuthorizationPanel.ROOT_ELEMENT;
}
@Override
protected List getSourceList() {
List resources = new ArrayList();
for (Panel panel : ContextUtil.getSessionContext().getPanels(Panel.class)) {
if (!DesktopLayoutPanel.class.isInstance(panel) && panel instanceof CommandAware) {
for (CommandEnum id : ((CommandAware) panel).getSupportedCommands()) {
Command command = ContextUtil.getDefaultCommand(id, (CommandAware) panel);
appendCommand(command, resources);
}
}
}
return resources;
}
private void appendCommand(Command command, List resources) {
resources.add(command);
for (CommandEnum subid : command.getId().getSubcommands()) {
Subcommand subcommand = ContextUtil.getSubcommand(subid, command);
if (subcommand != null) {
appendCommand(subcommand, resources);
}
}
}
@Override
protected ListitemRenderer extends SecuredResource> getRenderer() {
return this;
}
@Override
public void render(Listitem item, Command data, int index) throws Exception {
Listcell listcell = new Listcell();
listcell.setParent(item);
StringBuilder sb = new StringBuilder();
Command ref = data;
while (ref instanceof Command) {
sb.insert(0, ref.getName());
String image = CoreUtil.getCommandImage(ref.getId(), null);
if (image != null) {
StringBuilder sbHelp = new StringBuilder();
sbHelp.append("");
sb.insert(0, sbHelp.toString());
}
sb.insert(0, " -> ");
if (ref instanceof Subcommand) {
ref = ((Subcommand) ref).getParent();
} else {
ref = null;
}
}
sb.insert(0, data.getOwner().toString());
StringBuilder sbHelp = new StringBuilder();
sbHelp.append("");
sb.insert(0, sbHelp.toString());
Html html = new Html(sb.toString().trim());
html.setParent(listcell);
item.setValue(data);
item.setStyle("white-space:nowrap;");
}
}