/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package automenta.spacenet.var.string; import java.text.NumberFormat; import java.util.Arrays; import java.util.LinkedList; import java.util.List; /** * * @author seh */ public class StringVar { private String s; public interface IfStringChanges { public void onStringChange(StringVar s); } private List<IfStringChanges> stringChanges = new LinkedList(); //TODO lazy-instantiate this public StringVar() { this(""); } public StringVar(String s) { super(); this.s = s; } public void set(String s) { boolean valueChanged = true; if (this.s == s) { return; } if (this.s.equals(s)) { valueChanged = false; } this.s = s; if (valueChanged) { notifyChanges(); } } public String s() { return s; } protected void notifyChanges() { for (IfStringChanges i : stringChanges) { i.onStringChange(this); } } public IfStringChanges add(IfStringChanges i) { stringChanges.add(i); return i; } public IfStringChanges remove(IfStringChanges i) { stringChanges.remove(i); return i; } public static String padToLength(String l, int maxLineLength) { if (l.length() < maxLineLength) { int padLength = maxLineLength - l.length(); char[] ch = new char[padLength]; Arrays.fill(ch, ' '); return l.concat(new String(ch)); } else { return l; } } public void append(char character) { set(s().concat(new Character(character).toString())); } public int length() { return s().length(); } public void insert(int pos, char character) { String current = s(); String pre = current.substring(0, pos); String next= pre + character; if (pos < current.length()) next += current.substring(pos, current.length()); set( next ); } public void set(StringVar t) { set(t.s()); } public void append(String string) { set(s().concat(string)); } public void set(double d, int decimalPlaces) { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(decimalPlaces); set( nf.format(d) ); } }