/** 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.utils.wizard.wizardPage; import java.util.HashMap; import it.eng.spagobi.studio.utils.util.WorkbenchProjectTreeGenerator; import it.eng.spagobi.studio.utils.util.WorkspaceHandler; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowData; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class WorkbenchProjectTreePage extends WizardPage { private IStructuredSelection selection; private Combo projectCombo; private static Logger logger = LoggerFactory.getLogger(WorkbenchProjectTreePage.class); private WorkbenchProjectTreeGenerator workbenchProjectTreeGenerator; private Tree tree; // Associate Tree item name with the folder it represent HashMap<String, IFolder> itemFolderMap = null; public WorkbenchProjectTreePage(String pageName, IStructuredSelection _selection) { super("Projects tree"); setTitle("Select the project folder"); setDescription("Select the project folder in which insert your new template"); this.selection = _selection; } /** Creates the wizard form * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { logger.debug("IN"); // Shell shell = parent.getShell(); // int x = shell.getSize().x; // int y = shell.getSize().y; // shell.setSize(x, y); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new RowLayout(SWT.VERTICAL)); setPageComplete(false); // Combo to select project final Group projectGroup= new org.eclipse.swt.widgets.Group(composite, SWT.BORDER); GridLayout nameLayout = new GridLayout(); int ncol = 2; nameLayout.numColumns = ncol; projectGroup.setLayout(nameLayout); projectGroup.setLayoutData(new RowData(600,90)); Label aaName=new Label(projectGroup, SWT.NONE); aaName.setText("Select Project: "); // Tree to select folder final Group belowGroup=new Group(composite,SWT.BORDER); belowGroup.setLayoutData(new RowData(600,300)); // final StackLayout layout = new StackLayout(); // belowGroup.setLayout(layout); final FillLayout layout = new FillLayout(); belowGroup.setLayout(layout); Label setName=new Label(belowGroup, SWT.NONE); setName.setText("Select Folder: "); GridData gridDataName = new GridData(); gridDataName.horizontalAlignment = GridData.FILL; gridDataName.grabExcessHorizontalSpace = true; setName.setLayoutData(gridDataName); workbenchProjectTreeGenerator = new WorkbenchProjectTreeGenerator(); tree = workbenchProjectTreeGenerator.initializeTree(belowGroup); getTree().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); } } }); projectCombo = new Combo(projectGroup, SWT.NONE | SWT.READ_ONLY); projectCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); // if selected just one project disable project seleztion String projectSelected = null; String[] projects = null; if(selection != null && selection.toList().size()==1){ Object objSel = selection.toList().get(0); if (objSel instanceof IProject){ projectSelected = ((IProject)objSel).getName(); logger.debug("Project selected is "+projectSelected); } else if (objSel instanceof IFolder){ projectSelected = ((IFolder)objSel).getProject().getName(); logger.debug("Project selected is "+projectSelected); } } if(projectSelected == null){ projects = new WorkspaceHandler().getProjectNames(); } else{ projects = new String[1]; projects[0] = projectSelected; } for (int i = 0; i < projects.length; i++) { projectCombo.add(projects[i]); } // selection change tree projectCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { // get selected project String prName = projectCombo.getItem(projectCombo.getSelectionIndex()); // erase old tree workbenchProjectTreeGenerator.removeOldTree(getTree()); itemFolderMap = workbenchProjectTreeGenerator.generateTree(getTree(), belowGroup, prName, itemFolderMap); setControl(belowGroup); belowGroup.redraw(); } }); // if project is already selected disable combo and draw tree Once for all if(projectSelected != null){ projectCombo.select(0); projectCombo.setEnabled(false); // erase old tree workbenchProjectTreeGenerator.removeOldTree(getTree()); itemFolderMap = workbenchProjectTreeGenerator.generateTree(getTree(), belowGroup, projectSelected, itemFolderMap); setControl(belowGroup); belowGroup.redraw(); } setControl(composite); logger.debug("OUT"); } public Tree getTree() { return tree; } public void setTree(Tree tree) { this.tree = tree; } /** * to be complete only one resource selected and not the project root */ public boolean isPageComplete() { boolean isComplete=false; if(getTree()!=null){ int count = getTree().getSelectionCount(); if(count==1){ //check the selected is not project root TreeItem item = getTree().getSelection()[0]; if(item.getData() != null){ String data = item.getData().toString(); if(data.equalsIgnoreCase(WorkbenchProjectTreeGenerator.TREE_ROOT)){ isComplete = false; } else isComplete = true; } else isComplete = true; } else isComplete = false; } return isComplete; } public HashMap<String, IFolder> getItemFolderMap() { return itemFolderMap; } public void setItemFolderMap(HashMap<String, IFolder> itemFolderMap) { this.itemFolderMap = itemFolderMap; } }