org.openmrs.module.sync.serialization.FilePackage.java Source code

Java tutorial

Introduction

Here is the source code for org.openmrs.module.sync.serialization.FilePackage.java

Source

/**
 * 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;
    }

}