Beispiel #1
0
 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;
 }