com.sap.dirigible.ide.repository.ui.view.ResourceHistoryView.java Source code

Java tutorial

Introduction

Here is the source code for com.sap.dirigible.ide.repository.ui.view.ResourceHistoryView.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.repository.ui.view;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;

import org.eclipse.jface.action.Action;
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.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.sap.dirigible.ide.editor.text.input.ContentEditorInput;
import com.sap.dirigible.ide.repository.ui.command.OpenHandler;
import com.sap.dirigible.repository.api.IResource;
import com.sap.dirigible.repository.api.IResourceVersion;

public class ResourceHistoryView extends ViewPart {

    private static final String RESOURCE_HISTORY = Messages.ResourceHistoryView_RESOURCE_HISTORY;

    private static final String CREATED_BY = Messages.ResourceHistoryView_CREATED_BY;

    private static final String CREATED_AT = Messages.ResourceHistoryView_CREATED_AT;

    private static final String VERSION = Messages.ResourceHistoryView_VERSION;

    public static final Logger logger = LoggerFactory.getLogger(ResourceHistoryView.class);

    public static final String ID = "com.sap.dirigible.ide.repository.ui.view.ResourceHistoryView"; //$NON-NLS-1$

    private TreeViewer viewer;
    private Action doubleClickAction;

    private IResource selectedResource = null;

    private final ISelectionListener selectionListener = new SelectionListenerImpl();

    class ViewContentProvider implements ITreeContentProvider {
        private static final long serialVersionUID = -2635382675151862078L;

        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
            //
        }

        public void dispose() {
            //
        }

        public Object[] getElements(Object parent) {
            if (selectedResource != null) {
                List<IResourceVersion> resourceVersions;
                String error = null;
                try {
                    resourceVersions = selectedResource.getResourceVersions();
                    return resourceVersions.toArray(new IResourceVersion[] {});
                } catch (IOException e) {
                    error = e.getMessage();
                    logger.error(e.getMessage(), e);
                }
                return new String[] { error };
                // List<IResource> resources = new ArrayList<IResource>();
                // resources.add(selectedResource);
                // return resources.toArray(new IResource[]{});
            } else {
                return new IResourceVersion[] {};
                // return new IResource[]{};
            }
        }

        @Override
        public Object[] getChildren(Object parentElement) {
            return null;
        }

        @Override
        public Object getParent(Object element) {
            return null;
        }

        @Override
        public boolean hasChildren(Object element) {
            return false;
        }
    }

    class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
        /**
         * 
         */
        private static final long serialVersionUID = -9141488769336871391L;

        @Override
        public String getColumnText(Object obj, int index) {
            if (obj instanceof IResourceVersion) {
                IResourceVersion resourceVersion = (IResourceVersion) obj;
                switch (index) {
                case 0:
                    return resourceVersion.getVersion() + ""; //$NON-NLS-1$
                case 1:
                    return new SimpleDateFormat("yyyy-MM-dd HH-mm-ss").format(resourceVersion.getCreatedAt()); //$NON-NLS-1$
                case 2:
                    return resourceVersion.getCreatedBy();
                default:
                    break;
                }
            }
            return getText(obj);
        }

        @Override
        public Image getColumnImage(Object element, int columnIndex) {
            return null;
        }
    }

    class VersionSorter extends ViewerSorter {
        /**
         * 
         */
        private static final long serialVersionUID = 3859467470664110687L;

        @Override
        public int compare(Viewer viewer, Object e1, Object e2) {
            if (e1 == null || e2 == null) {
                return 0;
            }
            if (e1 instanceof IResourceVersion || e2 instanceof IResourceVersion) {
                return ((IResourceVersion) e2).getVersion() - ((IResourceVersion) e1).getVersion();
            }
            return 0;
        }
    }

    /**
     * The constructor.
     */
    public ResourceHistoryView() {
    }

    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    public void createPartControl(Composite parent) {
        viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
        viewer.setContentProvider(new ViewContentProvider());
        viewer.setLabelProvider(new ViewLabelProvider());
        viewer.setSorter(new VersionSorter());
        Tree tree = viewer.getTree();
        tree.setHeaderVisible(true);
        createTreeHeader(tree);
        viewer.setInput(getViewSite());
        makeActions();
        hookDoubleClickAction();
    }

    private void createTreeHeader(Tree tree) {
        TreeColumn column = new TreeColumn(tree, SWT.LEFT);
        column.setText(VERSION);
        column.setWidth(70);
        column = new TreeColumn(tree, SWT.LEFT);
        column.setText(CREATED_AT);
        column.setWidth(250);
        column = new TreeColumn(tree, SWT.LEFT);
        column.setText(CREATED_BY);
        column.setWidth(300);
    }

    private void makeActions() {
        doubleClickAction = new Action() {
            /**
             * 
             */
            private static final long serialVersionUID = 7611215993365020899L;

            public void run() {
                ISelection selection = viewer.getSelection();
                Object obj = ((IStructuredSelection) selection).getFirstElement();
                if (obj instanceof IResourceVersion) {
                    openEditorForResource((IResourceVersion) obj);
                }
            }
        };
    }

    private boolean openEditorForResource(IResourceVersion file) {
        String editorId = OpenHandler.TEXT_EDITOR_ID;
        IEditorInput input;
        try {
            input = new ContentEditorInput(file.getVersion() + "", file.getPath(), file.getContent()); //$NON-NLS-1$
            return openEditor(editorId, input);
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
            showMessage(e.getMessage());
        }
        return false;
    }

    private static boolean openEditor(String id, IEditorInput input) {
        IWorkbench workbench = PlatformUI.getWorkbench();
        IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
        IWorkbenchPage page = window.getActivePage();
        try {
            page.openEditor(input, id);
            return true;
        } catch (PartInitException e) {
            logger.error(e.getMessage(), e);
            return false;
        }
    }

    private void hookDoubleClickAction() {
        viewer.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                doubleClickAction.run();
            }
        });
    }

    public void showMessage(String message) {
        logger.error(message);
        MessageDialog.openError(viewer.getControl().getShell(), RESOURCE_HISTORY, message);
    }

    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        viewer.getControl().setFocus();
    }

    private void handleElementSelected(Object element) {

        if (element instanceof IResource) {
            IResource resource = (IResource) element;
            this.selectedResource = resource;
            this.viewer.refresh();
        }

    }

    private class SelectionListenerImpl implements ISelectionListener {

        public void selectionChanged(IWorkbenchPart part, ISelection selection) {
            if (selection instanceof IStructuredSelection) {
                selectionChanged((IStructuredSelection) selection);
            }
        }

        private void selectionChanged(IStructuredSelection selection) {
            Object element = selection.getFirstElement();
            if (element != null) {
                handleElementSelected(element);
            }
        }

    }

    private void attachSelectionListener(IWorkbenchPartSite site) {
        if (site == null) {
            return;
        }
        final ISelectionService selectionService = getSelectionService(site);
        if (selectionService != null) {
            selectionService.addSelectionListener(selectionListener);
        }
    }

    private void detachSelectionListener(IWorkbenchPartSite site) {
        if (site == null) {
            return;
        }
        final ISelectionService selectionService = getSelectionService(site);
        if (selectionService != null) {
            selectionService.removeSelectionListener(selectionListener);
        }
    }

    private ISelectionService getSelectionService(IWorkbenchPartSite site) {
        final IWorkbenchWindow window = site.getWorkbenchWindow();
        if (window == null) {
            return null;
        }
        return window.getSelectionService();
    }

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

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