blob: 9cd83aa7d6bb8af5f39b25f835ef0afc939dfe86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 GitHub Inc.
* 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:
* Kevin Sawicki (GitHub Inc.) - initial API and implementation
* Thomas Wolf <thomas.wolf@paranor.ch>- Bug 477248
*******************************************************************************/
package org.eclipse.egit.ui.internal.search;
import java.text.MessageFormat;
import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.egit.ui.Activator;
import org.eclipse.egit.ui.UIPreferences;
import org.eclipse.egit.ui.internal.PreferenceBasedDateFormatter;
import org.eclipse.egit.ui.internal.UIText;
import org.eclipse.egit.ui.internal.commit.RepositoryCommit;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jgit.lib.PersonIdent;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* Commit search results label provider class.
*/
public class CommitResultLabelProvider extends WorkbenchLabelProvider {
private int layout;
private final IPropertyChangeListener uiPrefsListener;
private final AtomicReference<PreferenceBasedDateFormatter> dateFormatter = new AtomicReference<>();
/**
* Create commit result label provider
*
* @param layout
*/
public CommitResultLabelProvider(int layout) {
this.layout = layout;
dateFormatter.set(PreferenceBasedDateFormatter.create());
uiPrefsListener = new IPropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
String property = event.getProperty();
if (UIPreferences.DATE_FORMAT.equals(property)
|| UIPreferences.DATE_FORMAT_CHOICE.equals(property)) {
dateFormatter.set(PreferenceBasedDateFormatter.create());
fireLabelProviderChanged(new LabelProviderChangedEvent(
CommitResultLabelProvider.this));
}
}
};
Activator.getDefault().getPreferenceStore()
.addPropertyChangeListener(uiPrefsListener);
}
/**
* @see org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider#getStyledText(java.lang.Object)
*/
@Override
public StyledString getStyledText(Object element) {
StyledString styled = new StyledString();
if (element instanceof RepositoryCommit) {
RepositoryCommit commit = (RepositoryCommit) element;
RevCommit revCommit = commit.getRevCommit();
styled.append(MessageFormat.format(
UIText.CommitResultLabelProvider_SectionMessage,
commit.abbreviate(), revCommit.getShortMessage()));
PersonIdent author = revCommit.getAuthorIdent();
if (author != null)
styled.append(MessageFormat.format(
UIText.CommitResultLabelProvider_SectionAuthor,
author.getName(),
dateFormatter.get().formatDate(author)),
StyledString.QUALIFIER_STYLER);
if (layout == AbstractTextSearchViewPage.FLAG_LAYOUT_FLAT)
styled.append(MessageFormat.format(
UIText.CommitResultLabelProvider_SectionRepository,
commit.getRepositoryName()),
StyledString.DECORATIONS_STYLER);
} else if (element instanceof RepositoryMatch) {
RepositoryMatch repository = (RepositoryMatch) element;
styled.append(repository.getLabel(repository));
styled.append(" - ", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
styled.append(repository.getRepository().getDirectory()
.getAbsolutePath(), StyledString.QUALIFIER_STYLER);
styled.append(MessageFormat.format(" ({0})", //$NON-NLS-1$
Integer.valueOf(repository.getMatchCount())),
StyledString.COUNTER_STYLER);
}
return styled;
}
@Override
public void dispose() {
Activator.getDefault().getPreferenceStore()
.removePropertyChangeListener(uiPrefsListener);
super.dispose();
}
}