public class DicomCleaner extends ApplicationFrame
This class is an application for importing or retrieving DICOM studies, cleaning them (i.e., de-identifying them or replacing UIDs, etc.), and sending them elsewhere.
It is configured by use of a properties file that resides in the user's
home directory in .com.pixelmed.display.DicomCleaner.properties.
It supports import and network retrieval of uncompressed, deflate and bzip compressed, and baseline JPEG compressed images (but not yet other encapsulated compressed pixel data).
JFrame.AccessibleJFrameFrame.AccessibleAWTFrameWindow.AccessibleAWTWindow, Window.TypeContainer.AccessibleAWTContainerComponent.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategystatusBarManageraccessibleContext, EXIT_ON_CLOSE, rootPane, rootPaneCheckingEnabledCROSSHAIR_CURSOR, DEFAULT_CURSOR, E_RESIZE_CURSOR, HAND_CURSOR, ICONIFIED, MAXIMIZED_BOTH, MAXIMIZED_HORIZ, MAXIMIZED_VERT, MOVE_CURSOR, N_RESIZE_CURSOR, NE_RESIZE_CURSOR, NORMAL, NW_RESIZE_CURSOR, S_RESIZE_CURSOR, SE_RESIZE_CURSOR, SW_RESIZE_CURSOR, TEXT_CURSOR, W_RESIZE_CURSOR, WAIT_CURSORBOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTDISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, HIDE_ON_CLOSEABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH| Constructor and Description |
|---|
DicomCleaner() |
| Modifier and Type | Method and Description |
|---|---|
protected void |
activateStorageSCP()
Start DICOM storage listener for populating source database.
|
protected void |
activateTemporaryDatabases()
Start two databases, one for the "source" instances and one for the "target" instances.
|
protected void |
copyFromOriginalToCleanedPerformingAction(Vector paths,
Date earliestDateInSet,
MessageLogger logger,
SafeProgressBarUpdaterThread progressBarUpdater) |
protected static Date |
findEarliestDate(Map<String,Date> earliestDatesIndexedBySourceFilePath,
Vector<String> sourceFilePathSelections) |
protected boolean |
haveJPEG2000Part1Codec() |
protected boolean |
haveJPEGLosslessCodec() |
protected static void |
importFileIntoDatabase(DatabaseInformationModel database,
String dicomFileName,
String fileReferenceType,
Map<String,Date> earliestDatesIndexedBySourceFilePath) |
static void |
main(String[] arg)
The method to invoke the application.
|
protected String |
makeNewFullyQualifiedHierarchicalInstancePathName(String sourceFileName) |
protected String |
makeNewFullyQualifiedInterchangeMediaInstancePathName(int fileCount) |
protected void |
performRetrieve(AttributeList uniqueKeys,
String selectionLevel,
String retrieveAE) |
protected void |
purgeFilesAndDatabaseInformation(DatabaseTreeRecord[] databaseSelections,
MessageLogger logger,
SafeProgressBarUpdaterThread progressBarUpdater,
int done,
int maximum) |
protected void |
purgeFilesAndDatabaseInformation(DatabaseTreeRecord databaseSelection,
MessageLogger logger,
SafeProgressBarUpdaterThread progressBarUpdater,
int done,
int maximum) |
protected void |
setCurrentRemoteQueryInformationModel(String remoteAEForQuery) |
protected void |
setCurrentRemoteQuerySelection(AttributeList uniqueKeys,
Attribute uniqueKey,
AttributeList identifier) |
createGUI, getApplicationPropertyFileName, getBuildDate, getProperties, getPropertyInsistently, getPropertyInsistently, getReleaseString, getStatusBar, loadProperties, makePathToFileInUsersHomeDirectory, setApplicationPropertyFileName, setBackgroundForGUI, setInternationalizedFontsForGUI, setPreferredLookAndFeelForPlatform, storeProperties, takeSnapShotaddImpl, createRootPane, frameInit, getAccessibleContext, getContentPane, getDefaultCloseOperation, getGlassPane, getGraphics, getJMenuBar, getLayeredPane, getRootPane, getTransferHandler, isDefaultLookAndFeelDecorated, isRootPaneCheckingEnabled, paramString, processWindowEvent, remove, repaint, setContentPane, setDefaultCloseOperation, setDefaultLookAndFeelDecorated, setGlassPane, setIconImage, setJMenuBar, setLayeredPane, setLayout, setRootPane, setRootPaneCheckingEnabled, setTransferHandler, updateaddNotify, getCursorType, getExtendedState, getFrames, getIconImage, getMaximizedBounds, getMenuBar, getState, getTitle, isResizable, isUndecorated, remove, removeNotify, setBackground, setCursor, setExtendedState, setMaximizedBounds, setMenuBar, setOpacity, setResizable, setShape, setState, setTitle, setUndecoratedaddPropertyChangeListener, addPropertyChangeListener, addWindowFocusListener, addWindowListener, addWindowStateListener, applyResourceBundle, applyResourceBundle, createBufferStrategy, createBufferStrategy, dispose, getBackground, getBufferStrategy, getFocusableWindowState, getFocusCycleRootAncestor, getFocusOwner, getFocusTraversalKeys, getIconImages, getInputContext, getListeners, getLocale, getModalExclusionType, getMostRecentFocusOwner, getOpacity, getOwnedWindows, getOwner, getOwnerlessWindows, getShape, getToolkit, getType, getWarningString, getWindowFocusListeners, getWindowListeners, getWindows, getWindowStateListeners, hide, isActive, isAlwaysOnTop, isAlwaysOnTopSupported, isAutoRequestFocus, isFocusableWindow, isFocusCycleRoot, isFocused, isLocationByPlatform, isOpaque, isShowing, isValidateRoot, pack, paint, postEvent, processEvent, processWindowFocusEvent, processWindowStateEvent, removeWindowFocusListener, removeWindowListener, removeWindowStateListener, reshape, setAlwaysOnTop, setAutoRequestFocus, setBounds, setBounds, setCursor, setFocusableWindowState, setFocusCycleRoot, setIconImages, setLocation, setLocation, setLocationByPlatform, setLocationRelativeTo, setMinimumSize, setModalExclusionType, setSize, setSize, setType, setVisible, show, toBack, toFrontadd, add, add, add, add, addContainerListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalPolicy, getInsets, getLayout, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, print, printComponents, processContainerEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, transferFocusDownCycle, validate, validateTreeaction, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resize, resize, revalidate, setComponentOrientation, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setName, setPreferredSize, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycleclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitgetFont, postEventprotected static String resourceBundleName
protected static String propertiesFileName
protected static String propertyName_DicomCurrentlySelectedStorageTargetAE
protected static String propertyName_DicomCurrentlySelectedQueryTargetAE
protected static String rootNameForDicomInstanceFilesOnInterchangeMedia
protected static String filePrefixForDicomInstanceFilesOnInterchangeMedia
protected static String fileSuffixForDicomInstanceFilesOnInterchangeMedia
protected static String nameForDicomDirectoryOnInterchangeMedia
protected static String exportedZipFileName
protected static int textFieldLengthForQueryPatientName
protected static int textFieldLengthForQueryPatientID
protected static int textFieldLengthForQueryStudyDate
protected static int textFieldLengthForReplacementPatientName
protected static int textFieldLengthForReplacementPatientID
protected static int textFieldLengthForReplacementAccessionNumber
protected static int textFieldLengthForModifyDates
protected ResourceBundle resourceBundle
protected DatabaseInformationModel srcDatabase
protected DatabaseInformationModel dstDatabase
protected JPanel srcDatabasePanel
protected JPanel dstDatabasePanel
protected JPanel remoteQueryRetrievePanel
protected JCheckBox removeIdentityCheckBox
protected JCheckBox removeDescriptionsCheckBox
protected JCheckBox removeSeriesDescriptionsCheckBox
protected JCheckBox removeProtocolNameCheckBox
protected JCheckBox removeCharacteristicsCheckBox
protected JCheckBox removeDeviceIdentityCheckBox
protected JCheckBox removeInstitutionIdentityCheckBox
protected JCheckBox cleanUIDsCheckBox
protected JCheckBox removePrivateCheckBox
protected JCheckBox addContributingEquipmentCheckBox
protected JCheckBox removeClinicalTrialAttributesCheckBox
protected JCheckBox zipExportCheckBox
protected JCheckBox hierarchicalExportCheckBox
protected JCheckBox replacePatientNameCheckBox
protected JCheckBox replacePatientIDCheckBox
protected JCheckBox replaceAccessionNumberCheckBox
protected JCheckBox modifyDatesCheckBox
protected JTextField replacementPatientNameTextField
protected JTextField replacementPatientIDTextField
protected JTextField replacementAccessionNumberTextField
protected JTextField modifyDatesTextField
protected JTextField queryFilterPatientNameTextField
protected JTextField queryFilterPatientIDTextField
protected JTextField queryFilterStudyDateTextField
protected SafeProgressBarUpdaterThread progressBarUpdater
protected SafeCursorChanger cursorChanger
protected MessageLogger logger
protected NetworkApplicationProperties networkApplicationProperties
protected NetworkApplicationInformation networkApplicationInformation
protected QueryInformationModel currentRemoteQueryInformationModel
protected QueryTreeRecord currentRemoteQuerySelectionQueryTreeRecord
protected AttributeList currentRemoteQuerySelectionUniqueKeys
protected Attribute currentRemoteQuerySelectionUniqueKey
protected String currentRemoteQuerySelectionRetrieveAE
protected String currentRemoteQuerySelectionLevel
protected String ourCalledAETitle
protected static boolean haveScannedForCodecs
protected static boolean haveCheckedForJPEGLosslessCodec
protected static boolean haveFoundJPEGLosslessCodec
protected static boolean haveCheckedForJPEG2000Part1Codec
protected static boolean haveFoundJPEG2000Part1Codec
protected Map<String,Date> earliestDatesIndexedBySourceFilePath
protected File savedImagesFolder
protected StorageSOPClassSCPDispatcher storageSOPClassSCPDispatcher
protected DatabaseTreeRecord[] currentSourceDatabaseSelections
protected Vector currentSourceFilePathSelections
protected DatabaseTreeRecord[] currentDestinationDatabaseSelections
protected Vector currentDestinationFilePathSelections
protected String importDirectoryPath
protected String exportDirectoryPath
public DicomCleaner()
throws DicomException,
IOException
DicomExceptionIOExceptionprotected boolean haveJPEGLosslessCodec()
protected boolean haveJPEG2000Part1Codec()
protected void setCurrentRemoteQueryInformationModel(String remoteAEForQuery)
protected static void importFileIntoDatabase(DatabaseInformationModel database, String dicomFileName, String fileReferenceType, Map<String,Date> earliestDatesIndexedBySourceFilePath) throws FileNotFoundException, IOException, DicomException
protected void activateStorageSCP()
throws DicomException,
IOException
Start DICOM storage listener for populating source database.
DicomExceptionIOExceptionprotected void activateTemporaryDatabases()
throws DicomException
Start two databases, one for the "source" instances and one for the "target" instances.
Neither will persist when the application is closed, so in memory databases only are used and instances live in the temporary filesystem.
DicomExceptionprotected void purgeFilesAndDatabaseInformation(DatabaseTreeRecord[] databaseSelections, MessageLogger logger, SafeProgressBarUpdaterThread progressBarUpdater, int done, int maximum) throws DicomException, IOException
DicomExceptionIOExceptionprotected void purgeFilesAndDatabaseInformation(DatabaseTreeRecord databaseSelection, MessageLogger logger, SafeProgressBarUpdaterThread progressBarUpdater, int done, int maximum) throws DicomException, IOException
DicomExceptionIOExceptionprotected void copyFromOriginalToCleanedPerformingAction(Vector paths, Date earliestDateInSet, MessageLogger logger, SafeProgressBarUpdaterThread progressBarUpdater) throws DicomException, IOException
DicomExceptionIOExceptionprotected static Date findEarliestDate(Map<String,Date> earliestDatesIndexedBySourceFilePath, Vector<String> sourceFilePathSelections)
protected String makeNewFullyQualifiedInterchangeMediaInstancePathName(int fileCount) throws IOException
IOExceptionprotected String makeNewFullyQualifiedHierarchicalInstancePathName(String sourceFileName) throws DicomException, IOException
DicomExceptionIOExceptionprotected void setCurrentRemoteQuerySelection(AttributeList uniqueKeys, Attribute uniqueKey, AttributeList identifier)
protected void performRetrieve(AttributeList uniqueKeys, String selectionLevel, String retrieveAE)
public static void main(String[] arg)
The method to invoke the application.
arg - none