/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* 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.
*
* The Original Code is OpenEMRConnect.
*
* The Initial Developer of the Original Code is International Training &
* Education Center for Health (I-TECH) <http://www.go2itech.org/>
*
* Portions created by the Initial Developer are Copyright (C) 2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** */
package ke.go.moh.oec.lib;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
/**
* Compress and decompress XML strings for more efficient transmission.
*
* @author Jim Grace
*/
public class Compresser {
static void compress(Message m) {
String xml = m.getXml();
byte[] xmlBytes = null;
try {
xmlBytes = m.getXml().getBytes("UTF-8");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Compresser.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] compressedXml = new byte[xmlBytes.length + 1000]; // Insure a minimum size.
m.setCompressedXml(compressedXml);
Deflater compresser = new Deflater();
compresser.setInput(xmlBytes);
compresser.finish();
int compressedXmlLength = compresser.deflate(compressedXml);
m.setCompressedXmlLength(compressedXmlLength);
compresser.end();
}
static void decompress(Message m) {
byte[] compressedXml = m.getCompressedXml();
int compressedXmlLength = m.getCompressedXmlLength();
Inflater decompresser = new Inflater();
decompresser.setInput(compressedXml, 0, compressedXmlLength);
byte[] inflatedBytes = new byte[60000];
int resultLength = 0;
try {
resultLength = decompresser.inflate(inflatedBytes);
} catch (DataFormatException ex) {
Logger.getLogger(HttpService.class.getName()).log(Level.SEVERE, "Error decompressing message: " + m.summarize(false), ex);
}
decompresser.end();
String xml = null;
try {
xml = new String(inflatedBytes, 0, resultLength, "UTF-8");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Compresser.class.getName()).log(Level.SEVERE, "Error decompressing message: " + m.summarize(false), ex);
}
m.setXml(xml);
}
}