]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/jpeg/ExifGateway.java
Version 10, May 2010
[GpsPrune.git] / tim / prune / jpeg / ExifGateway.java
diff --git a/tim/prune/jpeg/ExifGateway.java b/tim/prune/jpeg/ExifGateway.java
new file mode 100644 (file)
index 0000000..5420ea6
--- /dev/null
@@ -0,0 +1,80 @@
+package tim.prune.jpeg;
+
+import java.io.File;
+
+import javax.swing.JOptionPane;
+
+import tim.prune.I18nManager;
+
+/**
+ * Skeleton gateway to the Exif functions.
+ * This is required by Debian to divert Exif handling
+ * to the external libmetadata-extractor-java library
+ * instead of the included modified routines.
+ *
+ * To use the internal routines, set the USE_INTERNAL_LIBRARY flag to true
+ * and include the internal classes in the compiled jar.
+ * To use the external library, set the USE_INTERNAL_LIBRARY flag to false
+ * and do not export the internal classes.
+ */
+public abstract class ExifGateway
+{
+       // *********************************************************
+       // TODO: Check this exif library flag before releasing!
+       /** Flag to specify internal or external library */
+       private static final boolean USE_INTERNAL_LIBRARY = true;
+       // *********************************************************
+
+       /** Library object to call */
+       private static ExifLibrary _exifLibrary = null;
+       /** Flag to set whether failure warning has already been shown */
+       private static boolean _exifFailWarned = false;
+
+       /** Static block to initialise library */
+       static
+       {
+               String libraryClass = USE_INTERNAL_LIBRARY?"InternalExifLibrary":"ExternalExifLibrary";
+               try
+               {
+                       _exifLibrary = (ExifLibrary) Class.forName("tim.prune.jpeg." + libraryClass).newInstance();
+               }
+               catch (Throwable nolib) {_exifLibrary = null;}
+       }
+
+
+       /**
+        * Get the Jpeg data from the given file
+        * @param inFile file to read
+        * @return jpeg data, or null if none found
+        */
+       public static JpegData getJpegData(File inFile)
+       {
+               try
+               {
+                       // Call library (if found)
+                       if (_exifLibrary != null) {
+                               JpegData data = _exifLibrary.getJpegData(inFile);
+                               return data;
+                       }
+               }
+               catch (LinkageError nolib) {}
+               // Not successful - warn if necessary
+               if (!_exifFailWarned)
+               {
+                       JOptionPane.showMessageDialog(null, I18nManager.getText("error.jpegload.exifreadfailed"),
+                               I18nManager.getText("error.jpegload.dialogtitle"), JOptionPane.WARNING_MESSAGE);
+                       _exifFailWarned = true;
+               }
+               return null;
+       }
+
+       /**
+        * @return key to use to describe library, matching key for about dialog
+        */
+       public static String getDescriptionKey()
+       {
+               String key = USE_INTERNAL_LIBRARY?"internal":"external";
+               if (_exifLibrary == null || !_exifLibrary.looksOK()) {key = key + ".failed";}
+               return key;
+       }
+}