package org.openntf.domino.big.impl;
import static org.openntf.domino.big.NoteCoordinate.Utils.insertByteArray;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import org.openntf.domino.Document;
import org.openntf.domino.View;
import org.openntf.domino.ViewEntry;
import org.openntf.domino.ViewNavigator;
import org.openntf.domino.exceptions.UnimplementedException;
public class ViewEntryCoordinate implements org.openntf.domino.big.ViewEntryCoordinate {
public static final char POS_SEP = '.';
private NoteCoordinate parentViewCoordinate_;
private String position_;
private String entryType_;
private transient ViewNavigator sourceNav_;
// private transient ViewEntry sourceEntry_;
public ViewEntryCoordinate(final ViewEntry viewEntry) {
// System.out.println("A ViewEntryCoordinate is being created with a viewentry");
// new Throwable().printStackTrace();
parentViewCoordinate_ = new NoteCoordinate(viewEntry.getParentView());
position_ = viewEntry.getPosition();
if (viewEntry.isCategory()) {
entryType_ = "EC";
} else if (viewEntry.isDocument()) {
entryType_ = "ED";
} else if (viewEntry.isTotal()) {
entryType_ = "ET";
} else {
entryType_ = "EU";
}
}
public ViewEntryCoordinate(final CharSequence metaversalid) {
// if (metaversalid.length() < 50) {
// System.out.println("A ViewEntryCoordinate is being created with a bogus metaversalid: " + metaversalid);
// new Throwable().printStackTrace();
// }
entryType_ = metaversalid.subSequence(0, 2).toString();
parentViewCoordinate_ = new NoteCoordinate(metaversalid.subSequence(2, 50));
position_ = metaversalid.subSequence(50, metaversalid.length()).toString();
}
@Override
public void setSourceNav(final ViewNavigator nav) {
sourceNav_ = nav;
}
@Override
public void readExternal(final ObjectInput arg0) throws IOException, ClassNotFoundException {
parentViewCoordinate_ = (NoteCoordinate) arg0.readObject();
position_ = arg0.readUTF();
entryType_ = arg0.readUTF();
// System.out.println("TEMP DEBUG deserializing a ViewEntryCoordinate");
}
@Override
public void writeExternal(final ObjectOutput arg0) throws IOException {
arg0.writeObject(parentViewCoordinate_);
arg0.writeUTF(position_);
arg0.writeUTF(entryType_);
}
@Override
public String getReplicaId() {
return parentViewCoordinate_.getReplicaId();
}
@Override
public Long getReplicaLong() {
return parentViewCoordinate_.getReplicaLong();
}
@Override
public String getUNID() {
return parentViewCoordinate_.getUNID();
}
@Override
public String getPosition() {
return position_;
}
@Override
public ViewEntry getViewEntry() {
if (sourceNav_ == null) {
View view = parentViewCoordinate_.getView();
return view.getEntryAtPosition(getPosition());
} else {
return sourceNav_.getPos(getPosition(), ViewNavigator.DEFAULT_SEPARATOR);
}
}
@Override
public Document getDocument() {
ViewEntry entry = getViewEntry();
if (entry.isDocument()) {
return entry.getDocument();
}
return null;
}
@Override
public Document getDocument(final String serverName) {
return getDocument();
}
@Override
public Object get(final String key) {
return getViewEntry().get(key);
}
@Override
public boolean isView() {
return false;
}
@Override
public int compareTo(final org.openntf.domino.big.NoteCoordinate arg0) {
throw new UnimplementedException("compareTo has not yet been implemented in ViewEntryCoordinate");
}
@Override
public byte[] toByteArray() {
byte[] result = new byte[24];
insertByteArray(parentViewCoordinate_.db, result, 0);
insertByteArray(parentViewCoordinate_.x, result, 8);
insertByteArray(parentViewCoordinate_.y, result, 16);
return result;
}
@Override
public int insertToByteArray(final byte[] bytes, final int pos) {
insertByteArray(parentViewCoordinate_.db, bytes, pos + 0);
insertByteArray(parentViewCoordinate_.x, bytes, pos + 8);
insertByteArray(parentViewCoordinate_.y, bytes, pos + 16);
return pos + 24;
}
@Override
public String toString() {
return entryType_ + parentViewCoordinate_.toString() + getPosition();
}
@Override
public View getView() {
return parentViewCoordinate_.getView();
}
@Override
public Document getViewDocument() {
return parentViewCoordinate_.getDocument();
}
@Override
public String getEntryType() {
return entryType_;
}
}