Example usage for org.eclipse.jface.viewers TreeViewer getSelection

List of usage examples for org.eclipse.jface.viewers TreeViewer getSelection

Introduction

In this page you can find the example usage for org.eclipse.jface.viewers TreeViewer getSelection.

Prototype

@Override
public ISelection getSelection() 

Source Link

Document

The AbstractTreeViewer implementation of this method returns the result as an ITreeSelection.

Usage

From source file:org.talend.core.ui.context.ContextManagerHelper.java

License:Open Source License

/**
 * //from  ww w  .ja va 2  s  . c om
 * ggu Comment method "changeContextOrder".
 * 
 * order the context parameter
 */
public static boolean changeContextOrder(TreeViewer viewer, IContextModelManager modelManager, boolean up) {
    if (viewer == null || modelManager == null) {
        return false;
    }
    final ISelection selection = viewer.getSelection();
    if (selection == null || selection.isEmpty()) {
        return false;
    }
    if (!(selection instanceof IStructuredSelection)) {
        return false;
    }
    IStructuredSelection sSection = (IStructuredSelection) selection;
    if (sSection.size() != 1) { // not support multi-selection
        return false;
    }

    Object element = sSection.getFirstElement();
    IContextParameter movedParam = null;
    if (element instanceof ContextVariableTabParentModel) {
        movedParam = ((ContextVariableTabParentModel) element).getContextParameter();
    }

    if (element instanceof ContextTableTabParentModel) {
        movedParam = ((ContextTableTabParentModel) element).getContextParameter();
    }
    if (movedParam == null) {
        return false;
    }

    OrderContextParameterCommand orderCommand = new OrderContextParameterCommand(
            modelManager.getContextManager(), movedParam, up);
    final CommandStack commandStack = modelManager.getCommandStack();
    if (commandStack != null) {
        commandStack.execute(orderCommand);
    } else {
        orderCommand.execute();
    }
    //
    modelManager.refresh();

    revertTreeSelection(viewer, movedParam);

    return orderCommand.isExecution();
}

From source file:org.talend.designer.filemultischemas.managers.UIManager.java

License:Open Source License

public void refreshSchemasDetailView(TreeViewer schemaTreeViewer, TreeViewer schemaDetailsViewer,
        boolean model) {
    if (schemaTreeViewer == null || schemaTreeViewer.getTree().isDisposed() || schemaDetailsViewer == null
            || schemaDetailsViewer.getTree().isDisposed()) {
        return;/*  w w  w  .j a  v  a2s  . c  o  m*/
    }
    IStructuredSelection selection = (IStructuredSelection) schemaTreeViewer.getSelection();
    Object element = selection.getFirstElement();
    if (element == null || !(element instanceof SchemasKeyData)) {
        return;
    }
    final Tree tree = schemaDetailsViewer.getTree();
    tree.setRedraw(false);

    SchemasKeyData schemasData = (SchemasKeyData) element;

    final List<MultiMetadataColumn> metadataColumns = schemasData.getMetadataColumnsInModel();

    if (model) {
        schemaDetailsViewer.setInput(metadataColumns);
        //
        tree.setRedraw(true);
        // type
        final TreeColumn typeColumn = tree.getColumns()[EPropertyName.indexOf(EPropertyName.TYPE)];
        typeColumn.pack();
    } else {

        final int colSize = metadataColumns.size();

        if (colSize > 0) {
            //
            List<String> columnProperties = new ArrayList<String>();
            // first column
            columnProperties.add(new Integer(-1).toString());

            final int columnNum = tree.getColumnCount() - 1;
            for (int i = 0; i < colSize; i++) {
                TreeColumn dataColumn = null;
                if (i < columnNum) {// existed column, only update data.
                    dataColumn = tree.getColumns()[i + 1];
                } else { // create new column
                    dataColumn = new TreeColumn(tree, SWT.NONE);
                    dataColumn.setWidth(100);
                }
                // MultiSchemasMetadataColumn metadataColumn = metadataColumns.get(i);
                // dataColumn.setText(metadataColumn.getLabel());
                // dataColumn.setData(metadataColumn);

                columnProperties.add(new Integer(i).toString());
            }

            schemaDetailsViewer.setColumnProperties(columnProperties.toArray(new String[0]));

            schemaDetailsViewer.setInput(schemasData);
        } else {
            schemaDetailsViewer.setInput(null);
        }
        //
        tree.setRedraw(true);
        updateColumns(tree, colSize);
    }
}

