コード例 #1
0
        public void CanParseNestedObjectWithInheritance()
        {
            const string input =
                "myType MyObject : InheritedObject\n" +
                "{\n" +
                "    myNestedType MyNestedObject : InheritedObject\n" +
                "    {\n" +
                "        include paths = \"./\"\n" +
                "    }\n" +
                "}";

            ObjectElement obj = DocumentParser.NamedObject.Parse(input);

            Assert.NotNull(obj);
            Assert.Single(obj.Children);

            ConfigElement element = obj.Children.FirstOrDefault();

            Assert.NotNull(element);
            Assert.IsType <ObjectElement>(element);

            var nestedObj = (ObjectElement)element;

            Assert.Equal("myNestedType", nestedObj.Heading.Type);
            Assert.Equal("MyNestedObject", nestedObj.Heading.Name);
            Assert.Single(nestedObj.Children);
        }
コード例 #2
0
        public virtual ObjectElement GetRootSyncObject()
        {
            global::System.IntPtr cPtr = SharingClientPINVOKE.SharingManager_GetRootSyncObject(swigCPtr);
            ObjectElement         ret  = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true);

            return(ret);
        }
コード例 #3
0
        public void CanParseObjectWithSimpleCommands()
        {
            const string input =
                "myType MyObject : InheritedObject\n" +
                "{\n" +
                "    if (no-tests) exclude\n" +
                "    if (!test) skip\n" +
                "}";

            string[] expectedNames =
            {
                "exclude", "skip"
            };

            ObjectElement obj = DocumentParser.NamedObject.Parse(input);

            Assert.NotNull(obj);
            Assert.Equal(2, obj.Children.Count());
            for (int i = 0; i < 2; i++)
            {
                var cmd = obj.Children.ElementAt(i) as CommandElement;
                Assert.NotNull(cmd);
                Assert.Equal(expectedNames[i], cmd.CommandName);
            }
        }
コード例 #4
0
        public virtual ObjectElement CreateObjectElement(XString name, User owner)
        {
            global::System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateObjectElement__SWIG_0(swigCPtr, XString.getCPtr(name), User.getCPtr(owner));
            ObjectElement         ret  = (cPtr == global::System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true);

            return(ret);
        }
コード例 #5
0
        public void Add(ObjectElement obj, IEnumerable <ColumnElement> columns)
        {
            var className    = SafeName(string.IsNullOrEmpty(obj.ClassName) ? obj.Name : obj.ClassName);
            var propertyName = SafeName(string.IsNullOrEmpty(obj.PropertyName) ? obj.Name : obj.PropertyName);

            if (IsPluralize)
            {
                className    = Pluralization.Singularize(className);
                propertyName = Pluralization.Pluralize(propertyName);
            }
            var objectGenerator = new ClassGenerator(obj)
            {
                ClassName    = className,
                PropertyName = propertyName
            };

            foreach (var column in columns)
            {
                var name = SafeName(string.IsNullOrEmpty(column.PropertyName) ? column.Name : column.PropertyName);
                if (objectGenerator.ClassName == name)
                {
                    name += CharIndex;
                }
                var memberGenerator = new MemberGenerator(column, name);
                objectGenerator.Members.Add(column.Name, memberGenerator);
            }
            Objects.Add(obj.Key, objectGenerator);
        }
コード例 #6
0
        public virtual ObjectElement CreateObjectElement(XString name, XString objectType)
        {
            System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_CreateObjectElement__SWIG_1(swigCPtr, XString.getCPtr(name), XString.getCPtr(objectType));
            ObjectElement ret  = (cPtr == System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true);

            return(ret);
        }
