package org.openntf.domino.nsfdata;
import java.util.Set;
public interface NSFItem {
/**
* The item class based on the API documentation (CLASS_xxx).
*/
public static enum ItemClass {
NOCOMPUTE(0 << 8), ERROR(1 << 8), UNAVAILABLE(2 << 8), NUMBER(3 << 8), TIME(4 << 8), TEXT(5 << 8), FORMULA(6 << 8), USERID(7 << 8);
public static int CLASS_MASK = 0xff0;
private final int value_;
private ItemClass(final int value) {
value_ = value;
}
public int getValue() {
return value_;
}
}
/**
* The item type based on the API documentation (TYPE_xxx).
*/
public static enum Type {
ERROR(ItemClass.ERROR, 0), UNAVAILABLE(ItemClass.ERROR, 0), TEXT(ItemClass.TEXT, 0), TEXT_LIST(ItemClass.TEXT, 1),
NUMBER(ItemClass.NUMBER, 0), NUMBER_RANGE(ItemClass.NUMBER, 1), TIME(ItemClass.TIME, 0), TIME_RANGE(ItemClass.TIME, 1),
FORMULA(ItemClass.FORMULA, 0), USERID(ItemClass.USERID, 0), INVALID_OR_UNKNOWN(ItemClass.NOCOMPUTE, 0),
COMPOSITE(ItemClass.NOCOMPUTE, 1), COLLATION(ItemClass.NOCOMPUTE, 2), OBJECT(ItemClass.NOCOMPUTE, 3),
NOTEREF_LIST(ItemClass.NOCOMPUTE, 4), VIEW_FORMAT(ItemClass.NOCOMPUTE, 5), ICON(ItemClass.NOCOMPUTE, 6),
NOTELINK_LIST(ItemClass.NOCOMPUTE, 7), SIGNATURE(ItemClass.NOCOMPUTE, 8), SEAL(ItemClass.NOCOMPUTE, 9),
SEALDATA(ItemClass.NOCOMPUTE, 10), SEAL_LIST(ItemClass.NOCOMPUTE, 11), HIGHLIGHTS(ItemClass.NOCOMPUTE, 12),
WORKSHEET_DATA(ItemClass.NOCOMPUTE, 13), USERDATA(ItemClass.NOCOMPUTE, 14), QUERY(ItemClass.NOCOMPUTE, 15),
ACTION(ItemClass.NOCOMPUTE, 16), ASSISTANT_INFO(ItemClass.NOCOMPUTE, 17), VIEWMAP_DATASET(ItemClass.NOCOMPUTE, 18),
VIEWMAP_LAYOUT(ItemClass.NOCOMPUTE, 19), LSOBJECT(ItemClass.NOCOMPUTE, 20), HTML(ItemClass.NOCOMPUTE, 21),
SCHED_LIST(ItemClass.NOCOMPUTE, 22), CALENDAR_FORMAT(ItemClass.NOCOMPUTE, 24), MIME_PART(ItemClass.NOCOMPUTE, 25),
RFC822_TEXT(ItemClass.TEXT, 2), TYPE_SEAL2(ItemClass.NOCOMPUTE, 31),
/**
* This appears to be the type code used for Outline data (which seem to be called "sitemaps"), but is not actually an official
* constant in the API
*/
SITEMAP(ItemClass.NOCOMPUTE, 26);
private final ItemClass itemClass_;
private final int valueOffset_;
private Type(final ItemClass itemClass, final int valueOffset) {
itemClass_ = itemClass;
valueOffset_ = valueOffset;
}
public int getValue() {
return itemClass_.getValue() + valueOffset_;
}
public ItemClass getItemClass() {
return itemClass_;
}
public static Type valueOf(final int typeCode) {
for (Type type : values()) {
if (type.getValue() == typeCode) {
return type;
}
}
throw new IllegalArgumentException("No matching Type found for type code " + typeCode);
}
}
/**
* The item flags based on the API documentation (ITEM_xxx).
*/
// TODO replace with org.openntf.domino.Item.Flags if possible
public static enum Flag {
SIGN(0x0001), SEAL(0x0002), SUMMARY(0x0004), READWRITERS(0x0020), NAMES(0x0020), PLACEHOLDER(0x0100), PROTECTED(0x0200),
READERS(0x0400), UNCHANGED(0x1000);
private final int value_;
private Flag(final int value) {
value_ = value;
}
public int getValue() {
return value_;
}
}
/**
* @return The name of the item.
*/
String getName();
/**
* @return A Set containing the Notes API flags applied to the item, as Flag enums.
*/
Set<Flag> getFlags();
/**
* @return Whether the item is flagged for encryption on save.
*/
boolean isSeal();
/**
* @return The item's editing sequence number, or -1 if unsupported by the underlying data.
*/
int getSequence();
/**
* Optional operation.
*/
int getDupItemId();
/**
* @return The Notes API type of the item, as a Type enum.
*/
Type getType();
/**
* @return A byte array of the Notes API representation of the data.
*/
byte[] getBytes();
/**
* @return The item's data as a Java-friendly object, based on the item type.
*/
Object getValue();
}