public static Map<String, Document> getDocuments(ProvideAndRegisterDocumentSetRequestType req) { List<Document> docs = req.getDocument(); Map<String, Document> map = new HashMap<String, Document>(docs.size()); Document doc; for (int i = 0, len = docs.size(); i < len; i++) { doc = docs.get(i); map.put(doc.getId(), doc); } return map; }
private void logRequest(ProvideAndRegisterDocumentSetRequestType req) { log.info("###### SubmitObjectRequest:" + req.getSubmitObjectsRequest()); List<Document> docs = req.getDocument(); log.info("###### Documents:" + docs); if (docs != null) { StringBuilder sb = new StringBuilder(); sb.append("######Number of Documents:").append(docs.size()); int dumpValLen; for (Document d : docs) { sb.append("\nDocument ID:" + d.getId()) .append(" size:") .append(d.getValue().length) .append(" value:"); try { dumpValLen = Math.min(d.getValue().length, 40); sb.append(new String(d.getValue(), 0, dumpValLen)); if (dumpValLen == 40) sb.append("..."); } catch (Exception x) { log.warn("Failed to convert value in String!", x); } } log.info(sb.toString()); } }
private XDSDocument[] storeDocuments( ProvideAndRegisterDocumentSetRequestType req, List<ExtrinsicObjectType> extrObjs, String groupID) throws XDSException { Map<String, Document> docs = InfosetUtil.getDocuments(req); Document doc; ExtrinsicObjectType eo; String docUID; XDSDocument[] storedDocs = new XDSDocument[extrObjs.size()]; String[] mimetypes = cfg.isCheckMimetype() ? cfg.getAcceptedMimeTypes() : null; for (int i = 0, len = extrObjs.size(); i < len; i++) { eo = extrObjs.get(i); if (eo.getId() == null || eo.getId().trim().length() == 0) throw new XDSException( XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Missing XDSDocumentEntry.entryUUID!", null); doc = docs.get(eo.getId()); docUID = InfosetUtil.getExternalIdentifierValue(XDSConstants.UUID_XDSDocumentEntry_uniqueId, eo); if (docUID == null) throw new XDSException( XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Missing XDSDocumentEntry.uniqueId!", null); if (mimetypes != null) { boolean unsupportedMimetype = true; for (int j = 0; j < mimetypes.length; j++) { if (mimetypes[j].equals(eo.getMimeType())) { unsupportedMimetype = false; break; } } if (unsupportedMimetype) throw new XDSException( XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Mimetype not supported:" + eo.getMimeType(), null); } try { storedDocs[i] = storage.storeDocument(groupID, docUID, doc.getValue(), eo.getMimeType()); if (storedDocs[i].isCommitted()) { log.warn("Document already exists! docUid:" + docUID); } Map<String, SlotType1> slots = InfosetUtil.addOrOverwriteSlot( eo, XDSConstants.SLOT_NAME_REPOSITORY_UNIQUE_ID, getRepositoryUniqueId()); String oldValue = InfosetUtil.addOrCheckedOverwriteSlot( eo, slots, XDSConstants.SLOT_NAME_SIZE, String.valueOf(storedDocs[i].getSize()), false); if (oldValue != null) { throw new XDSException( XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Slot 'size' already exists but has different value! old:" + oldValue + " new:" + storedDocs[i].getSize(), null); } oldValue = InfosetUtil.addOrCheckedOverwriteSlot( eo, slots, XDSConstants.SLOT_NAME_HASH, storedDocs[i].getDigest(), true); if (oldValue != null) { throw new XDSException( XDSException.XDS_ERR_REPOSITORY_METADATA_ERROR, "Slot 'hash' already exists but has different value! old:" + oldValue + " new:" + storedDocs[i].getDigest(), null); } } catch (XDSException x) { this.commit(storedDocs, false); throw x; } catch (Exception x) { log.error("Storage of document failed! docUID:" + docUID, x); this.commit(storedDocs, false); throw new XDSException( XDSException.XDS_ERR_REPOSITORY_ERROR, "Storage of document " + docUID + " failed! : " + x.getMessage(), x); } } return storedDocs; }