コード例 #7
0
        /// <summary>
        /// Adds a new entry into the array.
        /// </summary>
        /// <param name="newSyncObject">New object to add.</param>
        /// <param name="owner">Owner the object. Set to null if the object has no owner.</param>
        /// <returns>Object that was added, with its networking elements setup.</returns>
        public T AddObject(T newSyncObject, User owner = null)
        {
            string id = null;

            // Create our object element for our target
            id = System.Guid.NewGuid().ToString();
            string        dataModelName   = SyncSettings.Instance.GetDataModelName(newSyncObject.GetType());
            ObjectElement existingElement = this.Element.CreateObjectElement(new XString(id), dataModelName, owner);

            // Create a new object and assign the element
            newSyncObject.Element   = existingElement;
            newSyncObject.FieldName = id;
            newSyncObject.Owner     = owner;

            // Register the child with the object
            AddChild(newSyncObject);

            // Update internal map
            this.dataArray[id] = newSyncObject;

            // Initialize it so it can be used immediately.
            newSyncObject.InitializeLocal(Element);

            // Notify listeners that an object was added.
            if (ObjectAdded != null)
            {
                ObjectAdded(newSyncObject);
            }

            return(newSyncObject);
        }
コード例 #8
0
        public static ObjectElement Cast(Element element)
        {
            System.IntPtr cPtr = SharingClientPINVOKE.ObjectElement_Cast(Element.getCPtr(element));
            ObjectElement ret  = (cPtr == System.IntPtr.Zero) ? null : new ObjectElement(cPtr, true);

            return(ret);
        }
コード例 #9
0
 protected DuplicateObjectNameException(string objectType, ObjectElement newElement, ObjectElement existingElement)
     : base(string.Format("{0} object with name '{1}' has already been defined:\n" +
                          "Existing object:\n{2}\n" +
                          "Duplicate object:\n{3}",
                          objectType, newElement.Heading.Name, existingElement, newElement))
 {
 }
コード例 #10
0
 public void ParseElements()
 {
     foreach (ConfigElement element in configDoc.Children)
     {
         if (element is ObjectElement obj)
         {
             if (obj.Heading.Type.Equals(SectionType.SOLUTION, StringComparison.OrdinalIgnoreCase))
             {
                 SolutionElement = obj;
             }
             else if (obj.Heading.Type.Equals(SectionType.MODULE, StringComparison.OrdinalIgnoreCase))
             {
                 moduleElements.Add(obj);
             }
             else if (obj.Heading.Type.Equals(SectionType.TEMPLATE, StringComparison.OrdinalIgnoreCase))
             {
                 templateElements.Add(obj);
             }
             else
             {
                 throw new InvalidObjectType(obj,
                                             SectionType.SOLUTION, SectionType.MODULE, SectionType.TEMPLATE);
             }
         }
     }
 }
コード例 #11
0
        public void CanParseNestedChildrenWithInheritance()
        {
            const string input =
                "myType MyObject : InheritedObject\n" +
                "{\n" +
                "    myNestedType My.NestedObject1 : InheritedObject\n" +
                "    {\n" +
                "    }\n" +
                "    myNestedType My.NestedObject2 : InheritedObject\n" +
                "    {\n" +
                "    }\n" +
                "}";

            ObjectElement root = DocumentParser.NamedObject.Parse(input);

            Assert.NotNull(root);
            Assert.Equal(2, root.Children.Count());

            for (int i = 1; i <= 2; i++)
            {
                string        expectedName = $"My.NestedObject{i}";
                ConfigElement element      = root.Children.ElementAtOrDefault(i - 1);
                Assert.NotNull(element);
                Assert.IsType <ObjectElement>(element);

                var obj = (ObjectElement)element;
                Assert.Equal("myNestedType", obj.Heading.Type);
                Assert.Equal(expectedName, obj.Heading.Name);
                Assert.Equal("InheritedObject", obj.Heading.InheritedObjectName);
            }
        }
