Package org.eclipse.egit.ui.internal.synchronize.mapping

Source Code of org.eclipse.egit.ui.internal.synchronize.mapping.GitChangeSetLabelProvider

/*******************************************************************************
* Copyright (C) 2010, Dariusz Luksza <dariusz@luksza.org>
* Copyright (C) 2012, Daniel Megert <daniel_megert@ch.ibm.com>
*
* 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
*******************************************************************************/
package org.eclipse.egit.ui.internal.synchronize.mapping;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.egit.core.synchronize.GitCommitsModelCache.Commit;
import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.internal.GitLabelProvider;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.synchronize.GitChangeSetModelProvider;
import org.eclipse.egit.ui.internal.synchronize.model.GitModelCommit;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jgit.lib.AbbreviatedObjectId;
import org.eclipse.team.ui.mapping.SynchronizationLabelProvider;

/**
* Label provider for Git ChangeSet model.
*/
public class GitChangeSetLabelProvider extends SynchronizationLabelProvider implements IStyledLabelProvider {

  /** */
  public static final String BINDING_CHANGESET_SHORT_MESSAGE = "{short_message}"; //$NON-NLS-1$

  /** */
  public static final String BINDING_CHANGESET_COMMITTER = "{committer}"; //$NON-NLS-1$

  /** */
  public static final String BINDING_CHANGESET_AUTHOR = "{author}"; //$NON-NLS-1$

  /** */
  public static final String BINDING_CHANGESET_DATE = "{date}"; //$NON-NLS-1$


  private IPreferenceStore store = org.eclipse.egit.ui.Activator.getDefault().getPreferenceStore();

  private final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat(
      store.getString(UIPreferences.DATE_FORMAT));

  private GitLabelProvider delegateLabelProvider;

  @Override
  protected GitLabelProvider getDelegateLabelProvider() {
    if (delegateLabelProvider == null)
      delegateLabelProvider = new GitLabelProvider();

    return delegateLabelProvider;
  }

  public StyledString getStyledText(Object element) {
    // need to compare classes as everything is 'instanceof GitModelCommit'
    if (element.getClass().equals(GitModelCommit.class)) {
      String formattedName = createChangeSetLabel((GitModelCommit) element);
      StyledString string = new StyledString(formattedName);
      GitModelCommit commit = (GitModelCommit) element;
      String format = " [" + getAbbreviatedId(commit) + "]"; //$NON-NLS-1$//$NON-NLS-2$
      string.append(format, StyledString.DECORATIONS_STYLER);
      return string;
    }

    if (element instanceof GitChangeSetModelProvider)
      return new StyledString(UIText.GitChangeSetModelProviderLabel);

    return getDelegateLabelProvider().getStyledText(element);
  }

  private String createChangeSetLabel(GitModelCommit commitModel) {
    String format = store.getString(UIPreferences.SYNC_VIEW_CHANGESET_LABEL_FORMAT);

    Commit commit = commitModel.getCachedCommitObj();
    Map<String, String> bindings = new HashMap<String, String>();
    bindings.put(BINDING_CHANGESET_DATE, DATE_FORMAT.format(commit.getCommitDate()));
    bindings.put(BINDING_CHANGESET_AUTHOR, commit.getAuthorName());
    bindings.put(BINDING_CHANGESET_COMMITTER, commit.getCommitterName());
    bindings.put(BINDING_CHANGESET_SHORT_MESSAGE, commit.getShortMessage());

    return formatName(format, bindings);
  }

  /**
   * @param format
   * @param bindings
   * @return formatted commit name
   */
  public static String formatName(final String format, Map<String, String> bindings) {
    String result = format;
    for (Entry<String, String> e : bindings.entrySet()) {
      result = result.replace(e.getKey(), e.getValue());
    }
    return result;
  }

  private String getAbbreviatedId(GitModelCommit commit) {
    AbbreviatedObjectId shortId = commit.getCachedCommitObj().getId();

    return shortId.name().substring(0, 6);
  }

}
TOP

Related Classes of org.eclipse.egit.ui.internal.synchronize.mapping.GitChangeSetLabelProvider

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.