package org.archstudio.archipelago2.core.outline; import org.archstudio.archipelago2.AbstractArchipelago2LabelProvider; import org.archstudio.archipelago2.Archipelago2Utils; import org.archstudio.utils.resources.swt.ImageUtils; import org.archstudio.xadl.XadlUtils; import org.archstudio.xarchadt.IXArchADTFeature; import org.archstudio.xarchadt.IXArchADTFeature.FeatureType; import org.archstudio.xarchadt.IXArchADTModelListener; import org.archstudio.xarchadt.IXArchADTTypeMetadata; import org.archstudio.xarchadt.ObjRef; import org.archstudio.xarchadt.XArchADTModelEvent; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; /** * Returns an image icon and name, if available, for a given ObjRef. The image is retrieved from * {@link ImageUtils#getIcon16ForType(org.eclipse.swt.graphics.Device, Class)}. * * @author sahendrickson@gmail.com (Scott A. Hendrickson) */ public class ObjRefLabelProvider extends AbstractArchipelago2LabelProvider implements IXArchADTModelListener { @Override public Image getImage(Object element) { ObjRef objRef = Archipelago2Utils.getLastObjRef(element); if (objRef != null) { return ImageUtils.getIcon16ForType(Display.getDefault(), XadlUtils.getType(xarch, objRef)); } return null; } @Override public StyledString getStyledText(Object element) { ObjRef objRef = Archipelago2Utils.getLastObjRef(element); if (objRef != null) { IXArchADTTypeMetadata type = xarch.getTypeMetadata(objRef); IXArchADTFeature nameFeature = type.getFeatures().get("name"); if (nameFeature != null) { if (nameFeature.getType() == FeatureType.ATTRIBUTE) { Object value = xarch.get(objRef, "name"); if (value != null) { return new StyledString(value.toString()); } else { return new StyledString("[No Name]"); } } } } return null; } @Override public void handleXArchADTModelEvent(final XArchADTModelEvent evt) { switch (evt.getEventType()) { case SET: // Fall through. case CLEAR: if ("name".equals(evt.getFeatureName())) { display.asyncExec(new Runnable() { @Override public void run() { fireLabelProviderEvent(evt.getSource()); } }); } default: // Do nothing. } } }