コード例 #12
0
        public Result Read(ObjectElement moduleElement)
        {
            Log.Heading("Reading module element: {0}", moduleElement);

            Result result;

            using (new CompositeDisposable(
                       new Log.ScopedIndent(),
                       new Log.ScopedTimer(Log.Level.Debug, "Read Module", moduleElement)))
            {
                string moduleName   = moduleElement.Heading.Name;
                string templateName = moduleElement.Heading.InheritedObjectName;

                excludedProjects = new HashSet <string>();
                idLookup         = new Dictionary <string, Project.Identifier>();

                if (!string.IsNullOrEmpty(templateName) && !templates.ContainsKey(templateName))
                {
                    throw new UndefinedTemplateException(templateName);
                }

                Template template = templateReader.Read(moduleElement);

                using (new ExpandableVars.ScopedVariable(ExpandableVars.Instance, ExpandableVars.VAR_MODULE_NAME,
                                                         moduleName))
                {
                    Dictionary <Configuration, ModuleConfiguration> moduleConfigs =
                        CreateModuleConfigs(template, moduleName);

                    result = new Result(new Module(solution, moduleName, moduleConfigs, idLookup), excludedProjects);
                }
            }

            return(result);
        }
コード例 #13
0
        public SolutionReader(ObjectElement solutionElement, string solutionConfigDir, bool loadIncludes)
        {
            Log.Heading("Reading solution element: {0}", solutionElement);
            using (new Log.ScopedIndent())
            {
                if (ExpandableVars.Instance == null)
                {
                    throw new InvalidOperationException("ExpandableVars are null");
                }
                ExpandableVars.Instance.SetExpandableVariable(ExpandableVars.VAR_SOLUTION_NAME,
                                                              solutionElement.Heading.Name);

                ExpandableVars.Instance.SetExpandableVariable(ExpandableVars.VAR_CONFIG_DIR, solutionConfigDir);

                settingsReader = new SolutionSettingsReader(ExpandableVars.Instance.Variables);
                Settings settings = settingsReader.Read(solutionElement);

                Solution = new Solution(solutionElement.Heading.Name, settings, solutionConfigDir,
                                        GetConfigurationGroups(settings), new FileUtil.ResultCache());

                ExpandableVars.Instance.SetExpandableVariable(ExpandableVars.VAR_SOLUTION_PATH,
                                                              Path.Combine(Solution.OutputDir, solutionElement.Heading.Name + ".sln"));

                ObjectElement settingsElement = solutionElement.Children
                                                .OfType <ObjectElement>()
                                                .FirstOrDefault(obj => obj.Heading.Type == SectionType.SETTINGS &&
                                                                obj.Heading.Name == DEFAULT_TEMPLATE_SETTINGS);

                if (settingsElement == null)
                {
                    Log.Info(
                        "No settings named '{0}' found in solution element. " +
                        "Templates will use hard coded defaults instead.",
                        DEFAULT_TEMPLATE_SETTINGS);

                    TemplateDefaultSettings = settingsReader.GetDefaultSettings();
                }
                else
                {
                    Log.Info(
                        "Settings named '{0}' found in solution element. " +
                        "Templates will default to the settings read below.",
                        DEFAULT_TEMPLATE_SETTINGS);

                    using (new Log.ScopedIndent())
                    {
                        TemplateDefaultSettings =
                            new ProjectSettingsReader(ExpandableVars.Instance.Variables)
                            .Read(settingsElement);
                    }
                }

                if (loadIncludes)
                {
                    LoadIncludes();
                }
            }
        }
コード例 #14
0
ファイル: Template.cs プロジェクト: hfarrow/SolutionGenerator
 public Template(string name, ObjectElement sourceElement,
                 IReadOnlyDictionary <string, ObjectElement> settingsSourceElements,
                 IReadOnlyDictionary <Configuration, TemplateConfiguration> configurations)
 {
     Name                   = name;
     SourceElement          = sourceElement;
     SettingsSourceElements = settingsSourceElements;
     Configurations         = configurations;
 }
コード例 #15
0
        public void CanParseEmptyObjectWithInheritance(string input)
        {
            ObjectElement obj = DocumentParser.NamedObject.Parse(input);

            Assert.NotNull(obj);
            Assert.Equal("myType", obj.Heading.Type);
            Assert.Equal("MyObject", obj.Heading.Name);
            Assert.Equal("MyOtherType", obj.Heading.InheritedObjectName);
        }
