Java tutorial
/*************************************************************************** * 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; } }