public ZEdgeConnectivityRule(ZGeometricNetwork geometricNetwork, IEdgeConnectivityRule edgeConnectivityRule)
            : base(edgeConnectivityRule as IRule)
        {
            // Initialize collection
            this.Junctions = new ObservableCollection<ZSubtype>();

            // Get From Edge
            ZSubtype zSubtypeEdge1 = geometricNetwork.FindSubtype(edgeConnectivityRule.FromEdgeClassID, edgeConnectivityRule.FromEdgeSubtypeCode);
            this.FromEdge = zSubtypeEdge1;

            // Get To Edge
            ZSubtype zSubtypeEdge2 = geometricNetwork.FindSubtype(edgeConnectivityRule.ToEdgeClassID, edgeConnectivityRule.ToEdgeSubtypeCode);
            this.ToEdge = zSubtypeEdge2;

            // Loop for each junction
            for (int i = 0; i < edgeConnectivityRule.JunctionCount; i++) {
                // Get junction feature class
                ZSubtype zSubtypeJunction = geometricNetwork.FindSubtype(edgeConnectivityRule.get_JunctionClassID(i), edgeConnectivityRule.get_JunctionSubtypeCode(i));

                // Add junction
                this.Junctions.Add(zSubtypeJunction);
            }

            // Store default
            this.DefaultJunction = geometricNetwork.FindSubtype(edgeConnectivityRule.DefaultJunctionClassID, edgeConnectivityRule.DefaultJunctionSubtypeCode);
        }
        public ZJunctionConnectivityRule(ZGeometricNetwork geometricNetwork, IJunctionConnectivityRule junctionConnectivityRule)
            : base(junctionConnectivityRule as IRule)
        {
            // Get Edge
            ZSubtype zSubtypeEdge = geometricNetwork.FindSubtype(junctionConnectivityRule.EdgeClassID, junctionConnectivityRule.EdgeSubtypeCode);
            this.Edge = zSubtypeEdge;

            // Get Junction
            ZSubtype zSubtypeJunction = geometricNetwork.FindSubtype(junctionConnectivityRule.JunctionClassID, junctionConnectivityRule.JunctionSubtypeCode);
            this.Junction = zSubtypeJunction;

            // Get Cardinality
            this.EdgeMinimum = junctionConnectivityRule.EdgeMinimumCardinality;
            this.EdgeMaximum = junctionConnectivityRule.EdgeMaximumCardinality;
            this.JunctionMinimum = junctionConnectivityRule.JunctionMinimumCardinality;
            this.JunctionMaximum = junctionConnectivityRule.JunctionMaximumCardinality;

            // Get
            IJunctionConnectivityRule2 junctionConnectivityRule2 = (IJunctionConnectivityRule2)junctionConnectivityRule;
            this.IsDefault = junctionConnectivityRule2.DefaultJunction;
        }