jiapeng 5 ans auparavant
Parent
commit
7a92c3d259

+ 5 - 3
src/main/java/com/ekexiu/project/storage/dicom/DicomGetImage.java

@ -82,6 +82,7 @@ public class DicomGetImage extends DicomBase {
82 82

83 83
			@Override
84 84
			public void onDimseRSP(Association as, Attributes cmd, Attributes data) {
85
				System.out.println(data);
85 86
				super.onDimseRSP(as, cmd, data);
86 87
			}
87 88
		};
@ -103,6 +104,7 @@ public class DicomGetImage extends DicomBase {
103 104
	public File download(String title, String hostname, int port, String imageId, File path, String fn)
104 105
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
105 106
		this.setRemote(title, hostname, port);
107
		this.conn.setPort(6000);
106 108
		this.rq.addPresentationContext(
107 109
				new PresentationContext(1, UID.StudyRootQueryRetrieveInformationModelGET, IVR_LE_FIRST));
108 110
		configureStorageSOPClass(UID.GrayscaleSoftcopyPresentationStateStorage, UID.ImplicitVRLittleEndian);
@ -181,9 +183,9 @@ public class DicomGetImage extends DicomBase {
181 183

182 184
	public static void main(String args[])
183 185
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
184
		DicomGetImage q = new DicomGetImage("GETSCU");
185
		q.download("DCM4CHEE", "192.168.3.97", 11112, "1.2.840.113663.1500.1.434945515.3.6.20180902.100711.313",
186
				new File("D:\\test\\GETSCU"), "2.dcm");
186
		DicomGetImage q = new DicomGetImage("AIADS");
187
		q.download("STPACS", "133.0.14.150", 104, "1.2.840.113663.1500.1.446929507.3.1.20190308.101952.92",
188
				new File("/ekexiu/storage_asd/download"), "1.2.840.113663.1500.1.446929507.3.1.20190308.101952.92.dcm");
187 189

188 190
	}
189 191


+ 164 - 0
src/main/java/com/ekexiu/project/storage/dicom/DicomMoveImage.java

@ -0,0 +1,164 @@
1
package com.ekexiu.project.storage.dicom;
2
3
import java.io.IOException;
4
import java.security.GeneralSecurityException;
5
import java.util.concurrent.ExecutorService;
6
import java.util.concurrent.Executors;
7
import java.util.concurrent.ScheduledExecutorService;
8
9
import org.dcm4che3.data.Attributes;
10
import org.dcm4che3.data.Tag;
11
import org.dcm4che3.data.UID;
12
import org.dcm4che3.data.VR;
13
import org.dcm4che3.net.ApplicationEntity;
14
import org.dcm4che3.net.Association;
15
import org.dcm4che3.net.Connection;
16
import org.dcm4che3.net.Device;
17
import org.dcm4che3.net.DimseRSPHandler;
18
import org.dcm4che3.net.IncompatibleConnectionException;
19
import org.dcm4che3.net.Priority;
20
import org.dcm4che3.net.pdu.AAssociateRQ;
21
import org.dcm4che3.net.pdu.ExtendedNegotiation;
22
import org.dcm4che3.net.pdu.PresentationContext;
23
import org.dcm4che3.data.ElementDictionary;
24
25
public class DicomMoveImage extends Device {
26
27
	/**
28
	 * 
29
	 */
30
	private static final long serialVersionUID = -5892662719692590663L;
31
32
	protected static String[] IVR_LE_FIRST = { UID.ImplicitVRLittleEndian, UID.ExplicitVRLittleEndian,
33
			UID.ExplicitVRBigEndianRetired };
34
35
	private static enum InformationModel {
36
		PatientRoot(UID.PatientRootQueryRetrieveInformationModelMOVE, "STUDY"), StudyRoot(
37
				UID.StudyRootQueryRetrieveInformationModelMOVE,
38
				"STUDY"), PatientStudyOnly(UID.PatientStudyOnlyQueryRetrieveInformationModelMOVERetired,
39
						"STUDY"), CompositeInstanceRoot(UID.CompositeInstanceRootRetrieveMOVE,
40
								"IMAGE"), HangingProtocol(UID.HangingProtocolInformationModelMOVE,
41
										null), ColorPalette(UID.ColorPaletteQueryRetrieveInformationModelMOVE, null);
42
		final String cuid;
43
		final String level;
44
45
		InformationModel(String cuid, String level) {
46
			this.cuid = cuid;
47
			this.level = level;
48
		}
49
	}
50
51
	private static final int[] DEF_IN_FILTER = { Tag.SOPInstanceUID, Tag.StudyInstanceUID, Tag.SeriesInstanceUID };
52
53
	private final ApplicationEntity ae = new ApplicationEntity("AIADS");
54
	private final Connection conn = new Connection();
55
	private final Connection remote = new Connection();
56
	private final AAssociateRQ rq = new AAssociateRQ();
57
	private int priority;
58
	private String destination;
59
60
	private Attributes keys = new Attributes();
61
	private int[] inFilter = DEF_IN_FILTER;
62
	private Association as;
63
64
	public DicomMoveImage() throws IOException {
65
		super("AIADS");
66
		addConnection(conn);
67
		addApplicationEntity(ae);
68
		ae.addConnection(conn);
69
	}
70
	public void addKey(int tag, String... ss) {
71
		VR vr = ElementDictionary.vrOf(tag, keys.getPrivateCreator(tag));
72
		keys.setString(tag, vr, ss);
73
	}
74
75
	public final void setInputFilter(int[] inFilter) {
76
		this.inFilter = inFilter;
77
	}
78
79
	public void setRemote(String title, String hostname, int port) {
80
		rq.setCalledAET(title);
81
		remote.setHostname(hostname);
82
		remote.setPort(port);
83
		conn.setReceivePDULength(Connection.DEF_MAX_PDU_LENGTH);
84
		conn.setSendPDULength(Connection.DEF_MAX_PDU_LENGTH);
85
		conn.setMaxOpsInvoked(0);
86
		conn.setMaxOpsPerformed(0);
87
88
		conn.setPackPDV(true);
89
		conn.setConnectTimeout(0);
90
		conn.setRequestTimeout(0);
91
		conn.setAcceptTimeout(0);
92
		conn.setReleaseTimeout(0);
93
		conn.setResponseTimeout(0);
94
95
		conn.setIdleTimeout(0);
96
		conn.setSocketCloseDelay(Connection.DEF_SOCKETDELAY);
97
		conn.setSendBufferSize(0);
98
		conn.setReceiveBufferSize(0);
99
		conn.setTcpNoDelay(true);
100
	}
101
102
	public void addAttribute(int tag, String value) {
103
		VR vr = ElementDictionary.vrOf(tag, keys.getPrivateCreator(tag));
104
		if (value == null) {
105
106
			if (vr == VR.SQ)
107
				keys.newSequence(tag, 1).add(new Attributes(0));
108
			else
109
				keys.setNull(tag, vr);
110
		} else {
111
			keys.setString(tag, vr, value);
112
		}
113
	}
114
115
	public void move(String title, String hostname, int port, String imageId)
116
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
117
118
		this.setRemote(title, hostname, port);
119
		this.rq.addPresentationContext(
120
				new PresentationContext(1, UID.StudyRootQueryRetrieveInformationModelMOVE, IVR_LE_FIRST));
121
		this.keys.setString(Tag.QueryRetrieveLevel, VR.CS, "IMAGE");
122
		this.addAttribute(Tag.SOPInstanceUID, imageId);
123
124
		this.destination = "AIADS";
125
		ExecutorService executorService = Executors.newSingleThreadExecutor();
126
		ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
127
		this.setExecutor(executorService);
128
		this.setScheduledExecutor(scheduledExecutorService);
129
130
		try {
131
			as = ae.connect(conn, remote, rq);
132
			DimseRSPHandler rspHandler = new DimseRSPHandler(as.nextMessageID()) {
133
134
				@Override
135
				public void onDimseRSP(Association as, Attributes cmd, Attributes data) {
136
					super.onDimseRSP(as, cmd, data);
137
				}
138
			};
139
140
			as.cmove(UID.StudyRootQueryRetrieveInformationModelMOVE, Priority.NORMAL, keys, null, destination, rspHandler);
141
		} finally {
142
			if (as != null && as.isReadyForDataTransfer()) {
143
				as.waitForOutstandingRSP();
144
				as.release();
145
			}
146
			executorService.shutdown();
147
			scheduledExecutorService.shutdown();
148
		}
149
150
	}
151
152
	@SuppressWarnings("unchecked")
153
	public static void main(String[] args)
154
			throws IOException, GeneralSecurityException, InterruptedException, IncompatibleConnectionException {
155
		DicomMoveImage m = new DicomMoveImage();
156
		DicomStoreService.startup();
157
		try {
158
			m.move("STPACS", "133.0.14.150", 104, "1.2.840.113663.1500.1.446929507.3.1.20190308.101952.92");
159
		} finally {
160
			DicomStoreService.stop();
161
		}
162
163
	}
164
}

