/** SpagoBI, the Open Source Business Intelligence suite Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. **/ package it.eng.spagobi.studio.documentcomposition.editors; import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataBO; import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataDocument; import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataDocumentComposition; import it.eng.spagobi.studio.documentcomposition.util.DocCompUtilities; import it.eng.spagobi.studio.documentcomposition.util.SpagoBIDocCompCostants; import it.eng.spagobi.studio.utils.util.SpagoBIStudioConstants; import java.io.InputStream; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.PlatformUI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DocumentContained { Group group; String documentLabel; // MetadataDocument metadataDocument; Image image=null; Image whiteImage=null; Image scaledImage=null; Image natureImage=null; String imagePath=null; Designer designer; private static Logger logger = LoggerFactory.getLogger(DocumentContained.class); public static final String IMG_JASPER_REPORT="it/eng/spagobi/studio/documentcomposition/resources/images/IconReport2.png"; public static final String IMG_BIRT_REPORT="it/eng/spagobi/studio/documentcomposition/resources/images/IconReport2.png"; public static final String IMG_DASHBOARD="it/eng/spagobi/studio/documentcomposition/resources/images/IconDashboard2.png"; public static final String IMG_CHART="it/eng/spagobi/studio/documentcomposition/resources/images/IconChart2.png"; public static final String IMG_DOCUMENT_COMPOSITION="it/eng/spagobi/studio/documentcomposition/resources/images/IconGeneral2.png"; public static final String IMG_OLAP="it/eng/spagobi/studio/documentcomposition/resources/images/IconOlap2.png"; public static final String IMG_ETL="it/eng/spagobi/studio/documentcomposition/resources/images/IconEtl2.png"; public static final String IMG_OFFICE_DOC="it/eng/spagobi/studio/documentcomposition/resources/images/IconOfficeDoc2.png"; public static final String IMG_MAP="it/eng/spagobi/studio/documentcomposition/resources/images/IconMap2.png"; public static final String IMG_DATAMART="it/eng/spagobi/studio/documentcomposition/resources/images/IconGeneral2.png"; public static final String IMG_DOSSIER="it/eng/spagobi/studio/documentcomposition/resources/images/IconGeneral2.png"; public static final String IMG_DATA_MINING="it/eng/spagobi/studio/documentcomposition/resources/images/IconGeneral2.png"; public static final String IMG_GENERAL="it/eng/spagobi/studio/documentcomposition/resources/images/IconGeneral2.png"; public static final String BACKGROUND="it/eng/spagobi/studio/documentcomposition/resources/images/white.PNG"; public static final String TYPE_REPORT=SpagoBIDocCompCostants.REPORT_TYPE_CODE; public static final String TYPE_DOSSIER="DOSSIER"; public static final String TYPE_OLAP="OLAP"; public static final String TYPE_DATA_MINING = "DATA_MINING"; public static final String TYPE_DASH=SpagoBIDocCompCostants.DASH_TYPE_CODE; public static final String TYPE_DATAMART="DATAMART"; public static final String TYPE_MAP="MAP"; public static final String TYPE_OFFICE_DOC="OFFICE_DOC"; public static final String TYPE_ETL="ETL"; public static final String TYPE_DOCUMENT_COMPOSITIOn=SpagoBIDocCompCostants.DOCUMENT_COMPOSITE_TYPE; public DocumentContained(Composite parent, int style, Designer _designer) throws Exception{ group=new Group(parent, style); group.setBackground(new Color(parent.getDisplay(), DocContainer.COLOR_CONTAINERS)); //group.setForeground(new Color(parent.getDisplay(), new RGB(255,0,0))); group.setSize(DocContainer.DEFAULT_WIDTH, DocContainer.DEFAULT_HEIGHT); designer=_designer; } /** * Get the metadata of the document inside the container and add the document * @param composite */ public boolean recoverDocumentMetadata(Integer idContainer,IFile file){ logger.debug("IN"); try{ int i=0; MetadataDocumentComposition metadataDocumentComposition = (new MetadataBO()).getMetadataDocumentComposition(); String id=file.getPersistentProperty(SpagoBIStudioConstants.DOCUMENT_ID); if(documentLabel!=null){ MessageDialog.openWarning(group.getShell(), "Warning", "Container has already Document in!"); logger.debug("OUT false"); return false; } else if(id==null){ MessageDialog.openWarning(group.getShell(), "Warning", "Chosen file has no SpagoBI document metadata"); logger.debug("OUT false"); return false; } else{ // new document i++; String localFileName=file.getName(); IPath ia=file.getFullPath(); //String localFileName=ia.toString(); MetadataDocument metadataDocument=new MetadataDocument(file); // check the document not alredy exist if(metadataDocument!=null){ boolean contained=designer.isDocumentContained(idContainer, metadataDocument.getLabel()); if(contained){ MessageDialog.openWarning(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Warning", "Document already present, cannot insert more times the same document!"); metadataDocument=null; logger.debug("OUT false"); return false; } } documentLabel = metadataDocument.getLabel(); //metadataDocument.setIdMetadataDocument(idContainer+"_"+metadataDocument.getLabel()); metadataDocument.setLocalFileName(localFileName); // add new MetadataDocumetn to list (new MetadataBO()).getMetadataDocumentComposition().addMetadataDocument(metadataDocument); logger.debug("OUT"); return viewDocumentMetadata(metadataDocument); } } catch (Exception e) { e.printStackTrace(); logger.error("Exception while retrieving metadata",e); return false; } } /** * VIsualize the metadata of the document inside the container * @param composite */ public boolean viewDocumentMetadata(MetadataDocument metadataDocument){ logger.debug("IN"); // get the image Path if(metadataDocument.getType()!=null){ imagePath=null; if(metadataDocument.getType().equalsIgnoreCase(TYPE_REPORT)){ imagePath=IMG_JASPER_REPORT; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_DASH)){ // distinguish chart and dashboard if(metadataDocument.getEngineLabel() != null && metadataDocument.getEngineLabel().equals(SpagoBIStudioConstants.DASHBOARD_ENGINE_LABEL)){ imagePath=IMG_DASHBOARD; } else{ imagePath=IMG_CHART; } } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_DATA_MINING)){ imagePath=IMG_DATA_MINING; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_DATAMART)){ imagePath=IMG_DATAMART; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_DOSSIER)){ imagePath=IMG_DOSSIER; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_DOCUMENT_COMPOSITIOn)){ imagePath=IMG_DOCUMENT_COMPOSITION; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_MAP)){ imagePath=IMG_MAP; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_ETL)){ imagePath=IMG_ETL; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_OFFICE_DOC)){ imagePath=IMG_OFFICE_DOC; } else if(metadataDocument.getType().equalsIgnoreCase(TYPE_OLAP)){ imagePath=IMG_OLAP; } else { imagePath=IMG_GENERAL; } drawImage(); String titleGroup="Name: "+metadataDocument.getName() != null ? metadataDocument.getName() : metadataDocument.getLabel(); group.setText(titleGroup); group.setToolTipText(metadataDocument.getLocalFileName()); // Label nameLabelName=new Label(group,SWT.NULL); // nameLabelName.setText("Name: "+metadataDocument.getName() != null ? metadataDocument.getName() : "" ); } logger.debug("OUT"); return true; } public void drawImage(){ logger.debug("IN"); InputStream is = null; InputStream isW = null; try{ // white background image String whiteBgImage = BACKGROUND; isW=DocCompUtilities.getInputStreamFromResource(whiteBgImage); whiteImage = new Image(group.getDisplay(), isW); } catch (Exception e) { logger.error("COuld not find image "+imagePath, e); return; // TODO: handle exception } finally{ try{ if(is != null) is.close(); } catch (Exception e) { // TODO: handle exception } } try{ final String imagePathFinal=imagePath; is=DocCompUtilities.getInputStreamFromResource(imagePathFinal); if(is != null){ logger.warn("immagine trovata"); } else{ logger.warn("immagine NON trovata"); } image = new Image(group.getDisplay(), is); } catch (Exception e) { logger.error("COuld not find image "+imagePath, e); return; // TODO: handle exception } finally{ try{ if(isW != null) isW.close(); } catch (Exception e) { // TODO: handle exception } } if(image==null){ logger.error("COuld not find image "+imagePath); return; } final int originalWidth = image.getBounds().width; final int originalHeight = image.getBounds().height; final int containerHeight=group.getBounds().height; final int containerWidth=group.getBounds().width; final double rapportoHeight=(double)containerHeight / (double)originalHeight; final double rapportoWidth=(double)containerWidth / (double)originalWidth; scaledImage = new Image(group.getDisplay(), whiteImage.getImageData().scaledTo((int)(originalWidth*rapportoWidth-20),(int)(originalHeight*rapportoHeight-20))); natureImage = new Image(group.getDisplay(), image.getImageData()); group.addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { // image = null; // try { // InputStream is=DocCompUtilities.getInputStreamFromResource(imagePathFinal); // image = new Image(group.getDisplay(), is); // // } catch (FileNotFoundException e1) { // e1.printStackTrace(); // } // catch (Exception e2) { // // e2.printStackTrace(); // } if(scaledImage != null){ //System.out.println("scaled "+scaledImage); e.gc.drawImage(scaledImage,20,20); //System.out.println("nature "+natureImage); e.gc.drawImage(natureImage,(int)((containerWidth-originalWidth)/2),(int)((containerHeight-originalHeight)/2)); image.dispose(); } //} // e.gc.drawImage(image, 20, 30); // image.dispose(); } }); group.redraw(); logger.debug("OUT"); } // public MetadataDocument getMetadataDocument() { // return metadataDocument; // } // // // public void setMetadataDocument(MetadataDocument metadataDocument) { // this.metadataDocument = metadataDocument; // } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } public Image getImage() { return image; } public void setImage(Image image) { this.image = image; } public String getImagePath() { return imagePath; } public void setImagePath(String imagePath) { this.imagePath = imagePath; } public Image getScaledImage() { return scaledImage; } public void setScaledImage(Image scaledImage) { this.scaledImage = scaledImage; } public String getDocumentLabel() { return documentLabel; } public void setDocumentLabel(String documentLabel) { this.documentLabel = documentLabel; } public MetadataDocument getMetadataDocument() { MetadataDocument toReturn; final MetadataDocumentComposition metadataDocumentComposition = (new MetadataBO()).getMetadataDocumentComposition(); toReturn = metadataDocumentComposition.findMetadataDocument(getDocumentLabel()); return toReturn; } public void setMetadataDocument(MetadataDocument metadataDocument) { MetadataDocument toReturn; final MetadataDocumentComposition metadataDocumentComposition = (new MetadataBO()).getMetadataDocumentComposition(); metadataDocumentComposition.addMetadataDocument(metadataDocument); } }