/**
* Copyright (C) 2015 Orange
* 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.francetelecom.clara.cloud.mvn.consumer;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.RepositoryPolicy;
import com.francetelecom.clara.cloud.commons.TechnicalException;
public class MvnConsumerConfigurer {
private static Logger logger = LoggerFactory.getLogger(MvnConsumerConfigurer.class.getName());
protected String[] pullRepositoryUrls;
protected String releaseRepositoryRefreshIntervalInMin;
protected String snapshotRepositoryRefreshIntervalInMin;
protected String pushSnapshotRepositoryUrl;
protected String pushSnapshotRepositoryUser;
protected String pushSnapshotRepositoryPassword;
protected String pushReleaseRepositoryUrl;
protected String pushReleaseRepositoryUser;
protected String pushReleaseRepositoryPassword;
protected File localM2RepoPath;
protected File localWorkDir;
protected LocalRepository localM2Repo;
protected List<RemoteRepository> pullRemoteRepo;
protected InputStream assemblyTemplateFile;
protected String assemblyTemplate;
protected String assemblyDescriptionFileLocation;
protected String paasRepositoryId;
protected boolean deleteLocalRepoOnStartup = true;
public MvnConsumerConfigurer() {
}
public void init() throws IOException {
if (deleteLocalRepoOnStartup) {
deleteLocalRepo();
} else {
logger.info("Skipping local repo cleanup");
}
logger.info("initial config for Maven Connector");
this.localM2Repo = new LocalRepository(this.localM2RepoPath);
Validate.notEmpty(this.pullRepositoryUrls);
this.pullRemoteRepo = new ArrayList<RemoteRepository>();
initPullRepoInterval();
loadAssemblyTemplateFile();
}
public void deleteLocalRepo() throws IOException {
logger.info("Deleting any existing local Maven repository: {}", this.localM2RepoPath);
if (this.localM2RepoPath.isDirectory()) {
FileUtils.deleteDirectory(this.localM2RepoPath);
} else {
logger.info("Cannot delete local Maven repository: {}. It doesn't exist or not a directory", this.localM2RepoPath);
}
}
private void initPullRepoInterval() {
int repoCount=1;
for (String aPullRepoUrl: pullRepositoryUrls) {
RemoteRepository.Builder builder = new RemoteRepository.Builder("remoteRepo-" + repoCount++, "default", aPullRepoUrl);
RepositoryPolicy releasePolicy = getRepositoryPolicy(releaseRepositoryRefreshIntervalInMin);
builder.setReleasePolicy(releasePolicy);
RepositoryPolicy snapshotPolicy = getRepositoryPolicy(snapshotRepositoryRefreshIntervalInMin);
builder.setSnapshotPolicy(snapshotPolicy);
this.pullRemoteRepo.add(builder.build());
}
}
private static RepositoryPolicy getRepositoryPolicy(String repositoryRefreshIntervalInMin) {
return new RepositoryPolicy(true, RepositoryPolicy.UPDATE_POLICY_INTERVAL + ":" + repositoryRefreshIntervalInMin, RepositoryPolicy.CHECKSUM_POLICY_WARN);
}
public void loadAssemblyTemplateFile() {
Validate.notNull(assemblyTemplateFile, "assemblyTemplateFile should not be null");
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(assemblyTemplateFile));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
this.assemblyTemplate = sb.toString();
} catch (IOException e) {
logger.error(e.getLocalizedMessage());
throw new TechnicalException(e);
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
logger.error(e.getLocalizedMessage());
throw new TechnicalException(e);
}
}
}
public RemoteRepository getPullPrimaryRepository(){
assert(pullRemoteRepo!=null);
assert(pullRemoteRepo.size()>0);
return pullRemoteRepo.get(0);
}
/**
* IOC
*
*/
public void setPullRepositoryUrls(String[] repositoryUrl) {
this.pullRepositoryUrls = repositoryUrl;
}
/**
* IOC
*
* @param localM2RepoPath
*/
public void setLocalM2RepoPath(File localM2RepoPath) {
this.localM2RepoPath = localM2RepoPath;
}
/**
* IOC
*
* @param localWorkDir
*/
public void setLocalWorkDir(File localWorkDir) {
this.localWorkDir = localWorkDir;
}
public void setPushSnapshotRepositoryUrl(String snapshotRepositoryUrl) {
this.pushSnapshotRepositoryUrl = snapshotRepositoryUrl;
}
public void setPushReleaseRepositoryUrl(String releaseRepositoryUrl) {
this.pushReleaseRepositoryUrl = releaseRepositoryUrl;
}
public void setPushSnapshotRepositoryUser(String snapshotRepositoryUser) {
this.pushSnapshotRepositoryUser = snapshotRepositoryUser;
}
public void setPushSnapshotRepositoryPassword(String snapshotRepositoryPassword) {
this.pushSnapshotRepositoryPassword = snapshotRepositoryPassword;
}
public void setPushReleaseRepositoryUser(String releaseRepositoryUser) {
this.pushReleaseRepositoryUser = releaseRepositoryUser;
}
public void setPushReleaseRepositoryPassword(String releaseRepositoryPassword) {
this.pushReleaseRepositoryPassword = releaseRepositoryPassword;
}
public String getAssemblyDescriptionFileLocation() {
return assemblyDescriptionFileLocation;
}
public void setAssemblyDescriptionFileLocation(String assemblyDescriptionFileLocation) {
this.assemblyDescriptionFileLocation = assemblyDescriptionFileLocation;
}
public void setAssemblyTemplateFile(InputStream templateFile) {
this.assemblyTemplateFile = templateFile;
}
public String getAssemblyTemplate() {
return assemblyTemplate;
}
public LocalRepository getLocalM2Repo() {
return localM2Repo;
}
public List<RemoteRepository> getPullRemoteRepo() {
return pullRemoteRepo;
}
public String getReleaseRepositoryRefreshIntervalInMin() {
return releaseRepositoryRefreshIntervalInMin;
}
public void setReleaseRepositoryRefreshIntervalInMin(String pullReleaseRepositoryFrequencyInMin) {
this.releaseRepositoryRefreshIntervalInMin = pullReleaseRepositoryFrequencyInMin;
}
public String getSnapshotRepositoryRefreshIntervalInMin() {
return snapshotRepositoryRefreshIntervalInMin;
}
public void setSnapshotRepositoryRefreshIntervalInMin(String snapshotRepositoryRefreshIntervalInMin) {
this.snapshotRepositoryRefreshIntervalInMin = snapshotRepositoryRefreshIntervalInMin;
}
public String[] getPullRepositoryUrls() {
return pullRepositoryUrls;
}
public String getPushSnapshotRepositoryUrl() {
return pushSnapshotRepositoryUrl;
}
public String getPushSnapshotRepositoryUser() {
return pushSnapshotRepositoryUser;
}
public String getPushSnapshotRepositoryPassword() {
return pushSnapshotRepositoryPassword;
}
public String getPushReleaseRepositoryUrl() {
return pushReleaseRepositoryUrl;
}
public String getPushReleaseRepositoryUser() {
return pushReleaseRepositoryUser;
}
public String getPushReleaseRepositoryPassword() {
return pushReleaseRepositoryPassword;
}
public File getLocalM2RepoPath() {
return localM2RepoPath;
}
public File getLocalWorkDir() {
return localWorkDir;
}
public String getPaasRepositoryId() {
return paasRepositoryId;
}
public void setPaasRepositoryId(String paasRepositoryId) {
this.paasRepositoryId = paasRepositoryId;
}
public void setDeleteLocalRepoOnStartup(boolean deleteLocalRepoOnStartup) {
this.deleteLocalRepoOnStartup = deleteLocalRepoOnStartup;
}
}