//package net.sourceforge.fenixedu.presentationTier.renderers; // //import org.apache.commons.beanutils.PropertyUtils; //import org.joda.time.format.DateTimeFormat; //import org.joda.time.format.DateTimeFormatter; // //import net.sourceforge.fenixedu.domain.elections.DelegateElectionCandidacyPeriod; //import net.sourceforge.fenixedu.domain.elections.DelegateElectionPeriod; //import net.sourceforge.fenixedu.domain.elections.DelegateElectionVotingPeriod; //import pt.ist.fenixWebFramework.renderers.OutputRenderer; //import pt.ist.fenixWebFramework.renderers.components.HtmlBlockContainer; //import pt.ist.fenixWebFramework.renderers.components.HtmlComponent; //import pt.ist.fenixWebFramework.renderers.components.HtmlLink; //import pt.ist.fenixWebFramework.renderers.components.HtmlText; //import pt.ist.fenixWebFramework.renderers.components.HtmlLink.Target; //import pt.ist.fenixWebFramework.renderers.components.state.ViewDestination; //import pt.ist.fenixWebFramework.renderers.layouts.Layout; //import pt.ist.fenixWebFramework.renderers.schemas.Schema; //import pt.ist.fenixWebFramework.renderers.utils.RenderKit; //import pt.ist.fenixWebFramework.renderers.utils.RenderUtils; // //public class CandidacyPeriodLinkRenderer extends OutputRenderer { // // private static final String DEFAULT_FORMAT = "dd/MM/yyyy"; // // private boolean useParent; // // private String linkFormat; // // private boolean contextRelative; // // private boolean moduleRelative; // // private String destination; // // private String subSchema; // // private String subLayout; // // private String key; // // private String bundle; // // private String text; // // private String linkIf; // // private boolean blankTarget = false; // // private boolean indentation = false; // // private String pastPeriodClasses; // // private String currentPeriodClasses; // // private String dateHtmlSeparator; // // private String periodPostLabel; // // private boolean isPeriodPostLabelKey; // // private String periodPreLabel; // // private boolean isPeriodPreLabelKey; // // private String dateFormat; // // private String periodCreateLabel; // // private String pastPeriodCreateLabel; // // private boolean isPeriodCreateLabelKey; // // private boolean isPastPeriodCreateLabelKey; // // public String getDateHtmlSeparator() { // return dateHtmlSeparator; // } // // public void setDateHtmlSeparator(String dateHtmlSeparator) { // this.dateHtmlSeparator = dateHtmlSeparator; // } // // public String getPeriodPostLabel() { // return periodPostLabel; // } // // public void setPeriodPostLabel(String periodPostLabel) { // this.periodPostLabel = periodPostLabel; // } // // public String getDateFormat() { // return (dateFormat != null ? dateFormat : DEFAULT_FORMAT); // } // // public void setDateFormat(String dateFormat) { // this.dateFormat = dateFormat; // } // // public boolean isPeriodPostLabelKey() { // return isPeriodPostLabelKey; // } // // public void setIsPeriodPostLabelKey(boolean isPeriodPostLabelKey) { // this.isPeriodPostLabelKey = isPeriodPostLabelKey; // } // // public String getPeriodPreLabel() { // return periodPreLabel; // } // // public void setPeriodPreLabel(String periodPreLabel) { // this.periodPreLabel = periodPreLabel; // } // // public boolean isPeriodPreLabelKey() { // return isPeriodPreLabelKey; // } // // public void setIsPeriodPreLabelKey(boolean isPeriodPreLabelKey) { // this.isPeriodPreLabelKey = isPeriodPreLabelKey; // } // // public boolean isPastPeriodCreateLabelKey() { // return isPastPeriodCreateLabelKey; // } // // public void setIsPastPeriodCreateLabelKey(boolean isPastPeriodCreateLabelKey) { // this.isPastPeriodCreateLabelKey = isPastPeriodCreateLabelKey; // } // // public boolean isPeriodCreateLabelKey() { // return isPeriodCreateLabelKey; // } // // public void setIsPeriodCreateLabelKey(boolean isPeriodCreateLabelKey) { // this.isPeriodCreateLabelKey = isPeriodCreateLabelKey; // } // // public String getPastPeriodCreateLabel() { // return pastPeriodCreateLabel; // } // // public void setPastPeriodCreateLabel(String pastPeriodCreateLabel) { // this.pastPeriodCreateLabel = pastPeriodCreateLabel; // } // // public String getPeriodCreateLabel() { // return periodCreateLabel; // } // // public void setPeriodCreateLabel(String periodCreateLabel) { // this.periodCreateLabel = periodCreateLabel; // } // // public boolean isBlankTarget() { // return blankTarget; // } // // /** // * This property allows you to specify if the link opens in a new // * window or not. Defaults to false. // * // * @property // */ // public void setBlankTarget(boolean blankTarget) { // this.blankTarget = blankTarget; // } // // public String getLinkFormat() { // return this.linkFormat; // } // // /** // * This property allows you to specify the format of the final link. In this // * format you can use properties of the object being presented. For example: // * // * // * format="/some/action.do?oid=${id}" // * // * // * @see RenderUtils#getFormattedProperties(String, Object) // * @property // */ // public void setLinkFormat(String linkFormat) { // this.linkFormat = linkFormat; // } // // public boolean isContextRelative() { // return this.contextRelative; // } // // /** // * Indicates that the link specified should be relative to the context of the // * application and not to the current module. This also overrides the module // * if a destination is specified. // * // * @property // */ // public void setContextRelative(boolean contextRelative) { // this.contextRelative = contextRelative; // } // // public boolean isModuleRelative() { // return this.moduleRelative; // } // // /** // * Allows you to choose if the generated link is relative to the current module. Note that // * if the link is not context relative then it also isn't module relative. // * // * @property // */ // public void setModuleRelative(boolean moduleRelative) { // this.moduleRelative = moduleRelative; // } // // public boolean isUseParent() { // return this.useParent; // } // // /** // * This property can be used when presenting an object's slot. If this // * property is true the object that will be considered when replacing the // * properties in the link will be the parent object, that is, the object // * that contains the slot being presented. // * // *

