public static void Setup(String[] workbookNames, WorkbookEvaluator[] evaluators) { int nItems = workbookNames.Length; if (evaluators.Length != nItems) { throw new ArgumentException("Number of workbook names is " + nItems + " but number of evaluators is " + evaluators.Length); } if (nItems < 1) { throw new ArgumentException("Must provide at least one collaborating worbook"); } CollaboratingWorkbooksEnvironment env = new CollaboratingWorkbooksEnvironment(workbookNames, evaluators, nItems); HookNewEnvironment(evaluators, env); }
private static void HookNewEnvironment(WorkbookEvaluator[] evaluators, CollaboratingWorkbooksEnvironment env) { // All evaluators will need To share the same cache. // but the cache takes an optional evaluation listener. int nItems = evaluators.Length; IEvaluationListener evalListener = evaluators[0].GetEvaluationListener(); // make sure that all evaluators have the same listener for (int i = 0; i < nItems; i++) { if (evalListener != evaluators[i].GetEvaluationListener()) { // This would be very complex To support throw new Exception("Workbook evaluators must all have the same evaluation listener"); } } EvaluationCache cache = new EvaluationCache(evalListener); for (int i = 0; i < nItems; i++) { evaluators[i].AttachToEnvironment(env, cache, i); } }
private void UnhookOldEnvironments(WorkbookEvaluator[] evaluators) { ArrayList oldEnvs = new ArrayList(); for (int i = 0; i < evaluators.Length; i++) { oldEnvs.Add(evaluators[i].GetEnvironment()); } CollaboratingWorkbooksEnvironment[] oldCWEs = new CollaboratingWorkbooksEnvironment[oldEnvs.Count]; oldCWEs = (CollaboratingWorkbooksEnvironment[])oldEnvs.ToArray(typeof(CollaboratingWorkbooksEnvironment)); for (int i = 0; i < oldCWEs.Length; i++) { oldCWEs[i].Unhook(); } }