package jpaoletti.jpm.struts.tags; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.jsp.tagext.TagSupport; import jpaoletti.jpm.core.*; import jpaoletti.jpm.core.operations.OperationScope; import jpaoletti.jpm.security.core.PMSecurityUser; import jpaoletti.jpm.struts.PMEntitySupport; import jpaoletti.jpm.struts.PMStrutsContext; import jpaoletti.jpm.util.DisplacedList; /** * Helper tags for Presentation Manager * * @author jpaoletti * @since 15/09/2011 * @version 1.2 * */ public class PMTags extends TagSupport { public static boolean contains(List list, Object o) { return list != null && list.contains(o); } /** * Builds a jpm url based on given url * * @param session Session user. Cannot be null * @param url Url to be built, <b>without</b> context path * * @return ready to use url */ public static String url(PMSession session, String url) { return url(session, url, false); } /** * Builds a jpm url based on given url * * @param session Session user. Cannot be null * @param url Url to be built, <b>without</b> context path * @param confirm if confirm is true, uses loadPageConfirm instead of * loadPage * * @return ready to use url */ public static String url(PMSession session, String url, Boolean confirm) { return url(session, url, confirm, "javascript:"); } /** * Builds a jpm url based on given url * * @param session Session user. Cannot be null * @param url Url to be built, <b>without</b> context path * @param confirm if confirm is true, uses loadPageConfirm instead of * loadPage * * @return ready to use url */ public static String url(PMSession session, String url, Boolean confirm, String prefix) { if (session != null) { final String contextPath = PMEntitySupport.getInstance().getContext_path(); final StringBuilder sb = new StringBuilder(); if (prefix != null) { sb.append(prefix); } if (confirm) { sb.append("loadPageConfirm('"); } else { sb.append("loadPage('"); } sb.append(contextPath); sb.append("/"); sb.append(session.getStringEncrypter().encrypt( (url.startsWith("/")) ? url.substring(1) : url)); sb.append(".jpm')"); return sb.toString(); } else { return url; } } public static String plainUrl(PMSession session, String url) { final String contextPath = PMEntitySupport.getInstance().getContext_path(); final String finalUrl = (url.startsWith("/")) ? url.substring(1) : url; if (session != null) { return contextPath + "/" + session.getStringEncrypter().encrypt(finalUrl) + ".jpm"; } else { return contextPath + "/" + finalUrl; } } public static Long floor(Double d) { return d.longValue(); } public static String itemCheckbox(PMStrutsContext ctx, DisplacedList list, Object item) throws PMException { if (ctx.getEntityContainer().getList().isHasSelectedScope()) { final StringBuilder input = new StringBuilder(); final InstanceId id = ctx.getDataAccess().getInstanceId(ctx, new EntityInstanceWrapper(item)); final String idValue = id.getValue(); input.append("<input class='ui-list-icon' type='checkbox' "); input.append("onchange='selectItem(").append(idValue).append(");'"); if (ctx.getEntityContainer().isSelected(id)) { input.append("checked"); } input.append("/>"); return input.toString(); } else { return ""; } } public static String instanceId(PMStrutsContext ctx, Entity entity, Object item) throws PMException { final InstanceId id = entity.getDataAccess().getInstanceId(ctx, new EntityInstanceWrapper(item)); return id.getValue(); } public static String listItemOperations(PMStrutsContext ctx, DisplacedList list, Object item) { try { final StringBuilder sb = new StringBuilder(); for (Operation itemOperation : ctx.getOperations(item, ctx.getOperation()).getOperations()) { //If we have permission if (ctx.getPmsession().getUser().hasPermission(itemOperation.getPerm())) { //if operation is at item scope if (OperationScope.ITEM.is(itemOperation.getScope())) { sb.append("<a class='ui-list-icon-container' href=\""); if (itemOperation.getUrl() != null) { sb.append(itemOperation.getUrl()); } else { final InstanceId id = ctx.getDataAccess().getInstanceId(ctx, new EntityInstanceWrapper(item)); final String idValue = id.getValue(); final String furl = itemOperation.getId() + ".do?pmid=" + ctx.getEntity().getId() + "&item=" + idValue; if (itemOperation.getPopup()) { sb.append("javascript:popup('").append(plainUrl(ctx.getPmsession(), furl)).append("')"); } else { sb.append(url(ctx.getPmsession(), furl, itemOperation.getConfirm(), "javascript:")); } } sb.append("\" id='operation"); sb.append(itemOperation.getId()); sb.append("' title='"); sb.append(PresentationManager.getMessage("operation." + itemOperation.getId())); sb.append("'><div class='ui-list-icon ui-icon ui-icon-operation-").append(itemOperation.getId()).append("'> </div></a>"); } } } return sb.toString(); } catch (PMException ex) { PresentationManager.getPm().error(ex); return "?"; } } public static String highlight(Entity entity, Field field, Object item, Object field_value) { final List<Highlight> highlights = entity.getHighlights(field, item); if (highlights != null) { final StringBuilder sb = new StringBuilder(); for (Highlight highlight : highlights) { sb.append(highlight.getStyle()).append(" "); } return sb.toString(); } else { return ""; } } public static String rowNumber(PaginatedList pmlist, DisplacedList list, Object item) { if (pmlist.isShowRowNumber()) { return String.format("<span class='ui-list-icon'>[%0" + pmlist.getListTotalDigits() + "d] </span>", list.indexOf(item)); } else { return ""; } } /** * This method show a tooltip if the key is defined * * @param key Key */ public static String tooltip(Field field) { final String tooltip = field.getTooltip(); if (tooltip == null) { return ""; } return "<img class='tooltip' title='" + tooltip + "' alt='?' src='" + getContextPath() + "/templates/" + getTemplate() + "/img/tooltip.gif' />"; } public static List<Field> displayedFields(PMSecurityUser user, Entity entity, String operationId) { final List<Field> displayedFields = new ArrayList<Field>(); for (Field field : entity.getOrderedFields()) { if (field.shouldDisplay(operationId, user)) { displayedFields.add(field); } } return displayedFields; } public static List<Field> displayedFields(PMSecurityUser user, Entity entity, String operationId, Panel panel) { return panel.getFields(entity, operationId, user); } /** * Getter for template name */ protected static String getTemplate() { return PresentationManager.getPm().getTemplate(); } /** * Getter for context path */ protected static String getContextPath() { return PMEntitySupport.getInstance().getContext_path(); } /** * Prints the objects in the jsp writer of the page context */ protected void print(Object... objects) throws IOException { for (Object object : objects) { pageContext.getOut().print(object); } } /** * Prints the objects in the jsp writer of the page context with a new line */ protected void println(Object... objects) throws IOException { for (Object object : objects) { pageContext.getOut().println(object); } } public static Field getField(Entity entity, String fieldId) { return entity.getFieldById(fieldId); } /** * Display an internationalized message */ public static String message(String key) { return PresentationManager.getMessage(key); } public static Operation operation(Entity entity, String operationId) { return entity.getOperations().getOperation(operationId); } }