001 /* sillyview : a free model-view-controller system for Java
002 * Copyright (C) 2004 T.J. Willis
003 *
004 * This program is free software; you can redistribute it and/or
005 * modify it under the terms of the GNU General Public License
006 * as published by the Free Software Foundation; either version 2
007 * of the License, or (at your option) any later version.
008 *
009 * This program is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012 * GNU General Public License for more details.
013 *
014 * You should have received a copy of the GNU General Public License
015 * along with this program; if not, write to the Free Software
016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
017 *
018 * $Header: /cvsroot/sillyview/sillyview/src/net/sourceforge/sillyview/URLParser.java,v 1.2 2004/05/15 01:58:51 tj_willis Exp $
019 */
020 package net.sourceforge.sillyview;
021
022 import java.net.*;
023 import java.util.*;
024 import java.lang.reflect.Array;
025 import org.apache.log4j.*;
026
027 /**
028 * Provides some static methods for dealing with URLs passed from a View.
029 *
030 * @author <a href="mailto:tj_willis@users.sourceforge.net">T.J. Willis</a>
031 * @version 1.0
032 */
033 public class URLParser {
034 static String preToken = "";
035 static String postToken = "";
036 private static Category cat
037 = Category.getInstance(URLParser.class.getName());
038
039
040 public static void setPreToken (String s) {
041 preToken = s;
042 }
043
044 public static void setPostToken (String s) {
045 postToken = s;
046 }
047
048 /**
049 * Takes the name/value pairs of the URL's query and returns them
050 * as a Hashtable.
051 *
052 * @param u an <code>URL</code> value
053 * @return a <code>Hashtable</code> value
054 */
055 public static Hashtable parseVariables (URL u) {
056 Hashtable < String, String > h = new Hashtable < String, String > ();
057 if (u==null)
058 return null;
059 String x = u.getQuery ();
060 return parseVariables (x);
061 }
062
063 /**
064 * Parses a set of name/value pairs in the form of "name=value&foo=bar"
065 * into a Hashtable and returns it.
066 *
067 * @param u an <code>String</code> value
068 * @return a <code>Hashtable</code> value
069 */
070 public static Hashtable<String,String> parseVariables (String x) {
071 Hashtable < String, String > h = new Hashtable < String, String > ();
072 if (x==null)
073 return null;
074 String arr[] = x.split ("&");
075 if (arr==null)
076 return null;
077 int size = Array.getLength (arr);
078 if (size < 1)
079 return null;
080 for (String y:arr) {
081
082 String z[] = y.split ("=");
083 if (z == null)
084 continue;
085 int sz = Array.getLength (z);
086 //System.out.println("sz = " + sz);
087 if (sz != 2)
088 continue;
089 try {
090 String nm =
091 preToken + URLDecoder.decode (z[0], "UTF-8") + postToken;
092 String va = URLDecoder.decode (z[1], "UTF-8");
093 h.put (nm, va);
094 } catch (java.io.UnsupportedEncodingException ex) {
095 cat.error("Encoding " + y,ex);
096 }
097 }
098
099 return h;
100
101 }
102
103 /**
104 * Strips the last element of the URL's path and returns it.
105 * Given, for example, the URL:
106 * "http://foo.bar.com/some/dir/lala.jpg?foo=bar"
107 * will return "lala.jpg".
108 *
109 * @param u an <code>URL</code> value
110 * @return a <code>String</code> value
111 */
112 public static String getFilenameWithoutPath (URL u) {
113 if (u == null)
114 return null;
115 return getFilenameWithoutPath (u.getPath ());
116 }
117
118 /**
119 * Given, for example, the string
120 * "http://foo.bar.com/some/dir/lala.jpg?foo=bar"
121 * will return "lala.jpg".
122 *
123 * @param x a <code>String</code> value
124 * @return a <code>String</code> value
125 */
126 public static String getFilenameWithoutPath (String x) {
127 if (x == null)
128 return null;
129 String y[] = x.split ("/");
130 int sz = Array.getLength (y);
131 if (sz < 1)
132 return null;
133 return y[sz - 1];
134 }
135
136 }