|
From: <gun...@us...> - 2008-04-03 10:21:54
|
Revision: 6168
http://dcm4che.svn.sourceforge.net/dcm4che/?rev=6168&view=rev
Author: gunterze
Date: 2008-04-03 03:21:51 -0700 (Thu, 03 Apr 2008)
Log Message:
-----------
[#DCMEE-803] Forward objects received from configurable list of Storage SCUs on Instance Level instead on Series Level
Modified Paths:
--------------
dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward-xmbean.xml
dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward2-xmbean.xml
dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService.java
dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService2.java
Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward-xmbean.xml
===================================================================
--- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward-xmbean.xml 2008-04-02 22:27:52 UTC (rev 6167)
+++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward-xmbean.xml 2008-04-03 10:21:51 UTC (rev 6168)
@@ -51,7 +51,26 @@
<value value="[calling=SCU1|SCU2]SCP3,SCP4!8-16;NONE"/>
</descriptors>
</attribute>
- <attribute access="read-write" getMethod="isEnablePatientUpdated" setMethod="setEnablePatientUpdated">
+ <attribute access="read-write" getMethod="getForwardOnInstanceLevelFromAETs"
+ setMethod="setForwardOnInstanceLevelFromAETs">
+ <description><![CDATA[Comma separated list of AE titles of Storage SCUs
+ from which objects are forwarded by an Instance level retrieve request.
+ Objects received from other Storage SCUs are forwarded on Series level,
+ which may cause to multiple forwarding of objects, if the Storage SCU
+ sends instances of one Series association.
+ <br>NONE = Forward objects on Series level received from any Storage SCUs
+ <br>Exception: if only one object is received in the association,
+ the object will be forwarded by an Instance level retrieve request, even
+ if the AE title of the sending Storage SCU is not listed.
+ ]]>
+ </description>
+ <name>ForwardOnInstanceLevelFromAETitles</name>
+ <type>java.lang.String</type>
+ <descriptors>
+ <value value="NONE"/>
+ </descriptors>
+ </attribute>
+ <attribute access="read-write" getMethod="isEnablePatientUpdated" setMethod="setEnablePatientUpdated">
<description><![CDATA[Enable/Disable PatientUpdated notification support.<br>
If enabled a <tt>PatientUpdated</tt> notification will forward all instances of
the related patient to each AET listed in <tt>ForwardModifiedToAETs</tt>.<p>
Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward2-xmbean.xml
===================================================================
--- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward2-xmbean.xml 2008-04-02 22:27:52 UTC (rev 6167)
+++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/etc/conf/xmdesc/dcm4chee-forward2-xmbean.xml 2008-04-03 10:21:51 UTC (rev 6168)
@@ -40,6 +40,25 @@
<value value="conf/dcm4chee-ae"/>
</descriptors>
</attribute>
+ <attribute access="read-write" getMethod="getForwardOnInstanceLevelFromAETs"
+ setMethod="setForwardOnInstanceLevelFromAETs">
+ <description><![CDATA[Comma separated list of AE titles of Storage SCUs
+ from which objects are forwarded by an Instance level retrieve request.
+ Objects received from other Storage SCUs are forwarded on Series level,
+ which may cause to multiple forwarding of objects, if the Storage SCU
+ sends instances of one Series association.
+ <br>NONE = Forward objects on Series level received from any Storage SCUs
+ <br>Exception: if only one object is received in the association,
+ the object will be forwarded by an Instance level retrieve request, even
+ if the AE title of the sending Storage SCU is not listed.
+ ]]>
+ </description>
+ <name>ForwardOnInstanceLevelFromAETitles</name>
+ <type>java.lang.String</type>
+ <descriptors>
+ <value value="NONE"/>
+ </descriptors>
+ </attribute>
<attribute access="read-write"
getMethod="getStoreScpServiceName"
setMethod="setStoreScpServiceName">
Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService.java
===================================================================
--- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService.java 2008-04-02 22:27:52 UTC (rev 6167)
+++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService.java 2008-04-03 10:21:51 UTC (rev 6168)
@@ -48,6 +48,7 @@
import javax.management.NotificationListener;
import javax.management.ObjectName;
+import org.dcm4che.data.DcmElement;
import org.dcm4che.dict.Tags;
import org.dcm4cheri.util.StringUtils;
import org.dcm4chex.archive.common.SeriesStored;
@@ -75,7 +76,7 @@
new NotificationListener() {
public void handleNotification(Notification notif, Object handback) {
SeriesStored seriesStored = (SeriesStored) notif.getUserData();
- Map param = new HashMap();
+ Map<String, String[]> param = new HashMap<String, String[]>();
param.put("calling", new String[] { seriesStored.getCallingAET() });
String[] destAETs = forwardingRules
.getForwardDestinationsFor(param);
@@ -94,12 +95,19 @@
};
- private static String[] sopIUIDsOrNull(SeriesStored seriesStored) {
- return seriesStored.getNumberOfInstances() == 1
- ? new String[] { seriesStored.getIAN()
- .getItem(Tags.RefSeriesSeq).getItem(Tags.RefSOPSeq)
- .getString(Tags.RefSOPInstanceUID) }
- : null;
+ private String[] sopIUIDsOrNull(SeriesStored seriesStored) {
+ int numI = seriesStored.getNumberOfInstances();
+ if (numI > 1 && !isForwardOnInstanceLevelFromAET(
+ seriesStored.getCallingAET())) {
+ return null;
+ }
+ String[] iuids = new String[numI];
+ DcmElement sq = seriesStored.getIAN().getItem(Tags.RefSeriesSeq)
+ .get(Tags.RefSOPSeq);
+ for (int i = 0; i < iuids.length; i++) {
+ iuids[i] = sq.getItem(i).getString(Tags.RefSOPInstanceUID);
+ }
+ return iuids;
}
private final NotificationListener seriesUpdatedListener = new NotificationListener() {
@@ -135,8 +143,10 @@
private ObjectName editContentServiceName;
- private String[] forwardModifiedToAETs = {};
+ private String[] forwardOnInstanceLevelFromAETs = EMPTY;
+ private String[] forwardModifiedToAETs = EMPTY;
+
private int forwardPriority = 0;
private ForwardingRules forwardingRules = new ForwardingRules("");
@@ -180,6 +190,24 @@
return editContentServiceName;
}
+ public String getForwardOnInstanceLevelFromAETs() {
+ return forwardOnInstanceLevelFromAETs.length == 0 ? NONE
+ : StringUtils.toString(forwardOnInstanceLevelFromAETs, ',');
+ }
+
+ public void setForwardOnInstanceLevelFromAETs(String s) {
+ forwardOnInstanceLevelFromAETs = NONE.equals(s) ? EMPTY
+ : StringUtils.split(s, ',');
+ }
+
+ private boolean isForwardOnInstanceLevelFromAET(String aet) {
+ for (int i = 0; i < forwardOnInstanceLevelFromAETs.length; i++) {
+ if (aet.equals(forwardOnInstanceLevelFromAETs[i]))
+ return true;
+ }
+ return false;
+ }
+
/**
* @param editContentServiceName
* The editContentServiceName to set.
@@ -229,13 +257,13 @@
}
public String getForwardModifiedToAETs() {
- return forwardModifiedToAETs.length == 0 ? NONE : StringUtils.toString(
- forwardModifiedToAETs, ',');
+ return forwardModifiedToAETs.length == 0 ? NONE
+ : StringUtils.toString(forwardModifiedToAETs, ',');
}
public void setForwardModifiedToAETs(String s) {
- forwardModifiedToAETs = NONE.equals(s) ? EMPTY : StringUtils.split(s,
- ',');
+ forwardModifiedToAETs = NONE.equals(s) ? EMPTY
+ : StringUtils.split(s, ',');
}
protected void startService() throws Exception {
Modified: dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService2.java
===================================================================
--- dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService2.java 2008-04-02 22:27:52 UTC (rev 6167)
+++ dcm4chee/dcm4chee-arc/trunk/dcm4jboss-sar/src/java/org/dcm4chex/archive/dcm/movescu/ForwardService2.java 2008-04-03 10:21:51 UTC (rev 6168)
@@ -53,8 +53,10 @@
import javax.xml.transform.sax.TransformerHandler;
import org.dcm4che.data.Dataset;
+import org.dcm4che.data.DcmElement;
import org.dcm4che.data.DcmObjectFactory;
import org.dcm4che.dict.Tags;
+import org.dcm4cheri.util.StringUtils;
import org.dcm4chex.archive.common.SeriesStored;
import org.dcm4chex.archive.config.DicomPriority;
import org.dcm4chex.archive.config.ForwardingRules;
@@ -74,6 +76,12 @@
private static final String FORWARD_XSL = "forward.xsl";
+ private static final String NONE = "NONE";
+
+ private static final String[] EMPTY = {};
+
+ private String[] forwardOnInstanceLevelFromAETs = EMPTY;
+
private final NotificationListener seriesStoredListener = new NotificationListener() {
public void handleNotification(Notification notif, Object handback) {
ForwardService2.this.onSeriesStored((SeriesStored) notif.getUserData());
@@ -83,9 +91,9 @@
private ObjectName storeScpServiceName;
private ObjectName moveScuServiceName;
-
+
private TemplatesDelegate templates = new TemplatesDelegate(this);
-
+
public final String getConfigDir() {
return templates.getConfigDir();
}
@@ -118,7 +126,24 @@
this.storeScpServiceName = storeScpServiceName;
}
-
+ public String getForwardOnInstanceLevelFromAETs() {
+ return forwardOnInstanceLevelFromAETs.length == 0 ? NONE
+ : StringUtils.toString(forwardOnInstanceLevelFromAETs, ',');
+ }
+
+ public void setForwardOnInstanceLevelFromAETs(String s) {
+ forwardOnInstanceLevelFromAETs = NONE.equals(s) ? EMPTY
+ : StringUtils.split(s, ',');
+ }
+
+ private boolean isForwardOnInstanceLevelFromAET(String aet) {
+ for (int i = 0; i < forwardOnInstanceLevelFromAETs.length; i++) {
+ if (aet.equals(forwardOnInstanceLevelFromAETs[i]))
+ return true;
+ }
+ return false;
+ }
+
protected void startService() throws Exception {
server.addNotificationListener(storeScpServiceName,
seriesStoredListener, SeriesStored.NOTIF_FILTER, null);
@@ -162,12 +187,19 @@
}
}
- private static String[] sopIUIDsOrNull(SeriesStored seriesStored) {
- return seriesStored.getNumberOfInstances() == 1
- ? new String[] { seriesStored.getIAN()
- .getItem(Tags.RefSeriesSeq).getItem(Tags.RefSOPSeq)
- .getString(Tags.RefSOPInstanceUID) }
- : null;
+ private String[] sopIUIDsOrNull(SeriesStored seriesStored) {
+ int numI = seriesStored.getNumberOfInstances();
+ if (numI > 1 && !isForwardOnInstanceLevelFromAET(
+ seriesStored.getCallingAET())) {
+ return null;
+ }
+ String[] iuids = new String[numI];
+ DcmElement sq = seriesStored.getIAN().getItem(Tags.RefSeriesSeq)
+ .get(Tags.RefSOPSeq);
+ for (int i = 0; i < iuids.length; i++) {
+ iuids[i] = sq.getItem(i).getString(Tags.RefSOPInstanceUID);
+ }
+ return iuids;
}
private static int toPriority(String s) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|