dcm4chee 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. data/README.md +45 -0
  2. data/Rakefile +9 -0
  3. data/app/controllers/dcm4chee/api/v1/application_entities_controller.rb +178 -0
  4. data/app/controllers/dcm4chee/api/v1/base_controller.rb +15 -0
  5. data/app/controllers/dcm4chee/api/v1/dicom_objects_controller.rb +58 -0
  6. data/app/controllers/dcm4chee/api/v1/file_systems_controller.rb +37 -0
  7. data/app/controllers/dcm4chee/api/v1/instances_controller.rb +68 -0
  8. data/app/controllers/dcm4chee/api/v1/modalities_controller.rb +29 -0
  9. data/app/controllers/dcm4chee/api/v1/patients_controller.rb +77 -0
  10. data/app/controllers/dcm4chee/api/v1/series_controller.rb +69 -0
  11. data/app/controllers/dcm4chee/api/v1/source_aets_controller.rb +29 -0
  12. data/app/controllers/dcm4chee/api/v1/studies_controller.rb +69 -0
  13. data/app/controllers/dcm4chee/api/v1/trashed_instances_controller.rb +82 -0
  14. data/app/controllers/dcm4chee/api/v1/trashed_patients_controller.rb +84 -0
  15. data/app/controllers/dcm4chee/api/v1/trashed_series_controller.rb +81 -0
  16. data/app/controllers/dcm4chee/api/v1/trashed_studies_controller.rb +81 -0
  17. data/app/controllers/dcm4chee/api/v1/trashes_controller.rb +23 -0
  18. data/app/controllers/dcm4chee/application_controller.rb +4 -0
  19. data/app/models/dcm4chee/application_entity.rb +129 -0
  20. data/app/models/dcm4chee/dicom_file.rb +62 -0
  21. data/app/models/dcm4chee/file_system.rb +95 -0
  22. data/app/models/dcm4chee/instance.rb +69 -0
  23. data/app/models/dcm4chee/modality.rb +17 -0
  24. data/app/models/dcm4chee/patient.rb +42 -0
  25. data/app/models/dcm4chee/series.rb +78 -0
  26. data/app/models/dcm4chee/source_aet.rb +17 -0
  27. data/app/models/dcm4chee/study.rb +60 -0
  28. data/app/models/dcm4chee/trashed_dicom_file.rb +58 -0
  29. data/app/models/dcm4chee/trashed_instance.rb +56 -0
  30. data/app/models/dcm4chee/trashed_patient.rb +40 -0
  31. data/app/models/dcm4chee/trashed_series.rb +50 -0
  32. data/app/models/dcm4chee/trashed_study.rb +40 -0
  33. data/config/routes.rb +27 -0
  34. data/lib/dcm4chee.rb +58 -0
  35. data/lib/dcm4chee/api_constraints.rb +12 -0
  36. data/lib/dcm4chee/dicom_object_manager.rb +48 -0
  37. data/lib/dcm4chee/engine.rb +5 -0
  38. data/lib/dcm4chee/models/has_dicom_object.rb +71 -0
  39. data/lib/dcm4chee/services/application_entity_service.rb +113 -0
  40. data/lib/dcm4chee/services/content_edit_service.rb +37 -0
  41. data/lib/dcm4chee/services/file_system_management.rb +16 -0
  42. data/lib/dcm4chee/services/mbean.rb +11 -0
  43. data/lib/dcm4chee/services/move_scu_service.rb +54 -0
  44. data/lib/dcm4chee/version.rb +3 -0
  45. data/lib/tasks/dcm4chee_tasks.rake +4 -0
  46. metadata +241 -0
