df222239fceef9b361ca3f9542cf7a9f1f6d87e4
[mono.git] / mcs / class / Microsoft.Build.Tasks / Microsoft.Build.Tasks / RemoveDir.cs
1 //
2 // RemoveDir.cs: Removes a directory.
3 //
4 // Author:
5 //   Marek Sieradzki (marek.sieradzki@gmail.com)
6 // 
7 // (C) 2005 Marek Sieradzki
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
28 using System;
29 using System.Collections;
30 using System.IO;
31 using System.Security;
32 using Microsoft.Build.Framework;
33
34 namespace Microsoft.Build.Tasks {
35         public class RemoveDir : TaskExtension {
36         
37                 ITaskItem[]     directories;
38                 ITaskItem[]     removedDirectories;
39         
40                 public RemoveDir ()
41                 {
42                 }
43
44                 public override bool Execute ()
45                 {
46                         ArrayList temporaryRemovedDirectories = new ArrayList ();
47                         
48                         foreach (ITaskItem directory in directories) {
49                                 try {
50                                         Directory.Delete (directory.GetMetadata ("FullPath"), true);
51                                         temporaryRemovedDirectories.Add (directory);
52                                 }
53                                 catch (DirectoryNotFoundException ex) {
54                                         Log.LogErrorFromException (ex);
55                                 }
56                                 catch (PathTooLongException ex) {
57                                         Log.LogErrorFromException (ex);
58                                 }
59                                 catch (ArgumentNullException ex) {
60                                         Log.LogErrorFromException (ex);
61                                 }
62                                 catch (ArgumentException ex) {
63                                         Log.LogErrorFromException (ex);
64                                 }
65                                 catch (IOException ex) {
66                                         Log.LogErrorFromException (ex);
67                                 }
68                                 catch (SecurityException ex) {
69                                         Log.LogErrorFromException (ex);
70                                 }
71                                 catch (Exception ex) {
72                                         Log.LogErrorFromException (ex);
73                                 }
74                         }
75                         
76                         removedDirectories = new ITaskItem [temporaryRemovedDirectories.Count];
77                         int i = 0;
78                         foreach (ITaskItem directory in temporaryRemovedDirectories)
79                                 removedDirectories [i++] = directory;
80                         
81                         return true;
82                 }
83                 
84                 [Required]
85                 public ITaskItem[] Directories {
86                         get {
87                                 return directories;
88                         }
89                         set {
90                                 directories = value;
91                         }
92                 }
93
94                 [Output]
95                 public ITaskItem[] RemovedDirectories {
96                         get {
97                                 return removedDirectories;
98                         }
99                         set {
100                                 removedDirectories = value;
101                         }
102                 }
103         }
104 }