249 lines
11 KiB
C#
249 lines
11 KiB
C#
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
|
|
|
|
/// <summary>
|
|
/// Responsible for Launching a single artifact // ToDo: - CHECK RAT if Artifact is already running
|
|
/// </summary> // ToDo: - Test IEXPLORER LAUNCHER
|
|
/// <param name="artifactItem">artifact to launch</param> // ToDo: - Figgure out what to do in Error State
|
|
/// <returns>true if successful, false otherwise</returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Responsible for Closing a single artifact // ToDo: - CHECK RAT if Artifact is running, if so Get Proccess that it is running in!!! ----
|
|
/// </summary> // ToDo: - Test Office, Generic, Notepad, IExplore Closers
|
|
/// <param name="artifactItem">artifact to close</param> // ToDo: - Figgure out what to do in Error State
|
|
/// <returns>true if successful, false otherwise</returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Responsible for Hiding or showing a single artifact // ToDo: - CHECK RAT if Artifact is running, if so Get Proccess that it is running in!!! ----
|
|
/// </summary> // ToDo: - Test Office, Generic, Notepad, IExplore Hiders
|
|
/// <param name="artifactItem">artifact to hide</param> // ToDo: - Figgure out what to do in Error State
|
|
/// <param name="bShow">true to show, false to hide artifact</param>
|
|
/// <returns>true if successful, false otherwise</returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary> // 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
|
|
///
|
|
/// </summary>
|
|
/// <param name="WorkspaceName">Name of Workspace to launch artifacts for</param>
|
|
/// <returns>true if 1 or more artifacts were launched, false otherwise</returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="WorkspaceName">Name of Workspace to close artifacts for</param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="WorkspaceName"></param>
|
|
/// <param name="bShow">true to show, false to hide artifact</param>
|
|
/// <returns></returns>
|
|
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
|
|
}
|
|
}
|