package org.openntf.domino.nsfdata.impldxl.item; import static javax.xml.bind.DatatypeConverter.parseBase64Binary; import java.util.Date; import java.util.EnumSet; import java.util.Set; import org.openntf.domino.utils.xml.XMLNode; public class DXLItemObjectFile extends DXLItemObject { private static final long serialVersionUID = 1L; public static enum HostType { MSDOS, BYTEARRAYPAGE, BYTEARRAYEXT, STREAM } public static enum CompressionType { NONE } public static enum Flag { SIGN, STOREDINDOC } private final HostType hostType_; private final CompressionType compressionType_; private final Set<Flag> flags_; private final String encoding_; private final String fileName_; private final long fileSize_; private final Date fileCreated_; private final Date fileModified_; private final byte[] value_; protected DXLItemObjectFile(final XMLNode node, final int dupItemId) { super(node, dupItemId); XMLNode objectNode = node.getFirstChildElement(); XMLNode fileNode = objectNode.getFirstChildElement(); String hostType = fileNode.getAttribute("hosttype"); if (!hostType.isEmpty()) { hostType_ = HostType.valueOf(hostType.toUpperCase()); } else { hostType_ = null; } String compressionType = fileNode.getAttribute("compression"); if (!compressionType.isEmpty()) { compressionType_ = CompressionType.valueOf(compressionType.toUpperCase()); } else { compressionType_ = null; } encoding_ = fileNode.getAttribute("encoding"); fileName_ = fileNode.getAttribute("name"); fileSize_ = Long.parseLong(fileNode.getAttribute("size"), 10); flags_ = EnumSet.noneOf(Flag.class); for (String flag : fileNode.getAttribute("flags").split("[,\\s]")) { if (!flag.trim().isEmpty()) { flags_.add(Flag.valueOf(flag.toUpperCase())); } } XMLNode createdNode = fileNode.selectSingleNode("./created/datetime"); if (!createdNode.getText().isEmpty()) { fileCreated_ = DXLItemFactory.createDateTime(createdNode).toDate(); } else { fileCreated_ = null; } XMLNode modifiedNode = fileNode.selectSingleNode("./modified/datetime"); if (!modifiedNode.getText().isEmpty()) { fileModified_ = DXLItemFactory.createDateTime(modifiedNode).toDate(); } else { fileModified_ = null; } value_ = parseBase64Binary(fileNode.selectSingleNode("./filedata").getText()); } @Override public byte[] getValue() { return value_; } @Override public byte[] getBytes() { return value_; } public HostType getHostType() { return hostType_; } public CompressionType getCompressionType() { return compressionType_; } public String getEncoding() { return encoding_; } public String getFileName() { return fileName_; } public long getFileSize() { return fileSize_; } public Date getFileCreated() { return fileCreated_; } public Date getFileModified() { return fileModified_; } }