More changes to Clearcase and Clearquest stuff
[clearscm.git] / lib / Clearcase / UCM / Folder.pm
1 =pod
2
3 =head1 NAME $RCSfile: Folder.pm,v $
4
5 Object oriented interface to UCM Folders
6
7 =head1 VERSION
8
9 =over
10
11 =item Author
12
13 Andrew DeFaria <Andrew@ClearSCM.com>
14
15 =item Revision
16
17 $Revision: 1.8 $
18
19 =item Created
20
21 Fri May 14 18:16:16 PDT 2010
22
23 =item Modified
24
25 $Date: 2011/11/15 02:00:58 $
26
27 =back
28
29 =head1 SYNOPSIS
30
31 Provides access to information about Clearcase Folders.
32
33   my $folder = new Clearcase::UCM::Folder ($name, $pvob);
34
35 =head1 DESCRIPTION
36
37 This module implements a UCM Folder object
38
39 =head1 ROUTINES
40
41 The following routines are exported:
42
43 =cut
44
45 package Clearcase::UCM::Folder;
46
47 use strict;
48 use warnings;
49
50 sub new ($$;$$) {
51   my ($class, $name, $pvob, $parent, $comment) = @_;
52
53 =pod
54
55 =head2 new
56
57 Construct a new Clearcase Folder object.
58
59 Parameters:
60
61 =for html <blockquote>
62
63 =over
64
65 =item folder
66
67 Name of folder
68
69 =back
70
71 =for html </blockquote>
72
73 Returns:
74
75 =for html <blockquote>
76
77 =over
78
79 =item Clearcase Folder object
80
81 =back
82
83 =for html </blockquote>
84
85 =cut
86
87   $class = bless {
88     name   => $name,
89     pvob   => $pvob,
90     parent => $parent || 'RootFolder',
91   }, $class; # bless
92    
93   $comment = Clearcase::_setComment ($comment);
94
95   my ($status, @output) = $Clearcase::CC->execute (
96     "mkfolder $comment -in " . $class->{parent} . ' ' . $name . '@' . $pvob->tag
97   );
98
99   return if $status;
100
101   ($status, @output) = $class->updateFolderInfo;
102
103   return $status ? undef : $class;
104 } # new
105   
106 sub name () {
107   my ($self) = @_;
108     
109 =pod
110
111 =head2 name
112
113 Returns the name of the folder
114
115 Parameters:
116
117 =for html <blockquote>
118
119 =over
120
121 =item none
122
123 =back
124
125 =for html </blockquote>
126
127 Returns:
128
129 =for html <blockquote>
130
131 =over
132
133 =item folder's name
134
135 =back
136
137 =for html </blockquote>
138
139 =cut
140
141   return $self->{name};
142 } # name
143
144 sub owner () {
145   my ($self) = @_;
146     
147 =pod
148
149 =head2 owner
150
151 Returns the owner of the folder
152
153 Parameters:
154
155 =for html <blockquote>
156
157 =over
158
159 =item none
160
161 =back
162
163 =for html </blockquote>
164
165 Returns:
166
167 =for html <blockquote>
168
169 =over
170
171 =item folder's owner
172
173 =back
174
175 =for html </blockquote>
176
177 =cut
178
179   return $self->{owner};
180 } # owner
181
182 sub group () {
183   my ($self) = @_;
184     
185 =pod
186
187 =head2 group
188
189 Returns the group of the folder
190
191 Parameters:
192
193 =for html <blockquote>
194
195 =over
196
197 =item none
198
199 =back
200
201 =for html </blockquote>
202
203 Returns:
204
205 =for html <blockquote>
206
207 =over
208
209 =item folder's group
210
211 =back
212
213 =for html </blockquote>
214
215 =cut
216
217   return $self->{group};
218 } # group
219
220 sub pvob () {
221   my ($self) = @_;
222     
223 =pod
224
225 =head2 pvob
226
227 Returns the pvob of the folder
228
229 Parameters:
230
231 =for html <blockquote>
232
233 =over
234
235 =item none
236
237 =back
238
239 =for html </blockquote>
240
241 Returns:
242
243 =for html <blockquote>
244
245 =over
246
247 =item folder's pvob
248
249 =back
250
251 =for html </blockquote>
252
253 =cut
254
255   return $self->{pvob};
256 } # pvob
257
258 sub title () {
259   my ($self) = @_;
260     
261 =pod
262
263 =head2 title
264
265 Returns the title of the folder
266
267 Parameters:
268
269 =for html <blockquote>
270
271 =over
272
273 =item none
274
275 =back
276
277 =for html </blockquote>
278
279 Returns:
280
281 =for html <blockquote>
282
283 =over
284
285 =item folder's title
286
287 =back
288
289 =for html </blockquote>
290
291 =cut
292
293   return $self->{title};
294 } # title
295
296 sub create ($;$) {
297   my ($self, $name, $parentFolder) = @_;
298
299 =pod
300
301 =head2 create
302
303 Creates a new UCM Folder Object
304
305 Parameters:
306
307 =for html <blockquote>
308
309 =over
310
311 =item name
312
313 UCM Folder name
314
315 =item parentFolder
316
317 Name of parentFolder (Default: RootFolder)
318
319 =back
320
321 =for html </blockquote>
322
323 Returns:
324
325 =for html <blockquote>
326
327 =over
328
329 =item $status
330
331 Status from cleartool
332
333 =item @output
334
335 Ouput from cleartool
336
337 =back
338
339 =for html </blockquote>
340
341 =cut
342
343   # Fill in object members
344   $self->{parentFolder} = $parentFolder;
345
346   $parentFolder ||= 'RootFolder';
347
348   # Need to create the folder
349   return $Clearcase::CC->execute( 
350     "mkfolder $self->{comment} -in " . $parentFolder . '@' . $self->{pvob} .
351     ' '                   . $self->{name}
352   );
353 } # create
354
355 sub remove () {
356   my ($self) = @_;
357
358 =pod
359
360 =head2 remove
361
362 Removes UCM Folder
363
364 Parameters:
365
366 =for html <blockquote>
367
368 =over
369
370 =item name
371
372 UCM Folder name
373
374 =back
375
376 =for html </blockquote>
377
378 Returns:
379
380 =for html <blockquote>
381
382 =over
383
384 =item $status
385
386 Status from cleartool
387
388 =item @output
389
390 Output from cleartool
391
392 =back
393
394 =for html </blockquote>
395
396 =cut
397
398   return $Clearcase::CC->execute(
399     'rmfolder -f ' . $self->{name} . "\@" . $self->{pvob}->tag);
400 } # rmfolder
401
402 sub updateFolderInfo () {
403   my ($self) = @_;
404
405   my ($status, @output) = $Clearcase::CC->execute(
406     "lsfolder -long $self->{name}" . '@'. $self->{pvob}->tag);
407
408   return if $status;
409
410   for (@output) {
411     if (/owner: (.*)/) {
412       $self->{owner} = $1;
413     } elsif (/group: (.*)/) {
414       $self->{group} = $1;
415     } elsif (/title: (.*)/) {
416       $self->{title} = $1;
417     # TODO: Get containing folders and containing projects
418     } # if
419   } # for
420
421   return $self;
422 } # updateFolderInfo
423
424 1;
425
426 =head1 DEPENDENCIES
427
428 =head2 ClearSCM Perl Modules
429
430 =for html <p><a href="/php/scm_man.php?file=lib/Clearcase.pm">Clearcase</a></p>
431
432 =for html <p><a href="/php/scm_man.php?file=lib/Clearcase/UCM/Baseline.pm">Clearcase::UCM::Baseline</a></p>
433
434 =head1 INCOMPATABILITIES
435
436 None
437
438 =head1 BUGS AND LIMITATIONS
439
440 There are no known bugs in this module.
441
442 Please report problems to Andrew DeFaria <Andrew@ClearSCM.com>.
443
444 =head1 LICENSE AND COPYRIGHT
445
446 Copyright (c) 2007, ClearSCM, Inc. All rights reserved.
447
448 =cut