// Travis.Frisinger - 29.01.2013 : Bug 8412 /// <summary> /// Shapes the dev2 definitions to data list. /// </summary> /// <param name="definitions">The definitions as binary objects</param> /// <param name="defType">Type of the def Input or Output</param> /// <param name="pushToServer"></param> /// <param name="errors"></param> /// <returns></returns> public StringBuilder ShapeDev2DefinitionsToDataList(IList <IDev2Definition> definitions, enDev2ArgumentType defType, bool pushToServer, out ErrorResultTO errors) { ErrorResultTO allErrors = new ErrorResultTO(); var dataList = DataListUtil.ShapeDefinitionsToDataList(definitions, defType, out errors); allErrors.MergeErrors(errors); errors.ClearErrors(); // ReSharper disable RedundantAssignment StringBuilder result = new StringBuilder(GlobalConstants.NullDataListID.ToString()); // ReSharper restore RedundantAssignment if (pushToServer) { // Push to server and return GUID byte[] data = new byte[0]; result = new StringBuilder(_svrCompiler.ConvertTo(null, DataListFormat.CreateFormat(GlobalConstants._XML), data, dataList, out errors).ToString()); } else { result = dataList; // else return the datalist as requested } return(result); }
/// <summary> /// Merges the errors. /// </summary> /// <param name="toMerge">To merge.</param> public void MergeErrors(ErrorResultTO toMerge) { if (toMerge != null && toMerge.HasErrors()) { // Flipping Union does not appear to work foreach (string wtf in toMerge.FetchErrors()) { _errorList.Add(wtf); } toMerge.ClearErrors(); } }
/// <summary> /// Pushes the system model to data list. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dlID">The dl ID.</param> /// <param name="model">The model.</param> /// <param name="errors">The errors.</param> /// <returns></returns> public Guid PushSystemModelToDataList <T>(Guid dlID, T model, out ErrorResultTO errors) { // Serialize the model first ;) var jsonModel = ConvertModelToJson(model); ErrorResultTO allErrors = new ErrorResultTO(); // Create a new DL if need be Guid pushID = dlID; if (pushID == GlobalConstants.NullDataListID) { IBinaryDataList bdl = Dev2BinaryDataListFactory.CreateDataList(); pushID = PushBinaryDataList(bdl.UID, bdl, out errors); allErrors.MergeErrors(errors); errors.ClearErrors(); } UpsertSystemTag(pushID, enSystemTag.SystemModel, jsonModel.ToString(), out errors); allErrors.MergeErrors(errors); errors = allErrors; return(pushID); }
/// <summary> /// Invokes the specified service as per the dataObject against theHost /// </summary> /// <param name="dataObject">The data object.</param> /// <param name="errors">The errors.</param> /// <returns></returns> /// <exception cref="System.Exception">Can only execute workflows from web browser</exception> public Guid Invoke(IDSFDataObject dataObject, out ErrorResultTO errors) { var result = GlobalConstants.NullDataListID; var time = new Stopwatch(); time.Start(); errors = new ErrorResultTO(); int update = 0; // BUG 9706 - 2013.06.22 - TWR : added pre debug dispatch if(dataObject.Environment.HasErrors()) { errors.AddError(dataObject.Environment.FetchErrors()); DispatchDebugErrors(errors, dataObject, StateType.Before); } errors.ClearErrors(); try { var serviceId = dataObject.ResourceID; // we need to get better at getting this ;) var serviceName = dataObject.ServiceName; if(serviceId == Guid.Empty && string.IsNullOrEmpty(serviceName)) { errors.AddError(Resources.DynamicServiceError_ServiceNotSpecified); } else { try { var sl = new ServiceLocator(); Dev2Logger.Log.Debug("Finding service"); var theService = serviceId == Guid.Empty ? sl.FindService(serviceName, _workspace.ID) : sl.FindService(serviceId, _workspace.ID); if(theService == null) { errors.AddError("Service [ " + serviceName + " ] not found."); } else if(theService.Actions.Count <= 1) { #region Execute ESB container var theStart = theService.Actions.FirstOrDefault(); if(theStart != null && theStart.ActionType != Common.Interfaces.Core.DynamicServices.enActionType.InvokeManagementDynamicService && theStart.ActionType != Common.Interfaces.Core.DynamicServices.enActionType.Workflow && dataObject.IsFromWebServer) { throw new Exception("Can only execute workflows from web browser"); } Dev2Logger.Log.Debug("Mapping Action Dependencies"); MapServiceActionDependencies(theStart, sl); // Invoke based upon type ;) if(theStart != null) { theStart.DataListSpecification = theService.DataListSpecification; Dev2Logger.Log.Debug("Getting container"); var container = GenerateContainer(theStart, dataObject, _workspace); ErrorResultTO invokeErrors; result = container.Execute(out invokeErrors, update); errors.MergeErrors(invokeErrors); } #endregion } else { errors.AddError("Malformed Service [ " + serviceId + " ] it contains multiple actions"); } } catch(Exception e) { errors.AddError(e.Message); } finally { if (dataObject.Environment.HasErrors()) { var errorString = dataObject.Environment.FetchErrors(); var executionErrors = ErrorResultTO.MakeErrorResultFromDataListString(errorString); errors.MergeErrors(executionErrors); } dataObject.Environment.AddError(errors.MakeDataListReady()); if(errors.HasErrors()) { Dev2Logger.Log.Error(errors.MakeDisplayReady()); } } } } finally { time.Stop(); ServerStats.IncrementTotalRequests(); ServerStats.IncrementTotalTime(time.ElapsedMilliseconds); // BUG 9706 - 2013.06.22 - TWR : added DispatchDebugErrors(errors, dataObject, StateType.End); } return result; }