/*
* Weblounge: Web Content Management System
* Copyright (c) 2003 - 2011 The Weblounge Team
* http://entwinemedia.com/weblounge
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package ch.entwine.weblounge.maven;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
*
*
* @goal import
*/
public class MyGengoI18nImport extends AbstractMojo {
/**
* Name of the site.
*
* @parameter alias="site"
* @required
*/
private String siteId;
/**
* Location of the site folder.
*
* @parameter alias="site-root"
* @required
*/
private File siteRoot;
/**
* URL pointing to the myGengo i18n files zip package.
*
* @parameter alias="mygengo-url"
* @required
*/
private URL myGengoUrl;
/**
* Username used to access the myGengo i18n files.
*
* @parameter alias="mygengo-username"
*/
private String myGengoUsername;
/**
* Password used to access the myGengo i18n files.
*
* @parameter alias="mygengo-password"
*/
private String myGengoPassword;
/**
* Language to use as default
*
* @parameter
*/
private String defaultLang;
/** the logging facility */
private Log log = getLog();
/**
* {@inheritDoc}
*
* @see org.apache.maven.plugin.Mojo#execute()
*/
public void execute() throws MojoExecutionException, MojoFailureException {
log.info("Start importing i18n files from myGengo.");
URLConnection conn = getMyGengoConn();
ZipFile zip = extractZipFileFromConn(conn);
if (zip != null) {
Enumeration<? extends ZipEntry> entries = zip.entries();
ZipEntry entry;
while (entries.hasMoreElements()) {
try {
entry = entries.nextElement();
importLanguageFile(entry.getName(), zip.getInputStream(entry));
} catch (FileNotFoundException e) {
log.error("Error while reading zip file.");
} catch (IOException e) {
log.error("Error while reading zip file.");
}
}
}
log.info("Importing i18n files from myGengo finished.");
}
private void importLanguageFile(String name, InputStream file) {
String lang = name.substring(0, name.indexOf("/"));
String filename = name.substring(name.indexOf("/") + 1);
String path;
if (filename.startsWith(siteId)) {
log.info("Importing i18n file " + name);
if ((siteId + "_site.xml").equals(filename)) {
if (StringUtils.equalsIgnoreCase(lang, defaultLang))
path = "/i18n/message.xml";
else
path = "/i18n/message_" + lang + ".xml";
} else {
String filenameNoSite = filename.substring(filename.indexOf("_") + 1);
String module = filenameNoSite.substring(filenameNoSite.indexOf("_") + 1, filenameNoSite.indexOf("."));
if (StringUtils.equalsIgnoreCase(lang, defaultLang))
path = "/modules/" + module + "/i18n/message.xml";
else
path = "/modules/" + module + "/i18n/message_" + lang + ".xml";
}
File dest = new File(siteRoot, path);
try {
FileUtils.forceMkdir(dest.getParentFile());
if (!dest.exists())
dest.createNewFile();
IOUtils.copy(file, new FileOutputStream(dest));
} catch (IOException e) {
log.error("Error importing i18n file " + name);
return;
}
}
}
private ZipFile extractZipFileFromConn(URLConnection conn) {
if (conn != null) {
try {
File temp = File.createTempFile("mygengo-i18n", ".zip");
temp.deleteOnExit();
FileOutputStream fos = new FileOutputStream(temp);
IOUtils.copy(conn.getInputStream(), fos);
return new ZipFile(temp);
} catch (IOException e) {
log.error("Error reading zip file from response.");
return null;
}
} else {
return null;
}
}
private URLConnection getMyGengoConn() {
// Request MyGengo i18n file
URLConnection conn;
try {
conn = myGengoUrl.openConnection();
if (StringUtils.isNotBlank(myGengoUsername) && StringUtils.isNotBlank(myGengoPassword))
conn.setRequestProperty("Authorization", "Basic " + (new Base64()).encode((myGengoUsername + ":" + myGengoPassword).getBytes()).toString());
} catch (IOException e) {
log.error("Error getting zip file from myGengo.");
return null;
}
return conn;
}
}