From source file:org.talend.designer.filemultischemas.managers.UIManager.java

License:Open Source License

public static String validSchemaDetailsColumns(final TreeViewer schemaDetailsViewer,
        final MultiMetadataColumn multiMetadataColumn, final EPropertyName property, final Object input) {
    String mess = null;//w w w  .  j a  v  a 2s . c  o m
    if (input != null && input instanceof String) {
        final String value = (String) input;
        final String existedMessage = "The column name have existed.";

        if (isFirstForColumnModel(property)) { // for column model
            IStructuredSelection selection = (IStructuredSelection) schemaDetailsViewer.getSelection();
            if (selection != null) {
                final Object firstElement = selection.getFirstElement();
                if (firstElement != null && firstElement instanceof ColumnLineData) {
                    ColumnLineData lineData = (ColumnLineData) firstElement;
                    for (MultiMetadataColumn column : lineData.getKeyData().getMetadataColumnsInModel()) {
                        if (multiMetadataColumn != column && value.equals(column.getLabel())) {
                            mess = existedMessage;
                            break;
                        }
                    }

                }
            }
        } else {
            final String invalidInput = "Invalid input.";
            switch (property) {
            case NAME: // for property model.
                IStructuredSelection selection = (IStructuredSelection) schemaDetailsViewer.getSelection();
                if (selection != null) {
                    final Object firstElement = selection.getFirstElement();
                    if (firstElement != null && firstElement instanceof MultiMetadataColumn) {
                        MultiMetadataColumn column = (MultiMetadataColumn) firstElement;

                        for (TreeItem item : schemaDetailsViewer.getTree().getItems()) {
                            final Object data = item.getData();
                            if (data != column && data instanceof MultiMetadataColumn) {
                                MultiMetadataColumn other = (MultiMetadataColumn) data;
                                if (value.equals(other.getLabel())) {
                                    mess = existedMessage;
                                    break;
                                }
                            }
                        }

                    }
                }
                if (mess == null && !value.matches(RepositoryConstants.CONTEXT_AND_VARIABLE_PATTERN)) {
                    mess = invalidInput;
                }
                break;
            case LENGTH:
                if (!value.matches(ExternalMultiSchemasUIProperties.NUMBER_PATTERN)) {
                    mess = invalidInput;
                }
                break;
            }
        }
    }
    return mess;
}

From source file:org.talend.designer.filemultischemas.managers.UIManager.java

License:Open Source License

public boolean enableMovedRecord(TreeViewer schemaTreeViewer, boolean left) {
    if (schemaTreeViewer == null) {
        return false;
    }//from   w  ww  .ja v a2 s  . c o m
    ISelection selection = schemaTreeViewer.getSelection();
    if (selection instanceof IStructuredSelection) {
        IStructuredSelection structuredSelection = (IStructuredSelection) selection;
        if (structuredSelection.size() == 1) {
            Object element = structuredSelection.getFirstElement();
            if (element instanceof SchemasKeyData) {
                SchemasKeyData data = (SchemasKeyData) element;
                SchemasKeyData parent = data.getParent();
                int index = parent.getChildren().indexOf(data);
                if (left) {
                    SchemasKeyData grandfather = parent.getParent();
                    if (grandfather == null) { // in root.
                        return false;
                    }
                    if (index != parent.getChildren().size() - 1) { // not the end of children.
                        return false;
                    }
                } else {
                    if (index == 0) { // in first of children.
                        return false;
                    }
                }
                return true;
            }
        }
    }
    return false;
}

From source file:org.talend.designer.filemultischemas.managers.UIManager.java

License:Open Source License

