Example usage for org.apache.commons.digester Digester createSAXException

List of usage examples for org.apache.commons.digester Digester createSAXException

Introduction

In this page you can find the example usage for org.apache.commons.digester Digester createSAXException.

Prototype

public SAXException createSAXException(String message) 

Source Link

Document

Create a SAX exception which also understands about the location in the digester file where the exception occurs

Usage

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);
}