/** * */ 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.Date; import java.util.HashSet; import java.util.Set; import org.openntf.domino.DateTime; import org.openntf.domino.Document; import org.openntf.domino.Item; import org.openntf.domino.schema.IDominoType; import org.openntf.domino.schema.IItemDefinition; import org.openntf.domino.schema.IItemListener; import org.openntf.domino.schema.IItemValidation; import org.openntf.domino.schema.impl.DatabaseSchema.Flags; import org.openntf.domino.utils.DominoUtils; import org.openntf.domino.utils.Factory; public class ItemDefinition implements IItemDefinition, Externalizable { private String name_; private String defaultLabel_; private Class<? extends IDominoType> type_; private Set<Flags> flags_ = new HashSet<Flags>(); private Object defaultValue_; private ItemValidation validator_; private transient DatabaseSchema parentSchema_; public ItemDefinition() { } @Override public void setParent(final DatabaseSchema parent) { parentSchema_ = parent; } @Override public DatabaseSchema getParent() { return parentSchema_; } @Override public String getName() { return name_; } @Override public void setName(final String name) { name_ = name; } @Override public String getDefaultLabel() { return defaultLabel_; } @Override public void setDefaultLabel(final String defaultLabel) { defaultLabel_ = defaultLabel; } @Override public Class<? extends IDominoType> getType() { return type_; } @Override public void setType(final Class<? extends IDominoType> type) { type_ = type; } @Override public Set<Flags> getFlags() { return flags_; } @Override public void setFlags(final Set<Flags> flags) { flags_ = flags; } @Override public void addFlag(final Flags flag) { flags_.add(flag); } @Override public Object getDefaultValue() { return defaultValue_; } @Override public void setDefaultValue(final Object defaultValue) { defaultValue_ = defaultValue; } @Override public ItemValidation getValidator() { return validator_; } public void setValidator(final ItemValidation validator) { validator_ = validator; } /* * (non-Javadoc) * * @see java.io.Externalizable#readExternal(java.io.ObjectInput) */ @SuppressWarnings("unchecked") @Override public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException { name_ = in.readUTF(); defaultLabel_ = in.readUTF(); Class<?> cl = Class.forName(in.readUTF(), true, Factory.getClassLoader()); if (cl.isAssignableFrom(IDominoType.class)) { type_ = (Class<? extends IDominoType>) cl; } int flagCount = in.readInt(); for (int i = 0; i < flagCount; i++) { flags_.add((Flags) in.readObject()); } defaultValue_ = in.readObject(); validator_ = (ItemValidation) in.readObject(); validator_.setDefinition(this); } /* * (non-Javadoc) * * @see java.io.Externalizable#writeExternal(java.io.ObjectOutput) */ @Override public void writeExternal(final ObjectOutput out) throws IOException { out.writeUTF(name_); out.writeUTF(defaultLabel_); out.writeUTF(type_.getCanonicalName()); out.writeInt(flags_.size()); for (Flags flag : flags_) { out.writeObject(flag); } out.writeObject(defaultValue_); out.writeObject(validator_); } @Override public Item createDefaultItem(final Document doc, final DocumentDefinition def) { String name = getName(); Object defaultValue = getDefaultValue(); if (defaultValue == null) { Class<?> checkType = getType(); if (checkType.isArray()) { checkType = getType().getComponentType(); } if (checkType == Integer.TYPE || checkType.equals(Integer.class)) { defaultValue = 0; } else if (checkType == Long.TYPE || checkType.equals(Long.class)) { defaultValue = 0; } else if (checkType == Double.TYPE || checkType.equals(Double.class)) { defaultValue = 0; } else if (checkType == Float.TYPE || checkType.equals(Float.class)) { defaultValue = 0; } else if (checkType == Short.TYPE || checkType.equals(Short.class)) { defaultValue = 0; } else if (checkType == Long.TYPE || checkType.equals(Long.class)) { defaultValue = 0; } else if (checkType.equals(String.class)) { defaultValue = ""; } else if (checkType.equals(DateTime.class)) { DateTime dt = doc.getAncestorSession().createDateTime(new Date()); dt.setAnyDate(); dt.setAnyTime(); defaultValue = dt; } else { defaultValue = null; } } Item item = null; if (defaultValue != null) { item = doc.replaceItemValue(name, defaultValue); } else { try { item = doc.replaceItemValueCustomDataBytes(name, "", new byte[1]); } catch (IOException e) { DominoUtils.handleException(e); } } if (item != null) { if (!def.isDefaultSummary()) { item.setSummary(false); } for (Flags flag : getFlags()) { switch (flag) { case SUMMARY: item.setSummary(true); break; case AUTHORS: item.setAuthors(true); break; case READERS: item.setReaders(true); break; case PROTECTED: item.setProtected(true); break; case SIGNED: item.setSigned(true); break; case ENCRYPTED: item.setEncrypted(true); break; } } } return item; } /* (non-Javadoc) * @see org.openntf.domino.schema.IItemDefinition#getShortName() */ @Override public String getShortName() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see org.openntf.domino.schema.IItemDefinition#removeFlag(org.openntf.domino.schema.impl.DatabaseSchema.Flags) */ @Override public void removeFlag(final Flags flag) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.openntf.domino.schema.IItemDefinition#setValidator(org.openntf.domino.schema.IItemValidation) */ @Override public void setValidator(final IItemValidation validator) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see org.openntf.domino.schema.IItemDefinition#getItemListeners() */ @Override public Set<IItemListener> getItemListeners() { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see org.openntf.domino.schema.IItemDefinition#addItemListener(org.openntf.domino.schema.IItemListener) */ @Override public void addItemListener(final IItemListener listener) { // TODO Auto-generated method stub } }