/**
* The contents of this file are subject to the OpenMRS Public License
* Version 1.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://license.openmrs.org
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* Copyright (C) OpenMRS, LLC. All Rights Reserved.
*/
package org.openmrs.module.sync.serialization;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* Represents a set of serialized objects with a disposition
*/
public class FilePackage extends Package
{
private static Log log = LogFactory.getLog(FilePackage.class);
private String contentsBeforeWrite;
public FilePackage()
{
}
public String getContentsBeforeWrite() {
return contentsBeforeWrite;
}
public void setContentsBeforeWrite(String contentsBeforeWrite) {
this.contentsBeforeWrite = contentsBeforeWrite;
}
/** Save the package as files in a folder
* @param root folder which the package will be saved within
* @return success/failure
* @throws io, other exceptions
*/
public boolean savePackage(String path) throws IOException, Exception
{
boolean result = false;
File f = new File(path);
if (!f.isDirectory())
{
File p = new File(path);
p.mkdirs();
}
Iterator<Map.Entry<String, Record>> it = m_records.entrySet().iterator();
while (it!=null && it.hasNext())
{
Map.Entry<String, Record> me = it.next();
Record r = (Record)me.getValue();
byte bits[] = r.toString().getBytes();
writeFile(new File(f, r.getName() + ".xml"), bits, bits.length);
}
return result;
}
public String savePackage(File f, boolean writeFileToo) throws IOException, Exception
{
String result = null;
if ( writeFileToo ) {
if (!f.isDirectory())
{
f.mkdirs();
}
}
Iterator<Map.Entry<String, Record>> it = m_records.entrySet().iterator();
while (it!=null && it.hasNext())
{
Map.Entry<String, Record> me = it.next();
Record r = (Record)me.getValue();
result = r.toString();
if ( writeFileToo ) {
byte bits[] = result.getBytes();
writeFile(new File(f, r.getName() + ".xml"), bits, bits.length);
}
}
return result;
}
private boolean writeFile(File f, byte bits[], int len)
{
FileOutputStream fos = null;
DataOutputStream dos = null;
try {
// IO time
fos = new FileOutputStream(f);
dos = new DataOutputStream(fos);
dos.write(bits, 0, len);
}
catch (Exception e) {
log.error("Could not write file: " + f.getAbsolutePath(), e);
return false;
}
finally {
try {
dos.close();
} catch (Exception ee) {}
try {
fos.close();
} catch (Exception ee) {}
}
return true;
}
}