/************************************************************************************ * Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University * All rights reserved. * Refer to LICENSE for terms and conditions of use. ***********************************************************************************/ package vnsim.applications.vitp.utils; import java.util.*; public class URIParser { //this class contains static methods, that help parsing a URI; //URI Format: "/type/tag?[cnt=*&tout=*]¶m1=*¶m2=*..." //all the methods return null if the format of the URI is wrong public static String getType(String uri) { if(uri==null) return null; if(!uri.startsWith("/")) return null; int i1=uri.indexOf('/',1); if(i1==-1) return null; return uri.substring(1,i1); } public static String getTag(String uri) { if(uri==null) return null; if(!uri.startsWith("/")) return null; int i1=uri.indexOf('/',1); if(i1==-1) return null; int i2=uri.indexOf('?',i1); if(i2==-1) return uri.substring(i1+1); return uri.substring(i1+1,i2); } public static Vector getRCExpressions(String uri){ //returns a vector of all expressions within the brackets; //the corresponding service should do more parsing inside //each expression, since it could have particular formats //(e.g with < > *) if(uri==null) return null; if(!uri.startsWith("/")) return null; int i1=uri.indexOf('/',1); if(i1==-1) return null; int i2=uri.indexOf('?',i1); if(i2==-1) return null; if(uri.charAt(i2+1)!='[') return null; int index=i2+2; int finIndex=uri.indexOf(']',index); if(finIndex==-1) return null; String rcs=uri.substring(index,finIndex); Vector ret=new Vector(); StringTokenizer st=new StringTokenizer(rcs,"&"); while(st.hasMoreTokens()) { ret.addElement(st.nextToken()); } return ret; } public static Vector getParams(String uri){ //returns the parameters after the [] as a vector of Strings //the corresponding service should do more parsing inside //each expression, since it could have particular formats //(e.g with < > *) if(uri==null) return null; if(!uri.startsWith("/")) return null; int i1=uri.indexOf('/',1); if(i1==-1) return null; i1=uri.indexOf('?',i1); if(i1==-1) return null; i1=uri.indexOf('[',i1); if(i1==-1) return null; i1=uri.indexOf(']',i1); if(i1==-1) return null; Vector ret=new Vector(); i1++; if(i1>=uri.length()) return ret; if(uri.charAt(i1)!='&') return null; StringTokenizer st=new StringTokenizer(uri.substring(i1),"&"); while(st.hasMoreTokens()) { ret.addElement(st.nextToken()); } return ret; } public static String getURIFromParts(String type, String tag, Vector h1, Vector h2){ if(type==null || tag==null || h1==null || h2==null) return null; String ret="/"+type+"/"+tag+"?["; for(int i=0;i