package lucee.runtime.type.scope.storage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import lucee.commons.collection.MapPro;
import lucee.commons.io.IOUtil;
import lucee.runtime.exp.PageException;
import lucee.runtime.op.Caster;
import lucee.runtime.type.Collection;
public class IKStorageValue implements Serializable {
private static final long serialVersionUID = 2728185742217909233L;
private static final byte[] EMPTY = new byte[0];
private transient MapPro<Collection.Key,IKStorageScopeItem> value;
private long lastModified;
private final byte[] barr;
public IKStorageValue(MapPro<Collection.Key,IKStorageScopeItem> value) throws PageException {
this.value=value;
this.barr=serialize(value);
this.lastModified=System.currentTimeMillis();
}
public long lastModified() {
return lastModified;
}
public MapPro<Collection.Key,IKStorageScopeItem> getValue() throws PageException {
if(value==null) {
if(barr.length==0) return null;
value=deserialize(barr);
}
return value;
}
private static MapPro<Collection.Key,IKStorageScopeItem> deserialize(byte[] barr) throws PageException {
if(barr==null || barr.length==0) return null;
ObjectInputStream ois=null;
MapPro<Collection.Key,IKStorageScopeItem> data=null;
try {
ois = new ObjectInputStream(new ByteArrayInputStream(barr));
data=(MapPro<Collection.Key,IKStorageScopeItem>)ois.readObject();
}
catch(Exception e) {
throw Caster.toPageException(e);
}
finally {
IOUtil.closeEL(ois);
}
return data;
}
private static byte[] serialize(MapPro<Collection.Key,IKStorageScopeItem> data) throws PageException {
if(data==null) return EMPTY;
ByteArrayOutputStream os = new ByteArrayOutputStream();
ObjectOutputStream oos=null;
try {
oos = new ObjectOutputStream(os);
oos.writeObject(data);
}
catch(Exception e){
throw Caster.toPageException(e);
}
finally {
IOUtil.closeEL(oos);
}
return os.toByteArray();
}
}