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