package com.netifera.platform.ui.model.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.graphics.Image;
import com.netifera.platform.api.model.IShadowEntity;
import com.netifera.platform.ui.UIPlugin;
import com.netifera.platform.ui.api.model.IEntityInformationProvider;
import com.netifera.platform.ui.api.model.IEntityLabelProvider;
import com.netifera.platform.ui.api.model.IEntityLabelProviderService;
import com.netifera.platform.ui.images.ImageCache;
public class EntityLabelProviderService implements IEntityLabelProviderService {
private final static String UNKNOWN_IMAGE = "icons/unknown_entity.png";
private final ImageCache images = new ImageCache(UIPlugin.PLUGIN_ID);
private final List<IEntityLabelProvider> labelProviders = new ArrayList<IEntityLabelProvider>();
private final List<IEntityInformationProvider> informationProviders = new ArrayList<IEntityInformationProvider>();
public synchronized String getText(IShadowEntity entity) {
for(IEntityLabelProvider provider : labelProviders) {
String text = provider.getText(entity);
if(text != null)
return text;
}
// not found
return (entity.getTypeName().matches("[AEIOU].*") ? "an " : "a ") + entity.getTypeName();
}
public synchronized String getFullText(IShadowEntity entity) {
for(IEntityLabelProvider provider : labelProviders) {
String text = provider.getFullText(entity);
if(text != null)
return text;
}
// not found
return getText(entity);
}
public synchronized Image getImage(IShadowEntity entity) {
for(IEntityLabelProvider provider : labelProviders) {
Image image = provider.getImage(entity);
if(image != null)
return getDecorated(image, entity);
}
// not found
return images.get(UNKNOWN_IMAGE);
}
private Image getDecorated(Image baseImage, IShadowEntity entity) {
for(IEntityLabelProvider provider : labelProviders) {
Image image = provider.decorateImage(baseImage, entity);
if (image != null) baseImage = image;
}
return baseImage;
}
public synchronized String getInformation(IShadowEntity entity) {
StringBuffer buffer = new StringBuffer();
for(IEntityInformationProvider provider : informationProviders) {
String information = provider.getInformation(entity);
if(information != null)
buffer.append(information);
}
return buffer.toString();
}
public synchronized int getSortingCategory(IShadowEntity entity) {
for(IEntityLabelProvider provider : labelProviders) {
Integer category = provider.getSortingCategory(entity);
if (category != null)
return category;
}
return 10;
}
public synchronized Integer compare(IShadowEntity e1, IShadowEntity e2) {
for(IEntityLabelProvider provider : labelProviders) {
Integer value = provider.compare(e1, e2);
if (value != null)
return value;
}
return null;
}
protected synchronized void registerLabelProvider(IEntityLabelProvider provider) {
labelProviders.add(provider);
}
protected synchronized void unregisterLabelProvider(IEntityLabelProvider provider) {
labelProviders.remove(provider);
}
protected synchronized void registerInformationProvider(IEntityInformationProvider provider) {
informationProviders.add(provider);
}
protected synchronized void unregisterInformationProvider(IEntityInformationProvider provider) {
informationProviders.remove(provider);
}
}