public void moveRecord(TreeViewer schemaTreeViewer, boolean left) {
    if (schemaTreeViewer == null) {
        return;//from w w  w  . j av  a2 s . co m
    }
    ISelection selection = schemaTreeViewer.getSelection();
    if (selection instanceof IStructuredSelection) {
        Object element = ((IStructuredSelection) selection).getFirstElement();
        if (element instanceof SchemasKeyData) {
            SchemasKeyData data = (SchemasKeyData) element;
            SchemasKeyData parent = data.getParent();
            if (left) {
                SchemasKeyData grandfather = parent.getParent();
                if (grandfather != null) { // not in root.
                    List<SchemasKeyData> children = grandfather.getChildren();
                    int index = -1;
                    for (int i = 0; i < children.size(); i++) {
                        if (children.get(i) == parent) {
                            index = i;
                            break;
                        }
                    }
                    if (index > -1) {
                        int index2 = index + 1;
                        if (index2 > children.size()) {
                            grandfather.addChild(data);
                        } else {
                            grandfather.addChild(index2, data);
                        }
                    }
                }
            } else {
                SchemasKeyData sibling = null;
                for (SchemasKeyData skd : parent.getChildren()) {
                    if (skd == data) {
                        break;
                    } else {
                        sibling = skd;
                    }
                }
                if (sibling != null) {
                    sibling.addChild(data);
                }
            }
            schemaTreeViewer.refresh();
        }
    }
}

From source file:org.talend.designer.runtime.visualization.internal.ui.properties.memory.SWTResourcesPage.java

License:Open Source License

/**
 * Refreshes the appearance.//ww  w  . jav a2 s.com
 * 
 * @param force <tt>true</tt> to force refresh
 */
protected void refresh(final boolean force) {
    final boolean isVisible = isVisible();

    new RefreshJob(NLS.bind(Messages.refreshMemorySectionJobLabel, section.getJvm().getPid()), toString()) {

        @Override
        protected void refreshModel(IProgressMonitor monitor) {
            try {
                IActiveJvm jvm = section.getJvm();
                if (isVisible && jvm != null && jvm.isConnected() && (!section.isRefreshSuspended() || force)
                        && jvm.getSWTResourceMonitor().isSupported()) {
                    jvm.getSWTResourceMonitor().refreshResourcesCache();
                }
            } catch (JvmCoreException e) {
                Activator.log(Messages.refreshHeapDataFailedMsg, e);
            }
        }

        @Override
        protected void refreshUI() {
            IActiveJvm jvm = section.getJvm();
            boolean isConnected = jvm != null && jvm.isConnected();

            if (!isDisposed()) {
                refreshBackground();
            }
            refreshAction.setEnabled(isConnected);
            clearSWTResourceAction.setEnabled(isConnected);
            if (!force && section.isRefreshSuspended() || !isVisible) {
                return;
            }

            TreeViewer resourceViewer = resourceFilteredTree.getViewer();
            if (!resourceViewer.getControl().isDisposed()) {
                resourceViewer.refresh();
                if (jvm != null) {
                    resourceFilteredTree.updateStatusLine(jvm.getSWTResourceMonitor().getResources());
                }

                // select the first item if no item is selected
                if (resourceViewer.getSelection().isEmpty()) {
                    TreeItem[] items = resourceViewer.getTree().getItems();
                    if (items != null && items.length > 0) {
                        resourceViewer.getTree().select(items[0]);
                        stackTraceViewer.setInput(resourceViewer.getSelection());
                    } else {
                        stackTraceViewer.setInput(null);
                    }
                }
            }
            if (!stackTraceViewer.getControl().isDisposed()) {
                stackTraceViewer.refresh();
            }
        }
    }.schedule();
}

From source file:org.talend.repository.viewer.filter.PerspectiveFilterHelper.java

License:Open Source License

/**
 * Only activate the view content providers with the extension ID belonging to extensionIdsToActivate array.
 * //from w ww . j  a v a 2  s . c  o  m
 * 
 * @param extensionIdsToActivate
 * @param restoring, used because setting new selection cause renentrance and may create 2 action types when
 * restoring state
 */