コード例 #16
0
        private void CleanupNetworkObjects()
        {
            if (networkMessageLoop != null)
            {
                networkMessageLoop.Dispose();
                networkMessageLoop = null;
            }

            if (this.rootObject != null)
            {
                this.rootObject.RemoveListener(this.syncListener);
                this.rootObject.Dispose();
                this.rootObject = null;
            }

            if (this.syncListener != null)
            {
                this.syncListener.Dispose();
                this.syncListener = null;
            }

            if (viewerConnection != null)
            {
                viewerConnection.RemoveListener((byte)MessageID.StatusOnly, ViewerListener);
                viewerConnection.Disconnect();
                this.viewerConnection.Dispose();
                this.viewerConnection = null;
            }

            if (serverConnection != null)
            {
                serverConnection.RemoveListener((byte)MessageID.StatusOnly, ServerListener);
                serverConnection.Disconnect();
                this.serverConnection.Dispose();
                this.serverConnection = null;
            }

            if (this.SessionManager != null)
            {
                this.SessionManager.RemoveListener(this.SessionManagerListener);
                this.SessionManager.Dispose();
                this.SessionManager = null;
            }

            if (this.SessionManagerListener != null)
            {
                this.SessionManagerListener.Dispose();
                this.SessionManagerListener = null;
            }

            if (SharingManager != null)
            {
                SharingManager.Dispose();
                SharingManager = null;
            }
        }
コード例 #17
0
            public XdRenderer(XdArtboard xdArtboard, XdAssetHolder xdAssetHolder, IXdObjectParser[] objectParsers, IXdGroupParser[] groupParsers, AkyuiXdImportTrigger[] triggers)
            {
                var resources = xdArtboard.Resources;

                _xdAssetHolder = xdAssetHolder;
                _objectParsers = objectParsers;
                _groupParsers  = groupParsers;
                Elements       = new List <IElement>();
                Assets         = new List <IAsset>();
                _obbHolder     = new ObbHolder();

                CreateRefObjectMap(resources.Resources);

                var xdResourcesArtboardsJson = resources.Artboards[xdArtboard.Manifest.Path.Replace("artboard-", "")];
                var rootObb = new Obb {
                    Size = new Vector2(xdResourcesArtboardsJson.Width, xdResourcesArtboardsJson.Height)
                };

                var rootArtboard           = xdArtboard.Artboard.Children[0];
                var xdObjectJsons          = rootArtboard.Artboard.Children;
                var convertedXdObjectJsons = ConvertRefObject(xdObjectJsons, triggers);
                var childrenObbs           = CalcPosition(convertedXdObjectJsons, rootObb);

                foreach (var childObb in childrenObbs)
                {
                    childObb.LocalLeftTopPosition -= new Vector2(xdResourcesArtboardsJson.X, xdResourcesArtboardsJson.Y);
                }
                var children = Render(convertedXdObjectJsons, rootObb);

                var rootComponents = new List <IComponent>();

                if (rootArtboard.Style?.Fill != null && rootArtboard.Style.Fill.Type == "solid")
                {
                    var color = rootArtboard.GetFillUnityColor();
                    rootComponents.Add(new ImageComponent(null, color, Vector2Int.one));
                }

                var root = new ObjectElement(
                    0,
                    xdArtboard.Name,
                    Vector2.zero,
                    rootObb.Size,
                    AnchorXType.Center,
                    AnchorYType.Middle,
                    0f,
                    true,
                    rootComponents.ToArray(),
                    children.Select(x => x.Eid).ToArray()
                    );

                Elements.Add(root);
            }
コード例 #18
0
        public static void AddObjectElement(string _uuid, string _alias, Sprite _icon)
        {
            if (objectElements.ContainsKey(_uuid))
            {
                return;
            }

            ObjectElement obj = new ObjectElement();

            obj.uuid              = _uuid;
            obj.alias             = _alias;
            obj.icon              = _icon;
            objectElements[_uuid] = obj;
        }
