001 /*
002 * Copyright 2007 - 2007 JEuclid, http://jeuclid.sf.net
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 /* $Id: FreeHepInternalDetector.java,v 88b901bf20fb 2008/06/07 14:12:27 maxberger $ */
018
019 package net.sourceforge.jeuclid.converter;
020
021 import java.lang.reflect.InvocationTargetException;
022 import java.util.HashMap;
023 import java.util.Map;
024
025 import net.sourceforge.jeuclid.elements.support.ClassLoaderSupport;
026
027 import org.apache.commons.logging.Log;
028 import org.apache.commons.logging.LogFactory;
029 import org.freehep.util.export.ExportFileType;
030
031 /**
032 * actual detector for FreeHEP graphics formats. Depends on the presence of
033 * FreeHEP, hence the "internal".
034 *
035 * @version $Revision: 88b901bf20fb $
036 */
037 public final class FreeHepInternalDetector {
038
039 /**
040 * Logger for this class
041 */
042 private static final Log LOGGER = LogFactory
043 .getLog(FreeHepInternalDetector.class);
044
045 private static final Map<String, String> PLUGINS_CLASSES = new HashMap<String, String>();
046
047 private FreeHepInternalDetector() {
048 // Empty on purpose
049 }
050
051 /**
052 * Actual detection and registration routine.
053 *
054 * @param registry
055 * ConverterRegistry to use
056 */
057 public static void actuallyDetectConversionPlugins(
058 final ConverterRegistry registry) {
059
060 for (final Map.Entry<String, String> e : FreeHepInternalDetector.PLUGINS_CLASSES
061 .entrySet()) {
062
063 try {
064 final Class<?> infoClass = ClassLoaderSupport.getInstance()
065 .loadClass(e.getKey());
066 final ExportFileType fileType = (ExportFileType) infoClass
067 .getConstructor().newInstance();
068
069 final Class<?> graphicsClass = ClassLoaderSupport.getInstance()
070 .loadClass(e.getValue());
071 FreeHepInternalDetector.actuallyRegister(registry, fileType,
072 graphicsClass);
073 } catch (final NoSuchMethodException ex) {
074 FreeHepInternalDetector.LOGGER.debug(ex);
075 } catch (final ClassNotFoundException ex) {
076 FreeHepInternalDetector.LOGGER.debug(ex);
077 } catch (final IllegalArgumentException ex) {
078 FreeHepInternalDetector.LOGGER.debug(ex);
079 } catch (final SecurityException ex) {
080 FreeHepInternalDetector.LOGGER.debug(ex);
081 } catch (final InstantiationException ex) {
082 FreeHepInternalDetector.LOGGER.debug(ex);
083 } catch (final IllegalAccessException ex) {
084 FreeHepInternalDetector.LOGGER.debug(ex);
085 } catch (final InvocationTargetException ex) {
086 FreeHepInternalDetector.LOGGER.debug(ex);
087 }
088 }
089 }
090
091 private static void actuallyRegister(final ConverterRegistry registry,
092 final ExportFileType fileType, final Class<?> graphicsClass)
093 throws NoSuchMethodException {
094 final ConverterPlugin freeHepConverter = new FreeHepConverter(
095 graphicsClass);
096 for (final String mimeType : fileType.getMIMETypes()) {
097 for (final String suffix : fileType.getExtensions()) {
098 registry.registerMimeTypeAndSuffix(mimeType, suffix, false);
099 }
100 registry.registerConverter(mimeType, freeHepConverter, false);
101 }
102 }
103
104 static {
105 FreeHepInternalDetector.PLUGINS_CLASSES.put(
106 "org.freehep.graphicsio.emf.EMFExportFileType",
107 "org.freehep.graphicsio.emf.EMFGraphics2D");
108 FreeHepInternalDetector.PLUGINS_CLASSES.put(
109 "org.freehep.graphicsio.gif.GIFExportFileType",
110 "org.freehep.graphicsio.gif.GIFGraphics2D");
111 FreeHepInternalDetector.PLUGINS_CLASSES.put(
112 "org.freehep.graphicsio.pdf.PDFExportFileType",
113 "org.freehep.graphicsio.pdf.PDFGraphics2D");
114 FreeHepInternalDetector.PLUGINS_CLASSES.put(
115 "org.freehep.graphicsio.ps.PSExportFileType",
116 "org.freehep.graphicsio.ps.PSGraphics2D");
117 FreeHepInternalDetector.PLUGINS_CLASSES.put(
118 "org.freehep.graphicsio.svg.SVGExportFileType",
119 "org.freehep.graphicsio.svg.SVGGraphics2D");
120 FreeHepInternalDetector.PLUGINS_CLASSES.put(
121 "org.freehep.graphicsio.swf.SWFExportFileType",
122 "org.freehep.graphicsio.swf.SWFGraphics2D");
123 }
124 }