private static GraphMapData GetClusteredGraph(GraphMapData graphMapData, GraphComponents graphComponents) { GraphMapData graphComponentsMapData = new GraphMapData(); IEnumerable <INodeShape> clusteredComponents = graphComponents.GetNodeViewModels(); foreach (PartitionNode clusteredComponent in clusteredComponents) { NodeMapData nodeMapData = new TextNodeMapData(clusteredComponent.ID); graphComponentsMapData.Add(nodeMapData); // Properties object[] dimensionAndPosition = GetPartitionNodeDimensionAndPosition(graphMapData, clusteredComponent); nodeMapData.Dimension = (Size)dimensionAndPosition[0]; nodeMapData.Position = (Point)dimensionAndPosition[1]; nodeMapData.IsHidden = clusteredComponent.IsHidden; IEnumerable <IEdge> clusteredComponentEdges = graphComponents.GetEdges(clusteredComponent); foreach (IEdge clusteredComponentEdge in clusteredComponentEdges) { EdgeMapData edgeMapData = new EdgeMapData(clusteredComponentEdge.Source.ID, clusteredComponentEdge.Target.ID); graphComponentsMapData.Add(edgeMapData); } } return(graphComponentsMapData); }
public static NodeMapData GetNode(NodeViewModelBase uiNodeVM) { NodeMapData objNode; if (uiNodeVM.GetType().Equals(typeof(IconNodeViewModel))) { objNode = new IconNodeMapData(uiNodeVM.ParentNode.ID); // Property IconNodeViewModel iconNodeVM = (IconNodeViewModel)uiNodeVM; if (iconNodeVM.ImageSource != null) { ((IconNodeMapData)objNode).ImageSource = new System.Uri(iconNodeVM.ImageSource, UriKind.Relative); } } else { objNode = new TextNodeMapData(uiNodeVM.ParentNode.ID); } // Properties objNode.Description = uiNodeVM.Description; objNode.Label = uiNodeVM.DisplayValue; Size dimension = new Size(uiNodeVM.Width, uiNodeVM.Height); objNode.Dimension = dimension; objNode.Position = uiNodeVM.Position; objNode.IsHidden = uiNodeVM.IsHidden; objNode.BackgroundColor = uiNodeVM.BackgroundColor.Color; objNode.SelectionColor = uiNodeVM.SelectionColor.Color; // Attributes foreach (KeyValuePair <string, AttributeValue> uiNodeVMAttrKVP in uiNodeVM.ParentNode.Attributes) { Attributes.Attribute uiNodeVMAttribute = GlobalAttributeCollection.GetInstance(uiNodeVM.Scope).GetAttribute(uiNodeVMAttrKVP.Key); AttributeMapData objNodeAttribute = new AttributeMapData(uiNodeVMAttrKVP.Key, uiNodeVMAttrKVP.Value.Value); objNode.Attributes.Add(objNodeAttribute.Name, objNodeAttribute); objNodeAttribute.SemanticType = uiNodeVMAttribute.SemanticType; objNodeAttribute.SimilarityMeasure = uiNodeVMAttribute.PreferredSimilarityMeasure; objNodeAttribute.IsHidden = !uiNodeVMAttribute.Visible; } return(objNode); }
/// <summary> /// Returns bare-bone graph needed for layouts /// </summary> /// <param name="graphComponents">GraphComponents</param> /// <returns>GraphMapData</returns> public static GraphMapData GetGraph(GraphComponents graphComponents) { GraphMapData graph = new GraphMapData(); // Nodes IEnumerable <INodeShape> uiNodeViewModels = graphComponents.GetNodeViewModels(); foreach (NodeViewModelBase uiNodeVM in uiNodeViewModels) { NodeMapData objNode = new TextNodeMapData(uiNodeVM.ParentNode.ID); graph.Add(objNode); // Properties Size dimension = new Size(uiNodeVM.Width, uiNodeVM.Height); objNode.Dimension = dimension; objNode.Position = uiNodeVM.Position; objNode.IsHidden = uiNodeVM.IsHidden; } // Edges IEnumerable <IEdgeViewModel> uiEdgeViewModels = graphComponents.GetEdgeViewModels(); foreach (EdgeViewModelBase uiEdgeVM in uiEdgeViewModels) { EdgeMapData objEdge = new EdgeMapData(uiEdgeVM.ParentEdge.Source.ID, uiEdgeVM.ParentEdge.Target.ID); graph.Add(objEdge); // Properties objEdge.Type = uiEdgeVM.ParentEdge.Type; SimilarityDataEdge uiSDE = uiEdgeVM.ParentEdge as SimilarityDataEdge; if (uiSDE != null) { objEdge.Weight = uiSDE.Weight; } } return(graph); }
/*/// <summary> * /// Gets the default edge type (direction) to be used in the * /// event that the 'directed' attribute of an edge is not included * /// </summary> * /// <param name="defaultEdgeType">The value of the edgedefault attribute</param> * private static GraphType GetDefaultEdgeType(string defaultEdgeType) * { * GraphType determinedEdgeType = GraphType.Undirected; * * if (defaultEdgeType != null && defaultEdgeType.ToLower().Equals("directed")) * { * determinedEdgeType = GraphType.Directed; * } * * return determinedEdgeType; * }*/ /// <summary> /// Reads an XML node from the specified XmlReader /// </summary> /// <param name="reader">Reader from which to read the node from</param> private NodeMapData ReadNode(XmlReader reader, NodeTypes defaultNodeType) { NodeMapData objNode; string nodeId = reader.GetAttribute("id"); if (defaultNodeType == NodeTypes.Icon) { objNode = new IconNodeMapData(nodeId); } else { objNode = new TextNodeMapData(nodeId); } if (reader.ReadToDescendant("data")) { Attributes.Attribute newAttribute = null; AttributeValue newAttributeValue = null; // Loop over all data elements. These are the attributes do { // Record the attributes string dataKey = reader.GetAttribute("key"); string dataValue = reader.ReadElementContentAsString(); // Determine if we are dealing with a node property if (dataKey.StartsWith(NODE_PROPERTY_PREFIX)) { string propName = dataKey.Substring(NODE_PROPERTY_PREFIX.Length); switch (propName) { case "Description": objNode.Description = dataValue; break; case "DisplayValue": objNode.Label = dataValue; break; case "SelectionColor": SolidColorBrush selectionColor = Conversion.HexColorToBrush(dataValue); objNode.SelectionColor = selectionColor.Color; break; case "ImageSource": ((IconNodeMapData)objNode).ImageSource = new Uri(dataValue, UriKind.RelativeOrAbsolute); break; case "Height": double height = double.Parse(dataValue); objNode.Dimension = new Size(objNode.Dimension.Width, height); break; case "Width": double width = double.Parse(dataValue); objNode.Dimension = new Size(width, objNode.Dimension.Height); break; case "Position": string[] splitPosition = dataValue.Split(','); objNode.Position = new Point(double.Parse(splitPosition[0]), double.Parse(splitPosition[1])); break; case "IsHidden": objNode.IsHidden = bool.Parse(dataValue); break; case "BackgroundColor": SolidColorBrush backgroundColor = Conversion.HexColorToBrush(dataValue); objNode.BackgroundColor = backgroundColor.Color; break; default: // TODO prop is for a different version of SnagL break; } // TODO do we only want to do whats above when what is commented out below fails? /*// Attempt to set the node propety * if ((SetExportablePropertyValue(dataKey, objNode, dataValue))) * _logger.WriteLogEntry(LogLevel.INFO, string.Format("The Node property [{0}] was set to '{1}'", dataKey, dataValue), null, null); * else * { * // The property might be for the view model so try * // and set the view model * if ((SetExportablePropertyValue(dataKey, objNode, dataValue))) * _logger.WriteLogEntry(LogLevel.INFO, string.Format("The NodeVM property [{0}] was set to '{1}'", dataKey, dataValue), null, null); * else * _logger.WriteLogEntry(LogLevel.ERROR, string.Format("Unable to set the property [{0}] to the specified value [{1}]", dataKey, dataValue), null, null); * }*/ } else // Determine if we are dealing with an attribute { if (dataKey.StartsWith(NODE_ATTRIBUTE_PREFIX)) { // Determine if we are dealing with a descriptor or a value if (dataKey.EndsWith(ATTRIBUTE_DESCRIPTOR_SUFFIX)) { newAttribute = CreateAttribute(dataValue); } else if (dataKey.EndsWith(ATTRIBUTE_VALUE_SUFFIX)) { newAttributeValue = new AttributeValue(dataValue); } } else // If we are here, we are not dealing with SnagL formatted GraphML { // We are dealing with an unknown data element so we // are going to treat it like a new attribute // Determine if we are dealing with a descriptor or a value newAttribute = new Attributes.Attribute(dataKey); newAttributeValue = new AttributeValue(dataValue); } // Check if we have a valid Attribute and AttributeValue class if (newAttribute != null && newAttributeValue != null) { AttributeMapData objAttribute = new AttributeMapData(newAttribute.Name, newAttributeValue.Value); objNode.Attributes.Add(objAttribute.Name, objAttribute); objAttribute.SemanticType = newAttribute.SemanticType; objAttribute.SimilarityMeasure = newAttribute.PreferredSimilarityMeasure; objAttribute.IsHidden = !newAttribute.Visible; newAttribute = null; newAttributeValue = null; } } } while (reader.LocalName == "data" || (string.IsNullOrEmpty(reader.LocalName) && reader.ReadToNextSibling("data"))); } return(objNode); }