示例#1
0
		private static bool IsTypeDefined(ClassDeclaration c, List<ResourceType> complexTypeResources, List<ResourceType> entityResources, Dictionary<string, Schema.AssociationType> associationResources)
		{
			Func<ResourceType, bool> func = null;
			Func<ResourceType, bool> func1 = null;
			SchemaLoader.ClassCategory category = c.GetCategory();
			switch (category)
			{
				case SchemaLoader.ClassCategory.Complex:
				{
					object obj = null;
					List<ResourceType> resourceTypes = complexTypeResources;
					if (func1 == null)
					{
						func1 = (ResourceType it) => string.Equals(it.FullName, SchemaLoader.TransformCimNameToCsdl(c.Name.FullName, true));
					}
					return obj != resourceTypes.FirstOrDefault<ResourceType>(func1);
				}
				case SchemaLoader.ClassCategory.Entity:
				{
					object obj1 = null;
					List<ResourceType> resourceTypes1 = entityResources;
					if (func == null)
					{
						func = (ResourceType it) => string.Equals(it.FullName, SchemaLoader.TransformCimNameToCsdl(c.Name.FullName, true));
					}
					return obj1 != resourceTypes1.FirstOrDefault<ResourceType>(func);
				}
				case SchemaLoader.ClassCategory.Association:
				{
					return associationResources.Keys.Contains<string>(SchemaLoader.TransformCimNameToCsdl(c.Name.FullName, true));
				}
			}
			throw new NotImplementedException(string.Concat("class category ", c.GetCategory()));
		}
示例#2
0
		private static void CreateResourceType(ClassDeclaration c, HashSet<MofProduction> mof, Schema schema, List<ResourceType> complexTypeResources, List<ResourceType> entityResources)
		{
			Func<MofProduction, bool> func = null;
			if (!SchemaLoader.IsTypeDefined(c, complexTypeResources, entityResources, schema.AssociationTypes))
			{
				if (!c.IsClassAndSuperclassesContainsLoop(mof))
				{
					SchemaLoader.ClassCategory category = c.GetCategory();
					ResourceType resourceType = null;
					if (c.SuperclassName != null)
					{
						HashSet<MofProduction> mofProductions = mof;
						if (func == null)
						{
							func = (MofProduction item) => string.Equals(c.SuperclassName.FullName, item.GetFullClassName(), StringComparison.Ordinal);
						}
						ClassDeclaration classDeclaration = mofProductions.FirstOrDefault<MofProduction>(func) as ClassDeclaration;
						if (classDeclaration != null)
						{
							SchemaLoader.ClassCategory classCategory = classDeclaration.GetCategory();
							if (category == classCategory)
							{
								if (!SchemaLoader.IsTypeDefined(classDeclaration, complexTypeResources, entityResources, schema.AssociationTypes))
								{
									SchemaLoader.CreateResourceType(classDeclaration, mof, schema, complexTypeResources, entityResources);
								}
								if (!schema.ResourceTypes.TryGetValue(SchemaLoader.TransformCimNameToCsdl(classDeclaration.Name.FullName, true), out resourceType))
								{
									object[] fullName = new object[2];
									fullName[0] = classDeclaration.Name.FullName;
									fullName[1] = c.Name.FullName;
									throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.BaseClassNotFound, fullName));
								}
							}
							else
							{
								object[] superclassName = new object[2];
								superclassName[0] = c.Name.FullName;
								superclassName[1] = c.SuperclassName;
								throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.CrossCategoryDerivation, superclassName));
							}
						}
						else
						{
							object[] objArray = new object[2];
							objArray[0] = c.Name.FullName;
							objArray[1] = c.SuperclassName;
							throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.MissingBaseClass, objArray));
						}
					}
					SchemaLoader.ClassCategory category1 = c.GetCategory();
					switch (category1)
					{
						case SchemaLoader.ClassCategory.Complex:
						{
							complexTypeResources.Add(schema.AddResourceType(c.Name.Identifier, ResourceTypeKind.ComplexType, SchemaLoader.TransformCimNameToCsdl(c.Name.Schema, false), resourceType, null));
							return;
						}
						case SchemaLoader.ClassCategory.Entity:
						{
							entityResources.Add(schema.AddResourceType(c.Name.Identifier, ResourceTypeKind.EntityType, SchemaLoader.TransformCimNameToCsdl(c.Name.Schema, false), resourceType, null));
							return;
						}
						case SchemaLoader.ClassCategory.Association:
						{
							schema.AddAssociationType(SchemaLoader.TransformCimNameToCsdl(c.Name.Identifier, false), SchemaLoader.TransformCimNameToCsdl(c.Name.Schema, false));
							return;
						}
					}
					throw new NotImplementedException(string.Concat("class category ", c.GetCategory()));
				}
				else
				{
					object[] identifier = new object[1];
					identifier[0] = c.Name.Identifier;
					throw new MetadataException(ExceptionHelpers.GetExceptionMessage(Resources.BaseClassesNotPresentOrRecursive, identifier));
				}
			}
			else
			{
				return;
			}
		}