/**
* 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.maven;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Settings;
import org.apache.maven.settings.io.DefaultSettingsWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.francetelecom.clara.cloud.commons.TechnicalException;
import com.francetelecom.clara.cloud.mvn.consumer.MvnConsumerConfigurer;
public class SettingsGenerator {
private static Logger logger = LoggerFactory.getLogger(SettingsGenerator.class);
String localRepository;
String mirrorId;
String mirrorUrl;
String releaseRepositoryUser;
String releaseRepositoryPassword;
String snapshotRepositoryPassword;
String snapshotRepositoryUser;
public SettingsGenerator(MvnConsumerConfigurer mvnConsumerConfigurer) {
mirrorId = mvnConsumerConfigurer.getPaasRepositoryId();
localRepository = mvnConsumerConfigurer.getLocalM2RepoPath().getAbsolutePath();
mirrorUrl = mvnConsumerConfigurer.getPullPrimaryRepository().getUrl();
releaseRepositoryUser = mvnConsumerConfigurer.getPushReleaseRepositoryUser();
releaseRepositoryPassword = mvnConsumerConfigurer.getPushReleaseRepositoryPassword();
snapshotRepositoryUser = mvnConsumerConfigurer.getPushSnapshotRepositoryUser();
snapshotRepositoryPassword = mvnConsumerConfigurer.getPushSnapshotRepositoryPassword();
}
/**
* methode to generate a custom mvn consumer settings.xml file
*
* @return
*/
private String generateSettingsXml() {
Settings settings = new Settings();
settings.setLocalRepository(localRepository);
//
// <mirror>
// <id>FTRDProxy_central</id>
// <mirrorOf>central</mirrorOf>
// <name>FTRD Maven Proxy mirroring central (maven 2) repository</name>
// </mirror>
//
Mirror mirror = new Mirror();
mirror.setId(mirrorId);
mirror.setName("Paas Maven Repo");
mirror.setUrl(mirrorUrl);
mirror.setMirrorOf("*");
settings.getMirrors().add(mirror);
List<org.apache.maven.settings.Server> servers = new ArrayList<org.apache.maven.settings.Server>();
org.apache.maven.settings.Server paasInhouse = new org.apache.maven.settings.Server();
paasInhouse.setId("paas.push.release.repo");
paasInhouse.setUsername(releaseRepositoryUser);
paasInhouse.setPassword(releaseRepositoryPassword);
servers.add(paasInhouse);
org.apache.maven.settings.Server paasInhouseSnapshot = new org.apache.maven.settings.Server();
paasInhouseSnapshot.setId("paas.push.snapshot.repo");
paasInhouseSnapshot.setUsername(snapshotRepositoryUser);
paasInhouseSnapshot.setPassword(snapshotRepositoryPassword);
servers.add(paasInhouseSnapshot);
settings.setServers(servers);
DefaultSettingsWriter settingsWriter = new DefaultSettingsWriter();
try {
StringWriter aWriter = new StringWriter();
settingsWriter.write(aWriter, null, settings);
logger.info("settings xml for project sucessfully generated");
return aWriter.toString();
} catch (IOException e) {
logger.error("settings.xml construction failure, JaxbException :" + e.getMessage());
throw new TechnicalException(e);
}
}
public File writeSettings(String settingsContent, String settingsFilename) throws IOException {
File settingsFile = new File(settingsFilename);
FileUtils.writeStringToFile(settingsFile, settingsContent);
return settingsFile;
}
public File generateAndWrite(String settingsFilename) {
File settingsFile=null;
String settingsContent = generateSettingsXml();
try {
settingsFile=writeSettings(settingsContent, settingsFilename);
} catch (IOException e) {
new TechnicalException("Cannot write generated settings file.", e);
}
if (settingsFile == null) {
throw new TechnicalException("Cannot generate settings. Unknown reason.");
}
return settingsFile;
}
}