internal static MapDTOToDomainFactoryBase GetFactoryFor(EnumDomain model) { switch (model) { case EnumDomain.UserDTO: return new UserDTOToUserEntityFactory(); default: throw new NotImplementedException(string.Format("The factory for type {0} is not implemented.", model)); } }
private static String ImportModel(XmlElement modelgraph, String modelname) { IDMap idmap = new IDMap(); int nextenumval = 1000; foreach (XmlElement nodeelem in modelgraph.GetElementsByTagName("node")) { String nodetype = GetTypeName(nodeelem); // skip unknown elements int hashchar = nodetype.IndexOf('#'); if (hashchar == -1 || !nodetype.Substring(0, hashchar).EndsWith("gxl-1.0.gxl")) { continue; } String id = nodeelem.GetAttribute("id"); nodetype = nodetype.Substring(hashchar + 1); switch (nodetype) { case "Bool": idmap[id] = new Thing(id, ThingKind.Domain, "boolean"); break; case "Int": idmap[id] = new Thing(id, ThingKind.Domain, "int"); break; case "Float": idmap[id] = new Thing(id, ThingKind.Domain, "double"); break; case "String": idmap[id] = new Thing(id, ThingKind.Domain, "string"); break; case "Enum": { String name; if (id.StartsWith("DM_enum_")) { name = id.Substring(8); } else { name = id; } idmap[id] = new Thing(id, ThingKind.EnumDomain, new EnumDomain(name)); break; } case "EnumVal": { int val; if (id.StartsWith("EV_")) { int ind = id.IndexOf('_', 4); if (id[3] == '_') { val = -int.Parse(id.Substring(4, ind - 4)); } else { val = int.Parse(id.Substring(3, ind - 3)); } } else { val = nextenumval++; } String name = GetGXLAttr(nodeelem, "value", "string"); idmap[id] = new Thing(id, ThingKind.EnumValue, new EnumMember(val, name)); break; } case "AttributeClass": { String name = GetGXLAttr(nodeelem, "name", "string"); idmap[id] = new Thing(id, ThingKind.AttributeClass, new AttributeClass(name)); break; } case "NodeClass": { String name = GetGXLAttr(nodeelem, "name", "string"); bool isabstract = GetGXLAttr(nodeelem, "isabstract", "bool") == "true"; idmap[id] = new Thing(id, ThingKind.NodeClass, new NodeClass(name, isabstract)); break; } case "EdgeClass": { String name = GetGXLAttr(nodeelem, "name", "string"); bool isabstract = GetGXLAttr(nodeelem, "isabstract", "bool") == "true"; bool isdirected = GetGXLAttr(nodeelem, "isdirected", "bool") == "true"; idmap[id] = new Thing(id, ThingKind.EdgeClass, new EdgeClass(name, isabstract, isdirected)); break; } } } foreach (XmlElement edgeelem in modelgraph.GetElementsByTagName("edge")) { String edgetype = GetTypeName(edgeelem); // skip unknown elements int hashchar = edgetype.IndexOf('#'); if (hashchar == -1 || !edgetype.Substring(0, hashchar).EndsWith("gxl-1.0.gxl")) { continue; } String fromid = edgeelem.GetAttribute("from"); String toid = edgeelem.GetAttribute("to"); edgetype = edgetype.Substring(hashchar + 1); switch (edgetype) { case "hasDomain": { AttributeClass attrClass = idmap[fromid].AttributeClass; String attrKind = idmap[toid].AttributeKind; attrClass.Type = attrKind; break; } case "containsValue": { EnumDomain enumDomain = idmap[fromid].EnumDomain; EnumMember enumMember = idmap[toid].EnumValue; enumDomain.Members.Add(enumMember); break; } case "isA": { NodeClass nodeClass = idmap[fromid].NodeOrEdgeClass; nodeClass.SuperClasses.Add(toid); break; } case "hasAttribute": { NodeClass nodeClass = idmap[fromid].NodeOrEdgeClass; AttributeClass attrClass = idmap[toid].AttributeClass; nodeClass.AttrList.Add(attrClass); break; } } } String model = BuildModel(idmap); String modelfilename = modelname + "__gxl.gm"; using (StreamWriter writer = new StreamWriter(modelfilename)) writer.Write(model); return(modelfilename); }