if (bmId == null || bmId.equals("")) {
throw new SAXException("structMap with TYPE "
+ "fedora:dsBindingMap must specify a non-empty "
+ "ID attribute.");
} else {
Disseminator diss = new Disseminator();
diss.dsBindMapID = bmId;
m_dissems.put(bmId, diss);
m_diss = diss;
m_diss.dsBindMap = new DSBindingMap();
m_diss.dsBindMap.dsBindMapID = bmId;
m_indiv = false; // flag we're not looking at inner part yet
}
} else {
throw new SAXException("StructMap must have TYPE fedora:dsBindingMap");
}
} else if (localName.equals("div")) {
if (m_indiv) {
// inner part of structmap
DSBinding binding = new DSBinding();
if (m_diss.dsBindMap.dsBindings == null) {
// none yet.. create array of size one
DSBinding[] bindings = new DSBinding[1];
m_diss.dsBindMap.dsBindings = bindings;
m_diss.dsBindMap.dsBindings[0] = binding;
} else {
// need to expand the array size by one,
// and do an array copy.
int curSize = m_diss.dsBindMap.dsBindings.length;
DSBinding[] oldArray = m_diss.dsBindMap.dsBindings;
DSBinding[] newArray = new DSBinding[curSize + 1];
for (int i = 0; i < curSize; i++) {
newArray[i] = oldArray[i];
}
newArray[curSize] = binding;
m_diss.dsBindMap.dsBindings = newArray;
}
// now populate 'binding' values...we'll have
// everything at this point except datastreamID...
// that comes as a child: <fptr FILEID="DS2"/>
binding.bindKeyName = grab(a, METS.uri, "TYPE");
binding.bindLabel = grab(a, METS.uri, "LABEL");
binding.seqNo = grab(a, METS.uri, "ORDER");
} else {
m_indiv = true;
// first (outer div) part of structmap
m_diss.dsBindMap.dsBindMechanismPID = grab(a, METS.uri, "TYPE");
m_diss.dsBindMap.dsBindMapLabel = grab(a, METS.uri, "LABEL");
}
} else if (localName.equals("fptr")) {
// assume we're inside the inner div... that's the
// only place the fptr element is valid.
DSBinding binding =
m_diss.dsBindMap.dsBindings[m_diss.dsBindMap.dsBindings.length - 1];
binding.datastreamID = grab(a, METS.uri, "FILEID");
} else if (localName.equals("behaviorSec")) {
// looks like we're in a disseminator... it should be in the
// hash by now because we've already gone through structmaps
// ...keyed by structmap id... remember the id (group id)
// so we can put it in when parsing serviceBinding
m_dissemId = grab(a, METS.uri, "ID");
m_dissemState = grab(a, METS.uri, "STATUS");
} else if (localName.equals("serviceBinding")) {
// remember the structId so we can grab the right dissem
// when parsing children
m_structId = grab(a, METS.uri, "STRUCTID");
// grab the disseminator associated with the provided structId
Disseminator dissem = m_dissems.get(m_structId);
// plug known items in..
dissem.dissID = m_dissemId;
dissem.dissState = m_dissemState;
// then grab the new stuff for the dissem for this element, and
// put it in.
dissem.dissVersionID = grab(a, METS.uri, "ID");
dissem.bDefID = grab(a, METS.uri, "BTYPE");
dissem.dissCreateDT =
DateUtility
.convertStringToDate(grab(a, METS.uri, "CREATED"));
dissem.dissLabel = grab(a, METS.uri, "LABEL");
} else if (localName.equals("interfaceMD")) {
Disseminator dissem = m_dissems.get(m_structId);
} else if (localName.equals("serviceBindMD")) {
Disseminator dissem = m_dissems.get(m_structId);
dissem.sDepID = grab(a, m_xlink.uri, "href");
}
}