Mercurial > dive4elements > framework
diff artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultArtifactSerializer.java @ 41:5e4bc24ea438
Made serilization more flexible. DB update required!!!
Fixed problem with touching artifacts in database.
artifacts/trunk@119 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 23 Sep 2009 16:55:12 +0000 |
parents | |
children | 48d1a9a082c2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifact-database/src/main/java/de/intevation/artifactdatabase/DefaultArtifactSerializer.java Wed Sep 23 16:55:12 2009 +0000 @@ -0,0 +1,98 @@ +package de.intevation.artifactdatabase; + +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactSerializer; + +import java.io.InputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; + +import java.util.zip.GZIPOutputStream; +import java.util.zip.GZIPInputStream; + +import org.apache.log4j.Logger; + +/** + * @author Sascha L. Teichmann (sascha.teichmann@intevation.de) + */ +public class DefaultArtifactSerializer +implements ArtifactSerializer +{ + private static Logger logger = + Logger.getLogger(DefaultArtifactSerializer.class); + + public static final ArtifactSerializer INSTANCE = + new DefaultArtifactSerializer(); + + public DefaultArtifactSerializer() { + } + + public Artifact fromBytes(byte [] bytes) { + + if (bytes == null) { + return null; + } + + ObjectInputStream ois = null; + + try { + ByteArrayInputStream bis = new ByteArrayInputStream(bytes); + GZIPInputStream gis = new GZIPInputStream(bis); + ois = getObjectInputStream(gis); + + return (Artifact)ois.readObject(); + } + catch (IOException ioe) { + logger.error(ioe.getLocalizedMessage(), ioe); + } + catch (ClassNotFoundException cnfe) { + logger.error(cnfe.getLocalizedMessage(), cnfe); + } + catch (ClassCastException cce) { + logger.error(cce.getLocalizedMessage(), cce); + } + finally { + if (ois != null) { + try { ois.close(); } + catch (IOException ioe) { } + } + } + + return null; + } + + public byte [] toBytes(Artifact artifact) { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + GZIPOutputStream gos = new GZIPOutputStream(bos); + ObjectOutputStream oos = getObjectOutputStream(gos); + + oos.writeObject(artifact); + oos.flush(); + oos.close(); + + return bos.toByteArray(); + } + catch (IOException ioe) { + logger.error(ioe.getLocalizedMessage(), ioe); + throw new RuntimeException(ioe); + } + } + + protected ObjectInputStream getObjectInputStream(InputStream is) + throws IOException + { + return new ObjectInputStream(is); + } + + protected ObjectOutputStream getObjectOutputStream(OutputStream os) + throws IOException + { + return new ObjectOutputStream(os); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: