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));
     }
 }
예제 #2
0
        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);
        }