Version 4.0.0: java.awt dependencies move
[nikiroo-utils.git] / src / be / nikiroo / utils / StringUtils.java
index af69845b1a6c416f55e162b506c49b7ad2d938cf..a6117a04053e863b3d9952c4fccd33f0533f33c7 100644 (file)
@@ -1,12 +1,8 @@
 package be.nikiroo.utils;
 
-import java.awt.Image;
-import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.text.Normalizer;
@@ -17,8 +13,6 @@ import java.util.Date;
 import java.util.Scanner;
 import java.util.regex.Pattern;
 
-import javax.imageio.ImageIO;
-
 import org.unbescape.html.HtmlEscape;
 import org.unbescape.html.HtmlEscapeLevel;
 import org.unbescape.html.HtmlEscapeType;
@@ -57,7 +51,7 @@ public class StringUtils {
         * @return the resulting {@link String} of size <i>size</i>
         */
        static public String padString(String text, int width) {
-               return padString(text, width, true, Alignment.Beginning);
+               return padString(text, width, true, null);
        }
 
        /**
@@ -73,13 +67,17 @@ public class StringUtils {
         *            cut the {@link String} shorter if needed
         * @param align
         *            align the {@link String} in this position if we have enough
-        *            space
+        *            space (default is Alignment.Beginning)
         * 
         * @return the resulting {@link String} of size <i>size</i> minimum
         */
        static public String padString(String text, int width, boolean cut,
                        Alignment align) {
 
+               if (align == null) {
+                       align = Alignment.Beginning;
+               }
+
                if (width >= 0) {
                        if (text == null)
                                text = "";
@@ -170,11 +168,15 @@ public class StringUtils {
        }
 
        /**
-        * Convert between time in milliseconds to {@link String} in a "static" way
-        * (to exchange data over the wire, for instance).
+        * Convert between the time in milliseconds to a {@link String} in a "fixed"
+        * way (to exchange data over the wire, for instance).
+        * <p>
+        * Precise to the second.
         * 
         * @param time
-        *            the time in milliseconds
+        *            the specified number of milliseconds since the standard base
+        *            time known as "the epoch", namely January 1, 1970, 00:00:00
+        *            GMT
         * 
         * @return the time as a {@link String}
         */
@@ -184,13 +186,16 @@ public class StringUtils {
        }
 
        /**
-        * Convert between time as a {@link String} to milliseconds in a "static"
+        * Convert between the time as a {@link String} to milliseconds in a "fixed"
         * way (to exchange data over the wire, for instance).
+        * <p>
+        * Precise to the second.
         * 
         * @param displayTime
         *            the time as a {@link String}
         * 
-        * @return the time in milliseconds
+        * @return the number of milliseconds since the standard base time known as
+        *         "the epoch", namely January 1, 1970, 00:00:00 GMT
         */
        static public long toTime(String displayTime) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@@ -201,104 +206,6 @@ public class StringUtils {
                }
        }
 
-       /**
-        * Convert the given {@link Image} object into a Base64 representation of
-        * the same {@link Image}. object.
-        * 
-        * @param image
-        *            the {@link Image} object to convert
-        * 
-        * @return the Base64 representation
-        * 
-        * @throws IOException
-        *             in case of IO error
-        */
-       static public String fromImage(BufferedImage image) throws IOException {
-               return fromImage(image, null);
-       }
-
-       /**
-        * Convert the given {@link Image} object into a Base64 representation of
-        * the same {@link Image}. object.
-        * 
-        * @param image
-        *            the {@link Image} object to convert
-        * @param format
-        *            the image format to use to serialise it (default is PNG)
-        * 
-        * @return the Base64 representation
-        * 
-        * @throws IOException
-        *             in case of IO error
-        */
-       static public String fromImage(BufferedImage image, String format)
-                       throws IOException {
-               if (format == null) {
-                       format = "png";
-               }
-
-               String imageString = null;
-               ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-               ImageIO.write(image, format, out);
-               byte[] imageBytes = out.toByteArray();
-
-               imageString = new String(Base64.encodeBytes(imageBytes));
-
-               out.close();
-
-               return imageString;
-       }
-
-       /**
-        * Convert the given image into a Base64 representation of the same
-        * {@link File}.
-        * 
-        * @param in
-        *            the image to convert
-        * 
-        * @return the Base64 representation
-        * 
-        * @throws IOException
-        *             in case of IO error
-        */
-       static public String fromStream(InputStream in) throws IOException {
-               String fileString = null;
-               ByteArrayOutputStream out = new ByteArrayOutputStream();
-
-               byte[] buf = new byte[8192];
-
-               int c = 0;
-               while ((c = in.read(buf, 0, buf.length)) > 0) {
-                       out.write(buf, 0, c);
-               }
-               out.flush();
-               in.close();
-
-               fileString = new String(Base64.encodeBytes(out.toByteArray()));
-               out.close();
-
-               return fileString;
-       }
-
-       /**
-        * Convert the given Base64 representation of an image into an {@link Image}
-        * object.
-        * 
-        * @param b64data
-        *            the {@link Image} in Base64 format
-        * 
-        * @return the {@link Image} object
-        * 
-        * @throws IOException
-        *             in case of IO error
-        */
-       static public BufferedImage toImage(String b64data) throws IOException {
-               ByteArrayInputStream in = new ByteArrayInputStream(
-                               Base64.decode(b64data));
-               return IOUtils.toImage(in);
-       }
-
        /**
         * Return a hash of the given {@link String}.
         * 
@@ -307,10 +214,10 @@ public class StringUtils {
         * 
         * @return the hash
         */
-       static public String getHash(String input) {
+       static public String getMd5Hash(String input) {
                try {
                        MessageDigest md = MessageDigest.getInstance("MD5");
-                       md.update(input.getBytes());
+                       md.update(input.getBytes("UTF-8"));
                        byte byteData[] = md.digest();
 
                        StringBuffer hexString = new StringBuffer();
@@ -324,6 +231,8 @@ public class StringUtils {
                        return hexString.toString();
                } catch (NoSuchAlgorithmException e) {
                        return input;
+               } catch (UnsupportedEncodingException e) {
+                       return input;
                }
        }
 
@@ -391,6 +300,14 @@ public class StringUtils {
                                HtmlEscapeLevel.LEVEL_1_ONLY_MARKUP_SIGNIFICANT);
        }
 
+       /**
+        * Zip the data and then encode it into Base64.
+        * 
+        * @param data
+        *            the data
+        * 
+        * @return the Base64 zipped version
+        */
        public static String zip64(String data) {
                try {
                        return Base64.encodeBytes(data.getBytes(), Base64.GZIP);
@@ -400,6 +317,17 @@ public class StringUtils {
                }
        }
 
+       /**
+        * Unconvert from Base64 then unzip the content.
+        * 
+        * @param data
+        *            the data in Base64 format
+        * 
+        * @return the raw data
+        * 
+        * @throws IOException
+        *             in case of I/O error
+        */
        public static String unzip64(String data) throws IOException {
                ByteArrayInputStream in = new ByteArrayInputStream(Base64.decode(data,
                                Base64.GZIP));