private void initializeCheckedNodes() { final Collection<IModelTransferNode> initialSet = importConfig.getModelsToTransfer(); final ITreeContentProvider contents = (ITreeContentProvider) modelsTree.getContentProvider(); final ICheckable checkable = (ICheckable) modelsTree; final Set<IModelTransferNode> visited = Sets.newHashSet(); final Queue<Object> queue = new java.util.ArrayDeque<Object>(Arrays.asList(contents.getElements(importConfig))); for (Object next = queue.poll(); next != null; next = queue.poll()) { ITreeNode parent = (ITreeNode) next; // we must check a parent if the user initially selected it on opening the wizard // or we are importing and it is a dependent of a checked node, // or we are exporting and it is a dependency of a checked node, // or it is a model sub-unit (required dependency) of a checked node boolean mustCheck = initialSet.contains(parent.getElement()); if (mustCheck) { checkable.setChecked(next, true); } if (visited.add(parent.getElement())) { // recurse into the children for (Object child : contents.getChildren(next)) { ITreeNode treeNode = (ITreeNode) child; queue.add(treeNode); // we must check a node if either the user initially selected it on opening the wizard, // or we are importing and it is a dependent of a checked node, // or we are exporting and it is a dependency of a checked node, // or it is a model sub-unit (required dependency) of a checked node mustCheck = initialSet.contains(treeNode.getElement()) // || (isImport ? treeNode.isDependent() : treeNode.isDependency()) // || (checkable.getChecked(parent) && parent.getElement().isModelSubUnit(treeNode.getElement())); if (mustCheck) { checkable.setChecked(child, true); importConfig.addModelToTransfer(treeNode.getElement().getPrimaryResourceURI()); } } } } }
@Override public void createControl(Composite parent) { initializeDialogUnits(parent); Composite result = new Composite(parent, SWT.NONE); result.setLayout(new GridLayout(1, false)); new Label(result, SWT.NONE).setText(Messages.ModelReferencesPage_4); ModelImportContentProvider contents = new ModelImportContentProvider(); modelsTree = new CheckboxTreeViewer(result); modelsTree.getControl().setLayoutData(GridDataFactory.fillDefaults().grab(true, true).create()); modelsTree.setAutoExpandLevel(2); modelsTree.setContentProvider(contents); modelsTree.setLabelProvider(new TreeNodeLabelProvider()); new Label(result, SWT.NONE).setText(Messages.ModelReferencesPage_5); pathText = new Text(result, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); pathText.setLayoutData( GridDataFactory.fillDefaults() .grab(true, false) .hint(SWT.DEFAULT, convertHeightInCharsToPixels(3)) .create()); if (isImport) { stripSashModelContent = new Button(result, SWT.CHECK); stripSashModelContent.setText(Messages.ModelReferencesPage_2); stripSashModelContent.setToolTipText(Messages.ModelReferencesPage_6); stripSashModelContent.addSelectionListener( new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (getConfiguration() != null) { getConfiguration().setStripSashModelContent(stripSashModelContent.getSelection()); } } }); } modelsTree.addSelectionChangedListener( new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sel = (IStructuredSelection) event.getSelection(); if (!sel.isEmpty()) { selected(sel.getFirstElement()); } else { selected(null); } } }); ((ICheckable) modelsTree).addCheckStateListener(contents); ((ICheckable) modelsTree) .addCheckStateListener( new ICheckStateListener() { @Override public void checkStateChanged(CheckStateChangedEvent event) { Display.getCurrent() .asyncExec( new Runnable() { @Override public void run() { validatePage(); } }); } }); setControl(result); validatePage(); }