/** 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.wizards.downloadWizard; import it.eng.spagobi.studio.core.log.SpagoBILogger; import it.eng.spagobi.studio.core.util.SdkFunctionalityTreeGenerator; import it.eng.spagobi.studio.utils.bo.Functionality; import it.eng.spagobi.studio.utils.exceptions.NoActiveServerException; import it.eng.spagobi.studio.utils.sdk.SDKProxyFactory; import it.eng.spagobi.studio.utils.services.SpagoBIServerObjectsFactory; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.ProgressMonitorPart; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Thre Download Wizard let the user to navigate the funcitonalities tree and select a document to download * */ public class SpagoBIDownloadWizardPage extends WizardPage { //private Text containerText; //private Text fileText; private static Logger logger = LoggerFactory.getLogger(SpagoBIDownloadWizardPage.class); private IStructuredSelection selection; private Tree tree; private ProgressMonitorPart monitor; private Functionality functionality; String projectName = null; /** * Constructor for SampleNewWizardPage. * * @param pageName */ public SpagoBIDownloadWizardPage(IStructuredSelection selection) { super("wizardPage"); setTitle("Download Document Wizard"); setDescription("This wizard lets you download a BI document template from SpagoBI Server"); this.selection = selection; } /** Creates the wizard form * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { logger.debug("IN"); monitor=new ProgressMonitorPart(getShell(), null); initialize(); Composite container = new Composite(parent, SWT.NULL); FillLayout layout= new FillLayout(); container.setLayout(layout); // SDKProxyFactory proxyFactory = null; // try{ // Server server = new ServerHandler().getCurrentActiveServer(projectName); // proxyFactory=new SDKProxyFactory(server); // } // catch (NoActiveServerException e1) { // SpagoBILogger.errorLog("No active server found", e1); // MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), // "Error", "No active server found"); // return; // } IRunnableWithProgress op = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { monitor.beginTask("Download documents tree", IProgressMonitor.UNKNOWN); SDKProxyFactory proxyFactory = null; // try { // Server server = new ServerHandler().getCurrentActiveServer(projectName); // proxyFactory=new SDKProxyFactory(server); // } // catch (NoActiveServerException e1) { // SpagoBILogger.errorLog("No active server found", e1); // MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), // "Error", "No active server found"); // return; // } try{ SpagoBIServerObjectsFactory spagoBIServerObjects = new SpagoBIServerObjectsFactory(projectName); functionality=spagoBIServerObjects.getServerDocuments().getDocumentsAsTree(null); } catch (NoActiveServerException e1) { SpagoBILogger.errorLog("No active server found", e1); MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "No active server found"); return; } catch (Exception e) { SpagoBILogger.errorLog("No comunication with SpagoBI server", e); MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "No comunication with server", "Error in comunication with SpagoBi Server; check its definition and check if the service is avalaible"); return; } monitor.done(); if (monitor.isCanceled()) SpagoBILogger.errorLog("Operation not ended",new InterruptedException("The long running operation was cancelled")); } }; ProgressMonitorDialog dialog=new ProgressMonitorDialog(getShell()); try { dialog.run(true, true, op); } catch (InvocationTargetException e1) { SpagoBILogger.errorLog("No comunication with SpagoBI server", e1); dialog.close(); MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "No comunication with server", "Error in comunication with SpagoBi Server; check its definition and check if the service is avalaible"); return; } catch (InterruptedException e1) { SpagoBILogger.errorLog("No comunication with SpagoBI server", e1); dialog.close(); MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "No comunication with server", "Error in comunication with SpagoBi Server; check its definition and check if the service is avalaible"); return; } dialog.close(); SdkFunctionalityTreeGenerator treeGenerator=new SdkFunctionalityTreeGenerator(); try{ tree=treeGenerator.generateTree(container, functionality); } catch (Exception e) { SpagoBILogger.errorLog("Error while generating tree", e); MessageDialog.openError(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Error", "Error in generating the tree, control if SpagoBI Server is defined and service is avalaible"); } tree.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { //check if page is complete boolean complete=isPageComplete(); if(complete){ setPageComplete(true); } else{ setPageComplete(false); } } }); setControl(container); logger.debug("OUT"); } /** * Tests if the current workbench selection is a suitable container to use. */ private void initialize() { logger.debug("IN"); if (selection != null && selection.isEmpty() == false && selection instanceof IStructuredSelection) { IStructuredSelection ssel = (IStructuredSelection) selection; if (ssel.size() > 1) return; Object obj = ssel.getFirstElement(); if (obj instanceof IResource) { IContainer container; if (obj instanceof IContainer) container = (IContainer) obj; else container = ((IResource) obj).getParent(); projectName =container.getProject().getName(); } } logger.debug("OUT"); } /** * Uses the standard container selection dialog to choose the new value for * the container field. */ private void handleBrowse() { logger.debug("IN"); ContainerSelectionDialog dialog = new ContainerSelectionDialog( getShell(), ResourcesPlugin.getWorkspace().getRoot(), false, "Select new file container"); if (dialog.open() == ContainerSelectionDialog.OK) { Object[] result = dialog.getResult(); if (result.length == 1) { //containerText.setText(((Path) result[0]).toString()); } } logger.debug("OUT"); } /** * Ensures that both text fields are set. */ private void updateStatus(String message) { setErrorMessage(message); setPageComplete(message == null); } public Tree getTree() { return tree; } public void setTree(Tree tree) { this.tree = tree; } /** * DOwnlaod wizard page is complete if something has been selected, both one or more document or one or more folders */ public boolean isPageComplete() { boolean isComplete=false; if(tree!=null){ TreeItem[] treeItems=tree.getSelection(); if(treeItems!=null && treeItems.length>=1){ isComplete = true; } } return isComplete; } }