+ 2 - 2
src/main/java/com/ekexiu/project/storage/dicom/DicomQueryImage.java

@ -104,8 +104,8 @@ public class DicomQueryImage extends DicomBase {
104 104

105 105
	public static void main(String args[])
106 106
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
107
		DicomQueryImage q = new DicomQueryImage("findscu");
108
		q.query("DCM4CHEE", "192.168.3.97", 11112, "1.2.840.113663.1500.1.434945515.1.1.20180902.100500.537","1.2.840.113663.1500.1.434945515.2.1.20180902.100500.539");
107
		DicomQueryImage q = new DicomQueryImage("AIADS");
108
		q.query("STPACS", "133.0.14.150", 104, "1.740423.3789686689.54180.18752.4006749352.191259665321507","1.2.840.113663.1500.1.446929507.2.1.20190308.101944.249");
109 109
		
110 110
		for(SeriesImage s:q.result){
111 111
			System.out.println(JsonService.toJson(s));

+ 2 - 2
src/main/java/com/ekexiu/project/storage/dicom/DicomQuerySeries.java

@ -119,8 +119,8 @@ public class DicomQuerySeries extends DicomBase {
119 119

120 120
	public static void main(String args[])
121 121
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
122
		DicomQuerySeries q = new DicomQuerySeries("findscu");
123
		q.query("DCM4CHEE", "192.168.3.97", 11112, "1.2.840.113663.1500.1.434945515.1.1.20180902.100500.537");
122
		DicomQuerySeries q = new DicomQuerySeries("AIADS");
123
		q.query("STPACS", "133.0.14.150", 104, "1.740423.3789686689.54180.18752.4006749352.191259665321507");
124 124
		
125 125
		for(StudySeries s:q.result){
126 126
			System.out.println(JsonService.toJson(s));

+ 1 - 1
src/main/java/com/ekexiu/project/storage/dicom/DicomQueryStudy.java

@ -133,7 +133,7 @@ public class DicomQueryStudy extends DicomBase {
133 133
	public static void main(String args[])
134 134
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
135 135
		DicomQueryStudy q = new DicomQueryStudy("AIADS");
136
		q.query("STPACS", "133.0.14.150", 104, "759417ASD", null);
136
		q.query("STPACS", "133.0.14.150", 104,null, /*"759417ASD"*/"PID000115788");
137 137
		
138 138
		for(PatientStudy s:q.result){
139 139
			System.out.println(JsonService.toJson(s));

+ 519 - 0
src/main/java/com/ekexiu/project/storage/dicom/DicomStoreService.java

@ -0,0 +1,519 @@
1
package com.ekexiu.project.storage.dicom;
2
3
import java.io.File;
4
import java.io.IOException;
5
import java.security.GeneralSecurityException;
6
import java.util.concurrent.ExecutorService;
7
import java.util.concurrent.Executors;
8
import java.util.concurrent.ScheduledExecutorService;
9
import java.util.concurrent.atomic.AtomicBoolean;
10
11
import org.dcm4che3.data.Attributes;
12
import org.dcm4che3.data.Tag;
13
import org.dcm4che3.data.UID;
14
import org.dcm4che3.data.VR;
15
import org.dcm4che3.io.DicomOutputStream;
16
import org.dcm4che3.net.ApplicationEntity;
17
import org.dcm4che3.net.Association;
18
import org.dcm4che3.net.Connection;
19
import org.dcm4che3.net.Device;
20
import org.dcm4che3.net.PDVInputStream;
21
import org.dcm4che3.net.Status;
22
import org.dcm4che3.net.TransferCapability;
23
import org.dcm4che3.net.pdu.PresentationContext;
24
import org.dcm4che3.net.service.BasicCEchoSCP;
25
import org.dcm4che3.net.service.BasicCStoreSCP;
26
import org.dcm4che3.net.service.DicomServiceException;
27
import org.dcm4che3.net.service.DicomServiceRegistry;
28
import org.dcm4che3.util.SafeClose;
29
30
public class DicomStoreService
31
{
32
	private static AtomicBoolean running = new AtomicBoolean(false);
33
	private static final String PART_EXT = ".part";
34
	private static Connection closeConn;
35
36
	synchronized public static void startup() throws IOException, GeneralSecurityException {
37
		if (running.get()) {
38
			return;
39
		}
40
41
		DicomStoreService service = new DicomStoreService();
42
		service.run();
43
	}
44
45
	synchronized public static void stop() {
46
		if (!running.get()) {
47
			return;
48
		}
49
		closeConn.unbind();
50
		running.set(false);
51
52
	}
53
54
	private final Device device = new Device("AIADS");
55
	private final ApplicationEntity ae = new ApplicationEntity("AIADS");
56
	private final Connection conn = new Connection();
57
	private File storageDir = new File("/ekexiu/storage_asd/download");
58
	private int status;
59
	private int responseDelay;
60
	private final BasicCStoreSCP cstoreSCP = new BasicCStoreSCP("*") {
61
62
		@Override
63
		protected void store(Association as, PresentationContext pc, Attributes rq, PDVInputStream data, Attributes rsp)
64
				throws IOException {
65
			try {
66
				rsp.setInt(Tag.Status, VR.US, status);
67
				if (storageDir == null)
68
					return;
69
70
				String cuid = rq.getString(Tag.AffectedSOPClassUID);
71
				String iuid = rq.getString(Tag.AffectedSOPInstanceUID);
72
				String tsuid = pc.getTransferSyntax();
73
				File file = new File(storageDir, iuid + PART_EXT);
74
				try {
75
					storeTo(as, as.createFileMetaInformation(iuid, cuid, tsuid), data, file);
76
					renameTo(as, file, new File(storageDir, iuid));
77
				} catch (Exception e) {
78
					file.delete();
79
					throw new DicomServiceException(Status.ProcessingFailure, e);
80
				}
81
			} finally {
82
				if (responseDelay > 0)
83
					try {
84
						Thread.sleep(responseDelay);
85
					} catch (InterruptedException ignore) {}
86
			}
87
		}
88
89
	};
90
91
	public DicomStoreService() {
92
		device.setDimseRQHandler(createServiceRegistry());
93
		device.addConnection(conn);
94
		device.addApplicationEntity(ae);
95
		ae.setAssociationAcceptor(true);
96
		ae.addConnection(conn);
97
	}
98
99
	private DicomServiceRegistry createServiceRegistry() {
100
		DicomServiceRegistry serviceRegistry = new DicomServiceRegistry();
101
		serviceRegistry.addDicomService(new BasicCEchoSCP());
102
		serviceRegistry.addDicomService(cstoreSCP);
103
		return serviceRegistry;
104
	}
105
106
	private void storeTo(Association as, Attributes fmi, PDVInputStream data, File file) throws IOException {
107
		file.getParentFile().mkdirs();
108
		DicomOutputStream out = new DicomOutputStream(file);
109
		try {
110
			out.writeFileMetaInformation(fmi);
111
			data.copyTo(out);
112
		} finally {
113
			SafeClose.close(out);
114
		}
115
	}
116
117
	private static void renameTo(Association as, File from, File dest) throws IOException {
118
		if (!dest.getParentFile().mkdirs())
119
			dest.delete();
120
		if (!from.renameTo(dest))
121
			throw new IOException("Failed to rename " + from + " to " + dest);
122
	}
123
124
	private void run() throws IOException, GeneralSecurityException {
125
126
		conn.setPort(6000);
127
		conn.setReceivePDULength(Connection.DEF_MAX_PDU_LENGTH);
128
		conn.setSendPDULength(Connection.DEF_MAX_PDU_LENGTH);
129
130
		conn.setMaxOpsInvoked(0);
131
		conn.setMaxOpsPerformed(0);
132
		conn.setPackPDV(true);
133
		conn.setConnectTimeout(0);
134
		conn.setRequestTimeout(0);
135
		conn.setAcceptTimeout(0);
136
		conn.setReleaseTimeout(0);
137
		conn.setResponseTimeout(0);
138
139
		conn.setIdleTimeout(0);
140
		conn.setSocketCloseDelay(Connection.DEF_SOCKETDELAY);
141
		conn.setSendBufferSize(0);
142
		conn.setReceiveBufferSize(0);
143
		conn.setTcpNoDelay(true);
144
		this.status = 0;
145
		this.responseDelay = 0;
146
147
		TransferCapability tc = null;
148
149
		tc = new TransferCapability(null, UID.VerificationSOPClass, TransferCapability.Role.SCP,
150
				UID.ImplicitVRLittleEndian);
151
		ae.addTransferCapability(tc);
152
		tc = new TransferCapability(null, UID.StorageServiceClass, TransferCapability.Role.SCP, "*");
153
		ae.addTransferCapability(tc);
154
		tc = new TransferCapability(null, UID.BasicStudyContentNotificationSOPClassRetired, TransferCapability.Role.SCP,
155
				"*");
156
		ae.addTransferCapability(tc);
157
		tc = new TransferCapability(null, UID.StoredPrintStorageSOPClassRetired, TransferCapability.Role.SCP, "*");
158
		ae.addTransferCapability(tc);
159
		tc = new TransferCapability(null, UID.HardcopyGrayscaleImageStorageSOPClassRetired, TransferCapability.Role.SCP,
160
				"*");
161
		ae.addTransferCapability(tc);
162
		tc = new TransferCapability(null, UID.HardcopyColorImageStorageSOPClassRetired, TransferCapability.Role.SCP,
163
				"*");
164
		ae.addTransferCapability(tc);
165
		tc = new TransferCapability(null, UID.ComputedRadiographyImageStorage, TransferCapability.Role.SCP, "*");
166
		ae.addTransferCapability(tc);
167
		tc = new TransferCapability(null, UID.DigitalXRayImageStorageForPresentation, TransferCapability.Role.SCP, "*");
168
		ae.addTransferCapability(tc);
169
		tc = new TransferCapability(null, UID.DigitalXRayImageStorageForProcessing, TransferCapability.Role.SCP, "*");
170
		ae.addTransferCapability(tc);
171
		tc = new TransferCapability(null, UID.DigitalMammographyXRayImageStorageForPresentation,
172
				TransferCapability.Role.SCP, "*");
173
		ae.addTransferCapability(tc);
174
		tc = new TransferCapability(null, UID.DigitalMammographyXRayImageStorageForProcessing,
175
				TransferCapability.Role.SCP, "*");
176
		ae.addTransferCapability(tc);
177
		tc = new TransferCapability(null, UID.DigitalIntraOralXRayImageStorageForPresentation,
178
				TransferCapability.Role.SCP, "*");
179
		ae.addTransferCapability(tc);
180
		tc = new TransferCapability(null, UID.DigitalIntraOralXRayImageStorageForProcessing,
181
				TransferCapability.Role.SCP, "*");
182
		ae.addTransferCapability(tc);
183
		tc = new TransferCapability(null, UID.CTImageStorage, TransferCapability.Role.SCP, "*");
184
		ae.addTransferCapability(tc);
185
		tc = new TransferCapability(null, UID.EnhancedCTImageStorage, TransferCapability.Role.SCP, "*");
186
		ae.addTransferCapability(tc);
187
		tc = new TransferCapability(null, UID.LegacyConvertedEnhancedCTImageStorage, TransferCapability.Role.SCP, "*");
188
		ae.addTransferCapability(tc);
189
		tc = new TransferCapability(null, UID.UltrasoundMultiFrameImageStorageRetired, TransferCapability.Role.SCP,
190
				"*");
191
		ae.addTransferCapability(tc);
192
		tc = new TransferCapability(null, UID.UltrasoundMultiFrameImageStorage, TransferCapability.Role.SCP, "*");
193
		ae.addTransferCapability(tc);
194
		tc = new TransferCapability(null, UID.MRImageStorage, TransferCapability.Role.SCP, "*");
195
		ae.addTransferCapability(tc);
196
		tc = new TransferCapability(null, UID.EnhancedMRImageStorage, TransferCapability.Role.SCP, "*");
197
		ae.addTransferCapability(tc);
198
		tc = new TransferCapability(null, UID.MRSpectroscopyStorage, TransferCapability.Role.SCP, "*");
199
		ae.addTransferCapability(tc);
200
		tc = new TransferCapability(null, UID.EnhancedMRColorImageStorage, TransferCapability.Role.SCP, "*");
201
		ae.addTransferCapability(tc);
202
		tc = new TransferCapability(null, UID.LegacyConvertedEnhancedMRImageStorage, TransferCapability.Role.SCP, "*");
203
		ae.addTransferCapability(tc);
204
		tc = new TransferCapability(null, UID.NuclearMedicineImageStorageRetired, TransferCapability.Role.SCP, "*");
205
		ae.addTransferCapability(tc);
206
		tc = new TransferCapability(null, UID.UltrasoundImageStorageRetired, TransferCapability.Role.SCP, "*");
207
		ae.addTransferCapability(tc);
208
		tc = new TransferCapability(null, UID.UltrasoundImageStorage, TransferCapability.Role.SCP, "*");
209
		ae.addTransferCapability(tc);
210
		tc = new TransferCapability(null, UID.EnhancedUSVolumeStorage, TransferCapability.Role.SCP, "*");
211
		ae.addTransferCapability(tc);
212
		tc = new TransferCapability(null, UID.SecondaryCaptureImageStorage, TransferCapability.Role.SCP, "*");
213
		ae.addTransferCapability(tc);
214
		tc = new TransferCapability(null, UID.MultiFrameSingleBitSecondaryCaptureImageStorage,
215
				TransferCapability.Role.SCP, "*");
216
		ae.addTransferCapability(tc);
217
		tc = new TransferCapability(null, UID.MultiFrameGrayscaleByteSecondaryCaptureImageStorage,
218
				TransferCapability.Role.SCP, "*");
219
		ae.addTransferCapability(tc);
220
		tc = new TransferCapability(null, UID.MultiFrameGrayscaleWordSecondaryCaptureImageStorage,
221
				TransferCapability.Role.SCP, "*");
222
		ae.addTransferCapability(tc);
223
		tc = new TransferCapability(null, UID.MultiFrameTrueColorSecondaryCaptureImageStorage,
224
				TransferCapability.Role.SCP, "*");
225
		ae.addTransferCapability(tc);
226
		tc = new TransferCapability(null, UID.StandaloneOverlayStorageRetired, TransferCapability.Role.SCP, "*");
227
		ae.addTransferCapability(tc);
228
		tc = new TransferCapability(null, UID.StandaloneCurveStorageRetired, TransferCapability.Role.SCP, "*");
229
		ae.addTransferCapability(tc);
230
		tc = new TransferCapability(null, UID.WaveformStorageTrialRetired, TransferCapability.Role.SCP, "*");
231
		ae.addTransferCapability(tc);
232
		tc = new TransferCapability(null, UID.TwelveLeadECGWaveformStorage, TransferCapability.Role.SCP, "*");
233
		ae.addTransferCapability(tc);
234
		tc = new TransferCapability(null, UID.GeneralECGWaveformStorage, TransferCapability.Role.SCP, "*");
235
		ae.addTransferCapability(tc);
236
		tc = new TransferCapability(null, UID.AmbulatoryECGWaveformStorage, TransferCapability.Role.SCP, "*");
237
		ae.addTransferCapability(tc);
238
		tc = new TransferCapability(null, UID.HemodynamicWaveformStorage, TransferCapability.Role.SCP, "*");
239
		ae.addTransferCapability(tc);
240
		tc = new TransferCapability(null, UID.CardiacElectrophysiologyWaveformStorage, TransferCapability.Role.SCP,
241
				"*");
242
		ae.addTransferCapability(tc);
243
		tc = new TransferCapability(null, UID.BasicVoiceAudioWaveformStorage, TransferCapability.Role.SCP, "*");
244
		ae.addTransferCapability(tc);
245
		tc = new TransferCapability(null, UID.GeneralAudioWaveformStorage, TransferCapability.Role.SCP, "*");
246
		ae.addTransferCapability(tc);
247
		tc = new TransferCapability(null, UID.ArterialPulseWaveformStorage, TransferCapability.Role.SCP, "*");
248
		ae.addTransferCapability(tc);
249
		tc = new TransferCapability(null, UID.RespiratoryWaveformStorage, TransferCapability.Role.SCP, "*");
250
		ae.addTransferCapability(tc);
251
		tc = new TransferCapability(null, UID.StandaloneModalityLUTStorageRetired, TransferCapability.Role.SCP, "*");
252
		ae.addTransferCapability(tc);
253
		tc = new TransferCapability(null, UID.StandaloneVOILUTStorageRetired, TransferCapability.Role.SCP, "*");
254
		ae.addTransferCapability(tc);
255
		tc = new TransferCapability(null, UID.GrayscaleSoftcopyPresentationStateStorage, TransferCapability.Role.SCP,
256
				"*");
257
		ae.addTransferCapability(tc);
258
		tc = new TransferCapability(null, UID.ColorSoftcopyPresentationStateStorage, TransferCapability.Role.SCP, "*");
259
		ae.addTransferCapability(tc);
260
		tc = new TransferCapability(null, UID.PseudoColorSoftcopyPresentationStateStorage, TransferCapability.Role.SCP,
261
				"*");
262
		ae.addTransferCapability(tc);
263
		tc = new TransferCapability(null, UID.BlendingSoftcopyPresentationStateStorage, TransferCapability.Role.SCP,
264
				"*");
265
		ae.addTransferCapability(tc);
266
		tc = new TransferCapability(null, UID.XAXRFGrayscaleSoftcopyPresentationStateStorage,
267
				TransferCapability.Role.SCP, "*");
268
		ae.addTransferCapability(tc);
269
		tc = new TransferCapability(null, UID.GrayscalePlanarMPRVolumetricPresentationStateStorage,
270
				TransferCapability.Role.SCP, "*");
271
		ae.addTransferCapability(tc);
272
		tc = new TransferCapability(null, UID.CompositingPlanarMPRVolumetricPresentationStateStorage,
273
				TransferCapability.Role.SCP, "*");
274
		ae.addTransferCapability(tc);
275
		tc = new TransferCapability(null, UID.AdvancedBlendingPresentationStateStorage, TransferCapability.Role.SCP,
276
				"*");
277
		ae.addTransferCapability(tc);
278
		tc = new TransferCapability(null, UID.VolumeRenderingVolumetricPresentationStateStorage,
279
				TransferCapability.Role.SCP, "*");
280
		ae.addTransferCapability(tc);
281
		tc = new TransferCapability(null, UID.SegmentedVolumeRenderingVolumetricPresentationStateStorage,
282
				TransferCapability.Role.SCP, "*");
283
		ae.addTransferCapability(tc);
284
		tc = new TransferCapability(null, UID.MultipleVolumeRenderingVolumetricPresentationStateStorage,
285
				TransferCapability.Role.SCP, "*");
286
		ae.addTransferCapability(tc);
287
		tc = new TransferCapability(null, UID.XRayAngiographicImageStorage, TransferCapability.Role.SCP, "*");
288
		ae.addTransferCapability(tc);
289
		tc = new TransferCapability(null, UID.EnhancedXAImageStorage, TransferCapability.Role.SCP, "*");
290
		ae.addTransferCapability(tc);
291
		tc = new TransferCapability(null, UID.XRayRadiofluoroscopicImageStorage, TransferCapability.Role.SCP, "*");
292
		ae.addTransferCapability(tc);
293
		tc = new TransferCapability(null, UID.EnhancedXRFImageStorage, TransferCapability.Role.SCP, "*");
294
		ae.addTransferCapability(tc);
295
		tc = new TransferCapability(null, UID.XRayAngiographicBiPlaneImageStorageRetired, TransferCapability.Role.SCP,
296
				"*");
297
		ae.addTransferCapability(tc);
298
		tc = new TransferCapability(null, UID.XRay3DAngiographicImageStorage, TransferCapability.Role.SCP, "*");
299
		ae.addTransferCapability(tc);
300
		tc = new TransferCapability(null, UID.XRay3DCraniofacialImageStorage, TransferCapability.Role.SCP, "*");
301
		ae.addTransferCapability(tc);
302
		tc = new TransferCapability(null, UID.BreastTomosynthesisImageStorage, TransferCapability.Role.SCP, "*");
303
		ae.addTransferCapability(tc);
304
		tc = new TransferCapability(null, UID.BreastProjectionXRayImageStorageForPresentation,
305
				TransferCapability.Role.SCP, "*");
306
		ae.addTransferCapability(tc);
307
		tc = new TransferCapability(null, UID.BreastProjectionXRayImageStorageForProcessing,
308
				TransferCapability.Role.SCP, "*");
309
		ae.addTransferCapability(tc);
310
		tc = new TransferCapability(null, UID.IntravascularOpticalCoherenceTomographyImageStorageForPresentation,
311
				TransferCapability.Role.SCP, "*");
312
		ae.addTransferCapability(tc);
313
		tc = new TransferCapability(null, UID.IntravascularOpticalCoherenceTomographyImageStorageForProcessing,
314
				TransferCapability.Role.SCP, "*");
315
		ae.addTransferCapability(tc);
316
		tc = new TransferCapability(null, UID.NuclearMedicineImageStorage, TransferCapability.Role.SCP, "*");
317
		ae.addTransferCapability(tc);
318
		tc = new TransferCapability(null, UID.ParametricMapStorage, TransferCapability.Role.SCP, "*");
319
		ae.addTransferCapability(tc);
320
		tc = new TransferCapability(null, UID.MRImageStorageZeroPaddedRetired, TransferCapability.Role.SCP, "*");
321
		ae.addTransferCapability(tc);
322
		tc = new TransferCapability(null, UID.RawDataStorage, TransferCapability.Role.SCP, "*");
323
		ae.addTransferCapability(tc);
324
		tc = new TransferCapability(null, UID.SpatialRegistrationStorage, TransferCapability.Role.SCP, "*");
325
		ae.addTransferCapability(tc);
326
		tc = new TransferCapability(null, UID.SpatialFiducialsStorage, TransferCapability.Role.SCP, "*");
327
		ae.addTransferCapability(tc);
328
		tc = new TransferCapability(null, UID.DeformableSpatialRegistrationStorage, TransferCapability.Role.SCP, "*");
329
		ae.addTransferCapability(tc);
330
		tc = new TransferCapability(null, UID.SegmentationStorage, TransferCapability.Role.SCP, "*");
331
		ae.addTransferCapability(tc);
332
		tc = new TransferCapability(null, UID.SurfaceSegmentationStorage, TransferCapability.Role.SCP, "*");
333
		ae.addTransferCapability(tc);
334
		tc = new TransferCapability(null, UID.TractographyResultsStorage, TransferCapability.Role.SCP, "*");
335
		ae.addTransferCapability(tc);
336
		tc = new TransferCapability(null, UID.RealWorldValueMappingStorage, TransferCapability.Role.SCP, "*");
337
		ae.addTransferCapability(tc);
338
		tc = new TransferCapability(null, UID.SurfaceScanMeshStorage, TransferCapability.Role.SCP, "*");
339
		ae.addTransferCapability(tc);
340
		tc = new TransferCapability(null, UID.SurfaceScanPointCloudStorage, TransferCapability.Role.SCP, "*");
341
		ae.addTransferCapability(tc);
342
		tc = new TransferCapability(null, UID.VLImageStorageTrialRetired, TransferCapability.Role.SCP, "*");
343
		ae.addTransferCapability(tc);
344
		tc = new TransferCapability(null, UID.VLMultiFrameImageStorageTrialRetired, TransferCapability.Role.SCP, "*");
345
		ae.addTransferCapability(tc);
346
		tc = new TransferCapability(null, UID.VLEndoscopicImageStorage, TransferCapability.Role.SCP, "*");
347
		ae.addTransferCapability(tc);
348
		tc = new TransferCapability(null, UID.VideoEndoscopicImageStorage, TransferCapability.Role.SCP, "*");
349
		ae.addTransferCapability(tc);
350
		tc = new TransferCapability(null, UID.VLMicroscopicImageStorage, TransferCapability.Role.SCP, "*");
351
		ae.addTransferCapability(tc);
352
		tc = new TransferCapability(null, UID.VideoMicroscopicImageStorage, TransferCapability.Role.SCP, "*");
353
		ae.addTransferCapability(tc);
354
		tc = new TransferCapability(null, UID.VLSlideCoordinatesMicroscopicImageStorage, TransferCapability.Role.SCP,
355
				"*");
356
		ae.addTransferCapability(tc);
357
		tc = new TransferCapability(null, UID.VLPhotographicImageStorage, TransferCapability.Role.SCP, "*");
358
		ae.addTransferCapability(tc);
359
		tc = new TransferCapability(null, UID.VideoPhotographicImageStorage, TransferCapability.Role.SCP, "*");
360
		ae.addTransferCapability(tc);
361
		tc = new TransferCapability(null, UID.OphthalmicPhotography8BitImageStorage, TransferCapability.Role.SCP, "*");
362
		ae.addTransferCapability(tc);
363
		tc = new TransferCapability(null, UID.OphthalmicPhotography16BitImageStorage, TransferCapability.Role.SCP, "*");
364
		ae.addTransferCapability(tc);
365
		tc = new TransferCapability(null, UID.StereometricRelationshipStorage, TransferCapability.Role.SCP, "*");
366
		ae.addTransferCapability(tc);
367
		tc = new TransferCapability(null, UID.OphthalmicTomographyImageStorage, TransferCapability.Role.SCP, "*");
368
		ae.addTransferCapability(tc);
369
		tc = new TransferCapability(null, UID.WideFieldOphthalmicPhotographyStereographicProjectionImageStorage,
370
				TransferCapability.Role.SCP, "*");
371
		ae.addTransferCapability(tc);
372
		tc = new TransferCapability(null, UID.WideFieldOphthalmicPhotography3DCoordinatesImageStorage,
373
				TransferCapability.Role.SCP, "*");
374
		ae.addTransferCapability(tc);
375
		tc = new TransferCapability(null, UID.OphthalmicOpticalCoherenceTomographyEnFaceImageStorage,
376
				TransferCapability.Role.SCP, "*");
377
		ae.addTransferCapability(tc);
378
		tc = new TransferCapability(null, UID.OphthalmicOpticalCoherenceTomographyBScanVolumeAnalysisStorage,
379
				TransferCapability.Role.SCP, "*");
380
		ae.addTransferCapability(tc);
381
		tc = new TransferCapability(null, UID.VLWholeSlideMicroscopyImageStorage, TransferCapability.Role.SCP, "*");
382
		ae.addTransferCapability(tc);
383
		tc = new TransferCapability(null, UID.LensometryMeasurementsStorage, TransferCapability.Role.SCP, "*");
384
		ae.addTransferCapability(tc);
385
		tc = new TransferCapability(null, UID.AutorefractionMeasurementsStorage, TransferCapability.Role.SCP, "*");
386
		ae.addTransferCapability(tc);
387
		tc = new TransferCapability(null, UID.KeratometryMeasurementsStorage, TransferCapability.Role.SCP, "*");
388
		ae.addTransferCapability(tc);
389
		tc = new TransferCapability(null, UID.SubjectiveRefractionMeasurementsStorage, TransferCapability.Role.SCP,
390
				"*");
391
		ae.addTransferCapability(tc);
392
		tc = new TransferCapability(null, UID.VisualAcuityMeasurementsStorage, TransferCapability.Role.SCP, "*");
393
		ae.addTransferCapability(tc);
394
		tc = new TransferCapability(null, UID.SpectaclePrescriptionReportStorage, TransferCapability.Role.SCP, "*");
395
		ae.addTransferCapability(tc);
396
		tc = new TransferCapability(null, UID.OphthalmicAxialMeasurementsStorage, TransferCapability.Role.SCP, "*");
397
		ae.addTransferCapability(tc);
398
		tc = new TransferCapability(null, UID.IntraocularLensCalculationsStorage, TransferCapability.Role.SCP, "*");
399
		ae.addTransferCapability(tc);
400
		tc = new TransferCapability(null, UID.MacularGridThicknessAndVolumeReportStorage, TransferCapability.Role.SCP,
401
				"*");
402
		ae.addTransferCapability(tc);
403
		tc = new TransferCapability(null, UID.OphthalmicVisualFieldStaticPerimetryMeasurementsStorage,
404
				TransferCapability.Role.SCP, "*");
405
		ae.addTransferCapability(tc);
406
		tc = new TransferCapability(null, UID.OphthalmicThicknessMapStorage, TransferCapability.Role.SCP, "*");
407
		ae.addTransferCapability(tc);
408
		tc = new TransferCapability(null, UID.CornealTopographyMapStorage, TransferCapability.Role.SCP, "*");
409
		ae.addTransferCapability(tc);
410
		tc = new TransferCapability(null, UID.TextSRStorageTrialRetired, TransferCapability.Role.SCP, "*");
411
		ae.addTransferCapability(tc);
412
		tc = new TransferCapability(null, UID.AudioSRStorageTrialRetired, TransferCapability.Role.SCP, "*");
413
		ae.addTransferCapability(tc);
414
		tc = new TransferCapability(null, UID.DetailSRStorageTrialRetired, TransferCapability.Role.SCP, "*");
415
		ae.addTransferCapability(tc);
416
		tc = new TransferCapability(null, UID.ComprehensiveSRStorageTrialRetired, TransferCapability.Role.SCP, "*");
417
		ae.addTransferCapability(tc);
418
		tc = new TransferCapability(null, UID.BasicTextSRStorage, TransferCapability.Role.SCP, "*");
419
		ae.addTransferCapability(tc);
420
		tc = new TransferCapability(null, UID.EnhancedSRStorage, TransferCapability.Role.SCP, "*");
421
		ae.addTransferCapability(tc);
422
		tc = new TransferCapability(null, UID.ComprehensiveSRStorage, TransferCapability.Role.SCP, "*");
423
		ae.addTransferCapability(tc);
424
		tc = new TransferCapability(null, UID.Comprehensive3DSRStorage, TransferCapability.Role.SCP, "*");
425
		ae.addTransferCapability(tc);
426
		tc = new TransferCapability(null, UID.ExtensibleSRStorage, TransferCapability.Role.SCP, "*");
427
		ae.addTransferCapability(tc);
428
		tc = new TransferCapability(null, UID.ProcedureLogStorage, TransferCapability.Role.SCP, "*");
429
		ae.addTransferCapability(tc);
430
		tc = new TransferCapability(null, UID.MammographyCADSRStorage, TransferCapability.Role.SCP, "*");
431
		ae.addTransferCapability(tc);
432
		tc = new TransferCapability(null, UID.KeyObjectSelectionDocumentStorage, TransferCapability.Role.SCP, "*");
433
		ae.addTransferCapability(tc);
434
		tc = new TransferCapability(null, UID.ChestCADSRStorage, TransferCapability.Role.SCP, "*");
435
		ae.addTransferCapability(tc);
436
		tc = new TransferCapability(null, UID.XRayRadiationDoseSRStorage, TransferCapability.Role.SCP, "*");
437
		ae.addTransferCapability(tc);
438
		tc = new TransferCapability(null, UID.RadiopharmaceuticalRadiationDoseSRStorage, TransferCapability.Role.SCP,
439
				"*");
440
		ae.addTransferCapability(tc);
441
		tc = new TransferCapability(null, UID.ColonCADSRStorage, TransferCapability.Role.SCP, "*");
442
		ae.addTransferCapability(tc);
443
		tc = new TransferCapability(null, UID.ImplantationPlanSRStorage, TransferCapability.Role.SCP, "*");
444
		ae.addTransferCapability(tc);
445
		tc = new TransferCapability(null, UID.AcquisitionContextSRStorage, TransferCapability.Role.SCP, "*");
446
		ae.addTransferCapability(tc);
447
		tc = new TransferCapability(null, UID.SimplifiedAdultEchoSRStorage, TransferCapability.Role.SCP, "*");
448
		ae.addTransferCapability(tc);
449
		tc = new TransferCapability(null, UID.PatientRadiationDoseSRStorage, TransferCapability.Role.SCP, "*");
450
		ae.addTransferCapability(tc);
451
		tc = new TransferCapability(null, UID.ContentAssessmentResultsStorage, TransferCapability.Role.SCP, "*");
452
		ae.addTransferCapability(tc);
453
		tc = new TransferCapability(null, UID.EncapsulatedPDFStorage, TransferCapability.Role.SCP, "*");
454
		ae.addTransferCapability(tc);
455
		tc = new TransferCapability(null, UID.EncapsulatedCDAStorage, TransferCapability.Role.SCP, "*");
456
		ae.addTransferCapability(tc);
457
		tc = new TransferCapability(null, UID.EncapsulatedSTLStorage, TransferCapability.Role.SCP, "*");
458
		ae.addTransferCapability(tc);
459
		tc = new TransferCapability(null, UID.PositronEmissionTomographyImageStorage, TransferCapability.Role.SCP, "*");
460
		ae.addTransferCapability(tc);
461
		tc = new TransferCapability(null, UID.LegacyConvertedEnhancedPETImageStorage, TransferCapability.Role.SCP, "*");
462
		ae.addTransferCapability(tc);
463
		tc = new TransferCapability(null, UID.StandalonePETCurveStorageRetired, TransferCapability.Role.SCP, "*");
464
		ae.addTransferCapability(tc);
465
		tc = new TransferCapability(null, UID.EnhancedPETImageStorage, TransferCapability.Role.SCP, "*");
466
		ae.addTransferCapability(tc);
467
		tc = new TransferCapability(null, UID.BasicStructuredDisplayStorage, TransferCapability.Role.SCP, "*");
468
		ae.addTransferCapability(tc);
469
		tc = new TransferCapability(null, UID.CTDefinedProcedureProtocolStorage, TransferCapability.Role.SCP, "*");
470
		ae.addTransferCapability(tc);
471
		tc = new TransferCapability(null, UID.CTPerformedProcedureProtocolStorage, TransferCapability.Role.SCP, "*");
472
		ae.addTransferCapability(tc);
473
		tc = new TransferCapability(null, UID.ProtocolApprovalStorage, TransferCapability.Role.SCP, "*");
474
		ae.addTransferCapability(tc);
475
		tc = new TransferCapability(null, UID.RTImageStorage, TransferCapability.Role.SCP, "*");
476
		ae.addTransferCapability(tc);
477
		tc = new TransferCapability(null, UID.RTDoseStorage, TransferCapability.Role.SCP, "*");
478
		ae.addTransferCapability(tc);
479
		tc = new TransferCapability(null, UID.RTStructureSetStorage, TransferCapability.Role.SCP, "*");
480
		ae.addTransferCapability(tc);
481
		tc = new TransferCapability(null, UID.RTBeamsTreatmentRecordStorage, TransferCapability.Role.SCP, "*");
482
		ae.addTransferCapability(tc);
483
		tc = new TransferCapability(null, UID.RTPlanStorage, TransferCapability.Role.SCP, "*");
484
		ae.addTransferCapability(tc);
485
		tc = new TransferCapability(null, UID.RTBrachyTreatmentRecordStorage, TransferCapability.Role.SCP, "*");
486
		ae.addTransferCapability(tc);
487
		tc = new TransferCapability(null, UID.RTTreatmentSummaryRecordStorage, TransferCapability.Role.SCP, "*");
488
		ae.addTransferCapability(tc);
489
		tc = new TransferCapability(null, UID.RTIonPlanStorage, TransferCapability.Role.SCP, "*");
490
		ae.addTransferCapability(tc);
491
		tc = new TransferCapability(null, UID.RTIonBeamsTreatmentRecordStorage, TransferCapability.Role.SCP, "*");
492
		ae.addTransferCapability(tc);
493
		tc = new TransferCapability(null, UID.RTBeamsDeliveryInstructionStorageTrialRetired,
494
				TransferCapability.Role.SCP, "*");
495
		ae.addTransferCapability(tc);
496
		tc = new TransferCapability(null, UID.RTBeamsDeliveryInstructionStorage, TransferCapability.Role.SCP, "*");
497
		ae.addTransferCapability(tc);
498
		tc = new TransferCapability(null, UID.RTBrachyApplicationSetupDeliveryInstructionStorage,
499
				TransferCapability.Role.SCP, "*");
500
		ae.addTransferCapability(tc);
501
		tc = new TransferCapability(null, UID.HangingProtocolStorage, TransferCapability.Role.SCP, "*");
502
		ae.addTransferCapability(tc);
503
		tc = new TransferCapability(null, UID.ColorPaletteStorage, TransferCapability.Role.SCP, "*");
504
		ae.addTransferCapability(tc);
505
		tc = new TransferCapability(null, UID.GenericImplantTemplateStorage, TransferCapability.Role.SCP, "*");
506
		ae.addTransferCapability(tc);
507
		tc = new TransferCapability(null, UID.ImplantAssemblyTemplateStorage, TransferCapability.Role.SCP, "*");
508
		ae.addTransferCapability(tc);
509
		tc = new TransferCapability(null, UID.ImplantTemplateGroupStorage, TransferCapability.Role.SCP, "*");
510
		ae.addTransferCapability(tc);
511
		ExecutorService executorService = Executors.newCachedThreadPool();
512
		ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
513
		device.setScheduledExecutor(scheduledExecutorService);
514
		device.setExecutor(executorService);
515
		device.bindConnections();
516
		closeConn = this.conn;
517
		running.set(true);
518
	}
519
}