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