2003-09-25 <cesar@ciencias.unam.mx>
authorCésar Natarén <cesar@mono-cvs.ximian.com>
Fri, 26 Sep 2003 02:13:21 +0000 (02:13 -0000)
committerCésar Natarén <cesar@mono-cvs.ximian.com>
Fri, 26 Sep 2003 02:13:21 +0000 (02:13 -0000)
* BaseVsaEngine.cs: Implemented the properties of "the kind of
state machine" that BaseVsaEngine is. There are some tiny details
- properly marked to be fixed - missing ;-). They were: Assembly,
Evidence, GenerateDebug, IsCompiled, IsDirty, IsRunning, Language,
LCID, Name, RootMoniker, RootNamespace, Site.

svn path=/trunk/mcs/; revision=18305

mcs/class/Microsoft.JScript/Microsoft.Vsa/BaseVsaEngine.cs

index 484e5b4eee1b0d6310ae5f54377dba198cbe22f7..23e6594d22208f71ab49c25fda7e2d911d2d55aa 100755 (executable)
@@ -1,5 +1,5 @@
 //
-// BaseVsaEngine.cs:
+// BaseVsaEngine.cs: 
 //
 // Author:
 //     Cesar Lopez Nataren (cesar@ciencias.unam.mx)
@@ -8,6 +8,9 @@
 //
 
 using System;
+using System.Reflection;
+using System.Security.Policy;
+using System.Threading;
 
 namespace Microsoft.Vsa {
 
@@ -19,10 +22,63 @@ namespace Microsoft.Vsa {
 
                private bool closed;
                private bool busy;
+               private bool empty;
+               private bool siteAlreadySet;
+               private bool running;
+
+               // indicates that RootMoniker and Site have been set.
+               private bool initialized;
+
+               private bool namespaceNotSet;
+               private bool supportDebug;
+               private bool generateDebugInfo;
+               private bool compiled;
+               private bool dirty;
+
+               private bool initNewCalled;
+
+               private IVsaSite site;
+               private IVsaItems items;
+
+               // its default value has to be "JScript"
+               private string language;
+
+               private string version;
+               private int lcid;
+               private Assembly assembly;
+               private Evidence evidence;
+               private string name;
+               private string rootNamespace;
 
                public BaseVsaEngine (string language, string version, bool supportDebug)
                {
-                       throw new NotImplementedException ();
+                       this.language = language;
+
+                       // FIXME: I think we must ensure that version it's 
+                       // compliant with versionformat Major.Minor.Build.Revision. 
+                       // Not sure about what Exception throw.
+                       this.version = version;
+
+                       this.supportDebug = supportDebug;
+                       this.site = null;
+                       this.rootMoniker = "";
+                       this.running = false;
+                       this.evidence = null;
+                       this.compiled = false;
+                       this.dirty = false;
+
+                       this.lcid = Thread.CurrentThread.CurrentCulture.LCID;
+                       this.name = "";
+                       
+                       this.rootNamespace = "";
+                       this.namespaceNotSet = true;    
+
+                       this.initialized = false;
+                       this.initNewCalled = false;
+                       this.generateDebugInfo = false;
+                       this.closed = false;
+                       this.items = null;
+                       this.siteAlreadySet = false;
                }
 
                public System._AppDomain AppDomain {
@@ -30,9 +86,29 @@ namespace Microsoft.Vsa {
                        set { throw new NotImplementedException (); }
                }
 
-               public System.Security.Policy.Evidence Evidence {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+               // FIXME: research if we can use "get" Evidence when: running and busy.
+               public Evidence Evidence {
+                       get { 
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return evidence; 
+                       }
+
+                       set {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               evidence = value;
+                       }
                }
 
                public string ApplicationBase {
@@ -40,49 +116,199 @@ namespace Microsoft.Vsa {
                        set { throw new NotImplementedException (); }
                }
 
-               public System.Reflection.Assembly Assembly {
-                       get { throw new NotImplementedException (); }
+               public Assembly Assembly {
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (!running)
+                                       throw new VsaException (VsaError.EngineNotRunning);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+
+                               return assembly;
+                       }
                }
 
+
+               // FIXME: research if we can "get" it when running and busy.
+               // FIXME: when do we throw VsaException with 
+               //        VsaError set to DebugInfoNotSupported?
+
                public bool GenerateDebugInfo {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return generateDebugInfo;
+                       }
+
+                       set {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (!supportDebug)
+                                       throw new VsaException (VsaError.DebugInfoNotSupported);
+
+                               generateDebugInfo = value;
+                       }
                }
 
                public bool IsCompiled {
-                       get { throw new NotImplementedException (); }
+                       get {                           
+                               if (dirty)
+                                       return false;
+                               else if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return compiled;
+                       }
                }
 
+
+               // FIXME: Research if we can "set" it when running
                public bool IsDirty {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       set {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+
+                               dirty = value;
+                       }
+
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return dirty;
+                       }
                }
 
                public bool IsRunning {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               
+                               return running;
+                        }
                }
 
                public IVsaItems Items {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return items;
+                       }
                }
 
+
                public string Language {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return language;
+                       }
                }
 
+               // FIXME: research when LCIDNotSupported gets thrown.
                public int LCID {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get { 
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+
+                               return lcid; 
+                       }
+
+                       set { 
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+
+                               lcid = value;
+                       }
                }
 
