1 /*=============================================================================
2 
3 Library: CTK
4 
5 Copyright (c) 2010 Brigham and Women's Hospital (BWH) All Rights Reserved.
6 
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use d file except in compliance with the License.
9 You may obtain a copy of the License at
10 
11 http://www.apache.org/licenses/LICENSE-2.0
12 
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
18 
19 =============================================================================*/
20 
21 #include "ctkCmdLineModuleParameter.h"
22 
23 #include "ctkCmdLineModuleParameter_p.h"
24 
25 #include <QStringList>
26 #include <QTextStream>
27 
28 //----------------------------------------------------------------------------
ctkCmdLineModuleParameterPrivate()29 ctkCmdLineModuleParameterPrivate::ctkCmdLineModuleParameterPrivate()
30   : Hidden(false), Constraints(false), Channel("input"), Index(-1), Multiple(false)
31 {}
32 
33 //----------------------------------------------------------------------------
splitAndTrim(const QString & str,const QString & separator)34 QStringList ctkCmdLineModuleParameterPrivate::splitAndTrim(const QString& str, const QString& separator)
35 {
36   QStringList l = str.split(separator, QString::SkipEmptyParts);
37   l.removeDuplicates();
38   // trim the strings
39   QMutableStringListIterator i(l);
40   while(i.hasNext())
41   {
42     QString& n = i.next();
43     n = n.trimmed();
44   }
45   return l;
46 }
47 
48 //----------------------------------------------------------------------------
setFileExtensionsAsString(const QString & extensions)49 void ctkCmdLineModuleParameterPrivate::setFileExtensionsAsString(const QString& extensions)
50 {
51   FileExtensions = splitAndTrim(extensions, ",");
52   FileExtensionsAsString = FileExtensions.join(",");
53 }
54 
55 //----------------------------------------------------------------------------
ctkCmdLineModuleParameter()56 ctkCmdLineModuleParameter::ctkCmdLineModuleParameter()
57   : d(new ctkCmdLineModuleParameterPrivate())
58 { }
59 
60 //----------------------------------------------------------------------------
~ctkCmdLineModuleParameter()61 ctkCmdLineModuleParameter::~ctkCmdLineModuleParameter()
62 {
63 }
64 
65 //----------------------------------------------------------------------------
ctkCmdLineModuleParameter(const ctkCmdLineModuleParameter & other)66 ctkCmdLineModuleParameter::ctkCmdLineModuleParameter(const ctkCmdLineModuleParameter &other)
67   : d(other.d)
68 {
69 }
70 
71 //----------------------------------------------------------------------------
operator =(const ctkCmdLineModuleParameter & other)72 ctkCmdLineModuleParameter& ctkCmdLineModuleParameter::operator=(const ctkCmdLineModuleParameter& other)
73 {
74   d = other.d;
75   return *this;
76 }
77 
78 //----------------------------------------------------------------------------
tag() const79 QString ctkCmdLineModuleParameter::tag() const
80 {
81   return d->Tag;
82 }
83 
84 //----------------------------------------------------------------------------
type() const85 QString ctkCmdLineModuleParameter::type() const
86 {
87   return d->Type;
88 }
89 
90 //----------------------------------------------------------------------------
hidden() const91 bool ctkCmdLineModuleParameter::hidden() const
92 {
93   return d->Hidden;
94 }
95 
96 //----------------------------------------------------------------------------
isReturnParameter() const97 bool ctkCmdLineModuleParameter::isReturnParameter() const
98 {
99   if (d->Channel == "output" && this->isIndexParameter() &&
100       this->index() == 1000)
101   {
102     return true;
103   }
104   return false;
105 }
106 
107 //----------------------------------------------------------------------------
isFlagParameter() const108 bool ctkCmdLineModuleParameter::isFlagParameter() const
109 {
110   return (d->Flag != "" || d->LongFlag != "");
111 }
112 
113 //----------------------------------------------------------------------------
isIndexParameter() const114 bool ctkCmdLineModuleParameter::isIndexParameter() const
115 {
116   return (d->Index > -1);
117 }
118 
119 //----------------------------------------------------------------------------
name() const120 QString ctkCmdLineModuleParameter::name() const
121 {
122  return d->Name;
123 }
124 
125 //----------------------------------------------------------------------------
longFlag() const126 QString ctkCmdLineModuleParameter::longFlag() const
127 {
128   return d->LongFlag;
129 }
130 
131 //----------------------------------------------------------------------------
longFlagAliasesAsString() const132 QString ctkCmdLineModuleParameter::longFlagAliasesAsString() const
133 {
134   return d->LongFlagAliasesAsString;
135 }
136 
137 //----------------------------------------------------------------------------
longFlagAliases() const138 QStringList ctkCmdLineModuleParameter::longFlagAliases() const
139 {
140   return d->LongFlagAliases;
141 }
142 
143 //----------------------------------------------------------------------------
deprecatedLongFlagAliasesAsString() const144 QString ctkCmdLineModuleParameter::deprecatedLongFlagAliasesAsString() const
145 {
146   return d->DeprecatedLongFlagAliasesAsString;
147 }
148 
149 //----------------------------------------------------------------------------
deprecatedLongFlagAliases() const150 QStringList ctkCmdLineModuleParameter::deprecatedLongFlagAliases() const
151 {
152   return d->DeprecatedLongFlagAliases;
153 }
154 
155 //----------------------------------------------------------------------------
label() const156 QString ctkCmdLineModuleParameter::label() const
157 {
158   return d->Label;
159 }
160 
161 //----------------------------------------------------------------------------
constraints() const162 bool ctkCmdLineModuleParameter::constraints() const
163 {
164   return d->Constraints;
165 }
166 
167 //----------------------------------------------------------------------------
maximum() const168 QString ctkCmdLineModuleParameter::maximum() const
169 {
170   return d->Maximum;
171 }
172 
173 //----------------------------------------------------------------------------
minimum() const174 QString ctkCmdLineModuleParameter::minimum() const
175 {
176   return d->Minimum;
177 }
178 
179 //----------------------------------------------------------------------------
step() const180 QString ctkCmdLineModuleParameter::step() const
181 {
182   return d->Step;
183 }
184 
185 //----------------------------------------------------------------------------
description() const186 QString ctkCmdLineModuleParameter::description() const
187 {
188   return d->Description;
189 }
190 
191 //----------------------------------------------------------------------------
channel() const192 QString ctkCmdLineModuleParameter::channel() const
193 {
194   return d->Channel;
195 }
196 
197 //----------------------------------------------------------------------------
index() const198 int ctkCmdLineModuleParameter::index() const
199 {
200   return d->Index;
201 }
202 
203 //----------------------------------------------------------------------------
defaultValue() const204 QString ctkCmdLineModuleParameter::defaultValue() const
205 {
206   return d->Default;
207 }
208 
209 //----------------------------------------------------------------------------
flag() const210 QString ctkCmdLineModuleParameter::flag() const
211 {
212   return d->Flag;
213 }
214 
215 //----------------------------------------------------------------------------
flagAliasesAsString() const216 QString ctkCmdLineModuleParameter::flagAliasesAsString() const
217 {
218   return d->FlagAliasesAsString;
219 }
220 
221 //----------------------------------------------------------------------------
flagAliases() const222 QStringList ctkCmdLineModuleParameter::flagAliases() const
223 {
224   return d->FlagAliases;
225 }
226 
227 //----------------------------------------------------------------------------
deprecatedFlagAliasesAsString() const228 QString ctkCmdLineModuleParameter::deprecatedFlagAliasesAsString() const
229 {
230   return d->DeprecatedFlagAliasesAsString;
231 }
232 
233 //----------------------------------------------------------------------------
deprecatedFlagAliases() const234 QStringList ctkCmdLineModuleParameter::deprecatedFlagAliases() const
235 {
236   return d->DeprecatedFlagAliases;
237 }
238 
239 //----------------------------------------------------------------------------
multiple() const240 bool ctkCmdLineModuleParameter::multiple() const
241 {
242   return d->Multiple;
243 }
244 
245 //----------------------------------------------------------------------------
fileExtensionsAsString() const246 QString ctkCmdLineModuleParameter::fileExtensionsAsString() const
247 {
248   return d->FileExtensionsAsString;
249 }
250 
251 //----------------------------------------------------------------------------
fileExtensions() const252 QStringList ctkCmdLineModuleParameter::fileExtensions() const
253 {
254   return d->FileExtensions;
255 }
256 
257 //----------------------------------------------------------------------------
coordinateSystem() const258 QString ctkCmdLineModuleParameter::coordinateSystem() const
259 {
260   return d->CoordinateSystem;
261 }
262 
263 //----------------------------------------------------------------------------
elements() const264 QStringList ctkCmdLineModuleParameter::elements() const
265 {
266   return d->Elements;
267 }
268 
269 //----------------------------------------------------------------------------
operator <<(QTextStream & os,const ctkCmdLineModuleParameter & parameter)270 QTextStream& operator<<(QTextStream& os, const ctkCmdLineModuleParameter& parameter)
271 {
272   os << "    Parameter" << '\n';
273   os << "      " << "Tag: " << parameter.tag() << '\n';
274   os << "      " << "Name: " << parameter.name() << '\n';
275   os << "      " << "Description: " << parameter.description() << '\n';
276   os << "      " << "Label: " << parameter.label() << '\n';
277   os << "      " << "Type: " << parameter.type() << '\n';
278   os << "      " << "Hidden: " << (parameter.hidden() ? "true" : "false") << '\n';
279   os << "      " << "Default: " << parameter.defaultValue() << '\n';
280   os << "      " << "Elements: " << parameter.elements().join(", ") << '\n';
281   os << "      " << "Constraints: " << (parameter.constraints() ? "true" : "false") << '\n';
282   os << "      " << "Minimum: " << parameter.minimum() << '\n';
283   os << "      " << "Maximum: " << parameter.maximum() << '\n';
284   os << "      " << "Step: " << parameter.step() << '\n';
285   os << "      " << "Flag: " << parameter.flag() << '\n';
286   os << "      " << "Flag aliases: " << parameter.flagAliasesAsString() << '\n';
287   os << "      " << "Deprecated Flag aliases: " << parameter.deprecatedFlagAliasesAsString() << '\n';
288   os << "      " << "LongFlag: " << parameter.longFlag() << '\n';
289   os << "      " << "LongFlag aliases: " << parameter.longFlagAliasesAsString() << '\n';
290   os << "      " << "Deprecated LongFlag aliases: " << parameter.deprecatedLongFlagAliasesAsString() << '\n';
291   os << "      " << "Channel: " << parameter.channel() << '\n';
292   os << "      " << "Index: " << parameter.index() << '\n';
293   os << "      " << "Multiple: " << (parameter.multiple() ? "true" : "false") << '\n';
294   os << "      " << "FileExtensions: " << parameter.fileExtensionsAsString() << '\n';
295   os << "      " << "CoordinateSystem: " << parameter.coordinateSystem() << '\n';
296   return os;
297 }
298