/****************************************************************************/
/* File: PkgConfigurer.java */
/* Author: F. Georges */
/* Company: H2O Consulting */
/* Date: 2009-10-19 */
/* Tags: */
/* Copyright (c) 2009 Florent Georges (see end of file.) */
/* ------------------------------------------------------------------------ */
package org.expath.pkg.calabash;
import com.xmlcalabash.core.XProcRuntime;
import com.xmlcalabash.config.XMLCalabashConfigurer;
import com.xmlcalabash.config.JaxpConfigurer;
import com.xmlcalabash.config.JingConfigurer;
import com.xmlcalabash.config.SaxonConfigurer;
import com.xmlcalabash.config.XProcConfigurer;
import com.xmlcalabash.core.XProcException;
import java.io.File;
import org.expath.pkg.repo.FileSystemStorage;
import org.expath.pkg.repo.PackageException;
import org.expath.pkg.repo.Repository;
import org.expath.pkg.repo.Storage;
import org.expath.pkg.repo.tools.Logger;
/**
* Calabash configurer factory for the EXPath Packaging System.
*
* @author Florent Georges
*/
public class PkgConfigurer
implements XProcConfigurer
{
public PkgConfigurer(XProcRuntime runtime)
{
myRuntime = runtime;
String repo_value = System.getProperty("org.expath.pkg.calabash.repo");
LOG.fine("org.expath.pkg.calabash.repo: {0}", repo_value);
if ( repo_value == null ) {
repo_value = System.getenv("EXPATH_REPO");
LOG.fine("$EPATH_REPO: {0}", repo_value);
}
if ( repo_value == null ) {
// TODO: Detect if --debug is enabled, and then display a message
// properly formatted for humans (not through logs), including basic
// doc and links to reference material.
LOG.severe("Unable to locate the EXPath repository, cannot set up packaging");
LOG.severe("Use ++repo, org.expath.pkg.calabash.repo, or $EXPATH_REPO to enable it");
return;
}
LOG.info("Initialize EXPath Packaging with: {0}", repo_value);
try {
Storage storage = new FileSystemStorage(new File(repo_value));
myRepo = new Repository(storage);
}
catch ( PackageException ex ) {
throw new XProcException("Error instantiating the EXPath repository on " + repo_value, ex);
}
}
public PkgConfigurer(XProcRuntime runtime, Repository repo)
{
myRuntime = runtime;
myRepo = repo;
}
@Override
public XMLCalabashConfigurer getXMLCalabashConfigurer()
{
if ( myCalabash == null ) {
myCalabash = new PkgCalabashConfigurer(myRuntime, myRepo);
}
return myCalabash;
}
@Override
public JaxpConfigurer getJaxpConfigurer()
{
if ( myJaxp == null ) {
myJaxp = new PkgJaxpConfigurer(myRepo);
}
return myJaxp;
}
@Override
public JingConfigurer getJingConfigurer()
{
if ( myJing == null ) {
myJing = new PkgJingConfigurer(myRepo);
}
return myJing;
}
@Override
public SaxonConfigurer getSaxonConfigurer()
{
if ( mySaxon == null ) {
try {
mySaxon = new PkgSaxonConfigurer(myRepo);
}
catch ( PackageException ex ) {
// TODO:
throw new RuntimeException("FIXME: Implement proper error mgmt", ex);
}
}
return mySaxon;
}
private XProcRuntime myRuntime;
private Repository myRepo;
private XMLCalabashConfigurer myCalabash = null;
private JaxpConfigurer myJaxp = null;
private JingConfigurer myJing = null;
private SaxonConfigurer mySaxon = null;
private static final Logger LOG = Logger.getLogger(PkgConfigurer.class);
}
/* ------------------------------------------------------------------------ */
/* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS COMMENT. */
/* */
/* The contents of this file are subject to the Mozilla Public License */
/* Version 1.0 (the "License"); you may not use this file except in */
/* compliance with the License. You may obtain a copy of the License at */
/* http://www.mozilla.org/MPL/. */
/* */
/* Software distributed under the License is distributed on an "AS IS" */
/* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See */
/* the License for the specific language governing rights and limitations */
/* under the License. */
/* */
/* The Original Code is: all this file. */
/* */
/* The Initial Developer of the Original Code is Florent Georges. */
/* */
/* Contributor(s): none. */
/* ------------------------------------------------------------------------ */