/source/java/org/rsna/ctp/stdstages/DicomCorrector.java

https://github.com/johnperry/CTP · Java · 115 lines · 68 code · 14 blank · 33 comment · 12 complexity · 2780c1a45906d01c60f1d600316841fd MD5 · raw file

  1. /*---------------------------------------------------------------
  2. * Copyright 2015 by the Radiological Society of North America
  3. *
  4. * This source software is released under the terms of the
  5. * RSNA Public License (http://mirc.rsna.org/rsnapubliclicense.pdf)
  6. *----------------------------------------------------------------*/
  7. package org.rsna.ctp.stdstages;
  8. import java.io.File;
  9. import java.util.LinkedList;
  10. import org.apache.log4j.Logger;
  11. import org.rsna.ctp.objects.DicomObject;
  12. import org.rsna.ctp.objects.FileObject;
  13. import org.rsna.ctp.pipeline.AbstractPipelineStage;
  14. import org.rsna.ctp.servlets.SummaryLink;
  15. import org.rsna.ctp.pipeline.Processor;
  16. import org.rsna.ctp.stdstages.anonymizer.AnonymizerStatus;
  17. import org.rsna.ctp.stdstages.anonymizer.dicom.DICOMCorrector;
  18. import org.rsna.server.User;
  19. import org.rsna.util.FileUtil;
  20. import org.w3c.dom.Element;
  21. /**
  22. * The DicomCorrector pipeline stage class.
  23. */
  24. public class DicomCorrector extends AbstractPipelineStage implements Processor, Scriptable {
  25. static final Logger logger = Logger.getLogger(DicomCorrector.class);
  26. File dicomScriptFile = null; //the DicomFilter script that determines whether to correct the object
  27. boolean quarantineUncorrectedMismatches = false;
  28. boolean logUncorrectedMismatches = false;
  29. boolean fixPrivateElements = false;
  30. /**
  31. * Construct the DicomCorrector PipelineStage.
  32. * @param element the XML element from the configuration file
  33. * specifying the configuration of the stage.
  34. */
  35. public DicomCorrector(Element element) {
  36. super(element);
  37. dicomScriptFile = getFilterScriptFile(element.getAttribute("dicomScript"));
  38. fixPrivateElements = element.getAttribute("fixPrivateElements").trim().toLowerCase().equals("yes");
  39. quarantineUncorrectedMismatches = element.getAttribute("quarantineUncorrectedMismatches").trim().toLowerCase().equals("yes");
  40. logUncorrectedMismatches = element.getAttribute("logUncorrectedMismatches").trim().toLowerCase().equals("yes");
  41. }
  42. //Implement the Scriptable interface
  43. /**
  44. * Get the script files.
  45. * @return the script files used by this stage.
  46. */
  47. public File[] getScriptFiles() {
  48. return new File[] { dicomScriptFile };
  49. }
  50. /**
  51. * Process a DicomObject, correcting what can be corrected
  52. * and returning the processed object.
  53. * If the object is not a DicomObject, pass the object unmodified.
  54. * @param fileObject the object to process.
  55. * @return the processed FileObject.
  56. */
  57. public FileObject process(FileObject fileObject) {
  58. lastFileIn = new File(fileObject.getFile().getAbsolutePath());
  59. lastTimeIn = System.currentTimeMillis();
  60. if (fileObject instanceof DicomObject) {
  61. //If there is a dicomScriptFile, use it to determine whether to anonymize
  62. if (((DicomObject)fileObject).matches(dicomScriptFile)) {
  63. //Okay, correct the object
  64. File file = fileObject.getFile();
  65. AnonymizerStatus status =
  66. DICOMCorrector.correct(file, file,
  67. fixPrivateElements,
  68. quarantineUncorrectedMismatches,
  69. logUncorrectedMismatches);
  70. if (status.isOK()) {
  71. fileObject = FileObject.getInstance(file);
  72. }
  73. else if (status.isQUARANTINE()) {
  74. if (quarantine != null) quarantine.insert(fileObject);
  75. lastFileOut = null;
  76. lastTimeOut = System.currentTimeMillis();
  77. return null;
  78. }
  79. else if (status.isSKIP()) ; //keep the input object
  80. }
  81. }
  82. lastFileOut = new File(fileObject.getFile().getAbsolutePath());
  83. lastTimeOut = System.currentTimeMillis();
  84. return fileObject;
  85. }
  86. /**
  87. * Get the list of links for display on the summary page.
  88. * @param user the requesting user.
  89. * @return the list of links for display on the summary page.
  90. */
  91. public synchronized LinkedList<SummaryLink> getLinks(User user) {
  92. LinkedList<SummaryLink> links = super.getLinks(user);
  93. if (allowsAdminBy(user)) {
  94. String qs = "?p="+pipeline.getPipelineIndex()+"&s="+stageIndex;
  95. if (dicomScriptFile != null) {
  96. links.addFirst( new SummaryLink("/script"+qs+"&f=0", null, "Edit the Stage Filter Script", false) );
  97. }
  98. }
  99. return links;
  100. }
  101. }