001
014
015 package com.liferay.portal.tools;
016
017 import java.util.Map;
018 import java.util.Set;
019 import java.util.TreeMap;
020 import java.util.TreeSet;
021
022
028 public class ComparableRoute implements Comparable<ComparableRoute> {
029
030 public static boolean hasRegex(String fragment) {
031 return fragment.contains(":");
032 }
033
034 public static boolean isCaptureFragment(String fragment) {
035 return fragment.contains("{");
036 }
037
038 public static boolean isMatchAny(String fragment) {
039 return fragment.matches(".*\\{.+?:\\.\\*\\}.*");
040 }
041
042 public ComparableRoute(String pattern) {
043 _pattern = pattern;
044 }
045
046 public void addGeneratedParameter(String name, String pattern) {
047 _generatedParameters.put(name, pattern);
048 }
049
050 public void addIgnoredParameter(String name) {
051 _ignoredParameters.add(name);
052 }
053
054 public void addImplicitParameter(String name, String value) {
055 _implicitParameters.put(name, value);
056 }
057
058 public void addOverriddenParameter(String name, String value) {
059 _overriddenParameters.put(name, value);
060 }
061
062 @Override
063 public int compareTo(ComparableRoute comparableRoute) {
064
065
066
067 String[] _fragments = _pattern.split("[/\\.](?!\\*)");
068
069 String pattern = comparableRoute.getPattern();
070
071 String[] fragments = pattern.split("[/\\.](?!\\*)");
072
073 int i;
074
075 for (i = 0; (i < _fragments.length) && (i < fragments.length); i++) {
076 String _fragment = _fragments[i];
077 String fragment = fragments[i];
078
079
080
081 if (!isCaptureFragment(_fragment) && isCaptureFragment(fragment)) {
082 return -1;
083 }
084
085 if (isCaptureFragment(_fragment) && !isCaptureFragment(fragment)) {
086 return 1;
087 }
088
089
090
091 if (!isMatchAny(_fragment) && isMatchAny(fragment)) {
092 return -1;
093 }
094
095 if (isMatchAny(_fragment) && !isMatchAny(fragment)) {
096 return 1;
097 }
098
099
100
101 if (hasRegex(_fragment) && !hasRegex(fragment)) {
102 return -1;
103 }
104
105 if (!hasRegex(_fragment) && hasRegex(fragment)) {
106 return 1;
107 }
108 }
109
110
111
112 if ((i < fragments.length) && (i >= _fragments.length)) {
113 return -1;
114 }
115
116 if ((i < _fragments.length) && (i >= fragments.length)) {
117 return 1;
118 }
119
120
121
122 Map<String, String> implicitParameters =
123 comparableRoute.getImplicitParameters();
124
125 if (_implicitParameters.size() > implicitParameters.size()) {
126 return -1;
127 }
128
129 if (_implicitParameters.size() < implicitParameters.size()) {
130 return 1;
131 }
132
133 return _pattern.compareTo(comparableRoute.getPattern());
134 }
135
136 @Override
137 public boolean equals(Object obj) {
138 if (this == obj) {
139 return true;
140 }
141
142 if (!(obj instanceof ComparableRoute)) {
143 return false;
144 }
145
146 ComparableRoute comparableRoute = (ComparableRoute)obj;
147
148 if (compareTo(comparableRoute) == 0) {
149 return true;
150 }
151 else {
152 return false;
153 }
154 }
155
156 public Map<String, String> getGeneratedParameters() {
157 return _generatedParameters;
158 }
159
160 public Set<String> getIgnoredParameters() {
161 return _ignoredParameters;
162 }
163
164 public Map<String, String> getImplicitParameters() {
165 return _implicitParameters;
166 }
167
168 public Map<String, String> getOverriddenParameters() {
169 return _overriddenParameters;
170 }
171
172 public String getPattern() {
173 return _pattern;
174 }
175
176 private Map<String, String> _generatedParameters =
177 new TreeMap<String, String>();
178 private Set<String> _ignoredParameters = new TreeSet<String>();
179 private Map<String, String> _implicitParameters =
180 new TreeMap<String, String>();
181 private Map<String, String> _overriddenParameters =
182 new TreeMap<String, String>();
183 private String _pattern;
184
185 }