public static ScItem ParseSource(JObject item, string db, CancellationToken cancelToken) { ScItem newItem; try { var source = ParseItemSource(item, db); List <IField> fields = ScFieldsParser.ParseFieldsData(item, cancelToken); var fieldsByName = new Dictionary <string, IField>(fields.Count); foreach (IField singleField in fields) { cancelToken.ThrowIfCancellationRequested(); string lowercaseName = singleField.Name.ToLowerInvariant(); fieldsByName[lowercaseName] = singleField; } newItem = new ScItem(source, fieldsByName); } catch (Exception e) { OperationCanceledException cancel = e as OperationCanceledException; if (cancel != null) { throw cancel; } throw new ParserException(TaskFlowErrorMessages.PARSER_EXCEPTION_MESSAGE + item.ToString(), e); } return(newItem); }
public static ScItemsResponse Parse(string responseString, CancellationToken cancelToken) { if (string.IsNullOrEmpty(responseString)) { throw new ArgumentException("response cannot null or empty"); } JObject response = JObject.Parse(responseString); int statusCode = ScItemsParser.ParseOrFail <int>(response, "$.statusCode"); bool isSuccessfulCode = (200 <= statusCode) && (statusCode <= 299); if (!isSuccessfulCode) { var error = new WebApiJsonStatusMessage(statusCode, ParseOrFail <string>(response, "$.error.message")); throw new WebApiJsonErrorException(error); } int totalCount = ParseOrFail <int>(response, "$.result.totalCount"); int resultCount = ParseOrFail <int>(response, "$.result.resultCount"); var responseItems = response.SelectToken("$.result.items"); var items = new List <ISitecoreItem>(); foreach (JObject item in responseItems) { cancelToken.ThrowIfCancellationRequested(); var source = ParseItemSource(item); var displayName = (string)item.GetValue("DisplayName"); var hasChildren = (bool)item.GetValue("HasChildren"); var id = (string)item.GetValue("ID"); var longId = (string)item.GetValue("LongID"); var path = (string)item.GetValue("Path"); var template = (string)item.GetValue("Template"); JObject fieldsJSON = (JObject)item.GetValue("Fields"); List <IField> fields = ScFieldsParser.ParseFieldsData(fieldsJSON, cancelToken); var fieldsByName = new Dictionary <string, IField>(fields.Count); foreach (IField singleField in fields) { cancelToken.ThrowIfCancellationRequested(); string lowercaseName = singleField.Name.ToLowerInvariant(); fieldsByName[lowercaseName] = singleField; } ScItem newItem = new ScItem(source, displayName, hasChildren, id, longId, path, template, fieldsByName); items.Add(newItem); } return(new ScItemsResponse(totalCount, resultCount, items)); }
public static ScItemsResponse Parse(string responseString, string db, int responseCode, CancellationToken cancelToken) { if (string.IsNullOrEmpty(responseString)) { return(new ScItemsResponse(null, responseCode)); } var response = JToken.Parse(responseString); var items = new List <ISitecoreItem>(); //FIXME: @igk to manny result variants, do we still need universal parser? JToken results = null; try { results = response.Value <JToken>("Results"); } catch (Exception) { } if (results != null) { response = results; } if (response is JArray) { foreach (JObject item in response) { cancelToken.ThrowIfCancellationRequested(); ScItem newItem = ScItemsParser.ParseSource(item, db, cancelToken); items.Add(newItem); } } else if (response is JObject) { ScItem newItem = ScItemsParser.ParseSource(response as JObject, db, cancelToken); items.Add(newItem); } return(new ScItemsResponse(items, responseCode)); }