/* * Copyright (C) 2015 Actor LLC. <https://actor.im> */ package im.actor.core.entity.content.internal; import java.io.IOException; import im.actor.runtime.bser.BserObject; import im.actor.runtime.bser.BserParser; import im.actor.runtime.bser.BserValues; import im.actor.runtime.bser.BserWriter; import im.actor.runtime.bser.DataInput; import im.actor.runtime.bser.DataOutput; public abstract class AbsLocalContent extends BserObject { private static final int CONTENT_DOC = 0; private static final int CONTENT_PHOTO = 1; private static final int CONTENT_VIDEO = 2; private static final int CONTENT_VOICE = 3; private static final int CONTENT_ANIMATION = 4; public static AbsLocalContent loadContainer(byte[] data) throws IOException { BserValues values = new BserValues(BserParser.deserialize(new DataInput(data))); int type = values.getInt(1); byte[] content = values.getBytes(2); if (type == CONTENT_DOC) { return new LocalDocument(content); } else if (type == CONTENT_PHOTO) { return new LocalPhoto(content); } else if (type == CONTENT_VIDEO) { return new LocalVideo(content); } else if (type == CONTENT_VOICE) { return new LocalVoice(content); } else if (type == CONTENT_ANIMATION) { return new LocalAnimation(content); } else { throw new IOException("Unknown type"); } } public byte[] buildContainer() throws IOException { DataOutput res = new DataOutput(); BserWriter writer = new BserWriter(res); if (this instanceof LocalPhoto) { writer.writeInt(1, CONTENT_PHOTO); } else if (this instanceof LocalVideo) { writer.writeInt(1, CONTENT_VIDEO); } else if (this instanceof LocalDocument) { writer.writeInt(1, CONTENT_DOC); } else if (this instanceof LocalVoice) { writer.writeInt(1, CONTENT_VOICE); } else if (this instanceof LocalAnimation) { writer.writeInt(1, CONTENT_ANIMATION); } else { throw new IOException("Unknown type"); } writer.writeBytes(2, toByteArray()); return res.toByteArray(); } }