blob: 16b2d172a47703ea59a6b6d35fe1f3659eb6a84c [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*******************************************************************************/
package org.apache.ofbiz.birt.flexible;
import java.io.OutputStream;
import java.io.StringWriter;
import java.sql.SQLException;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.collections4.MapUtils;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.GeneralException;
import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.base.util.template.FreeMarkerWorker;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.condition.EntityCondition;
import org.apache.ofbiz.entity.condition.EntityConditionList;
import org.apache.ofbiz.entity.condition.EntityExpr;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtil;
import org.apache.ofbiz.security.Security;
import org.apache.ofbiz.service.GenericServiceException;
import org.apache.ofbiz.service.LocalDispatcher;
import org.eclipse.birt.report.engine.api.EXCELRenderOption;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.HTMLServerImageHandler;
import org.eclipse.birt.report.engine.api.IPDFRenderOption;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.PDFRenderOption;
import org.eclipse.birt.report.engine.api.RenderOption;
import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants;
public final class BirtUtil {
public final static String module = BirtUtil.class.getName();
private final static HTMLServerImageHandler imageHandler = new HTMLServerImageHandler();
private final static Map<String, String> entityFieldTypeBirtTypeMap = MapUtils.unmodifiableMap(UtilMisc.toMap(
"id", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"url", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"name", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"id-ne", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"value", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"email", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"comment", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"id-long",DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"id-vlong", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"very-long", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"indicator", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"very-short", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"tel-number", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"id-long-ne", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"id-vlong-ne", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"description", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"long-varchar", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"short-varchar", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"credit-card-date", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"credit-card-number", DesignChoiceConstants.COLUMN_DATA_TYPE_STRING,
"date-time", DesignChoiceConstants.COLUMN_DATA_TYPE_DATETIME,
"date", DesignChoiceConstants.COLUMN_DATA_TYPE_DATE,
"time", DesignChoiceConstants.COLUMN_DATA_TYPE_TIME,
"currency-amount", DesignChoiceConstants.COLUMN_DATA_TYPE_DECIMAL,
"currency-precise", DesignChoiceConstants.COLUMN_DATA_TYPE_DECIMAL,
"fixed-point", DesignChoiceConstants.COLUMN_DATA_TYPE_DECIMAL,
"floating-point", DesignChoiceConstants.COLUMN_DATA_TYPE_DECIMAL,
"numeric", DesignChoiceConstants.COLUMN_DATA_TYPE_INTEGER,
"object", DesignChoiceConstants.COLUMN_DATA_TYPE_JAVA_OBJECT,
"blob", DesignChoiceConstants.COLUMN_DATA_TYPE_BLOB));
private final static Map<String, String> entityFieldTypeBirtParameterTypeMap = MapUtils.unmodifiableMap(UtilMisc.toMap(
"id", DesignChoiceConstants.PARAM_TYPE_STRING,
"url", DesignChoiceConstants.PARAM_TYPE_STRING,
"name", DesignChoiceConstants.PARAM_TYPE_STRING,
"id-ne", DesignChoiceConstants.PARAM_TYPE_STRING,
"value", DesignChoiceConstants.PARAM_TYPE_STRING,
"email", DesignChoiceConstants.PARAM_TYPE_STRING,
"comment", DesignChoiceConstants.PARAM_TYPE_STRING,
"id-long",DesignChoiceConstants.PARAM_TYPE_STRING,
"id-vlong", DesignChoiceConstants.PARAM_TYPE_STRING,
"very-long", DesignChoiceConstants.PARAM_TYPE_STRING,
"indicator", DesignChoiceConstants.PARAM_TYPE_STRING,
"very-short", DesignChoiceConstants.PARAM_TYPE_STRING,
"tel-number", DesignChoiceConstants.PARAM_TYPE_STRING,
"id-long-ne", DesignChoiceConstants.PARAM_TYPE_STRING,
"id-vlong-ne", DesignChoiceConstants.PARAM_TYPE_STRING,
"description", DesignChoiceConstants.PARAM_TYPE_STRING,
"long-varchar", DesignChoiceConstants.PARAM_TYPE_STRING,
"short-varchar", DesignChoiceConstants.PARAM_TYPE_STRING,
"credit-card-date", DesignChoiceConstants.PARAM_TYPE_STRING,
"credit-card-number", DesignChoiceConstants.PARAM_TYPE_STRING,
"date-time", DesignChoiceConstants.PARAM_TYPE_DATETIME,
"date", DesignChoiceConstants.PARAM_TYPE_DATE,
"time", DesignChoiceConstants.PARAM_TYPE_TIME,
"currency-amount", DesignChoiceConstants.PARAM_TYPE_DECIMAL,
"currency-precise", DesignChoiceConstants.PARAM_TYPE_DECIMAL,
"fixed-point", DesignChoiceConstants.PARAM_TYPE_DECIMAL,
"floating-point", DesignChoiceConstants.PARAM_TYPE_DECIMAL,
"numeric", DesignChoiceConstants.PARAM_TYPE_INTEGER,
"object", DesignChoiceConstants.PARAM_TYPE_JAVA_OBJECT,
"blob", DesignChoiceConstants.PARAM_TYPE_JAVA_OBJECT));
private final static Map<String, String> mimeTypeOutputFormatMap = UtilMisc.toMap(
"text/html", RenderOption.OUTPUT_FORMAT_HTML,
"application/pdf", RenderOption.OUTPUT_FORMAT_PDF,
"application/postscript", "postscript",
"application/vnd.ms-word", "doc",
"application/vnd.ms-excel", "xls",
"application/vnd.ms-powerpoint", "ppt",
"application/vnd.oasis.opendocument.text", "odt",
"application/vnd.oasis.opendocument.spreadsheet", "ods",
"application/vnd.oasis.opendocument.presentation", "odp",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "xlsx",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx",
"application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx");
private BirtUtil() {}
/**
* Return birt field type corresponding to given entity field type
* @param entityFieldType
* @return
* @throws GeneralException
*/
public static String convertFieldTypeToBirtType(String entityFieldType) {
if (UtilValidate.isEmpty(entityFieldType)) {
return null;
}
return entityFieldTypeBirtTypeMap.get(entityFieldType.toLowerCase());
}
/**
* Return birt parameter type corresponding to given entity field type
* @param entityFieldType
* @return
* @throws GeneralException
*/
public static String convertFieldTypeToBirtParameterType(String entityFieldType) {
if (UtilValidate.isEmpty(entityFieldType)) {
return null;
}
return entityFieldTypeBirtParameterTypeMap.get(entityFieldType.toLowerCase());
}
/**
* Return true if mime type related to a contentType is supported by Birt
* @param contentType
* @return
* @throws GeneralException
*/
public static boolean isSupportedMimeType(String contentType) {
return mimeTypeOutputFormatMap.containsKey(contentType);
}
/**
* Return mime type related to a contentType supported by Birt
* @param contentType
* @return
* @throws GeneralException
*/
public static String getMimeTypeOutputFormat(String contentType) throws GeneralException {
if (isSupportedMimeType(contentType)) {
return mimeTypeOutputFormatMap.get(contentType);
}
throw new GeneralException("Unknown content type : " + contentType);
}
/**
* return extension file related to a contentType supported by Birt
* @param contentType
* @return
* @throws GeneralException
*/
public static String getMimeTypeFileExtension(String contentType) throws GeneralException {
return ".".concat(getMimeTypeOutputFormat(contentType));
}
/**
* Resolve the template path location where rptDesign file are stored,
* first try the resolution from birt.properties with rptDesign.output.path
* second from content.properties content.upload.path.prefix
* and add birtReptDesign directory
* default OFBIZ_HOME/runtime/uploads/birtRptDesign/
* @return
*/
public static String resolveTemplatePathLocation() {
String templatePathLocation = UtilProperties.getPropertyValue("birt", "rptDesign.output.path");
if (UtilValidate.isEmpty(templatePathLocation)) {
templatePathLocation = UtilProperties.getPropertyValue("content", "content.upload.path.prefix", "runtime/uploads");
}
if (! templatePathLocation.endsWith("/")) {
templatePathLocation = templatePathLocation.concat("/");
}
if (! templatePathLocation.endsWith("/birtRptDesign/")) {
templatePathLocation = templatePathLocation.concat("birtRptDesign/");
}
if (! templatePathLocation.startsWith("/")) templatePathLocation = System.getProperty("ofbiz.home").concat("/").concat(templatePathLocation);
return templatePathLocation;
}
/**
* With the reporting contentId element resolve the path to rptDesign linked
* @param delegator
* @param contentId
* @return
* @throws GenericEntityException
*/
public static String resolveRptDesignFilePathFromContent(Delegator delegator, String contentId) throws GenericEntityException {
GenericValue contentRpt = EntityQuery.use(delegator).from("ContentAssoc").where("contentId", contentId).select("contentIdTo").cache().queryFirst();
if (contentRpt != null) {
String contentIdRpt = contentRpt.getString("contentIdTo");
List<EntityExpr> listConditions = UtilMisc.toList(
EntityCondition.makeCondition("contentTypeId", "RPTDESIGN"),
EntityCondition.makeCondition("contentId", contentIdRpt));
EntityConditionList<EntityExpr> ecl = EntityCondition.makeCondition(listConditions);
GenericValue dataRessouceRptDesignFile = EntityQuery.use(delegator).from("ContentDataResourceView").where(ecl).select("drObjectInfo").cache().queryFirst();
if (dataRessouceRptDesignFile != null) {
return dataRessouceRptDesignFile.getString("drObjectInfo");
}
}
return "";
}
/**
* remove all non unicode alphanumeric and replace space by _
* @param reportName
* @return
*/
public static String encodeReportName(String reportName) {
if (UtilValidate.isEmpty(reportName)) return "";
return StringUtil.replaceString(StringUtil.removeRegex(reportName.trim(), "[^\\p{L}\\s]"), " ", "_");
}
}