/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition 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 General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.web.imagecropper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.markup.head.CssReferenceHeaderItem;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.projectforge.common.StringHelper;
import org.projectforge.core.ConfigXml;
import org.projectforge.user.PFUserContext;
import org.projectforge.web.wicket.AbstractSecuredPage;
import org.projectforge.web.wicket.WicketUtils;
public class ImageCropperPage extends AbstractSecuredPage
{
private static final long serialVersionUID = -3868048775620052627L;
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(ImageCropperPage.class);
public static final String PARAM_ENABLE_WHITEBOARD_FILTER = "enableWhiteboardFilter";
public static final String PARAM_SHOW_UPLOAD_BUTTON = "showUploadButton";
public static final String PARAM_LANGUAGE = "language";
public static final String PARAM_RATIOLIST = "ratioList";
public static final String PARAM_DEFAULT_RATIO = "defaultRatio";
public static final String PARAM_FILE_FORMAT = "fileFormat";
private String ratioList = "1:1,1:2,2:1,1:3,2:3,3:1,3:2,1:4,3:4,4:1,4:3,1:5,2:5,3:5,4:5,5:1,5:2,5:3,5:4";
private String defaultRatio = "2:3";
private boolean showUploadButton;
private boolean enableWhiteBoardFilter;
private String defaultLanguage;
private String fileFormat = "";
/**
* See list of constants PARAM_* for supported parameters.
* @param parameters
*/
public ImageCropperPage(final PageParameters parameters)
{
super(parameters);
if (WicketUtils.contains(parameters, PARAM_SHOW_UPLOAD_BUTTON) == true) {
setEnableWhiteBoardFilter(WicketUtils.getAsBoolean(parameters, PARAM_SHOW_UPLOAD_BUTTON));
}
if (WicketUtils.contains(parameters, PARAM_ENABLE_WHITEBOARD_FILTER) == true) {
setEnableWhiteBoardFilter(WicketUtils.getAsBoolean(parameters, PARAM_ENABLE_WHITEBOARD_FILTER));
}
if (WicketUtils.contains(parameters, PARAM_LANGUAGE) == true) {
setDefaultLanguage(WicketUtils.getAsString(parameters, PARAM_LANGUAGE));
}
if (WicketUtils.contains(parameters, PARAM_RATIOLIST) == true) {
setRatioList(WicketUtils.getAsString(parameters, PARAM_RATIOLIST));
}
if (WicketUtils.contains(parameters, PARAM_DEFAULT_RATIO) == true) {
setDefaultRatio(WicketUtils.getAsString(parameters, PARAM_DEFAULT_RATIO));
}
if (WicketUtils.contains(parameters, PARAM_FILE_FORMAT) == true) {
setFileFormat(WicketUtils.getAsString(parameters, PARAM_FILE_FORMAT));
}
final ServletWebRequest req = (ServletWebRequest) this.getRequest();
final HttpServletRequest hreq = req.getContainerRequest();
String domain;
if (StringUtils.isNotBlank(ConfigXml.getInstance().getDomain()) == true) {
domain = ConfigXml.getInstance().getDomain();
} else {
domain = hreq.getScheme() + "://" + hreq.getLocalName() + ":" + hreq.getLocalPort();
}
final String url = domain + hreq.getContextPath() + "/secure/";
final StringBuffer buf = new StringBuffer();
appendVar(buf, "serverURL", url); // TODO: Wird wohl nicht mehr gebraucht.
appendVar(buf, "uploadImageFileTemporaryServlet", url + "UploadImageFileTemporary");
appendVar(buf, "uploadImageFileTemporaryServletParams", "filedirectory=tempimages;filename=image");
appendVar(buf, "downloadImageFileServlet", url + "DownloadImageFile");
appendVar(buf, "downloadImageFileServletParams", "filedirectory=tempimages;filename=image");
appendVar(buf, "uploadImageFileServlet", url + "UploadImageFile");
appendVar(buf, "uploadImageFileServletParams", "filedirectory=images;filename=image;croppedname=cropped");
appendVar(buf, "upAndDownloadImageFileAsByteArrayServlet", url + "UpAndDownloadImageFileAsByteArray");
appendVar(buf, "upAndDownloadImageFileAsByteArrayServletParams", "filename=image;croppedname=cropped");
final HttpSession httpSession = hreq.getSession();
appendVar(buf, "sessionid", httpSession.getId());
appendVar(buf, "ratioList", ratioList);
appendVar(buf, "defaultRatio", defaultRatio);
appendVar(buf, "isUploadBtn", showUploadButton);
appendVar(buf, "whiteBoardFilter", enableWhiteBoardFilter);
appendVar(buf, "language", getDefaultLanguage());
appendVar(buf, "fileFormat", fileFormat);
appendVar(buf, "flashFile", WicketUtils.getAbsoluteUrl("/imagecropper/MicromataImageCropper"));
add(new Label("javaScriptVars", buf.toString()).setEscapeModelStrings(false));
}
@Override
public void renderHead(final IHeaderResponse response)
{
super.renderHead(response);
response.render(CssReferenceHeaderItem.forUrl("imagecropper/history/history.css"));
response.render(JavaScriptReferenceHeaderItem.forUrl("imagecropper/history/history.js"));
response.render(JavaScriptReferenceHeaderItem.forUrl("imagecropper/AC_OETags.js"));
}
/**
* Valid Ratio Examples: "1:4, 4:1, 1:2, 2:1, 1:3, 3:1, 2:3, 3:2" etc.
*/
public String getRatioList()
{
return ratioList;
}
public void setRatioList(final String ratioList)
{
this.ratioList = ratioList;
}
/**
* Wird Variable leer gelassen, kann die Ratio frei gewählt werden Wird Variable mit gültigem Wert befüllt, wird die Ratio auf den
* Konfigurierten Wert gesetzt
*/
public String getDefaultRatio()
{
return defaultRatio;
}
public void setDefaultRatio(final String defaultRatio)
{
this.defaultRatio = defaultRatio;
}
/**
* If true then the upload button in ImageCropper flash app will be shown.
*/
public boolean isShowUploadButton()
{
return showUploadButton;
}
public void setShowUploadButton(final boolean showUploadButton)
{
this.showUploadButton = showUploadButton;
}
/**
* Auf true gesetzt kann WhiteBoardFilter verwendet werden.
*/
public boolean isEnableWhiteBoardFilter()
{
return enableWhiteBoardFilter;
}
public void setEnableWhiteBoardFilter(final boolean enableWhiteBoardFilter)
{
this.enableWhiteBoardFilter = enableWhiteBoardFilter;
}
/**
* Valid FileFormat: jpg, jpeg, gif, png. Wird Variable leer gelassen, können alle Formate ausgewählt werden. Wird Variable mit gültigem
* Wert befüllt, können Images nur im jeweligen Dateiformat erzeugt werden.
*/
public String getFileFormat()
{
return fileFormat;
}
public void setFileFormat(final String fileFormat)
{
if (StringHelper.isIn(fileFormat, "png", "gif", "jpg", "jpeg") == true) {
this.fileFormat = fileFormat;
} else {
log.error("Unsupported file format: " + fileFormat);
}
}
/**
* Valid language: DE, EN Wird Variable leer gelassen, wird die language des Users verwendet.
*/
public String getDefaultLanguage()
{
if (defaultLanguage != null) {
return defaultLanguage;
}
return PFUserContext.getLocale().getCountry();
}
public void setDefaultLanguage(final String defaultLanguage)
{
if (StringHelper.isIn(defaultLanguage, "EN", "DE") == true) {
this.defaultLanguage = defaultLanguage;
} else {
log.error("Unsupported language: " + defaultLanguage);
}
}
/**
* @return false
* @see org.projectforge.web.wicket.AbstractUnsecureBasePage#isBookmarkLinkIconVisible()
*/
// @Override
// protected boolean isBookmarkLinkIconVisible()
// {
// return false;
// }
private ImageCropperPage appendVar(final StringBuffer buf, final String variable, final Object value)
{
buf.append("var ").append(variable).append(" = ");
if (value == null) {
buf.append("null");
} else if (value instanceof String) {
buf.append("\"").append(value).append("\"");
} else {
buf.append(value);
}
buf.append(";\n");
return this;
}
@Override
protected String getTitle()
{
return "ImageCropper";
}
}