1 | |
package org.jbehave.core.model; |
2 | |
|
3 | |
import java.util.HashMap; |
4 | |
import java.util.Map; |
5 | |
import java.util.regex.Matcher; |
6 | |
import java.util.regex.Pattern; |
7 | |
|
8 | |
import org.apache.commons.lang.StringUtils; |
9 | |
import org.apache.commons.lang.builder.ToStringBuilder; |
10 | |
import org.apache.commons.lang.builder.ToStringStyle; |
11 | |
|
12 | |
import static java.util.regex.Pattern.DOTALL; |
13 | |
import static java.util.regex.Pattern.compile; |
14 | |
|
15 | |
public class GivenStory { |
16 | |
|
17 | |
private static final String PATH_REGEX = "(.*)\\#\\{(.*?)\\}"; |
18 | |
private static final String PARAMETERS_REGEX = ".*(\\:|\\;).*"; |
19 | |
private final String givenStoryAsString; |
20 | 59 | private Map<String, String> parameters = new HashMap<String, String>(); |
21 | |
private String path; |
22 | |
private String anchor; |
23 | |
|
24 | 59 | public GivenStory(String givenStoryAsString) { |
25 | 59 | this.givenStoryAsString = givenStoryAsString.trim(); |
26 | 59 | parse(); |
27 | 59 | } |
28 | |
|
29 | |
private void parse() { |
30 | 59 | Pattern pattern = compile(PATH_REGEX, DOTALL); |
31 | 59 | Matcher matcher = pattern.matcher(givenStoryAsString.trim()); |
32 | 59 | if (matcher.matches()) { |
33 | 5 | path = matcher.group(1).trim(); |
34 | 5 | anchor = matcher.group(2).trim(); |
35 | |
} else { |
36 | 54 | path = givenStoryAsString; |
37 | 54 | anchor = ""; |
38 | |
} |
39 | 59 | } |
40 | |
|
41 | |
public String getPath() { |
42 | 12 | return path; |
43 | |
} |
44 | |
|
45 | |
public String getAnchor() { |
46 | 67 | return anchor; |
47 | |
} |
48 | |
|
49 | |
public boolean hasAnchor() { |
50 | 46 | return !StringUtils.isBlank(anchor); |
51 | |
} |
52 | |
|
53 | |
public boolean hasAnchorParameters() { |
54 | 4 | return hasAnchor() && anchor.matches(PARAMETERS_REGEX); |
55 | |
} |
56 | |
|
57 | |
public Map<String, String> getAnchorParameters() { |
58 | 1 | Map<String,String> parameters = new HashMap<String, String>(); |
59 | 3 | for ( String pair : anchor.trim().split(";") ){ |
60 | 2 | String[] split = pair.split(":"); |
61 | 2 | if ( split.length > 1 ){ |
62 | 2 | parameters.put(split[0], split[1]); |
63 | |
} |
64 | |
} |
65 | 1 | return parameters; |
66 | |
} |
67 | |
|
68 | |
public Map<String, String> getParameters() { |
69 | 10 | return parameters; |
70 | |
} |
71 | |
|
72 | |
public void useParameters(Map<String, String> parameters) { |
73 | 62 | this.parameters = parameters; |
74 | 62 | } |
75 | |
|
76 | |
public String asString() { |
77 | 45 | return givenStoryAsString; |
78 | |
} |
79 | |
|
80 | |
public String toString() { |
81 | 17 | return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE); |
82 | |
} |
83 | |
|
84 | |
} |