コード例 #19
0
 private void CreateSyncListener(ObjectElement element)
 {
     // Create a listener for this
     syncListener = new ObjectElementAdapter();
     syncListener.ElementAddedEvent   += OnElementAdded;
     syncListener.ElementDeletedEvent += OnElementDeleted;
     syncListener.BoolChangedEvent    += OnBoolElementChanged;
     syncListener.IntChangedEvent     += OnIntElementChanged;
     syncListener.LongChangedEvent    += OnLongElementChanged;
     syncListener.FloatChangedEvent   += OnFloatElementChanged;
     syncListener.DoubleChangedEvent  += OnDoubleElementChanged;
     syncListener.StringChangedEvent  += OnStringElementChanged;
     element.AddListener(syncListener);
 }
コード例 #20
0
        /// <summary>
        /// Remove a child primitive that belongs to this object.
        /// </summary>
        /// <param name="data">Sync Primitive Data</param>
        protected void RemoveChild(SyncPrimitive data)
        {
            // Manually remove from maps
            if (primitives.Remove(data) && data.HasNetworkElement)
            {
                primitiveMap.Remove(data.NetworkElement.GetGUID());

                // Object has been removed internally, notify network
                ObjectElement parentElement = ObjectElement.Cast(data.NetworkElement.GetParent());
                if (parentElement != null)
                {
                    parentElement.RemoveElement(data.NetworkElement);
                }
            }
        }
コード例 #21
0
        public void CanParseObjectWhereNameStartsWithPropertyAction()
        {
            // "settings" should not be interpreted as the start of a property.
            const string input =
                "settings MyObject : InheritedObject\n" +
                "{\n" +
                "    settings MyNestedObject : InheritedObject\n" +
                "    {\n" +
                "    }\n" +
                "}";

            ObjectElement root = DocumentParser.NamedObject.Parse(input);

            Assert.NotNull(root);
        }
コード例 #22
0
        protected override void OnElementAdded(Element element)
        {
            if (element.GetElementType() == ElementType.ObjectType)
            {
                // Add the new object and listen for when the initialization has fully completed since it can take time.
                T newObject = AddObject(ObjectElement.Cast(element));
                newObject.InitializationComplete += OnInitializationComplete;
            }
            else
            {
                Debug.LogError("Error: Adding unknown element to SyncArray<T>");
            }

            base.OnElementAdded(element);
        }
コード例 #23
0
        /// <summary>
        /// Adds a new entry into the array.
        /// </summary>
        /// <param name="existingElement">Element from which the object should be created.</param>
        /// <returns></returns>
        private T AddObject(ObjectElement existingElement)
        {
            string id = existingElement.GetName();

            // Create a new object and assign the element
            T newObject = CreateObject(existingElement);

            // Register the child with the object
            AddChild(newObject);

            // Update internal map
            dataArray[id] = newObject;

            return(newObject);
        }
コード例 #24
0
        /// <summary>
        /// Initializes a new object element.
        /// </summary>
        /// <param name="name">The name to consider.</param>
        /// <param name="id">The ID to consider.</param>
        /// <param name="classFullName">The class full name to consider.</param>
        /// <param name="items">The items to consider.</param>
        public static ObjectElement CreateObject(
            string name,
            string id,
            string classFullName,
            params object[] items)
        {
            ObjectElement element = new ObjectElement(name, id)
            {
                ClassFullName = classFullName,
            };

            element.WithItems(items);

            return(element);
        }
コード例 #25
0
        private Task <ModuleReader.Result> ReadModuleAsync(ObjectElement moduleElement)
        {
            var reader      = new ModuleReader(Solution, Templates, templateReader);
            var baseVars    = new Dictionary <string, string>(ExpandableVars.Instance.Variables);
            int indentLevel = Log.Instance.IndentLevel;

            return(Task.Run(() =>
            {
                using (new Log.BufferedTaskOutput("RM-" + moduleElement.Heading.Name, indentLevel))
                {
                    ExpandableVars.Init(baseVars);
                    ModuleReader.Result moduleResult = reader.Read(moduleElement);
                    return moduleResult;
                }
            }));
        }
