/**
*
* Copyright
* 2009-2015 Jayway Products AB
* 2016-2017 Föreningen Sambruk
*
* Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt
*
* 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 se.streamsource.streamflow.web.assembler;
import org.qi4j.bootstrap.ApplicationAssembler;
import org.qi4j.bootstrap.ApplicationAssembly;
import org.qi4j.bootstrap.ApplicationAssemblyFactory;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.LayerAssembly;
import se.streamsource.dci.qi4j.RoleInjectionProviderFactory;
/**
* Assembly of the Streamflow Server
*/
public class StreamflowWebAssembler
implements ApplicationAssembler
{
private Object[] serviceObjects;
private String name = "StreamflowServer";
public StreamflowWebAssembler(Object... serviceObjects)
{
this.serviceObjects = serviceObjects;
}
public void setName(String name)
{
this.name = name;
}
public ApplicationAssembly assemble(ApplicationAssemblyFactory applicationFactory)
throws AssemblyException
{
ApplicationAssembly assembly = applicationFactory.newApplicationAssembly();
assembly.setName(name);
for (Object serviceObject : serviceObjects)
{
assembly.setMetaInfo(serviceObject);
}
assembly.setMetaInfo(new RoleInjectionProviderFactory());
// Version name rules: x.y.sprint.revision
assembly.setVersion("1.19.0.0");
LayerAssembly configurationLayer = assembly.layer("Configuration");
LayerAssembly domainLayer = assembly.layer("Domain");
LayerAssembly contextLayer = assembly.layer("Context");
LayerAssembly appLayer = assembly.layer("Application");
LayerAssembly webLayer = assembly.layer("Web");
LayerAssembly managementLayer = assembly.layer("Management");
managementLayer.uses(webLayer, appLayer, domainLayer, configurationLayer);
webLayer.uses(appLayer, contextLayer, domainLayer, configurationLayer);
appLayer.uses(domainLayer, configurationLayer);
contextLayer.uses(domainLayer, appLayer );
domainLayer.uses(configurationLayer);
assembleWebLayer(webLayer);
assembleApplicationLayer(appLayer);
new ContextAssembler().assemble(contextLayer);
new DomainAssembler().assemble(domainLayer);
new ConfigurationAssembler().assemble(configurationLayer);
assembleManagementLayer(managementLayer);
return assembly;
}
protected void assembleManagementLayer(LayerAssembly managementLayer)
throws AssemblyException
{
new ManagementAssembler().assemble(managementLayer);
}
protected void assembleApplicationLayer(LayerAssembly appLayer)
throws AssemblyException
{
new AppAssembler().assemble(appLayer);
}
protected void assembleWebLayer(LayerAssembly webLayer)
throws AssemblyException
{
new WebAssembler().assemble(webLayer);
}
}