com.sap.dirigible.ide.workspace.ui.view.WorkspaceExplorerView.java Source code

Java tutorial

Introduction

Here is the source code for com.sap.dirigible.ide.workspace.ui.view.WorkspaceExplorerView.java

Source

/*******************************************************************************
 * Copyright (c) 2014 SAP AG or an SAP affiliate company. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License. 
 *******************************************************************************/

package com.sap.dirigible.ide.workspace.ui.view;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.commands.ICommandService;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;

import com.sap.dirigible.ide.common.CommonParameters;
import com.sap.dirigible.ide.logging.Logger;
import com.sap.dirigible.ide.repository.ui.view.IRefreshableView;
import com.sap.dirigible.ide.workspace.RemoteResourcesPlugin;
import com.sap.dirigible.ide.workspace.ui.commands.AbstractWorkspaceHandler;
import com.sap.dirigible.ide.workspace.ui.viewer.WorkspaceViewer;
import com.sap.dirigible.ide.workspace.ui.viewer.WorkspaceViewerUtils;

public class WorkspaceExplorerView extends ViewPart implements IRefreshableView {

    public static final String VIEW_ID = "com.sap.dirigible.ide.workspace.ui.view.WorkspaceExplorerView";

    private static final String CHECK_LOGS_FOR_MORE_INFO = Messages.WorkspaceExplorerView_CHECK_LOGS_FOR_MORE_INFO;

    private static final String COULD_NOT_EXECUTE_OPEN_COMMAND_DUE_TO_THE_FOLLOWING_ERROR = Messages.WorkspaceExplorerView_COULD_NOT_EXECUTE_OPEN_COMMAND_DUE_TO_THE_FOLLOWING_ERROR;

    private static final String OPERATION_FAILED = Messages.WorkspaceExplorerView_OPERATION_FAILED;

    private static final String COULD_NOT_EXECUTE_OPEN_COMMAND = Messages.WorkspaceExplorerView_COULD_NOT_EXECUTE_OPEN_COMMAND;

    private static final Logger logger = Logger.getLogger(WorkspaceExplorerView.class);

    private static final String OPEN_COMMAND_ID = "com.sap.dirigible.ide.workspace.ui.commands.OpenHandler"; //$NON-NLS-1$

    private WorkspaceViewer viewer = null;

    public void createPartControl(Composite parent) {
        parent.setLayout(new GridLayout());
        ToolBarMenuViewProvider.createToolBarMenu(parent, getSite().getShell());

        viewer = new WorkspaceViewer(parent, SWT.MULTI);
        viewer.getViewer().addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                onWorkspaceViewerDoubleClicked(event);
            }
        });
        getSite().setSelectionProvider(viewer.getSelectionProvider());
        getSite().registerContextMenu("com.sap.dirigible.ide.workspace.ui.view.Menu", //$NON-NLS-1$
                viewer.getMenuManager(), viewer.getSelectionProvider());

        setSelectedProjectFromRequest();

    }

    @Override
    public void init(IViewSite site) throws PartInitException {
        super.init(site);
        AbstractWorkspaceHandler.attachSelectionListener(site);
    }

    @Override
    public void dispose() {
        AbstractWorkspaceHandler.detachSelectionListener(getSite());
        super.dispose();
    }

    private void setSelectedProjectFromRequest() {
        try {
            String projectName = RWT.getRequest().getParameter(CommonParameters.PARAMETER_PROJECT);
            if (projectName != null) {
                List<Object> selected = new ArrayList<Object>();
                TreeItem[] treeItems = viewer.getViewer().getTree().getItems();
                for (int i = 0; i < treeItems.length; i++) {
                    TreeItem treeItem = treeItems[i];
                    Object treeObject = treeItem.getData();
                    if (treeObject instanceof IProject) {
                        if (projectName.equals(((IProject) treeObject).getName())) {
                            selected.add(treeObject);
                            break;
                        }
                    }
                }

                viewer.getViewer().setExpandedElements(selected.toArray(new Object[] {}));
            }
        } catch (Exception e) {
            // do nothing - just usability feature, which should not bother user
            // when breaks
        }
    }

    private void onWorkspaceViewerDoubleClicked(DoubleClickEvent event) {
        ICommandService commandService = (ICommandService) getSite().getService(ICommandService.class);
        IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
        Command command = commandService.getCommand(OPEN_COMMAND_ID);
        ExecutionEvent executionEvent = handlerService.createExecutionEvent(command, null);
        try {
            command.executeWithChecks(executionEvent);
        } catch (Exception ex) {
            logger.error(COULD_NOT_EXECUTE_OPEN_COMMAND, ex);
            MessageDialog.openError(null, OPERATION_FAILED,
                    COULD_NOT_EXECUTE_OPEN_COMMAND_DUE_TO_THE_FOLLOWING_ERROR + ex.getMessage()
                            + CHECK_LOGS_FOR_MORE_INFO);
        }
        ISelection selection = event.getSelection();
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection structuredSelection = (IStructuredSelection) selection;
            for (Object element : structuredSelection.toArray()) {
                if (element instanceof IFolder || element instanceof IProject) {
                    WorkspaceViewerUtils.doubleClickedElement(element);
                }
            }
        }
    }

    /**
     * {@inheritDoc}
     */
    public void setFocus() {
        viewer.setFocus();
    }

    /**
     * {@inheritDoc}
     */
    public void refresh() {
        viewer.refresh();
    }

    public WorkspaceViewer getViewer() {
        return viewer;
    }

    @SuppressWarnings("rawtypes")
    @Override
    public Object getAdapter(Class adapter) {
        if (IRefreshableView.class.equals(adapter)) {
            return this;
        }
        return super.getAdapter(adapter);
    }

    protected IWorkspace getWorkspace() {
        return RemoteResourcesPlugin.getWorkspace();
    }

}