2005-06-05 Peter Bartok <pbartok@novell.com>
[mono.git] / mcs / nant / src / TaskBuilder.cs
1 // NAnt - A .NET build tool\r
2 // Copyright (C) 2001 Gerry Shaw\r
3 //\r
4 // This program is free software; you can redistribute it and/or modify\r
5 // it under the terms of the GNU General Public License as published by\r
6 // the Free Software Foundation; either version 2 of the License, or\r
7 // (at your option) any later version.\r
8 //\r
9 // This program is distributed in the hope that it will be useful,\r
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 // GNU General Public License for more details.\r
13 //\r
14 // You should have received a copy of the GNU General Public License\r
15 // along with this program; if not, write to the Free Software\r
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
17 //\r
18 // Gerry Shaw (gerry_shaw@yahoo.com)\r
19 \r
20 namespace SourceForge.NAnt {\r
21 \r
22     using System;\r
23     using System.Reflection;\r
24 \r
25     public class TaskBuilder {\r
26         \r
27         string _className;\r
28         string _assemblyFileName;\r
29         string _taskName;\r
30 \r
31         public TaskBuilder(string className)\r
32             : this(className, null) {\r
33         }\r
34 \r
35         public TaskBuilder(string className, string assemblyFileName) {\r
36             _className = className;\r
37             _assemblyFileName = assemblyFileName;\r
38 \r
39             // get task name from attribute\r
40             Assembly assembly = GetAssembly();\r
41             TaskNameAttribute taskNameAttribute = (TaskNameAttribute) Attribute.GetCustomAttribute(assembly.GetType(ClassName), typeof(TaskNameAttribute));\r
42             _taskName = taskNameAttribute.Name;\r
43         }\r
44 \r
45         public string ClassName {\r
46             get { return _className; }\r
47         }\r
48 \r
49         public string AssemblyFileName {\r
50             get { return _assemblyFileName; }\r
51         }\r
52 \r
53         public string TaskName {\r
54             get { return _taskName; }\r
55         }\r
56 \r
57         private Assembly GetAssembly() {\r
58             Assembly assembly;\r
59             if (AssemblyFileName == null) {\r
60                 assembly = Assembly.GetExecutingAssembly();\r
61             } else {\r
62                 assembly = Assembly.LoadFrom(AssemblyFileName);\r
63             }\r
64             return assembly;\r
65         }\r
66 \r
67         public Task CreateTask(Project project, Target target) {\r
68             Task task;\r
69             try {\r
70                 Assembly assembly = GetAssembly();\r
71 \r
72                 // create instance (ignore case)\r
73                 task = (Task) assembly.CreateInstance(ClassName, true);\r
74 \r
75                 // set default values\r
76                 task.Project = project;\r
77                 task.Target = target;\r
78             } catch (Exception) {\r
79                 task = null;\r
80             }\r
81             return task;\r
82         }\r
83     }\r
84 }