Package com.gistlabs.mechanize.impl

Source Code of com.gistlabs.mechanize.impl.MechanizeInitializer

/**
* Copyright (C) 2012-2014 Gist Labs, LLC. (http://gistlabs.com)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package com.gistlabs.mechanize.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.StringTokenizer;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.gistlabs.mechanize.ResourceFactory;
import com.gistlabs.mechanize.exceptions.MechanizeExceptionFactory;

/**
* <p>This will initialize Mechanize (at static load time) with Page types identified by content matches.</p>
*
* <p>Mechanize supports different Page types, mapped by ContentType. The system property "mechanize.page.factories" is a
* comma-separated list of classnames for the default Page types. Today this is com.gistlabs.mechanize.HtmlPage and
* com.gistlabs.mechanize.ContentPage. Modify this property ONLY if you want to change the default loaded Page types.
* The system property "mechanize.page.factories.ext" is a also loaded, and provides the typical way for framework extenders
* to add custom content types, or MechanizeAgent.registerPageType(Class).</p>

*
* @author jheintz
*
*/
class MechanizeInitializer {
  private static final Log log = LogFactory.getLog(MechanizeInitializer.class);

  public static final String MECHANIZE_PAGE_FACTORIES = "mechanize.page.factories";
  public static final String MECHANIZE_PAGE_FACTORIES_EXT = "mechanize.page.factories.ext";
  public static final String DEFAULT_FACTORIES = "com.gistlabs.mechanize.document.html.HtmlDocumentFactory, com.gistlabs.mechanize.impl.DefaultResourceFactory, com.gistlabs.mechanize.document.json.JsonDocumentFactory";


  static void initialize() {
    processFactoriesClassNames(getClassNames(MECHANIZE_PAGE_FACTORIES, DEFAULT_FACTORIES));
    processFactoriesClassNames(getClassNames(MECHANIZE_PAGE_FACTORIES_EXT, ""));
    try {
      loadProperties();
    } catch (Exception e) {
      log.fatal("Failed to load /mechanize.properties file", e);
      throw MechanizeExceptionFactory.newException(e);
    }
  }

  protected static void loadProperties() throws Exception {
    Properties properties = new Properties();
    properties.load(MechanizeInitializer.class.getResourceAsStream("/mechanize.properties"));
    MechanizeAgent.setVersion(properties.getProperty("mechanize.version"));
  }

  protected static void processFactoriesClassNames(final List<String> factoryClassNames) {
    for (String factoryClassName : factoryClassNames)
      try {
        @SuppressWarnings("unchecked")
        Class<ResourceFactory> pageFactoryClass = (Class<ResourceFactory>) Class.forName(factoryClassName);
        ResourceFactory pageFactory = pageFactoryClass.newInstance();
        MechanizeAgent.registerFactory(pageFactory);
      } catch (Exception e) {
        // TODO add logging...
        throw MechanizeExceptionFactory.newInitializationException(e);
      }
  }

  static List<String> getClassNames(final String forSystemProperty, final String orDefaultValue) {
    List<String> result = new ArrayList<String>();
    String propertyValue = System.getProperty(forSystemProperty);

    if (propertyValue==null || "".equals(propertyValue))
      propertyValue = orDefaultValue;

    StringTokenizer tokenizer = new StringTokenizer(propertyValue, ",");
    while(tokenizer.hasMoreTokens())
      result.add(tokenizer.nextToken().trim());

    return result;
  }
}
TOP

Related Classes of com.gistlabs.mechanize.impl.MechanizeInitializer

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.