/*
 * Copyright (C) The Apache Software Foundation. All rights reserved.
 *
 * This software is published under the terms of the Apache Software License
 * version 1.1, a copy of which has been included with this distribution in
 * the LICENSE.txt file.
 */
package org.apache.avalon.phoenix.components.embeddor;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.excalibur.io.FileUtil;
import org.apache.avalon.phoenix.interfaces.ClassLoaderManager;
import org.apache.avalon.phoenix.interfaces.PackageRepository;

/**
 * Embeddor to host only a single application.
 * It is required that the user set parameter
 * <ul>
 *   <li>application-location = location of application directory or file in URL format
 * </ul>
 * Other parameters are inherited from PhoenixEmbeddor.
 *
 * @author <a href="james.lau@3pro.com.hk">James Lau</a>
 * @version CVS $Revision:$ $Date:$
 */
public class URLSingleAppEmbeddor
    extends SingleAppEmbeddor implements ComponentManager
{
    /**
     * Use DefaultClassLoaderManager for ClassLoaderManager.
     *
     * @return the Parameters
     */
    protected Parameters createDefaultParameters()
    {
        final Parameters defaults = super.createDefaultParameters();
        final String PREFIX = "org.apache.avalon.phoenix.components.";
        defaults.setParameter( ClassLoaderManager.ROLE,
                               PREFIX + "classloader.DefaultClassLoaderManager" );
        defaults.setParameter( PackageRepository.ROLE,
                               PREFIX + "extensions.NoopPackageRepository" );
        return defaults;
    }

    /**
     * Deploy a single application.
     *
     * @exception Exception if an error occurs
     */
    protected void deployDefaultApplications()
        throws Exception

    {
        final String applicationName = getParameters().getParameter( "application-name", "default" );
        final String applicationLocation = getParameters().getParameter( "application-location" );

        final String filename = System.getProperty("user.home")
          + File.separator + ".phoenix" + File.separator + "apps"
          + File.separator + applicationName + ".sar";

        URL url = new URL(applicationLocation);
        File file = new File(filename).getCanonicalFile();

        try {
          FileUtil.copyURLToFile(url, file);
        } catch (IOException ioe) {
            final String message = "Unable to clone sar file from " +
              url.toString() + " to " + file.toString();
            throw new IOException( message );
        }

        deployFile( applicationName, file);

        setApplication(applicationName);
    }

}
