/******************************************************************************* * Copyright (c) 2007, 2013 Red Hat, 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: * Red Hat - initial API and implementation *******************************************************************************/ package org.eclipse.linuxtools.internal.rpm.ui.editor.outline; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.linuxtools.internal.rpm.ui.editor.Activator; import org.eclipse.linuxtools.internal.rpm.ui.editor.parser.SpecfilePreamble; import org.eclipse.linuxtools.rpm.ui.editor.parser.Specfile; import org.eclipse.linuxtools.rpm.ui.editor.parser.SpecfileElement; import org.eclipse.linuxtools.rpm.ui.editor.parser.SpecfilePackage; import org.eclipse.linuxtools.rpm.ui.editor.parser.SpecfilePackageContainer; import org.eclipse.linuxtools.rpm.ui.editor.parser.SpecfileSection; import org.eclipse.swt.graphics.Image; public class SpecfileLabelProvider extends LabelProvider { private static final String PREAMBLE_ICON="icons/preamble_obj.gif"; //$NON-NLS-1$ private static final String SECTION_ICON="icons/section_obj.gif"; //$NON-NLS-1$ private static final String PACKAGES_ICON="icons/packages_obj.gif"; //$NON-NLS-1$ private static final String PACKAGE_ICON="icons/package_obj.gif"; //$NON-NLS-1$ @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public Image getImage(Object element) { if (element instanceof SpecfilePackage) { return Activator.getDefault().getImage(PACKAGE_ICON); } else if (element instanceof SpecfileSection) { return Activator.getDefault().getImage(SECTION_ICON); } else if (element instanceof SpecfilePackageContainer) { return Activator.getDefault().getImage(PACKAGES_ICON); }else if (element instanceof SpecfilePreamble) { return Activator.getDefault().getImage(PREAMBLE_ICON); } return null; } @Override public String getText(Object element) { String str = ""; //$NON-NLS-1$ if (element instanceof SpecfileSection) { SpecfileSection specfileSection = (SpecfileSection) element; str = specfileSection.toString(); } else if (element instanceof Specfile) { str = ((Specfile) element).getName(); } else if (element instanceof SpecfilePackageContainer) { str = Messages.SpecfileLabelProvider_0; } else if (element instanceof SpecfilePreamble){ str = Messages.SpecfileLabelProvider_1; } else if (element instanceof SpecfileElement) { SpecfileElement specfileElement = (SpecfileElement) element; str = specfileElement.getName(); } else if (element instanceof String) { str = (String) element; } else if (element instanceof SpecfilePackage) { str = ((SpecfilePackage) element).getName(); } return filterMacros(str.trim()); } /** * Remove any unresolved macros from the string. These are * macros that follow the format %{?...} (e.g. %{?scl_prefix}). * * @param text The text to filter macros out from. * @return A string without unresolved macros. * * @since 2.1 */ private String filterMacros(String text) { Pattern variablePattern = Pattern.compile("%\\{\\?\\w+\\}"); //$NON-NLS-1$ Matcher variableMatcher = variablePattern.matcher(text); while (variableMatcher.find()) { text = text.replace(variableMatcher.group(0), ""); //$NON-NLS-1$ } return text; } }