/**
*
*/
package org.openntf.domino.schema.impl;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.openntf.domino.schema.IDatabaseSchema;
import org.openntf.domino.schema.IDocumentDefinition;
import org.openntf.domino.schema.IItemDefinition;
public class DocumentDefinition implements IDocumentDefinition, Externalizable {
private String name_; // will be used as Form field value
private final Set<String> itemDefinitionKeys_ = new HashSet<String>();
private transient Map<String, IItemDefinition> itemDefs_ = new ConcurrentHashMap<String, IItemDefinition>();
private final Map<String, String> overrideLabels_ = new HashMap<String, String>();
private boolean defaultSummary_ = true;
private transient IDatabaseSchema parentSchema_;
@SuppressWarnings("unused")
private DocumentValidator validator_;
public DocumentDefinition() {
}
@Override
public void setParent(final IDatabaseSchema parent) {
parentSchema_ = parent;
}
@Override
public IDatabaseSchema getParent() {
return parentSchema_;
}
@Override
public String getName() {
return name_;
}
@Override
public void setName(final String name) {
name_ = name;
}
@Override
public boolean isDefaultSummary() {
return defaultSummary_;
}
@Override
public void setDefaultSummary(final boolean defaultSummary) {
defaultSummary_ = defaultSummary;
}
@Override
public Map<String, IItemDefinition> getItemDefinitions() {
if (itemDefs_.isEmpty()) {
for (String key : getItemDefinitionKeys()) {
ItemDefinition id = parentSchema_.getItemDefinitions().get(key);
if (id != null) {
itemDefs_.put(key, id);
}
}
}
return itemDefs_;
}
@Override
public Set<String> getItemDefinitionKeys() {
return itemDefinitionKeys_;
}
public void setItemDefinitionKeys(final Set<String> itemDefinitionKeys) {
//TODO NTF - Not really sure this should even have a setter, honestly.
itemDefinitionKeys_.clear();
itemDefinitionKeys_.addAll(itemDefinitionKeys);
}
@Override
public void addItemDefinition(final IItemDefinition itemDef) {
if (itemDefs_ != null) {
itemDefs_.put(itemDef.getName(), itemDef);
}
String key = itemDef.getName();
addItemDefinitionKey(key);
}
public void addItemDefinitionKey(final String key) {
itemDefinitionKeys_.add(key);
}
@Override
public Map<String, String> getOverrideLabels() {
return overrideLabels_;
}
// public void setOverrideLabels(Map<String, String> overrideLabels) {
// overrideLabels_ = overrideLabels;
// }
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#readExternal(java.io.ObjectInput)
*/
@Override
public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
name_ = in.readUTF();
defaultSummary_ = in.readBoolean();
int defCount = in.readInt();
for (int i = 0; i < defCount; i++) {
itemDefinitionKeys_.add(in.readUTF());
}
int labelCount = in.readInt();
for (int i = 0; i < labelCount; i++) {
String key = in.readUTF();
String value = in.readUTF();
overrideLabels_.put(key, value);
}
}
/*
* (non-Javadoc)
*
* @see java.io.Externalizable#writeExternal(java.io.ObjectOutput)
*/
@Override
public void writeExternal(final ObjectOutput out) throws IOException {
out.writeUTF(name_);
out.writeBoolean(defaultSummary_);
out.writeInt(itemDefinitionKeys_.size());
for (String key : itemDefinitionKeys_) {
out.writeUTF(key);
}
out.writeInt(overrideLabels_.size());
for (Map.Entry<String, String> entry : overrideLabels_.entrySet()) {
out.writeUTF(entry.getKey());
out.writeUTF(entry.getValue());
}
}
}