package jpaoletti.jpm.struts.tags; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import jpaoletti.jpm.converter.ConverterException; import jpaoletti.jpm.core.*; import jpaoletti.jpm.struts.PMEntitySupport; /** * Tag for converted item * * @author jpaoletti */ public class ConvertedItemTag extends PMTags { private PMContext ctx; private EntityContainer entityContainer; private Field field; private Operation operation; private Object item; private Object fieldValue; //old context values private EntityContainer oldEntityContainer; private Field oldField; private Object oldFieldValue; private Object oldEntityInstance; @Override public int doStartTag() throws JspException { try { final PMEntitySupport es = PMEntitySupport.getInstance(); final String fieldId = getField().getId(); try { prepareContext(); final String highlight = highlight(getEntity(), getField(), getItem(), getFieldValue()); print("<div id='f_" + fieldId + "_div' class='cell " + highlight + "'>"); final Object visualize = getField().visualize(getCtx(), getOperation(), getEntity()); if (visualize != null) { if (!visualize.toString().contains(".jsp")) { println(visualize); } else { pageContext.include("/converters/" + visualize + "&f=" + fieldId); } } println("</div>", "<span class='field_message_container_" + getEntity().getId() + "_" + fieldId + "' />"); } catch (ConverterException e) { println("<img width='16px' src='" + es.getTemplatePath() + "/images/m_error.png' alt='error' />", "<span class='pm_message_ERROR'>", PresentationManager.getMessage(e.getMsg().getKey(), e.getMsg().getArgs()), "</span>"); } catch (Exception e) { es.getPm().warn(e); println("<img width='16px' src='" + getContextPath() + "/templates/" + getTemplate() + "/images/m_error.png' alt='error' />"); } } catch (IOException ex) { throw new JspTagException("ConvertedItemTag: " + ex.getMessage()); } return SKIP_BODY; } protected void prepareContext() throws PMException { oldEntityContainer = getCtx().getEntityContainer(true); oldField = getCtx().getField(); oldFieldValue = getCtx().getFieldValue(); oldEntityInstance = getCtx().getEntityInstance(); getCtx().setEntityContainer(getEntityContainer()); getCtx().setField(getField()); getCtx().setFieldValue(getFieldValue()); getCtx().setEntityInstance(getItem()); } @Override public int doEndTag() { getCtx().setEntityContainer(oldEntityContainer); getCtx().setField(oldField); getCtx().setFieldValue(oldFieldValue); getCtx().setEntityInstance(oldEntityInstance); return EVAL_PAGE; } public EntityContainer getEntityContainer() throws PMException { if (entityContainer == null) { return getCtx().getEntityContainer(); } return entityContainer; } public void setEntityContainer(EntityContainer entityContainer) { this.entityContainer = entityContainer; } public Object getFieldValue() throws PMException { if (fieldValue == null) { return getCtx().getPresentationManager().get(getItem(), getField().getProperty()); } return fieldValue; } public void setFieldValue(Object fieldValue) { this.fieldValue = fieldValue; } public Field getField() { return field; } public void setField(Field field) { this.field = field; } public Object getItem() throws PMException { if (item == null) { if (getCtx().getSelected() != null) { return getCtx().getSelected().getInstance(); } } return item; } public void setItem(Object item) { this.item = item; } public Operation getOperation() { if (operation == null) { return getCtx().getOperation(); } return operation; } public void setOperation(Operation operation) { this.operation = operation; } private Entity getEntity() throws PMException { return getEntityContainer().getEntity(); } public PMContext getCtx() { return ctx; } public void setCtx(PMContext ctx) { this.ctx = ctx; } }