| /** |
| * |
| * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation |
| */ |
| package org.eclipse.osbp.xtext.reportdsl.common.item; |
| |
| import java.awt.image.BufferedImage; |
| import java.io.ByteArrayOutputStream; |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.InputStream; |
| import java.io.PrintWriter; |
| import java.io.StringWriter; |
| |
| import javax.imageio.ImageIO; |
| import javax.inject.Inject; |
| |
| import org.eclipse.birt.report.model.api.Expression; |
| import org.eclipse.birt.report.model.api.ExpressionHandle; |
| import org.eclipse.birt.report.model.api.ExpressionType; |
| import org.eclipse.birt.report.model.api.ImageHandle; |
| import org.eclipse.birt.report.model.api.ReportItemHandle; |
| import org.eclipse.birt.report.model.api.StructureFactory; |
| import org.eclipse.birt.report.model.api.activity.SemanticException; |
| import org.eclipse.birt.report.model.api.elements.DesignChoiceConstants; |
| import org.eclipse.birt.report.model.api.elements.structures.EmbeddedImage; |
| import org.eclipse.birt.report.model.api.util.StringUtil; |
| import org.eclipse.birt.report.model.core.Module; |
| import org.eclipse.birt.report.model.elements.interfaces.IImageItemModel; |
| import org.eclipse.birt.report.model.i18n.ThreadResources; |
| import org.eclipse.osbp.ui.api.themes.IThemeResourceService; |
| import org.eclipse.osbp.ui.api.themes.IThemeResourceService.ThemeResourceType; |
| import org.eclipse.osbp.xtext.reportdsl.DatamartTableAttribute; |
| import org.eclipse.osbp.xtext.reportdsl.TableValueElement; |
| import org.eclipse.osbp.xtext.reportdsl.UnitEnum; |
| import org.eclipse.osbp.xtext.reportdsl.jvmmodel.ReportGeneratorWorkSet; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| |
| import com.ibm.icu.util.ULocale; |
| |
| |
| |
| public class ImageItem implements BaseItem { |
| |
| private static final Logger LOGGER = LoggerFactory.getLogger(ImageItem.class); |
| private final ImageHandle fItem; |
| |
| @Inject |
| private IThemeResourceService themeResourceService; |
| |
| public ImageItem(ReportGeneratorWorkSet workset, DatamartTableAttribute tableAttribute) { |
| this(workset, DataUtils.getAttributeName(tableAttribute), DesignChoiceConstants.IMAGE_SIZE_SIZE_TO_IMAGE, -1.0d, -1.0d, null, -1.0d, null, DesignChoiceConstants.IMAGE_REF_TYPE_EXPR, null); |
| } |
| |
| public ImageItem( |
| ReportGeneratorWorkSet workset, |
| String name, |
| String size, |
| double scale, |
| double height, |
| UnitEnum heightUnit, |
| double width, |
| UnitEnum widthUnit, |
| String source, |
| String filename) { |
| fItem = workset.getFactory().newImage(name); |
| try { |
| fItem.setSize(size); |
| if (scale <= 0.0) { |
| fItem.setScale(1.0); |
| } else { |
| fItem.setScale(scale); |
| fItem.setProportionalScale(true); |
| } |
| Module module = fItem.getModule(); |
| ULocale locale = module == null ? ThreadResources.getLocale( ) : module |
| .getLocale( ); |
| if (height > 0.0) { |
| fItem.setHeight(workset.getLocalizedDoubleValue(fItem, height, heightUnit)); |
| } |
| if (width > 0.0) { |
| fItem.setWidth(workset.getLocalizedDoubleValue(fItem, width, widthUnit)); |
| } |
| fItem.setSource(source); |
| switch (source) { |
| case DesignChoiceConstants.IMAGE_REF_TYPE_URL: |
| fItem.setURL(filename); |
| ExpressionHandle eh1 = fItem.getExpressionProperty(IImageItemModel.URI_PROP); |
| eh1.setType(ExpressionType.CONSTANT); |
| break; |
| case DesignChoiceConstants.IMAGE_REF_TYPE_FILE: |
| fItem.setFile(filename); |
| ExpressionHandle eh2 = fItem.getExpressionProperty(IImageItemModel.URI_PROP); |
| eh2.setType(ExpressionType.CONSTANT); |
| break; |
| case DesignChoiceConstants.IMAGE_REF_TYPE_EMBED: |
| String imageId = DesignChoiceConstants.IMAGE_REF_TYPE_EMBED + "." + filename.replaceAll("\\W", ""); |
| EmbeddedImage ei = workset.getEmbeddedImage(imageId); |
| if (ei == null) { |
| ei = createEmbeddedImage(workset, filename, imageId); |
| } |
| workset.getDesign().addImage(ei); |
| fItem.setImageName(imageId); |
| break; |
| case DesignChoiceConstants.IMAGE_REF_TYPE_EXPR: |
| Expression expr = new Expression("row[\"" + name + "\"]", null); |
| fItem.setExpressionProperty("valueExpr", expr); |
| break; |
| default: |
| break; |
| } |
| } |
| catch (Exception e) { |
| StringWriter sw = new StringWriter(); |
| e.printStackTrace(new PrintWriter(sw)); |
| String exceptionDetails = sw.toString(); |
| LOGGER.error("{}", exceptionDetails); |
| } |
| } |
| |
| private EmbeddedImage createEmbeddedImage(ReportGeneratorWorkSet workset, String filename, String imageId) { |
| EmbeddedImage ei = null; |
| try { |
| String[] tokens = null; |
| InputStream stream = null; |
| if (themeResourceService != null) { |
| String uri = themeResourceService.getThemeURI(filename, ThemeResourceType.ICON); |
| stream = themeResourceService.getThemeResourceInputStream(uri); |
| tokens = uri.split("\\."); |
| } else { |
| File file = new File(filename); |
| tokens = filename.split("\\."); |
| stream = new FileInputStream(file); |
| } |
| String fileextension = tokens[tokens.length-1]; |
| BufferedImage originalImage = ImageIO.read(stream); |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| ImageIO.write(originalImage, fileextension, baos); |
| baos.flush(); |
| byte[] imageInByte = baos.toByteArray(); |
| baos.close(); |
| ei = StructureFactory.createEmbeddedImage(); |
| ei.setType(getImageType(fileextension)); |
| ei.setData(imageInByte); |
| ei.setName(imageId); |
| workset.putEmbeddedImage(imageId, ei); |
| } |
| catch (Exception e) { |
| StringWriter sw = new StringWriter(); |
| e.printStackTrace(new PrintWriter(sw)); |
| String exceptionDetails = sw.toString(); |
| LOGGER.error("{}", exceptionDetails); |
| } |
| return ei; |
| } |
| |
| @Override |
| public ReportItemHandle getHandle() { |
| return fItem; |
| } |
| |
| private String getImageType(String fileextension) { |
| switch (fileextension.toLowerCase()) { |
| case "bmp": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_BMP; |
| case "gif": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_GIF; |
| case "png": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_PNG; |
| case "jpg": |
| case "jpeg": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_JPEG; |
| case "ico": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_ICO; |
| case "tiff": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_TIFF; |
| case "svg": return DesignChoiceConstants.IMAGE_TYPE_IMAGE_SVG; |
| default: return null; |
| } |
| } |
| } |