Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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));
        }
Beispiel #4
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        public DateInstance GetDateTime(int index)
        {
            var result = m_resultTable.GetDateTime(index);

            return(JurassicHelper.ToDateInstance(this.Engine, result));
        }