Class ChannelId
Reification of a channel id with methods to test properties
and compare with other ChannelIds.
A ChannelId breaks the channel id into path segments so that, for example,
/foo/bar breaks into ["foo","bar"].
ChannelId can be wild, when they end with one or two wild characters "*";
a ChannelId is shallow wild if it ends with one wild character (for example /foo/bar/*)
and deep wild if it ends with two wild characters (for example /foo/bar/**).
ChannelId can be a template, when a segment contains variable names surrounded by
braces, for example /foo/{var_name}. Variable names can only be made of characters
defined by the \w regular expression character class.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionIf thisChannelIdis a template, and the giventargetChannelIdis non-wild and non-template, and the two have the samedepth(), then binds the variable(s) defined in this template with the values of the segments defined by the targetChannelId.intdepth()booleangetId()Returns the normalized channel id string.Returns the regular part of this ChannelId: the part of the channel id from the beginning until the first occurrence of a parameter or a wild character.getSegment(int i) getWilds()inthashCode()booleanbooleanstatic booleanisBroadcast(String channelId) booleanbooleanisMeta()AChannelIdis a metaChannelIdif it starts with"/meta/".static booleanbooleanisParentOf(ChannelId id) booleanAChannelIdis a serviceChannelIdif it starts with"/service/".static booleanbooleanbooleanbooleanisWild()booleanTests whether thisChannelIdmatches the givenChannelId.toString()
-
Field Details
-
WILD
- See Also:
-
DEEPWILD
- See Also:
-
-
Constructor Details
-
ChannelId
Constructs a newChannelIdwith the given id- Parameters:
id- the channel id in string form
-
-
Method Details
-
getId
Returns the normalized channel id string.
Normalization involves trimming white spaces and removing trailing slashes.
- Returns:
- the normalized channel id string
-
isWild
public boolean isWild()- Returns:
- whether this
ChannelIdis eithershallow wildordeep wild
-
isShallowWild
public boolean isShallowWild()Shallow wild
ChannelIds end with a single wild character"*"andmatchnon wild channels with the samedepth.Example:
/foo/*matches/foo/bar, but not/foo/bar/baz.- Returns:
- whether this
ChannelIdis a shallow wild channel id
-
isDeepWild
public boolean isDeepWild()Deep wild
ChannelIds end with a double wild character "**" andmatchnon wild channels with the same or greaterdepth.Example:
/foo/**matches/foo/barand/foo/bar/baz.- Returns:
- whether this
ChannelIdis a deep wild channel id
-
isMeta
public boolean isMeta()A
ChannelIdis a metaChannelIdif it starts with"/meta/".- Returns:
- whether the first segment is "meta"
-
isService
public boolean isService()A
ChannelIdis a serviceChannelIdif it starts with"/service/".- Returns:
- whether the first segment is "service"
-
isBroadcast
public boolean isBroadcast() -
isTemplate
public boolean isTemplate()- Returns:
- whether this
ChannelIdis a template, that is it contains segments that identify a variable name between braces, such as/foo/{var_name}. - See Also:
-
getParameters
- Returns:
- the list of variable names if this ChannelId is a template, otherwise an empty list.
- See Also:
-
equals
-
hashCode
public int hashCode() -
matches
Tests whether this
ChannelIdmatches the givenChannelId.If the given
ChannelIdiswild, then it matches only if it is equal to thisChannelId.If this
ChannelIdis non-wild, then it matches only if it is equal to the givenChannelId.Otherwise, this
ChannelIdis either shallow or deep wild, and matchesChannelIds with the same number of equal segments (if it is shallow wild), orChannelIds with the same or a greater number of equal segments (if it is deep wild).- Parameters:
channelId- the channelId to match- Returns:
- true if this
ChannelIdmatches the givenChannelId
-
bind
If this
ChannelIdis a template, and the giventargetChannelIdis non-wild and non-template, and the two have the samedepth(), then binds the variable(s) defined in this template with the values of the segments defined by the targetChannelId.For example:
// template and target match. Map<String, String> bindings = new ChannelId("/a/{var1}/c/{var2}").bind(new ChannelId("/a/foo/c/bar")); bindings: {"var1": "foo", "var2": "bar"} // template has 2 segments, target has only 1 segment. bindings = new ChannelId("/a/{var1}").bind(new ChannelId("/a")) bindings = {} // template has 2 segments, target too many segments. bindings = new ChannelId("/a/{var1}").bind(new ChannelId("/a/b/c")) bindings = {} // same number of segments, but no match on non-variable segments. bindings = new ChannelId("/a/{var1}").bind(new ChannelId("/b/c")) bindings = {}The returned map may not preserve the order of variables present in the template
ChannelId.- Parameters:
target- the non-wild, non-templateChannelIdto bind- Returns:
- a map withe the bindings, or an empty map if no binding was possible
- See Also:
-
toString
-
depth
public int depth()- Returns:
- how many segments this
ChannelIdis made of - See Also:
-
isAncestorOf
- Parameters:
id- the channel to test- Returns:
- whether this
ChannelIdis an ancestor of the givenChannelId - See Also:
-
isParentOf
- Parameters:
id- the channel to test- Returns:
- whether this
ChannelIdis the parent of the givenChannelId - See Also:
-
getParent
- Returns:
- the channel string parent of this
ChannelId, or null if thisChannelIdhas only one segment - See Also:
-
getSegment
- Parameters:
i- the segment index- Returns:
- the i-nth segment of this channel, or null if no such segment exist
- See Also:
-
getWilds
- Returns:
- The list of wilds channels that match this channel, or the empty list if this channel is already wild.
-
getRegularPart
Returns the regular part of this ChannelId: the part of the channel id from the beginning until the first occurrence of a parameter or a wild character.
Examples:
ChannelId.regularPart Examples Channel Regular Part /foo /foo /foo/* /foo /foo/bar/** /foo/bar /foo/{p} /foo /foo/bar/{p} /foo/bar /* null/** null/{p} null- Returns:
- the regular part of this channel
-
isMeta
Helper method to test if the string form of a
ChannelIdrepresents ametaChannelId.- Parameters:
channelId- the channel id to test- Returns:
- whether the given channel id is a meta channel id
-
isService
Helper method to test if the string form of a
ChannelIdrepresents aserviceChannelId.- Parameters:
channelId- the channel id to test- Returns:
- whether the given channel id is a service channel id
-
isBroadcast
Helper method to test if the string form of a
ChannelIdrepresents abroadcastChannelId.- Parameters:
channelId- the channel id to test- Returns:
- whether the given channel id is a broadcast channel id
-