@@ -0,0 +1,77 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class PatientsController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for patients. Supported querying conditions:
9
+ # name
10
+ # pid
11
+ # pid_issuer
12
+ # studies.study_at
13
+ # studies.accession_no
14
+ # studies.series.modality
15
+ # studies.series.source_aet
16
+ #
17
+ # Check {DataMapper::Searcher::ClassMethods} for supported
18
+ # querying operators.
19
+ #
20
+ # pagination:
21
+ # page # default 1
22
+ # limit # default 20
23
+ #
24
+ # @example
25
+ # # Request
26
+ # GET /api/patients?q[name.like]=... HTTP/1.1
27
+ # Accept: application/vnd.menglifang.org; version=1
28
+ #
29
+ # # Response
30
+ # HTTP/1.1 200 OK
31
+ # {
32
+ # "page": ...,
33
+ # "limit": ...,
34
+ # "patients": [{
35
+ # "id": ...,
36
+ # "pid": ...,
37
+ # "pid_issuer": ...,
38
+ # "name": ...,
39
+ # "birthday": ...,
40
+ # "gender": ...,
41
+ # "dcm_elements": [{
42
+ # "name": ...,
43
+ # "value": ...,
44
+ # "tag": ...,
45
+ # "value_representation": ...,
46
+ # "length": ...
47
+ # }, ...]
48
+ # }, ...]
49
+ # }
50
+ def index
51
+ patients = Patient.search(params[:q]).
52
+ page(params[:page] || 1, per_page: params[:limit] || 20)
53
+
54
+ render json: { patients: patients, total: patients.pager.total }
55
+ end
56
+
57
+ # Restore a patient from the trash.
58
+ #
59
+ # @example
60
+ # # Request
61
+ # POST /api/patients HTTP/1.1
62
+ # Accept: application/vnd.menglifang.org; version=1
63
+ #
64
+ # { "trashed_patient_id": ... }
65
+ #
66
+ # # Response
67
+ # HTTP/1.1 201 Created
68
+ def create
69
+ trashed_patient = TrashedPatient.get!(params[:trashed_patient_id])
70
+ trashed_patient.restore_from_trash
71
+
72
+ head :created
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class SeriesController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for series. Supported querying conditions:
9
+ # study_id
10
+ #
11
+ # Check {DataMapper::Searcher::ClassMethods} for supported
12
+ # querying operators.
13
+ #
14
+ # @example
15
+ # # Request
16
+ # GET /api/series?q[study_id]=... HTTP/1.1
17
+ # Accept: application/vnd.menglifang.org; version=1
18
+ #
19
+ # # Response
20
+ # HTTP/1.1 200 OK
21
+ # {
22
+ # "series": [{
23
+ # "id": ...,
24
+ # "study_id": ...,
25
+ # "study_iuid": ...,
26
+ # "series_iuid": ...,
27
+ # "series_no": ...,
28
+ # "source_aet": ...,
29
+ # "modality": ...,
30
+ # "description": ...,
31
+ # "num_instances": ...,
32
+ # "availability": ...,
33
+ # "dcm_elements": [{
34
+ # "name": ...,
35
+ # "value": ...,
36
+ # "tag": ...,
37
+ # "value_representation": ...,
38
+ # "length": ...
39
+ # }, ...]
40
+ # }, ...]
41
+ # }
42
+ def index
43
+ series = Series.search(params[:q])
44
+
45
+ respond_with series: series
46
+ end
47
+
48
+ # Restore a series from the trash.
49
+ #
50
+ # @example
51
+ # # Request
52
+ # POST /api/series HTTP/1.1
53
+ # Accept: application/vnd.menglifang.org; version=1
54
+ # Content-Type: application/json
55
+ #
56
+ # { "trashed_series_id": ... }
57
+ #
58
+ # # Response
59
+ # HTTP/1.1 201 Created
60
+ def create
61
+ trashed_series = TrashedSeries.get!(params[:trashed_series_id])
62
+ trashed_series.restore_from_trash
63
+
64
+ head :created
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,29 @@
1
+ module Dcm4chee
2
+ module Api
3
+ module V1
4
+ class SourceAetsController < BaseController
5
+ respond_to :json
6
+
7
+ # List AET
8
+ #
9
+ # @example
10
+ # # Request
11
+ # GET /api/source_aets HTTP/1.1
12
+ # Accept: application/vnd.menglifang.org; version=1
13
+ #
14
+ # # Response
15
+ # HTTP/1.1 200 OK
16
+ # {
17
+ # "source_aets": [{
18
+ # "name": ...
19
+ # }, ...]
20
+ # }
21
+ def index
22
+ source_aets = SourceAet.all
23
+
24
+ render json: { source_aets: source_aets }
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,69 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class StudiesController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for studies. Suppported querying conditions:
9
+ # patient_id
10
+ #
11
+ # Check {DataMapper::Searcher::ClassMethods} for supported
12
+ # querying operators.
13
+ #
14
+ # @example
15
+ # # Request
16
+ # GET /api/studies?q[patient_id]=... HTTP/1.1
17
+ # Accept: application/vnd.menglifang.org; version=1
18
+ #
19
+ # # Response
20
+ # HTTP/1.1 200 OK
21
+ # {
22
+ # "studies": [{
23
+ # "id": ...,
24
+ # "patient_id": ...,
25
+ # "study_iuid": ...,
26
+ # "sid": ...,
27
+ # "study_at": ...,
28
+ # "accession_no": ...,
29
+ # "description": ...,
30
+ # "num_series": ...,
31
+ # "num_instances": ...,
32
+ # "availability": ...,
33
+ # "dcm_elements": [{
34
+ # "name": ...,
35
+ # "value": ...,
36
+ # "tag": ...,
37
+ # "value_representation": ...,
38
+ # "length": ...
39
+ # }, ...]
40
+ # }, ...]
41
+ # }
42
+ def index
43
+ studies = Study.search(params[:q])
44
+
45
+ respond_with studies: studies
46
+ end
47
+
48
+ # Restore a study from the trash.
49
+ #
50
+ # @example
51
+ # # Request
52
+ # POST /api/studies HTTP/1.1
53
+ # Accept: application/vnd.menglifang.org; version=1
54
+ # Content-Type: application/json
55
+ #
56
+ # { "trashed_studies_id": ... }
57
+ #
58
+ # # Response
59
+ # HTTP/1.1 201 Created
60
+ def create
61
+ trashed_studies = TrashedStudy.get!(params[:trashed_study_id])
62
+ trashed_studies.restore_from_trash
63
+
64
+ head :created
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,82 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class TrashedInstancesController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for instances from the trash. Supported querying
9
+ # conditions:
10
+ # trashed_series_id
11
+ #
12
+ # Check {DataMapper::Searcher::ClassMethods} for supported
13
+ # querying operators.
14
+ #
15
+ # @example
16
+ # # Request
17
+ # GET /api/trashed_instances?q[trashed_series_id]=... HTTP/1.1
18
+ # Accept: application/vnd.menglifang.org; version=1
19
+ #
20
+ # # Response
21
+ # HTTP/1.1 200 OK
22
+ # {
23
+ # "trashed_instances": [{
24
+ # "id": ...,
25
+ # "trashed_series_id": ...,
26
+ # "created_at": ...,
27
+ # "sop_iuid": ...,
28
+ # "series_iuid": ...,
29
+ # "study_iuid": ...,
30
+ # "dcm_elements": [{
31
+ # "name": ...,
32
+ # "value": ...,
33
+ # "tag": ...,
34
+ # "value_representation": ...,
35
+ # "length": ...
36
+ # }, ...]
37
+ # }, ...]
38
+ # }
39
+ def index
40
+ instances = TrashedInstance.search(params[:q])
41
+
42
+ respond_with trashed_instances: instances
43
+ end
44
+
45
+ # Move a instance to the trash.
46
+ #
47
+ # @example
48
+ # # Request
49
+ # POST /api/trashed_instances HTTP/1.1
50
+ # Accept: application/vnd.menglifang.org; version=1
51
+ # Content-Type: application/json
52
+ #
53
+ # { "instance_id": ... }
54
+ #
55
+ # # Response
56
+ # HTTP/1.1 201 Created
57
+ def create
58
+ instance = Instance.get!(params[:instance_id])
59
+ instance.move_to_trash
60
+
61
+ head :created
62
+ end
63
+
64
+ # Delete an instance from the trash.
65
+ #
66
+ # @example
67
+ # # Request
68
+ # DELETE /api/trashed_instances/... HTTP/1.1
69
+ # Accept: application/vnd.menglifang.org; version=1
70
+ #
71
+ # # Response
72
+ # HTTP/1.1 200 OK
73
+ def destroy
74
+ instance = TrashedInstance.get!(params[:id])
75
+ instance.remove_from_trash
76
+
77
+ head :ok
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,84 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class TrashedPatientsController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for patients from the trash. Supported querying
9
+ # conditions:
10
+ # name
11
+ # pid
12
+ # pid_issuer
13
+ # trashed_studies.accession_no
14
+ # trashed_studies.series.source_aet
15
+ #
16
+ # Check {DataMapper::Searcher::ClassMethods} for supported
17
+ # querying operators.
18
+ #
19
+ # @example
20
+ # # Request
21
+ # GET /api/trashed_patients?q[name.like]=... HTTP/1.1
22
+ # Accept: application/vnd.menglifang.org; version=1
23
+ #
24
+ # # Response
25
+ # HTTP/1.1 200 OK
26
+ # {
27
+ # "trashed_patients": [{
28
+ # "id": ...,
29
+ # "pid": ...,
30
+ # "pid_issuer": ...,
31
+ # "name": ...,
32
+ # "dcm_elements": [{
33
+ # "name": ...,
34
+ # "value": ...,
35
+ # "tag": ...,
36
+ # "value_representation": ...,
37
+ # "length": ...
38
+ # }, ...]
39
+ # }, ...]
40
+ # }
41
+ def index
42
+ patients = TrashedPatient.search(params[:q])
43
+
44
+ respond_with trashed_patients: patients
45
+ end
46
+
47
+ # Move a patient to the trash including the related studies, series, instances and files.
48
+ #
49
+ # @example
50
+ # # Request
51
+ # POST /api/trashed_patients HTTP/1.1
52
+ # Accept: application/vnd.menglifang.org; version=1
53
+ # Content-Type: application/json
54
+ #
55
+ # { "patient_id": ... }
56
+ #
57
+ # # Response
58
+ # HTTP/1.1 201 Created
59
+ def create
60
+ patient = Patient.get!(params[:patient_id])
61
+ patient.move_to_trash
62
+
63
+ head :created
64
+ end
65
+
66
+ # Delete a patient from the trash.
67
+ #
68
+ # @example
69
+ # # Request
70
+ # DELETE /api/trashed_patients/... HTTP/1.1
71
+ # Accept: application/vnd.menglifang.org; version=1
72
+ #
73
+ # # Response
74
+ # HTTP/1.1 200 OK
75
+ def destroy
76
+ patient = TrashedPatient.get!(params[:id])
77
+ patient.remove_from_trash
78
+
79
+ head :ok
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,81 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Dcm4chee
3
+ module Api
4
+ module V1
5
+ class TrashedSeriesController < BaseController
6
+ respond_to :json
7
+
8
+ # Search for series from the trash. Supported querying
9
+ # conditions:
10
+ # trashed_study_id
11
+ #
12
+ # Check {DataMapper::Searcher::ClassMethods} for supported
13
+ # querying operators.
14
+ #
15
+ # @example
16
+ # # Request
17
+ # GET /api/trashed_series?q[trashed_study_id]=... HTTP/1.1
18
+ # Accept: application/vnd.menglifang.org; version=1
19
+ #
20
+ # # Response
21
+ # HTTP/1.1 200 OK
22
+ # {
23
+ # "trashed_series": [{
24
+ # "id": ...,
25
+ # "trashed_study_id": ...,
26
+ # "series_iuid": ...,
27
+ # "source_aet": ...,
28
+ # "dcm_elements": [{
29
+ # "name": ...,
30
+ # "value": ...,
31
+ # "tag": ...,
32
+ # "value_representation": ...,
33
+ # "length": ...
34
+ # }, ...]
35
+ # }, ...]
36
+ # }
37
+ def index
38
+ series = TrashedSeries.search(params[:q])
39
+
40
+ respond_with trashed_series: series
41
+ end
42
+
43
+ # Move a series to the trash including the related instances and
44
+ # files.
45
+ #
46
+ # @example
47
+ # # Request
48
+ # POST /api/trashed_series HTTP/1.1
49
+ # Accept: application/vnd.menglifang.org; version=1
50
+ # Content-Type: application/json
51
+ #
52
+ # { "series_id": ... }
53
+ #
54
+ # # Response
55
+ # HTTP/1.1 201 Created
56
+ def create
57
+ series = Series.get!(params[:series_id])
58
+ series.move_to_trash
59
+
60
+ head :created
61
+ end
62
+
63
+ # Delete a series from the trash.
64
+ #
65
+ # @example
66
+ # # Request
67
+ # DELETE /api/trashed_series/... HTTP/1.1
68
+ # Accept: application/vnd.menglifang.org; version=1
69
+ #
70
+ # # Response
71
+ # HTTP/1.1 200 OK
72
+ def destroy
73
+ series = TrashedSeries.get!(params[:id])
74
+ series.remove_from_trash
75
+
76
+ head :ok
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end