1 /*=========================================================================
2
3 Program: GDCM (Grassroots DICOM). A DICOM library
4
5 Copyright (c) 2006-2011 Mathieu Malaterre
6 All rights reserved.
7 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
8
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notice for more information.
12
13 =========================================================================*/
14 #include "gdcmSimpleSubjectWatcher.h"
15 #include "gdcmEvent.h"
16 #include "gdcmAnonymizeEvent.h"
17 #include "gdcmDataSetEvent.h"
18 #include "gdcmProgressEvent.h"
19 #include "gdcmFileNameEvent.h"
20
21 namespace gdcm
22 {
23
SimpleSubjectWatcher(Subject * s,const char * comment)24 SimpleSubjectWatcher::SimpleSubjectWatcher(Subject *s, const char *comment):m_Subject(s),m_Comment(comment)
25 {
26 // Create a series of commands
27 m_StartFilterCommand = SimpleCommandType::New();
28 m_EndFilterCommand = SimpleCommandType::New();
29 m_ProgressFilterCommand = CommandType::New();
30 m_FileNameFilterCommand = CommandType::New();
31 m_IterationFilterCommand = SimpleCommandType::New();
32 m_AbortFilterCommand = SimpleCommandType::New();
33
34 m_AnonymizeFilterCommand = CommandType::New();
35 m_DataSetFilterCommand = CommandType::New();
36 m_DataFilterCommand = CommandType::New();
37
38 // Assign the callbacks
39 m_StartFilterCommand->SetCallbackFunction(this,
40 &SimpleSubjectWatcher::StartFilter);
41 m_EndFilterCommand->SetCallbackFunction(this,
42 &SimpleSubjectWatcher::EndFilter);
43 m_ProgressFilterCommand->SetCallbackFunction(this,
44 &SimpleSubjectWatcher::ShowProgress);
45 m_FileNameFilterCommand->SetCallbackFunction(this,
46 &SimpleSubjectWatcher::ShowFileName);
47 m_IterationFilterCommand->SetCallbackFunction(this,
48 &SimpleSubjectWatcher::ShowIteration);
49 m_AbortFilterCommand->SetCallbackFunction(this,
50 &SimpleSubjectWatcher::ShowAbort);
51 m_AnonymizeFilterCommand->SetCallbackFunction(this,
52 &SimpleSubjectWatcher::ShowAnonymization);
53 m_DataSetFilterCommand->SetCallbackFunction(this,
54 &SimpleSubjectWatcher::ShowDataSet);
55 m_DataFilterCommand->SetCallbackFunction(this,
56 &SimpleSubjectWatcher::ShowData);
57
58 // Add the commands as observers
59 m_StartTag = m_Subject->AddObserver(StartEvent(), m_StartFilterCommand);
60 m_EndTag = m_Subject->AddObserver(EndEvent(), m_EndFilterCommand);
61 m_ProgressTag
62 = m_Subject->AddObserver(ProgressEvent(), m_ProgressFilterCommand);
63 m_FileNameTag
64 = m_Subject->AddObserver(FileNameEvent(), m_FileNameFilterCommand);
65 m_IterationTag
66 = m_Subject->AddObserver(IterationEvent(), m_IterationFilterCommand);
67 m_AbortTag
68 = m_Subject->AddObserver(AbortEvent(), m_AbortFilterCommand);
69 m_AnonymizeTag
70 = m_Subject->AddObserver(AnonymizeEvent(), m_AnonymizeFilterCommand);
71 m_DataSetTag
72 = m_Subject->AddObserver(DataSetEvent(), m_DataSetFilterCommand);
73 m_DataTag
74 = m_Subject->AddObserver(DataEvent(), m_DataFilterCommand);
75
76 m_TestAbort = false;
77 }
78
~SimpleSubjectWatcher()79 SimpleSubjectWatcher::~SimpleSubjectWatcher()
80 {
81 // Remove any observers we have on the old process object
82 if (m_Subject)
83 {
84 if (m_StartFilterCommand)
85 {
86 m_Subject->RemoveObserver(m_StartTag);
87 }
88 if (m_EndFilterCommand)
89 {
90 m_Subject->RemoveObserver(m_EndTag);
91 }
92 if (m_ProgressFilterCommand)
93 {
94 m_Subject->RemoveObserver(m_ProgressTag);
95 }
96 if (m_FileNameFilterCommand)
97 {
98 m_Subject->RemoveObserver(m_FileNameTag);
99 }
100 if (m_IterationFilterCommand)
101 {
102 m_Subject->RemoveObserver(m_IterationTag);
103 }
104 if (m_AbortFilterCommand)
105 {
106 m_Subject->RemoveObserver(m_AbortTag);
107 }
108 if (m_AnonymizeFilterCommand)
109 {
110 m_Subject->RemoveObserver(m_AnonymizeTag);
111 }
112 if (m_DataFilterCommand)
113 {
114 m_Subject->RemoveObserver(m_DataTag);
115 }
116 if (m_DataSetFilterCommand)
117 {
118 m_Subject->RemoveObserver(m_DataSetTag);
119 }
120 }
121 }
122
StartFilter()123 void SimpleSubjectWatcher::StartFilter()
124 {
125 std::cout << "Start" << std::endl;
126 }
EndFilter()127 void SimpleSubjectWatcher::EndFilter()
128 {
129 std::cout << "End" << std::endl;
130 }
ShowProgress(Subject * caller,const Event & evt)131 void SimpleSubjectWatcher::ShowProgress(Subject *caller, const Event &evt)
132 {
133 const ProgressEvent &pe = dynamic_cast<const ProgressEvent&>(evt);
134 (void)caller;
135 if( !m_Comment.empty() )
136 std::cout << "(" << m_Comment << ") ";
137 std::cout << "Progress: " << pe.GetProgress() << std::endl;
138 }
ShowFileName(Subject * caller,const Event & evt)139 void SimpleSubjectWatcher::ShowFileName(Subject *caller, const Event &evt)
140 {
141 const FileNameEvent &pe = dynamic_cast<const FileNameEvent&>(evt);
142 (void)caller;
143 if( !m_Comment.empty() )
144 std::cout << "(" << m_Comment << ") ";
145 std::cout << "FileName: " << pe.GetFileName() << std::endl;
146 }
ShowIteration()147 void SimpleSubjectWatcher::ShowIteration()
148 {
149 std::cout << "Iteration" << std::endl;
150 }
ShowAbort()151 void SimpleSubjectWatcher::ShowAbort()
152 {
153 std::cout << "Abort" << std::endl;
154 }
ShowAnonymization(Subject * caller,const Event & evt)155 void SimpleSubjectWatcher::ShowAnonymization(Subject *caller, const Event &evt)
156 {
157 const AnonymizeEvent &ae = dynamic_cast<const AnonymizeEvent&>(evt);
158 (void)caller;
159 std::cout << "AnonymizeEvent: " << ae.GetTag() << std::endl;
160 }
ShowData(Subject * caller,const Event & evt)161 void SimpleSubjectWatcher::ShowData(Subject *caller, const Event &evt)
162 {
163 const DataEvent &ae = dynamic_cast<const DataEvent&>(evt);
164 (void)caller;
165 std::cout << "DataEvent: " << ae.GetDataLength() << std::endl;
166 }
ShowDataSet(Subject * caller,const Event & evt)167 void SimpleSubjectWatcher::ShowDataSet(Subject *caller, const Event &evt)
168 {
169 const DataSetEvent &ae = dynamic_cast<const DataSetEvent&>(evt);
170 (void)caller;
171 std::cout << "DataSetEvent: \n";
172 std::cout << ae.GetDataSet() << std::endl;
173 }
174
TestAbortOn()175 void SimpleSubjectWatcher::TestAbortOn()
176 {
177 m_TestAbort = true;
178 }
TestAbortOff()179 void SimpleSubjectWatcher::TestAbortOff()
180 {
181 m_TestAbort = false;
182 }
183
184
185 } // end namespace gdcm
186