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