Author: lcorneliussen
Date: Mon Mar 28 07:40:46 2011
New Revision: 1086145

URL: http://svn.apache.org/viewvc?rev=1086145&view=rev
Log:
[NPANDAY-123] PATH should not have to be set ...

o Improved how SDK paths are found
o Added bin-subfolder to execution paths

Added:
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/DotnetSdkLocator.cs
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/PathUtil.cs
Modified:
    
incubator/npanday/trunk/components/dotnet-vendor/src/main/java/npanday/vendor/impl/VendorInfoRepositoryImpl.java
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/
   (props changed)
    
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/SettingsGeneratorMojo.cs

Modified: 
incubator/npanday/trunk/components/dotnet-vendor/src/main/java/npanday/vendor/impl/VendorInfoRepositoryImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/components/dotnet-vendor/src/main/java/npanday/vendor/impl/VendorInfoRepositoryImpl.java?rev=1086145&r1=1086144&r2=1086145&view=diff
==============================================================================
--- 
incubator/npanday/trunk/components/dotnet-vendor/src/main/java/npanday/vendor/impl/VendorInfoRepositoryImpl.java
 (original)
+++ 
incubator/npanday/trunk/components/dotnet-vendor/src/main/java/npanday/vendor/impl/VendorInfoRepositoryImpl.java
 Mon Mar 28 07:40:46 2011
@@ -161,11 +161,22 @@ public class VendorInfoRepositoryImpl
                 VendorInfo vendorInfo = 
VendorInfo.Factory.createDefaultVendorInfo();
                 vendorInfo.setVendorVersion( v.getVendorVersion() );
                 List<File> executablePaths = new ArrayList<File>();
+
+                // add .NET install root as path
                 executablePaths.add(new File( framework.getInstallRoot() ));
+
+                // add .NET-SDK install root as path
                 if(framework.getSdkInstallRoot() != null)
                 {
                     executablePaths.add( new 
File(framework.getSdkInstallRoot()));
                 }
+
+                // copy configured additional execution paths
+                if (framework.getExecutablePaths() != null) {
+                    for(Object path: framework.getExecutablePaths()) {
+                        executablePaths.add( new File((String)path) );
+                    }
+                }
                 vendorInfo.setExecutablePaths( executablePaths );
                 vendorInfo.setFrameworkVersion( 
framework.getFrameworkVersion() );
                 try

Propchange: 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Mar 28 07:40:46 2011
@@ -0,0 +1,7 @@
+[Bb]in
+obj
+[Dd]ebug
+[Rr]elease
+*.user
+*.aps
+*.eto

Added: 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/DotnetSdkLocator.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/DotnetSdkLocator.cs?rev=1086145&view=auto
==============================================================================
--- 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/DotnetSdkLocator.cs
 (added)
+++ 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/DotnetSdkLocator.cs
 Mon Mar 28 07:40:46 2011
