using System; using System.Collections.Generic; using System.Linq; using System.Text; using Foo.DataAccessLayer; using Foo.DataAccessLayer.DataTypes; using Foo.WorkspaceMgr.Closers; using Foo.WorkspaceMgr.Hiders; using Foo.WorkspaceMgr.Launchers; using System.Reflection; namespace Foo.WorkspaceMgr { public class WorkspaceMgr : IWorkspaceMgr { #region IWorkspaceMgr Members /// /// Responsible for Launching a single artifact // ToDo: - CHECK RAT if Artifact is already running /// // ToDo: - Test IEXPLORER LAUNCHER /// artifact to launch // ToDo: - Figgure out what to do in Error State /// true if successful, false otherwise public bool LaunchArtifact(ArtifactItem artifactItem) { AssemblyName assemblyName = new AssemblyName("Microsoft.Office.Interop.Access, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"); Assembly assembly = Assembly.Load(assemblyName); //if (artifactItem.IsValid && artifactItem.IsValidFileIntegrity) if (artifactItem.IsLocationValid) { // Step One - Create the Launcher Obj ILaunch launcher = WorkspaceTypeHelpers.CreateLauncherObj(artifactItem); if (launcher == null) return false; // Step Two - Query if Launching for this Artifact is supported FuncDepBoolType retVal = launcher.IQueryLaunch(artifactItem.Location); // Step Three - launch it if supported if (retVal == FuncDepBoolType.Success) { retVal = launcher.ILaunch(artifactItem.Location); } else { // * Log error or something and return otherwise * To Do return false; } // Step Four - if success signal to the db the artifact was launched if (retVal == FuncDepBoolType.Success) { Data.Artifacts.ArtifactWasLaunched(artifactItem); } return (retVal == FuncDepBoolType.Success); } return false; } /// /// Responsible for Closing a single artifact // ToDo: - CHECK RAT if Artifact is running, if so Get Proccess that it is running in!!! ---- /// // ToDo: - Test Office, Generic, Notepad, IExplore Closers /// artifact to close // ToDo: - Figgure out what to do in Error State /// true if successful, false otherwise public bool CloseArtifact(ArtifactItem artifactItem) { if (artifactItem.IsValid && artifactItem.IsValidFileIntegrity) { // Step One - Create the Closer Obj IClose closer = WorkspaceTypeHelpers.CreateCloserObj(artifactItem); if (closer == null) return false; // Step Two - Query if Closing for this Artifact is possible FuncDepBoolType retVal = closer.IQueryClose(artifactItem.Location); // Step Three - close it if supported if (retVal == FuncDepBoolType.Success) { retVal = closer.IClose(artifactItem.Location); } else { // * Log error or something and return otherwise * To Do return false; } return (retVal == FuncDepBoolType.Success); } return false; } /// /// Responsible for Hiding or showing a single artifact // ToDo: - CHECK RAT if Artifact is running, if so Get Proccess that it is running in!!! ---- /// // ToDo: - Test Office, Generic, Notepad, IExplore Hiders /// artifact to hide // ToDo: - Figgure out what to do in Error State /// true to show, false to hide artifact /// true if successful, false otherwise public bool HideShowArtifact(ArtifactItem artifactItem, bool bShow) { if (artifactItem.IsValid && artifactItem.IsValidFileIntegrity) { // Step One - Create the ShowNHider Obj IShowNHide ShowHider = WorkspaceTypeHelpers.CreateShowNHiderObj(artifactItem); if (ShowHider == null) return false; // Step Two - Query if Hiding or Showing is available for this Artifact FuncDepBoolType retVal = FuncDepBoolType.Failed; if (bShow) retVal = ShowHider.IQueryShow(artifactItem.Location); else retVal = ShowHider.IQueryHide(artifactItem.Location); // Step Three - Show or Hide it if supported if (retVal == FuncDepBoolType.Success) { if(bShow) retVal = ShowHider.IShow(artifactItem.Location); else retVal = ShowHider.IHide(artifactItem.Location); } else { // * Log error or something and return otherwise * To Do return false; } return (retVal == FuncDepBoolType.Success); } return false; } /// // ToDo: - /// Launches a Workspace. When for some reason an artifact location /// is not available to launch we keep track of it and display it to the /// user - however, we don't stop. we try to launch as many artifacts as /// we can. /// --------------------------------------------------------------------- /// There are a few steps we have to do in order to successfully launch: /// 1) Make sure all files that have the same file name are not launched together /// 2) we must wait a little after each file to make sure that they can be resolved /// /// /// Name of Workspace to launch artifacts for /// true if 1 or more artifacts were launched, false otherwise public bool LaunchWorkspace(string WorkspaceName) { // Step One - First Get all the Artifacts by Name ArtifactItem[] artifacts = Data.Artifacts.GetAllArtifactsForWorkspace(WorkspaceName, SortOrderForArtifacts.Descending); if (!DataTypeValidation.IsEmptyArtifactItemGroup(artifacts)) { // Let's get the optimal Indexes for all the file artifacts int[] optimalIndexes; HelperFunc.IndexOptimizationQuality quality; quality = HelperFunc.OptimalLaunchIndexesForFileArtifacts(artifacts, out optimalIndexes); //// // Launch the file Artifacts according to their optimal indexes //// foreach (int optIndex in optimalIndexes) { // Launch file artifact LaunchArtifact(artifacts[optIndex]); // depending on the quality of indexes sleep accordingly int nSleepTime = HelperFunc.GetSleepTimeForQuality(quality); // Sleep Now before launching again System.Threading.Thread.Sleep(nSleepTime); } //// // Launch the url Artifacts according to their optimal indexes //// foreach (ArtifactItem artifact in artifacts) { if (artifact.IsUrl) { LaunchArtifact(artifact); System.Threading.Thread.Sleep(HelperFunc.DEFAULT_LAUNCH_SLEEP_TIME); } } // Signal the Workspace as Launched Data.Workspace.WorkspaceWasLaunched(WorkspaceName); // Set it to this Workspace 'State' Data.State.SetCurrentWorkspaceName(WorkspaceName); } return false; } /// /// /// /// Name of Workspace to close artifacts for /// public bool CloseWorkspace(string WorkspaceName) { ArtifactItem[] artifacts = Data.Artifacts.GetAllArtifactsForWorkspace(WorkspaceName, SortOrderForArtifacts.Ascending); if (!DataTypeValidation.IsEmptyArtifactItemGroup(artifacts)) { foreach (ArtifactItem artifact in artifacts) { CloseArtifact(artifact); // Sleep a little System.Threading.Thread.Sleep(HelperFunc.DEFAULT_CLOSE_SLEEP_TIME); } // Clear Workspace 'State' Data.State.ClearCurrentWorkspaceName(); } return false; } /// /// /// /// /// true to show, false to hide artifact /// public bool HideShowWorkspace(string WorkspaceName, bool bShow) { ArtifactItem[] artifacts = Data.Artifacts.GetAllArtifactsForWorkspace(WorkspaceName, SortOrderForArtifacts.Ascending); if (!DataTypeValidation.IsEmptyArtifactItemGroup(artifacts)) { foreach (ArtifactItem artifact in artifacts) { HideShowArtifact(artifact, bShow); // Sleep a little System.Threading.Thread.Sleep(HelperFunc.DEFAULT_SHOWNHIDE_SLEEP_TIME); } } return false; } #endregion } }