Utils.java
上传用户:liming6160
上传日期:2022-06-07
资源大小:785k
文件大小:6k
源码类别:

J2ME

开发平台:

Java

  1. /*
  2.  *    Copyright (C) 2001 - 2007 Mobicom-Kavkaz, Inc
  3.  *    MFRadio - stream radio client for Java 2 Micro Edition
  4.  *    
  5.  *    Visit the project page at: http://mfradio.sourceforge.net
  6.  *
  7.  *    This program is free software; you can redistribute it and/or modify
  8.  *    it under the terms of the GNU General Public License as published by
  9.  *    the Free Software Foundation; either version 2 of the License, or
  10.  *    (at your option) any later version.
  11.  *
  12.  *    This program is distributed in the hope that it will be useful,
  13.  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15.  *    GNU General Public License for more details.
  16.  *
  17.  *    You should have received a copy of the GNU General Public License
  18.  *    along with this program; if not, write to the Free Software
  19.  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  *
  21.  *    Java (TM) and all Java (TM)-based marks are a trademark or 
  22.  *    registered trademark of Sun Microsystems, Inc, in the United States 
  23.  *    and other countries.
  24.  */
  25. package ru.mobicomk.mfradio.util;
  26. import javax.microedition.lcdui.Command;
  27. import javax.microedition.media.MediaException;
  28. /**
  29.  * Utility functions for simple WAP browser.
  30.  * @author  Roman Bondarenko
  31.  */
  32. public class Utils {
  33.     // "parameters" passed to commandAction method
  34.     Command commandOccured;
  35.     
  36.     // hide contructor from outside.
  37.     private Utils() {
  38.     }
  39.     
  40.     /**
  41.      * Splits the URL in the parts.
  42.      *
  43.      * <p>E.g: <code>http://www.site.com:8080/streams/MP3/file.mp3#1</code>
  44.      * <pre>
  45.      * 0: protocol  (e.g. http)
  46.      * 1: host      (e.g. www.site.com)
  47.      * 2: port      (e.g. 8080)
  48.      * 3: path      (e.g. /streams/MP3)
  49.      * 4: file      (e.g. file.mp3)
  50.      * 5: anchor    (e.g. 1)
  51.      * </pre>
  52.      * </p>
  53.      * <p>Using:
  54.      * <code><pre>
  55.      * // Split URL to Site and File parts
  56.      * String[] urlParts = Utils.splitURL(url);
  57.      * String site = urlParts[1] + ":" + urlParts[2]; // host:port
  58.      * urlParts[0] = "";
  59.      * urlParts[1] = "";
  60.      * urlParts[2] = "";
  61.      * String file = Utils.mergeURL(urlParts);
  62.      * </pre></code>
  63.      * </p>
  64.      * <p><b>LIMITATION:</b> URL must end with a slash if it is a directory.</p>
  65.      * @param url URL to split.
  66.      * @throws ru.mobicomk.mfradio.util.UrlFormatException if parsing error occuring.
  67.      * @return String array.
  68.      */
  69.     public static String[] splitURL(String url) throws UrlFormatException {
  70.         StringBuffer u=new StringBuffer(url);
  71.         String[] result=new String[6];
  72.         for (int i=0; i<=5; i++) {
  73.             result[i]="";
  74.         }
  75.         // get protocol
  76.         boolean protFound=false;
  77.         int index=url.indexOf(":");
  78.         if (index>0) {
  79.             result[0]=url.substring(0, index);
  80.             u.delete(0, index+1);
  81.             protFound=true;
  82.         } else if (index==0) {
  83.             throw new UrlFormatException("protocol");
  84.         }
  85.         // check for host/port
  86.         if (u.length()>2 && u.charAt(0)=='/' && u.charAt(1)=='/') {
  87.             // found domain part
  88.             u.delete(0, 2);
  89.             int slash=u.toString().indexOf('/');
  90.             if (slash<0) {
  91.                 slash=u.length();
  92.             }
  93.             int colon=u.toString().indexOf(':');
  94.             int endIndex=slash;
  95.             if (colon>=0) {
  96.                 if (colon>slash) {
  97.                     throw new UrlFormatException("port");
  98.                 }
  99.                 endIndex=colon;
  100.                 result[2]=u.toString().substring(colon+1, slash);
  101.             }
  102.             result[1]=u.toString().substring(0, endIndex);
  103.             u.delete(0, slash);
  104.         }
  105.         // get filename
  106.         if (u.length()>0) {
  107.             url=u.toString();
  108.             int slash=url.lastIndexOf('/');
  109.             if (slash>0) {
  110.                 result[3]=url.substring(0, slash);
  111.             }
  112.             if (slash<url.length()-1) {
  113.                 String fn = url.substring(slash+1, url.length());
  114.                 int anchorIndex = fn.indexOf("#");
  115.                 if (anchorIndex>=0) {
  116.                     result[4] = fn.substring(0, anchorIndex);
  117.                     result[5] = fn.substring(anchorIndex+1);
  118.                 } else {
  119.                     result[4] = fn;
  120.                 }
  121.             }
  122.         }
  123.         return result;
  124.     }
  125.     
  126.     /**
  127.      * Make URL from URL parts. For array structure see {@link #splitURL}.
  128.      * <p>Using:
  129.      * <code><pre>
  130.      * // Split URL to Site and File parts
  131.      * String[] urlParts = Utils.splitURL(url);
  132.      * String site = urlParts[1] + ":" + urlParts[2]; // host:port
  133.      * urlParts[0] = "";
  134.      * urlParts[1] = "";
  135.      * urlParts[2] = "";
  136.      * String file = Utils.mergeURL(urlParts);
  137.      * </pre></code>
  138.      * </p>
  139.      * @param url URL parts.
  140.      * @return Whole URL.
  141.      * @see #splitURL
  142.      */
  143.     public static String mergeURL(String[] url) {
  144.         return ((url[0]=="")?"":url[0]+":/")
  145.         +((url[1]=="")?"":"/"+url[1])
  146.         +((url[2]=="")?"":":"+url[2])
  147.         +url[3]+"/"+url[4]
  148.             +((url[5]=="")?"":"#"+url[5]);
  149.     }
  150.     
  151.     
  152.     /**
  153.      * Make exception information more friendly.
  154.      * <p>Example:
  155.      * <pre>
  156.      * String exeptInfo = friendlyException("javax.microedition.media.MediaException: Some text");
  157.      * // Now exeptInfo is "MediaException: Some text"
  158.      * </pre>
  159.      * </p>
  160.      * @param t Exception object.
  161.      * @return "Friendly" exception string.
  162.      */
  163.     public static String friendlyException(Throwable t) {
  164.         if (t instanceof MediaException && t.getMessage().indexOf(" ")>5) {
  165.             return t.getMessage();
  166.         }
  167.         String s = t.toString();
  168.         while (true) {
  169.             int dot = s.indexOf(".");
  170.             int space = s.indexOf(" "); if (space<0) space = s.length();
  171.             int colon = s.indexOf(":"); if (colon<0) colon = s.length();
  172.             if (dot >= 0 && dot < space && dot < colon) {
  173.                 s = s.substring(dot+1);
  174.             } else {
  175.                 break;
  176.             }
  177.         }
  178.         return s;
  179.     }
  180. }