Package org.eclipse.ecf.sync.resources.views

Source Code of org.eclipse.ecf.sync.resources.views.RemoteResourcesView$ViewContentProvider

/*******************************************************************************
* Copyright (c) 2009 Remy Chi Jian Suen and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Remy Chi Jian Suen <remy.suen@gmail.com> - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.sync.resources.views;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.eclipse.compare.CompareConfiguration;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.ecf.internal.sync.resources.core.BatchModelChange;
import org.eclipse.ecf.internal.sync.resources.core.IView;
import org.eclipse.ecf.internal.sync.resources.core.ResourceChangeMessage;
import org.eclipse.ecf.internal.sync.resources.core.SyncResourcesCore;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.team.core.synchronize.SyncInfo;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.ViewPart;

public class RemoteResourcesView extends ViewPart implements IView {

  public static final String ID = "org.eclipse.ecf.sync.resources.core.views.RemoteResourcesView";

  private TreeViewer viewer;
 
  private ILabelProvider labelProvider;

  public void createPartControl(Composite parent) {
    viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
    viewer.setContentProvider(new ViewContentProvider());
    viewer.setComparator(new ViewerComparator() {
      public int compare(Viewer viewer, Object e1, Object e2) {
        if (e1 instanceof BatchModelChange) {
          BatchModelChange c1 = (BatchModelChange) e1;
          BatchModelChange c2 = (BatchModelChange) e2;

          // newest goes last
          return (int) (c2.getTime() - c1.getTime());
        }
        // no sorting for resource changes
        return 0;
      }
    });

    viewer.getTree().setHeaderVisible(true);
    viewer.getTree().setLinesVisible(true);

    labelProvider = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider();
    final SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); //$NON-NLS-1$
    final CompareConfiguration config = new CompareConfiguration();

    TreeViewerColumn resourceColumn = new TreeViewerColumn(viewer, SWT.LEAD);
    resourceColumn.getColumn().setText("Changes");
    resourceColumn.getColumn().setWidth(100);
    resourceColumn.setLabelProvider(new ColumnLabelProvider() {
      public String getText(Object element) {
        if (element instanceof BatchModelChange) {
          StringBuffer buffer = new StringBuffer();
          BatchModelChange batchChange = (BatchModelChange) element;
          buffer.append(batchChange.isOutgoing() ? "Outgoing"
              : "Incoming");
          buffer.append(" (");
          buffer.append(formatter.format(new Date(batchChange
              .getTime())));
          buffer.append(')');
          return buffer.toString();
        } else {
          return new Path(((ResourceChangeMessage) element).getPath())
              .lastSegment();
        }
      }

      public Image getImage(Object element) {
        if (element instanceof BatchModelChange) {
          Image image = PlatformUI.getWorkbench().getSharedImages()
              .getImage(ISharedImages.IMG_OBJ_FOLDER);
          int kind = 0;
          if (((BatchModelChange) element).isOutgoing()) {
            kind = (kind & ~SyncInfo.OUTGOING)
                | SyncInfo.INCOMING | SyncInfo.CHANGE;
          } else {
            kind = (kind & ~SyncInfo.OUTGOING)
                | SyncInfo.OUTGOING | SyncInfo.CHANGE;
          }
          return config.getImage(image, kind);
        } else {
          ResourceChangeMessage message = (ResourceChangeMessage) element;
          int type = message.getType();
          IPath path = new Path(message.getPath());

          Image image = null;
          if (type == IResource.FILE) {
            image = labelProvider.getImage(ResourcesPlugin
                .getWorkspace().getRoot().getFile(path));
          } else {
            image = labelProvider.getImage(ResourcesPlugin
                .getWorkspace().getRoot().getFolder(path));
          }

          if (message.isConflicted()) {
            return config.getImage(image, SyncInfo.CHANGE
                | SyncInfo.CONFLICTING);
          }

          int imageKind = 0;
          switch (message.getKind()) {
          case IResourceDelta.ADDED:
            imageKind = (imageKind & ~SyncInfo.CHANGE)
                | SyncInfo.DELETION;
            break;
          case IResourceDelta.CHANGED:
            imageKind = (imageKind & ~SyncInfo.CHANGE)
                | SyncInfo.CHANGE;
            break;
          case IResourceDelta.REMOVED:
            imageKind = (imageKind & ~SyncInfo.CHANGE)
                | SyncInfo.ADDITION;
            break;
          default:
            return null;
          }
          return config.getImage(image, imageKind);
        }
      }
    });

    TreeViewerColumn pathColumn = new TreeViewerColumn(viewer, SWT.LEAD);
    pathColumn.getColumn().setText("Path");
    pathColumn.getColumn().setWidth(200);
    pathColumn.setLabelProvider(new ColumnLabelProvider() {
      public String getText(Object element) {
        if (element instanceof BatchModelChange) {
          return null;
        } else {
          return ((ResourceChangeMessage) element).getPath();
        }
      }
    });

    TreeViewerColumn typeColumn = new TreeViewerColumn(viewer, SWT.LEAD);
    typeColumn.getColumn().setText("Type");
    typeColumn.getColumn().setWidth(75);
    typeColumn.setLabelProvider(new ColumnLabelProvider() {
      public String getText(Object element) {
        if (element instanceof BatchModelChange) {
          return null;
        } else {
          switch (((ResourceChangeMessage) element).getKind()) {
          case IResourceDelta.ADDED:
            return "Added";
          case IResourceDelta.CHANGED:
            return "Changed";
          case IResourceDelta.REMOVED:
            return "Removed";
          default:
            return null;
          }
        }
      }
    });

    TreeViewerColumn resolutionColumn = new TreeViewerColumn(viewer,
        SWT.LEAD);
    resolutionColumn.getColumn().setText("Resolution");
    resolutionColumn.getColumn().setWidth(100);
    resolutionColumn.setLabelProvider(new ColumnLabelProvider() {
      public String getText(Object element) {
        if (element instanceof BatchModelChange) {
          return null;
        } else {
          return ((ResourceChangeMessage) element).isIgnored() ? "Ignored"
              : "Committed";
        }
      }
    });

    SyncResourcesCore.setView(this);
  }

  public void dispose() {
    if (labelProvider != null) {
      labelProvider.dispose();
      labelProvider = null;
    }
    SyncResourcesCore.setView(null);
    super.dispose();
  }

  public void setInput(Object input) {
    viewer.setInput(input);
    viewer.expandToLevel(2);
  }

  public void add(final Object object) {
    final Control control = viewer.getControl();
    if (!control.isDisposed()) {
      control.getDisplay().asyncExec(new Runnable() {
        public void run() {
          if (!control.isDisposed()) {
            viewer.add(viewer.getInput(), object);
            viewer.expandToLevel(object, 2);
          }
        }
      });
    }
  }

  public void remove(final Object object) {
    final Control control = viewer.getControl();
    if (!control.isDisposed()) {
      control.getDisplay().asyncExec(new Runnable() {
        public void run() {
          if (!control.isDisposed()) {
            viewer.remove(object);
          }
        }
      });
    }
  }

  public void setFocus() {
    viewer.getControl().setFocus();
  }

  static class ViewContentProvider extends ArrayContentProvider implements ITreeContentProvider {

    public Object[] getChildren(Object parentElement) {
      return ((BatchModelChange) parentElement).getMessages();
    }

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

    public boolean hasChildren(Object element) {
      return element instanceof BatchModelChange;
    }

  }
}
TOP

Related Classes of org.eclipse.ecf.sync.resources.views.RemoteResourcesView$ViewContentProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.