From: <jav...@us...> - 2007-12-17 12:57:30
|
Revision: 5614 http://dcm4che.svn.sourceforge.net/dcm4che/?rev=5614&view=rev Author: javawilli Date: 2007-12-17 04:57:24 -0800 (Mon, 17 Dec 2007) Log Message: ----------- [#DCMEE-667] Add 'forced match' of unique? matching keys (AccessionNumber, Study InstanceUID, SPSID) for proxy feature. Modified Paths: -------------- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-mwlscu-xmbean.xml dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/mwlscu/MWLScuService.java Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-mwlscu-xmbean.xml =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-mwlscu-xmbean.xml 2007-12-17 12:07:44 UTC (rev 5613) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-mwlscu-xmbean.xml 2007-12-17 12:57:24 UTC (rev 5614) @@ -55,6 +55,18 @@ <value value="50"/> </descriptors> </attribute> + + <attribute access="read-write" getMethod="isForceMatchingKeyCheck" setMethod="setForceMatchingKeyCheck"> + <description>Force additional check of Matching Keys! This will only effect external MWL SCP queries. + You should enable this feature only if you need a 'unique' matching key (Accession Number, Study IUID or SPS ID) which the MWL SCP + doesn't support as matching key! (e.g. if you need to update image attributes with MWL entries) + </description> + <name>ForceMatchingKeyCheck</name> + <type>boolean</type> + <descriptors> + <value value="false"/> + </descriptors> + </attribute> <attribute access="read-only" getMethod="isLocal"> <description>This value is is set to true if the <b>CalledAETitle</b> attribute is set to LOCAL. Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/mwlscu/MWLScuService.java =================================================================== --- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/mwlscu/MWLScuService.java 2007-12-17 12:07:44 UTC (rev 5613) +++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/mwlscu/MWLScuService.java 2007-12-17 12:57:24 UTC (rev 5614) @@ -47,6 +47,7 @@ import org.dcm4che.data.Dataset; import org.dcm4che.data.DcmObjectFactory; import org.dcm4che.dict.Status; +import org.dcm4che.dict.Tags; import org.dcm4che.dict.UIDs; import org.dcm4che.net.ActiveAssociation; import org.dcm4che.net.Association; @@ -84,6 +85,8 @@ /** DICOM priority. Used for move and media creation action. */ private int priority = 0; + private boolean forceMatchingKeyCheck; + /** * Returns the AET that holds the work list (Modality Work List SCP). * @@ -116,7 +119,15 @@ this.maxResults = maxResults; } - public final boolean isLocal() { + public boolean isForceMatchingKeyCheck() { + return forceMatchingKeyCheck; + } + + public void setForceMatchingKeyCheck(boolean forceMatchingKeyCheck) { + this.forceMatchingKeyCheck = forceMatchingKeyCheck; + } + + public final boolean isLocal() { return "LOCAL".equalsIgnoreCase(calledAET); } @@ -227,6 +238,16 @@ Dimse mcRQ = AssociationFactory.getInstance().newDimse(PCID, cmd, searchDS); final int[] pendingStatus = { 0xff00 }; + final int[] received = { 0 }; + final int[] ignored = { 0 }; + final Dataset keys = DcmObjectFactory.getInstance().newDataset(); + if (forceMatchingKeyCheck) { + keys.putAll(searchDS.subSet(new int[]{ Tags.AccessionNumber, Tags.StudyInstanceUID })); + Dataset spsItem = searchDS.getItem(Tags.SPSSeq); + if ( spsItem != null && spsItem.containsValue(Tags.SPSID)) { + keys.putSQ(Tags.SPSSeq).addItem(spsItem.subSet( new int[]{Tags.SPSID} )); + } + } aa.invoke(mcRQ, new DimseListener(){ public void dimseReceived(Association assoc, Dimse dimse) { @@ -236,13 +257,20 @@ pendingStatus[0] = rspCmd.getStatus(); Dataset rsp = dimse.getDataset(); logResponse(rsp); - if (result.size() < maxResults) { - result.add(rsp); - if (result.size() == maxResults) { - log.info("Cancel MWL FIND operation after receive of " - + maxResults + " pending C-FIND RSP."); - cancelFind(assoc); - } + if (received[0] < maxResults) { + received[0]++; + if ( keys.isEmpty() || keys.match(rsp, true, true)) { + result.add(rsp); + if (received[0] == maxResults) { + log.info("Cancel MWL FIND operation after receive of " + + maxResults + " pending C-FIND RSP."); + cancelFind(assoc); + } + } else { + ignored[0]++; + log.info("Received MWL FIND Response ignored after additional Matching Key check!"); + log.debug("Received Dataset:"); log.debug(rsp); + } } else { log.debug("Ignore pending C-FIND RSP received after cancel of MWL FIND operation"); } @@ -252,7 +280,10 @@ } else { if (log.isDebugEnabled()) { log.debug("Received final C-FIND RSP from " - + calledAET + " :" + dimse); + + calledAET + " :" + dimse); + if (ignored[0] > 0) { + log.debug(ignored[0]+" of "+received[0]+" received Response Messages ignored after Matching Key Check!"); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |