package org.jblooming.waf.html.button;
import org.jblooming.PlatformRuntimeException;
import org.jblooming.utilities.HTMLEncoderOld;
import org.jblooming.utilities.JSP;
import org.jblooming.waf.constants.Commands;
import org.jblooming.waf.constants.Fields;
import org.jblooming.waf.constants.I18nConstants;
import org.jblooming.waf.exceptions.ActionException;
import org.jblooming.waf.html.core.UrlComposer;
import org.jblooming.waf.html.display.Img;
import org.jblooming.waf.html.state.Form;
import org.jblooming.waf.settings.ApplicationState;
import org.jblooming.waf.settings.I18n;
import org.jblooming.waf.view.PageSeed;
import org.jblooming.waf.view.PageState;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.PageContext;
import java.io.Serializable;
public class ButtonSubmit extends ButtonSupport {
public Form form;
public PageSeed variationsFromForm = new PageSeed();
public boolean preserveFormStatus = false;
public boolean alertOnRequired = false;
// used to ajax submit style
public boolean ajaxEnabled = false;
public String ajaxDomIdToReload = null;
public String ajaxCallbackFunction = null;
public ButtonSubmit(Form form) {
super();
this.form = form;
if (form != null && form.url != null && form.url.getCommand() != null)
variationsFromForm.setCommand(form.url.getCommand());
}
public ButtonSubmit(String label, String command, Form form) {
this(form);
this.label = label;
this.variationsFromForm.command = command;
}
public String generateLaunchJs() {
StringBuffer sb = new StringBuffer();
if (enabled) {
sb.append(" onClick=\"stopBubble(event);");
sb.append(generateJs());
sb.append("\" ");// close onclick string
if (additionalScript != null && additionalScript.trim().length() > 0)
sb.append(' ').append(additionalScript);
}
return sb.toString();
}
public StringBuffer generateJs() {
StringBuffer sb = new StringBuffer();
if (confirmRequire) {
sb.append("if (confirm('");
if (confirmQuestion != null && confirmQuestion.length() > 0)
sb.append(JSP.javascriptEncode(confirmQuestion));
else
sb.append("proceed?");
sb.append("')");
sb.append(')'); // close if parenthesis
sb.append("{"); // open if block
}
Link fake = new Link(variationsFromForm);
fake.outputModality = UrlComposer.OUTPUT_AS_JS_SUBMIT;
fake.id = form.id;
sb.append(fake.getHref());
if (preserveFormStatus)
sb.append("saveFormValues('" + form.getUniqueName() + "'); ");
if (target != null && target.trim().length() > 0)
sb.append("obj('").append(form.getUniqueName()).append("').target='").append(HTMLEncoderOld.removeBadCharsFromJSConstant(target)).append("'; ");
//issue_ELE_6
if (variationsFromForm.getHref() != null && variationsFromForm.getHref().length() > 0 && !variationsFromForm.getHref().equals(form.url.getHref()))
sb.append("obj('").append(form.getUniqueName()).append("').action='" + variationsFromForm.getHref() + "'; ");
if (additionalOnClickScript != null)
sb.append(additionalOnClickScript);
String submitMethod;
// if the button is ajax style change the submit method
if (ajaxEnabled) {
submitMethod = "ajaxSubmit('" + form.getUniqueName() + "'" + (ajaxDomIdToReload == null ? ");" : ",'" + ajaxDomIdToReload + "'" + (JSP.ex(ajaxCallbackFunction) ? "," + ajaxCallbackFunction : "") + ");");
} else
submitMethod = "try {obj('" + form.getUniqueName() + "').submit();} catch(e){};";
// submitMethod="obj('"+form.getUniqueName()+"').submit();"; // REMOVED by bicch matti per eccezione onUnload in caso cancel per IE
submitMethod = (alertOnChange ? "" : "muteAlertOnChange=true;") + submitMethod;
if (alertOnRequired)
sb.append("if (canSubmitForm('").append(form.getUniqueName()).append("')) {" + submitMethod + "} ");
else
sb.append(submitMethod);
if (preserveFormStatus)
sb.append("restoreFormValues('" + form.getUniqueName() + "'); ");
if (confirmRequire) {
sb.append("}"); // close if block
}
sb.append(";return false;");
return sb;
}
public String getLabel() {
return label;
}
public static void toHtmlSave(Form form, String label, PageContext pageContext) {
ButtonSubmit bs = getSaveInstance(form, label);
bs.toHtml(pageContext);
}
public static ButtonSubmit getSaveInstance(PageState pageState) {
if (pageState.getForm() == null)
throw new PlatformRuntimeException("getSaveInstance(PageState pageState) assumes that form is on pageState, but here is null");
return getSaveInstance(pageState.getForm(), I18n.get("SAVE"), true);
}
public static ButtonSubmit getSaveInstance(Form form, String label) {
return getSaveInstance(form, label, true);
}
public static ButtonSubmit getSaveInstance(Form form, String label, boolean boldify) {
ButtonSubmit bs = new ButtonSubmit(form);
bs.variationsFromForm.setCommand(Commands.SAVE);
if (boldify)
bs.label = JSP.makeTag("b", null, label);
else
bs.label = label;
bs.alertOnRequired = true;
bs.alertOnChange = false;
return bs;
}
public static ButtonSubmit getDeleteInstance(Form form, PageState pageState) {
ButtonSubmit bs = new ButtonSubmit(form);
bs.variationsFromForm.setCommand(Commands.DELETE_PREVIEW);
bs.label = I18n.get("DELETE");
return bs;
}
public static ButtonSubmit getSearchInstance(Form form, PageState pageState) {
ButtonSubmit bs = new ButtonSubmit(form);
bs.variationsFromForm.setCommand(Commands.FIND);
bs.label = I18n.get(I18nConstants.SEARCH);
bs.label = JSP.makeTag("b", null, bs.label);
return bs;
}
public static ButtonSubmit getTextualInstance(String label, Form form) {
ButtonSubmit bl = new ButtonSubmit(form);
bl.label = label;
bl.outputModality = ButtonSupport.TEXT_ONLY;
return bl;
}
public static ButtonSubmit getPrintInstance(String printPage, Form form, PageState pageState, HttpServletRequest request) {
ButtonSubmit bs = new ButtonSubmit(form);
bs.variationsFromForm.setCommand(Commands.FIND);
bs.variationsFromForm.setHref(pageState.pageInThisFolder(printPage, request).getHref());
bs.label = I18n.get("PRINT");
return bs;
}
public static ButtonSupport getSubmitInstanceInBlack(Form form, String actionHref, int w, int h) {
ButtonJS pl = new ButtonJS();
pl.onClickScript =
"openBlackPopup('', '" + w + "px', '" + h + "px',null,'"+form.id+"_ifr"+"');" +
"if (!obj('FORM_ID') ) {" +
"var oNewNode = document.createElement('input');" +
"oNewNode.type='hidden';oNewNode.name='FORM_ID';oNewNode.id='FORM_ID';oNewNode.value='" + form.getUniqueName() + "';" +
"obj('" + form.getUniqueName() + "').appendChild(oNewNode);" +
"}" +
"if (!obj('" + form.getUniqueName() + Fields.POPUP + "') ) {" +
"var oNewNode2 = document.createElement('input');" +
"oNewNode2.type='hidden';oNewNode2.name='" + form.getUniqueName() + Fields.POPUP + "';oNewNode2.id='" + form.getUniqueName() + Fields.POPUP + "';oNewNode2.value='" + Fields.TRUE + "';" +
"obj('" + form.getUniqueName() + "').appendChild(oNewNode2);" +
"}" +
"saveFormValues('" + form.getUniqueName() + "');" +
"obj('" + form.getUniqueName() + "').action='" + actionHref + "';" +
"obj('" + form.getUniqueName() + "').target='"+form.id+"_ifr"+"';" +
"obj('" + form.getUniqueName() + "').submit();window.name='mainWindow';" +
"restoreFormValues('" + form.getUniqueName() + "');";
return pl;
}
public static ButtonSupport getSubmitInstanceInPopup(Form form, String actionHref, int w, int h) {
ButtonJS pl = new ButtonJS();
pl.onClickScript =
"centerPopup('', 'winPopup', '" + w + "', '" + h + "', 'yes','yes');" +
"if (!obj('FORM_ID') ) {" +
"var oNewNode = document.createElement('input');" +
"oNewNode.type='hidden';oNewNode.name='FORM_ID';oNewNode.id='FORM_ID';oNewNode.value='" + form.getUniqueName() + "';" +
"obj('" + form.getUniqueName() + "').appendChild(oNewNode);" +
"}" +
"if (!obj('" + form.getUniqueName() + Fields.POPUP + "') ) {" +
"var oNewNode2 = document.createElement('input');" +
"oNewNode2.type='hidden';oNewNode2.name='" + form.getUniqueName() + Fields.POPUP + "';oNewNode2.id='" + form.getUniqueName() + Fields.POPUP + "';oNewNode2.value='" + Fields.TRUE + "';" +
"obj('" + form.getUniqueName() + "').appendChild(oNewNode2);" +
"}" +
"saveFormValues('" + form.getUniqueName() + "');" +
"obj('" + form.getUniqueName() + "').action='" + actionHref + "';" +
"obj('" + form.getUniqueName() + "').target='winPopup';" +
"obj('" + form.getUniqueName() + "').submit();window.name='mainWindow';" +
"restoreFormValues('" + form.getUniqueName() + "');";
//pl.urlToInclude = "/commons/layout/partButtonPopup.jsp";
return pl;
}
public static ButtonSupport getSubmitInstanceFromPopup(Form form, String command, PageState pageState) throws ActionException {
ButtonJS pl = new ButtonJS();
String formId = pageState.getEntry("FORM_ID").stringValue();
pl.onClickScript =
//pietro 11Dec2008 saved filters may not have passed the id
(JSP.ex(formId) ? "window.opener.document.getElementById('" + formId + "').setAttribute('alertOnChange','false');":"") +
"obj('" + form.getUniqueName() + "').action=window.opener.location.pathname;" +
"obj('" + form.getUniqueName() + "').target='mainWindow';" +
"obj('" + form.getUniqueName() + Commands.COMMAND + "').value='" + command + "';" +
//this because the calling page is not popup
"obj('" + form.getUniqueName() + Fields.POPUP + "').disabled=true;" +
"obj('" + form.getUniqueName() + "').submit();window.close();";
return pl;
}
public static ButtonSubmit getAjaxButton(Form form, String domIdToReload) {
ButtonSubmit pl = new ButtonSubmit(form);
pl.ajaxEnabled = true;
pl.ajaxDomIdToReload = domIdToReload;
return pl;
}
public static ButtonImg getPDFPrintButton(Form form, PageState pageState) {
return getPDFPrintButton(form, null, pageState);
}
/*
ADD
*/
public static ButtonImg getPDFPrintButton(Form form, String pdfFileName, PageState pageState) {
return getPDFPrintButton(form, pdfFileName, null, pageState);
}
public static ButtonImg getPDFPrintButton(Form form, String pdfFileName, PageSeed pageToPrint, PageState pageState) {
ButtonSubmit pdf = new ButtonSubmit(form);
pdf.variationsFromForm.setHref(ApplicationState.contextPath + "/commons/tools/printPDF.jsp");
pdf.variationsFromForm.addClientEntry("PRINTING_PDF", Fields.TRUE);
Img img = new Img(pageState.getSkin().imgPath + "mime/application_pdf.gif", "PDF");
form.url.addClientEntry("PRINTING_PDF", Fields.FALSE);
if(pageToPrint != null)
form.url.addClientEntry("PAGE_TO_PRINT", pageToPrint.href);
else
form.url.addClientEntry("PAGE_TO_PRINT", pageState.href);
if (JSP.ex(pdfFileName))
form.url.addClientEntry("FILE_NAME_FOR_ATTACHMENT", pdfFileName + ".pdf");
//img.script="><input type=\"hidden\" id=\""+form.getUniqueName()+"PRINTING_PDF\" name=\"PRINTING_PDF\" value=\""+Fields.FALSE+"\"><input type=\"hidden\" name=\"PAGE_TO_PRINT\" value=\""+pageState.href+"\" ";
pdf.preserveFormStatus=true;
return new ButtonImg(pdf, img);
}
public static ButtonSubmit getPDFPrintButtonSubmit(Form form, String pdfFileName, PageSeed pageToPrint, PageState pageState) {
ButtonSubmit pdf = new ButtonSubmit(form);
pdf.variationsFromForm.setHref(ApplicationState.contextPath + "/commons/tools/printPDF.jsp");
pdf.variationsFromForm.addClientEntry("PRINTING_PDF", Fields.TRUE);
Img img = new Img(pageState.getSkin().imgPath + "mime/application_pdf.gif", "PDF");
form.url.addClientEntry("PRINTING_PDF", Fields.FALSE);
if(pageToPrint != null)
form.url.addClientEntry("PAGE_TO_PRINT", pageToPrint.href);
else
form.url.addClientEntry("PAGE_TO_PRINT", pageState.href);
if (JSP.ex(pdfFileName))
form.url.addClientEntry("FILE_NAME_FOR_ATTACHMENT", pdfFileName + ".pdf");
//img.script="><input type=\"hidden\" id=\""+form.getUniqueName()+"PRINTING_PDF\" name=\"PRINTING_PDF\" value=\""+Fields.FALSE+"\"><input type=\"hidden\" name=\"PAGE_TO_PRINT\" value=\""+pageState.href+"\" ";
pdf.preserveFormStatus=true;
return pdf;
}
public void setMainObjectId(Serializable id) {
variationsFromForm.mainObjectId = id;
}
}