protected void refreshNavigatorContents(String[] extensionIdsToActivate, boolean restoring) {
    boolean updateExtensionActivation = false;
    String[] contentExtensionsToActivate = Arrays.copyOf(extensionIdsToActivate, extensionIdsToActivate.length);
    // we sort the array in order to use Array.binarySearch();
    Arrays.sort(contentExtensionsToActivate);

    IStructuredSelection ssel = null;
    TreeViewer commonViewer = getTreeViewer();
    INavigatorContentService contentService = getNavigatorContentService();
    try {

        commonViewer.getControl().setRedraw(false);
        // store the selection
        ISelection selection = commonViewer.getSelection();
        if (selection instanceof IStructuredSelection) {
            ssel = (IStructuredSelection) selection;
        }

        INavigatorContentDescriptor[] visibleContentDescriptors = contentService.getVisibleExtensions();

        int indexofContentExtensionIdToBeActivated;
        /* is there a delta? */
        for (int i = 0; i < visibleContentDescriptors.length && !updateExtensionActivation; i++) {
            indexofContentExtensionIdToBeActivated = Arrays.binarySearch(contentExtensionsToActivate,
                    visibleContentDescriptors[i].getId());
            /*
             * Either we have a filter that should be active that isn't XOR a filter that shouldn't be active that
             * is currently
             */
            if (indexofContentExtensionIdToBeActivated >= 0
                    ^ contentService.isActive(visibleContentDescriptors[i].getId())) {
                updateExtensionActivation = true;
            }
        }

        /* If so, update */
        if (updateExtensionActivation) {

            contentService.getActivationService().activateExtensions(contentExtensionsToActivate, true);
            contentService.getActivationService().persistExtensionActivations();
            // try to keep expanded elements state
            Object[] expandedElements = commonViewer.getExpandedElements();

            contentService.update();
            commonViewer.refresh();
            if (!restoring) {
                Object[] originalObjects = ssel != null ? ssel.toArray() : new Object[0];

                commonViewer.setExpandedElements(expandedElements);
                // restore the selection.
                IStructuredSelection newSelection = new StructuredSelection(originalObjects);
                commonViewer.setSelection(newSelection, true);
            }
        }

    } finally {
        commonViewer.getControl().setRedraw(true);
    }

}

From source file:org.testeditor.ui.handlers.NewTestStructureHandler.java

License:Open Source License

/**
 * Find the selected Element in the Tree. If no tree is available or no
 * Element is selected then return the root Element from the
 * TeststructureService./*ww  w . j  av  a  2 s. c o m*/
 * 
 * @param treeViewer
 *            TestExplorer View from the Workbench.
 * @return the possible Parent for the new teststructure.
 * @throws SystemException
 *             thrown by the TeststructureService.
 */
protected TestStructure findSelectedParent(TreeViewer treeViewer) throws SystemException {
    if (treeViewer == null) {
        return getRootElementFromTestStructureService();
    }
    TreePath[] treePaths = ((ITreeSelection) treeViewer.getSelection()).getPaths();
    if (treePaths.length == 0) {
        return getRootElementFromTestStructureService();
    }
    return (TestStructure) treePaths[0].getLastSegment();
}

From source file:org.thanlwinsoft.doccharconvert.eclipse.editors.ScriptsEditorPart.java

License:Open Source License

