Java tutorial
// ============================================================================ // // Copyright (C) 2006-2015 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.wizards.exportjob; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TreeItem; import org.talend.core.GlobalServiceRegister; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.ui.ITestContainerProviderService; import org.talend.core.ui.advanced.composite.FilteredCheckboxTree; import org.talend.repository.i18n.Messages; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.repository.model.RepositoryNode; import org.talend.repository.ui.views.IRepositoryView; import org.talend.repository.viewer.ui.provider.RepositoryViewerProvider; /** * DOC achen class global comment. Detailled comment */ public class ExportTreeViewer { private FilteredCheckboxTree filteredCheckboxTree; Collection<RepositoryNode> repositoryNodes = new ArrayList<RepositoryNode>(); private IStructuredSelection selection; private SashForm sash; private Button moveButton; private JobScriptsExportWizardPage jobScriptExportWizardPage; private IRepositoryView realRepView; public ExportTreeViewer(IStructuredSelection selection, JobScriptsExportWizardPage jobScriptExportWizardPage) { this.selection = selection; if (this.selection != null && !this.selection.isEmpty()) { this.repositoryNodes.addAll(this.selection.toList()); } this.jobScriptExportWizardPage = jobScriptExportWizardPage; } public ExportTreeViewer(RepositoryNode[] repNodes, JobScriptsExportWizardPage jobScriptExportWizardPage) { if (repNodes != null) { for (RepositoryNode repNode : repNodes) { this.repositoryNodes.add(repNode); } } this.jobScriptExportWizardPage = jobScriptExportWizardPage; } protected ERepositoryObjectType getCheckingType() { return ERepositoryObjectType.PROCESS; // default for job } public SashForm createContents(Composite parent) { // Splitter final GridData data = new GridData(); data.heightHint = 600; data.widthHint = 600; sash = new SashForm(parent, SWT.HORIZONTAL | SWT.SMOOTH); sash.setLayoutData(data); GridLayout layout = new GridLayout(); sash.setLayout(layout); // create tree createItemList(sash); // create button Composite buttonComposite = new Composite(sash, SWT.ERROR); buttonComposite.setLayout(new GridLayout()); moveButton = new Button(buttonComposite, SWT.PUSH); moveButton.setText(">>"); //$NON-NLS-1$ moveButton.setToolTipText("Show job tree"); //$NON-NLS-1$ final GridData layoutData = new GridData(); layoutData.verticalAlignment = GridData.CENTER; layoutData.horizontalAlignment = GridData.CENTER; layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; layoutData.widthHint = 30; moveButton.setLayoutData(layoutData); // add listner moveButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(final SelectionEvent e) { if (moveButton.getText().equals("<<")) { //$NON-NLS-1$ sash.setWeights(new int[] { 0, 1, 23 }); moveButton.setText(">>"); //$NON-NLS-1$ moveButton.setToolTipText(Messages.getString("ExportTreeViewer.showJobTree")); //$NON-NLS-1$ } else if (moveButton.getText().equals(">>")) { //$NON-NLS-1$ sash.setWeights(new int[] { 10, 1, 15 }); moveButton.setText("<<"); //$NON-NLS-1$ moveButton.setToolTipText(Messages.getString("ExportTreeViewer.hideJobTree")); //$NON-NLS-1$ } } }); return sash; } /** * * @param workArea */ public Composite createItemList(Composite workArea) { Group itemComposite = new Group(workArea, 0); GridLayoutFactory.swtDefaults().numColumns(2).applyTo(itemComposite); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).hint(400, 200) .applyTo(itemComposite); Label label = new Label(itemComposite, SWT.NONE); label.setText(Messages.getString("ExportTreeViewer.selectItems")); //$NON-NLS-1$ GridDataFactory.swtDefaults().grab(true, false).span(2, 1).applyTo(label); createTreeViewer(itemComposite); createSelectionButton(itemComposite); CheckboxTreeViewer exportItemsTreeViewer = getExportItemsTreeViewer(); exportItemsTreeViewer.refresh(); // force loading all nodes exportItemsTreeViewer.expandAll(); exportItemsTreeViewer.collapseAll(); // expand to level of metadata connection exportItemsTreeViewer.expandToLevel(4); // if user has select some items in repository view, mark them as checked if (!repositoryNodes.isEmpty()) { exportItemsTreeViewer.setCheckedElements(repositoryNodes.toArray()); for (RepositoryNode node : repositoryNodes) { expandParent(exportItemsTreeViewer, node); exportItemsTreeViewer.refresh(node); } selectItems(exportItemsTreeViewer.getTree().getItems()); } return itemComposite; } /*** * bug fix : items are not selected in database repository mode if the repository node is refresh and a new instance * of the repository node is created we need to compare ids to select this nodes */ private void selectItems(TreeItem[] treeItems) { CheckboxTreeViewer exportItemsTreeViewer = getExportItemsTreeViewer(); for (TreeItem treeItem : treeItems) { if (treeItem.getData() != null && treeItem.getData() instanceof RepositoryNode) { RepositoryNode repositoryNode = (RepositoryNode) treeItem.getData(); for (RepositoryNode repositoryNode2 : repositoryNodes) { if (repositoryNode.getId().equals(repositoryNode2.getId())) { exportItemsTreeViewer.setChecked(repositoryNode, true); } } } selectItems(treeItem.getItems()); } } private void expandParent(TreeViewer viewer, RepositoryNode node) { RepositoryNode parent = node.getParent(); if (parent != null) { expandParent(viewer, parent); viewer.setExpandedState(parent, true); } } public FilteredCheckboxTree getFilteredCheckboxTree() { return this.filteredCheckboxTree; } protected CheckboxTreeViewer getExportItemsTreeViewer() { if (getFilteredCheckboxTree() != null) { return this.getFilteredCheckboxTree().getViewer(); } return null; } public RepositoryNode[] getCheckNodes() { List<RepositoryNode> ret = new ArrayList<RepositoryNode>(); CheckboxTreeViewer exportItemsTreeViewer = getExportItemsTreeViewer(); for (int i = 0; i < exportItemsTreeViewer.getCheckedElements().length; i++) { RepositoryNode node = (RepositoryNode) exportItemsTreeViewer.getCheckedElements()[i]; if (node.getType() == ENodeType.REPOSITORY_ELEMENT) { ret.add(node); } } return ret.toArray(new RepositoryNode[0]); } private void createTreeViewer(Composite itemComposite) { filteredCheckboxTree = new FilteredCheckboxTree(itemComposite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI) { @Override protected CheckboxTreeViewer doCreateTreeViewer(Composite parent, int style) { RepositoryViewerProvider provider = new RepositoryViewerProvider() { @Override protected ERepositoryObjectType getCheckingType() { return ExportTreeViewer.this.getCheckingType(); } }; return (CheckboxTreeViewer) provider.createViewer(parent); } @Override protected void refreshCompleted() { getViewer().expandToLevel(3); restoreCheckedElements(); } @Override protected boolean isNodeCollectable(TreeItem item) { Object obj = item.getData(); if (obj instanceof RepositoryNode) { RepositoryNode node = (RepositoryNode) obj; if (node.getObjectType() == ERepositoryObjectType.METADATA_CONNECTIONS) { return true; } } return false; } }; getExportItemsTreeViewer().addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { RepositoryNode node = (RepositoryNode) element; return filterRepositoryNode(node); } }); } public void addCheckStateListener(ICheckStateListener listener) { getExportItemsTreeViewer().addCheckStateListener(listener); } public void removeCheckStateListener(ICheckStateListener listener) { getExportItemsTreeViewer().removeCheckStateListener(listener); } protected boolean filterRepositoryNode(RepositoryNode node) { if (node == null) { return false; } if (node.isBin()) { return false; } if (isTestContainer(node.getObjectType())) { return false; } ERepositoryObjectType contentType = node.getContentType(); if (contentType != null) { if (contentType == ERepositoryObjectType.PROCESS) { return true; } else if (contentType == ERepositoryObjectType.SVN_ROOT) { return true; } else if (contentType == ERepositoryObjectType.REFERENCED_PROJECTS) { return true; } else if (contentType == ERepositoryObjectType.valueOf(ERepositoryObjectType.class, "PROCESS_MR")) { return true; } else if (contentType == ERepositoryObjectType.valueOf(ERepositoryObjectType.class, "PROCESS_STORM")) { return true; } else { return false; } } else { if (node.getType() == ENodeType.REPOSITORY_ELEMENT) { return true; } } return false; } private boolean isTestContainer(ERepositoryObjectType type) { boolean isTestContainer = false; if (GlobalServiceRegister.getDefault().isServiceRegistered(ITestContainerProviderService.class)) { ITestContainerProviderService testContainerService = (ITestContainerProviderService) GlobalServiceRegister .getDefault().getService(ITestContainerProviderService.class); if (testContainerService != null) { isTestContainer = testContainerService.isTestContainerType(type); } } return isTestContainer; } protected void checkSelection() { if (jobScriptExportWizardPage == null) { return; } if (this.getCheckNodes().length == 0) { StringBuffer buff = new StringBuffer(); buff.append(Messages.getString("JavaJobScriptsExportWSWizardPage.needOneJobSelected")); //$NON-NLS-1$ jobScriptExportWizardPage.setErrorMessage(buff.toString()); jobScriptExportWizardPage.setPageComplete(false); } else { jobScriptExportWizardPage.setErrorMessage(null); jobScriptExportWizardPage.setPageComplete(true); } } /** * DOC hcw Comment method "createSelectionButton". * * @param itemComposite */ private void createSelectionButton(Composite itemComposite) { Composite buttonComposite = new Composite(itemComposite, SWT.NONE); GridLayoutFactory.swtDefaults().margins(0, 25).applyTo(buttonComposite); GridDataFactory.swtDefaults().align(SWT.FILL, SWT.BEGINNING).applyTo(buttonComposite); buttonComposite.setLayout(new RowLayout(SWT.VERTICAL)); Button hide = new Button(buttonComposite, SWT.PUSH); hide.setVisible(false); Button selectAll = new Button(buttonComposite, SWT.PUSH); // selectAll.setText(DataTransferMessages.DataTransfer_selectAll); selectAll.setText(Messages.getString("DataTransferMessages.DataTransfer_selectAll")); //$NON-NLS-1$ selectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getExportItemsTreeViewer().setAllChecked(true); checkSelection(); } }); Button deselectAll = new Button(buttonComposite, SWT.PUSH); // deselectAll.setText(DataTransferMessages.DataTransfer_deselectAll); deselectAll.setText(Messages.getString("DataTransferMessages.DataTransfer_deselectAll")); //$NON-NLS-1$ deselectAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getExportItemsTreeViewer().setAllChecked(false); checkSelection(); } }); // setButtonLayoutData(deselectAll); Button expandBtn = new Button(buttonComposite, SWT.PUSH); expandBtn.setText("Expand All"); //$NON-NLS-1$ expandBtn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getExportItemsTreeViewer().expandAll(); } }); // setButtonLayoutData(expandBtn); Button collapseBtn = new Button(buttonComposite, SWT.PUSH); collapseBtn.setText("Collapse All"); //$NON-NLS-1$ collapseBtn.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getExportItemsTreeViewer().collapseAll(); } }); // setButtonLayoutData(collapseBtn); } /** * * A repository view with checkbox on the left. */ /** * DOC nrousseau Comment method "dispose". */ public void dispose() { getExportItemsTreeViewer().setCheckedElements(ArrayUtils.EMPTY_OBJECT_ARRAY); jobScriptExportWizardPage = null; repositoryNodes.clear(); repositoryNodes = null; filteredCheckboxTree = null; realRepView = null; } }