/*************************GO-LICENSE-START*********************************
* Copyright 2014 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.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.server.service;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import com.thoughtworks.go.config.materials.MaterialConfigs;
import com.thoughtworks.go.config.materials.Materials;
import com.thoughtworks.go.config.materials.PackageMaterialConfig;
import com.thoughtworks.go.config.materials.PluggableSCMMaterialConfig;
import com.thoughtworks.go.config.materials.dependency.DependencyMaterialConfig;
import com.thoughtworks.go.config.materials.git.GitMaterialConfig;
import com.thoughtworks.go.config.materials.mercurial.HgMaterialConfig;
import com.thoughtworks.go.config.materials.perforce.P4MaterialConfig;
import com.thoughtworks.go.config.materials.svn.SvnMaterialConfig;
import com.thoughtworks.go.config.materials.tfs.TfsMaterialConfig;
import com.thoughtworks.go.domain.materials.Material;
import com.thoughtworks.go.domain.materials.MaterialConfig;
import com.thoughtworks.go.domain.materials.dependency.DependencyMaterialInstance;
import com.thoughtworks.go.domain.materials.git.GitMaterialInstance;
import com.thoughtworks.go.domain.materials.mercurial.HgMaterialInstance;
import com.thoughtworks.go.domain.materials.packagematerial.PackageMaterialInstance;
import com.thoughtworks.go.domain.materials.perforce.P4MaterialInstance;
import com.thoughtworks.go.domain.materials.scm.PluggableSCMMaterialInstance;
import com.thoughtworks.go.domain.materials.svn.SvnMaterialInstance;
import com.thoughtworks.go.domain.materials.tfs.TfsMaterialInstance;
import org.springframework.stereotype.Component;
/* To convert a MaterialConfig into a Material. */
@Component
public class MaterialConfigConverter {
private static HashMap<Class, Class> map = new HashMap<>();
static {
map.put(SvnMaterialConfig.class, SvnMaterialInstance.class);
map.put(GitMaterialConfig.class, GitMaterialInstance.class);
map.put(HgMaterialConfig.class, HgMaterialInstance.class);
map.put(P4MaterialConfig.class, P4MaterialInstance.class);
map.put(TfsMaterialConfig.class, TfsMaterialInstance.class);
map.put(DependencyMaterialConfig.class, DependencyMaterialInstance.class);
map.put(PackageMaterialConfig.class, PackageMaterialInstance.class);
map.put(PluggableSCMMaterialConfig.class, PluggableSCMMaterialInstance.class);
}
public Material toMaterial(MaterialConfig materialConfig) {
return new Materials(new MaterialConfigs(materialConfig)).first();
}
public Class getInstanceType(MaterialConfig materialConfig) {
if (!map.containsKey(materialConfig.getClass())) {
throw new RuntimeException("Unexpected type: " + materialConfig.getClass().getSimpleName());
}
return map.get(materialConfig.getClass());
}
public Materials toMaterials(MaterialConfigs materialConfigs) {
return new Materials(materialConfigs);
}
public Set<Material> toMaterials(Set<MaterialConfig> materialConfigs) {
HashSet<Material> materials = new HashSet<>();
for (MaterialConfig materialConfig : materialConfigs) {
materials.add(toMaterial(materialConfig));
}
return materials;
}
}