/*
* *****************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2017 by Pentaho : http://www.pentaho.com
*
* *******************************************************************************
* 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.pentaho.di.engine.configuration.impl;
import org.pentaho.di.engine.configuration.api.RunConfiguration;
import org.pentaho.di.engine.configuration.api.RunConfigurationExecutor;
import org.pentaho.di.engine.configuration.api.RunConfigurationProvider;
import org.pentaho.di.engine.configuration.api.RunConfigurationService;
import org.pentaho.di.engine.configuration.impl.pentaho.DefaultRunConfigurationProvider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* Created by bmorrise on 3/14/17.
*/
public class RunConfigurationManager implements RunConfigurationService {
private RunConfigurationProvider defaultRunConfigurationProvider;
private List<RunConfigurationProvider> runConfigurationProviders;
public RunConfigurationManager( List<RunConfigurationProvider> runConfigurationProviders ) {
this.runConfigurationProviders = runConfigurationProviders;
}
@Override public List<RunConfiguration> load() {
List<RunConfiguration> runConfigurations = new ArrayList<>();
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
runConfigurations.addAll( runConfigurationProvider.load() );
}
Collections.sort( runConfigurations, ( o1, o2 ) -> {
if ( o2.getName().equals( DefaultRunConfigurationProvider.DEFAULT_CONFIG_NAME ) ) {
return 1;
}
return o1.getName().compareToIgnoreCase( o2.getName() );
} );
return runConfigurations;
}
@Override public RunConfiguration load( String name ) {
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
RunConfiguration runConfiguration = runConfigurationProvider.load( name );
if ( runConfiguration != null ) {
return runConfiguration;
}
}
return null;
}
@Override public boolean save( RunConfiguration runConfiguration ) {
RunConfigurationProvider runConfigurationProvider = getProvider( runConfiguration.getType() );
return runConfigurationProvider != null && runConfigurationProvider.save( runConfiguration );
}
@Override
public boolean delete( String name ) {
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
if ( runConfigurationProvider.load( name ) != null && runConfigurationProvider.delete( name ) ) {
return true;
}
}
return false;
}
@Override public void deleteAll() {
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
runConfigurationProvider.deleteAll();
}
}
public String[] getTypes() {
List<String> types = new ArrayList<>();
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
types.add( runConfigurationProvider.getType() );
}
return types.toArray( new String[ 0 ] );
}
public List<String> getNames() {
List<String> names = new ArrayList<>();
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
names.addAll( runConfigurationProvider.getNames() );
}
Collections.sort( names, ( o1, o2 ) -> {
if ( o2.equals( DefaultRunConfigurationProvider.DEFAULT_CONFIG_NAME ) ) {
return 1;
}
return o1.compareToIgnoreCase( o2 );
} );
return names;
}
public RunConfiguration getRunConfigurationByType( String type ) {
RunConfigurationProvider runConfigurationProvider = getProvider( type );
if ( runConfigurationProvider != null ) {
return runConfigurationProvider.getConfiguration();
}
return null;
}
public RunConfigurationExecutor getExecutor( String type ) {
RunConfigurationProvider runConfigurationProvider = getProvider( type );
if ( runConfigurationProvider != null ) {
return runConfigurationProvider.getExecutor();
}
return null;
}
private RunConfigurationProvider getProvider( String type ) {
for ( RunConfigurationProvider runConfigurationProvider : getRunConfigurationProviders() ) {
if ( runConfigurationProvider.getType().equals( type ) ) {
return runConfigurationProvider;
}
}
return null;
}
public List<RunConfigurationProvider> getRunConfigurationProviders() {
List<RunConfigurationProvider> runConfigurationProviders = new ArrayList<>();
if ( defaultRunConfigurationProvider != null ) {
runConfigurationProviders.add( defaultRunConfigurationProvider );
}
runConfigurationProviders.addAll( this.runConfigurationProviders );
return runConfigurationProviders;
}
public RunConfigurationProvider getDefaultRunConfigurationProvider() {
return defaultRunConfigurationProvider;
}
public void setDefaultRunConfigurationProvider(
RunConfigurationProvider defaultRunConfigurationProvider ) {
this.defaultRunConfigurationProvider = defaultRunConfigurationProvider;
}
}