001/**
002 *   GRANITE DATA SERVICES
003 *   Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004 *
005 *   This file is part of the Granite Data Services Platform.
006 *
007 *   Granite Data Services is free software; you can redistribute it and/or
008 *   modify it under the terms of the GNU Lesser General Public
009 *   License as published by the Free Software Foundation; either
010 *   version 2.1 of the License, or (at your option) any later version.
011 *
012 *   Granite Data Services is distributed in the hope that it will be useful,
013 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
014 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015 *   General Public License for more details.
016 *
017 *   You should have received a copy of the GNU Lesser General Public
018 *   License along with this library; if not, write to the Free Software
019 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020 *   USA, or see <http://www.gnu.org/licenses/>.
021 */
022/*
023 * JBoss, Home of Professional Open Source
024 *
025 * Distributable under LGPL license.
026 * See terms of license at gnu.org.
027 */
028
029package org.granite.util;
030
031import java.io.IOException;
032import java.io.InputStream;
033import java.util.StringTokenizer;
034
035/**
036 * @author <a href="mailto:theute@jboss.org">Thomas Heute</a>
037 */
038public class Strings
039{
040   
041   public static String unqualify(String name)
042   {
043      return unqualify(name, '.');
044   }
045   
046   public static String unqualify(String name, char sep)
047   {
048      return name.substring( name.lastIndexOf(sep)+1, name.length() );
049   }
050   
051   public static boolean isEmpty(String string)
052   {
053      return string == null || string.trim().length() == 0; 
054   }
055   
056   public static String nullIfEmpty(String string)
057   {
058      return isEmpty(string) ? null : string;
059   }
060
061   public static String toString(Object component)
062   {
063      try {
064         PropertyDescriptor[] props = Introspector.getPropertyDescriptors(component.getClass());
065         StringBuilder builder = new StringBuilder();
066         for (PropertyDescriptor descriptor : props)
067         {
068            builder.append( descriptor.getName() )
069               .append("=")
070               .append( descriptor.getReadMethod().invoke(component) )
071               .append("; ");
072         }
073         return builder.toString();
074      }
075      catch (Exception e) {
076         return "";
077      }
078   }
079
080   public static String[] split(String strings, String delims)
081   {
082      if (strings==null)
083      {
084         return new String[0];
085      }
086      
087      StringTokenizer tokens = new StringTokenizer(strings, delims);
088      String[] result = new String[ tokens.countTokens() ];
089      int i=0;
090      while ( tokens.hasMoreTokens() )
091      {
092         result[i++] = tokens.nextToken();
093      }
094      return result;
095   }
096   
097   public static String toString(Object... objects)
098   {
099      return toString(" ", objects);
100   }
101   
102   public static String toString(String sep, Object... objects)
103   {
104      if (objects.length==0) return "";
105      StringBuilder builder = new StringBuilder();
106      for (Object object: objects)
107      {
108         builder.append(sep).append(object);
109      }
110      return builder.substring(2);
111   }
112   
113   public static String toClassNameString(String sep, Object... objects)
114   {
115      if (objects.length==0) return "";
116      StringBuilder builder = new StringBuilder();
117      for (Object object: objects)
118      {
119         builder.append(sep);
120         if (object==null)
121         {
122            builder.append("null");
123         }
124         else
125         {
126            builder.append( object.getClass().getName() );
127         }
128      }
129      return builder.substring(2);
130   }
131   
132   public static String toString(String sep, Class<?>... classes)
133   {
134      if (classes.length==0) return "";
135      StringBuilder builder = new StringBuilder();
136      for (Class<?> clazz: classes)
137      {
138         builder.append(sep).append( clazz.getName() );
139      }
140      return builder.substring(2);
141   }
142   
143   public static String toString(InputStream in) throws IOException {
144      StringBuffer out = new StringBuffer();
145      byte[] b = new byte[4096];
146      for ( int n; (n = in.read(b)) != -1; ) 
147      {
148         out.append(new String(b, 0, n));
149      }
150      return out.toString();
151  }
152
153}
154
155