package org.openntf.domino.big.impl;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.openntf.domino.Item;
import org.openntf.domino.Item.Flags;
import org.openntf.domino.Item.Type;
public class ItemType implements org.openntf.domino.big.ItemType {
private Item.Type lotusType_;
private byte lotusFlags_;
public ItemType() {
}
public ItemType(final org.openntf.domino.Item prototype) {
lotusFlags_ = (byte) Item.Flags.getFlags(prototype);
lotusType_ = prototype.getTypeEx();
}
public boolean validateItem(final org.openntf.domino.Item candidate) {
byte flags = (byte) Item.Flags.getFlags(candidate);
Item.Type type = candidate.getTypeEx();
return flags == lotusFlags_ && type == lotusType_;
}
@Override
public boolean isProtected() {
if (lotusFlags_ > 0) {
int val = Item.Flags.PROTECTED.getValue();
return ((lotusFlags_ & val) == Item.Flags.PROTECTED.getValue());
} else {
return false;
}
}
@Override
public boolean isNames() {
if (lotusFlags_ > 0) {
int val = Item.Flags.NAMES.getValue();
return ((lotusFlags_ & val) == Item.Flags.NAMES.getValue());
} else {
return false;
}
}
@Override
public boolean isAuthors() {
if (lotusFlags_ > 0) {
int val = Item.Flags.AUTHORS.getValue();
return ((lotusFlags_ & val) == Item.Flags.AUTHORS.getValue());
} else {
return false;
}
}
@Override
public boolean isReaders() {
if (lotusFlags_ > 0) {
int val = Item.Flags.READERS.getValue();
return ((lotusFlags_ & val) == Item.Flags.READERS.getValue());
} else {
return false;
}
}
@Override
public boolean isSummary() {
if (lotusFlags_ > 0) {
int val = Item.Flags.SUMMARY.getValue();
return ((lotusFlags_ & val) == Item.Flags.SUMMARY.getValue());
} else {
return false;
}
}
@Override
public boolean isEncrypted() {
if (lotusFlags_ > 0) {
int val = Item.Flags.ENCRYPTED.getValue();
return ((lotusFlags_ & val) == Item.Flags.ENCRYPTED.getValue());
} else {
return false;
}
}
@Override
public boolean isSigned() {
if (lotusFlags_ > 0) {
int val = Item.Flags.SIGNED.getValue();
return ((lotusFlags_ & val) == Item.Flags.SIGNED.getValue());
} else {
return false;
}
}
@Override
public Type getType() {
return lotusType_;
}
@Override
public Flags[] getFlags() {
int size = Integer.bitCount(lotusFlags_);
Flags[] result = new Flags[size];
int current = 0;
if (isSummary())
result[current++] = Flags.SUMMARY;
if (isNames())
result[current++] = Flags.NAMES;
if (isAuthors())
result[current++] = Flags.AUTHORS;
if (isReaders())
result[current++] = Flags.READERS;
if (isProtected())
result[current++] = Flags.PROTECTED;
if (isSigned())
result[current++] = Flags.SIGNED;
if (isEncrypted())
result[current++] = Flags.ENCRYPTED;
return result;
}
@Override
public Class<?> getJavaType() {
// TODO Auto-generated method stub
return null;
}
@Override
public void setType(final Item.Type type) {
lotusType_ = type;
}
@Override
public void setFlags(final int flags) {
lotusFlags_ = (byte) flags;
}
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
lotusFlags_ = in.readByte();
// To keep compatibility, we read and write the item type as short
lotusType_ = Item.Type.valueOf(in.readShort());
}
@Override
public void writeExternal(final ObjectOutput out) throws IOException {
out.writeByte(lotusFlags_);
out.writeShort((short) lotusType_.getValue());
}
}