Package de.matrixweb.smaller.resource.impl

Source Code of de.matrixweb.smaller.resource.impl.JavaEEProcessorFactory

package de.matrixweb.smaller.resource.impl;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.matrixweb.smaller.resource.Processor;
import de.matrixweb.smaller.resource.ProcessorFactory;

/**
* @author markusw
*/
public class JavaEEProcessorFactory implements ProcessorFactory {

  private static final Logger LOGGER = LoggerFactory
      .getLogger(JavaEEProcessorFactory.class);

  private final Map<String, Processor> processors = new HashMap<String, Processor>();

  /**
   * @see de.matrixweb.smaller.resource.ProcessorFactory#getProcessor(java.lang.String)
   */
  @Override
  public Processor getProcessor(final String name) {
    if (name.indexOf(':') > -1) {
      final String[] parts = name.split(":");
      return getProcessor(parts[0], parts[1]);
    }
    Processor processor = this.processors.get(name);
    if (processor == null) {
      final String lname = name.toLowerCase();
      final String pname = StringUtils.capitalize(lname) + "Processor";
      try {
        processor = (Processor) Class.forName(
            "de.matrixweb.smaller." + lname + "." + pname).newInstance();
        this.processors.put(name, processor);
      } catch (final InstantiationException e) {
        LOGGER.warn("Ignoring invalid processor " + name, e);
      } catch (final IllegalAccessException e) {
        LOGGER.warn("Ignoring invalid processor " + name, e);
      } catch (final ClassNotFoundException e) {
        LOGGER.warn("Ignoring invalid processor " + name, e);
      }
    }
    return processor;
  }

  /**
   * @see de.matrixweb.smaller.resource.ProcessorFactory#getProcessor(java.lang.String,
   *      java.lang.String)
   */
  @Override
  public Processor getProcessor(final String name, final String version) {
    final String lname = name.toLowerCase();
    final String pname = StringUtils.capitalize(lname) + "Processor";
    try {
      @SuppressWarnings("unchecked")
      final Class<Processor> clazz = (Class<Processor>) Class
          .forName("de.matrixweb.smaller." + lname + "." + pname);
      try {
        final Constructor<Processor> constructor = clazz
            .getConstructor(String.class);
        return constructor.newInstance(version);
      } catch (final NoSuchMethodException e) {
        return clazz.newInstance();
      }
    } catch (final InvocationTargetException e) {
      LOGGER.warn("Ignoring invalid processor " + name, e);
    } catch (final InstantiationException e) {
      LOGGER.warn("Ignoring invalid processor " + name, e);
    } catch (final IllegalAccessException e) {
      LOGGER.warn("Ignoring invalid processor " + name, e);
    } catch (final ClassNotFoundException e) {
      LOGGER.warn("Ignoring invalid processor " + name, e);
    }
    return null;
  }

  /**
   * @see de.matrixweb.smaller.resource.ProcessorFactory#dispose()
   */
  @Override
  public void dispose() {
    for (final Processor processor : this.processors.values()) {
      processor.dispose();
    }

  }

}
TOP

Related Classes of de.matrixweb.smaller.resource.impl.JavaEEProcessorFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.