コード例 #26
0
        private string ParseObject(ElementBase element)
        {
            ObjectElement obj = (ObjectElement)element;

            string r = "{" + obj.Guid.ToString() + "}";

            r += "#" + obj.Version;
            r += "#";
            if (obj.Reserved != null)
            {
                r += obj.Reserved;
            }
            r += obj.Name;

            return(r);
        }
コード例 #27
0
ファイル: XToolsApp.cs プロジェクト: vsmithy/HoloToolkit
        /// <summary>
        /// Releases unmanaged and - optionally - managed resources.
        /// </summary>
        /// <param name="disposing"><c>True</c> to release both managed and unmanaged resources; <c>False</c> to release only unmanaged resources.</param>
        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    if (this.syncListener != null)
                    {
                        this.syncListener.Dispose();
                        this.syncListener = null;
                    }

                    if (this.viewerConnection != null)
                    {
                        this.viewerConnection.Dispose();
                        this.viewerConnection = null;
                    }

                    if (this.serverConnection != null)
                    {
                        this.serverConnection.Dispose();
                        this.serverConnection = null;
                    }

                    if (this.rootObject != null)
                    {
                        this.rootObject.Dispose();
                        this.rootObject = null;
                    }

                    if (this.SessionManager != null)
                    {
                        this.SessionManager.Dispose();
                        this.SessionManager = null;
                    }

                    if (this.Manager != null)
                    {
                        this.Manager.Dispose();
                        this.Manager = null;
                    }
                }

                this.disposed = true;
            }
        }
コード例 #28
0
ファイル: Form1.cs プロジェクト: BruiR/OOTPiSP
        public void DrawList()
        {
            InfoObjects_flowLayoutPanel.Controls.Clear();
            int i = 1;

            foreach (var ObjectElement in listOfObjects)
            {
                Label lbl = new Label();
                lbl.Visible = true;
                lbl.Text    = ("№" + i.ToString() + " " + ObjectElement.GetType().Name);
                lbl.Name    = ObjectElement.GetType().Name + "_Label";
                lbl.Font    = new Font("Microsoft Sans Serif", 14, FontStyle.Regular);
                lbl.Width   = 550;
                InfoObjects_flowLayoutPanel.Controls.Add(lbl);
                DrawFields(ObjectElement);
                i++;
            }
        }
コード例 #29
0
        /// <summary>
        /// Creates the object in the array, based on its underlying object element that came from the sync system.
        /// </summary>
        /// <param name="objectElement">Object element on which the data model object is based.</param>
        /// <returns>The created data model object of the appropriate type.</returns>
        protected virtual T CreateObject(ObjectElement objectElement)
        {
            Type objectType = SyncSettings.Instance.GetDataModelType(objectElement.GetObjectType()).AsType();

            if (!objectType.IsSubclassOf(arrayType) && objectType != arrayType)
            {
                throw new InvalidCastException(string.Format("Object of incorrect type added to SyncArray: Expected {0}, got {1} ", objectType, objectElement.GetObjectType().GetString()));
            }

            object createdObject = Activator.CreateInstance(objectType);

            T spawnedDataModel = (T)createdObject;

            spawnedDataModel.Element   = objectElement;
            spawnedDataModel.FieldName = objectElement.GetName();

            // TODO: this should not query SharingStage, but instead query the underlying session layer
            spawnedDataModel.Owner = SharingStage.Instance.SessionUsersTracker.GetUserById(objectElement.GetOwnerID());

            return(spawnedDataModel);
        }
コード例 #30
0
ファイル: MapXml.cs プロジェクト: whieet/Demo
        public List <ObjectElement> GetObjects()
        {
            var xmlObjectGroup           = xrootElement.Elements("objectgroup");
            List <ObjectElement> objects = new List <ObjectElement>();

            foreach (var objectGroup in xmlObjectGroup)
            {
                foreach (var objectElement in objectGroup.Elements("object"))
                {
                    ObjectElement objectsElement = new ObjectElement();
                    objectsElement.id     = (int)objectElement.Attribute("id");
                    objectsElement.xpos   = (int)objectElement.Attribute("x");
                    objectsElement.ypos   = (int)objectElement.Attribute("y");
                    objectsElement.width  = (int)objectElement.Attribute("width");
                    objectsElement.height = (int)objectElement.Attribute("height");
                    objects.Add(objectsElement);
                }
            }

            return(objects);
        }
