package org.swellrt.model.generic;
import com.google.common.base.Preconditions;
import org.waveprotocol.wave.model.document.Doc;
import org.waveprotocol.wave.model.document.Document;
import org.waveprotocol.wave.model.document.util.DocHelper;
import org.waveprotocol.wave.model.wave.ParticipantId;
import java.util.Date;
import java.util.HashMap;
/**
*
* @author pablojan@gmail (Pablo Ojanguren)
*
*/
public class MetadataContainer {
public static final String TAG_METADATA = "metadata";
//
// <metadata pc="" tc="" pm="" tm="" ap="" acl="" p="" />
//
protected static final String ATTR_PARTICIPANT_CREATE = "pc";
protected static final String ATTR_TIMESTAMP_CREATE = "tc";
protected static final String ATTR_PARTICIPANT_MOD = "pm";
protected static final String ATTR_TIMESTAMP_MOD = "pm";
protected static final String ATTR_ACCESS_POLICY = "ap";
protected static final String ATTR_ACCESS_CONTROL_LIST = "acl";
public static final String ATTR_PATH = "p";
/**
* Create or load a metadata section from a document
*
* @param document
* @param creator
* @param path
* @return
*/
public static MetadataContainer get(Document document) {
Preconditions.checkArgument(document != null, "Document is null");
Doc.E eltMetadata = DocHelper.getElementWithTagName(document, TAG_METADATA);
String now = String.valueOf((new Date()).getTime());
if (eltMetadata == null) {
HashMap<String, String> attributes = new HashMap<String, String>();
attributes.put(ATTR_PARTICIPANT_CREATE, "");
attributes.put(ATTR_TIMESTAMP_CREATE, "");
attributes.put(ATTR_PARTICIPANT_MOD, "");
attributes.put(ATTR_TIMESTAMP_MOD, now);
attributes.put(ATTR_ACCESS_POLICY, "default");
attributes.put(ATTR_ACCESS_CONTROL_LIST, "");
attributes.put(ATTR_PATH, "");
eltMetadata =
document.createChildElement(document.getDocumentElement(), TAG_METADATA, attributes);
}
return new MetadataContainer(document, eltMetadata);
}
private final Document document;
private final Doc.E element;
protected MetadataContainer(Document document, Doc.E metadataElement) {
this.document = document;
this.element = metadataElement;
}
public String getPath() {
return document.getAttribute(element, ATTR_PATH);
}
public void setPath(String path) {
document.setElementAttribute(element, ATTR_PATH, path);
}
public void setDetachedPath() {
document.setElementAttribute(element, ATTR_PATH, "detached:" + getPath());
}
public void setCreator(ParticipantId creator) {
document.setElementAttribute(element, ATTR_PARTICIPANT_CREATE, creator.getAddress());
document.setElementAttribute(element, ATTR_TIMESTAMP_CREATE,
String.valueOf((new Date()).getTime()));
}
public void setModifier(ParticipantId modifier) {
document.setElementAttribute(element, ATTR_PARTICIPANT_MOD, modifier.getAddress());
document.setElementAttribute(element, ATTR_TIMESTAMP_MOD,
String.valueOf((new Date()).getTime()));
}
}