private void addCheckerTable(ExpandableComposite parent) {
    //findSyllableCheckers();
    final Tree tree = new Tree(parent, SWT.H_SCROLL | SWT.V_SCROLL);
    tree.setHeaderVisible(true);//from ww  w.  jav a2s .c o m
    final TreeViewer viewer = new TreeViewer(tree);
    final ITreeContentProvider contentProvider = new ITreeContentProvider() {

        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {

        }

        public Object[] getElements(Object inputElement) {
            if (inputElement instanceof Checks) {
                return ((Checks) inputElement).getCheckerArray();
            }
            return null;
        }

        @Override
        public Object[] getChildren(Object parentElement) {
            if (parentElement instanceof Checker) {
                return ((Checker) parentElement).getArgArray();
            }
            return null;
        }

        @Override
        public Object getParent(Object element) {
            Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();
            if (element instanceof Checker) {
                return checks;
            } else if (element instanceof Argument) {
                for (Checker c : checks.getCheckerArray()) {
                    for (Argument a : c.getArgArray()) {
                        if (a == element)
                            return c;
                    }
                }
            }
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            if (element instanceof Argument)
                return false;
            else if (element instanceof Checker && ((Checker) element).sizeOfArgArray() > 0)
                return true;
            else if (element instanceof Checks && ((Checks) element).sizeOfCheckerArray() > 0)
                return true;
            return false;
        }
    };

    viewer.setContentProvider(contentProvider);

    TreeColumn columnA = new TreeColumn(tree, SWT.LEAD);
    columnA.setText(MessageUtil.getString("Type"));
    columnA.setWidth(COL_WIDTH);
    TreeColumn columnB = new TreeColumn(tree, SWT.LEAD);
    columnB.setText(MessageUtil.getString("Value"));
    columnB.setWidth(COL_WIDTH);
    TreeViewerColumn colAViewer = new TreeViewerColumn(viewer, columnA);
    TreeViewerColumn colBViewer = new TreeViewerColumn(viewer, columnB);
    colAViewer.setLabelProvider(new ColumnLabelProvider() {

        @Override
        public String getText(Object element) {
            if (element instanceof Checker) {
                Checker c = (Checker) element;
                if (parentEditor.getCheckerNameMap().containsKey(c.getClass1()))
                    return parentEditor.getCheckerNameMap().get(c.getClass1());
                return c.getClass1();
            }
            if (element instanceof Argument) {
                Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();
                for (Checker c : checks.getCheckerArray()) {
                    for (int i = 0; i < c.sizeOfArgArray(); i++) {
                        if (c.getArgArray(i) == element) {
                            if (parentEditor.getCheckerMap().containsKey(c.getClass1())) {
                                SyllableChecker sc = parentEditor.getCheckerMap().get(c.getClass1());
                                String[] argDesc = sc.getArgumentDescriptions();
                                if (argDesc.length > i)
                                    return argDesc[i];
                                return Integer.toString(i);
                            }
                        }
                    }
                }
            }
            return super.getText(element);
        }

    });
    colBViewer.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            if (element instanceof Argument) {
                Argument arg = (Argument) element;
                StringBuilder value = new StringBuilder();
                NodeList textNodes = arg.getDomNode().getChildNodes();
                for (int i = 0; i < textNodes.getLength(); i++) {
                    value.append(textNodes.item(i).getNodeValue());
                }

                return value.toString();
            }
            return "";
        }
    });
    colBViewer.setEditingSupport(new EditingSupport(viewer) {
        private TextCellEditor textEditor = new TextCellEditor(tree);

        @Override
        protected boolean canEdit(Object element) {
            if (element instanceof Argument)
                return true;
            return false;
        }

        @Override
        protected CellEditor getCellEditor(Object element) {

            return textEditor;
        }

        @Override
        protected Object getValue(Object element) {
            if (element instanceof Argument) {
                Argument arg = (Argument) element;
                StringBuilder value = new StringBuilder();
                NodeList textNodes = arg.getDomNode().getChildNodes();
                for (int i = 0; i < textNodes.getLength(); i++) {
                    value.append(textNodes.item(i).getNodeValue());
                }

                return value.toString();
            }
            return "";
        }

        @Override
        protected void setValue(Object element, Object value) {
            String newValue = value.toString();
            Argument arg = (Argument) element;
            while (arg.getDomNode().hasChildNodes())
                arg.getDomNode().removeChild(arg.getDomNode().getLastChild());
            org.w3c.dom.Text textNode = arg.getDomNode().getOwnerDocument().createTextNode(newValue);
            arg.getDomNode().appendChild(textNode);
            viewer.refresh();
            parentEditor.setDirty(true);
        }
    });
    viewer.setInput(parentEditor.getDocument().getSyllableConverter().getChecks());

    MenuManager menuManager = new MenuManager(
            parentEditor.getPartName() + ":" + this.getPartName() + "Checkers");
    for (String className : parentEditor.getCheckerNameMap().keySet()) {
        final String clazzName = className;
        Action newChecker = new Action() {
            @Override
            public void run() {
                Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();
                if (checks == null)
                    checks = parentEditor.getDocument().getSyllableConverter().addNewChecks();
                Checker checker = checks.addNewChecker();
                checker.setClass1(clazzName);
                SyllableChecker theChecker = parentEditor.getCheckerMap().get(clazzName);
                for (java.lang.Class<?> argType : theChecker.getArgumentTypes()) {
                    if (argType.equals(File.class) || argType.equals(URL.class)) {
                        checker.addNewArg().setType(Type.FILE);
                    } else {
                        checker.addNewArg();
                    }
                }
                viewer.setInput(checks);
                viewer.refresh();
                parentEditor.setDirty(true);
                form.reflow(true);
            }

        };
        newChecker
                .setText(MessageUtil.getString("AddChecker", parentEditor.getCheckerNameMap().get(className)));
        menuManager.add(newChecker);
    }
    Action deleteChecker = new Action() {

        @Override
        public void run() {
            Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();

            ITreeSelection selection = (ITreeSelection) viewer.getSelection();
            Object s = selection.getFirstElement();
            if (s instanceof Argument) {
                s = contentProvider.getParent(s);
            }
            if (s instanceof Checker) {
                Checker c = (Checker) s;
                for (int i = 0; i < checks.sizeOfCheckerArray(); i++) {
                    if (checks.getCheckerArray(i) == c) {
                        checks.removeChecker(i);
                        viewer.refresh();
                        parentEditor.setDirty(true);
                        break;
                    }
                }
            }
        }
    };
    deleteChecker.setText(MessageUtil.getString("DeleteChecker"));
    menuManager.add(deleteChecker);

    Action moveUpAction = new Action() {
        public void run() {
            Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();
            ITreeSelection selection = (ITreeSelection) viewer.getSelection();
            Object s = selection.getFirstElement();
            if (s instanceof Argument) {
                s = contentProvider.getParent(s);
            }
            if (s instanceof Checker) {
                Checker c = (Checker) s;
                int mapIndex = -1;
                for (int i = 0; i < checks.sizeOfCheckerArray(); i++) {
                    if (checks.getCheckerArray(i) == c)
                        mapIndex = i;
                }
                if (mapIndex > 0) {
                    XmlObject toMove = checks.getCheckerArray(mapIndex).copy();
                    checks.removeChecker(mapIndex);
                    Checker moved = checks.insertNewChecker(mapIndex - 1);
                    moved.set(toMove);
                    viewer.refresh();
                    parentEditor.setDirty(true);
                }
            }
        }
    };
    moveUpAction.setId("moveUp");
    moveUpAction.setText(MessageUtil.getString("MoveUp"));
    moveUpAction.setToolTipText(MessageUtil.getString("MoveUpToolTip"));

    Action moveDownAction = new Action() {
        public void run() {
            Checks checks = parentEditor.getDocument().getSyllableConverter().getChecks();
            ITreeSelection selection = (ITreeSelection) viewer.getSelection();
            Object s = selection.getFirstElement();
            if (s instanceof Argument) {
                s = contentProvider.getParent(s);
            }
            if (s instanceof Checker) {
                Checker c = (Checker) s;
                int mapIndex = -1;
                for (int i = 0; i < checks.sizeOfCheckerArray(); i++) {
                    if (checks.getCheckerArray(i) == c)
                        mapIndex = i;
                }
                if (mapIndex > -1 && mapIndex + 1 < checks.sizeOfCheckerArray()) {
                    XmlObject toMove = checks.getCheckerArray(mapIndex).copy();
                    checks.removeChecker(mapIndex);
                    Checker moved = checks.insertNewChecker(mapIndex + 1);
                    moved.set(toMove);

                    viewer.refresh();
                    parentEditor.setDirty(true);
                }
            }
        }
    };
    moveDownAction.setId("moveDown");
    moveDownAction.setText(MessageUtil.getString("MoveDown"));
    moveDownAction.setToolTipText(MessageUtil.getString("MoveDownToolTip"));

    menuManager.add(moveUpAction);
    menuManager.add(moveDownAction);

    toolkit.adapt(tree);
    tree.setMenu(menuManager.createContextMenu(tree));
    parent.setClient(tree);
    viewer.refresh();
}

