Ejemplo n.º 1
0
        /// <summary>
        /// Gets the correct Trie node type for the given segment
        /// </summary>
        /// <param name="parent">Parent node</param>
        /// <param name="segment">Segment</param>
        /// <returns>TrieNode instance</returns>
        public virtual TrieNode GetNodeForSegment(TrieNode parent, string segment)
        {
            if (parent == null)
            {
                return new RootNode(this);
            }

            var chars = segment.ToCharArray();
            var start = chars[0];
            var end = chars[chars.Length - 1];

            if (start == '(' && end == ')')
            {
                return new RegExNode(parent, segment, this);
            }

            if (start == '{' && end == '}' && chars.Count(c => c == '{' || c == '}') == 2)
            {
                return this.GetCaptureNode(parent, segment);
            }

            if (segment.StartsWith("^(") && (segment.EndsWith(")") || segment.EndsWith(")$")))
            {
                return new GreedyRegExCaptureNode(parent, segment, this);
            }

            if (CaptureNodeWithMultipleParameters.IsMatch(segment))
            {
                return new CaptureNodeWithMultipleParameters(parent, segment, this);
            }

            return new LiteralNode(parent, segment, this);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the correct Trie node type for the given segment
        /// </summary>
        /// <param name="parent">Parent node</param>
        /// <param name="segment">Segment</param>
        /// <returns>TrieNode instance</returns>
        public virtual TrieNode GetNodeForSegment(TrieNode parent, string segment)
        {
            if (parent == null)
            {
                return new RootNode(this);
            }

            if (segment.StartsWith("(") && segment.EndsWith(")"))
            {
                return new RegExNode(parent, segment, this);
            }

            if (segment.StartsWith("{") && segment.EndsWith("}"))
            {
                return this.GetCaptureNode(parent, segment);
            }

            if (segment.StartsWith("^(") && (segment.EndsWith(")") || segment.EndsWith(")$")))
            {
                return new GreedyRegExCaptureNode(parent, segment, this);
            }

            if (CaptureNodeWithLiteral.MatchRegex.IsMatch(segment))
            {
              return new CaptureNodeWithLiteral(parent, segment, this);
            }

            return new LiteralNode(parent, segment, this);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TrieNode"/> class
        /// </summary>
        /// <param name="parent">Parent node</param>
        /// <param name="segment">Segment of the route definition</param>
        /// <param name="nodeFactory">Factory for creating new nodes</param>
        protected TrieNode(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
        {
            this.nodeFactory = nodeFactory;
            this.Parent = parent;
            this.RouteDefinitionSegment = segment;

            this.Children = new Dictionary<string, TrieNode>(StaticConfiguration.CaseSensitive ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase);
            this.AdditionalParameters = new Dictionary<string, object>();
            this.NodeData = new List<NodeData>();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TrieNode"/> class
        /// </summary>
        /// <param name="parent">Parent node</param>
        /// <param name="segment">Segment of the route definition</param>
        /// <param name="nodeFactory">Factory for creating new nodes</param>
        protected TrieNode(TrieNode parent, string segment, TrieNodeFactory nodeFactory)
        {
            this.nodeFactory = nodeFactory;
            this.Parent = parent;
            this.RouteDefinitionSegment = segment;

            this.Children = new Dictionary<string, TrieNode>();
            this.AdditionalParameters = new Dictionary<string, object>();
            this.NodeData = new List<NodeData>();
        }
Ejemplo n.º 5
0
        private TrieNode GetCaptureNode(TrieNode parent, string segment)
        {
            if (segment.EndsWith("?}"))
            {
                return new OptionalCaptureNode(parent, segment, this);
            }

            if (segment.EndsWith("*}"))
            {
                return new GreedyCaptureNode(parent, segment, this);
            }

            if (segment.Contains("?"))
            {
                return new CaptureNodeWithDefaultValue(parent, segment, this);
            }

            return new CaptureNode(parent, segment, this);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Gets the correct Trie node type for the given segment
        /// </summary>
        /// <param name="parent">Parent node</param>
        /// <param name="segment">Segment</param>
        /// <returns>TrieNode instance</returns>
        public TrieNode GetNodeForSegment(TrieNode parent, string segment)
        {
            if (parent == null)
            {
                return new RootNode(this);
            }

            if (segment.StartsWith("(") && segment.EndsWith(")"))
            {
                return new RegExNode(parent, segment, this);
            }

            if (segment.StartsWith("{") && segment.EndsWith("}"))
            {
                return this.GetCaptureNode(parent, segment);
            }

            return new LiteralNode(parent, segment, this);
        }
Ejemplo n.º 7
0
 public LiteralNode(TrieNode parent, string segment, TrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
 }
Ejemplo n.º 8
0
 public OptionalCaptureNode(TrieNode parent, string segment, TrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.ExtractParameterName();
 }
Ejemplo n.º 9
0
 public CaptureNodeWithConstraint(TrieNode parent, string segment, ITrieNodeFactory nodeFactory, IEnumerable<IRouteSegmentConstraint> routeSegmentConstraints)
     : base(parent, segment, nodeFactory)
 {
     this.routeSegmentConstraints = routeSegmentConstraints;
     this.ExtractParameterName();
 }
 public CaptureNodeWithDefaultValue(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.ExtractParameterNameAndDefaultValue();
 }
Ejemplo n.º 11
0
 public GreedyRegExCaptureNode(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.BuildRegEx();
 }
Ejemplo n.º 12
0
 public CaptureNodeWithLiteral(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.ExtractParameterName();
 }
Ejemplo n.º 13
0
 public CaptureNodeWithLiteral(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.ExtractParameterName();
 }
 public CaptureNodeWithConstraint(TrieNode parent, string segment, ITrieNodeFactory nodeFactory, IEnumerable <IRouteSegmentConstraint> routeSegmentConstraints)
     : base(parent, segment, nodeFactory)
 {
     this.routeSegmentConstraints = routeSegmentConstraints;
     this.ExtractParameterName();
 }
Ejemplo n.º 15
0
 public RegExNode(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.BuildRegEx();
 }
Ejemplo n.º 16
0
 public RegExNode(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.BuildRegEx();
 }
 /// <summary>
 /// Captures parameters within segments that contain literals.
 ///     i.e:
 ///         /{file}.{name}
 ///         /{file}.html
 ///         /{major}.{minor}.{revision}B{build}
 /// </summary>
 /// <param name="parent">The parent node</param>
 /// <param name="segment">The segment to match upon</param>
 /// <param name="nodeFactory">The factory</param>
 public CaptureNodeWithMultipleParameters(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.ExtractParameterNames();
 }
Ejemplo n.º 18
0
 public GreedyCaptureNode(TrieNode parent, string segment, TrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.GetParameterName();
 }
Ejemplo n.º 19
0
 public GreedyCaptureNode(TrieNode parent, string segment, ITrieNodeFactory nodeFactory)
     : base(parent, segment, nodeFactory)
 {
     this.GetParameterName();
 }