// * Off course, if this property is false (the default) the object that will // * be considered is the object initialy being presented. // * // * @property // */ // public void setUseParent(boolean useParent) { // this.useParent = useParent; // } // // public String getDestination() { // return this.destination; // } // // /** // * This property is an alternative to the use of the // * {@link #setLinkFormat(String) linkFormat}. With this property you can // * specify the name of the view state destination that will be used. This // * property allows you to select the concrete destination in each context // * were this configuration is used. // * // * @property // */ // public void setDestination(String destination) { // this.destination = destination; // } // // public String getText() { // return this.text; // } // // /** // * The text to appear as the link text. This is a simple alternative to the // * full presentation of the object. // * // * @property // */ // public void setText(String text) { // this.text = text; // } // // public String getKey() { // return this.key; // } // // /** // * Instead of specifying thr {@link #setText(String) text} property you can // * specify a key, with this property, and a bundle with the // * {@link #setBundle(String) bundle}. // * // * @property // */ // public void setKey(String key) { // this.key = key; // } // // public String getBundle() { // return this.bundle; // } // // /** // * The bundle were the {@link #setKey(String) key} will be fetched. // * // * @property // */ // public void setBundle(String bundle) { // this.bundle = bundle; // } // // public String getSubLayout() { // return this.subLayout; // } // // /** // * Specifies the sub layout that will be used for the body of the link, that // * is, the object will be presented using the layout specified and the // * result of that presentation will be the body of the link. // * // * @property // */ // public void setSubLayout(String subLayout) { // this.subLayout = subLayout; // } // // public String getSubSchema() { // return this.subSchema; // } // // /** // * The name of the schema to use in the presentation of the object for the // * body of the link. // * // * @property // */ // public void setSubSchema(String subSchema) { // this.subSchema = subSchema; // } // // public String getCurrentPeriodClasses() { // return currentPeriodClasses; // } // // public void setCurrentPeriodClasses(String currentPeriodClasses) { // this.currentPeriodClasses = currentPeriodClasses; // } // // public String getPastPeriodClasses() { // return pastPeriodClasses; // } // // public void setPastPeriodClasses(String pastPeriodClasses) { // this.pastPeriodClasses = pastPeriodClasses; // } // // public String getLinkIf() { // return this.linkIf; // } // // /** // * Name of the property to use when determining if we should really do a link or not. // * // * @property // */ // public void setLinkIf(String linkIf) { // this.linkIf = linkIf; // } // // /** // * Chooses if the generated elements should be indented or not. This can be // * usefull when you want to introduce a separator but need to remove extra // * spaces. // * // * @property // */ // public void setIndentation(boolean indentation) { // this.indentation = indentation; // } // // public boolean isIndentation() { // return this.indentation; // } // // @Override // protected Layout getLayout(Object object, Class type) { // return new Layout() { // // public String getPeriodResume(DelegateElectionPeriod electionPeriod, String preLabel, String postLabel, boolean isLongResume) { // preLabel = (preLabel != null ? RenderUtils.getResourceString(getBundle(), preLabel) + " " : ""); // // postLabel = (postLabel != null ? postLabel : ""); // // String shortResume = electionPeriod.getStartDate().toString(getDateFormat()) + getDateHtmlSeparator() + // electionPeriod.getEndDate().toString(getDateFormat()); // // String longResume = null; // if(electionPeriod instanceof DelegateElectionCandidacyPeriod) // longResume = "(" + ((DelegateElectionCandidacyPeriod)electionPeriod).getElection().getCandidatesCount() + postLabel + ")"; // else // longResume = "(" + ((DelegateElectionVotingPeriod)electionPeriod).getElection().getVotesCount() + postLabel + ")"; // // if(isLongResume) { // return preLabel + shortResume + "
" + longResume; // } // else { // return preLabel + shortResume; // } // } // // @Override // public HtmlComponent createComponent(Object object, Class type) { // Object usedObject = getTargetObject(object); // // if (usedObject == null) { // return new HtmlText(); // } // // if (isAllowedToLink(usedObject)) { // // HtmlLink link = getLink(usedObject); // // link.setIndented(isIndentation()); // // String text = getLinkText(); // if (text != null) { // link.setText(text); // } else { // HtmlBlockContainer container = new HtmlBlockContainer(); // // if(isUseParent()) { // DelegateElectionPeriod electionPeriod = (DelegateElectionPeriod) object; // // if (electionPeriod.isPastPeriod()) { // String createLabel = (isPastPeriodCreateLabelKey() ? RenderUtils.getResourceString(getBundle(), // getPastPeriodCreateLabel()) : getPastPeriodCreateLabel()); //// String createLabel = RenderUtils.getResourceString(getBundle(), "label.createAnotherPeriod"); // HtmlBlockContainer linkContainer = new HtmlBlockContainer(); // link.setBody(new HtmlText(createLabel)); // linkContainer.addChild(link); // container.addChild(linkContainer); // // String preLabel = (isPeriodPreLabelKey() ? RenderUtils.getResourceString(getBundle(), getPeriodPreLabel()) : getPeriodPreLabel()); // String postLabel = (isPeriodPostLabelKey() ? RenderUtils.getResourceString(getBundle(), getPeriodPostLabel()) : getPeriodPostLabel()); // HtmlText periodResume = new HtmlText(getPeriodResume(electionPeriod, preLabel, postLabel, false), false); // periodResume.setClasses(getPastPeriodClasses()); //Classes for past periods // container.addChild(periodResume); // return container; // } // else if (electionPeriod.isCurrentPeriod()){ // String postLabel = (isPeriodPostLabelKey() ? RenderUtils.getResourceString(getBundle(), getPeriodPostLabel()) : getPeriodPostLabel()); // String periodResume = getPeriodResume(electionPeriod, null, postLabel, true); // link.setBody(new HtmlText(periodResume, false)); // link.setClasses(getCurrentPeriodClasses()); //Classes for current periods // container.addChild(link); // return container; // } // else { // String periodResume = getPeriodResume(electionPeriod, null, null, false); // link.setBody(new HtmlText(periodResume, false)); // link.setClasses(getClasses()); //Default classes // container.addChild(link); // return container; // } // } // else { // link.setBody(getLinkBody(object)); // } // } // // if (isBlankTarget()) { // link.setTarget(Target.BLANK); // } // // return link; // } // else { // return getLinkBody(object); // } // } // // private boolean isAllowedToLink(Object usedObject) { // if (getLinkIf() == null) { // return true; // } // else { // try { // Object object = PropertyUtils.getProperty(usedObject, getLinkIf()); // if (object == null) { // return true; // } // else { // return (Boolean) object; // } // } catch (Exception e) { // e.printStackTrace(); // return false; // } // } // } // // public HtmlComponent getLinkBody(Object object) { // Schema findSchema = RenderKit.getInstance().findSchema(getSubSchema()); // return renderValue(object, findSchema, getSubLayout()); // } // // private String getLinkText() { // if (getText() != null) { // return getText(); // } // // if (getKey() == null) { // return null; // } // // return RenderUtils.getResourceString(getBundle(), getKey()); // } // // private HtmlLink getLink(Object usedObject) { // HtmlLink link = new HtmlLink(); // // String url; // // if (getDestination() != null) { // ViewDestination destination = getContext().getViewState().getDestination( // getDestination()); // // if (destination != null) { // link.setModule(destination.getModule()); // url = destination.getPath(); // } else { // url = "#"; // } // } else { // if (getLinkFormat() != null) { // url = getLinkFormat(); // } else { // url = "#"; // } // } // // link.setUrl(RenderUtils.getFormattedProperties(url, usedObject)); // // link.setModuleRelative(isModuleRelative()); // link.setContextRelative(isContextRelative()); // // return link; // } // // }; // } // // protected Object getTargetObject(Object object) { // if (isUseParent()) { // if (getContext().getParentContext() != null) { // return getContext().getParentContext().getMetaObject().getObject(); // } else { // return null; // } // } else { // return object; // } // } // // // }