001    package railo.runtime.img;
002    
003    import java.io.IOException;
004    import java.io.InputStream;
005    import java.util.Iterator;
006    
007    import railo.commons.io.IOUtil;
008    import railo.commons.io.res.Resource;
009    import railo.runtime.exp.PageException;
010    import railo.runtime.type.KeyImpl;
011    import railo.runtime.type.Struct;
012    import railo.runtime.type.StructImpl;
013    
014    import com.drew.imaging.jpeg.JpegMetadataReader;
015    import com.drew.imaging.jpeg.JpegProcessingException;
016    import com.drew.imaging.tiff.TiffMetadataReader;
017    import com.drew.metadata.Directory;
018    import com.drew.metadata.Metadata;
019    import com.drew.metadata.MetadataException;
020    import com.drew.metadata.Tag;
021    
022    public class ImageMetaDrew {
023    
024            /**
025             * adds information about a image to the given struct
026             * @param info
027             * @throws PageException 
028             * @throws IOException 
029             * @throws MetadataException 
030             * @throws JpegProcessingException 
031             */
032            public static void addInfo(String format, Resource res, Struct info)  {
033                    if("jpg".equalsIgnoreCase(format))jpg(res, info);
034                    else if("tiff".equalsIgnoreCase(format))tiff(res, info);
035                    
036            }
037    
038            private static void jpg(Resource res,Struct info) {
039                    InputStream is=null;
040                    try {
041                            is = res.getInputStream();
042                            fill(info,JpegMetadataReader.readMetadata(is));
043                    }
044                    catch(Throwable t) {
045                            //throw Caster.toPageException(t);
046                    }
047                    finally {
048                            IOUtil.closeEL(is);
049                    }
050            }
051            
052            private static void tiff(Resource res,Struct info) {
053                    InputStream is=null;
054                    try {
055                            is = res.getInputStream();
056                            fill(info,TiffMetadataReader.readMetadata(is));
057                    }
058                    catch(Throwable t) {
059                            //throw Caster.toPageException(t);
060                    }
061                    finally {
062                            IOUtil.closeEL(is);
063                    }
064            }
065    
066            private static void fill(Struct info,Metadata metadata) throws MetadataException {
067                    Iterator<Directory> directories = metadata.getDirectoryIterator();
068                    while (directories.hasNext()) {
069                        Directory directory = directories.next();
070                        Struct sct=new StructImpl();
071                        info.setEL(KeyImpl.init(directory.getName()), sct);
072                        
073                        Iterator<Tag> tags = directory.getTagIterator();
074                        while (tags.hasNext()) {
075                            Tag tag = tags.next();
076                            sct.setEL(KeyImpl.init(tag.getTagName()), tag.getDescription());
077                        }
078                    }
079            }
080    
081            public static void test() {
082                    // to not delete, this methd is called to test if the jar exists
083                    
084            }
085    
086            
087    
088    }