Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-addins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@novell.com>2007-04-10 20:01:22 +0400
committerLluis Sanchez <lluis@novell.com>2007-04-10 20:01:22 +0400
commita30ec5d0ac3bebf93c8f017cb0885070988c0e45 (patch)
treeb7be4b3d6a96a5c22efb0cb87d417f5632bc32e1 /Mono.Addins/Mono.Addins.Description/AddinDescription.cs
parent1b6638cadd54d86d5793c5fd85dc962471716287 (diff)
* Mono.Addins.mdp, Makefile.am, Mono.Addins.csproj: Updated.
* Mono.Addins/Addin.cs: Properly resolve absolute add-in ids (starting with ::). * Mono.Addins/AddinRegistry.cs: Added method for reading a manifest. * Mono.Addins.Description/Extension.cs: Added GetExtendedObject() method. Initialize the owner of all collections. * Mono.Addins.Description/AddinDependency.cs: Added method for getting the full ID of the referenced assembly. * Mono.Addins.Description/AddinDescription.cs: Added OwnerDatabase property. Initialize the owner of all collections. Properly check for referenced assemblies in Validate(). * Mono.Addins.Description/ExtensionNodeType.cs: Properly read the objectType attribute from XML. Initialize the owner of all collections. * Mono.Addins.Description/ObjectDescriptionCollection.cs: Added constructor which takes the collection owner as parameter. When an element is added, set the parent of the element. * Mono.Addins.Description/ExtensionPoint.cs, Mono.Addins.Description/ModuleDescription.cs: Initialize the owner of all collections. * Mono.Addins.Description/ExtensionNodeDescription.cs: Added GetNodeType() method and some helper properties. Initialize the owner of all collections. * Mono.Addins.Description/NodeTypeAttributeCollection.cs, Mono.Addins.Description/ExtensionCollection.cs, Mono.Addins.Description/DependencyCollection.cs, Mono.Addins.Description/ExtensionNodeDescriptionCollection.cs, Mono.Addins.Description/ExtensionPointCollection.cs, Mono.Addins.Description/ModuleDescriptionCollection.cs, Mono.Addins.Description/ConditionTypeDescriptionCollection.cs, Mono.Addins.Description/ExtensionNodeSetCollection.cs: Added constructor which takes the collection owner as parameter. * Mono.Addins.Description/ExtensionNodeSet.cs: Added GetAllowedNodeTypes() method, which returns all allowed nodes, recursivelly looking at referenced node sets. Initialize the owner of all collections. * Mono.Addins.Description/ExtensionNodeTypeCollection.cs: New collection. * Mono.Addins.Description/ObjectDescription.cs: Added properties for getting the parent of an object, and the add-in description where the object is declared. * Mono.Addins.Database/AddinDatabase.cs: Properly reuse generated add-in ids when the add-in file is the same. Added method for finding a node set defined in the registry. Initialize the OwnerDatabase property of every loaded AddinDescription. * Mono.Addins.Database/AddinScanner.cs: When looking for add-in types, look in the references too. Set HasUserId to false for add-ins with auto-generated ID. svn path=/trunk/mono-addins/; revision=75575
Diffstat (limited to 'Mono.Addins/Mono.Addins.Description/AddinDescription.cs')
-rw-r--r--Mono.Addins/Mono.Addins.Description/AddinDescription.cs95
1 files changed, 78 insertions, 17 deletions
diff --git a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs
index c18288d..68ded31 100644
--- a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs
+++ b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs
@@ -44,6 +44,7 @@ namespace Mono.Addins.Description
XmlDocument configDoc;
string configFile;
bool fromBinaryFile;
+ AddinDatabase ownerDatabase;
string id;
string name;
@@ -85,6 +86,11 @@ namespace Mono.Addins.Description
typeMap.RegisterType (typeof(NodeTypeAttribute), "NodeTypeAttribute");
}
+ internal AddinDatabase OwnerDatabase {
+ get { return ownerDatabase; }
+ set { ownerDatabase = value; }
+ }
+
public string AddinFile {
get { return sourceAddinFile; }
set { sourceAddinFile = value; }
@@ -96,7 +102,7 @@ namespace Mono.Addins.Description
public string LocalId {
get { return id != null ? id : string.Empty; }
- set { id = value; }
+ set { id = value; hasUserId = true; }
}
public string Namespace {
@@ -189,6 +195,7 @@ namespace Mono.Addins.Description
mainModule = new ModuleDescription ();
else
mainModule = new ModuleDescription (RootElement);
+ mainModule.SetParent (this);
}
return mainModule;
}
@@ -197,7 +204,7 @@ namespace Mono.Addins.Description
public ModuleCollection OptionalModules {
get {
if (optionalModules == null) {
- optionalModules = new ModuleCollection ();
+ optionalModules = new ModuleCollection (this);
if (RootElement != null) {
foreach (XmlElement mod in RootElement.SelectNodes ("Module"))
optionalModules.Add (new ModuleDescription (mod));
@@ -209,7 +216,7 @@ namespace Mono.Addins.Description
public ModuleCollection AllModules {
get {
- ModuleCollection col = new ModuleCollection ();
+ ModuleCollection col = new ModuleCollection (this);
col.Add (MainModule);
foreach (ModuleDescription mod in OptionalModules)
col.Add (mod);
@@ -220,7 +227,7 @@ namespace Mono.Addins.Description
public ExtensionNodeSetCollection ExtensionNodeSets {
get {
if (nodeSets == null) {
- nodeSets = new ExtensionNodeSetCollection ();
+ nodeSets = new ExtensionNodeSetCollection (this);
if (RootElement != null) {
foreach (XmlElement elem in RootElement.SelectNodes ("ExtensionNodeSet"))
nodeSets.Add (new ExtensionNodeSet (elem));
@@ -233,7 +240,7 @@ namespace Mono.Addins.Description
public ExtensionPointCollection ExtensionPoints {
get {
if (extensionPoints == null) {
- extensionPoints = new ExtensionPointCollection ();
+ extensionPoints = new ExtensionPointCollection (this);
if (RootElement != null) {
foreach (XmlElement elem in RootElement.SelectNodes ("ExtensionPoint"))
extensionPoints.Add (new ExtensionPoint (elem));
@@ -246,7 +253,7 @@ namespace Mono.Addins.Description
public ConditionTypeDescriptionCollection ConditionTypes {
get {
if (conditionTypes == null) {
- conditionTypes = new ConditionTypeDescriptionCollection ();
+ conditionTypes = new ConditionTypeDescriptionCollection (this);
if (RootElement != null) {
foreach (XmlElement elem in RootElement.SelectNodes ("ConditionType"))
conditionTypes.Add (new ConditionTypeDescription (elem));
@@ -264,6 +271,45 @@ namespace Mono.Addins.Description
return ep;
}
+ internal ExtensionNodeDescription FindExtensionNode (string path, bool lookInDeps)
+ {
+ // Look in the extensions of this add-in
+
+ foreach (Extension ext in MainModule.Extensions) {
+ if (path.StartsWith (ext.Path + "/")) {
+ string subp = path.Substring (ext.Path.Length).Trim ('/');
+ ExtensionNodeDescriptionCollection nodes = ext.ExtensionNodes;
+ ExtensionNodeDescription node = null;
+ foreach (string p in subp.Split ('/')) {
+ if (p.Length == 0) continue;
+ node = nodes [p];
+ if (node == null)
+ break;
+ nodes = node.ChildNodes;
+ }
+ if (node != null)
+ return node;
+ }
+ }
+
+ if (!lookInDeps || OwnerDatabase == null)
+ return null;
+
+ // Look in dependencies
+
+ foreach (Dependency dep in MainModule.Dependencies) {
+ AddinDependency adep = dep as AddinDependency;
+ if (adep == null) continue;
+ Addin ad = OwnerDatabase.GetInstalledAddin (adep.FullAddinId);
+ if (ad != null && ad.Description != null) {
+ ExtensionNodeDescription node = ad.Description.FindExtensionNode (path, false);
+ if (node != null)
+ return node;
+ }
+ }
+ return null;
+ }
+
XmlElement RootElement {
get {
if (configDoc != null)
@@ -291,7 +337,11 @@ namespace Mono.Addins.Description
SaveXml ();
- configDoc.Save (configFile);
+ using (StreamWriter sw = new StreamWriter (configFile)) {
+ XmlTextWriter tw = new XmlTextWriter (sw);
+ tw.Formatting = Formatting.Indented;
+ configDoc.Save (tw);
+ }
}
public XmlDocument SaveToXml ()
@@ -392,9 +442,7 @@ namespace Mono.Addins.Description
try {
config.configDoc = new XmlDocument ();
- config.configDoc.PreserveWhitespace = true;
config.configDoc.Load (stream);
- config.configDoc.PreserveWhitespace = false;
} catch (Exception ex) {
throw new InvalidOperationException ("The add-in configuration file is invalid.", ex);
}
@@ -483,10 +531,20 @@ namespace Mono.Addins.Description
errors.Add ("Attribute 'id' can't be empty for global node sets.");
}
- foreach (string file in AllFiles) {
- string asmFile = Path.Combine (BasePath, file);
- if (!File.Exists (asmFile))
- errors.Add ("The file '" + file + "' referenced in the manifest could not be found.");
+ string bp = null;
+ if (BasePath.Length > 0)
+ bp = BasePath;
+ else if (sourceAddinFile != null && sourceAddinFile.Length > 0)
+ bp = Path.GetDirectoryName (AddinFile);
+ else if (configFile != null && configFile.Length > 0)
+ bp = Path.GetDirectoryName (configFile);
+
+ if (bp != null) {
+ foreach (string file in AllFiles) {
+ string asmFile = Path.Combine (BasePath, file);
+ if (!File.Exists (asmFile))
+ errors.Add ("The file '" + file + "' referenced in the manifest could not be found.");
+ }
}
return errors;
@@ -567,10 +625,13 @@ namespace Mono.Addins.Description
basePath = reader.ReadStringValue ("basePath");
sourceAddinFile = reader.ReadStringValue ("sourceAddinFile");
mainModule = (ModuleDescription) reader.ReadValue ("MainModule");
- optionalModules = (ModuleCollection) reader.ReadValue ("OptionalModules", new ModuleCollection ());
- nodeSets = (ExtensionNodeSetCollection) reader.ReadValue ("NodeSets", new ExtensionNodeSetCollection ());
- extensionPoints = (ExtensionPointCollection) reader.ReadValue ("ExtensionPoints", new ExtensionPointCollection ());
- conditionTypes = (ConditionTypeDescriptionCollection) reader.ReadValue ("ConditionTypes", new ConditionTypeDescriptionCollection ());
+ optionalModules = (ModuleCollection) reader.ReadValue ("OptionalModules", new ModuleCollection (this));
+ nodeSets = (ExtensionNodeSetCollection) reader.ReadValue ("NodeSets", new ExtensionNodeSetCollection (this));
+ extensionPoints = (ExtensionPointCollection) reader.ReadValue ("ExtensionPoints", new ExtensionPointCollection (this));
+ conditionTypes = (ConditionTypeDescriptionCollection) reader.ReadValue ("ConditionTypes", new ConditionTypeDescriptionCollection (this));
+
+ if (mainModule != null)
+ mainModule.SetParent (this);
}
}
}