package org.ovirt.engine.ui.userportal.widget.basic; import org.ovirt.engine.ui.userportal.ApplicationResourcesWithLookup; import org.ovirt.engine.ui.userportal.gin.AssetProvider; import com.google.gwt.editor.client.IsEditor; import com.google.gwt.editor.client.adapters.TakesValueEditor; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.resources.client.ResourcePrototype; import com.google.gwt.user.client.TakesValue; import com.google.gwt.user.client.ui.Image; /** * Renders an image according to the value given. The specific image has to be in a ClientBundleWithLookup file. Can be * used together with @Path("...") * * @param <T> * the object from which the specific image will be calculated */ public abstract class AbstractDynamicImage<T> extends Image implements IsEditor<TakesValueEditor<T>>, TakesValue<T> { private static final ApplicationResourcesWithLookup resourcesWithLookup = AssetProvider.getResourcesWithLookup(); private T value; @Override public TakesValueEditor<T> asEditor() { return TakesValueEditor.of(this); } @Override public void setValue(T value) { setUrl(getImage(value).getURL()); this.value = value; } @Override public T getValue() { return value; } private ImageResource getImage(T value) { ResourcePrototype resource = resourcesWithLookup.getResource(imageName(value)); if (!(resource instanceof ImageResource)) { return (ImageResource) resourcesWithLookup.getResource(defaultImageName(value)); } return (ImageResource) resource; } protected abstract String imageName(T value); protected abstract String defaultImageName(T value); }