// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.repository.ui.actions.importproject; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer; import org.eclipse.ui.dialogs.SelectionDialog; import org.eclipse.ui.model.WorkbenchContentProvider; import org.talend.commons.exception.BusinessException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.commons.ui.swt.formtools.Form; import org.talend.core.CorePlugin; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.general.Project; import org.talend.core.prefs.GeneralParametersProvider; import org.talend.core.prefs.GeneralParametersProvider.GeneralParameters; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.repository.i18n.Messages; import org.talend.repository.ui.ERepositoryImages; /** * DOC qwei class global comment. Detailled comment */ public class SelectDeleteProjectDialog extends SelectionDialog { private Button bSelectAll; private Button bDeselectAll; private Button chkButton; private ContainerCheckedTreeViewer treeViewer; private List<Object> projectItemList = new ArrayList<Object>(); private List<Object> delItemList = new ArrayList<Object>(); private Project pro; private static final String DEFAULTMESAGE = Messages.getString("SelectDeleteProjectDialog.Label"); //$NON-NLS-1$ private static final String TITILE = Messages.getString("SelectDeleteProjectDialog.Title"); //$NON-NLS-1$ private List<Project> projects = new ArrayList<Project>(); /** * DOC qwei SelectDeleteProjectDialog constructor comment. * * @param parentShell */ protected SelectDeleteProjectDialog(Shell parentShell) { super(parentShell); super.setShellStyle((SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM | SWT.RESIZE | SWT.RESIZE | SWT.MIN | SWT.MAX)); // TODO Auto-generated constructor stub setTitle(TITILE); setMessage(DEFAULTMESAGE); RepositoryContext repositoryContext = (RepositoryContext) CorePlugin.getContext().getProperty( Context.REPOSITORY_CONTEXT_KEY); this.pro = repositoryContext.getProject(); } public SelectDeleteProjectDialog(Shell parentShell, boolean login) { this(parentShell); getProjectItem(login); } private void getProjectItem(boolean login) { List<String> notExportProjects = Arrays.asList(GeneralParametersProvider .getStrings(GeneralParameters.PROJECTS_EXCLUDED_FROM_EXPORT)); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (int i = 0; i < projects.length; i++) { if (projects[i].isOpen() && !notExportProjects.contains(projects[i].getName())) { if (!login && pro.getLabel().toLowerCase().equals(projects[i].getName().toLowerCase())) { } else { projectItemList.add(projects[i]); } } } } @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL)); createMessageArea(composite); Group group = Form.createGroup(composite, 20, null, 250); Composite inner = new Composite(group, SWT.NONE); inner.setFont(composite.getFont()); inner.setLayoutData(new GridData(GridData.FILL_BOTH)); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; layout.horizontalSpacing = 10; layout.makeColumnsEqualWidth = false; inner.setLayout(layout); createTreeViewer(inner); createOptionsArea(inner); return composite; } private void createOptionsArea(Composite parent) { Composite optionsGroup = new Composite(parent, SWT.NONE); optionsGroup.setLayout(new GridLayout()); optionsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); chkButton = new Button(optionsGroup, SWT.CHECK); chkButton.setText(Messages.getString("SelectDeleteProjectDialog.deleteWarning")); //$NON-NLS-1$ chkButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); chkButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { chkButton.setSelection(chkButton.getSelection()); } }); } private void createTreeViewer(Composite parent) { GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = 0; layout.makeColumnsEqualWidth = false; parent.setLayout(layout); parent.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH)); GridData listData = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); treeViewer = new ContainerCheckedTreeViewer(parent); treeViewer.getControl().setLayoutData(listData); // treeViewer.setContentProvider(getResourceProvider(IResource.FOLDER | IResource.PROJECT)); treeViewer.setContentProvider(getResourceProvider(IResource.PROJECT)); // treeViewer.setLabelProvider(WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider()); treeViewer.setLabelProvider(new LabelProvider() { public final String getText(Object element) { // query the element for its label String label = ""; //$NON-NLS-1$ if (element instanceof IProject) { IProject project = (IProject) element; label = getLabel(project.getName()); } else if (element instanceof IFolder) { IFolder folder = (IFolder) element; label = getLabel(folder.getName()); } return label; } private String getLabel(String name) { List<Project> proItem = getProjectItem(); for (int i = 0; i < proItem.size(); i++) { Project p = proItem.get(i); String proName = p.getTechnicalLabel()/* .toUpperCase() */; if (proName.equals(name)) { return p.getLabel(); } } return name; } public final Image getImage(Object element) { // obtain the base image by querying the element if (element instanceof IProject) { return ImageProvider.getImage(ERepositoryImages.PROJECT_ICON); } else if (element instanceof IFolder) { return ImageProvider.getImage(ERepositoryImages.FOLDER_ICON); } return null; } }); treeViewer.setInput(projectItemList); treeViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); addTreeListener(); createButtons(parent); } private List<Project> getProjectItem() { if (!projects.isEmpty()) { return projects; } ProxyRepositoryFactory repositoryFactory = ProxyRepositoryFactory.getInstance(); Project[] projects = null; try { projects = repositoryFactory.readProject(); } catch (PersistenceException e) { ExceptionHandler.process(e); } catch (BusinessException e) { ExceptionHandler.process(e); } for (Project p : projects) { this.projects.add(p); } if (projects != null) { return this.projects; } return Collections.emptyList(); } private void createButtons(Composite parent) { Composite buttons = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; buttons.setLayout(layout); buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); bSelectAll = new Button(buttons, SWT.PUSH); bSelectAll.setText(Messages.getString("SelectDeleteProjectDialog.SelectAll")); //$NON-NLS-1$ bSelectAll.setFont(parent.getFont()); setButtonLayoutData(bSelectAll); bSelectAll.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { treeViewer.setAllChecked(true); delItemList = projectItemList; } }); bDeselectAll = new Button(buttons, SWT.PUSH); bDeselectAll.setText(Messages.getString("SelectDeleteProjectDialog.DeselectAll")); //$NON-NLS-1$ bDeselectAll.setFont(parent.getFont()); setButtonLayoutData(bDeselectAll); bDeselectAll.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { treeViewer.setAllChecked(false); if (!delItemList.isEmpty()) { delItemList.removeAll(projectItemList); } } }); } private ITreeContentProvider getResourceProvider(final int resourceType) { return new WorkbenchContentProvider() { public Object[] getChildren(Object o) { if (o instanceof IContainer) { IResource[] members = null; try { members = ((IContainer) o).members(); } catch (CoreException e) { // just return an empty set of children return new Object[0]; } // filter out the desired resource types ArrayList results = new ArrayList(); for (int i = 0; i < members.length; i++) { // And the test bits with the resource types to see if they are what we want if ((members[i].getType() & resourceType) > 0) { results.add(members[i]); } } return results.toArray(); } // input element case if (o instanceof ArrayList) { return ((ArrayList) o).toArray(); } return new Object[0]; } }; } private void addTreeListener() { treeViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { Object obj = event.getElement(); if (event.getChecked()) { delItemList.add(obj); } else { if (delItemList.contains(obj)) { delItemList.remove(obj); } } } }); } private void delProjectItem() { try { if (delItemList.size() != 0) { for (Object obj : delItemList) { if (obj instanceof IProject) { IProject project = (IProject) obj; // project.delete(true, null); project.delete(!chkButton.getSelection(), true, null); // IResourceChangeDescriptionFactory factory = // ResourceChangeValidator.getValidator().createDeltaFactory(); // factory.delete(project); } else if (obj instanceof IFolder) { IFolder folder = (IFolder) obj; folder.delete(false, null); } } } } catch (CoreException e) { ExceptionHandler.process(e); } } @Override protected void okPressed() { delProjectItem(); projects = null; super.okPressed(); } public List<Object> getDelList() { return delItemList; } }