コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
        /// <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);
        }