/// <summary> /// Turns the object into an ObjectInstance /// </summary> public static ObjectInstance ToObjectInstance(this object o, ScriptEngine engine) { var result = engine.Object.Construct(); if (o.GetType() == typeof(ObjectInstance)) { return(o as ObjectInstance); //shouldn't have to... but just in case } if (o.GetType() == typeof(NameValueCollection) || o.GetType().IsSubclassOf(typeof(NameValueCollection))) { var nv = (NameValueCollection)o; nv.Cast <string>().Select(key => new KeyValuePair <string, object>(key, nv[key])).ToList().ForEach(i => result.SetPropertyValue(i.Key, i.Value, false)); } else { var props = o.GetType().GetProperties(); foreach (var item in props) { //TODO: Be more smart about the types? (should only be primitives, but could be something else) var value = item.GetValue(o, null); if (value is DateTime) { value = JurassicHelper.ToDateInstance(engine, (DateTime)value); } result.SetPropertyValue(item.Name, value, false); } } return(result); }
public object Bundle(string bundleDefinitionXml, string fileName, object update, object minify) { if (String.IsNullOrEmpty(fileName)) { fileName = "bundle.txt"; } var bUpdate = JurassicHelper.GetTypedArgumentValue(Engine, update, true); var bMinify = JurassicHelper.GetTypedArgumentValue(Engine, minify, false); var doc = new XmlDocument(); doc.LoadXml(bundleDefinitionXml); var bundleText = GenerateBundleFromBundleDefinition(fileName, doc, bUpdate, bMinify); var bytes = new Base64EncodedByteArrayInstance(Engine.Object.InstancePrototype, Encoding.UTF8.GetBytes(bundleText)) { FileName = fileName, MimeType = StringHelper.GetMimeTypeFromFileName(fileName), }; var result = Engine.Object.Construct(); result.SetPropertyValue("lastModified", JurassicHelper.ToDateInstance(Engine, FileModifiedDates.Values.Max(v => v.Item1)), false); result.SetPropertyValue("data", bytes, false); return(result); }
public DateInstance GetServerNow(SPWebInstance web) { if (web == null) { throw new JavaScriptException(this.Engine, "Error", "A web must be specified as the first parameter."); } var result = SPUtility.GetServerNow(web.Web); return(JurassicHelper.ToDateInstance(this.Engine, result)); }
public static ObjectInstance RecordToObjectInstance(this IDataReader rdr, ScriptEngine engine) { ObjectInstance e = engine.Object.Construct(); for (int i = 0; i < rdr.FieldCount; i++) { object propertyValue; var value = rdr[i]; if (DBNull.Value.Equals(value)) { propertyValue = Null.Value; } else if (value is DateTime) { propertyValue = JurassicHelper.ToDateInstance(engine, (DateTime)value); } else if (value is Byte) { propertyValue = Convert.ToInt32((Byte)value); } else if (value is Int16) { propertyValue = Convert.ToInt32((Int16)value); } else if (value is Int64) { propertyValue = Convert.ToDouble((Int64)value); } else if (value is decimal) { propertyValue = Convert.ToDouble((decimal)value); } else if (value is Guid) { propertyValue = ((Guid)value).ToString(); } else if (value is Byte[]) { propertyValue = new Base64EncodedByteArrayInstance(engine.Object.InstancePrototype, (Byte[])value); } else if (value.GetType().FullName == "Microsoft.SqlServer.Types.SqlHierarchyId") { propertyValue = value.ToString(); } else { propertyValue = value; } e.SetPropertyValue(rdr.GetName(i), propertyValue, false); } return(e); }
public object GetValue(int row, int column) { var value = m_excelWorksheet.GetValue(row, column); if (value is int || value is string || value is double || value is bool) { return(value); } if (value is DateTime) { return(JurassicHelper.ToDateInstance(this.Engine, (DateTime)value)); } return(m_excelWorksheet.GetValue <string>(row, column)); }
public static ObjectInstance GetFieldValuesAsObject(ScriptEngine engine, SPListItem listItem) { var result = engine.Object.Construct(); var fields = listItem.Fields; foreach (var field in fields.OfType <SPField>()) { switch (field.Type) { case SPFieldType.Integer: { int value; if (listItem.TryGetSPFieldValue(field.Id, out value)) { result.SetPropertyValue(field.InternalName, value, false); } } break; case SPFieldType.Boolean: { bool value; if (listItem.TryGetSPFieldValue(field.Id, out value)) { result.SetPropertyValue(field.InternalName, value, false); } } break; case SPFieldType.Number: { double value; if (listItem.TryGetSPFieldValue(field.Id, out value)) { result.SetPropertyValue(field.InternalName, value, false); } } break; case SPFieldType.DateTime: { DateTime value; if (listItem.TryGetSPFieldValue(field.Id, out value)) { result.SetPropertyValue(field.InternalName, JurassicHelper.ToDateInstance(engine, new DateTime(value.Ticks, DateTimeKind.Local)), false); } } break; case SPFieldType.URL: { string urlFieldValue; if (listItem.TryGetSPFieldValue(field.Id, out urlFieldValue)) { var urlValue = new SPFieldUrlValue(urlFieldValue); var item = engine.Object.Construct(); item.SetPropertyValue("description", urlValue.Description, false); item.SetPropertyValue("url", urlValue.Url, false); result.SetPropertyValue(field.InternalName, item, false); } } break; case SPFieldType.User: { string userToken; if (listItem.TryGetSPFieldValue(field.Id, out userToken)) { var fieldUserValue = new SPFieldUserValue(listItem.ParentList.ParentWeb, userToken); var userInstance = new SPUserInstance(engine, fieldUserValue.User); result.SetPropertyValue(field.InternalName, userInstance, false); } } break; case SPFieldType.Lookup: { var fieldType = field as SPFieldLookup; if (fieldType == null) { continue; } if (fieldType.AllowMultipleValues) { object fv; if (!listItem.TryGetSPFieldValue(field.Id, out fv)) { continue; } var fieldValue = fv as SPFieldLookupValueCollection; var array = engine.Array.Construct(); if (fieldValue != null) { foreach (var lookupValue in fieldValue) { var item = engine.Object.Construct(); item.SetPropertyValue("lookupId", lookupValue.LookupId, false); item.SetPropertyValue("lookupValue", lookupValue.LookupValue, false); ArrayInstance.Push(array, item); } } result.SetPropertyValue(field.InternalName, array, false); } else { object fieldValue; if (!listItem.TryGetSPFieldValue(field.Id, out fieldValue)) { continue; } if (fieldValue is SPFieldUrlValue) { var urlValue = fieldValue as SPFieldUrlValue; var item = engine.Object.Construct(); item.SetPropertyValue("description", urlValue.Description, false); item.SetPropertyValue("url", urlValue.Url, false); result.SetPropertyValue(field.InternalName, item, false); } else if (fieldValue is DateTime) { var value = (DateTime)fieldValue; result.SetPropertyValue(field.InternalName, JurassicHelper.ToDateInstance(engine, new DateTime(value.Ticks, DateTimeKind.Local)), false); } else if (fieldValue is SPFieldUserValue) { var fieldUserValue = (SPFieldUserValue)fieldValue; var userInstance = new SPUserInstance(engine, fieldUserValue.User); result.SetPropertyValue(field.InternalName, userInstance, false); } else if (fieldValue is Guid) { var guidValue = (Guid)fieldValue; var guidInstance = new GuidInstance(engine.Object.InstancePrototype, guidValue); result.SetPropertyValue(field.InternalName, guidInstance, false); } else if (fieldValue is string) { //Attempt to create a new SPFieldLookupValue from the string if (DigitRegex.IsMatch((string)fieldValue, 0)) { try { var lookupValue = new SPFieldLookupValue((string)fieldValue); var item = engine.Object.Construct(); item.SetPropertyValue("lookupId", lookupValue.LookupId, false); item.SetPropertyValue("lookupValue", lookupValue.LookupValue, false); result.SetPropertyValue(field.InternalName, item, false); } catch (ArgumentException) { result.SetPropertyValue(field.InternalName, fieldValue, false); } } else { result.SetPropertyValue(field.InternalName, fieldValue, false); } } else { result.SetPropertyValue(field.InternalName, fieldValue, false); } } } break; default: { object value; if (listItem.TryGetSPFieldValue(field.Id, out value)) { var stringValue = field.GetFieldValueAsText(value); if (result.HasProperty(field.InternalName) == false) { result.SetPropertyValue(field.InternalName, stringValue, false); } } } break; } } return(result); }
public ArrayInstance ConvertToJson(object hasHeader) { if (m_excelWorksheet.Dimension == null) { return(null); } var bHasHeader = !(hasHeader != Undefined.Value && hasHeader != null && TypeConverter.ToBoolean(hasHeader) == false); var result = this.Engine.Array.Construct(); var startPos = m_excelWorksheet.Dimension.Start.Row; var propertyNames = new List <string>(); if (bHasHeader) { for (var c = m_excelWorksheet.Dimension.Start.Column; c <= m_excelWorksheet.Dimension.End.Column; c++) { var columnTitle = m_excelWorksheet.Cells[startPos, c].GetValue <string>(); if (String.IsNullOrEmpty(columnTitle)) { propertyNames.Add("__" + c); } else { propertyNames.Add(columnTitle); } } startPos = startPos + 1; } else { for (var c = m_excelWorksheet.Dimension.Start.Column; c <= m_excelWorksheet.Dimension.End.Column; c++) { var iColumnNumber = c; var sCol = ""; do { sCol = ((char)('A' + ((iColumnNumber - 1) % 26))) + sCol; iColumnNumber = (iColumnNumber - ((iColumnNumber - 1) % 26)) / 26; } while (iColumnNumber > 0); propertyNames.Add(sCol); } } for (var rowPos = startPos; rowPos <= m_excelWorksheet.Dimension.End.Row; rowPos++) { var rowObject = this.Engine.Object.Construct(); for (var c = m_excelWorksheet.Dimension.Start.Column; c <= m_excelWorksheet.Dimension.End.Column; c++) { var cell = m_excelWorksheet.Cells[rowPos, c]; if (cell.Value is DateTime) { rowObject.SetPropertyValue(propertyNames[c - 1], JurassicHelper.ToDateInstance(this.Engine, (DateTime)cell.Value), false); } else { rowObject.SetPropertyValue(propertyNames[c - 1], cell.Value, false); } } ArrayInstance.Push(result, rowObject); } return(result); }
public DiffResultInstance DiffWithZip(object target) { byte[] zipBytes; if (target is Base64EncodedByteArrayInstance) { //Create the excel document instance from a byte array. var byteArray = target as Base64EncodedByteArrayInstance; zipBytes = byteArray.Data; } else { var targetUrl = TypeConverter.ToString(target); if (Uri.IsWellFormedUriString(targetUrl, UriKind.Relative)) { targetUrl = SPUtility.ConcatUrls(SPBaristaContext.Current.Web.Url, targetUrl); } SPFile file; if (SPHelper.TryGetSPFile(targetUrl, out file)) { zipBytes = file.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); } else { throw new JavaScriptException(Engine, "Error", "A file was not found in the specified location: " + targetUrl); } } var sourceFolderInfo = new List <DiffInfoInstance>(); var targetFolderInfo = new List <DiffInfoInstance>(); var itemsIterator = new ContentIterator(); itemsIterator.ProcessFilesInFolder(m_folder, true, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } sourceFolderInfo.Add(fileInfo); }, null); using (var ms = new MemoryStream(zipBytes)) { using (var zf = new ZipFile(ms)) { foreach (ZipEntry ze in zf) { if (ze.IsDirectory) { continue; } var fileInfo = new DiffInfoInstance(Engine) { Url = "/" + ze.Name, TimeLastModified = JurassicHelper.ToDateInstance(Engine, ze.DateTime) }; using (var zs = zf.GetInputStream(ze)) { using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(zs)); } } targetFolderInfo.Add(fileInfo); } } } var result = new DiffResultInstance(Engine); result.Process(sourceFolderInfo, targetFolderInfo); return(result); }
public DiffResultInstance Diff(SPFolderInstance targetFolder, object recursive) { if (targetFolder == null) { throw new JavaScriptException(Engine, "Error", "Target Folder must be specified."); } var bRecurse = true; if (recursive != Undefined.Value && recursive != Null.Value && recursive != null) { bRecurse = TypeConverter.ToBoolean(recursive); } var sourceFolderInfo = new List <DiffInfoInstance>(); var targetFolderInfo = new List <DiffInfoInstance>(); var itemsIterator = new ContentIterator(); itemsIterator.ProcessFilesInFolder(m_folder, bRecurse, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } sourceFolderInfo.Add(fileInfo); }, null); itemsIterator.ProcessFilesInFolder(targetFolder.Folder, bRecurse, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(targetFolder.Folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } targetFolderInfo.Add(fileInfo); }, null); var result = new DiffResultInstance(Engine); result.Process(sourceFolderInfo, targetFolderInfo); return(result); }
public static object GetListItemVersionObject(ScriptEngine engine, SPListItemVersion version, SPField field) { switch (field.Type) { case SPFieldType.Integer: { int value; if (version.TryGetSPFieldValue(field.InternalName, out value)) { return(value); } } break; case SPFieldType.Boolean: { bool value; if (version.TryGetSPFieldValue(field.InternalName, out value)) { return(value); } } break; case SPFieldType.Number: { double value; if (version.TryGetSPFieldValue(field.InternalName, out value)) { return(value); } } break; case SPFieldType.DateTime: { DateTime value; if (version.TryGetSPFieldValue(field.InternalName, out value)) { return(JurassicHelper.ToDateInstance(engine, new DateTime(value.Ticks, DateTimeKind.Local))); } } break; case SPFieldType.URL: { string urlFieldValue; if (version.TryGetSPFieldValue(field.InternalName, out urlFieldValue)) { var urlValue = new SPFieldUrlValue(urlFieldValue); var item = engine.Object.Construct(); item.SetPropertyValue("description", urlValue.Description, false); item.SetPropertyValue("url", urlValue.Url, false); return(item); } } break; case SPFieldType.User: { string userToken; if (version.TryGetSPFieldValue(field.InternalName, out userToken)) { var fieldUserValue = new SPFieldUserValue(version.ListItem.Web, userToken); var userInstance = new SPUserInstance(engine, fieldUserValue.User); return(userInstance); } } break; case SPFieldType.Lookup: { var fieldType = field as SPFieldLookup; if (fieldType == null) { return(null); } if (fieldType.AllowMultipleValues) { object fv; if (!version.TryGetSPFieldValue(field.InternalName, out fv)) { return(null); } var fieldValue = fv as SPFieldLookupValueCollection; var array = engine.Array.Construct(); if (fieldValue != null) { foreach (var lookupValue in fieldValue) { var item = engine.Object.Construct(); item.SetPropertyValue("lookupId", lookupValue.LookupId, false); item.SetPropertyValue("lookupValue", lookupValue.LookupValue, false); ArrayInstance.Push(array, item); } } return(array); } else { object fieldValue; if (!version.TryGetSPFieldValue(field.InternalName, out fieldValue)) { return(null); } var fieldUrlValue = fieldValue as SPFieldUrlValue; if (fieldUrlValue != null) { var urlValue = fieldUrlValue; var item = engine.Object.Construct(); item.SetPropertyValue("description", urlValue.Description, false); item.SetPropertyValue("url", urlValue.Url, false); return(item); } if (fieldValue is DateTime) { var value = (DateTime)fieldValue; return(JurassicHelper.ToDateInstance(engine, new DateTime(value.Ticks, DateTimeKind.Local))); } var userValue = fieldValue as SPFieldUserValue; if (userValue != null) { var fieldUserValue = userValue; var userInstance = new SPUserInstance(engine, fieldUserValue.User); return(userInstance); } if (fieldValue is Guid) { var guidValue = (Guid)fieldValue; var guidInstance = new GuidInstance(engine.Object.InstancePrototype, guidValue); return(guidInstance); } var s = fieldValue as string; if (s == null) { return(fieldValue); } //Attempt to create a new SPFieldLookupValue from the string if (!DigitRegex.IsMatch(s, 0)) { return(fieldValue); } try { var lookupValue = new SPFieldLookupValue(s); var item = engine.Object.Construct(); item.SetPropertyValue("lookupId", lookupValue.LookupId, false); item.SetPropertyValue("lookupValue", lookupValue.LookupValue, false); return(item); } catch (ArgumentException) { return(fieldValue); } } } default: { object value; if (version.TryGetSPFieldValue(field.InternalName, out value)) { var stringValue = field.GetFieldValueAsText(value); return(stringValue); } } break; } return(null); }
public DateInstance GetDateTime(int index) { var result = m_resultTable.GetDateTime(index); return(JurassicHelper.ToDateInstance(this.Engine, result)); }