2
// DatabaseConfiguration.cs
7
// Copyright (C) 2007 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.
33
using System.Collections;
34
using System.Collections.Generic;
37
namespace Mono.Addins.Database
39
internal class DatabaseConfiguration
41
Dictionary<string,AddinStatus> addinStatus = new Dictionary<string,AddinStatus> ();
43
internal class AddinStatus
45
public AddinStatus (string addinId)
47
this.AddinId = addinId;
50
public string AddinId;
52
public bool Uninstalled;
53
public List<string> Files;
56
public bool IsEnabled (string addinId, bool defaultValue)
59
if (addinStatus.TryGetValue (addinId, out s))
60
return s.Enabled && !s.Uninstalled;
65
public void SetStatus (string addinId, bool enabled, bool defaultValue)
68
addinStatus.TryGetValue (addinId, out s);
70
if (s != null && s.Uninstalled)
73
if (enabled == defaultValue) {
74
addinStatus.Remove (addinId);
78
s = addinStatus [addinId] = new AddinStatus (addinId);
82
public void RegisterForUninstall (string addinId, IEnumerable<string> files)
85
if (!addinStatus.TryGetValue (addinId, out s))
86
s = addinStatus [addinId] = new AddinStatus (addinId);
90
s.Files = new List<string> (files);
93
public void UnregisterForUninstall (string addinId)
95
addinStatus.Remove (addinId);
98
public bool IsRegisteredForUninstall (string addinId)
101
if (addinStatus.TryGetValue (addinId, out s))
102
return s.Uninstalled;
107
public bool HasPendingUninstalls {
108
get { return addinStatus.Values.Where (s => s.Uninstalled).Any (); }
111
public AddinStatus[] GetPendingUninstalls ()
113
return addinStatus.Values.Where (s => s.Uninstalled).ToArray ();
116
public static DatabaseConfiguration Read (string file)
118
DatabaseConfiguration config = new DatabaseConfiguration ();
119
XmlDocument doc = new XmlDocument ();
122
XmlElement disabledElem = (XmlElement) doc.DocumentElement.SelectSingleNode ("DisabledAddins");
123
if (disabledElem != null) {
124
// For back compatibility
125
foreach (XmlElement elem in disabledElem.SelectNodes ("Addin"))
126
config.SetStatus (elem.InnerText, false, true);
130
XmlElement statusElem = (XmlElement) doc.DocumentElement.SelectSingleNode ("AddinStatus");
131
if (statusElem != null) {
132
foreach (XmlElement elem in statusElem.SelectNodes ("Addin")) {
133
AddinStatus status = new AddinStatus (elem.GetAttribute ("id"));
134
string senabled = elem.GetAttribute ("enabled");
135
status.Enabled = senabled.Length == 0 || senabled == "True";
136
status.Uninstalled = elem.GetAttribute ("uninstalled") == "True";
137
config.addinStatus [status.AddinId] = status;
138
foreach (XmlElement fileElem in elem.SelectNodes ("File")) {
139
if (status.Files == null)
140
status.Files = new List<string> ();
141
status.Files.Add (fileElem.InnerText);
148
public void Write (string file)
150
StreamWriter s = new StreamWriter (file);
152
XmlTextWriter tw = new XmlTextWriter (s);
153
tw.Formatting = Formatting.Indented;
154
tw.WriteStartElement ("Configuration");
156
tw.WriteStartElement ("AddinStatus");
157
foreach (AddinStatus e in addinStatus.Values) {
158
tw.WriteStartElement ("Addin");
159
tw.WriteAttributeString ("id", e.AddinId);
160
tw.WriteAttributeString ("enabled", e.Enabled.ToString ());
162
tw.WriteAttributeString ("uninstalled", "True");
163
if (e.Files != null && e.Files.Count > 0) {
164
foreach (var f in e.Files)
165
tw.WriteElementString ("File", f);
167
tw.WriteEndElement ();
169
tw.WriteEndElement (); // AddinStatus
170
tw.WriteEndElement (); // Configuration