public MachineParamsManager(Guid plowmachineId, Metadata.MetadataManager manager)
 {
     _plowMachineId = plowmachineId;
     _manager = manager;
     _connection = DBConnectionProvider.GetConnection();
     _connection.Open();
 }
Exemple #2
0
        /// <summary>
        /// Write the metadata of all the properties for the given typein the xmlWriter
        /// </summary>
        /// <param name="xmlWriter">xmlWriter in which metadata needs to be written</param>
        /// <param name="type">resource type whose property metadata needs to be written</param>
        /// <param name="associationsInThisNamespace">list of associations in the current namespace.</param>
        /// <param name="metadataManager">metadata manager instance</param>
        private static void WriteProperties(
            XmlWriter xmlWriter,
            ResourceType type,
            Dictionary<string, ResourceAssociationType> associationsInThisNamespace,
            MetadataManager metadataManager)
        {
            Debug.Assert(xmlWriter != null, "xmlWriter != null");
            Debug.Assert(type != null, "type != null");
            
            foreach (ResourceProperty resourceProperty in metadataManager.GetPropertiesDeclaredInThisType(type))
            {
                string elementName;

                // For primitive types, get the corresponding edm typename
                if (resourceProperty.TypeKind == ResourceTypeKind.Primitive)
                {
                    xmlWriter.WriteStartElement(XmlConstants.Property);
                    xmlWriter.WriteAttributeString(XmlConstants.Name, resourceProperty.Name);
                    xmlWriter.WriteAttributeString(XmlConstants.Type, resourceProperty.ResourceType.FullName);
                    WritePrimitivePropertyFacets(xmlWriter, resourceProperty);
                    if (!String.IsNullOrEmpty(resourceProperty.MimeType))
                    {
                        MetadataSerializer.WriteDataWebMetadata(xmlWriter, XmlConstants.DataWebMimeTypeAttributeName, resourceProperty.MimeType);
                    }

                    if (type.ResourceTypeKind == ResourceTypeKind.EntityType &&
                        type.ETagProperties.Contains(resourceProperty))
                    {
                        xmlWriter.WriteAttributeString(XmlConstants.ConcurrencyAttribute, XmlConstants.ConcurrencyFixedValue);
                    }
                    
                    if (type.HasEntityPropertyMappings)
                    {
                        var currentEpmInfos = type.OwnEpmInfo.Where(e => e.SourcePath.Split('/').First() == resourceProperty.Name);
                        WriteEpmProperties(xmlWriter, currentEpmInfos, true, false);
                    }
                }
                else if (resourceProperty.Kind == ResourcePropertyKind.ComplexType)
                {
                    xmlWriter.WriteStartElement(XmlConstants.Property);
                    xmlWriter.WriteAttributeString(XmlConstants.Name, resourceProperty.Name);
                    elementName = resourceProperty.ResourceType.FullName;
                    xmlWriter.WriteAttributeString(XmlConstants.Type, elementName);

                    // Edm doesn't support nullable complex type properties
                    xmlWriter.WriteAttributeString(XmlConstants.Nullable, XmlConstants.XmlFalseLiteral);
                    
                    if (type.HasEntityPropertyMappings)
                    {
                        var currentEpmInfos = type.OwnEpmInfo.Where(e => e.SourcePath.Split('/').First() == resourceProperty.Name);
                        WriteEpmProperties(xmlWriter, currentEpmInfos, currentEpmInfos.Any(ei => ei.SourcePath == resourceProperty.Name), true);
                    }
                }
                else
                {
                    Debug.Assert(
                        ResourceTypeKind.EntityType == resourceProperty.TypeKind,
                        "Unexpected property type kind");

                    xmlWriter.WriteStartElement(XmlConstants.NavigationProperty);
                    xmlWriter.WriteAttributeString(XmlConstants.Name, resourceProperty.Name);
                    elementName = resourceProperty.ResourceType.FullName;

                    string associationTypeLookupName = MetadataManager.GetAssociationTypeLookupName(type, resourceProperty);
                    ResourceAssociationType associationType;
                    if (!associationsInThisNamespace.TryGetValue(associationTypeLookupName, out associationType))
                    {
                        throw new InvalidOperationException(Strings.MetadataSerializer_NoResourceAssociationSetForNavigationProperty(resourceProperty.Name, type.FullName));
                    }

                    ResourceAssociationTypeEnd thisEnd = associationType.GetResourceAssociationTypeEnd(type, resourceProperty);
                    ResourceAssociationTypeEnd relatedEnd = associationType.GetRelatedResourceAssociationSetEnd(type, resourceProperty);
                    xmlWriter.WriteAttributeString(XmlConstants.Relationship, associationType.FullName);
                    xmlWriter.WriteAttributeString(XmlConstants.FromRole, thisEnd.Name);
                    xmlWriter.WriteAttributeString(XmlConstants.ToRole, relatedEnd.Name);
               }

                xmlWriter.WriteEndElement();
            }
        }
Exemple #3
0
        /// <summary>
        /// Write the metadata for the entityType in the xmlWriter
        /// </summary>
        /// <param name="xmlWriter">xmlWriter in which metadata needs to be written</param>
        /// <param name="entityType">entityType whose metadata needs to be written</param>
        /// <param name="associationsInThisNamespace">list of associations in the current namespace.</param>
        /// <param name="metadataManager">metadata manager instance</param>
        private static void WriteEntityType(
            XmlWriter xmlWriter,
            ResourceType entityType,
            Dictionary<string, ResourceAssociationType> associationsInThisNamespace,
            MetadataManager metadataManager)
        {
            Debug.Assert(xmlWriter != null, "XmlWriter cannot be null");
            Debug.Assert(entityType.ResourceTypeKind == ResourceTypeKind.EntityType, "Type must be entityType");

            xmlWriter.WriteStartElement(XmlConstants.EntityType);
            xmlWriter.WriteAttributeString(XmlConstants.Name, XmlConvert.EncodeName(entityType.Name));

            if (entityType.IsAbstract)
            {
                xmlWriter.WriteAttributeString(XmlConstants.Abstract, "true");
            }

            if (entityType.IsOpenType)
            {
                if (entityType.BaseType == null || entityType.BaseType.IsOpenType == false)
                {
                    WriteOpenTypeAttribute(xmlWriter);
                }
            }

            // Write the HasStream attribute only if this is an MLE and the base type isn't also an MLE (if it is,
            // it's sufficient that HasStream is written on the base type). 
            if (entityType.IsMediaLinkEntry && (entityType.BaseType == null || entityType.BaseType.IsMediaLinkEntry == false))
            {
                xmlWriter.WriteAttributeString(
                    XmlConstants.DataWebAccessHasStreamAttribute,
                    XmlConstants.DataWebMetadataNamespace,
                    XmlConstants.DataWebAccessDefaultStreamPropertyValue);
            }

            if (entityType.HasEntityPropertyMappings)
            {
                WriteEpmProperties(xmlWriter, entityType.InheritedEpmInfo, false, false);
            }

            if (entityType.BaseType != null)
            {
                xmlWriter.WriteAttributeString(XmlConstants.BaseType, XmlConvert.EncodeName(entityType.BaseType.FullName));
            }
            else
            {
                xmlWriter.WriteStartElement(XmlConstants.Key);
                foreach (ResourceProperty property in entityType.KeyProperties)
                {
                    xmlWriter.WriteStartElement(XmlConstants.PropertyRef);
                    xmlWriter.WriteAttributeString(XmlConstants.Name, property.Name);
                    xmlWriter.WriteEndElement();
                }

                xmlWriter.WriteEndElement();
            }

            WriteProperties(xmlWriter, entityType, associationsInThisNamespace, metadataManager);
            xmlWriter.WriteEndElement();
        }
Exemple #4
0
        /// <summary>Gets the metadata document for this provider.</summary>
        /// <param name="metadataEdmSchemaVersion">EDM schema version.</param>
        /// <param name="service">Data service instance.</param>
        internal void GenerateMetadata(MetadataEdmSchemaVersion metadataEdmSchemaVersion, IDataService service)
        {
            Debug.Assert(this.Writer != null, "this.Writer != null");
            Debug.Assert(this.Provider != null, "this.Provider != null");

            MetadataManager metadataManager = new MetadataManager(this.Provider, service);
            string dataServiceVersion = MetadataSerializer.GetVersionsForMetadata(metadataManager.ResourceTypes, ref metadataEdmSchemaVersion);
            MetadataSerializer.WriteTopLevelSchemaElements(this.Writer, dataServiceVersion);
            HashSet<ResourceType> typesInEntityContainerNamespace = null;

            // Write the schema Element for every namespace
            foreach (KeyValuePair<string, HashSet<ResourceType>> namespaceAlongWithTypes in metadataManager.NamespaceAlongWithTypes)
            {
                Debug.Assert(!string.IsNullOrEmpty(namespaceAlongWithTypes.Key), "!string.IsNullOrEmpty(namespaceAlongWithTypes.Key)");

                // If the types live in the same namespace as that of entity container and types that don't live in any namespace,
                // should be written out in the service namespace. If the service type also doesn't have a namespace, we will use
                // the service name as the namespace. See code below for that.
                if (namespaceAlongWithTypes.Key == metadataManager.GetContainerNamespace())
                {
                    typesInEntityContainerNamespace = namespaceAlongWithTypes.Value;
                }
                else
                {
                    Dictionary<string, ResourceAssociationType> associationsInThisNamespace = metadataManager.GetAssociationTypesForNamespace(namespaceAlongWithTypes.Key);
                    MetadataSerializer.WriteSchemaElement(this.Writer, namespaceAlongWithTypes.Key, metadataEdmSchemaVersion);
                    WriteTypes(this.Writer, namespaceAlongWithTypes.Value, associationsInThisNamespace, metadataManager);
                    WriteAssociationTypes(this.Writer, new HashSet<ResourceAssociationType>(associationsInThisNamespace.Values, EqualityComparer<ResourceAssociationType>.Default));
                    this.Writer.WriteEndElement();
                }
            }

            // Write the entity container definition. Also if there are types in the same namespace,
            // we need to write them out too.
            string typeNamespace = metadataManager.GetContainerNamespace();
            MetadataSerializer.WriteSchemaElement(this.Writer, typeNamespace, metadataEdmSchemaVersion);
            if (typesInEntityContainerNamespace != null)
            {
                Dictionary<string, ResourceAssociationType> associationsInThisNamespace = metadataManager.GetAssociationTypesForNamespace(typeNamespace);
                WriteTypes(this.Writer, typesInEntityContainerNamespace, associationsInThisNamespace, metadataManager);
                WriteAssociationTypes(this.Writer, new HashSet<ResourceAssociationType>(associationsInThisNamespace.Values, EqualityComparer<ResourceAssociationType>.Default));
            }

            this.WriteEntityContainer(this.Writer, XmlConvert.EncodeName(this.Provider.ContainerName), metadataManager.ResourceSets, metadataManager.ResourceAssociationSets);
            this.Writer.WriteEndElement();

            // These end elements balance the elements written out in WriteTopLevelSchemaElements
            this.Writer.WriteEndElement();
            this.Writer.WriteEndElement();
            this.Writer.Flush();
        }
