package jxl.biff;

import common.Logger;
import java.io.UnsupportedEncodingException;
import jxl.WorkbookSettings;

public final class StringHelper {
  private static Logger logger = Logger.getLogger(StringHelper.class);
  
  public static byte[] getBytes(String s) {
    return s.getBytes();
  }
  
  public static byte[] getBytes(String s, WorkbookSettings ws) {
    try {
      return s.getBytes(ws.getEncoding());
    } catch (UnsupportedEncodingException e) {
      return null;
    } 
  }
  
  public static byte[] getUnicodeBytes(String s) {
    try {
      byte[] b = s.getBytes("UnicodeLittle");
      if (b.length == s.length() * 2 + 2) {
        byte[] b2 = new byte[b.length - 2];
        System.arraycopy(b, 2, b2, 0, b2.length);
        b = b2;
      } 
      return b;
    } catch (UnsupportedEncodingException e) {
      return null;
    } 
  }
  
  public static void getBytes(String s, byte[] d, int pos) {
    byte[] b = getBytes(s);
    System.arraycopy(b, 0, d, pos, b.length);
  }
  
  public static void getUnicodeBytes(String s, byte[] d, int pos) {
    byte[] b = getUnicodeBytes(s);
    System.arraycopy(b, 0, d, pos, b.length);
  }
  
  public static String getString(byte[] d, int length, int pos, WorkbookSettings ws) {
    try {
      byte[] b = new byte[length];
      System.arraycopy(d, pos, b, 0, length);
      return new String(b, ws.getEncoding());
    } catch (UnsupportedEncodingException e) {
      logger.warn(e.toString());
      return "";
    } 
  }
  
  public static String getUnicodeString(byte[] d, int length, int pos) {
    try {
      byte[] b = new byte[length * 2];
      System.arraycopy(d, pos, b, 0, length * 2);
      return new String(b, "UnicodeLittle");
    } catch (UnsupportedEncodingException e) {
      return "";
    } 
  }
  
  public static final String replace(String input, String search, String replace) {
    String fmtstr = input;
    int pos = fmtstr.indexOf(search);
    while (pos != -1) {
      StringBuffer tmp = new StringBuffer(fmtstr.substring(0, pos));
      tmp.append(replace);
      tmp.append(fmtstr.substring(pos + search.length()));
      fmtstr = tmp.toString();
      pos = fmtstr.indexOf(search, pos + replace.length());
    } 
    return fmtstr;
  }
}
