2
// CombineEntryDescriptor.cs
7
// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
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:
17
// The above copyright notice and this permission notice shall be
18
// included in all copies or substantial portions of the Software.
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.
32
using System.Collections;
33
using System.Collections.Specialized;
34
using System.Diagnostics;
35
using System.Reflection;
36
using MonoDevelop.Projects;
37
using MonoDevelop.Core;
38
using MonoDevelop.Core.Gui;
39
using MonoDevelop.Core.ProgressMonitoring;
41
namespace MonoDevelop.Ide.Templates
44
/// This class is used inside the combine templates for projects.
46
internal class CombineEntryDescriptor: ICombineEntryDescriptor
49
// string relativePath;
53
protected CombineEntryDescriptor (XmlElement element)
55
name = element.GetAttribute ("name");
56
// relativePath = element.GetAttribute ("directory");
57
typeName = element.GetAttribute ("type");
61
public string CreateEntry (ProjectCreateInformation projectCreateInformation, string defaultLanguage)
63
Type type = Type.GetType (typeName);
66
Services.MessageService.ShowError (GettextCatalog.GetString ("Can't create project with type : {0}", typeName));
70
CombineEntry entry = (CombineEntry) Activator.CreateInstance (type);
71
entry.InitializeFromTemplate (template);
73
string newProjectName = StringParserService.Parse (name, new string[,] {
74
{"ProjectName", projectCreateInformation.ProjectName}
77
entry.Name = newProjectName;
79
IFileFormat[] fileFormats = Services.ProjectService.FileFormats.GetFileFormatsForObject (entry);
80
if (fileFormats.Length == 0)
81
throw new InvalidOperationException ("Can't find a file format for the type: " + type);
83
string fileName = fileFormats[0].GetValidFormatName (entry, Path.Combine (projectCreateInformation.ProjectBasePath, newProjectName));
85
using (IProgressMonitor monitor = new NullProgressMonitor ()) {
86
if (File.Exists (fileName)) {
87
if (Services.MessageService.AskQuestion (GettextCatalog.GetString (
88
"Project file {0} already exists. Do you want to overwrite\nthe existing file?", fileName),
89
GettextCatalog.GetString ("File already exists"))) {
90
entry.Save (fileName, monitor);
93
entry.Save (fileName, monitor);
100
public static CombineEntryDescriptor CreateDescriptor (XmlElement element)
102
return new CombineEntryDescriptor (element);