/*******************************************************************************
* Copyright (c) 2006, 2010 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.beans.ui.editor.outline;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.wst.xml.ui.views.contentoutline.XMLContentOutlineConfiguration;
import org.springframework.ide.eclipse.beans.core.BeansCorePlugin;
import org.springframework.ide.eclipse.beans.core.model.INamespaceDefinition;
import org.springframework.ide.eclipse.beans.ui.editor.namespaces.NamespaceUtils;
import org.springframework.ide.eclipse.beans.ui.editor.util.BeansEditorUtils;
import org.w3c.dom.Node;
/**
* @author Christian Dupuis
* @author Torsten Juergeleit
*/
public class DelegatingLabelProvider extends LabelProvider {
private static XMLContentOutlineConfiguration contentOutlineConfiguration = new XMLContentOutlineConfiguration();
private ILabelProvider xmlProvider;
private boolean isContentAssist = false;
public DelegatingLabelProvider(ILabelProvider xmlProvider) {
this.xmlProvider = xmlProvider;
}
public DelegatingLabelProvider() {
this.isContentAssist = true;
this.xmlProvider = contentOutlineConfiguration.getLabelProvider(null);
}
@Override
public Image getImage(Object object) {
if (!BeansEditorUtils.isSpringStyleOutline() && !isContentAssist) {
return xmlProvider.getImage(object);
}
Node node = (Node) object;
String namespace = node.getNamespaceURI();
ILabelProvider[] labelProviders = NamespaceUtils.getLabelProvider(namespace);
for (ILabelProvider labelProvider : labelProviders) {
Image image = labelProvider.getImage(object);
if (image != null) {
return image;
}
}
INamespaceDefinition namespaceDefinition = BeansCorePlugin.getNamespaceDefinitionResolver(null)
.resolveNamespaceDefinition(namespace);
if (namespaceDefinition != null) {
return org.springframework.ide.eclipse.beans.ui.namespaces.NamespaceUtils.getImage(namespaceDefinition);
}
return xmlProvider.getImage(object);
}
@Override
public String getText(Object object) {
if (!BeansEditorUtils.isSpringStyleOutline() && !isContentAssist) {
return xmlProvider.getText(object);
}
Node node = (Node) object;
String namespace = node.getNamespaceURI();
ILabelProvider[] labelProviders = NamespaceUtils.getLabelProvider(namespace);
for (ILabelProvider labelProvider : labelProviders) {
String text = labelProvider.getText(object);
if (text != null && !"".equals(text.trim())) {
return text;
}
}
return xmlProvider.getText(object);
}
}