コード例 #31
0
		/// <summary>
		/// Constructor
		/// Creates a MappingModelHasObjectElements link in the same Partition as the given MappingModel
		/// </summary>
		/// <param name="source">MappingModel to use as the source of the relationship.</param>
		/// <param name="target">ObjectElement to use as the target of the relationship.</param>
		public MappingModelHasObjectElements(MappingModel source, ObjectElement target)
			: base((source != null ? source.Partition : null), new DslModeling::RoleAssignment[]{new DslModeling::RoleAssignment(MappingModelHasObjectElements.MappingModelDomainRoleId, source), new DslModeling::RoleAssignment(MappingModelHasObjectElements.ElementDomainRoleId, target)}, null)
		{
		}
コード例 #32
0
		public ObjectInspectorData (object target)
		{
			this.target = target;
			this.targetType = target != null ? target.GetType () : typeof(object);

			IsList = (target is IList) || (target is IDictionary);

			if (IsList) {
				Properties = new ObjectProperty[0];
				Hierarchy = new Type[0];
			} else {

				var props = targetType.GetProperties ().
					Where (x =>
						x.GetIndexParameters ().Length == 0 &&
						x.GetMethod != null &&
						!x.GetMethod.IsStatic).
					Select (GetObjectPropertyFromProperty);
				var fields = targetType.GetFields ().
					Where (x =>
						!x.IsStatic).
					Select (GetObjectPropertyFromField);

				Properties = fields.Concat (props).OrderBy (x => x.Name).ToArray ();

				var h = new List<Type> ();
				h.Add (this.targetType);
				while (h [h.Count - 1] != typeof(object)) {
					var bt = h [h.Count - 1].BaseType;
					if (bt != null) {
						h.Add (bt);
					} else {
						break;
					}
				}
				h.Remove (this.targetType);
				h.Remove (typeof(object));
				h.Remove (typeof(ValueType));
				Hierarchy = h.ToArray ();
			}

			var elementMax = 1000;

			if (this.target is IDictionary) {
				var res = new List<ObjectElement> ();
				IDictionaryEnumerator de = ((IDictionary)this.target).GetEnumerator ();
				while (res.Count < elementMax && de.MoveNext ()) {
					res.Add (new ObjectElement {
						Title = string.Format ("{0}: {1}", de.Key, de.Value),
						Value = de.Value,
					});
				}
				Elements = res.ToArray ();
			} else {

				var ie = this.target as IEnumerable;
				if (ie != null && !(this.target is string)) {
					try {
						Elements = ie.Cast<object> ().Take (elementMax).Select ((x, i) => new ObjectElement {
							Title = string.Format ("{0}: {1}", i, x),
							Value = x,
						}).ToArray ();					
					} catch (Exception ex) {
						Log (ex);
					}
				}
			}
			if (Elements == null) {
				Elements = new ObjectElement[0];
			}

			Title = this.targetType.Name;

			if (target == null) {
				ToStringValue = "null";
				HashDisplayString = "#0";
			}
			else {
				try {
					ToStringValue = target.ToString ();
				} catch (Exception ex) {
					ToStringValue = ex.ToString ();
					Log (ex);
				}
				try {
					HashDisplayString = "#" + target.GetHashCode ();
				} catch (Exception ex) {
					HashDisplayString = ex.ToString ();
					Log (ex);
				}
			}
		}
コード例 #33
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(ObjectElement obj) {
   return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
 }
コード例 #34
0
		public static void SetMappingModel(ObjectElement element, MappingModel newMappingModel)
		{
			DslModeling::DomainRoleInfo.SetLinkedElement(element, ElementDomainRoleId, newMappingModel);
		}
コード例 #35
0
		public static MappingModel GetMappingModel(ObjectElement element)
		{
			return DslModeling::DomainRoleInfo.GetLinkedElement(element, ElementDomainRoleId) as MappingModel;
		}