blob: 8fe7f7db367842763591db88686f3b0f6e25d028 [file] [log] [blame]
/*
* Copyright (c) 2007, Rickard Öberg. All Rights Reserved.
* Copyright (c) 2012, Paul Merlin.
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.zest.runtime.bootstrap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.zest.api.activation.Activator;
import org.apache.zest.api.common.MetaInfo;
import org.apache.zest.api.structure.Application;
import org.apache.zest.bootstrap.ApplicationAssembly;
import org.apache.zest.bootstrap.AssemblyVisitor;
import org.apache.zest.bootstrap.LayerAssembly;
import org.apache.zest.bootstrap.ModuleAssembly;
/**
* The representation of an entire application. From
* this you can set information about the application
* and create LayerAssemblies.
*/
public final class ApplicationAssemblyImpl
implements ApplicationAssembly
{
private final Map<String, LayerAssemblyImpl> layerAssemblies = new LinkedHashMap<>();
private String name = "Application";
private String version = "1.0"; // Default version
private Application.Mode mode;
private final MetaInfo metaInfo = new MetaInfo();
private final List<Class<? extends Activator<Application>>> activators = new ArrayList<>();
public ApplicationAssemblyImpl()
{
mode = Application.Mode.valueOf( System.getProperty( "mode", "production" ) );
}
@Override
public LayerAssembly layer( String name )
{
if( name != null )
{
LayerAssemblyImpl existing = layerAssemblies.get( name );
if( existing != null )
{
return existing;
}
}
LayerAssemblyImpl layerAssembly = new LayerAssemblyImpl( this, name );
layerAssemblies.put( name, layerAssembly );
return layerAssembly;
}
@Override
public ModuleAssembly module( String layerName, String moduleName )
{
return layer( layerName ).module( moduleName );
}
@Override
public ApplicationAssembly setName( String name )
{
this.name = name;
return this;
}
@Override
public ApplicationAssembly setVersion( String version )
{
this.version = version;
return this;
}
@Override
public ApplicationAssembly setMode( Application.Mode mode )
{
this.mode = mode;
return this;
}
@Override
public ApplicationAssembly setMetaInfo( Object info )
{
metaInfo.set( info );
return this;
}
@Override
@SafeVarargs
public final ApplicationAssembly withActivators( Class<? extends Activator<Application>>... activators )
{
this.activators.addAll( Arrays.asList( activators ) );
return this;
}
@Override
public <ThrowableType extends Throwable> void visit( AssemblyVisitor<ThrowableType> visitor )
throws ThrowableType
{
visitor.visitApplication( this );
for( LayerAssemblyImpl layerAssembly : layerAssemblies.values() )
{
layerAssembly.visit( visitor );
}
}
public Collection<LayerAssemblyImpl> layerAssemblies()
{
return layerAssemblies.values();
}
public List<Class<? extends Activator<Application>>> activators()
{
return activators;
}
public MetaInfo metaInfo()
{
return metaInfo;
}
@Override
public String name()
{
return name;
}
public String version()
{
return version;
}
@Override
public Application.Mode mode()
{
return mode;
}
}