From source file:org.wso2.developerstudio.appfactory.ui.views.AppfactoryApplicationListView.java

License:Open Source License

public void createPartControl(Composite parent) {
    //  this.parent = parent;
    contentProvider = new AppListContentProvider(appLists);
    labelProvider = new AppListLabelProvider();
    createToolbar();/*from  w ww . j a  va 2s  .c o m*/
    model = new AppListModel();
    viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(contentProvider);
    viewer.setLabelProvider(labelProvider);
    viewer.setInput(model);
    viewer.addSelectionChangedListener(new ISelectionChangedListener() {

        @Override
        public void selectionChanged(SelectionChangedEvent event) {
            try {
                final IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                Object selectedNode = selection.getFirstElement();
                ApplicationInfo appInfo = null;

                if (selectedNode instanceof ApplicationInfo) {
                    appInfo = (ApplicationInfo) selection.getFirstElement();
                } else if (selectedNode instanceof AppVersionGroup) {
                    appInfo = ((AppVersionGroup) selection.getFirstElement()).getApplication();
                } else if (selectedNode instanceof AppVersionInfo) {
                    appInfo = ((AppVersionInfo) selection.getFirstElement()).getVersionGroup().getApplication();
                }
                appDetailView.clear();
                if (!appInfo.getappVersionList().isEmpty()) {
                    appDetailView.updateView(appInfo);
                }
            } catch (Throwable e) {
                /*safe to ignore*/
            }
        }

    });
    viewer.addDoubleClickListener(new IDoubleClickListener() {

        @Override
        public void doubleClick(DoubleClickEvent event) {
            try {
                TreeViewer viewer = (TreeViewer) event.getViewer();
                IStructuredSelection thisSelection = (IStructuredSelection) event.getSelection();
                Object selectedNode = thisSelection.getFirstElement();
                if (selectedNode instanceof AppVersionInfo) {
                    viewer.setExpandedState(selectedNode, !viewer.getExpandedState(selectedNode));
                } else if (selectedNode instanceof AppVersionGroup) {
                    viewer.setExpandedState(selectedNode, !viewer.getExpandedState(selectedNode));
                } else if (selectedNode instanceof ApplicationInfo) {
                    ApplicationInfo appInfo = (ApplicationInfo) selectedNode;
                    if (appInfo.isLoaded()) {
                        viewer.setExpandedState(selectedNode, !viewer.getExpandedState(selectedNode));
                    } else {
                        getAppVersions(appInfo);
                        getDataSources(appInfo);
                    }
                }
            } catch (Throwable e) {
                /*safe to ignore*/
            }
        }
    });

    menuMgr = new MenuManager();
    Menu menu = menuMgr.createContextMenu(viewer.getControl());
    menu.setVisible(true);
    menuMgr.addMenuListener(new IMenuListener() {
        @Override
        public void menuAboutToShow(final IMenuManager manager) {
            try {
                if (viewer.getSelection().isEmpty()) {
                    return;
                }

                if (viewer.getSelection() instanceof IStructuredSelection) {
                    IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
                    if (selection.getFirstElement() instanceof AppVersionInfo) {
                        final AppVersionInfo appVersionInfo = (AppVersionInfo) selection.getFirstElement();

                        manager.add(checkOutAndImportAction(appVersionInfo));
                        manager.add(importAction(appVersionInfo));
                        manager.add(checkOutAction(appVersionInfo));
                        manager.add(buildAction(appVersionInfo));
                        if (!appVersionInfo.isForkedVersion()) {
                            manager.add(repoDeployAction(appVersionInfo));
                        }
                        manager.add(buildInfoAction(appVersionInfo));

                    } else if (selection.getFirstElement() instanceof ApplicationInfo) {
                        ApplicationInfo appInfo = (ApplicationInfo) selection.getFirstElement();
                        String title = ""; //$NON-NLS-1$

                        if (appInfo.getappVersionList().isEmpty()) {
                            title = "Open  "; //$NON-NLS-1$
                        } else {
                            title = "Update"; //$NON-NLS-1$
                        }

                        manager.add(appOpenAction(appInfo, title));
                        manager.add(mainRepoSettingsAction(appInfo));
                        manager.add(forkedRepoSettingsAction(appInfo));
                    } else if (selection.getFirstElement() instanceof AppVersionGroup) {

                        //   AppVersionGroup group = (AppVersionGroup) selection.getFirstElement();
                        // TODO        
                    }
                }
            } catch (Throwable e) {
                /*safe to ignore*/
            }
        }

    });
    menuMgr.setRemoveAllWhenShown(true);
    viewer.getControl().setMenu(menu);
    updateApplicationView();
}