1 29 30 package nextapp.echo2.app.componentxml.propertypeer; 31 32 import org.w3c.dom.Element ; 33 34 import nextapp.echo2.app.FillImage; 35 import nextapp.echo2.app.Extent; 36 import nextapp.echo2.app.ImageReference; 37 import nextapp.echo2.app.componentxml.InvalidPropertyException; 38 import nextapp.echo2.app.componentxml.PropertyLoader; 39 import nextapp.echo2.app.componentxml.PropertyXmlPeer; 40 import nextapp.echo2.app.util.DomUtil; 41 42 46 public class FillImagePeer 47 implements PropertyXmlPeer { 48 49 53 public Object getValue(ClassLoader classLoader, Class objectClass, Element propertyElement) 54 throws InvalidPropertyException { 55 Element fillImageElement = DomUtil.getChildElementByTagName(propertyElement, "fill-image"); 56 if (fillImageElement == null) { 57 throw new InvalidPropertyException("Invalid FillImage property.", null); 58 } 59 60 Extent offsetX = fillImageElement.hasAttribute("horizontal") 61 ? ExtentPeer.toExtent(fillImageElement.getAttribute("horizontal")) : null; 62 Extent offsetY = fillImageElement.hasAttribute("vertical") 63 ? ExtentPeer.toExtent(fillImageElement.getAttribute("vertical")) : null; 64 65 int repeat; 66 String repeatString = fillImageElement.getAttribute("repeat"); 67 if ("horizontal".equals(repeatString)) { 68 repeat = FillImage.REPEAT_HORIZONTAL; 69 } else if ("vertical".equals(repeatString)) { 70 repeat = FillImage.REPEAT_VERTICAL; 71 } else if ("none".equals(repeatString)) { 72 repeat = FillImage.NO_REPEAT; 73 } else { 74 repeat = FillImage.REPEAT; 75 } 76 77 Element imageElement = DomUtil.getChildElementByTagName(fillImageElement, "image"); 78 if (imageElement == null) { 79 throw new InvalidPropertyException("Invalid FillImage property.", null); 80 } 81 String imageType = imageElement.getAttribute("type"); 82 PropertyLoader propertyLoader = PropertyLoader.forClassLoader(classLoader); 83 84 Class propertyClass; 85 try { 86 propertyClass = Class.forName(imageType, true, classLoader); 87 } catch (ClassNotFoundException ex) { 88 throw new InvalidPropertyException("Invalid FillImage property (type \"" + imageType + "\" not found.", ex); 89 } 90 91 Object imagePropertyValue = propertyLoader.getPropertyValue(FillImage.class, propertyClass, imageElement); 92 if (!(imagePropertyValue instanceof ImageReference)) { 93 throw new InvalidPropertyException("Invalid FillImage property (type \"" + imageType 94 + "\" is not an ImageReference.", null); 95 } 96 97 ImageReference imageReference = (ImageReference) imagePropertyValue; 98 FillImage fillImage = new FillImage(imageReference, offsetX, offsetY, repeat); 99 100 return fillImage; 101 } 102 } 103 | Popular Tags |