/* * Copyright (c) 2012 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * HUMBOLDT EU Integrated Project #030962 * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.ui.instancevalidation.report; import java.text.MessageFormat; import javax.xml.namespace.QName; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import eu.esdihumboldt.hale.common.instance.extension.validation.report.InstanceValidationMessage; import eu.esdihumboldt.hale.common.schema.model.Definition; import eu.esdihumboldt.hale.ui.common.definition.viewer.DefinitionLabelProvider; /** * Label provider for the instance validation report details page. * * @author Kai Schwierczek */ public class InstanceValidationReportDetailsLabelProvider extends StyledCellLabelProvider implements ILabelProvider { private final InstanceValidationReportDetailsContentProvider contentProvider; private final DefinitionLabelProvider dlp = new DefinitionLabelProvider(null, false, true); /** * Constructor. * * @param contentProvider the content provider */ public InstanceValidationReportDetailsLabelProvider( InstanceValidationReportDetailsContentProvider contentProvider) { this.contentProvider = contentProvider; } /** * @see org.eclipse.jface.viewers.StyledCellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell) */ @Override public void update(ViewerCell cell) { Object element = cell.getElement(); String label = getText(element); int newLine = label.indexOf('\n'); if (newLine > -1) label = label.substring(0, newLine) + " ..."; StyledString text = new StyledString(label); if (!(element instanceof InstanceValidationMessage)) { TreePath treePath = cell.getViewerRow().getTreePath(); boolean isLimited = contentProvider.isLimited(treePath); text.append(' '); if (!isLimited) text.append( MessageFormat.format("({0} warnings)", contentProvider.getMessageCount(treePath)), StyledString.COUNTER_STYLER); else text.append(MessageFormat.format("(showing {0} of {1})", InstanceValidationReportDetailsContentProvider.LIMIT, contentProvider.getMessageCount(treePath)), StyledString.COUNTER_STYLER); } cell.setText(text.getString()); cell.setStyleRanges(text.getStyleRanges()); cell.setImage(getImage(element)); super.update(cell); } /** * @see org.eclipse.jface.viewers.StyledCellLabelProvider#dispose() */ @Override public void dispose() { dlp.dispose(); super.dispose(); } /** * @see org.eclipse.jface.viewers.CellLabelProvider#getToolTipText(java.lang.Object) */ @Override public String getToolTipText(Object element) { if (element instanceof InstanceValidationMessage) { String message = ((InstanceValidationMessage) element).getMessage(); if (message.indexOf('\n') > -1) return message; } return super.getToolTipText(element); } /** * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) */ @Override public Image getImage(Object element) { if (element instanceof Definition<?>) return dlp.getImage(element); else if (element instanceof String) return PlatformUI.getWorkbench().getSharedImages() .getImage(ISharedImages.IMG_OBJS_WARN_TSK); else return null; } /** * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) */ @Override public String getText(Object element) { if (element instanceof QName) return ((QName) element).getLocalPart(); // path else if (element instanceof Definition<?>) return dlp.getText(element); // path alternative else if (element instanceof String) return (String) element; // category else if (element instanceof InstanceValidationMessage) return ((InstanceValidationMessage) element).getMessage(); // message else return String.valueOf(element); // shouldn't happen } }