jiapeng 5 years ago
parent
commit
7a92c3d259

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

82

82

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

183

182
	public static void main(String args[])
184
	public static void main(String args[])
183
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
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

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

104

105
	public static void main(String args[])
105
	public static void main(String args[])
106
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
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
		for(SeriesImage s:q.result){
110
		for(SeriesImage s:q.result){
111
			System.out.println(JsonService.toJson(s));
111
			System.out.println(JsonService.toJson(s));

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

119

119

120
	public static void main(String args[])
120
	public static void main(String args[])
121
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
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
		for(StudySeries s:q.result){
125
		for(StudySeries s:q.result){
126
			System.out.println(JsonService.toJson(s));
126
			System.out.println(JsonService.toJson(s));

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

133
	public static void main(String args[])
133
	public static void main(String args[])
134
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
134
			throws IOException, InterruptedException, IncompatibleConnectionException, GeneralSecurityException {
135
		DicomQueryStudy q = new DicomQueryStudy("AIADS");
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
		for(PatientStudy s:q.result){
138
		for(PatientStudy s:q.result){
139
			System.out.println(JsonService.toJson(s));
139
			System.out.println(JsonService.toJson(s));

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

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
}