blob: 83ec132e553ab52810b772caa39dc40b46b2efa6 [file] [log] [blame]
/*
* 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 file.
*/
package org.apache.myrmidon.components.model;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
/**
* Default project implementation.
*
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
*/
public class DefaultProject
implements Project
{
///The imports
private final ArrayList m_imports = new ArrayList();
///The projects refferred to by this project
private final HashMap m_projects = new HashMap();
///The targets contained by this project
private final HashMap m_targets = new HashMap();
///The implicit target (not present in m_targets)
private Target m_implicitTarget;
///The name of the default target
private String m_defaultTarget;
///The base directory of project
private File m_baseDirectory;
/**
* Get the imports for project.
*
* @return the imports
*/
public TypeLib[] getTypeLibs()
{
return (TypeLib[])m_imports.toArray( new TypeLib[ 0 ] );
}
/**
* Get names of projects referred to by this project.
*
* @return the names
*/
public String[] getProjectNames()
{
return (String[])m_projects.keySet().toArray( new String[ 0 ] );
}
/**
* Retrieve project reffered to by this project.
*
* @param name the project name
* @return the Project or null if none by that name
*/
public Project getProject( final String name )
{
return (Project)m_projects.get( name );
}
/**
* Retrieve base directory of project.
*
* @return the projects base directory
*/
public final File getBaseDirectory()
{
return m_baseDirectory;
}
/**
* Retrieve implicit target.
* The implicit target contains all the top level tasks.
*
* @return the Target
*/
public final Target getImplicitTarget()
{
return m_implicitTarget;
}
/**
* Set ImplicitTarget.
*
* @param target the implicit target
*/
public final void setImplicitTarget( final Target target )
{
m_implicitTarget = target;
}
/**
* Retrieve a target by name.
*
* @param name the name of target
* @return the Target or null if no target exists with name
*/
public final Target getTarget( final String targetName )
{
return (Target)m_targets.get( targetName );
}
/**
* Get name of default target.
*
* @return the default target name
*/
public final String getDefaultTargetName()
{
return m_defaultTarget;
}
/**
* Retrieve names of all targets in project.
*
* @return an array target names
*/
public final String[] getTargetNames()
{
return (String[])m_targets.keySet().toArray( new String[ 0 ] );
}
/**
* Set DefaultTargetName.
*
* @param defaultTarget the default target name
*/
public final void setDefaultTargetName( final String defaultTarget )
{
m_defaultTarget = defaultTarget;
}
/**
* Retrieve base directory of project.
*
* @return the projects base directory
*/
public final void setBaseDirectory( final File baseDirectory )
{
m_baseDirectory = baseDirectory;
}
public final void addTypeLib( final TypeLib typeLib )
{
m_imports.add( typeLib );
}
/**
* Add a target.
*
* @param name the name of target
* @param target the Target
* @exception IllegalArgumentException if target already exists with same name
*/
public final void addTarget( final String name, final Target target )
{
if( null != m_targets.get( name ) )
{
throw new IllegalArgumentException( "Can not have two targets in a " +
"file with the name " + name );
}
else
{
m_targets.put( name, target );
}
}
/**
* Add a project reference.
*
* @param name the name of target
* @param project the Project
* @exception IllegalArgumentException if project already exists with same name
*/
public final void addProject( final String name, final Project project )
{
if( null != m_projects.get( name ) )
{
throw new IllegalArgumentException( "Can not have two projects referenced in a " +
"file with the name " + name );
}
else
{
m_projects.put( name, project );
}
}
}