Exemple #5
0
 public RyuJitNodeFactory(CompilerTypeSystemContext context, CompilationModuleGroup compilationModuleGroup, MetadataManager metadataManager, NameMangler nameMangler)
     : base(context, compilationModuleGroup, metadataManager, nameMangler, new LazyGenericsDisabledPolicy())
 {
 }
        private void Import()
        {
            if (txtImportFilePath.Text.Length == 0)
            {
                return;
            }

            if (!File.Exists(txtImportFilePath.Text))
            {
                MessageBox.Show(this, $"The file {txtImportFilePath.Text} does not exist!", "Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            btnCancel.Visible = true;

            lblProgress.Text = "Deserializing file...";
            SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs("Deserializing file..."));

            EntityCollection ec;

            using (var reader = new StreamReader(txtImportFilePath.Text))
            {
                var serializer = new DataContractSerializer(typeof(EntityCollection), new List <Type> {
                    typeof(Entity)
                });
                ec = (EntityCollection)serializer.ReadObject(reader.BaseStream);
            }

            var webSitesId = ec.Entities.SelectMany(e => e.Attributes)
                             .Where(a => a.Value is EntityReference && ((EntityReference)a.Value).LogicalName == "adx_website")
                             .Select(a => ((EntityReference)a.Value).Id)
                             .Distinct()
                             .ToList();

            var targetWebSites = Service.RetrieveMultiple(new QueryExpression("adx_website")
            {
                ColumnSet = new ColumnSet("adx_name")
            }).Entities;

            if (!webSitesId.All(id => targetWebSites.Select(w => w.Id).Contains(id)))
            {
                var wsmDialog = new WebSiteMapper(ec, targetWebSites.Select(t => new Website(t)).ToList());
                if (wsmDialog.ShowDialog() == DialogResult.Cancel)
                {
                    return;
                }
            }

            if (ec.Entities.Any(e => e.LogicalName == "adx_webpage"))
            {
                var message =
                    "You are trying to import web pages. It is recommended to deactivate plugins steps related to this entity to ensure successful import. Do you want to deactivate these plugins ? \n\nNote: The plugins will be reactivated at the end of the import process";
                iSettings.DeactivateWebPagePlugins = MessageBox.Show(this, message, @"Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
                                                     DialogResult.Yes;
            }

            btnImport.Enabled     = false;
            pnlImportMain.Visible = true;
            pbImport.IsOnError    = false;

            var worker = new BackgroundWorker
            {
                WorkerReportsProgress      = true,
                WorkerSupportsCancellation = true
            };

            worker.DoWork += (s, evt) =>
            {
                importWorker = (BackgroundWorker)s;

                if (emds.Count == 0)
                {
                    importWorker.ReportProgress(0, "Retrieving metadata...");
                    emds = MetadataManager.GetEntitiesList(Service);
                }

                if (iSettings.DeactivateWebPagePlugins)
                {
                    importWorker.ReportProgress(0, "Deactivating Webpage plugins steps...");

                    pManager = new PluginManager(Service);
                    pManager.DeactivateWebpagePlugins();
                }

                importWorker.ReportProgress(0, "Processing records...");

                var rm = new RecordManager(Service);
                evt.Cancel = rm.ProcessRecords((EntityCollection)evt.Argument, emds, ConnectionDetail.OrganizationMajorVersion, importWorker);

                if (iSettings.DeactivateWebPagePlugins)
                {
                    importWorker.ReportProgress(0, "Reactivating Webpage plugins steps...");

                    pManager.ActivateWebpagePlugins();
                }
            };
            worker.RunWorkerCompleted += (s, evt) =>
            {
                SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(string.Empty));
                lblProgress.Text      = "Records imported!";
                llOpenLogFile.Visible = true;

                btnImportClose.Enabled = true;
                btnImport.Enabled      = true;
                btnCancel.Visible      = false;

                if (evt.Cancelled)
                {
                    lblProgress.Text = "Import was canceled!";
                    return;
                }

                if (evt.Error != null)
                {
                    MessageBox.Show(this, $"An error occured: {evt.Error.Message}", "Error", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                    return;
                }

                if (pbImport.IsOnError)
                {
                    MessageBox.Show(this, "Import complete with errors\n\nPlease review the logs", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    MessageBox.Show(this, "Import complete", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            };
            worker.ProgressChanged += (s, evt) =>
            {
                if (evt.UserState is string)
                {
                    lblProgress.Text = evt.UserState.ToString();
                    SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(evt.UserState.ToString()));
                }
                else
                {
                    var progress = evt.UserState as ImportProgress;
                    if (progress != null)
                    {
                        foreach (var ep in progress.Entities)
                        {
                            var item = lvProgress.Items.Cast <ListViewItem>().FirstOrDefault(i => i.Text == ep.Entity);
                            if (item == null)
                            {
                                item = new ListViewItem(ep.Entity);
                                item.SubItems.Add(ep.Success.ToString());
                                item.SubItems.Add(ep.Error.ToString());
                                lvProgress.Items.Add(item);
                            }
                            else
                            {
                                item.SubItems[1].Text = ep.Success.ToString();
                                item.SubItems[2].Text = ep.Error.ToString();
                            }

                            if (ep.Error > 0)
                            {
                                pbImport.IsOnError = true;
                            }

                            pbImport.Value = progress.Entities.Sum(ent => ent.Processed) * 100 / progress.Count;
                        }
                    }
                    else if (evt.UserState is bool)
                    {
                        if ((bool)evt.UserState == false)
                        {
                            pbImport.IsOnError = true;
                        }
                        pbImport.Value = evt.ProgressPercentage;
                    }
                }
            };
            worker.RunWorkerAsync(ec);
        }
		void RibbonButtonsUpdateProperties()
		{
			//update tabs visibility
			{
				Metadata.TypeInfo selectedType = null;
				{
					var obj = workspaceController.SelectedDocumentWindow?.ObjectOfWindow;
					if( obj != null )
						selectedType = MetadataManager.MetadataGetType( obj );
				}
				foreach( var ribbonTab in kryptonRibbon.RibbonTabs )
				{
					var tab = ribbonTab.Tag as EditorRibbonDefaultConfiguration.Tab;
					if( tab != null )
					{
						bool visible = true;
						if( tab.VisibleOnlyForType != null && visible )
							visible = selectedType != null && tab.VisibleOnlyForType.IsAssignableFrom( selectedType );
						if( tab.VisibleCondition != null && visible )
							visible = tab.VisibleCondition();

						if( ribbonTab.Visible != visible )
						{
							ribbonLastSelectedTabTypeByUser_DisableUpdate = true;
							ribbonTab.Visible = visible;
							ribbonLastSelectedTabTypeByUser_DisableUpdate = false;
						}

						if( ribbonTab.Visible && ribbonLastSelectedTabTypeByUser != "" && ribbonLastSelectedTabTypeByUser == tab.Type )
						{
							ribbonLastSelectedTabTypeByUser_DisableUpdate = true;
							kryptonRibbon.SelectedTab = ribbonTab;
							ribbonLastSelectedTabTypeByUser_DisableUpdate = false;
						}
					}
				}
			}

			//update controls
			foreach( var ribbonTab in kryptonRibbon.RibbonTabs )
			{
				foreach( var ribbonGroup in ribbonTab.Groups )
				{
					foreach( var groupItem in ribbonGroup.Items )
					{
						var tripple = groupItem as KryptonRibbonGroupTriple;
						if( tripple != null )
						{
							foreach( var trippleItem in tripple.Items )
							{
								//Button, DropDown
								var button = trippleItem as KryptonRibbonGroupButton;
								if( button != null )
								{
									//sub group
									if( button.Tag as string == "SubGroup" && button.KryptonContextMenu != null )
									{
										RibbonSubGroupUpdateItemsRecursive( button.KryptonContextMenu.Items, out var existsEnabled );

										//disable group when all items are disabled
										button.Enabled = existsEnabled;
									}

									//action
									var action = button.Tag as EditorAction;
									if( action != null )
									{
										var state = EditorAPI.EditorActionGetState( EditorAction.HolderEnum.RibbonQAT, action );

										button.Enabled = state.Enabled;

										//кнопка меняет тип, т.к. в действиях не указывается может ли она быть Checked.
										//сделано так, что меняет при первом изменении isChecked.
										if( state.Checked && action.ActionType == EditorAction.ActionTypeEnum.Button )
											button.ButtonType = GroupButtonType.Check;

										button.Checked = state.Checked;
									}
								}

								//Slider
								var slider = trippleItem as KryptonRibbonGroupSlider;
								if( slider != null )
								{
									var action = slider.Tag as EditorAction;
									if( action != null )
									{
										var lastValue = action.Slider.Value;

										var state = EditorAPI.EditorActionGetState( EditorAction.HolderEnum.RibbonQAT, action );

										slider.Enabled = state.Enabled;
										if( lastValue != action.Slider.Value )
										{
											slider.Control.SetValue( action.Slider.Value );
											//trackBar.Value = action.Slider.Value;
										}
									}
								}

								////ComboBox
								//var comboBox = trippleItem as KryptonRibbonGroupComboBox;
								//if( comboBox != null )
								//{
								//	var action = comboBox.Tag as EditorAction;
								//	if( action != null )
								//	{
								//		var lastItems = action.ComboBox.Items;
								//		var lastSelectedIndex = action.ComboBox.SelectedIndex;

								//		var state = EditorAPI.GetEditorActionState( EditorAction.HolderEnum.RibbonQAT, action );

								//		comboBox.Enabled = state.Enabled;

								//		if( !action.ComboBox.Items.SequenceEqual( lastItems ) )
								//		{
								//			var oldSelectedIndex = comboBox.SelectedIndex;

								//			comboBox.Items.Clear();
								//			foreach( var item in action.ComboBox.Items )
								//				comboBox.Items.Add( item );

								//			if( oldSelectedIndex >= 0 && oldSelectedIndex < comboBox.Items.Count )
								//				comboBox.SelectedIndex = oldSelectedIndex;
								//			else if( comboBox.Items.Count != 0 )
								//				comboBox.SelectedIndex = 0;
								//		}
								//		if( lastSelectedIndex != action.ComboBox.SelectedIndex )
								//			comboBox.SelectedIndex = action.ComboBox.SelectedIndex;
								//	}
								//}

								//ListBox
								var listBox = trippleItem as KryptonRibbonGroupListBox;
								if( listBox != null )
								{
									var action = listBox.Tag as EditorAction;
									if( action != null )
									{
										var lastItems = action.ListBox.Items;
										var lastSelectedIndex = action.ListBox.SelectedIndex;

										var state = EditorAPI.EditorActionGetState( EditorAction.HolderEnum.RibbonQAT, action );

										//!!!!не listBox2?
										listBox.Enabled = state.Enabled;

										var browser = listBox.Control.contentBrowser1;

										//update items
										if( !action.ListBox.Items.SequenceEqual( lastItems ) )
											listBox.SetItems( action.ListBox.Items );

										//update selected item
										if( action.ListBox.SelectIndex != null )
										{
											int selectIndex = action.ListBox.SelectIndex.Value;

											var itemToSelect = browser.Items.FirstOrDefault( i => (int)i.Tag == selectIndex );
											if( itemToSelect != null )
											{
												var toSelect = new ContentBrowser.Item[] { itemToSelect };
												if( !toSelect.SequenceEqual( browser.SelectedItems ) )
													browser.SelectItems( toSelect );
											}
											else
											{
												if( browser.SelectedItems.Length != 0 )
													browser.SelectItems( null );
											}

											action.ListBox.SelectIndex = null;
										}

										//{
										//	int selectIndex = action.ListBox.SelectedIndex;
										//	int currentSelectedIndex = -1;
										//	if( browser.SelectedItems.Length == 1 )
										//		currentSelectedIndex = (int)browser.SelectedItems[ 0 ].Tag;
										//	//if( browser.SelectedItems.Length == 1 )
										//	//	currentSelectedIndex = browser.RootItems.IndexOf( browser.SelectedItems[ 0 ] );

										//	if( selectIndex != currentSelectedIndex )
										//	{
										//		var itemToSelect = browser.Items.FirstOrDefault( i => (int)i.Tag == selectIndex );
										//		if( itemToSelect != null )
										//			browser.SelectItems( new ContentBrowser.Item[] { itemToSelect } );
										//		else
										//			browser.SelectItems( null );
										//	}
										//}

										//!!!!?
										//if( lastSelectedIndex != action.ListBox.SelectedIndex )
										//{
										//	if(browser.Items
										//	browser.SelectItems( new ContentBrowser.Item[] { items[ 0 ] } );

										//	//browser.SelectedIndex = action.ListBox.SelectedIndex;
										//}

									}
								}

							}
						}

					}
				}
			}
		}
Exemple #8
0
 public RyuJitNodeFactory(CompilerTypeSystemContext context, CompilationModuleGroup compilationModuleGroup, MetadataManager metadataManager,
                          InteropStubManager interopStubManager, NameMangler nameMangler, VTableSliceProvider vtableSliceProvider, DictionaryLayoutProvider dictionaryLayoutProvider)
     : base(context, compilationModuleGroup, metadataManager, interopStubManager, nameMangler, new LazyGenericsDisabledPolicy(), vtableSliceProvider, dictionaryLayoutProvider)
 {
 }
Exemple #9
0
        public DataTable Execute(SelectStatement statement)
        {
            var metadata = new MetadataManager(CRMInstance);

            ValidateStatement(statement);

            var entityName = ((SelectFrom)statement.From.First()).Name;

            var query = new QueryExpression(entityName);

            if (statement.Columns.Any())
            {
                query.ColumnSet = new ColumnSet(false);

                // Until caching layer is ready we will retrieve fields every time
                var entityFields = metadata.GetEntityFields(entityName);

                if (entityFields == null)
                {
                    throw new Exception($"Unable to read entity '{entityName}' fields.");
                }

                if (statement.Columns.Any(x => x.Type.In(SelectColumnTypeEnum.All, SelectColumnTypeEnum.System)))
                {
                    for (int i = 0; i < statement.Columns.Count; i++)
                    {
                        var column = statement.Columns[i];

                        if (column.Type == SelectColumnTypeEnum.All)
                        {
                            foreach (var entityField in entityFields)
                            {
                                var fieldSelectColumn = new FieldSelectColumn(entityField.SchemaName);

                                statement.Columns.Insert(i++, fieldSelectColumn);
                            }
                        }
                        else if (column.Type == SelectColumnTypeEnum.System)
                        {
                            foreach (var fieldName in Configuration.Settings.SystemSelectFields)
                            {
                                if (fieldName.IsEmpty())
                                {
                                    throw new Exception($"'{fieldName}' not set.");
                                }

                                if (string.Equals(fieldName, "$id", StringComparison.OrdinalIgnoreCase))
                                {
                                    var idEntityField = entityFields.Single(x => x.IsPrimaryId);

                                    var fieldSelectColumn = new FieldSelectColumn(idEntityField.SchemaName);

                                    statement.Columns.Insert(i++, fieldSelectColumn);
                                }
                                else if (string.Equals(fieldName, "$name", StringComparison.OrdinalIgnoreCase))
                                {
                                    var nameEntityField = entityFields.Single(x => x.IsPrimaryName);

                                    var fieldSelectColumn = new FieldSelectColumn(nameEntityField.SchemaName);

                                    statement.Columns.Insert(i++, fieldSelectColumn);
                                }
                                else if (fieldName.StartsWith("$"))
                                {
                                    throw new Exception($"System field '{fieldName}' not supported.");
                                }
                                else
                                {
                                    var fieldSelectColumn = new FieldSelectColumn(fieldName);

                                    statement.Columns.Insert(i++, fieldSelectColumn);
                                }
                            }
                        }
                    }
                }

                for (int i = 0; i < statement.Columns.Count; i++)
                {
                    var column = statement.Columns[i];

                    if (column.Type == SelectColumnTypeEnum.Field)
                    {
                        var fieldColumn = (FieldSelectColumn)column;
                        query.ColumnSet.AddColumn(fieldColumn.Name);
                    }
                    else if (column.Type == SelectColumnTypeEnum.InnerSelect)
                    {
                        throw new Exception("Inner selects are currently unsupported.");
                    }
                    else if (column.Type == SelectColumnTypeEnum.Function)
                    {
                        throw new Exception("Columns with functions are currently unsupported.");
                    }
                }
            }
            else
            {
                query.ColumnSet = new ColumnSet(true);
            }

            if (statement.Top.HasValue)
            {
                query.TopCount = statement.Top.Value;
            }

            if (statement.Where.Any())
            {
                for (var i = 0; i < statement.Where.Count; i++)
                {
                    var whereClause = statement.Where[i];

                    if (whereClause.Type == SelectWhereTypeEnum.Comparison)
                    {
                        var comparisonClause = (SelectWhereComparison)whereClause;

                        var conditionName  = GetWhereClauseAttributeName(comparisonClause.LeftExpression);
                        var conditionValue = GetWhereClauseAttributeName(comparisonClause.RightExpression);

                        var conditionOperator = ConditionOperator.Equal;

                        switch (comparisonClause.Operator)
                        {
                        case SelectWhereComparisonOperatorEnum.Equal:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.NotEqual
                                    : ConditionOperator.Equal;
                            break;

                        case SelectWhereComparisonOperatorEnum.NotEqual:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.Equal
                                    : ConditionOperator.NotEqual;
                            break;

                        case SelectWhereComparisonOperatorEnum.LessThan:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.GreaterEqual
                                    : ConditionOperator.LessThan;
                            break;

                        case SelectWhereComparisonOperatorEnum.LessEqualThan:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.GreaterThan
                                    : ConditionOperator.LessEqual;
                            break;

                        case SelectWhereComparisonOperatorEnum.GreaterThan:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.LessEqual
                                    : ConditionOperator.GreaterThan;
                            break;

                        case SelectWhereComparisonOperatorEnum.GreaterEqualThan:
                            conditionOperator = comparisonClause.Negate
                                    ? ConditionOperator.LessThan
                                    : ConditionOperator.GreaterEqual;
                            break;

                        default:
                            throw new Exception($"Found unexpected comparison operator '{comparisonClause.Operator}'");
                        }

                        query.Criteria.AddCondition(conditionName, conditionOperator, conditionValue);
                    }
                    else if (whereClause.Type == SelectWhereTypeEnum.Null)
                    {
                        var nullClause = (SelectWhereNull)whereClause;

                        var conditionName = GetWhereClauseAttributeName(nullClause.Expression);

                        query.Criteria.AddCondition(conditionName, nullClause.Negate ? ConditionOperator.NotNull : ConditionOperator.Null);
                    }
                    else if (whereClause.Type == SelectWhereTypeEnum.Like)
                    {
                        var likeClause = (SelectWhereLike)whereClause;

                        var conditionName  = GetWhereClauseAttributeName(likeClause.LeftExpression);
                        var conditionValue = GetWhereClauseAttributeName(likeClause.RightExpression);

                        query.Criteria.AddCondition(conditionName, likeClause.Negate ? ConditionOperator.NotLike : ConditionOperator.Like, conditionValue);
                    }
                    else if (whereClause.Type != SelectWhereTypeEnum.Operator)
                    {
                        throw new Exception($"Found unexpected where clause {whereClause.Type}");
                    }
                }
            }

            if (statement.Order.Any())
            {
                foreach (var orderItem in statement.Order)
                {
                    if (orderItem.Type == SelectOrderTypeEnum.Column)
                    {
                        var columnOrder = (SelectOrderColumn)orderItem;
                        var direction   = orderItem.Direction == OrderDirection.Asc ? OrderType.Ascending : OrderType.Descending;

                        query.AddOrder(columnOrder.Name, direction);
                    }
                    else if (orderItem.Type == SelectOrderTypeEnum.Position)
                    {
                        var columnPosition = (SelectOrderPosition)orderItem;
                        var direction      = orderItem.Direction == OrderDirection.Asc ? OrderType.Ascending : OrderType.Descending;

                        var fieldColumn = statement.Columns[columnPosition.Position - 1] as FieldSelectColumn;

                        if (fieldColumn == null)
                        {
                            throw new Exception($"Position '{columnPosition.Position}' must point to a CRM field");
                        }

                        query.AddOrder(fieldColumn.Name, direction);
                    }
                    else
                    {
                        throw new Exception($"Unsupported order type '{orderItem.Type}'");
                    }
                }
            }

            var entities = CRMInstance.Service.RetrieveMultiple(query).Entities.ToList();

            var list = new List <List <KeyValuePair <string, object> > >();

            foreach (var entity in entities)
            {
                var values = new List <KeyValuePair <string, object> >();

                foreach (var attribute in entity.Attributes)
                {
                    object value = null;
                    var    type  = attribute.Value.GetType();

                    if (type != typeof(string))
                    {
                        if (entity.FormattedValues.ContainsKey(attribute.Key))
                        {
                            value = entity.FormattedValues[attribute.Key];
                        }
                    }

                    if (value == null)
                    {
                        value = Convert.ToString(attribute.Value);
                    }

                    values.Add(new KeyValuePair <string, object>(attribute.Key, value));
                }

                list.Add(values);
            }

            return(ConvertToDataTable(list, statement.Columns));
        }
        static void AddBaseItems()
        {
            //Common
            {
                var group = @"Base\Common";
                //!!!!
                //GroupDescriptions[ group ] = "Description text";
                Items.Add(new Item(group + @"\Component", typeof(Component)));
                Items.Add(new Item(group + @"\Text File", typeof(NewResourceType_TextFile)));

                //!!!!убрать "The feature is not implemented."
                Items.Add(new Item(group + @"\C# Class Library", typeof(NewResourceType_CSharpClassLibrary), disabled: true));
                Items.Add(new Item(group + @"\Executable App", typeof(NewResourceType_ExecutableApp), disabled: true));

                Items.Add(new Item(group + @"\Advanced\Component Host", typeof(Component_ComponentHost)));

                //!!!!Image
            }

            //Scripting
            {
                //Common
                {
                    var group = @"Base\Scripting";                    // Common\";
                    Items.Add(new Item(group + @"\C# File", typeof(NewResourceType_CSharpClass)));
                    Items.Add(new Item(group + @"\C# Script", typeof(Component_CSharpScript)));
                    Items.Add(new Item(group + @"\Flow Graph", typeof(Component_FlowGraph)));
                    //group.types.Add( new Item( "C# library", typeof( NewResourceType_CSharpClassLibrary ), true ) );

                    //Items.Add( new Item( group + "Event Handler", typeof( Component_EventHandler ) ) );
                }

                //Metadata
                {
                    var group = @"Base\Scripting\Metadata";
                    Items.Add(new Item(group + @"\Property", typeof(Component_Property)));
                    Items.Add(new Item(group + @"\Method", typeof(Component_Method)));
                    //Items.Add( new Item( group + @"\Event", typeof( Component_Event ), true ) );
                    Items.Add(new Item(group + @"\Member Parameter", typeof(Component_MemberParameter)));
                    //Items.Add( new Item( group + @"\Event", typeof( Component_Event ), true ) );
                }

                //Flow scripting
                {
                    var group = @"Base\Scripting\Flow scripting";
                    Items.Add(new Item(group + @"\Invoke Member", typeof(Component_InvokeMember)));
                    Items.Add(new Item(group + @"\Event Handler", typeof(Component_EventHandler)));
                    Items.Add(new Item(group + @"\Declare Variable", typeof(Component_DeclareVariable)));
                    Items.Add(new Item(group + @"\Set Variable", typeof(Component_SetVariable)));
                    Items.Add(new Item(group + @"\If", typeof(Component_If)));
                    Items.Add(new Item(group + @"\Switch", typeof(Component_Switch)));
                    Items.Add(new Item(group + @"\While", typeof(Component_While)));
                    Items.Add(new Item(group + @"\Do While", typeof(Component_DoWhile)));
                    Items.Add(new Item(group + @"\Do Number", typeof(Component_DoNumber)));
                    Items.Add(new Item(group + @"\For Each", typeof(Component_ForEach)));
                    Items.Add(new Item(group + @"\For", typeof(Component_For)));
                    Items.Add(new Item(group + @"\Sequence", typeof(Component_Sequence)));
                    Items.Add(new Item(group + @"\Flow Start", typeof(Component_FlowStart)));
                    Items.Add(new Item(group + @"\Convert To", typeof(Component_ConvertTo)));
                }

                ////!!!!nb
                ////C# projects
                //{
                //	var group = @"Base\Scripting\C# projects";

                //	{
                //		var item = new Item( group + @"\C# Class Library", typeof( NewResourceType_CSharpClassLibrary ) );
                //		item.Disabled = true;
                //		Items.Add( item );
                //	}

                //	{
                //		var item = new Item( group + @"\C# Windows Forms App", typeof( NewResourceType_CSharpClassLibrary ) );
                //		item.Disabled = true;
                //		Items.Add( item );
                //	}

                //	{
                //		var item = new Item( group + @"\C# WPF App", typeof( NewResourceType_CSharpClassLibrary ) );
                //		item.Disabled = true;
                //		Items.Add( item );
                //	}

                //	{
                //		var item = new Item( group + @"\C# NeoAxis Addon", typeof( NewResourceType_CSharpClassLibrary ) );
                //		item.Disabled = true;
                //		Items.Add( item );
                //	}

                //	//Items.Add( new Item( group + @"\C# Class Library", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\C# Windows Forms App", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\C# WPF App", typeof( NewResourceType_CSharpClassLibrary ) ) );

                //	//Items.Add( new Item( group + @"\C# Class Library", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\C# Windows Forms App", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\C# WPF App", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\NeoAxis Editor App", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //	//Items.Add( new Item( group + @"\NeoAxis Simulation App", typeof( NewResourceType_CSharpClassLibrary ) ) );
                //}
            }

            //UI
            {
                {
                    var group = @"Base\UI";
                    Items.Add(new Item(group + @"\Control", typeof(UIControl)));
                    Items.Add(new Item(group + @"\Window", typeof(UIWindow)));
                    Items.Add(new Item(group + @"\Text", typeof(UIText)));
                    Items.Add(new Item(group + @"\Image", typeof(UIImage)));
                    Items.Add(new Item(group + @"\Button", typeof(UIButton)));
                    Items.Add(new Item(group + @"\Check", typeof(UICheck)));
                    Items.Add(new Item(group + @"\Edit", typeof(UIEdit)));
                    Items.Add(new Item(group + @"\Slider", typeof(UISlider)));
                    Items.Add(new Item(group + @"\Progress", typeof(UIProgress)));
                    Items.Add(new Item(group + @"\Scroll", typeof(UIScroll)));
                    Items.Add(new Item(group + @"\Combo", typeof(UICombo)));
                    Items.Add(new Item(group + @"\List", typeof(UIList)));
                    //Items.Add( new Item( group + @"\Tree", typeof( UITree ) ) );
                    Items.Add(new Item(group + @"\Video", typeof(UIVideo)));
                    Items.Add(new Item(group + @"\Web Browser", typeof(UIWebBrowser)));
                    Items.Add(new Item(group + @"\Render Target", typeof(UIRenderTarget)));
                    //Items.Add( new Item( group + @"\Menu", typeof( UIMenu ) ) );
                }

                //Containers
                {
                    var group = @"Base\UI\Containers";
                    Items.Add(new Item(group + @"\Tab Control", typeof(UITabControl)));
                    //Items.Add( new Item( group + @"\Split Container", typeof( UISplitContainer ) ) );
                    Items.Add(new Item(group + @"\Grid", typeof(UIGrid)));
                    Items.Add(new Item(group + @"\Toolbar", typeof(UIToolbar)));
                }

                //More
                {
                    var group = @"Base\UI\More";
                    Items.Add(new Item(group + @"\Style", typeof(UIStyle)));
                    Items.Add(new Item(group + @"\Tooltip", typeof(UITooltip)));
                }
            }

            //Common 3D
            {
                var group = @"Base\Scene common";
                //var group = @"Base\Common 3D";
                Items.Add(new Item(group + @"\Scene", typeof(Component_Scene)));
                Items.Add(new Item(group + @"\Material", typeof(Component_Material)));
                Items.Add(new Item(group + @"\Surface", typeof(Component_Surface)));
                Items.Add(new Item(group + @"\Cubemap", typeof(Component_Image)));
                Items.Add(new Item(group + @"\Paint Layer", typeof(Component_PaintLayer)));

                if (MetadataManager.GetType("NeoAxis.Component_RenderingPipeline_Default") != null)
                {
                    Items.Add(new Item(group + @"\Rendering Pipeline Default", MetadataManager.GetType("NeoAxis.Component_RenderingPipeline_Default").GetNetType()));
                }

                Items.Add(new Item(group + @"\Mesh", typeof(Component_Mesh)));

                ////Mesh modifiers
                //var groupMeshModifiers = @"Base\Scene common\Mesh modifiers";
                //Items.Add( new Item( groupMeshModifiers + @"\Box UV", typeof( Component_MeshModifier_BoxUV ), disabled: true ) );
                //Items.Add( new Item( groupMeshModifiers + @"\Spherical UV", typeof( Component_MeshModifier_SphericalUV ), disabled: true ) );
                //Items.Add( new Item( groupMeshModifiers + @"\Tiling UV", typeof( Component_MeshModifier_TilingUV ), disabled: true ) );
                ////Items.Add( new Item( groupMeshModifiers + @"\Unwrap", typeof( Component_MeshModifier_Unwrap ), disabled: true ) );
                ////Items.Add( new Item( groupMeshModifiers + @"\Smooth", typeof( Component_MeshModifier_Smooth ), disabled: true ) );

                //Items.Add( new Item( group + @"\Paint Layer", typeof( Component_PaintLayer ) ) );
            }

            //Scene objects
            {
                var group = @"Base\Scene objects";


                Items.Add(new Item(group + @"\Object In Space", typeof(Component_ObjectInSpace)));
                Items.Add(new Item(group + @"\Group Of Objects", typeof(Component_GroupOfObjects)));
                Items.Add(new Item(group + @"\Layer", typeof(Component_Layer)));
                Items.Add(new Item(group + @"\Mesh In Space", typeof(Component_MeshInSpace)));
                Items.Add(new Item(group + @"\Mesh In Space Animation Controller", typeof(Component_MeshInSpaceAnimationController)));
                Items.Add(new Item(group + @"\Particle System In Space", typeof(Component_ParticleSystemInSpace)));
                Items.Add(new Item(group + @"\Light", typeof(Component_Light)));
                Items.Add(new Item(group + @"\Camera", typeof(Component_Camera)));
                Items.Add(new Item(group + @"\Terrain", typeof(Component_Terrain)));
                Items.Add(new Item(group + @"\Billboard", typeof(Component_Billboard)));
                Items.Add(new Item(group + @"\Decal", typeof(Component_Decal)));
                Items.Add(new Item(group + @"\Reflection Probe", typeof(Component_ReflectionProbe)));
                Items.Add(new Item(group + @"\Sound Source", typeof(Component_SoundSource)));

                if (MetadataManager.GetType("NeoAxis.Component_RenderTargetInSpace") != null)
                {
                    Items.Add(new Item(group + @"\Render Target In Space", MetadataManager.GetType("NeoAxis.Component_RenderTargetInSpace").GetNetType()));
                }

                if (MetadataManager.GetType("NeoAxis.Component_Skybox") != null)
                {
                    Items.Add(new Item(group + @"\Environment\Skybox", MetadataManager.GetType("NeoAxis.Component_Skybox").GetNetType()));
                }
                if (MetadataManager.GetType("NeoAxis.Component_Fog") != null)
                {
                    Items.Add(new Item(group + @"\Environment\Fog", MetadataManager.GetType("NeoAxis.Component_Fog").GetNetType()));
                }
                if (MetadataManager.GetType("NeoAxis.Component_LensFlares") != null)
                {
                    Items.Add(new Item(group + @"\Environment\Lens Flares", MetadataManager.GetType("NeoAxis.Component_LensFlares").GetNetType()));
                }

                Items.Add(new Item(group + @"\Areas\Area", typeof(Component_Area)));
                Items.Add(new Item(group + @"\Areas\Surface Area", typeof(Component_SurfaceArea)));

                Items.Add(new Item(group + @"\Sensors\Sensor", typeof(Component_Sensor)));
                if (MetadataManager.GetType("NeoAxis.Component_DestroyingSensor") != null)
                {
                    Items.Add(new Item(group + @"\Sensors\Destroying Sensor", MetadataManager.GetType("NeoAxis.Component_DestroyingSensor").GetNetType()));
                }

                Items.Add(new Item(group + @"\Additional\Text 2D", typeof(Component_Text2D)));
                if (MetadataManager.GetType("NeoAxis.Component_Grid") != null)
                {
                    Items.Add(new Item(group + @"\Additional\Grid", MetadataManager.GetType("NeoAxis.Component_Grid").GetNetType()));
                }
                if (MetadataManager.GetType("NeoAxis.Component_CurveInSpace") != null)
                {
                    Items.Add(new Item(group + @"\Additional\Curve In Space", MetadataManager.GetType("NeoAxis.Component_CurveInSpace").GetNetType()));
                }

                //Items.Add( new Item( group + @"\Object In Space", typeof( Component_ObjectInSpace ) ) );
                //Items.Add( new Item( group + @"\Group Of Objects", typeof( Component_GroupOfObjects ) ) );
                //Items.Add( new Item( group + @"\Layer", typeof( Component_Layer ) ) );
                //Items.Add( new Item( group + @"\Mesh In Space", typeof( Component_MeshInSpace ) ) );
                //Items.Add( new Item( group + @"\Mesh In Space Animation Controller", typeof( Component_MeshInSpaceAnimationController ) ) );

                //Items.Add( new Item( group + @"\Particle System In Space", typeof( Component_ParticleSystemInSpace ) ) );

                //Items.Add( new Item( group + @"\Light", typeof( Component_Light ) ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_Skybox" ) != null )
                //	Items.Add( new Item( group + @"\Skybox", MetadataManager.GetType( "NeoAxis.Component_Skybox" ).GetNetType() ) );
                //if( MetadataManager.GetType( "NeoAxis.Component_Fog" ) != null )
                //	Items.Add( new Item( group + @"\Fog", MetadataManager.GetType( "NeoAxis.Component_Fog" ).GetNetType() ) );

                //Items.Add( new Item( group + @"\Terrain", typeof( Component_Terrain ) ) );
                //Items.Add( new Item( group + @"\Billboard", typeof( Component_Billboard ) ) );
                //Items.Add( new Item( group + @"\Decal", typeof( Component_Decal ) ) );
                //Items.Add( new Item( group + @"\Camera", typeof( Component_Camera ) ) );
                //Items.Add( new Item( group + @"\Reflection Probe", typeof( Component_ReflectionProbe ) ) );
                //Items.Add( new Item( group + @"\Sound Source", typeof( Component_SoundSource ) ) );
                //Items.Add( new Item( group + @"\Sensor", typeof( Component_Sensor ) ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_CurveInSpace" ) != null )
                //	Items.Add( new Item( group + @"\Curve In Space", MetadataManager.GetType( "NeoAxis.Component_CurveInSpace" ).GetNetType() ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_LensFlares" ) != null )
                //	Items.Add( new Item( group + @"\Lens Flares", MetadataManager.GetType( "NeoAxis.Component_LensFlares" ).GetNetType() ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_Grid" ) != null )
                //	Items.Add( new Item( group + @"\Grid", MetadataManager.GetType( "NeoAxis.Component_Grid" ).GetNetType() ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_DestroyingSensor" ) != null )
                //	Items.Add( new Item( group + @"\Destroying Sensor", MetadataManager.GetType( "NeoAxis.Component_DestroyingSensor" ).GetNetType() ) );

                //Items.Add( new Item( group + @"\Area", typeof( Component_Area ) ) );
                //Items.Add( new Item( group + @"\Surface Area", typeof( Component_SurfaceArea ) ) );
                //Items.Add( new Item( group + @"\Text 2D", typeof( Component_Text2D ) ) );

                //if( MetadataManager.GetType( "NeoAxis.Component_RenderTargetInSpace" ) != null )
                //	Items.Add( new Item( group + @"\Render Target In Space", MetadataManager.GetType( "NeoAxis.Component_RenderTargetInSpace" ).GetNetType() ) );



                //Items.Add( new Item( group + @"\Particle Emitter", typeof( Component_ParticleEmitter ), true ) );
                //Items.Add( new Item( group + @"\Particle System", typeof( Component_ParticleSystem ), true ) );
                //Items.Add( new Item( group + @"\Light Probe", typeof( Component_LightProbe ), true ) );
                //Items.Add( new Item( group + @"\Liquid Surface", typeof( Component_LiquidSurface ), true ) );
            }

            //Primitives
            {
                var group = @"Base\Primitives";                //"Simple meshes"

                Items.Add(new Item(group + @"\Arch", typeof(Component_MeshGeometry_Arch)));
                Items.Add(new Item(group + @"\Box", typeof(Component_MeshGeometry_Box)));
                Items.Add(new Item(group + @"\Capsule", typeof(Component_MeshGeometry_Capsule)));
                Items.Add(new Item(group + @"\Cone", typeof(Component_MeshGeometry_Cone)));
                Items.Add(new Item(group + @"\Cylinder", typeof(Component_MeshGeometry_Cylinder)));
                Items.Add(new Item(group + @"\Door", typeof(Component_MeshGeometry_Door)));
                Items.Add(new Item(group + @"\Pipe", typeof(Component_MeshGeometry_Pipe)));
                Items.Add(new Item(group + @"\Plane", typeof(Component_MeshGeometry_Plane)));
                Items.Add(new Item(group + @"\Prism", typeof(Component_MeshGeometry_Prism)));
                Items.Add(new Item(group + @"\Sphere", typeof(Component_MeshGeometry_Sphere)));
                Items.Add(new Item(group + @"\Stairs", typeof(Component_MeshGeometry_Stairs)));
                Items.Add(new Item(group + @"\Torus", typeof(Component_MeshGeometry_Torus)));
                Items.Add(new Item(group + @"\Polygon Based Polyhedron", typeof(Component_MeshGeometry_PolygonBasedPolyhedron)));
            }

            //Physics
            {
                var group = @"Base\Physics";

                Items.Add(new Item(group + @"\Rigid Body", typeof(Component_RigidBody)));

                Items.Add(new Item(group + @"\Box Shape", typeof(Component_CollisionShape_Box)));
                Items.Add(new Item(group + @"\Sphere Shape", typeof(Component_CollisionShape_Sphere)));
                Items.Add(new Item(group + @"\Cylinder Shape", typeof(Component_CollisionShape_Cylinder)));
                Items.Add(new Item(group + @"\Cone Shape", typeof(Component_CollisionShape_Cone)));
                Items.Add(new Item(group + @"\Capsule Shape", typeof(Component_CollisionShape_Capsule)));
                Items.Add(new Item(group + @"\Mesh Shape", typeof(Component_CollisionShape_Mesh)));
                Items.Add(new Item(group + @"\Physical Material", typeof(Component_PhysicalMaterial)));
                Items.Add(new Item(group + @"\Soft Body", typeof(Component_SoftBody)));
                Items.Add(new Item(group + @"\Constraint", typeof(Component_Constraint)));
                Items.Add(new Item(group + @"\Sensor", typeof(Component_Sensor)));
                //group.Types.Add( new TypeItem( subgroup,"Collision Trigger", typeof( Component_CollisionTrigger ), true ) );
                //group.Types.Add( new TypeItem( subgroup,"Physical Liquid Surface", typeof( Component_PhysicalLiquidSurface ), true ) );
            }

            //Particles
            {
                var groupParticles = @"Base\Particles";
                Items.Add(new Item(groupParticles + @"\Particle System", typeof(Component_ParticleSystem)));
                Items.Add(new Item(groupParticles + @"\Particle Emitter", typeof(Component_ParticleEmitter)));

                var groupParticlesShapes = @"Base\Particles\Shapes";
                Items.Add(new Item(groupParticlesShapes + @"\Box Shape", typeof(Component_ParticleEmitterShape_Box)));
                Items.Add(new Item(groupParticlesShapes + @"\Point Shape", typeof(Component_ParticleEmitterShape_Point)));
                Items.Add(new Item(groupParticlesShapes + @"\Sphere Shape", typeof(Component_ParticleEmitterShape_Sphere)));
                Items.Add(new Item(groupParticlesShapes + @"\Cylinder Shape", typeof(Component_ParticleEmitterShape_Cylinder)));
                Items.Add(new Item(groupParticlesShapes + @"\Custom Shape", typeof(Component_ParticleEmitterShape)));

                var groupParticlesModules = @"Base\Particles\Modules";
                Items.Add(new Item(groupParticlesModules + @"\Size Multiplier By Time", typeof(Component_ParticleSizeMultiplierByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Color Multiplier By Time", typeof(Component_ParticleColorMultiplierByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Linear Acceleration By Time", typeof(Component_ParticleLinearAccelerationByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Linear Velocity By Time", typeof(Component_ParticleLinearVelocityByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Linear Speed Multiplier By Time", typeof(Component_ParticleLinearSpeedMultiplierByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Angular Acceleration By Time", typeof(Component_ParticleAngularAccelerationByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Angular Velocity By Time", typeof(Component_ParticleAngularVelocityByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Angular Speed Multiplier By Time", typeof(Component_ParticleAngularSpeedMultiplierByTime)));
                Items.Add(new Item(groupParticlesModules + @"\Custom Module", typeof(Component_ParticleModuleCustom)));
            }

            //Screen effects
            {
                var group = @"Base\Screen effects";

                var list = new List <(string, string)>();
                list.Add(("Ambient Occlusion", "Component_RenderingEffect_AmbientOcclusion"));
                list.Add(("Antialiasing", "Component_RenderingEffect_Antialiasing"));
                list.Add(("Bloom", "Component_RenderingEffect_Bloom"));
                list.Add(("Color Grading", "Component_RenderingEffect_ColorGrading"));
                list.Add(("Depth Of Field", "Component_RenderingEffect_DepthOfField"));
                list.Add(("Gaussian Blur", "Component_RenderingEffect_GaussianBlur"));
                list.Add(("Grayscale", "Component_RenderingEffect_Grayscale"));
                list.Add(("Lens Effects", "Component_RenderingEffect_LensEffects"));
                list.Add(("Light Shafts", "Component_RenderingEffect_LightShafts"));
                list.Add(("Motion Blur", "Component_RenderingEffect_MotionBlur"));
                list.Add(("Noise", "Component_RenderingEffect_Noise"));
                list.Add(("Radial Blur", "Component_RenderingEffect_RadialBlur"));
                list.Add(("Screen Space Reflection", "Component_RenderingEffect_ScreenSpaceReflection"));
                list.Add(("Sharpen", "Component_RenderingEffect_Sharpen"));
                list.Add(("Show Render Target", "Component_RenderingEffect_ShowRenderTarget"));
                list.Add(("To LDR", "Component_RenderingEffect_ToLDR"));
                list.Add(("Tone Mapping", "Component_RenderingEffect_ToneMapping"));
                list.Add(("Vignetting", "Component_RenderingEffect_Vignetting"));

                foreach (var item in list)
                {
                    var type = MetadataManager.GetType("NeoAxis." + item.Item2);
                    if (type != null)
                    {
                        Items.Add(new Item(group + "\\" + item.Item1, type.GetNetType()));
                    }
                }
            }
        }
Exemple #11
0
 public MetadataController(MetadataManager metadataManager)
 {
     this.metadataManager = metadataManager;
 }
Exemple #12
0
        private void buttonTypeSettingsDefaultValue_Click(object sender, EventArgs e)
        {
            var component = GetTypeSettingsComponent();

            if (component != null)
            {
                var text = EditorLocalization.Translate("SettingsWindow", "Reset to default?");
                if (EditorMessageBox.ShowQuestion(text, EMessageBoxButtons.YesNo) == EDialogResult.Yes)
                {
                    var oldValue = component.TypeSettingsPrivateObjects;

                    component.TypeSettingsPrivateObjects = null;

                    var undoItem = new UndoActionPropertiesChange.Item(component, (Metadata.Property)MetadataManager.GetTypeOfNetType(typeof(Component)).MetadataGetMemberBySignature("property:TypeSettingsPrivateObjects"), oldValue, null);
                    SettingsPanel.documentWindow.Document.UndoSystem.CommitAction(new UndoActionPropertiesChange(undoItem));
                    SettingsPanel.documentWindow.Document.Modified = true;
                }
            }
        }
Exemple #13
0
        IEnumerable <Item> GetNewItems(object[] objects)
        {
            var itemByGroupName = new Dictionary <string, HCItemGroup>();
            var itemByMember    = new Dictionary <Metadata.Member, HCItemMember>();

            foreach (var item in rootItems)
            {
                var groupItem = item as HCItemGroup;
                if (groupItem != null)
                {
                    itemByGroupName.Add(groupItem.Name, groupItem);
                }
                var memberItem = item as HCItemMember;
                if (memberItem != null)
                {
                    itemByMember.Add(memberItem.Member, memberItem);
                }
            }

            var groups = new EDictionary <string, List <Metadata.Member> >();
            //var members = MetadataManager.MetadataGetMembers( obj );
            //if( ReverseItems )
            //	members = members.Reverse();

            var firstObject = objects[0];

            var membersToAdd = new EDictionary <Metadata.Member, int>(128);

            //foreach( var member in members )
            foreach (var member in MetadataManager.MetadataGetMembers(firstObject))
            {
                if (contentMode == ContentModeEnum.Properties && !(member is Metadata.Property))
                {
                    continue;
                }
                if (contentMode == ContentModeEnum.Events && !(member is Metadata.Event))
                {
                    continue;
                }

                if (EditorUtility.IsMemberVisible(firstObject, member))
                {
                    bool skip = false;

                    //Type Settings filter
                    var component = firstObject as Component;
                    if (component != null && !component.TypeSettingsIsPublicMember(member))
                    {
                        skip = true;
                    }
                    //if( component != null )
                    //{
                    //var baseComponentType = component.BaseType as Metadata.ComponentTypeInfo;
                    //if( baseComponentType != null && baseComponentType.BasedOnObject.TypeSettingsIsPrivateObject( member ) )
                    //	skip = true;
                    //}

                    if (!skip)
                    {
                        membersToAdd[member] = 1;
                    }
                }
            }

            for (int nObject = 1; nObject < objects.Length; nObject++)
            {
                var obj = objects[nObject];
                foreach (var member in MetadataManager.MetadataGetMembers(obj))
                {
                    if (membersToAdd.TryGetValue(member, out var counter))
                    {
                        membersToAdd[member] = counter + 1;
                    }
                }
            }

            foreach (var pair in membersToAdd)
            {
                var member  = pair.Key;
                var counter = pair.Value;
                if (counter == objects.Length)
                {
                    var groupName = TypeUtility.GetUserFriendlyCategory(member);

                    List <Metadata.Member> list;
                    if (!groups.TryGetValue(groupName, out list))
                    {
                        list = new List <Metadata.Member>();
                        groups.Add(groupName, list);
                    }
                    list.Add(member);
                }
            }

            ////foreach( var member in members )
            //foreach( var member in MetadataManager.MetadataGetMembers( obj ) )
            //{
            //	if( contentMode == ContentModeEnum.Properties && !( member is Metadata.Property ) )
            //		continue;
            //	if( contentMode == ContentModeEnum.Events && !( member is Metadata.Event ) )
            //		continue;

            //	if( EditorUtility.IsMemberVisible( member ) )
            //	{
            //		bool skip = false;

            //		//Type Settings filter
            //		var component = obj as Component;
            //		if( component != null && !component.TypeSettingsIsPublicMember( member ) )
            //			skip = true;
            //		//if( component != null )
            //		//{
            //		//var baseComponentType = component.BaseType as Metadata.ComponentTypeInfo;
            //		//if( baseComponentType != null && baseComponentType.BasedOnObject.TypeSettingsIsPrivateObject( member ) )
            //		//	skip = true;
            //		//}

            //		if( !skip )
            //		{
            //			var groupName = TypeUtility.GetUserFriendlyCategory( member );

            //			List<Metadata.Member> list;
            //			if( !groups.TryGetValue( groupName, out list ) )
            //			{
            //				list = new List<Metadata.Member>();
            //				groups.Add( groupName, list );
            //			}
            //			list.Add( member );
            //		}
            //	}
            //}

            //!!!!change order

            //reverse groups for Events mode
            if (ReverseGroups)             //if( contentMode == ContentModeEnum.Events )
            {
                var newGroups = new EDictionary <string, List <Metadata.Member> >(groups.Count);
                foreach (var pair in groups.Reverse())
                {
                    newGroups.Add(pair.Key, pair.Value);
                }
                groups = newGroups;
            }

            foreach (var groupPair in groups)
            {
                var groupName = groupPair.Key;
                var list      = groupPair.Value;

                //update group
                if (DisplayGroups)
                {
                    if (!itemByGroupName.TryGetValue(groupName, out HCItemGroup groupItem))
                    {
                        groupItem = new HCItemGroup(this, null, groupName);
                    }
                    yield return(groupItem);
                }

                //update properties of the group
                foreach (var member in list)
                {
                    if (!itemByMember.TryGetValue(member, out var item))
                    {
                        Type itemType = GetSuitableItemType(member);
                        //var originalType = property.Type.GetNetType();
                        //var unrefType = ReferenceUtils.GetUnreferencedType( originalType );
                        //Type itemType = HCPropertyItemTypes.GetSuitableType( unrefType );

                        //!!!!может быть null. Component.MetadataGetMembers в _InvokeMember
                        if (itemType != null)
                        {
                            var property = member as Metadata.Property;
                            if (property != null)
                            {
                                var constructor = itemType.GetConstructor(new Type[] {
                                    typeof(HierarchicalContainer),
                                    typeof(Item),
                                    typeof(object[]),
                                    typeof(Metadata.Property),
                                    typeof(object[])
                                });

                                item = (HCItemMember)constructor.Invoke(new object[] { this, null, SelectedObjects, property, property.Indexers });
                            }

                            var _event = member as Metadata.Event;
                            if (_event != null)
                            {
                                var constructor = itemType.GetConstructor(new Type[] {
                                    typeof(HierarchicalContainer),
                                    typeof(Item),
                                    typeof(object[]),
                                    typeof(Metadata.Event)
                                });

                                item = (HCItemMember)constructor.Invoke(new object[] { this, null, SelectedObjects, _event });
                            }
                        }
                    }

                    if (item != null)
                    {
                        yield return(item);
                    }
                }
            }
        }
 public CppCodegenNodeFactory(CompilerTypeSystemContext context, CompilationModuleGroup compilationModuleGroup, MetadataManager metadataManager)
     : base(context, compilationModuleGroup, metadataManager, new CoreRTNameMangler(new CppNodeMangler(), true))
 {
 }
Exemple #15
0
        public static Component_Material CreateMaterial(Component materialsGroup, MaterialData data)
        {
            //create material
            var material = materialsGroup.CreateComponent <Component_Material>(enabled: false);

            material.Name         = data.Name;
            material.ShadingModel = data.ShadingModel;
            material.TwoSided     = data.TwoSided;
            if (!string.IsNullOrEmpty(data.OpacityTexture))
            {
                material.BlendMode = Component_Material.BlendModeEnum.Masked;
            }

            //create shader graph
            Component_FlowGraph graph;
            {
                graph                = material.CreateComponent <Component_FlowGraph>();
                graph.Name           = material.Name + " shader graph";
                graph.Specialization = ReferenceUtility.MakeReference <Component_FlowGraphSpecialization>(null,
                                                                                                          MetadataManager.GetTypeOfNetType(typeof(Component_FlowGraphSpecialization_Shader)).Name + "|Instance");

                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name             = "Node " + material.Name;
                node.Position         = new Vector2I(10, -7);
                node.ControlledObject = ReferenceUtility.MakeThisReference(node, material);
            }

            const int step     = 9;
            Vector2I  position = new Vector2I(-20, -data.GetTextureCount() * step / 2);

            //BaseColor
            if (!string.IsNullOrEmpty(data.BaseColorTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "BaseColor";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.BaseColorTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.BaseColor = ReferenceUtility.MakeThisReference(material, sample, "RGBA");
            }
            else if (data.BaseColor.HasValue)
            {
                material.BaseColor = data.BaseColor.Value;
            }

            //Metallic
            if (!string.IsNullOrEmpty(data.MetallicTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Metallic";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.MetallicTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Metallic = ReferenceUtility.MakeThisReference(material, sample, "R");
            }

            //Roughness
            if (!string.IsNullOrEmpty(data.RoughnessTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Roughness";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.RoughnessTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Roughness = ReferenceUtility.MakeThisReference(material, sample, "R");
            }

            //Normal
            if (!string.IsNullOrEmpty(data.NormalTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Normal";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.NormalTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Normal = ReferenceUtility.MakeThisReference(material, sample, "RGBA");
            }

            //Displacement
            if (!string.IsNullOrEmpty(data.DisplacementTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Displacement";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.DisplacementTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Displacement = ReferenceUtility.MakeThisReference(material, sample, "R");
            }

            //AmbientOcclusion
            if (!string.IsNullOrEmpty(data.AmbientOcclusionTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "AmbientOcclusion";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.AmbientOcclusionTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.AmbientOcclusion = ReferenceUtility.MakeThisReference(material, sample, "R");
            }

            //Emissive
            if (!string.IsNullOrEmpty(data.EmissiveTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Emissive";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.EmissiveTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Emissive = ReferenceUtility.MakeThisReference(material, sample, "RGBA");
            }

            //Opacity
            if (!string.IsNullOrEmpty(data.OpacityTexture))
            {
                var node = graph.CreateComponent <Component_FlowGraphNode>();
                node.Name     = "Node Texture Sample " + "Opacity";
                node.Position = position;
                position.Y   += step;

                var sample = node.CreateComponent <Component_ShaderTextureSample>();
                sample.Name    = ComponentUtility.GetNewObjectUniqueName(sample);
                sample.Texture = new Reference <Component_Image>(null, data.OpacityTexture);

                node.ControlledObject = ReferenceUtility.MakeThisReference(node, sample);

                material.Opacity = ReferenceUtility.MakeThisReference(material, sample, "R");
            }

            material.Enabled = true;

            return(material);
        }
Exemple #16
0
        public void AttachToDependencyGraph(DependencyAnalyzerBase <NodeFactory> graph)
        {
            graph.ComputingDependencyPhaseChange += Graph_ComputingDependencyPhaseChange;

            var compilerIdentifierNode = new CompilerIdentifierNode(Target);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.CompilerIdentifier, compilerIdentifierNode, compilerIdentifierNode);

            RuntimeFunctionsTable = new RuntimeFunctionsTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.RuntimeFunctions, RuntimeFunctionsTable, RuntimeFunctionsTable);

            RuntimeFunctionsGCInfo = new RuntimeFunctionsGCInfoNode();
            graph.AddRoot(RuntimeFunctionsGCInfo, "GC info is always generated");

            ProfileDataSection = new ProfileDataSectionNode();
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ProfileDataInfo, ProfileDataSection, ProfileDataSection.StartSymbol);

            DelayLoadMethodCallThunks = new DelayLoadMethodCallThunkNodeRange();
            Header.Add(Internal.Runtime.ReadyToRunSectionType.DelayLoadMethodCallThunks, DelayLoadMethodCallThunks, DelayLoadMethodCallThunks);

            ExceptionInfoLookupTableNode exceptionInfoLookupTableNode = new ExceptionInfoLookupTableNode(this);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.ExceptionInfo, exceptionInfoLookupTableNode, exceptionInfoLookupTableNode);
            graph.AddRoot(exceptionInfoLookupTableNode, "ExceptionInfoLookupTable is always generated");

            ManifestMetadataTable = new ManifestMetadataTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ManifestMetadata, ManifestMetadataTable, ManifestMetadataTable);
            Resolver.SetModuleIndexLookup(ManifestMetadataTable.ModuleToIndex);

            ManifestAssemblyMvidHeaderNode mvidTableNode = new ManifestAssemblyMvidHeaderNode(ManifestMetadataTable);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.ManifestAssemblyMvids, mvidTableNode, mvidTableNode);

            AssemblyTableNode assemblyTable = null;

            if (CompilationModuleGroup.IsCompositeBuildMode)
            {
                assemblyTable = new AssemblyTableNode(Target);
                Header.Add(Internal.Runtime.ReadyToRunSectionType.ComponentAssemblies, assemblyTable, assemblyTable);
            }

            // Generate per assembly header tables
            int assemblyIndex = -1;

            foreach (EcmaModule inputModule in CompilationModuleGroup.CompilationModuleSet)
            {
                assemblyIndex++;
                HeaderNode tableHeader = Header;
                if (assemblyTable != null)
                {
                    AssemblyHeaderNode perAssemblyHeader = new AssemblyHeaderNode(Target, ReadyToRunFlags.READYTORUN_FLAG_Component, assemblyIndex);
                    assemblyTable.Add(perAssemblyHeader);
                    tableHeader = perAssemblyHeader;
                }

                MethodEntryPointTableNode methodEntryPointTable = new MethodEntryPointTableNode(inputModule, Target);
                tableHeader.Add(Internal.Runtime.ReadyToRunSectionType.MethodDefEntryPoints, methodEntryPointTable, methodEntryPointTable);

                TypesTableNode typesTable = new TypesTableNode(Target, inputModule);
                tableHeader.Add(Internal.Runtime.ReadyToRunSectionType.AvailableTypes, typesTable, typesTable);

                InliningInfoNode inliningInfoTable = new InliningInfoNode(Target, inputModule);
                tableHeader.Add(Internal.Runtime.ReadyToRunSectionType.InliningInfo2, inliningInfoTable, inliningInfoTable);

                // Core library attributes are checked FAR more often than other dlls
                // attributes, so produce a highly efficient table for determining if they are
                // present. Other assemblies *MAY* benefit from this feature, but it doesn't show
                // as useful at this time.
                if (inputModule == TypeSystemContext.SystemModule)
                {
                    AttributePresenceFilterNode attributePresenceTable = new AttributePresenceFilterNode(inputModule);
                    Header.Add(Internal.Runtime.ReadyToRunSectionType.AttributePresence, attributePresenceTable, attributePresenceTable);
                }
            }

            InstanceEntryPointTable = new InstanceEntryPointTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.InstanceMethodEntryPoints, InstanceEntryPointTable, InstanceEntryPointTable);

            ImportSectionsTable = new ImportSectionsTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ImportSections, ImportSectionsTable, ImportSectionsTable.StartSymbol);

            DebugInfoTable = new DebugInfoTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.DebugInfo, DebugInfoTable, DebugInfoTable);

            EagerImports = new ImportSectionNode(
                "EagerImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_EAGER,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(EagerImports);

            // All ready-to-run images have a module import helper which gets patched by the runtime on image load
            ModuleImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                          ReadyToRunHelper.Module));
            graph.AddRoot(ModuleImport, "Module import is required by the R2R format spec");

            if (Target.Architecture != TargetArchitecture.X86)
            {
                Import personalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                 ReadyToRunHelper.PersonalityRoutine));
                PersonalityRoutine = new ImportThunk(this,
                                                     ReadyToRunHelper.PersonalityRoutine, EagerImports, useVirtualCall: false);
                graph.AddRoot(PersonalityRoutine, "Personality routine is faster to root early rather than referencing it from each unwind info");

                Import filterFuncletPersonalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                              ReadyToRunHelper.PersonalityRoutineFilterFunclet));
                FilterFuncletPersonalityRoutine = new ImportThunk(this,
                                                                  ReadyToRunHelper.PersonalityRoutineFilterFunclet, EagerImports, useVirtualCall: false);
                graph.AddRoot(FilterFuncletPersonalityRoutine, "Filter funclet personality routine is faster to root early rather than referencing it from each unwind info");
            }

            if ((ProfileDataManager != null) && (ProfileDataManager.EmbedPgoDataInR2RImage))
            {
                // Profile instrumentation data attaches here
                HashSet <MethodDesc> methodsToInsertInstrumentationDataFor = new HashSet <MethodDesc>();
                foreach (EcmaModule inputModule in CompilationModuleGroup.CompilationModuleSet)
                {
                    foreach (MethodDesc method in ProfileDataManager.GetMethodsForModuleDesc(inputModule))
                    {
                        if (ProfileDataManager[method].SchemaData != null)
                        {
                            methodsToInsertInstrumentationDataFor.Add(method);
                        }
                    }
                }
                if (methodsToInsertInstrumentationDataFor.Count != 0)
                {
                    MethodDesc[] methodsToInsert = methodsToInsertInstrumentationDataFor.ToArray();
                    methodsToInsert.MergeSort(new TypeSystemComparer().Compare);
                    InstrumentationDataTable = new InstrumentationDataTableNode(this, methodsToInsert, ProfileDataManager);
                    Header.Add(Internal.Runtime.ReadyToRunSectionType.PgoInstrumentationData, InstrumentationDataTable, InstrumentationDataTable);
                }
            }

            MethodImports = new ImportSectionNode(
                "MethodImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: true);
            ImportSectionsTable.AddEmbeddedObject(MethodImports);

            DispatchImports = new ImportSectionNode(
                "DispatchImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: true);
            ImportSectionsTable.AddEmbeddedObject(DispatchImports);

            HelperImports = new ImportSectionNode(
                "HelperImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(HelperImports);

            PrecodeImports = new ImportSectionNode(
                "PrecodeImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: true,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(PrecodeImports);

            StringImports = new ImportSectionNode(
                "StringImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STRING_HANDLE,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_UNKNOWN,
                (byte)Target.PointerSize,
                emitPrecode: true,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(StringImports);

            graph.AddRoot(ImportSectionsTable, "Import sections table is always generated");
            graph.AddRoot(ModuleImport, "Module import is always generated");
            graph.AddRoot(EagerImports, "Eager imports are always generated");
            graph.AddRoot(MethodImports, "Method imports are always generated");
            graph.AddRoot(DispatchImports, "Dispatch imports are always generated");
            graph.AddRoot(HelperImports, "Helper imports are always generated");
            graph.AddRoot(PrecodeImports, "Precode helper imports are always generated");
            graph.AddRoot(StringImports, "String imports are always generated");
            graph.AddRoot(Header, "ReadyToRunHeader is always generated");
            graph.AddRoot(CopiedCorHeaderNode, "MSIL COR header is always generated for R2R files");
            graph.AddRoot(DebugDirectoryNode, "Debug Directory will always contain at least one entry");

            if (Win32ResourcesNode != null)
            {
                graph.AddRoot(Win32ResourcesNode, "Win32 Resources are placed if not empty");
            }

            MetadataManager.AttachToDependencyGraph(graph);
        }
Exemple #17
0
        //private void Editor_TextChanged( object sender, EventArgs e )
        //{
        //if( disableTextChanged )
        //	return;

        //var newText = scriptEditorControl.Editor.Text;

        //if( Script.Code.Value != newText )
        //{
        //	var oldValue = Script.Code;

        //	//!!!!
        //	Script.DisableUpdate = true;

        //	Script.Code = newText;

        //	var undoItems = new List<UndoActionPropertiesChange.Item>();
        //	var property = (Metadata.Property)MetadataManager.GetTypeOfNetType(
        //		typeof( Component_CSharpScript ) ).MetadataGetMemberBySignature( "property:Code" );
        //	undoItems.Add( new UndoActionPropertiesChange.Item( Script, property, oldValue ) );

        //	var undoAction = new UndoActionPropertiesChange( undoItems );
        //	Document.CommitUndoAction( undoAction );

        //	//!!!!
        //	Log.Info( "undo added" );

        //	//!!!!
        //	scriptEditorControl.Editor.Document.UndoStack.ClearAll();
        //}
        //}

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!IsHandleCreated || WinFormsUtility.IsDesignerHosted(this) || EditorAPI.ClosingApplication)
            {
                return;
            }

            var newValue = scriptEditorControl.Editor.Text;

            if (sentTextToEngineUndoSystem != newValue)
            {
                sentTextToEngineUndoSystem = newValue;

                var oldValue = Script.Code;

                //!!!!в опции редактора
                var time = 3.0;
                disableUpdateRestoreTime = EngineApp.GetSystemTime() + time;
                Script.DisableUpdate     = true;

                if (newValue != Script.Code.Value)
                {
                    //update Code
                    Script.Code = newValue;

                    //add undo
                    var undoItems = new List <UndoActionPropertiesChange.Item>();
                    var property  = (Metadata.Property)MetadataManager.GetTypeOfNetType(
                        typeof(Component_CSharpScript)).MetadataGetMemberBySignature("property:Code");
                    undoItems.Add(new UndoActionPropertiesChange.Item(Script, property, oldValue));
                    var undoAction = new UndoActionPropertiesChange(undoItems);
                    Document.CommitUndoAction(undoAction);
                }
            }

            if (disableUpdateRestoreTime != 0 && EngineApp.GetSystemTime() > disableUpdateRestoreTime)
            {
                Script.DisableUpdate     = false;
                disableUpdateRestoreTime = 0;

                //to refresh preview texture
                Script.RaiseCodeChangedEventAndSetNeedUpdate();
            }


            //scriptEditorControl.Editor.Document.UndoStack.ClearAll();

            ////check for update Script.Code
            //{
            //	var editor = scriptEditorControl.Editor;
            //	if( Script.Code.Value != editor.Text )
            //	{
            //		////var caret = editor.TextArea.Caret.Location;
            //		//var selectionStart = editor.SelectionStart;
            //		//var selectionLength = editor.SelectionLength;

            //		disableTextChanged = true;

            //		//xx xx;
            //		editor.Document.Text = Script.Code.Value;
            //		scriptEditorControl.Editor.Document.UndoStack.ClearAll();
            //		disableTextChanged = false;

            //		//try
            //		//{
            //		//	//editor.TextArea.Caret.Location = caret;
            //		//	editor.Select( selectionStart, selectionLength );
            //		//}
            //		//catch { }
            //	}
            //}
        }
Exemple #18
0
        public void TestAlternateFormatsFailsGracefully()
        {
            var noAlternateFormats = MetadataManager.GetAlternateFormatsForCountry(999);

            Assert.Null(noAlternateFormats);
        }
Exemple #19
0
 public WebAssemblyCodegenNodeFactory(CompilerTypeSystemContext context, CompilationModuleGroup compilationModuleGroup, MetadataManager metadataManager,
                                      InteropStubManager interopStubManager, NameMangler nameMangler, VTableSliceProvider vtableSliceProvider, DictionaryLayoutProvider dictionaryLayoutProvider)
     : base(context,
            compilationModuleGroup,
            metadataManager,
            interopStubManager,
            nameMangler,
            new LazyGenericsDisabledPolicy(),
            vtableSliceProvider,
            dictionaryLayoutProvider,
            new ImportedNodeProviderThrowing())
 {
     _vTableSlotNodes = new NodeCache <MethodDesc, WebAssemblyVTableSlotNode>(methodKey =>
     {
         return(new WebAssemblyVTableSlotNode(methodKey));
     });
 }
Exemple #20
0
 public ILScanNodeFactory(CompilerTypeSystemContext context, CompilationModuleGroup compilationModuleGroup, MetadataManager metadataManager, InteropStubManager interopStubManager, NameMangler nameMangler)
     : base(context, compilationModuleGroup, metadataManager, interopStubManager, nameMangler, new LazyGenericsDisabledPolicy(), new LazyVTableSliceProvider(), new LazyDictionaryLayoutProvider(), new ExternSymbolsImportedNodeProvider())
 {
 }
        public override void AttachToDependencyGraph(DependencyAnalyzerBase <NodeFactory> graph)
        {
            Header = new HeaderNode(Target);

            var compilerIdentifierNode = new CompilerIdentifierNode(Target);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.CompilerIdentifier, compilerIdentifierNode, compilerIdentifierNode);

            RuntimeFunctionsTable = new RuntimeFunctionsTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.RuntimeFunctions, RuntimeFunctionsTable, RuntimeFunctionsTable);

            RuntimeFunctionsGCInfo = new RuntimeFunctionsGCInfoNode();
            graph.AddRoot(RuntimeFunctionsGCInfo, "GC info is always generated");

            ProfileDataSection = new ProfileDataSectionNode();
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ProfileDataInfo, ProfileDataSection, ProfileDataSection.StartSymbol);

            ExceptionInfoLookupTableNode exceptionInfoLookupTableNode = new ExceptionInfoLookupTableNode(this);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.ExceptionInfo, exceptionInfoLookupTableNode, exceptionInfoLookupTableNode);
            graph.AddRoot(exceptionInfoLookupTableNode, "ExceptionInfoLookupTable is always generated");

            MethodEntryPointTable = new MethodEntryPointTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.MethodDefEntryPoints, MethodEntryPointTable, MethodEntryPointTable);

            ManifestMetadataTable = new ManifestMetadataTableNode(InputModuleContext.GlobalContext, this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ManifestMetadata, ManifestMetadataTable, ManifestMetadataTable);

            Resolver.SetModuleIndexLookup(ManifestMetadataTable.ModuleToIndex);

            InstanceEntryPointTable = new InstanceEntryPointTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.InstanceMethodEntryPoints, InstanceEntryPointTable, InstanceEntryPointTable);

            TypesTable = new TypesTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.AvailableTypes, TypesTable, TypesTable);

            ImportSectionsTable = new ImportSectionsTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ImportSections, ImportSectionsTable, ImportSectionsTable.StartSymbol);

            DebugInfoTable = new DebugInfoTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.DebugInfo, DebugInfoTable, DebugInfoTable);

            // Core library attributes are checked FAR more often than other dlls
            // attributes, so produce a highly efficient table for determining if they are
            // present. Other assemblies *MAY* benefit from this feature, but it doesn't show
            // as useful at this time.
            if (this.AttributePresenceFilter != null)
            {
                Header.Add(Internal.Runtime.ReadyToRunSectionType.AttributePresence, AttributePresenceFilter, AttributePresenceFilter);
            }

            EagerImports = new ImportSectionNode(
                "EagerImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_EAGER,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(EagerImports);

            // All ready-to-run images have a module import helper which gets patched by the runtime on image load
            ModuleImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                          ReadyToRunHelper.Module));
            graph.AddRoot(ModuleImport, "Module import is required by the R2R format spec");

            if (Target.Architecture != TargetArchitecture.X86)
            {
                Import personalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                 ReadyToRunHelper.PersonalityRoutine));
                PersonalityRoutine = new ImportThunk(
                    ReadyToRunHelper.PersonalityRoutine, this, personalityRoutineImport, useVirtualCall: false);
                graph.AddRoot(PersonalityRoutine, "Personality routine is faster to root early rather than referencing it from each unwind info");

                Import filterFuncletPersonalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                              ReadyToRunHelper.PersonalityRoutineFilterFunclet));
                FilterFuncletPersonalityRoutine = new ImportThunk(
                    ReadyToRunHelper.PersonalityRoutineFilterFunclet, this, filterFuncletPersonalityRoutineImport, useVirtualCall: false);
                graph.AddRoot(FilterFuncletPersonalityRoutine, "Filter funclet personality routine is faster to root early rather than referencing it from each unwind info");
            }

            MethodImports = new ImportSectionNode(
                "MethodImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: true);
            ImportSectionsTable.AddEmbeddedObject(MethodImports);

            DispatchImports = new ImportSectionNode(
                "DispatchImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: true);
            ImportSectionsTable.AddEmbeddedObject(DispatchImports);

            HelperImports = new ImportSectionNode(
                "HelperImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(HelperImports);

            PrecodeImports = new ImportSectionNode(
                "PrecodeImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: true,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(PrecodeImports);

            StringImports = new ImportSectionNode(
                "StringImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STRING_HANDLE,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_UNKNOWN,
                (byte)Target.PointerSize,
                emitPrecode: true,
                emitGCRefMap: false);
            ImportSectionsTable.AddEmbeddedObject(StringImports);

            graph.AddRoot(ImportSectionsTable, "Import sections table is always generated");
            graph.AddRoot(ModuleImport, "Module import is always generated");
            graph.AddRoot(EagerImports, "Eager imports are always generated");
            graph.AddRoot(MethodImports, "Method imports are always generated");
            graph.AddRoot(DispatchImports, "Dispatch imports are always generated");
            graph.AddRoot(HelperImports, "Helper imports are always generated");
            graph.AddRoot(PrecodeImports, "Precode helper imports are always generated");
            graph.AddRoot(StringImports, "String imports are always generated");
            graph.AddRoot(Header, "ReadyToRunHeader is always generated");
            graph.AddRoot(CopiedCorHeaderNode, "MSIL COR header is always generated");

            if (Win32ResourcesNode != null)
            {
                graph.AddRoot(Win32ResourcesNode, "Win32 Resources are placed if not empty");
            }

            MetadataManager.AttachToDependencyGraph(graph);
        }
        public override void Register()
        {
            var types = new List <Metadata.TypeInfo>();

            types.Add(MetadataManager.GetTypeOfNetType(typeof(Component_Constraint2D_Revolute)));
            types.Add(MetadataManager.GetTypeOfNetType(typeof(Component_Constraint2D_Prismatic)));
            types.Add(MetadataManager.GetTypeOfNetType(typeof(Component_Constraint2D_Distance)));
            types.Add(MetadataManager.GetTypeOfNetType(typeof(Component_Constraint2D_Weld)));
            types.Add(MetadataManager.GetTypeOfNetType(typeof(Component_Constraint2D_Fixed)));

            foreach (var type in types)
            {
                var displayName = TypeUtility.GetUserFriendlyNameForInstanceOfType(type.GetNetType());

                var a = new EditorAction();
                a.Name = "Add " + displayName;
                //a.ImageSmall = Properties.Resources.New_16;
                //a.ImageBig = Properties.Resources.New_32;

                a.QatSupport = true;
                //a.qatAddByDefault = true;
                a.ContextMenuSupport = EditorContextMenuWinForms.MenuTypeEnum.Document;

                Component_PhysicalBody2D GetBody(object obj)
                {
                    if (obj is Component_PhysicalBody2D body)
                    {
                        return(body);
                    }

                    var c = obj as Component;

                    if (c != null)
                    {
                        var body2 = c.GetComponent <Component_PhysicalBody2D>();
                        if (body2 != null)
                        {
                            return(body2);
                        }
                    }

                    return(null);
                }

                a.GetState += delegate(EditorAction.GetStateContext context)
                {
                    if (context.ObjectsInFocus.DocumentWindow != null)
                    {
                        object[] selectedObjects = context.ObjectsInFocus.Objects;
                        if (selectedObjects.Length == 2)
                        {
                            var bodyA = GetBody(selectedObjects[0]);
                            var bodyB = GetBody(selectedObjects[1]);

                            if (bodyA != null && bodyB != null)
                            {
                                context.Enabled = true;
                            }
                            //if( selectedObjects[ 0 ] is Component_PhysicalBody2D && selectedObjects[ 1 ] is Component_PhysicalBody2D )
                            //	context.Enabled = true;
                        }
                    }
                };

                a.Click += delegate(EditorAction.ClickContext context)
                {
                    object[] selectedObjects = context.ObjectsInFocus.Objects;
                    if (selectedObjects.Length == 2)
                    {
                        var bodyA = GetBody(selectedObjects[0]);
                        var bodyB = GetBody(selectedObjects[1]);
                        //var bodyA = (Component_PhysicalBody2D)context.ObjectsInFocus.Objects[ 0 ];
                        //var bodyB = (Component_PhysicalBody2D)context.ObjectsInFocus.Objects[ 1 ];

                        var parent = ComponentUtility.FindNearestCommonParent(new Component[] { bodyA, bodyB });
                        if (parent != null)
                        {
                            var data = new NewObjectWindow.CreationDataClass();

                            data.initDocumentWindow = context.ObjectsInFocus.DocumentWindow;
                            data.initParentObjects  = new List <object>();
                            data.initParentObjects.Add(parent);
                            data.initLockType = type;

                            data.additionActionBeforeEnabled = delegate(NewObjectWindow window)
                            {
                                var constraint = (Component_Constraint2D)data.createdComponentsOnTopLevel[0];

                                constraint.BodyA = ReferenceUtility.MakeReference <Component_PhysicalBody2D>(
                                    null, ReferenceUtility.CalculateThisReference(constraint, bodyA));
                                constraint.BodyB = ReferenceUtility.MakeReference <Component_PhysicalBody2D>(
                                    null, ReferenceUtility.CalculateThisReference(constraint, bodyB));

                                if (constraint is Component_Constraint2D_Distance)
                                {
                                    var pos  = bodyA.Transform.Value.Position;
                                    var posB = bodyB.Transform.Value.Position;

                                    var distance = (posB - pos).Length();

                                    var rot = Quaternion.FromDirectionZAxisUp((posB - pos).GetNormalize());
                                    var scl = new Vector3(distance, distance, distance);

                                    constraint.Transform = new Transform(pos, rot, scl);
                                }
                                else
                                {
                                    var pos = (bodyA.Transform.Value.Position + bodyB.Transform.Value.Position) * 0.5;
                                    constraint.Transform = new Transform(pos, Quaternion.Identity);
                                }
                            };

                            EditorAPI.OpenNewObjectWindow(data);
                        }
                    }
                };

                EditorActions.Register(a);
            }
        }
Exemple #23
0
 public MetadataManagerTest()
 {
     _metadataManager = null;
 }
Exemple #24
0
        public override void AttachToDependencyGraph(DependencyAnalyzerBase <NodeFactory> graph)
        {
            Header = new HeaderNode(Target);

            var compilerIdentifierNode = new CompilerIdentifierNode(Target);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.CompilerIdentifier, compilerIdentifierNode, compilerIdentifierNode);

            RuntimeFunctionsTable = new RuntimeFunctionsTableNode(this);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.RuntimeFunctions, RuntimeFunctionsTable, RuntimeFunctionsTable);

            RuntimeFunctionsGCInfo = new RuntimeFunctionsGCInfoNode();
            graph.AddRoot(RuntimeFunctionsGCInfo, "GC info is always generated");

            ExceptionInfoLookupTableNode exceptionInfoLookupTableNode = new ExceptionInfoLookupTableNode(this);

            Header.Add(Internal.Runtime.ReadyToRunSectionType.ExceptionInfo, exceptionInfoLookupTableNode, exceptionInfoLookupTableNode);
            graph.AddRoot(exceptionInfoLookupTableNode, "ExceptionInfoLookupTable is always generated");

            MethodEntryPointTable = new MethodEntryPointTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.MethodDefEntryPoints, MethodEntryPointTable, MethodEntryPointTable);

            InstanceEntryPointTable = new InstanceEntryPointTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.InstanceMethodEntryPoints, InstanceEntryPointTable, InstanceEntryPointTable);

            TypesTable = new TypesTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.AvailableTypes, TypesTable, TypesTable);

            ImportSectionsTable = new ImportSectionsTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.ImportSections, ImportSectionsTable, ImportSectionsTable.StartSymbol);

            DebugInfoTable = new DebugInfoTableNode(Target);
            Header.Add(Internal.Runtime.ReadyToRunSectionType.DebugInfo, DebugInfoTable, DebugInfoTable);

            EagerImports = new ImportSectionNode(
                "EagerImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_EAGER,
                (byte)Target.PointerSize,
                emitPrecode: false);
            ImportSectionsTable.AddEmbeddedObject(EagerImports);

            // All ready-to-run images have a module import helper which gets patched by the runtime on image load
            ModuleImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                          ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_Module));
            graph.AddRoot(ModuleImport, "Module import is required by the R2R format spec");

            if (Target.Architecture != TargetArchitecture.X86)
            {
                Import personalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                 ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_PersonalityRoutine));
                PersonalityRoutine = new ImportThunk(
                    ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_PersonalityRoutine, this, personalityRoutineImport);
                graph.AddRoot(PersonalityRoutine, "Personality routine is faster to root early rather than referencing it from each unwind info");

                Import filterFuncletPersonalityRoutineImport = new Import(EagerImports, new ReadyToRunHelperSignature(
                                                                              ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_PersonalityRoutineFilterFunclet));
                FilterFuncletPersonalityRoutine = new ImportThunk(
                    ILCompiler.DependencyAnalysis.ReadyToRun.ReadyToRunHelper.READYTORUN_HELPER_PersonalityRoutineFilterFunclet, this, filterFuncletPersonalityRoutineImport);
                graph.AddRoot(FilterFuncletPersonalityRoutine, "Filter funclet personality routine is faster to root early rather than referencing it from each unwind info");
            }

            MethodImports = new ImportSectionNode(
                "MethodImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false);
            ImportSectionsTable.AddEmbeddedObject(MethodImports);

            DispatchImports = new ImportSectionNode(
                "DispatchImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STUB_DISPATCH,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false);
            ImportSectionsTable.AddEmbeddedObject(DispatchImports);

            HelperImports = new ImportSectionNode(
                "HelperImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: false);
            ImportSectionsTable.AddEmbeddedObject(HelperImports);

            PrecodeImports = new ImportSectionNode(
                "PrecodeImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_UNKNOWN,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_PCODE,
                (byte)Target.PointerSize,
                emitPrecode: true);
            ImportSectionsTable.AddEmbeddedObject(PrecodeImports);

            StringImports = new ImportSectionNode(
                "StringImports",
                CorCompileImportType.CORCOMPILE_IMPORT_TYPE_STRING_HANDLE,
                CorCompileImportFlags.CORCOMPILE_IMPORT_FLAGS_UNKNOWN,
                (byte)Target.PointerSize,
                emitPrecode: true);
            ImportSectionsTable.AddEmbeddedObject(StringImports);

            graph.AddRoot(ImportSectionsTable, "Import sections table is always generated");
            graph.AddRoot(ModuleImport, "Module import is always generated");
            graph.AddRoot(EagerImports, "Eager imports are always generated");
            graph.AddRoot(MethodImports, "Method imports are always generated");
            graph.AddRoot(DispatchImports, "Dispatch imports are always generated");
            graph.AddRoot(HelperImports, "Helper imports are always generated");
            graph.AddRoot(PrecodeImports, "Precode imports are always generated");
            graph.AddRoot(StringImports, "String imports are always generated");
            graph.AddRoot(Header, "ReadyToRunHeader is always generated");

            MetadataManager.AttachToDependencyGraph(graph);
        }
Exemple #25
0
        //!!!!new

        public static (Metadata.TypeInfo objectType, string referenceToObject) GetObjectToCreateByContentBrowserItem(ContentBrowser.Item item)
        {
            Metadata.TypeInfo objectType        = null;
            string            referenceToObject = "";
            //string memberFullSignature = "";
            //Component createNodeWithComponent = null;

            //!!!!не все итемы можно создать.

            //_Type
            var typeItem = item as ContentBrowserItem_Type;

            if (typeItem != null)
            {
                var type = typeItem.Type;

                //!!!!генериковому нужно указать типы

                if (MetadataManager.GetTypeOfNetType(typeof(Component)).IsAssignableFrom(type) && !type.Abstract)
                {
                    objectType = type;
                    //referenceToObject = objectType.Name;
                }
            }

            //!!!!
            //var memberItem = item as ContentBrowserItem_Member;
            //if( memberItem != null )
            //{
            //	var member = memberItem.Member;

            //	var type = member.Creator as Metadata.TypeInfo;
            //	if( type != null )
            //		memberFullSignature = string.Format( "{0}|{1}", type.Name, member.Signature );
            //}

            //_File
            var fileItem = item as ContentBrowserItem_File;

            if (fileItem != null && !fileItem.IsDirectory)
            {
                //!!!!не делать предпросмотр для сцены, т.к. долго. что еще?
                var ext = Path.GetExtension(fileItem.FullPath);
                if (ResourceManager.GetTypeByFileExtension(ext) != null)
                {
                    var res  = ResourceManager.GetByName(VirtualPathUtility.GetVirtualPathByReal(fileItem.FullPath));
                    var type = res?.PrimaryInstance?.ResultComponent?.GetProvidedType();
                    if (type != null)
                    {
                        objectType        = type;
                        referenceToObject = res.Name;
                    }
                }
            }

            //_Component
            var componentItem = item as ContentBrowserItem_Component;

            if (componentItem != null)
            {
                var component = componentItem.Component;

                if (component.ParentRoot.HierarchyController != null &&
                    component.ParentRoot.HierarchyController.CreatedByResource.InstanceType == Resource.InstanceType.Resource)
                {
                    objectType = component.GetProvidedType();
                    if (objectType != null)
                    {
                        referenceToObject = objectType.Name;
                    }
                }
                //else
                //{
                //if( Scene.ParentRoot == component.ParentRoot )
                //{
                //!!!!

                ////add node with component
                //createNodeWithComponent = component;
                //}
                //}
            }

            return(objectType, referenceToObject);
        }
Exemple #26
0
 /// <summary>
 /// Writes the definition of types in the XmlWriter
 /// </summary>
 /// <param name="xmlWriter">xmlWriter in which metadata needs to be written</param>
 /// <param name="types">resourceTypes whose metadata needs to be written</param>
 /// <param name="associationsInThisNamespace">list of associations in the current namespace.</param>
 /// <param name="metadataManager">metadata manager instance</param>
 private static void WriteTypes(
     XmlWriter xmlWriter,
     IEnumerable<ResourceType> types,
     Dictionary<string, ResourceAssociationType> associationsInThisNamespace,
     MetadataManager metadataManager)
 {
     foreach (ResourceType type in types)
     {
         if (ResourceTypeKind.EntityType == type.ResourceTypeKind)
         {
             WriteEntityType(xmlWriter, type, associationsInThisNamespace, metadataManager);
         }
         else
         {
             Debug.Assert(ResourceTypeKind.ComplexType == type.ResourceTypeKind, "this must be a complex type");
             WriteComplexType(xmlWriter, type, metadataManager);
         }
     }
 }
Exemple #27
0
        public override void Register()
        {
            //Add Constraint
            {
                var a = new EditorAction();
                //!!!!"New Constraint"?
                a.Name = "Add Constraint";
                //a.imageSmall = Properties.Resources.Save_16;
                //a.imageBig = Properties.Resources.Save_32;

                //!!!!выключить где-то?
                a.QatSupport = true;
                //a.qatAddByDefault = true;
                a.ContextMenuSupport = EditorContextMenu.MenuTypeEnum.Document;

                Component_PhysicalBody GetBody(object obj)
                {
                    if (obj is Component_PhysicalBody body)
                    {
                        return(body);
                    }

                    var c = obj as Component;

                    if (c != null)
                    {
                        var body2 = c.GetComponent <Component_PhysicalBody>();
                        if (body2 != null)
                        {
                            return(body2);
                        }
                    }

                    return(null);
                }

                a.GetState += delegate(EditorAction.GetStateContext context)
                {
                    if (context.ObjectsInFocus.DocumentWindow != null)
                    {
                        object[] selectedObjects = context.ObjectsInFocus.Objects;
                        if (selectedObjects.Length == 2)
                        {
                            var bodyA = GetBody(selectedObjects[0]);
                            var bodyB = GetBody(selectedObjects[1]);

                            if (bodyA != null && bodyB != null)
                            {
                                context.Enabled = true;
                            }
                            //if( selectedObjects[ 0 ] is Component_PhysicalBody && selectedObjects[ 1 ] is Component_PhysicalBody )
                            //	context.Enabled = true;
                        }
                    }
                };

                a.Click += delegate(EditorAction.ClickContext context)
                {
                    object[] selectedObjects = context.ObjectsInFocus.Objects;
                    if (selectedObjects.Length == 2)
                    {
                        var bodyA = GetBody(selectedObjects[0]);
                        var bodyB = GetBody(selectedObjects[1]);
                        //var bodyA = (Component_PhysicalBody)context.ObjectsInFocus.Objects[ 0 ];
                        //var bodyB = (Component_PhysicalBody)context.ObjectsInFocus.Objects[ 1 ];

                        var parent = ComponentUtility.FindNearestCommonParent(new Component[] { bodyA, bodyB });
                        if (parent != null)
                        {
                            var data = new NewObjectWindow.CreationDataClass();

                            data.initDocumentWindow = context.ObjectsInFocus.DocumentWindow;
                            data.initParentObjects  = new List <object>();
                            data.initParentObjects.Add(parent);
                            data.initLockType = MetadataManager.GetTypeOfNetType(typeof(Component_Constraint));
                            //data.initDemandedTypeDisableChange = true;

                            data.additionActionBeforeEnabled = delegate(NewObjectWindow window)
                            {
                                var constraint = (Component_Constraint)data.createdComponentsOnTopLevel[0];

                                constraint.BodyA = ReferenceUtility.MakeReference <Component_PhysicalBody>(
                                    null, ReferenceUtility.CalculateThisReference(constraint, bodyA));
                                constraint.BodyB = ReferenceUtility.MakeReference <Component_PhysicalBody>(
                                    null, ReferenceUtility.CalculateThisReference(constraint, bodyB));

                                var pos = (bodyA.Transform.Value.Position + bodyB.Transform.Value.Position) * 0.5;
                                constraint.Transform = new Transform(pos, Quaternion.Identity);
                            };

                            EditorAPI.OpenNewObjectWindow(data);
                        }
                    }
                };

                EditorActions.Register(a);
            }
        }
Exemple #28
0
        /// <summary>
        /// Write the metadata for the complexType in the xmlWriter
        /// </summary>
        /// <param name="xmlWriter">xmlWriter in which metadata needs to be written</param>
        /// <param name="complexType">complexType whose metadata needs to be written</param>
        /// <param name="metadataManager">metadata manager instance</param>
        private static void WriteComplexType(XmlWriter xmlWriter, ResourceType complexType, MetadataManager metadataManager)
        {
            Debug.Assert(xmlWriter != null, "XmlWriter cannot be null");
            Debug.Assert(complexType.ResourceTypeKind == ResourceTypeKind.ComplexType, "Type must be complexType");
            Debug.Assert(complexType.IsOpenType == false, "Complex types cannot be open.");

            xmlWriter.WriteStartElement(XmlConstants.ComplexType);
            xmlWriter.WriteAttributeString(XmlConstants.Name, XmlConvert.EncodeName(complexType.Name));
            WriteProperties(xmlWriter, complexType, null, metadataManager);
            xmlWriter.WriteEndElement();
        }
        private void Import()
        {
            if (txtImportFilePath.Text.Length == 0)
            {
                return;
            }

            if (!File.Exists(txtImportFilePath.Text))
            {
                MessageBox.Show(this, $"The file {txtImportFilePath.Text} does not exist!", "Error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            btnCancel.Visible = true;

            lblProgress.Text = "Deserializing file...";
            SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs("Deserializing file..."));

            EntityCollection ec;

            using (var reader = new StreamReader(txtImportFilePath.Text))
            {
                var serializer = new DataContractSerializer(typeof(EntityCollection), new List <Type> {
                    typeof(Entity)
                });
                ec = (EntityCollection)serializer.ReadObject(reader.BaseStream);
            }

            // References to websites
            var webSitesRefId = ec.Entities.SelectMany(e => e.Attributes)
                                .Where(a => a.Value is EntityReference reference && reference.LogicalName == "adx_website")
                                .Select(a => ((EntityReference)a.Value).Id)
                                .Distinct()
                                .ToList();

            // Websites included in records to process
            var webSitesIds = ec.Entities.Where(e => e.LogicalName == "adx_website")
                              .Select(e => e.Id)
                              .ToList();

            // If some references are not found in websites included in records
            // to process, ask the user to map to the appropriate website
            if (!webSitesRefId.All(id => webSitesIds.Contains(id)))
            {
                var targetWebSites = Service.RetrieveMultiple(new QueryExpression("adx_website")
                {
                    ColumnSet = new ColumnSet("adx_name")
                }).Entities;

                if (!webSitesRefId.All(id => targetWebSites.Select(w => w.Id).Contains(id)))
                {
                    var wsmDialog = new WebSiteMapper(ec, targetWebSites.Select(t => new Website(t)).ToList());
                    if (wsmDialog.ShowDialog() == DialogResult.Cancel)
                    {
                        return;
                    }
                }
            }

            if (ec.Entities.Any(e => e.LogicalName == "adx_webpage"))
            {
                var message =
                    "You are trying to import web pages. It is recommended to deactivate plugins steps related to this entity to ensure successful import. Do you want to deactivate these plugins ? \n\nNote: The plugins will be reactivated at the end of the import process";
                iSettings.DeactivateWebPagePlugins = MessageBox.Show(this, message, @"Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
                                                     DialogResult.Yes;
            }

            if (ec.Entities.Any(e => e.LogicalName == "annotation" && (e.GetAttributeValue <string>("filename")?.ToLower().EndsWith(".js") ?? false)) && nManager.HasJsRestriction)
            {
                var message =
                    "You are trying to import JavaScript note. It is recommended to remove JavaScript file type restriction to ensure successful import. Do you want to remove this restriction ? \n\nNote: The restriction will be added back at the end of the import process";
                iSettings.RemoveJavaScriptFileRestriction = MessageBox.Show(this, message, @"Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==
                                                            DialogResult.Yes;
            }

            btnImport.Enabled     = false;
            pnlImportMain.Visible = true;
            pbImport.IsOnError    = false;
            lvProgress.Items.Clear();

            var worker = new BackgroundWorker
            {
                WorkerReportsProgress      = true,
                WorkerSupportsCancellation = true
            };

            worker.DoWork += (s, evt) =>
            {
                importWorker = (BackgroundWorker)s;

                if (emds.Count == 0)
                {
                    importWorker.ReportProgress(0, "Retrieving metadata...");
                    emds = MetadataManager.GetEntitiesList(Service);
                }

                if (iSettings.DeactivateWebPagePlugins)
                {
                    importWorker.ReportProgress(0, "Deactivating Webpage plugins steps...");
                    logger.LogInfo("Deactivating Webpage plugins steps");

                    pManager = new PluginManager(Service);
                    pManager.DeactivateWebpagePlugins();

                    logger.LogInfo("Webpage plugins steps deactivated");
                }

                if (iSettings.RemoveJavaScriptFileRestriction && nManager.HasJsRestriction)
                {
                    logger.LogInfo("Removing JavaScript file restriction");

                    importWorker.ReportProgress(0, "Removing JavaScript file restriction...");
                    nManager.RemoveRestriction();

                    // Wait 2 seconds to be sure the settings is updated
                    Thread.Sleep(2000);

                    logger.LogInfo("JavaScript file restriction removed");
                }

                importWorker.ReportProgress(0, "Processing records...");

                var rm = new RecordManager(Service);
                evt.Cancel = rm.ProcessRecords((EntityCollection)evt.Argument, emds, ConnectionDetail.OrganizationMajorVersion, importWorker);

                if (iSettings.DeactivateWebPagePlugins)
                {
                    importWorker.ReportProgress(0, "Reactivating Webpage plugins steps...");
                    logger.LogInfo("Reactivating Webpage plugins steps");

                    pManager.ActivateWebpagePlugins();

                    logger.LogInfo("Webpage plugins steps activated");
                }

                if (iSettings.RemoveJavaScriptFileRestriction && nManager.HasJsRestriction)
                {
                    logger.LogInfo("Adding back JavaScript file restriction");

                    importWorker.ReportProgress(0, "Adding back JavaScript file restriction...");
                    nManager.AddRestriction();

                    logger.LogInfo("JavaScript file restriction added back");
                }
            };
            worker.RunWorkerCompleted += (s, evt) =>
            {
                SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(string.Empty));
                lblProgress.Text      = "Records imported!";
                llOpenLogFile.Visible = true;

                btnImportClose.Enabled = true;
                btnImport.Enabled      = true;
                btnCancel.Visible      = false;

                if (evt.Cancelled)
                {
                    lblProgress.Text = "Import was canceled!";
                    return;
                }

                if (evt.Error != null)
                {
                    MessageBox.Show(this, $"An error occured: {evt.Error.Message}", "Error", MessageBoxButtons.OK,
                                    MessageBoxIcon.Error);
                    return;
                }

                if (pbImport.IsOnError)
                {
                    MessageBox.Show(this, "Import complete with errors\n\nPlease review the logs", "Information", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    MessageBox.Show(this, "Import complete", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            };
            worker.ProgressChanged += (s, evt) =>
            {
                if (evt.UserState is string)
                {
                    lblProgress.Text = evt.UserState.ToString();
                    SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(evt.UserState.ToString()));
                }
                else
                {
                    var progress = evt.UserState as ImportProgress;
                    if (progress != null)
                    {
                        foreach (var ep in progress.Entities)
                        {
                            var item = lvProgress.Items.Cast <ListViewItem>().FirstOrDefault(i => i.Tag.ToString() == ep.LogicalName);
                            if (item == null)
                            {
                                item = new ListViewItem($"{ep.Entity} ({ep.Count})")
                                {
                                    Tag = ep.LogicalName
                                };
                                item.SubItems.Add(ep.SuccessFirstPhase.ToString());
                                item.SubItems.Add(ep.ErrorFirstPhase.ToString());
                                item.SubItems.AddRange(new[] { "", "", "", "" });

                                if (ep.SuccessSecondPhase.HasValue || ep.ErrorSecondPhase.HasValue)
                                {
                                    item.SubItems[3].Text = (ep.SuccessSecondPhase ?? 0).ToString();
                                    item.SubItems[4].Text = (ep.ErrorSecondPhase ?? 0).ToString();
                                }

                                if (ep.SuccessSetStatePhase.HasValue || ep.ErrorSetState.HasValue)
                                {
                                    item.SubItems[5].Text = (ep.SuccessSetStatePhase ?? 0).ToString();
                                    item.SubItems[6].Text = (ep.ErrorSetState ?? 0).ToString();
                                }

                                lvProgress.Items.Add(item);
                            }
                            else
                            {
                                item.SubItems[1].Text = ep.SuccessFirstPhase.ToString();
                                item.SubItems[2].Text = ep.ErrorFirstPhase.ToString();

                                if (ep.SuccessSecondPhase.HasValue || ep.ErrorSecondPhase.HasValue)
                                {
                                    item.SubItems[3].Text = (ep.SuccessSecondPhase ?? 0).ToString();
                                    item.SubItems[4].Text = (ep.ErrorSecondPhase ?? 0).ToString();
                                }

                                if (ep.SuccessSetStatePhase.HasValue || ep.ErrorSetState.HasValue)
                                {
                                    item.SubItems[5].Text = (ep.SuccessSetStatePhase ?? 0).ToString();
                                    item.SubItems[6].Text = (ep.ErrorSetState ?? 0).ToString();
                                }
                            }

                            if (ep.ErrorFirstPhase > 0 || ep.ErrorSecondPhase > 0 || ep.ErrorSetState > 0)
                            {
                                pbImport.IsOnError = true;
                            }

                            pbImport.Value = progress.Entities.Sum(ent => ent.Processed) * 100 / progress.Count;
                        }
                    }
                }
            };
            worker.RunWorkerAsync(ec);
        }
Exemple #30
0
        private void Connect()
        {
            Site SP3DSite = null;
              SP3DSite = MiddleServiceProvider.SiteMgr.ConnectSite();

              if (SP3DSite != null)
              {
            if( SP3DSite.Plants.Count > 0 )
              MiddleServiceProvider.SiteMgr.ActiveSite.OpenPlant((Plant)SP3DSite.Plants[0]);
              }

              Catalog SP3DCatalog = null;
              SP3DCatalog = MiddleServiceProvider.SiteMgr.ActiveSite.ActivePlant.PlantCatalog;
              metadataManager = SP3DCatalog.MetadataMgr;

              //string displayName, name, showupMsg = "", category, iid, interfaceInfoNamespace, propertyName, propertyDescriber;
              //string propertyInterfaceInformationStr, unitTypeString;
              //Type type;
              //ReadOnlyDictionary<InterfaceInformation> interfactInfo, commonInterfaceInfo;
              //ReadOnlyDictionary<PropertyInformation> properties;
              //ReadOnlyDictionary<BOCInformation> oSystemsByName = metadataManager.BOCs;
              //bool complex, comAccess, displayedOnPage, isvalueRequired, metaDataAccess, metadataReadOnly, SqlAccess;
              //string propertyDisplayName, proPropertyName, uomType;
              //CodelistInformation codeListInfo;
              //InterfaceInformation propertyInterfaceInformation;
              //SP3DPropType sp3dProType;
              //UnitType unitType;
              //string showupPropertyMessage = "";
              //string showupProMsg = "";
              //foreach (string key in oSystemsByName.Keys)
              //{
              //  BOCInformation bocInfo = null;
              //  oSystemsByName.TryGetValue(key, out bocInfo);
              //  displayName = bocInfo.DisplayName;
              //  name = bocInfo.Name;
              //  type = bocInfo.GetType();
              //  interfactInfo = bocInfo.DefiningInterfaces;
              //  foreach (string infoKey in interfactInfo.Keys)
              //  {
              //    InterfaceInformation itemInterfaceInfo;
              //    interfactInfo.TryGetValue(infoKey, out itemInterfaceInfo);
              //    interfaceInfoNamespace = itemInterfaceInfo.Namespace;
              //    category = itemInterfaceInfo.Category;
              //    iid = itemInterfaceInfo.IID;
              //    properties = itemInterfaceInfo.Properties;

              //    foreach (string propertyKey in properties.Keys)
              //    {
              //      PropertyInformation propertyInfo;
              //      properties.TryGetValue(propertyKey, out propertyInfo);
              //      complex = propertyInfo.Complex;

              //      codeListInfo = propertyInfo.CodeListInfo;
              //      comAccess = propertyInfo.COMAccess;
              //      displayedOnPage = propertyInfo.DisplayedOnPropertyPage;
              //      propertyDisplayName = propertyInfo.DisplayName;
              //      propertyInterfaceInformation = propertyInfo.InterfaceInfo;
              //      propertyInterfaceInformationStr = propertyInterfaceInformation.ToString();
              //      isvalueRequired = propertyInfo.IsValueRequired;
              //      metaDataAccess = propertyInfo.MetadataAccess;
              //      metadataReadOnly = propertyInfo.MetadataReadOnly;
              //      proPropertyName = propertyInfo.Name;
              //      sp3dProType = propertyInfo.PropertyType;
              //      SqlAccess = propertyInfo.SQLAccess;
              //      unitType = propertyInfo.UOMType;
              //      unitTypeString = unitType.ToString();

              //      showupPropertyMessage = showupPropertyMessage + "\n propertyInfo.key: " + propertyKey + "\n"
              //                            + "CodeListInfo.DisplayName: " + codeListInfo.DisplayName + "\n"
              //                            + "comAccess: " + comAccess + "\n"
              //                            + "propertyDisplayName: " + propertyDisplayName + "\n"
              //                            + "propertyInterfaceInformation: " + propertyInterfaceInformation.Name + "\n"
              //                            + "proPropertyName: " + proPropertyName;

              //    }
              //  }

              //  commonInterfaceInfo = bocInfo.CommonInterfaces;
              //  foreach (string comInfoKey in commonInterfaceInfo.Keys)
              //  {
              //    InterfaceInformation comItemInterfaceInfo;
              //    commonInterfaceInfo.TryGetValue(comInfoKey, out comItemInterfaceInfo);
              //    interfaceInfoNamespace = comItemInterfaceInfo.Namespace;
              //    category = comItemInterfaceInfo.Category;
              //    iid = comItemInterfaceInfo.IID;
              //    properties = comItemInterfaceInfo.Properties;

              //    foreach (string propertyKey in properties.Keys)
              //    {
              //      PropertyInformation propertyInfo;
              //      properties.TryGetValue(propertyKey, out propertyInfo);
              //      complex = propertyInfo.Complex;

              //      codeListInfo = propertyInfo.CodeListInfo;
              //      comAccess = propertyInfo.COMAccess;
              //      displayedOnPage = propertyInfo.DisplayedOnPropertyPage;
              //      propertyDisplayName = propertyInfo.DisplayName;
              //      propertyInterfaceInformation = propertyInfo.InterfaceInfo;
              //      propertyInterfaceInformationStr = propertyInterfaceInformation.ToString();
              //      isvalueRequired = propertyInfo.IsValueRequired;
              //      metaDataAccess = propertyInfo.MetadataAccess;
              //      metadataReadOnly = propertyInfo.MetadataReadOnly;
              //      proPropertyName = propertyInfo.Name;
              //      sp3dProType = propertyInfo.PropertyType;
              //      SqlAccess = propertyInfo.SQLAccess;
              //      unitType = propertyInfo.UOMType;
              //      unitTypeString = unitType.ToString();

              //      showupProMsg = showupProMsg + "\n propertyInfo.key: " + propertyKey + "\n"
              //                            + "CodeListInfo.DisplayName: " + codeListInfo.DisplayName + "\n"
              //                            + "comAccess: " + comAccess + "\n"
              //                            + "propertyDisplayName: " + propertyDisplayName + "\n"
              //                            + "propertyInterfaceInformation: " + propertyInterfaceInformation.Name + "\n"
              //                            + "proPropertyName: " + proPropertyName;

              //    }

              //  }

              //  showupMsg = showupMsg + "\n bocInfo.key: " + key + "\n"
              //            + "bocInfo.DisplayName: " + displayName + "\n"
              //            + "bocInfo.Name: " + name + "\n"
              //            + "bocInfo.type: " + type.FullName + "\n"
              //           // + "bocInfo.DefiningInterfaces: " + showupPropertyMessage + "\n"
              //            + "bocInfo.commonInterfaceInfo: " + showupProMsg + "\n";

              //}
              //File.WriteAllText(@"C:\temp\sp3d.txt", showupMsg);

              //System.Windows.Forms.MessageBox.Show(showupMsg);
              //oSystemsByName
        }
Exemple #31
0
 public VoiceAssistantWorker(SocketGuildUser user, VoiceChannelWorker voiceChannelWorker, MetadataManager metadataManager, WitAiClient witAiClient)
 {
     _voiceChannelWorker = voiceChannelWorker;
     _metadataManager    = metadataManager;
     _witAiClient        = witAiClient;
     _user = user;
 }