001/** 002 * Copyright 2010-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.common.util.scm; 017 018import java.io.File; 019import java.util.ArrayList; 020import java.util.List; 021 022import org.kuali.common.util.execute.Executable; 023import org.kuali.common.util.file.DirRequest; 024import org.kuali.common.util.nullify.NullUtils; 025import org.kuali.common.util.project.ProjectUtils; 026import org.kuali.common.util.project.model.ProjectIdentifier; 027import org.kuali.common.util.spring.SpringUtils; 028import org.springframework.beans.factory.annotation.Autowired; 029import org.springframework.context.annotation.Bean; 030import org.springframework.context.annotation.Configuration; 031import org.springframework.context.annotation.Import; 032import org.springframework.core.env.Environment; 033 034@Configuration 035@Import(ScmConfig.class) 036public class ScmProjectConfig { 037 038 private static final String PROJECTS_KEY = "scm.build.projects"; 039 private static final String RELATIVE_DIR_KEY = "scm.dir.relative"; 040 private static final String SOURCE_DIR_KEY = "scm.dir.src"; 041 private static final String INCLUDES_KEY = "scm.includes"; 042 private static final String EXCLUDES_KEY = "scm.excludes"; 043 private static final String SKIP_KEY = "scm.skip"; 044 private static final String COMMIT_SKIP_KEY = "scm.commit.skip"; 045 private static final String COMMIT_PATHS_KEY = "scm.commit.paths"; 046 private static final String COMMIT_MESSAGE_KEY = "scm.commit.message"; 047 048 @Autowired 049 Environment env; 050 051 @Autowired 052 ScmConfig scmConfig; 053 054 @Bean 055 public Executable projectScmConfigUpdateScmExecutable() { 056 057 boolean skip = SpringUtils.getBoolean(env, SKIP_KEY, UpdateScmExecutable.DEFAULT_SKIP_VALUE); 058 boolean skipCommit = SpringUtils.getBoolean(env, COMMIT_SKIP_KEY, UpdateScmExecutable.DEFAULT_SKIP_COMMIT_VALUE); 059 List<File> commitPaths = SpringUtils.getFilesFromCSV(env, COMMIT_PATHS_KEY, NullUtils.NONE); 060 String commitMessage = SpringUtils.getProperty(env, COMMIT_MESSAGE_KEY); 061 062 UpdateScmExecutable exec = new UpdateScmExecutable(); 063 exec.setRequests(projectScmConfigDirRequests()); 064 exec.setScmService(scmConfig.scmService()); 065 exec.setSkip(skip); 066 exec.setSkipCommit(skipCommit); 067 exec.setCommitPaths(commitPaths); 068 exec.setMessage(commitMessage); 069 return exec; 070 } 071 072 @Bean 073 public List<DirRequest> projectScmConfigDirRequests() { 074 List<String> projectIds = SpringUtils.getNoneSensitiveListFromCSV(env, PROJECTS_KEY); 075 List<String> includes = SpringUtils.getNoneSensitiveListFromCSV(env, INCLUDES_KEY); 076 List<String> excludes = SpringUtils.getNoneSensitiveListFromCSV(env, EXCLUDES_KEY); 077 List<ProjectIdentifier> identifiers = ProjectUtils.getIdentifiers(projectIds); 078 File stagingDir = SpringUtils.getFile(env, SOURCE_DIR_KEY); 079 File relativeDir = SpringUtils.getFile(env, RELATIVE_DIR_KEY); 080 List<DirRequest> requests = new ArrayList<DirRequest>(); 081 for (ProjectIdentifier identifier : identifiers) { 082 DirRequest request = getDirRequest(identifier, stagingDir, relativeDir, includes, excludes); 083 requests.add(request); 084 } 085 return requests; 086 } 087 088 protected DirRequest getDirRequest(ProjectIdentifier identifier, File stagingDir, File relativeDir, List<String> includes, List<String> excludes) { 089 String key = "scm.build." + identifier.getArtifactId() + ".dir"; 090 // This is ${project.basedir}/src/main/resources 091 File projectResourceDir = SpringUtils.getFile(env, key); 092 File targetDir = ProjectUtils.getResourceDirectory(projectResourceDir, identifier.getGroupId(), identifier.getArtifactId()); 093 File sourceDir = ProjectUtils.getResourceDirectory(stagingDir, identifier.getGroupId(), identifier.getArtifactId()); 094 DirRequest request = new DirRequest(); 095 request.setRelativeDir(relativeDir); 096 request.setTargetDir(targetDir); 097 request.setSourceDir(sourceDir); 098 request.setIncludes(includes); 099 request.setExcludes(excludes); 100 return request; 101 } 102 103}