Author: kkolinko
Date: Mon Jun 23 02:06:58 2014
New Revision: 1604677
URL: http://svn.apache.org/r1604677
Log:
Add exactFind() method.
Use it to simplify one of Mapper methods, addWrapper.
Fixed error logging there. Old behaviour was to log only "(pos<0)" case. It did
not log in wrong-match-found case (wrong name).
This backports part of r1604066.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java?rev=1604677&r1=1604676&r2=1604677&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/mapper/Mapper.java
Mon Jun 23 02:06:58 2014
@@ -315,35 +315,22 @@ public final class Mapper {
public void addWrapper(String hostName, String contextPath, String version,
String path, Object wrapper, boolean jspWildCard,
boolean resourceOnly) {
- Host[] hosts = this.hosts;
- int pos = find(hosts, hostName);
- if (pos < 0) {
+ Host host = exactFind(hosts, hostName);
+ if (host == null) {
return;
}
- Host host = hosts[pos];
- if (host.name.equals(hostName)) {
- Context[] contexts = host.contextList.contexts;
- int pos2 = find(contexts, contextPath);
- if (pos2 < 0) {
- log.error("No context found: " + contextPath );
- return;
- }
- Context context = contexts[pos2];
- if (context.name.equals(contextPath)) {
- ContextVersion[] contextVersions = context.versions;
- int pos3 = find(contextVersions, version);
- if( pos3<0 ) {
- log.error("No context version found: " + contextPath + " "
+
- version);
- return;
- }
- ContextVersion contextVersion = contextVersions[pos3];
- if (contextVersion.name.equals(version)) {
- addWrapper(contextVersion, path, wrapper, jspWildCard,
- resourceOnly);
- }
- }
+ Context context = exactFind(host.contextList.contexts, contextPath);
+ if (context == null) {
+ log.error("No context found: " + contextPath);
+ return;
}
+ ContextVersion contextVersion = exactFind(context.versions, version);
+ if (contextVersion == null) {
+ log.error("No context version found: " + contextPath + " "
+ + version);
+ return;
+ }
+ addWrapper(contextVersion, path, wrapper, jspWildCard, resourceOnly);
}
@@ -1283,6 +1270,7 @@ public final class Mapper {
* Find a map element given its name in a sorted array of map elements.
* This will return the index for the closest inferior or equal item in the
* given array.
+ * @see #exactFind(MapElement[], String)
*/
private static final int find(MapElement[] map, String name) {
@@ -1326,6 +1314,25 @@ public final class Mapper {
/**
+ * Find a map element given its name in a sorted array of map elements.
This
+ * will return the element that you were searching for. Otherwise it will
+ * return <code>null</code>.
+ * @see #find(MapElement[], String)
+ */
+ private static final <E extends MapElement> E exactFind(E[] map,
+ String name) {
+ int pos = find(map, name);
+ if (pos >= 0) {
+ E result = map[pos];
+ if (name.equals(result.name)) {
+ return result;
+ }
+ }
+ return null;
+ }
+
+
+ /**
* Compare given char chunk with String.
* Return -1, 0 or +1 if inferior, equal, or superior to the String.
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]