* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/**
* A Class to hold Service "ContentTypes", and to match incoming "Accept" types from HTTP.
- *
+ *
* This is a multi-use class built to use the same Parser for ContentTypes and Accept.
- *
+ *
* Thus, you would create and use "Content.Type" within your service, and use it to match
* Accept Strings. What is returned is an Integer (for faster processing), which can be
* used in a switch statement to act on match different Actions. The server should
* know which behaviors match.
- *
+ *
* "bestMatch" returns an integer for the best match, or -1 if no matches.
*
* @author Jonathan
/**
* Parse a Content-Type/Accept. As found, call "types" and "props", which do different
- * things depending on if it's a Content-Type or Accepts.
- *
+ * things depending on if it's a Content-Type or Accepts.
+ *
* For Content-Type, it builds a tree suitable for Comparison
* For Accepts, it compares against the tree, and builds an acceptable type list
- *
+ *
* Since this parse code is used for every incoming HTTP transaction, I have removed the implementation
* that uses String.split, and replaced with integers evaluating the Byte array. This results
- * in only the necessary strings created, resulting in 1/3 better speed, and less
+ * in only the necessary strings created, resulting in 1/3 better speed, and less
* Garbage collection.
- *
+ *
* @param trans
* @param code
* @param cntnt
* @return
*/
protected boolean parse(HttpCode<TRANS,?> code, String cntnt) {
- byte bytes[] = cntnt.getBytes();
- boolean contType=false,contProp=true;
- int cis,cie=-1,cend;
- int sis,sie,send;
+ byte[] bytes = cntnt.getBytes();
+ boolean contType=false;
+ boolean contProp=true;
+ int cis;
+ int cie=-1;
+ int cend;
+ int sis;
+ int sie;
+ int send;
do {
cis = cie+1;
cie = cntnt.indexOf(',',cis);
sis = sie+1;
sie = cntnt.indexOf(';',sis);
send = sie>cend || sie<0?cend:sie;
- if(me==null) {
+ if (me==null) {
String semi = new String(bytes,sis,send-sis);
- // trans.checkpoint(semi);
// Look at first entity within comma group
// Is this an acceptable Type?
me=types(code, semi);
- if(me==null) {
+ if (me==null) {
sie=-1; // skip the rest of the processing... not a type
} else {
contType=true;
// If there are additional elements (more entities within Semi Colons)
// apply Propertys
int eq = cntnt.indexOf('=',sis);
- if(eq>sis && eq<send) {
+ if (eq>sis && eq<send) {
String tag = new String(bytes,sis,eq-sis);
String value = new String(bytes,eq+1,send-(eq+1));
- // trans.checkpoint(" Prop " + tag + "=" + value);
boolean bool = props(me,tag,value);
- if(!bool) {
+ if (!bool) {
contProp=false;
}
}
}
// End Property
- } while(sie<=cend && sie>=cis);
+ } while (sie<=cend && sie>=cis);
// End SEMIS
- } while(cie>=0);
+ } while (cie>=0);
return contType && contProp; // for use in finds, True if a type found AND all props matched
}
-
+
}