List of usage examples for org.apache.commons.digester Digester createSAXException
public SAXException createSAXException(String message)
From source file:org.photovault.imginfo.xml.XmlImporter.java
/** Import data from XML file according to current settings in this object. *///w w w . jav a2 s .com public void importData() { Digester digester = new Digester(); digester.push(this); // Push controller servlet onto the stack digester.setValidating(false); digester.addFactoryCreate("*/folders/folder", new FolderFactory(true)); digester.addFactoryCreate("*/folder/folder", new FolderFactory(true)); digester.addCallMethod("*/folder/name", "setName", 0); digester.addCallMethod("*/folder/description", "setDescription", 0); // PhotoInfo mappings digester.addFactoryCreate("*/photos/photo", new PhotoFactory()); // After the photo is ready, inform listeners if a new photo was created. digester.addRule("*/photos/photo", new Rule() { @Override public void end(String namespace, String name) { Boolean isCreatingNew = (Boolean) digester.pop(STACK_CREATING_NEW); if (isCreatingNew.booleanValue()) { photoCount++; fireObjectImportedEvent(digester.peek()); } } }); digester.addCallMethod("*/photos/photo/shooting-place", "setShootingPlace", 0); digester.addCallMethod("*/photos/photo/photographer", "setPhotographer", 0); digester.addCallMethod("*/photos/photo/camera", "setCamera", 0); digester.addCallMethod("*/photos/photo/lens", "setLens", 0); digester.addCallMethod("*/photos/photo/film", "setFilm", 0); digester.addCallMethod("*/photos/photo/orig-fname", "setOrigFname", 0); digester.addCallMethod("*/photos/photo/description", "setDesc", 0); digester.addCallMethod("*/photos/photo/tech-notes", "setTechNotes", 0); digester.addCallMethod("*/photos/photo/f-stop", "setFStop", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/shutter-speed", "setShutterSpeed", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/focal-length", "setFocalLength", 0, new Class[] { Double.class }); digester.addCallMethod("*/photos/photo/quality", "setQuality", 0, new Class[] { Integer.class }); digester.addCallMethod("*/photos/photo/film-speed", "setFilmSpeed", 0, new Class[] { Integer.class }); digester.addFactoryCreate("*/photos/photo/shoot-time", new FuzzyDateFactory()); digester.addSetNext("*/photos/photo/shoot-time", "setFuzzyShootTime"); // Crop settings digester.addCallMethod("*/photos/photo/crop", "setPrefRotation", 1, new Class[] { Double.class }); digester.addCallParam("*/photos/photo/crop", 0, "rot"); digester.addFactoryCreate("*/photos/photo/crop", new RectangleFactory()); digester.addSetNext("*/photos/photo/crop", "setCropBounds"); /* Raw conversion setting mappings. All of these expect that a RawSettingsFactory is the topmost object in Digester stack. Note that in practice there must be and explicit rule for each raw setting field since the rule that instantates the raw setting object & assign it to the parent object will override this. */ digester.addObjectCreate("*/raw-conversion", RawSettingsFactory.class); digester.addCallMethod("*/raw-conversion/whitepoint", "setWhite", 0, new Class[] { Integer.class }); digester.addCallMethod("*/raw-conversion/blackpoint", "setBlack", 0, new Class[] { Integer.class }); digester.addCallMethod("*/raw-conversion/ev-corr", "setEvCorr", 0, new Class[] { Double.class }); digester.addCallMethod("*/raw-conversion/hlight-corr", "setHlightComp", 0, new Class[] { Double.class }); digester.addRule("*/raw-conversion/color-balance", new Rule() { @Override public void begin(String namespace, String name, Attributes attrs) { String rgStr = attrs.getValue("red-green-ratio"); String bgStr = attrs.getValue("blue-green-ratio"); double bg = 1.0; double rg = 1.0; try { bg = Double.parseDouble(bgStr); rg = Double.parseDouble(rgStr); } catch (NumberFormatException ex) { digester.createSAXException(ex); } RawSettingsFactory f = (RawSettingsFactory) digester.peek(); f.setRedGreenRation(rg); f.setBlueGreenRatio(bg); } }); digester.addRule("*/raw-conversion/daylight-color-balance", new Rule() { @Override public void begin(String namespace, String name, Attributes attrs) { String rgStr = attrs.getValue("red-green-ratio"); String bgStr = attrs.getValue("blue-green-ratio"); double bg = 1.0; double rg = 1.0; try { bg = Double.parseDouble(bgStr); rg = Double.parseDouble(rgStr); } catch (NumberFormatException ex) { digester.createSAXException(ex); } RawSettingsFactory f = (RawSettingsFactory) digester.peek(); f.setDaylightMultipliers(new double[] { rg, 1.0, bg }); } }); digester.addRuleSet(new ChannelMapRuleSet("*/photo/")); digester.addRule("*/photo/color-mapping", new Rule() { @Override public void end(String namespace, String name) { PhotoInfo p = (PhotoInfo) digester.peek(1); ChannelMapOperationFactory f = (ChannelMapOperationFactory) digester.peek(); p.setColorChannelMapping(f.create()); } }); digester.addObjectCreate("*/photo/raw-conversion", RawSettingsFactory.class); digester.addRule("*/photo/raw-conversion", new Rule() { @Override public void end(String namespace, String name) { PhotoInfo p = (PhotoInfo) digester.peek(1); RawSettingsFactory f = (RawSettingsFactory) digester.peek(); try { p.setRawSettings(f.create()); } catch (PhotovaultException ex) { digester.createSAXException(ex); } } }); // Instance mappings digester.addFactoryCreate("*/photo/instances/instance", new InstanceFactory()); digester.addCallMethod("*/instance/file-size", "setFileSize", 0, new Class[] { Long.class }); digester.addCallMethod("*/instance/width", "setWidth", 0, new Class[] { Integer.class }); digester.addCallMethod("*/instance/height", "setHeight", 0, new Class[] { Integer.class }); digester.addCallMethod("*/instance/crop", "setRotated", 1, new Class[] { Double.class }); digester.addCallParam("*/instance/crop", 0, "rot"); digester.addFactoryCreate("*/instance/crop", new RectangleFactory()); digester.addSetNext("*/instance/crop", "setCropBounds"); digester.addRule("*/instance/hash", new Rule() { @Override public void body(String namespace, String name, String text) { /* byte[] hash = Base64.decode( text ); ImageInstance i = (ImageInstance) digester.peek(); i.setHash( hash ); */ } }); digester.addRuleSet(new ChannelMapRuleSet("*/instance/")); digester.addRule("*/instance/color-mapping", new Rule() { @Override public void end(String namespace, String name) { /* ImageInstance i = (ImageInstance) digester.peek(1); ChannelMapOperationFactory f = (ChannelMapOperationFactory) digester.peek(); i.setColorChannelMapping( f.create() ); */ } }); // Raw conversion parsing was already specified earlier. We just need a // method for binding the RawConversionSettings object to instance digester.addObjectCreate("*/instance/raw-conversion", RawSettingsFactory.class); digester.addRule("*/instance/raw-conversion", new Rule() { @Override public void end(String namespace, String name) { /* ImageInstance i = (ImageInstance)digester.peek(1); RawSettingsFactory f = (RawSettingsFactory) digester.peek(); try { i.setRawSettings( f.create() ); } catch (PhotovaultException ex) { digester.createSAXException( ex ); } */ } }); /* TODO: import information about image locations. In first phase, this can be done by indexing images as an external volume... */ digester.addSetNext("*/photo/instances/instance", "addInstance"); // folder handling digester.addFactoryCreate("*/photos/photo/folders/folder-ref", new FolderFactory(false)); digester.addSetTop("*/photos/photo/folders/folder-ref", "addPhoto"); fireStatusChangeEvent(IMPORTING_STARTED); try { digester.parse(reader); } catch (SAXException ex) { fireErrorEvent(ex.getMessage()); ex.printStackTrace(); } catch (IOException ex) { fireErrorEvent(ex.getMessage()); ex.printStackTrace(); } fireStatusChangeEvent(IMPORTING_COMPLETED); }