private void LoadVisioFile() { var filepath = m_visioFileTextBox.Text; Microsoft.Office.Interop.Visio.Application visio = null; Microsoft.Office.Interop.Visio.Document doc = null; try { if (!filepath.EndsWith(".vsd") || !System.IO.File.Exists(filepath)) { return; } m_lcStates = new List <string>(); m_lcTrans = new List <Pair>(); visio = new Microsoft.Office.Interop.Visio.Application(); doc = visio.Documents.Open(filepath); var page = doc.Pages[1]; var connectorMap = new Dictionary <string, ConnectorInfo>(); foreach (Microsoft.Office.Interop.Visio.Shape shape in page.Shapes) { if (shape.Name.StartsWith("Process")) { if (m_lcStates.Contains(shape.Text)) { throw new Exception("Each state name must be unique. " + "State " + shape.Text + " shows up multiple times."); } m_lcStates.Add(shape.Text); } else if (shape.Name.StartsWith("Dynamic connector")) { foreach (Connect connect in shape.Connects) { string fromName = connect.FromCell.Shape.Name; string toText = connect.ToCell.Shape.Text; Cell endArrow = connect.FromSheet.get_Cells("EndArrow"); Cell beginArrow = connect.FromSheet.get_Cells("BeginArrow"); ConnectorInfo info = null; if (connectorMap.ContainsKey(fromName)) { info = connectorMap[fromName]; } else { info = new ConnectorInfo(fromName); connectorMap.Add(fromName, info); } bool hasArrow = !beginArrow.Formula.StartsWith("THEME"); info.AddConnection(toText, hasArrow); } } } Dictionary <string, ConnectorInfo> .Enumerator enumerator = connectorMap.GetEnumerator(); while (enumerator.MoveNext()) { ConnectorInfo info = enumerator.Current.Value; if (info.ShapeNames.Count != 2) { continue; } // the default connector if (!info.HasArrows[0] && !info.HasArrows[1]) { AddPair(new Pair(info.ShapeNames[0], info.ShapeNames[1])); } if (info.HasArrows[0]) { AddPair(new Pair(info.ShapeNames[0], info.ShapeNames[1])); } // the arrow goes the other way too if (info.HasArrows[1]) { AddPair(new Pair(info.ShapeNames[1], info.ShapeNames[0])); } } } catch (Exception e) { m_lcStates = null; m_lcTrans = null; MessageBox.Show("Exception thrown: " + e.Message); } finally { if (doc != null) { doc.Close(); } if (visio != null) { visio.Quit(); } } }
/// <summary> /// Loads a Visio file, reads values from the 'States' and 'Transitions' contained within. /// </summary> /// <returns>Returns true if no errors were encountered.</returns> private bool LoadVisioFileAlex() { bool returnval = true; string filepath = m_visioFileTextBox.Text; Microsoft.Office.Interop.Visio.Application visio = null; Document doc = null; //try //{ if (!filepath.EndsWith(".vsd") || !System.IO.File.Exists(filepath)) { return(false); } _statesList = new List <State>(); _transitionsList = new List <Transition>(); _shapetextlist = new List <string>(); m_lcTrans = new List <Pair>(); State _State; var _Trans = new Transition(null, null, null, null); var newACEs = new Dictionary <long, _ACE>(); //Cell customPropertyCell = null; //string teststr = null; visio = new Microsoft.Office.Interop.Visio.Application(); doc = visio.Documents.Open(filepath); var page = doc.Pages[1]; var connectorMap = new Dictionary <string, ConnectorInfo>(); foreach (Shape shape in page.Shapes) { if (shape.Name.StartsWith("Admin") || shape.Name.StartsWith("QA") || shape.Name.StartsWith("Design")) { _State = new State(); _State.Statename = shape.Text; //_State.Statename = ReadANamedCustomProperty(shape, DisplayName, true); if (_State.Statename == null) { continue; } if (_shapetextlist.Contains(shape.Text)) { throw new Exception("Each state name must be unique. " + "State " + shape.Text + " shows up multiple times."); } //Users allowed to have this permission in each state. var tmpACEUsers = ReadANamedCustomProperty(shape, AccessControlEntryUsers, true); if (tmpACEUsers.Contains(",")) { var tmpACEusers = tmpACEUsers.Split(','); foreach (var user in tmpACEusers) { _State.AccessControlEntryUserGroups.Add(Convert.ToInt64(user)); } } else { _State.AccessControlEntryUserGroups.Add(Convert.ToInt64(tmpACEUsers)); } // Permissions for each State. var tmpACEPermissions = ReadANamedCustomProperty(shape, AccessControlEntryPermissions, true); _State.AccessControlEntry = AssignACEPermissions(_State.Statename, tmpACEPermissions, _State.AccessControlEntryUserGroups); var comments = ReadANamedCustomProperty(shape, Comments, true); if (comments.Contains(";")) { var tmpcomments = comments.Split(';'); _State.Comments.Add(Convert.ToString(tmpcomments)); } else { _State.Comments.Add(comments); } //_State.Comments = ReadANamedCustomProp(shape, _comments, true); if (ReadANamedCustomProperty(shape, IsDefault, true).ToUpper() == Str.ToUpper()) { _State.IsDefault = true; } else { _State.IsDefault = false; } if (ReadANamedCustomProperty(shape, IsReleasedState, true).ToUpper() == Str.ToUpper()) { _State.IsReleasedState = true; } else { _State.IsReleasedState = false; } switch (ReadANamedCustomProperty(shape, MyRestrictPurgeOption, true)) { case ".All": _State.RestrictPurgeOption = RestrictPurgeOption.All; break; case ".FirstAndLast": _State.RestrictPurgeOption = RestrictPurgeOption.FirstAndLast; break; case ".Last": _State.RestrictPurgeOption = RestrictPurgeOption.Last; break; case ".None": _State.RestrictPurgeOption = RestrictPurgeOption.None; break; } _State.StateDescription = ReadANamedCustomProperty(shape, Description, true); if (ReadANamedCustomProperty(shape, UseStateBasedSecurity, true).ToUpper() == Str.ToUpper()) { _State.UseStateBasedSecurity = true; } else { _State.UseStateBasedSecurity = false; } if (shape.Text != null) { _shapetextlist.Add(shape.Text); _statesList.Add(_State); } } else if (shape.Name.StartsWith("Dynamic connector")) { _Trans = new Transition(null, null, null, null); foreach (Microsoft.Office.Interop.Visio.Connect connect in shape.Connects) { var fromtext = connect.FromCell.Shape.Text; var fromname = connect.FromCell.Shape.Name; var totext = connect.ToCell.Shape.Text; _Trans.FromStateName = fromtext; _Trans.ToStateName = totext; _Trans.ReverseFromStateName = totext; _Trans.ReverseToStateName = fromtext; var tmpallowedusers = ReadANamedCustomProperty(shape, AllowedUserIds, true); if (tmpallowedusers.Contains(",")) { var tmpAllowedUsers = tmpallowedusers.Split(','); foreach (var tmpstr in tmpAllowedUsers) { _Trans.AllowedUserIds.Add(Convert.ToInt64(tmpstr)); } } else { _Trans.AllowedUserIds.Add(Convert.ToInt64(tmpallowedusers)); } var tmpdeniedusers = ReadANamedCustomProperty(shape, DeniedUserIds, true); if (tmpdeniedusers.Contains(",")) { var tmpDeniedUsers = tmpdeniedusers.Split(','); foreach (var tmpstr in tmpDeniedUsers) { _Trans.DeniedUserIds.Add(Convert.ToInt64(tmpstr)); } } else { _Trans.DeniedUserIds.Add(Convert.ToInt64(tmpdeniedusers)); } switch (ReadANamedCustomProperty(shape, SyncPropOption, true)) { case "None": _Trans.SyncPropOption = JobSyncPropEnum.None; break; case "SysncPropAndUpdateView": _Trans.SyncPropOption = JobSyncPropEnum.SyncPropAndUpdateView; break; case "SyncPropOnly": _Trans.SyncPropOption = JobSyncPropEnum.SyncPropOnly; break; } if (ReadANamedCustomProperty(shape, EnforceChildStateSync, true).ToUpper() == Str.ToUpper()) { _Trans.EnforceChildStateSync = true; } else { _Trans.EnforceChildStateSync = false; } if (ReadANamedCustomProperty(shape, UseTransitionBasedSecurity, true).ToUpper() == Str.ToUpper()) { _Trans.UseTransitionBasedSecurity = true; } else { _Trans.UseTransitionBasedSecurity = false; } switch (ReadANamedCustomProperty(shape, BumpRevision, true)) { case ".BumpPrimary": _Trans.BumpRevision = BumpRevisionEnum.BumpPrimary; break; case ".BumpSecondary": _Trans.BumpRevision = BumpRevisionEnum.BumpSecondary; break; case ".BumpTertiary": _Trans.BumpRevision = BumpRevisionEnum.BumpTertiary; break; case ".None": _Trans.BumpRevision = BumpRevisionEnum.None; break; } var endarrow = connect.FromSheet.Cells["endarrow"]; var beginarrow = connect.FromSheet.Cells["beginarrow"]; ConnectorInfo info = null; if (connectorMap.ContainsKey(fromname)) { info = connectorMap[fromname]; } else { info = new ConnectorInfo(fromname); connectorMap.Add(fromname, info); } var hasarrow = !beginarrow.Formula.StartsWith("theme"); info.AddConnection(totext, hasarrow); if (info.ShapeNames.Count > 1) { if (info.ShapeNames[1] == _Trans.ToStateName) { _Trans.FromStateName = info.ShapeNames[0]; _Trans.ReverseToStateName = _Trans.FromStateName; _transitionsList.Add(_Trans); } } } } } Dictionary <string, ConnectorInfo> .Enumerator enumerator = connectorMap.GetEnumerator(); while (enumerator.MoveNext()) { ConnectorInfo info = enumerator.Current.Value; if (info.ShapeNames.Count != 2) { continue; } // the default connector if (!info.HasArrows[0] && !info.HasArrows[1]) { AddPair(new Pair(info.ShapeNames[0], info.ShapeNames[1])); } if (info.HasArrows[0]) { AddPair(new Pair(info.ShapeNames[0], info.ShapeNames[1])); } // the arrow goes the other way too if (info.HasArrows[1]) { AddPair(new Pair(info.ShapeNames[1], info.ShapeNames[0])); } } //} //catch (Exception e) //{ // m_lcStates = null; // m_lcTrans = null; // MessageBox.Show("Exception thrown: " + e.Message); // returnval = false; //} //finally //{ if (doc != null) { doc.Close(); } if (visio != null) { visio.Quit(); } //} return(returnval); }