[ 
https://issues.apache.org/jira/browse/IMAGING-159?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14297804#comment-14297804
 ] 

Michael Groß commented on IMAGING-159:
--------------------------------------

http://github.com/mgmechanics/commons-imaging/tree/IMAGING-159

I made a fork from the github repository and created three new classes: 
org.apache.commons.imaging.Parameter (which is supposed to replace 
ImagingConstants if my proposal is accepted) and 
org.apache.commons.imaging.ParameterObject which is the requested parameter 
object class. The new code is located as shown above.

ParameterObject is an immutable object. If we really need to remove some 
parameters I would add some code to return a new instance without the requested 
parameters if needed (saw this somewhere in the code). The ParameterObject is 
build using a Builder so one can say

{noformat}
ParameterObject testObject = ParameterObject.build()
            .setInt(Parameter.PARAM_KEY_EXIF, 21)
            .setBinaryConstant(Parameter.PARAM_KEY_STRICT,
                    JpegConstants.JFIF0_SIGNATURE)
            .get();
{noformat}

There is a class ParameterObjectTest among the test classes for 
org.apache.commons.imaging which demonstrates this. One may place checks for 
the parameter values when stored as demonstrated too.

I added only code to store int and BinaryConstant objects. It's easy to add 
code for more types. If my proposal is accepted I could start to change the 
existing code to use the parameter object. I wish you a nice day!

> There should be a Parameters class
> ----------------------------------
>
>                 Key: IMAGING-159
>                 URL: https://issues.apache.org/jira/browse/IMAGING-159
>             Project: Commons Imaging
>          Issue Type: Improvement
>          Components: imaging.*
>            Reporter: Benedikt Ritter
>             Fix For: Patch Needed
>
>
> Currently options for image I/O are defined as Maps. The leads to the problem 
> that our code has to validate parameter types when they are used:
> {code:java}
> final Object value = params.get(PARAM_KEY_COMPRESSION);
> if (value != null) {
>   if (!(value instanceof Number)) {
>     throw new ImageWriteException(
>       "Invalid compression parameter, must be numeric: "
>          + value);
>   }
>   compression = ((Number) value).intValue();
> }
> {code}
> This can be simplified if we define a Parameters class that provides 
> additional methods like {{public int getInt(String key)}}. The implementation 
> could then look up the value from the map through an exception if it is null 
> or not a number.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to