@@ -0,0 +1,72 @@
+using Microsoft.Win32;
+
+namespace NPanday.Plugin.Settings
+{
+    public class DotnetSdkLocator
+    {
+        RegistryKey Microsoft_NETFramework = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework");
+        RegistryKey Microsoft_SDKs_NETFramework = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\SDKs\.NETFramework");
+        RegistryKey Microsoft_SDKs_Windows_70 = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft 
SDKs\Windows\v7.0");
+        RegistryKey Microsoft_SDKs_Windows_70a = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft 
SDKs\Windows\v7.0A");
+
+        public string Find1_1()
+        {
+            return 
(string)Microsoft_NETFramework.GetValue("sdkInstallRootv1.1");
+        }
+
+        public string Find2_0()
+        {
+            return PathUtil.FirstExisting(
+                registryFind(Microsoft_NETFramework, "sdkInstallRootv2.0"),
+                registryFind(Microsoft_SDKs_NETFramework, "v2.0", 
"InstallationFolder")
+                );
+        }
+
+        public string Find3_5()
+        {
+            return PathUtil.FirstExisting(
+                registryFind(Microsoft_NETFramework, "sdkInstallRootv3.5"),
+                // prefer 32 bit until its made explicit
+                registryFind(Microsoft_SDKs_Windows_70, 
"WinSDKNetFx35Tools-x86", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx35Tools-x86", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70, "WinSDKNetFx35Tools", 
"InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx35Tools", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70, 
"WinSDKNetFx35Tools-x64", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx35Tools-x64", "InstallationFolder")
+            );
+        }
+
+        public string Find4_0()
+        {
+            return PathUtil.FirstExisting(
+                registryFind(Microsoft_NETFramework, "sdkInstallRootv4.0"), // 
does not exist, I thinkg (lcorneliussen)
+                // prefer 32 bit until its made explicit
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx40Tools", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx40Tools-x86", "InstallationFolder"),
+                registryFind(Microsoft_SDKs_Windows_70a, 
"WinSDK-NetFx40Tools-x64", "InstallationFolder")
+            );
+        }
+
+        private string registryFind(RegistryKey root, string valueKey)
+        {
+            return registryFind(root, null, valueKey);
+        }
+
+        private string registryFind(RegistryKey root, string subkey, string 
valueKey)
+        {
+            RegistryKey current = root;
+
+            if (current == null)
+                return null;
+
+            if (subkey != null)
+            {
+                current = current.OpenSubKey(subkey);
+                if (current == null)
+                    return null;
+            }
+
+            return (string)current.GetValue(valueKey);
+        }
+    }
+}

Added: 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/PathUtil.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/PathUtil.cs?rev=1086145&view=auto
==============================================================================
--- 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/PathUtil.cs
 (added)
+++ 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/PathUtil.cs
 Mon Mar 28 07:40:46 2011
@@ -0,0 +1,29 @@
+using System.IO;
+
+namespace NPanday.Plugin.Settings
+{
+    public static class PathUtil
+    {
+        public static string FirstExisting(params string[] probingPaths)
+        {
+            foreach (string dir in probingPaths)
+            {
+                if (Directory.Exists(dir))
+                    return dir;
+            }
+
+            return null;
+        }
+
+        public static string FirstContainingFile(string fileToBeContained, 
params string[] probingPaths)
+        {
+            foreach (string dir in probingPaths)
+            {
+                if (File.Exists(Path.Combine(dir, fileToBeContained)))
+                    return dir;
+            }
+
+            return null;
+        }
+    }
+}

Modified: 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/SettingsGeneratorMojo.cs
URL: 
http://svn.apache.org/viewvc/incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/SettingsGeneratorMojo.cs?rev=1086145&r1=1086144&r2=1086145&view=diff
==============================================================================
--- 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/SettingsGeneratorMojo.cs
 (original)
+++ 
incubator/npanday/trunk/plugins/netplugins/NPanday.Plugin.Settings/src/main/csharp/NPanday/Plugin/Settings/SettingsGeneratorMojo.cs
 Mon Mar 28 07:40:46 2011
@@ -18,71 +18,70 @@
 //
 
 using System;
+using System.Collections.Generic;
 using System.IO;
-using System.Collections;
 using System.Xml.Serialization;
 using Microsoft.Win32;
 
