/*
* Copyright 2009 Brian Pellin.
*
* This file is part of KeePassDroid.
*
* KeePassDroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* KeePassDroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with KeePassDroid. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.keepassdroid.database.save;
import java.io.IOException;
import java.io.OutputStream;
import com.keepassdroid.database.PwGroupV3;
import com.keepassdroid.stream.LEDataOutputStream;
import com.keepassdroid.utils.Types;
public class PwGroupOutputV3 {
// Constants
public static final byte[] GROUPID_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(1);
public static final byte[] NAME_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(2);
public static final byte[] CREATE_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(3);
public static final byte[] MOD_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(4);
public static final byte[] ACCESS_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(5);
public static final byte[] EXPIRE_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(6);
public static final byte[] IMAGEID_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(7);
public static final byte[] LEVEL_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(8);
public static final byte[] FLAGS_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(9);
public static final byte[] END_FIELD_TYPE = LEDataOutputStream.writeUShortBuf(0xFFFF);
public static final byte[] LONG_FOUR = LEDataOutputStream.writeIntBuf(4);
public static final byte[] GROUPID_FIELD_SIZE = LONG_FOUR;
public static final byte[] DATE_FIELD_SIZE = LEDataOutputStream.writeIntBuf(5);
public static final byte[] IMAGEID_FIELD_SIZE = LONG_FOUR;
public static final byte[] LEVEL_FIELD_SIZE = LEDataOutputStream.writeIntBuf(2);
public static final byte[] FLAGS_FIELD_SIZE = LONG_FOUR;
public static final byte[] ZERO_FIELD_SIZE = LEDataOutputStream.writeIntBuf(0);
private OutputStream mOS;
private PwGroupV3 mPG;
/** Output the PwGroupV3 to the stream
* @param pg
* @param os
*/
public PwGroupOutputV3(PwGroupV3 pg, OutputStream os) {
mPG = pg;
mOS = os;
}
public void output() throws IOException {
//NOTE: Need be to careful about using ints. The actual type written to file is a unsigned int, but most values can't be greater than 2^31, so it probably doesn't matter.
// Group ID
mOS.write(GROUPID_FIELD_TYPE);
mOS.write(GROUPID_FIELD_SIZE);
mOS.write(LEDataOutputStream.writeIntBuf(mPG.groupId));
// Name
mOS.write(NAME_FIELD_TYPE);
Types.writeCString(mPG.name, mOS);
// Create date
mOS.write(CREATE_FIELD_TYPE);
mOS.write(DATE_FIELD_SIZE);
mOS.write(mPG.tCreation.getCDate());
// Modification date
mOS.write(MOD_FIELD_TYPE);
mOS.write(DATE_FIELD_SIZE);
mOS.write(mPG.tLastMod.getCDate());
// Access date
mOS.write(ACCESS_FIELD_TYPE);
mOS.write(DATE_FIELD_SIZE);
mOS.write(mPG.tLastAccess.getCDate());
// Expiration date
mOS.write(EXPIRE_FIELD_TYPE);
mOS.write(DATE_FIELD_SIZE);
mOS.write(mPG.tExpire.getCDate());
// Image ID
mOS.write(IMAGEID_FIELD_TYPE);
mOS.write(IMAGEID_FIELD_SIZE);
mOS.write(LEDataOutputStream.writeIntBuf(mPG.icon.iconId));
// Level
mOS.write(LEVEL_FIELD_TYPE);
mOS.write(LEVEL_FIELD_SIZE);
mOS.write(LEDataOutputStream.writeUShortBuf(mPG.level));
// Flags
mOS.write(FLAGS_FIELD_TYPE);
mOS.write(FLAGS_FIELD_SIZE);
mOS.write(LEDataOutputStream.writeIntBuf(mPG.flags));
// End
mOS.write(END_FIELD_TYPE);
mOS.write(ZERO_FIELD_SIZE);
}
}