/*
* Copyright 2016 ThoughtWorks, Inc.
*
* 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 com.thoughtworks.go.config;
import com.thoughtworks.go.config.remote.PartialConfig;
import com.thoughtworks.go.domain.config.Configuration;
import com.thoughtworks.go.domain.config.ConfigurationProperty;
import com.thoughtworks.go.plugin.access.configrepo.ConfigRepoExtension;
import com.thoughtworks.go.plugin.access.configrepo.InvalidPartialConfigException;
import com.thoughtworks.go.plugin.access.configrepo.contract.CRConfigurationProperty;
import com.thoughtworks.go.plugin.access.configrepo.contract.CRParseResult;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class ConfigRepoPlugin implements PartialConfigProvider {
private ConfigConverter configConverter;
private ConfigRepoExtension crExtension;
private String pluginId;
public ConfigRepoPlugin(ConfigConverter configConverter, ConfigRepoExtension crExtension, String pluginId) {
this.configConverter = configConverter;
this.crExtension = crExtension;
this.pluginId = pluginId;
}
@Override
public PartialConfig load(File configRepoCheckoutDirectory, PartialConfigLoadContext context) {
Collection<CRConfigurationProperty> cRconfigurations = getCrConfigurations(context.configuration());
CRParseResult crPartialConfig = parseDirectory(configRepoCheckoutDirectory, cRconfigurations);
return configConverter.toPartialConfig(crPartialConfig, context);
}
@Override
public String displayName() {
return "Plugin " + this.pluginId;
}
public CRParseResult parseDirectory(File configRepoCheckoutDirectory, Collection<CRConfigurationProperty> cRconfigurations) {
CRParseResult crParseResult = this.crExtension.parseDirectory(this.pluginId, configRepoCheckoutDirectory.getAbsolutePath(), cRconfigurations);
if (crParseResult.hasErrors())
throw new InvalidPartialConfigException(crParseResult, crParseResult.getErrors().getErrorsAsText());
return crParseResult;
}
public static List<CRConfigurationProperty> getCrConfigurations(Configuration configuration) {
List<CRConfigurationProperty> config = new ArrayList<>();
for (ConfigurationProperty prop : configuration) {
String configKeyName = prop.getConfigKeyName();
if (!prop.isSecure())
config.add(new CRConfigurationProperty(configKeyName, prop.getValue(), null));
else {
CRConfigurationProperty crProp = new CRConfigurationProperty(configKeyName, null, prop.getEncryptedValue());
config.add(crProp);
}
}
return config;
}
}