Skip to main content
aboutsummaryrefslogblamecommitdiffstats
blob: 3cabe65ed625f7bc893edc24ecf644c19981c070 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                                                            
                               

                                   
                                                       
                                                 
 


                                                      

                                         

                                        



                                                                    





                                                
 

                               




                                                                                                          







                                                                                                                        









                                                                                       

                         




                                                                                         
                                                   









                                                                                   



















                               

























                                                              





                                                       

                                                             
                                                                          




































                                                                
                    








                                   



















                                                                                                  
 
/***************************************************************************
 * Copyright (c) 2004 - 2008 Eike Stepper, Germany.
 * 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:
 *    Eike Stepper - initial API and implementation
 **************************************************************************/
package org.eclipse.emf.cdo.ui;

import org.eclipse.emf.cdo.CDOView;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.internal.ui.bundle.OM;

import org.eclipse.emf.internal.cdo.InternalCDOObject;
import org.eclipse.emf.internal.cdo.util.FSMUtil;

import org.eclipse.net4j.util.ObjectUtil;
import org.eclipse.net4j.util.StringUtil;
import org.eclipse.net4j.util.ui.UIUtil;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;

import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;

import java.text.MessageFormat;

/**
 * @author Eike Stepper
 */
public class CDOLabelProvider extends AdapterFactoryLabelProvider implements IColorProvider, IFontProvider
{
  public static final String[] DECORATION_PROPOSALS = { "${element}", "${id}", "${state}", "${created}", "${revised}" };

  public static final String DEFAULT_DECORATION = DECORATION_PROPOSALS[0] + " [" + DECORATION_PROPOSALS[1] + "]";

  public static final String NO_DECORATION = DECORATION_PROPOSALS[0];

  private static final String[] DECORATION_ARGS = { "{0}", "{1}", "{2}", "{3,date} {3,time}", "{4,date} {4,time}" };

  private static final Color GRAY = UIUtil.getDisplay().getSystemColor(SWT.COLOR_GRAY);

  private static final Color RED = UIUtil.getDisplay().getSystemColor(SWT.COLOR_RED);

  private Font bold;

  private CDOView view;

  private TreeViewer viewer;

  private String pattern;

  public CDOLabelProvider(AdapterFactory adapterFactory, CDOView view, TreeViewer viewer)
  {
    super(adapterFactory);
    this.view = view;
    this.viewer = viewer;
    bold = UIUtil.getBoldFont(viewer.getControl());

    pattern = OM.PREF_LABEL_DECORATION.getValue();
    if (ObjectUtil.equals(pattern, NO_DECORATION))
    {
      pattern = null;
    }
    else
    {
      pattern = StringUtil.replace(pattern, DECORATION_PROPOSALS, DECORATION_ARGS);
    }
  }

  public CDOView getView()
  {
    return view;
  }

  public TreeViewer getViewer()
  {
    return viewer;
  }

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

  @Override
  public void notifyChanged(final Notification notification)
  {
    super.notifyChanged(notification);

    try
    {
      viewer.getControl().getDisplay().syncExec(new Runnable()
      {
        public void run()
        {
          try
          {
            viewer.refresh(notification.getNotifier(), true);
          }
          catch (Exception ignore)
          {
          }
        }
      });
    }
    catch (Exception ignore)
    {
    }
  }

  @Override
  public String getText(Object object)
  {
    return decorateText(super.getText(object), object);
  }

  @Override
  public String getColumnText(Object object, int columnIndex)
  {
    return decorateText(super.getColumnText(object, columnIndex), object);
  }

  public Color getBackground(Object object)
  {
    return null;
  }

  public Color getForeground(Object object)
  {
    try
    {
      InternalCDOObject cdoObject = FSMUtil.adapt(object, view);
      switch (cdoObject.cdoState())
      {
      case PROXY:
        return GRAY;

      case CONFLICT:
        return RED;
      }
    }
    catch (RuntimeException ignore)
    {
    }

    return null;
  }

  public Font getFont(Object object)
  {
    try
    {
      InternalCDOObject cdoObject = FSMUtil.adapt(object, view);
      switch (cdoObject.cdoState())
      {
      case NEW:
      case DIRTY:
      case CONFLICT:
        return bold;
      }
    }
    catch (RuntimeException ignore)
    {
    }

    return null;
  }

  protected String decorateText(String text, Object object)
  {
    try
    {
      if (pattern != null)
      {
        InternalCDOObject obj = FSMUtil.adapt(object, view);
        CDORevision rev = obj.cdoRevision();
        long created = rev == null ? CDORevision.UNSPECIFIED_DATE : rev.getCreated();
        long revised = rev == null ? CDORevision.UNSPECIFIED_DATE : rev.getRevised();
        text = MessageFormat.format(pattern, text, obj.cdoID(), obj.cdoState(), created, revised);
      }
    }
    catch (RuntimeException ignore)
    {
    }

    return text;
  }
}

Back to the top