public override void Attach( EventType parentEventType, int streamNumber, ViewForgeEnv viewForgeEnv) { var windowName = ViewName; var validated = ViewForgeSupport.Validate( windowName, parentEventType, viewParameters, true, viewForgeEnv, streamNumber); if (viewParameters.Count < 2 || viewParameters.Count > 3) { throw new ViewParameterException(ViewParamMessage); } // validate first parameter: timestamp expression if (!validated[0].Forge.EvaluationType.IsNumeric()) { throw new ViewParameterException(ViewParamMessage); } timestampExpression = validated[0]; ViewForgeSupport.AssertReturnsNonConstant(windowName, validated[0], 0); timePeriodComputeForge = ViewFactoryTimePeriodHelper.ValidateAndEvaluateTimeDeltaFactory( ViewName, viewParameters[1], ViewParamMessage, 1, viewForgeEnv, streamNumber); // validate optional parameters if (validated.Length == 3) { var constant = ViewForgeSupport.ValidateAndEvaluate( windowName, validated[2], viewForgeEnv, streamNumber); if (!constant.IsNumber() || constant.IsFloatingPointNumber()) { throw new ViewParameterException( "Externally-timed batch view requires a Long-typed reference point in msec as a third parameter"); } optionalReferencePoint = constant.AsInt64(); } eventType = parentEventType; }