it.eng.spagobi.studio.core.services.template.DeployTemplateService.java Source code

Java tutorial

Introduction

Here is the source code for it.eng.spagobi.studio.core.services.template.DeployTemplateService.java

Source

/**
 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.core.services.template;

import it.eng.spagobi.server.services.api.bo.IDataSet;
import it.eng.spagobi.studio.core.wizards.deployWizard.SpagoBIDeployWizard;
import it.eng.spagobi.studio.utils.bo.Document;
import it.eng.spagobi.studio.utils.bo.Template;
import it.eng.spagobi.studio.utils.exceptions.NoActiveServerException;
import it.eng.spagobi.studio.utils.exceptions.NoDocumentException;
import it.eng.spagobi.studio.utils.services.SpagoBIServerObjectsFactory;
import it.eng.spagobi.studio.utils.util.SpagoBIStudioConstants;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.net.URI;
import java.rmi.RemoteException;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ui.PlatformUI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DeployTemplateService {

    ISelection selection;
    private static Logger logger = LoggerFactory.getLogger(DeployTemplateService.class);
    String projectname = null;
    SpagoBIDeployWizard sbdw = null;

    public DeployTemplateService(ISelection _selection, SpagoBIDeployWizard _sbdw) {
        selection = _selection;
        sbdw = _sbdw;
    }

    /** if document has meadata associated do the automated deploy
     * 
     * @return if automated eply has been done
     */
    public boolean doAutomaticDeploy() {
        logger.debug("IN");
        IStructuredSelection sel = (IStructuredSelection) selection;

        // go on only if you selected a document
        Object objSel = sel.toList().get(0);
        org.eclipse.core.internal.resources.File fileSel = null;
        fileSel = (org.eclipse.core.internal.resources.File) objSel;
        projectname = fileSel.getProject().getName();

        //if file has document metadata associated upload it, else call wizard

        String document_idString = null;
        String document_label = null;
        try {
            document_idString = fileSel.getPersistentProperty(SpagoBIStudioConstants.DOCUMENT_ID);
            document_label = fileSel.getPersistentProperty(SpagoBIStudioConstants.DOCUMENT_LABEL);
        } catch (CoreException e) {
            logger.error("Error in retrieving document Label", e);
        }

        // IF File selected has already and id of document associated do the upload wiyhout asking further informations
        boolean newDeploy = false;
        if (document_idString != null) {
            logger.debug("Template already associated to document " + document_idString);
            final Integer idInteger = Integer.valueOf(document_idString);
            final String label2 = document_label;
            final org.eclipse.core.internal.resources.File fileSel2 = fileSel;
            final NoDocumentException documentException = new NoDocumentException();
            final NoActiveServerException noActiveServerException = new NoActiveServerException();

            IRunnableWithProgress op = new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) throws InvocationTargetException {
                    monitor.beginTask("Deploying to document " + label2, IProgressMonitor.UNKNOWN);

                    if (projectname == null) {
                        projectname = fileSel2.getProject().getName();
                    }

                    try {
                        // document associated, upload the template

                        SpagoBIServerObjectsFactory spagoBIServerObjects = new SpagoBIServerObjectsFactory(
                                projectname);

                        URI uri = fileSel2.getLocationURI();

                        File fileJava = new File(uri.getPath());
                        FileDataSource fileDataSource = new FileDataSource(fileJava);
                        DataHandler dataHandler = new DataHandler(fileDataSource);
                        Template template = new Template();
                        template.setFileName(fileSel2.getName());
                        template.setContent(dataHandler);

                        // check document still exists
                        //Document doc=spagoBIServerObjects.getServerDocuments().getDocumentById(idInteger);
                        Document doc = spagoBIServerObjects.getServerDocuments().getDocumentByLabel(label2);
                        if (doc == null) {
                            documentException.setNoDocument(true);
                            logger.warn(
                                    "Document not retrieved; check it is still on server and you have enough permission to reach it"
                                            + idInteger);
                            return;
                        } else {
                            documentException.setNoDocument(false);

                            // **** Label defined inside template (Ext Chart case) ***
                            // in thecaseof an extChart also te dataset must be re-assigned because it could have been changed
                            String labelInsideXml = null;
                            try {
                                labelInsideXml = fileSel2
                                        .getPersistentProperty(SpagoBIStudioConstants.DATASET_LABEL_INSIDE);
                            } catch (CoreException e) {
                                logger.warn(
                                        "Errorin finding dataset label nto template, go on anyway using server one");
                            }

                            IDataSet found = null;
                            if (labelInsideXml != null) { // EXT CHART CASE
                                logger.debug("Set dataset document on server to " + labelInsideXml);
                                IDataSet[] datasets = spagoBIServerObjects.getServerDatasets().getDataSetList();
                                // get the id of the new datset
                                for (int i = 0; i < datasets.length && found == null; i++) {
                                    if (datasets[i].getLabel().equals(labelInsideXml)) {
                                        found = datasets[i];
                                    }
                                }
                                if (found != null) {
                                    Integer id = found.getId();
                                    doc.setDataSetId(id);
                                    logger.debug("update document with new dataset reference");
                                } else {
                                    logger.error("dataset " + labelInsideXml
                                            + " not found in server. delete dataset association");
                                    doc.setDataSetId(null);
                                }
                                spagoBIServerObjects.getServerDocuments().saveNewDocument(doc, template, null);

                            } else { // OTHER DOCUMENTS CASE
                                spagoBIServerObjects.getServerDocuments().uploadTemplate(idInteger, template);
                            }

                            // ALl documents case

                            // in case of dataset definition changed the dataset label as file metadata must be changed
                            if (found != null) {
                                try {
                                    fileSel2.setPersistentProperty(SpagoBIStudioConstants.DATASET_ID,
                                            found.getId().toString());
                                    fileSel2.setPersistentProperty(SpagoBIStudioConstants.DATASET_LABEL,
                                            found.getLabel());
                                    fileSel2.setPersistentProperty(SpagoBIStudioConstants.DATASET_NAME,
                                            found.getName());
                                    fileSel2.setPersistentProperty(SpagoBIStudioConstants.DATASET_DESCRIPTION,
                                            found.getDescription());
                                } catch (CoreException e) {
                                    logger.error(
                                            "Errorn updating file metadata about new dataset associated: go on anyway");
                                }
                            }

                        }
                    }

                    catch (NoActiveServerException e1) {
                        // no active server found 
                        noActiveServerException.setNoServer(true);
                        return;
                    } catch (RemoteException e) {
                        logger.error("Error comunicating with server", e);
                        MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                                "Error comunicating with server",
                                "Error while uploading the template: missing comunication with server");
                        return;
                    }

                    monitor.done();
                    if (monitor.isCanceled())
                        logger.error("Operation not ended",
                                new InterruptedException("The long running operation was cancelled"));
                }
            };

            ProgressMonitorDialog dialog = new ProgressMonitorDialog(
                    PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
            try {
                dialog.run(true, true, op);
            } catch (InvocationTargetException e1) {
                logger.error("Error comunicating with server", e1);
                MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error",
                        "Missing comunication with server; check server definition and if service is avalaible");
                dialog.close();
                return false;
            } catch (InterruptedException e1) {
                logger.error("Error comunicating with server", e1);
                MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error",
                        "Missing comunication with server; check server definition and if service is avalaible");
                dialog.close();
                return false;
            }
            if (documentException.isNoDocument()) {
                logger.error(
                        "Document not retrieved; check it is still on server and you have enough permission to reach it");
                MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                        "Error upload",
                        "Document not retrieved; check it is still on server and you have enough permission to reach it: make a new deploy");
                newDeploy = true;
                sbdw.setNewDeployFromOld(true);
            }
            if (noActiveServerException.isNoServer()) {
                logger.error("No server is defined active");
                MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error",
                        "No server is defined active");
                return false;
            }

            dialog.close();
            if (!newDeploy) {
                MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                        "Deploy succesfull",
                        "Deployed to the associated document " + document_label + " succesfull");
                logger.debug("Deployed to the associated document " + document_label + " succesfull");
            }
        } else {
            newDeploy = true;
        }

        if (newDeploy) {
            logger.debug("deploy a new Document: start wizard");
            // init wizard
            sbdw.init(PlatformUI.getWorkbench(), sel);
            // Create the wizard dialog
            WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                    sbdw);

            //         {
            //            @Override
            //            protected void configureShell(Shell newShell) {
            //               super.configureShell(newShell);
            //               newShell.setSize(1300, 600);
            //            }
            //         };

            // Open the wizard dialog
            dialog.open();
        }
        logger.debug("OUT");
        return true;

    }

}