/// <summary> /// Mapea el tipo actual del nodo, al atributo TipoNodo del objeto Nodo /// </summary> /// <param name="propiedadesDeserializadas"></param> /// <param name="nodoListo"></param> /// <returns></returns> private async static Task AñadirTipoPersonalizado(dynamic propiedadesDeserializadas, Nodo nodoListo) { string prefijoModeloNodo = nodoListo.NodeType.Split(':')[0]; string nombreTipoNodo = nodoListo.NodeType.Split(':')[1]; //Si no existe el modelo, entonces no se añade el tipo personalizado Model modelo = await ModelosPersonalizadosStatic.ObtenerModeloPersonalizadoxPrefijo(prefijoModeloNodo); if (!(modelo is null)) { Modelos.CMM.Type tipoNodo = await TiposPersonalizadosStatic.ObtenerTipoPersonalizado(modelo.Name, nombreTipoNodo); string nodoPropertiesJson = JsonConvert.SerializeObject(propiedadesDeserializadas); Dictionary <string, dynamic> nodoProperties = JsonConvert.DeserializeObject <Dictionary <string, dynamic> >(nodoPropertiesJson); if (!(nodoProperties is null)) { foreach (var propiedad in nodoProperties) { Property propiedadTemp = tipoNodo.Properties.Find(x => x.PrefixedName == propiedad.Key); if (!(propiedadTemp is null)) { propiedadTemp.Value = propiedad.Value; continue; } } } tipoNodo.ModeloPerteneciente = modelo; nodoListo.TipoNodo = tipoNodo; } }
/// <summary> /// Mapea Aspectos y sus propiedades de un Nodo JSON a los Aspectos y sus propiedades de un Objeto Nodo /// </summary> /// <param name="propiedadesDeserializadas">Nodo JSON con metadatos de descarga</param> /// <param name="nodoListo">Objeto Nodo, deserializado pero aun sin Aspectos. Se le añadirá sus Aspectos</param> private static async Task AñadirAspectos(dynamic propiedadesDeserializadas, Nodo nodoListo) { List <string> nodoAspectnames = (List <string>)nodoListo.AspectNames; List <Aspect> aspectosNodo = new List <Aspect>(); List <Aspect> aspectosDisponibles = Aspect.Aspects(); foreach (var aspecto in nodoAspectnames) { foreach (var aspectoDisponible in aspectosDisponibles) { if (aspectoDisponible.Name.Equals(aspecto)) { aspectosNodo.Add(aspectoDisponible); break; } } } //Mapeo de aspectos personalizados List <Aspect> aspectosFaltantes = new List <Aspect>(); foreach (var aspectoNoMap in nodoAspectnames) { if (aspectosNodo.Find(x => x.Name == aspectoNoMap) is null) { string prefijoModelodesdeAspecto = aspectoNoMap.Split(':')[0]; string nombreAspecto = aspectoNoMap.Split(':')[1]; if ((await ModelosPersonalizadosStatic.ObtenerModeloPersonalizadoxPrefijo(prefijoModelodesdeAspecto) is null)) { continue; } Model modelo = await ModelosPersonalizadosStatic.ObtenerModeloPersonalizadoxPrefijo(prefijoModelodesdeAspecto); Aspect aspectoPersonalizado = await AspectosPersonalizadosStatic.ObtenerAspectoPersonalizado(modelo.Name, nombreAspecto); aspectoPersonalizado.Showable = true; aspectosFaltantes.Add(aspectoPersonalizado); } } if (aspectosFaltantes.Count != 0) { aspectosNodo.AddRange(aspectosFaltantes); } //Properties de Aspectos: AñadirPropsAspectos(propiedadesDeserializadas, aspectosNodo, nodoListo); }