-using NPanday.Plugin;
 
 namespace NPanday.Plugin.Settings
 {
-       [Serializable]
+    [Serializable]
     [ClassAttribute(Phase = "validate", Goal = "generate-settings")]
-       public sealed class SettingsGeneratorMojo : AbstractMojo
+    public sealed class SettingsGeneratorMojo : AbstractMojo
     {
         public SettingsGeneratorMojo() { }
 
         [FieldAttribute("npandaySettingsPath", Expression = 
"${npanday.settings}", Type = "java.lang.String")]
         public string npandaySettingsPath;
 
-               public override Type GetMojoImplementationType()
-               {
-                       return this.GetType();
-               }
+        public override Type GetMojoImplementationType()
+        {
+            return this.GetType();
+        }
 
         public override void Execute()
         {
             string outputFile;
-            if (String.IsNullOrEmpty( npandaySettingsPath ))
+            if (String.IsNullOrEmpty(npandaySettingsPath))
             {
                 npandaySettingsPath = 
Environment.GetEnvironmentVariable("USERPROFILE") + "/.m2";
             }
             outputFile = npandaySettingsPath + "/npanday-settings.xml";
-            
+
             XmlSerializer serializer = new 
XmlSerializer(typeof(npandaySettings));
 
-            npandaySettings  settings = new npandaySettings();
+            npandaySettings settings = new npandaySettings();
             settings.operatingSystem = Environment.OSVersion.ToString();
 
             RegistryKey monoRegistryKey = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Novell\Mono");
             RegistryKey microsoftRegistryKey = 
Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework");
 
-            string defaultMonoCLR = (monoRegistryKey != null) ? (string) 
monoRegistryKey.GetValue("DefaultCLR") : null;
+            string defaultMonoCLR = (monoRegistryKey != null) ? 
(string)monoRegistryKey.GetValue("DefaultCLR") : null;
 
             settings.defaultSetup = GetDefaultSetup(defaultMonoCLR,
-                (string) microsoftRegistryKey.GetValue("InstallRoot"));
+                (string)microsoftRegistryKey.GetValue("InstallRoot"));
 
             npandaySettingsVendorsVendor[] microsoftVendors = null;
             try
             {
                 microsoftVendors = 
GetVendorsForMicrosoft(microsoftRegistryKey);
             }
-            catch(ExecutionException e)
+            catch (ExecutionException e)
             {
                 Console.WriteLine(e.ToString());
             }
 
             npandaySettingsVendorsVendor[] monoVendors = null;
             npandaySettingsVendorsVendor dotGnuVendor = null;
-            
-            if ( File.Exists( outputFile ))
+
+            if (File.Exists(outputFile))
             {
                 try
                 {
                     monoVendors = GetVendorsForMono(monoRegistryKey, 
defaultMonoCLR);
                 }
-                catch(ExecutionException e)
+                catch (ExecutionException e)
                 {
                     Console.WriteLine(e.ToString());
                 }
@@ -91,30 +90,30 @@ namespace NPanday.Plugin.Settings
                 {
                     dotGnuVendor = 
GetVendorForGnu(Environment.GetEnvironmentVariable("CSCC_LIB_PATH"));
                 }
-                catch(ExecutionException e)
+                catch (ExecutionException e)
                 {
                     Console.WriteLine(e.ToString());
                 }
             }
-            int monoVendorsLength = (monoVendors == null) ? 0: 
monoVendors.Length;
-            int dotGnuVendorLength = (dotGnuVendor == null) ? 0: 1;
-            int microsoftVendorsLength = (microsoftVendors == null) ? 0: 
microsoftVendors.Length;
+            int monoVendorsLength = (monoVendors == null) ? 0 : 
monoVendors.Length;
+            int dotGnuVendorLength = (dotGnuVendor == null) ? 0 : 1;
+            int microsoftVendorsLength = (microsoftVendors == null) ? 0 : 
microsoftVendors.Length;
 
             npandaySettingsVendorsVendor[] vendors =
                 new npandaySettingsVendorsVendor[microsoftVendorsLength + 
monoVendorsLength + dotGnuVendorLength];
 
             int copyLocation = 0;
-            if(microsoftVendors != null)
+            if (microsoftVendors != null)
             {
                 microsoftVendors.CopyTo(vendors, copyLocation);
-                copyLocation+=microsoftVendors.Length;
+                copyLocation += microsoftVendors.Length;
             }
-            if(monoVendors != null)
+            if (monoVendors != null)
             {
                 monoVendors.CopyTo(vendors, copyLocation);
-                copyLocation+=monoVendors.Length;
+                copyLocation += monoVendors.Length;
             }
-            if(dotGnuVendor != null)
+            if (dotGnuVendor != null)
                 vendors[copyLocation] = dotGnuVendor;
 
             settings.vendors = vendors;
@@ -127,10 +126,11 @@ namespace NPanday.Plugin.Settings
                                                              string 
installRoot)
         {
             npandaySettingsDefaultSetup defaultSetup = new 
npandaySettingsDefaultSetup();
-            if(installRoot == null)
+            if (installRoot == null)
             {
                 defaultSetup.vendorName = "MONO";
                 defaultSetup.vendorVersion = defaultMonoCLR;
+                defaultSetup.frameworkVersion = "2.0.50727";
                 return (defaultMonoCLR != null) ? defaultSetup : null;
             }
             bool dirInfo11 = new DirectoryInfo(Path.Combine(installRoot, 
"v1.1.4322")).Exists;
@@ -138,28 +138,19 @@ namespace NPanday.Plugin.Settings
             bool dirInfo35 = new DirectoryInfo(Path.Combine(installRoot, 
"v3.5")).Exists;
             bool dirInfo40 = new DirectoryInfo(Path.Combine(installRoot, 
"v4.0.30319")).Exists;
 
-            if(installRoot != null)
-            {
-                if(!dirInfo11 && !dirInfo20 && !dirInfo35 && !dirInfo40)
-                    return null;
-                defaultSetup.vendorName = "MICROSOFT";
-                defaultSetup.vendorVersion = (dirInfo20) ? "2.0.50727" : 
((dirInfo35) ? "3.5" : ((dirInfo40) ? "4.0" : "1.1.4322"));                
-                defaultSetup.frameworkVersion = defaultSetup.vendorVersion;
-                return defaultSetup;
-            }
-            else if(defaultMonoCLR != null)
-            {
-                defaultSetup.vendorName = "MONO";
-                defaultSetup.vendorVersion = defaultMonoCLR;
-                defaultSetup.frameworkVersion = "2.0.50727";
-                return defaultSetup;
-            }
-            return null;
+
+            if (!dirInfo11 && !dirInfo20 && !dirInfo35 && !dirInfo40)
+                return null;
+
+            defaultSetup.vendorName = "MICROSOFT";
+            defaultSetup.vendorVersion = (dirInfo20) ? "2.0.50727" : 
((dirInfo35) ? "3.5" : ((dirInfo40) ? "4.0" : "1.1.4322"));
+            defaultSetup.frameworkVersion = defaultSetup.vendorVersion;
+            return defaultSetup;
         }
 
         protected npandaySettingsVendorsVendor GetVendorForGnu(String libPath)
         {
-            if(libPath == null)
+            if (libPath == null)
                 throw new ExecutionException("NPANDAY-9011-000: No 
CSCC_LIB_PATH Found");
 
             if (libPath.EndsWith("lib" + Path.DirectorySeparatorChar + "cscc" 
+ Path.DirectorySeparatorChar + "lib"))
@@ -176,12 +167,12 @@ namespace NPanday.Plugin.Settings
                 npandaySettingsVendorsVendor vendor = new 
npandaySettingsVendorsVendor();
                 vendor.vendorName = "DotGNU";
                 vendor.vendorVersion = vendorVersion;
-                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks 
-                       = new 
npandaySettingsVendorsVendorFrameworksFramework[1];
+                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks
+                    = new npandaySettingsVendorsVendorFrameworksFramework[1];
                 npandaySettingsVendorsVendorFrameworksFramework vf = new 
npandaySettingsVendorsVendorFrameworksFramework();
                 vf.installRoot = Path.Combine(installR, "bin");
                 vf.frameworkVersion = "2.0.50727";//doesn't matter
-                vendorFrameworks[0] = vf;                                      
              ;
+                vendorFrameworks[0] = vf; ;
                 vendor.frameworks = vendorFrameworks;
                 return vendor;
             }
@@ -190,55 +181,62 @@ namespace NPanday.Plugin.Settings
 
         private npandaySettingsVendorsVendor[] 
GetVendorsForMicrosoft(RegistryKey microsoftRegistryKey)
         {
-            if(microsoftRegistryKey == null)
+            if (microsoftRegistryKey == null)
                 throw new ExecutionException("NPANDAY-9011-006: Microsoft 
installation could not be found.");
-            string installRoot = (string) 
microsoftRegistryKey.GetValue("InstallRoot");
-            string sdkInstallRoot11 = (string) 
microsoftRegistryKey.GetValue("sdkInstallRootv1.1");
-            string sdkInstallRoot20 = (string) 
microsoftRegistryKey.GetValue("sdkInstallRootv2.0");
-            string sdkInstallRoot35 = (string) 
microsoftRegistryKey.GetValue("sdkInstallRootv3.5");
-            
-            if(installRoot == null) throw new 
ExecutionException("NPANDAY-9011-005");
 
-            npandaySettingsVendorsVendor[] vendors = new 
npandaySettingsVendorsVendor[4];
+            string installRoot = 
(string)microsoftRegistryKey.GetValue("InstallRoot");
+
+            DotnetSdkLocator sdkLocator = new DotnetSdkLocator();
+
+            string sdkInstallRoot11 = sdkLocator.Find1_1();
+            string sdkInstallRoot20 = sdkLocator.Find2_0();
+            string sdkInstallRoot35 = sdkLocator.Find3_5();
+            string sdkInstallRoot40 = sdkLocator.Find4_0();
+
+            if (installRoot == null) throw new 
ExecutionException("NPANDAY-9011-005");
+
+            List<npandaySettingsVendorsVendor> vendors = new 
List<npandaySettingsVendorsVendor>();
             DirectoryInfo dirInfo11 = new 
DirectoryInfo(Path.Combine(installRoot, "v1.1.4322"));
             DirectoryInfo dirInfo20 = new 
DirectoryInfo(Path.Combine(installRoot, "v2.0.50727"));
             DirectoryInfo dirInfo30 = new 
DirectoryInfo(Path.Combine(installRoot, "v3.0"));
             DirectoryInfo dirInfo35 = new 
DirectoryInfo(Path.Combine(installRoot, "v3.5"));
-            DirectoryInfo dirInfo40 = new 
DirectoryInfo(Path.Combine(installRoot, "v4.0.30319"));                      
-            
-            int vendorCounter = 0;
+            DirectoryInfo dirInfo40 = new 
DirectoryInfo(Path.Combine(installRoot, "v4.0.30319"));
+
             if (dirInfo11.Exists)
             {
                 npandaySettingsVendorsVendor vendor = new 
npandaySettingsVendorsVendor();
                 vendor.vendorName = "MICROSOFT";
                 vendor.vendorVersion = "1.1.4322";
-                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks 
-                       = new 
npandaySettingsVendorsVendorFrameworksFramework[1];
-                npandaySettingsVendorsVendorFrameworksFramework vf11 
-                       = new npandaySettingsVendorsVendorFrameworksFramework();
-                vf11.installRoot = dirInfo11.FullName;
-                vf11.frameworkVersion = "1.1.4322";
-                
-                vendorFrameworks[0] = vf11;
-                vf11.sdkInstallRoot = sdkInstallRoot11;
+                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks
+                    = new npandaySettingsVendorsVendorFrameworksFramework[1];
+                npandaySettingsVendorsVendorFrameworksFramework vf
+                    = new npandaySettingsVendorsVendorFrameworksFramework();
+                vf.installRoot = dirInfo11.FullName;
+                vf.frameworkVersion = "1.1.4322";
+
+                vendorFrameworks[0] = vf;
+                vf.sdkInstallRoot = sdkInstallRoot11;
+                FindAndAssignExecutablePaths(vf);
                 vendor.frameworks = vendorFrameworks;
-                
-                vendors[vendorCounter++] = vendor;
+
+                vendors.Add(vendor);
             }
             if (dirInfo20.Exists)
             {
                 npandaySettingsVendorsVendor vendor = new 
npandaySettingsVendorsVendor();
                 vendor.vendorName = "MICROSOFT";
                 vendor.vendorVersion = "2.0.50727";
-                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks 
-                       = new 
npandaySettingsVendorsVendorFrameworksFramework[1];
-                npandaySettingsVendorsVendorFrameworksFramework vf11 = new 
npandaySettingsVendorsVendorFrameworksFramework();
-                vf11.installRoot = dirInfo20.FullName;
-                vf11.frameworkVersion = "2.0.50727";
-                vendorFrameworks[0] = vf11;
-                vf11.sdkInstallRoot = sdkInstallRoot20;
+                npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks
+                    = new npandaySettingsVendorsVendorFrameworksFramework[1];
+                npandaySettingsVendorsVendorFrameworksFramework vf = new 
npandaySettingsVendorsVendorFrameworksFramework();
+                vf.installRoot = dirInfo20.FullName;
+                vf.frameworkVersion = "2.0.50727";
+                vendorFrameworks[0] = vf;
+                vf.sdkInstallRoot = sdkInstallRoot20;
+                FindAndAssignExecutablePaths(vf);
+
                 vendor.frameworks = vendorFrameworks;
-                vendors[vendorCounter++] = vendor;
+                vendors.Add(vendor);
             }
             if (dirInfo30.Exists)
             {
@@ -246,27 +244,29 @@ namespace NPanday.Plugin.Settings
                 vendor.vendorName = "MICROSOFT";
                 vendor.vendorVersion = "3.0";
                 npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks = new npandaySettingsVendorsVendorFrameworksFramework[1];
-                npandaySettingsVendorsVendorFrameworksFramework vf11 = new 
npandaySettingsVendorsVendorFrameworksFramework();
-                vf11.installRoot = dirInfo30.FullName;
-                vf11.frameworkVersion = "3.0";
-                vendorFrameworks[0] = vf11;
-                vf11.sdkInstallRoot = sdkInstallRoot20;
+                npandaySettingsVendorsVendorFrameworksFramework vf = new 
npandaySettingsVendorsVendorFrameworksFramework();
+                vf.installRoot = dirInfo30.FullName;
+                vf.frameworkVersion = "3.0";
+                vendorFrameworks[0] = vf;
+                vf.sdkInstallRoot = sdkInstallRoot20;
+                FindAndAssignExecutablePaths(vf);
                 vendor.frameworks = vendorFrameworks;
-                vendors[vendorCounter++] = vendor;
+                vendors.Add(vendor);
             }
-                       if (dirInfo35.Exists)
+            if (dirInfo35.Exists)
             {
                 npandaySettingsVendorsVendor vendor = new 
npandaySettingsVendorsVendor();
                 vendor.vendorName = "MICROSOFT";
                 vendor.vendorVersion = "3.5";
                 npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks = new npandaySettingsVendorsVendorFrameworksFramework[1];
-                npandaySettingsVendorsVendorFrameworksFramework vf11 = new 
npandaySettingsVendorsVendorFrameworksFramework();
-                vf11.installRoot = dirInfo35.FullName;
-                vf11.frameworkVersion = "3.5";
-                vendorFrameworks[0] = vf11;
-                vf11.sdkInstallRoot = sdkInstallRoot20;
+                npandaySettingsVendorsVendorFrameworksFramework vf = new 
npandaySettingsVendorsVendorFrameworksFramework();
+                vf.installRoot = dirInfo35.FullName;
+                vf.frameworkVersion = "3.5";
+                vendorFrameworks[0] = vf;
+                vf.sdkInstallRoot = sdkInstallRoot35;
+                FindAndAssignExecutablePaths(vf);
                 vendor.frameworks = vendorFrameworks;
-                vendors[vendorCounter++] = vendor;
+                vendors.Add(vendor);
             }
             if (dirInfo40.Exists)
             {
@@ -274,28 +274,52 @@ namespace NPanday.Plugin.Settings
                 vendor.vendorName = "MICROSOFT";
                 vendor.vendorVersion = "4.0";
                 npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks = new npandaySettingsVendorsVendorFrameworksFramework[1];
-                npandaySettingsVendorsVendorFrameworksFramework vf11 = new 
npandaySettingsVendorsVendorFrameworksFramework();
-                vf11.installRoot = dirInfo40.FullName;
-                vf11.frameworkVersion = "4.0";
-                vendorFrameworks[0] = vf11;
-                vf11.sdkInstallRoot = sdkInstallRoot20;
+                npandaySettingsVendorsVendorFrameworksFramework vf = new 
npandaySettingsVendorsVendorFrameworksFramework();
+                vf.installRoot = dirInfo40.FullName;
+                vf.frameworkVersion = "4.0";
+                vendorFrameworks[0] = vf;
+                vf.sdkInstallRoot = sdkInstallRoot40;
+                FindAndAssignExecutablePaths(vf);
                 vendor.frameworks = vendorFrameworks;
-                vendors[vendorCounter++] = vendor;
-            }                  
-            
-            return vendors;
+                vendors.Add(vendor);
+            }
+
+            return vendors.ToArray();
+        }
+
+        private void 
FindAndAssignExecutablePaths(npandaySettingsVendorsVendorFrameworksFramework x)
+        {
+            if (x.sdkInstallRoot != null)
+            {
+                if (File.Exists(Path.Combine(x.sdkInstallRoot, "xsd.exe")))
+                {
+                    return;
+                }
+                string binDir = Path.Combine(x.sdkInstallRoot, "bin");
+                if (File.Exists(Path.Combine(binDir, "xsd.exe")))
+                {
+                    if (x.executablePaths == null)
+                        x.executablePaths = new string[] { binDir };
+                    else
+                    {
+                        List<string> list = new 
List<string>(x.executablePaths);
+                        list.Add(binDir);
+                        x.executablePaths = list.ToArray();
+                    }
+                }
+            }
         }
 
         private npandaySettingsVendorsVendor[] GetVendorsForMono(RegistryKey 
monoRegistryKey, string defaultMonoCLR)
         {
-            if(monoRegistryKey == null)
+            if (monoRegistryKey == null)
                 throw new ExecutionException("NPANDAY-9011-007: Mono 
installation czould not be found.");
             npandaySettingsVendorsVendor[] vendors = new 
npandaySettingsVendorsVendor[monoRegistryKey.SubKeyCount];
             int i = 0;
             foreach (string keyName in monoRegistryKey.GetSubKeyNames())
             {
-                string sdkInstallRoot = (string) 
monoRegistryKey.OpenSubKey(keyName).GetValue("SdkInstallRoot");
-                if(sdkInstallRoot == null)
+                string sdkInstallRoot = 
(string)monoRegistryKey.OpenSubKey(keyName).GetValue("SdkInstallRoot");
+                if (sdkInstallRoot == null)
                     throw new ExecutionException("NPANDAY-9011-004: Could not 
find install root key for mono");
                 string installRoot = Path.Combine(sdkInstallRoot, "bin");
                 npandaySettingsVendorsVendorFrameworksFramework[] 
vendorFrameworks = new npandaySettingsVendorsVendorFrameworksFramework[2];
@@ -313,7 +337,7 @@ namespace NPanday.Plugin.Settings
                 vf35.installRoot = installRoot;
                 vf35.frameworkVersion = "3.5";
                 vendorFrameworks[2] = vf35;
-                
+
                 npandaySettingsVendorsVendorFrameworksFramework vf40 = new 
npandaySettingsVendorsVendorFrameworksFramework();
                 vf40.installRoot = installRoot;
                 vf40.frameworkVersion = "4.0";
@@ -323,7 +347,7 @@ namespace NPanday.Plugin.Settings
                 vendor.vendorName = "MONO";
                 vendor.vendorVersion = keyName;
                 vendor.frameworks = vendorFrameworks;
-                if(defaultMonoCLR.Equals(keyName)) vendor.isDefault = "true";
+                if (defaultMonoCLR.Equals(keyName)) vendor.isDefault = "true";
                 vendors[i++] = vendor;
             }
             return vendors;
@@ -334,14 +358,14 @@ namespace NPanday.Plugin.Settings
             string[] vendorVersionToken = version.Split('.');
             foreach (string token in vendorVersionToken)
             {
-               try
-               {
-                       Single.Parse(token);
-               }
-               catch(Exception)
-               {
-                       return false;
-               }
+                try
+                {
+                    Single.Parse(token);
+                }
+                catch (Exception)
+                {
+                    return false;
+                }
             }
             return true;
         }


Reply via email to