+
+               // FIXME: we must throw VsaException, VsaError set to EngineNameInUse
+               // when setting and name is already in use.
                public string Name {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+
+                               return name;
+                       }
+
+                       set {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+
+                               name = value;
+                       }
                }
 
-               // FIXME: We have to check that the moniker is not already in use.          
+               // FIXME: We have to check - when setting - that the moniker 
+               // is not already in use.           
                public string RootMoniker {
-                       get { return rootMoniker; }
+                       get { 
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+
+                               return rootMoniker; 
+                       }
+
                        set {
                                if (monikerAlreadySet)
                                        throw new VsaException (VsaError.RootMonikerAlreadySet);
@@ -131,28 +357,104 @@ namespace Microsoft.Vsa {
                }
 
 
+               // FIXME: we must check - when setting - that the value is a valid 
+               // namespace (research what does that mean :-)). If not the case
+               // VsaException must be thrown, set to VsaError.NamespaceInvalid
                public string RootNamespace {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get { 
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+
+                               return rootNamespace; 
+                       }
+
+                       set {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+                               else if (running)
+                                       throw new VsaException (VsaError.EngineRunning);
+                               
+                               rootNamespace = value;
+                               namespaceNotSet = false;                                
+                       }
                }
 
                public IVsaSite Site {
-                       get { throw new NotImplementedException (); }
-                       set { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!monikerAlreadySet)
+                                       throw new VsaException (VsaError.RootMonikerNotSet);
+
+                               return site;
+                       }
+
+                       set {
+                               if (!monikerAlreadySet)
+                                       throw new VsaException (VsaError.RootMonikerNotSet);
+                               else if (siteAlreadySet)
+                                       throw new VsaException (VsaError.SiteAlreadySet);
+                               else if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (value == null)
+                                       throw new VsaException (VsaError.SiteInvalid);
+
+                               site = value;
+                               siteAlreadySet = true;
+                       }
                }
 
+               //
+               // Version Format: Major.Minor.Revision.Build
+               //
                public string Version {
-                       get { throw new NotImplementedException (); }
+                       get {
+                               if (closed)
+                                       throw new VsaException (VsaError.EngineClosed);
+                               else if (busy)
+                                       throw new VsaException (VsaError.EngineBusy);
+                               else if (!initNewCalled)
+                                       throw new VsaException (VsaError.EngineNotInitialized);
+
+                               return version;
+                       }
                }
 
                public virtual void Close ()
                {
-                       throw new NotImplementedException ();
+                       running = false;
                }
 
                public virtual bool Compile ()
                {
-                       throw new NotImplementedException ();
+                       if (closed)
+                               throw new VsaException (VsaError.EngineClosed);
+                       else if (busy)
+                               throw new VsaException (VsaError.EngineBusy);
+                       else if (empty)
+                               throw new VsaException (VsaError.EngineEmpty);
+                       else if (running)
+                               throw new VsaException (VsaError.EngineRunning);
+                       else if (!initNewCalled)
+                               throw new VsaException (VsaError.EngineNotInitialized);
+                       else if (namespaceNotSet)
+                               throw new VsaException (VsaError.RootNamespaceNotSet);
+
+                       return false;
                }
 
                public virtual object GetOption (string name)
@@ -162,7 +464,18 @@ namespace Microsoft.Vsa {
 
                public virtual void InitNew ()
                {
-                       throw new NotImplementedException ();
+                       if (closed)
+                               throw new VsaException (VsaError.EngineClosed);
+                       else if (busy)
+                               throw new VsaException (VsaError.EngineBusy);
+                       else if (initNewCalled)
+                               throw new VsaException (VsaError.EngineInitialized);
+                       else if (!monikerAlreadySet)
+                               throw new VsaException (VsaError.RootMonikerNotSet);
+                       else if (!siteAlreadySet)
+                               throw new VsaException (VsaError.SiteNotSet);
+
+                       initNewCalled = true;
                }
 
                public virtual void LoadSourceState (IVsaPersistSite site)
@@ -172,7 +485,15 @@ namespace Microsoft.Vsa {
 
                public virtual void Reset ()
                {
-                       throw new NotImplementedException ();
+                       if (closed)
+                               throw new VsaException (VsaError.EngineClosed);
+                       else if (busy)
+                               throw new VsaException (VsaError.EngineBusy);
+                       else if (!running)
+                               throw new VsaException (VsaError.EngineNotRunning);
+
+                       running = false;
+                       assembly = null;
                }
 
                public virtual void RevokeCache ()
@@ -182,12 +503,25 @@ namespace Microsoft.Vsa {
 
                public virtual void Run ()
                {
-                       throw new NotImplementedException ();
+                       if (closed)
+                               throw new VsaException (VsaError.EngineClosed);
+                       else if (busy)
+                               throw new VsaException (VsaError.EngineBusy);
+                       else if (running)
+                               throw new VsaException (VsaError.EngineRunning);
+                       else if (!monikerAlreadySet)
+                               throw new VsaException (VsaError.RootMonikerNotSet);
+                       else if (!siteAlreadySet)
+                               throw new VsaException (VsaError.SiteNotSet);
+                       else if (namespaceNotSet)
+                               throw new VsaException (VsaError.RootNamespaceNotSet);
+
+                       running = true;
                }
 
                public virtual void SetOption (string name, object value)
                {
-                       throw new NotImplementedException ();
+                       dirty = true;
                }
 
                public virtual void SaveCompiledState (out byte [] pe, out byte [] debugInfo)