@Override
 protected DataWriter createDataWriter(InstanceLocator inst, String tsuid) throws IOException {
   Attributes attrs;
   DicomInputStream in = new DicomInputStream(inst.getFile());
   try {
     if (withoutBulkData) {
       in.setIncludeBulkData(false);
       attrs = in.readDataset(-1, Tag.PixelData);
     } else {
       in.setIncludeBulkDataLocator(true);
       attrs = in.readDataset(-1, -1);
     }
   } finally {
     SafeClose.close(in);
   }
   attrs.addAll((Attributes) inst.getObject());
   adjustPatientID(attrs);
   adjustAccessionNumber(attrs);
   ArchiveApplicationEntity ae = (ArchiveApplicationEntity) as.getApplicationEntity();
   try {
     Templates tpl =
         ae.getAttributeCoercionTemplates(
             inst.cuid, Dimse.C_STORE_RQ, Role.SCU, as.getRemoteAET());
     if (tpl != null) attrs.update(SAXTransformer.transform(attrs, tpl, false, false), null);
   } catch (Exception e) {
     throw new IOException(e);
   }
   return new DataWriterAdapter(attrs);
 }
  private void export(String name) throws Exception {
    if (name == null) return;

    OutputStream os = new FileOutputStream(name);
    try {
      ((PreferencesArchiveConfiguration) config).getDicomConfigurationRoot().exportSubtree(os);
    } finally {
      SafeClose.close(os);
    }
  }
 @Override
 public void write(OutputStream out) throws IOException, WebApplicationException {
   log.info(
       "{}@{} << {}: Content-Type={}, iuid={}",
       new Object[] {
         request.getRemoteUser(),
         request.getRemoteHost(),
         System.identityHashCode(request),
         mediaType,
         fileRef.sopInstanceUID
       });
   DicomInputStream dis = new DicomInputStream(fileRef.getFile());
   dis.setURI(bulkDataURI);
   try {
     dis.setIncludeBulkData(IncludeBulkData.URI);
     Attributes dataset = dis.readDataset(-1, -1);
     dataset.addAll(attrs);
     Object pixelData = dataset.getValue(Tag.PixelAspectRatio);
     if (pixelData instanceof Fragments) {
       Fragments frags = (Fragments) pixelData;
       Object frag0 = frags.get(0);
       BulkData frag1 = (BulkData) frags.get(1);
       dataset.setValue(
           Tag.PixelData,
           VR.OB,
           new BulkData(
               frag1.uri,
               frag1.transferSyntax,
               frag0 == Value.NULL ? frag1.offset - 16 : ((BulkData) frag0).offset - 8,
               -1));
     }
     SAXTransformer.getSAXWriter(new StreamResult(out)).write(dataset);
   } catch (IOException e) {
     throw e;
   } catch (Exception e) {
     throw new WebApplicationException(e);
   } finally {
     SafeClose.close(dis);
   }
 }