/**
*
*/
package org.ariadne_eu.metadata.insert;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.Writer;
import org.apache.log4j.Logger;
import org.ariadne.config.PropertiesManager;
import org.ariadne_eu.utils.config.RepositoryConstants;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
/**
* @author gonzalo
*
*/
public class InsertMetadataFSImpl extends InsertMetadataImpl {
private static Logger log = Logger.getLogger(InsertMetadataFSImpl.class);
private String dirString;
void initialize() {
super.initialize();
try {
dirString = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_SPIFS_DIR + "." + getLanguage());
if (dirString == null)
dirString = PropertiesManager.getInstance().getProperty(RepositoryConstants.getInstance().MD_SPIFS_DIR);
if (dirString == null)
log.error("initialize failed: no " + RepositoryConstants.getInstance().MD_SPIFS_DIR + " found");
File dir = new File(dirString);
if (!dir.isDirectory())
log.error("initialize failed: " + RepositoryConstants.getInstance().MD_SPIFS_DIR + " invalid directory");
//TODO: check for valid lucene index
} catch (Throwable t) {
log.error("initialize: ", t);
}
}
@Override
public synchronized void insertMetadata(String identifier, String metadata, String collection) throws InsertMetadataException{
Reader in = new StringReader(metadata);
SAXBuilder builder = new SAXBuilder();
try {
Document doc = builder.build(in);
XMLOutputter outputter = new XMLOutputter();
Format format = Format.getPrettyFormat();
outputter.setFormat(format);
String output = outputter.outputString(doc);
String name = identifier.replaceAll(":", "_");
name = name.replaceAll("/", ".s.");
File folder = new File (dirString + collection );
folder.mkdir();
writeStringToFileInEncodingUTF8(output, folder.getAbsolutePath() + File.separator + name + ".xml");
log.info("insertMetadata:identifier:\"" + identifier + "\"");
} catch (JDOMException e) {
log.error("insertMetadata:id=" + identifier, e);
throw new InsertMetadataException(e);
} catch (IOException e) {
log.error("insertMetadata:id=" + identifier, e);
throw new InsertMetadataException(e);
}
}
public static void writeStringToFileInEncodingUTF8(String inputText,String outputFileName) throws IOException {
writeStringToFileInEncoding(inputText, outputFileName, "UTF-8");
}
public static void writeStringToFileInEncoding(String inputText, String outputFileName, String encoding) throws IOException {
try {
File result = new File(outputFileName);
FileOutputStream fos = new FileOutputStream(result);
Writer out = new OutputStreamWriter(fos, encoding);
out.write(inputText);
out.close();
fos.close();
} catch (IOException e) {
System.out.flush();
throw e;
}
}
}