/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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.guvnor.ala.services.rest;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import org.guvnor.ala.pipeline.ConfigExecutor;
import org.guvnor.ala.pipeline.Input;
import org.guvnor.ala.pipeline.Pipeline;
import org.guvnor.ala.pipeline.PipelineConfig;
import org.guvnor.ala.pipeline.PipelineFactory;
import org.guvnor.ala.pipeline.events.PipelineEventListener;
import org.guvnor.ala.pipeline.execution.PipelineExecutor;
import org.guvnor.ala.registry.BuildRegistry;
import org.guvnor.ala.registry.PipelineRegistry;
import org.guvnor.ala.registry.SourceRegistry;
import org.guvnor.ala.services.api.PipelineService;
import org.guvnor.ala.services.api.itemlist.PipelineConfigsList;
import org.guvnor.ala.services.exceptions.BusinessException;
@ApplicationScoped
public class RestPipelineServiceImpl implements PipelineService {
@Inject
private PipelineRegistry pipelineRegistry;
@Inject
private SourceRegistry sourceRegistry;
@Inject
private BuildRegistry buildRegistry;
@Inject
@Any
private Instance<ConfigExecutor> configExecutors;
@Inject
private PipelineExecutor executor;
@Inject
@Any
private Instance<PipelineEventListener> _eventListeners;
private PipelineEventListener[] eventListeners;
@PostConstruct
public void init() {
Iterator<ConfigExecutor> iterator = configExecutors.iterator();
Collection<ConfigExecutor> configs = new ArrayList<>();
while ( iterator.hasNext() ) {
ConfigExecutor configExecutor = iterator.next();
configs.add( configExecutor );
}
executor.init( configs );
final Collection<PipelineEventListener> eventListeners = new ArrayList<>();
for ( PipelineEventListener eventListener : _eventListeners ) {
eventListeners.add( eventListener );
}
this.eventListeners = eventListeners.toArray( new PipelineEventListener[]{} );
}
@Override
public PipelineConfigsList getPipelineConfigs( Integer page, Integer pageSize, String sort, boolean sortOrder ) throws BusinessException {
final List<PipelineConfig> configs = new ArrayList<>();
pipelineRegistry.getPipelines(page, pageSize, sort, sortOrder).stream().forEach( ( p ) -> {
configs.add( p.getConfig() );
} );
return new PipelineConfigsList( configs );
}
@Override
public String newPipeline( PipelineConfig config ) throws BusinessException {
final Pipeline pipeline = PipelineFactory.startFrom( null ).build( config );
pipelineRegistry.registerPipeline( pipeline );
return config.getName();
}
@Override
public void runPipeline( final String name,
final Input input ) throws BusinessException {
final Pipeline pipe = pipelineRegistry.getPipelineByName( name );
executor.execute( input,
pipe,
(Consumer) System.out::println,
eventListeners );
}
}