package org.openntf.domino.nsfdata.impldxl.item;
import java.io.Serializable;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Set;
import org.openntf.domino.nsfdata.NSFItem;
import org.openntf.domino.utils.xml.XMLNode;
@SuppressWarnings("serial")
public abstract class AbstractDXLItem implements NSFItem, Serializable {
private final String name_;
private final Set<Flag> flags_;
private final boolean seal_;
private final int dupItemId_;
protected AbstractDXLItem(final XMLNode node, final int dupItemId) {
name_ = node.getAttribute("name");
seal_ = "true".equals(node.getAttribute("seal"));
// Translate the item node attributes to item flags
flags_ = EnumSet.noneOf(Flag.class);
if("true".equals(node.getAttribute("sealed"))) {
flags_.add(Flag.SEAL);
}
if("true".equals(node.getAttribute("authors"))) {
flags_.add(Flag.READWRITERS);
}
if("true".equals(node.getAttribute("names"))) {
flags_.add(Flag.NAMES);
}
if("true".equals(node.getAttribute("readers"))) {
flags_.add(Flag.READERS);
}
if("true".equals(node.getAttribute("protected"))) {
flags_.add(Flag.PROTECTED);
}
if("true".equals(node.getAttribute("summary"))) {
flags_.add(Flag.SUMMARY);
}
if("true".equals(node.getAttribute("sign"))) {
flags_.add(Flag.SIGN);
}
// May as well aim to be similar to the API
flags_.add(Flag.UNCHANGED);
dupItemId_ = dupItemId;
}
@Override
public String getName() {
return name_;
}
@Override
public Set<Flag> getFlags() {
return Collections.unmodifiableSet(flags_);
}
@Override
public int getSequence() {
// DXL does not contain sequence information for items
// TODO Change to throw UnsupportedOperationException()? Seems harsh, though
return -1;
}
@Override
public int getDupItemId() {
return dupItemId_;
}
@Override
public boolean isSeal() {
return seal_;
}
@Override
public abstract Type getType();
@Override
public abstract byte[] getBytes();
}