--- /dev/null
+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;
+ }
+}