Development Class Java

/*
 This program is a part of the companion code for Core Java 8th ed.
 (http://horstmann.com/corejava)
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
import java.awt.geom.Rectangle2D;
import java.beans.BeanInfo;
import java.beans.ConstructorProperties;
import java.beans.DefaultPersistenceDelegate;
import java.beans.Encoder;
import java.beans.ExceptionListener;
import java.beans.Expression;
import java.beans.Introspector;
import java.beans.PersistenceDelegate;
import java.beans.Statement;
import java.beans.XMLEncoder;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
 * This program demonstrates various persistence delegates.
 * 
 * @version 1.01 2007-10-03
 * @author Cay Horstmann
 */
public class PersistenceDelegateTest {
  public static class Point {
    @ConstructorProperties( { "x", "y" })
    public Point(int x, int y) {
      this.x = x;
      this.y = y;
    }
    public int getX() {
      return x;
    }
    public int getY() {
      return y;
    }
    private final int x, y;
  }
  public static void main(String[] args) throws Exception {
    PersistenceDelegate delegate = new PersistenceDelegate() {
      protected Expression instantiate(Object oldInstance, Encoder out) {
        Employee e = (Employee) oldInstance;
        GregorianCalendar c = new GregorianCalendar();
        c.setTime(e.getHireDay());
        return new Expression(oldInstance, Employee.class, "new", new Object[] { e.getName(),
            e.getSalary(), c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE) });
      }
    };
    BeanInfo info = Introspector.getBeanInfo(Employee.class);
    info.getBeanDescriptor().setValue("persistenceDelegate", delegate);
    XMLEncoder out = new XMLEncoder(System.out);
    out.setExceptionListener(new ExceptionListener() {
      public void exceptionThrown(Exception e) {
        e.printStackTrace();
      }
    });
    out.setPersistenceDelegate(Rectangle2D.Double.class, new DefaultPersistenceDelegate(
        new String[] { "x", "y", "width", "height" }));
    out.setPersistenceDelegate(Inet4Address.class, new DefaultPersistenceDelegate() {
      protected Expression instantiate(Object oldInstance, Encoder out) {
        return new Expression(oldInstance, InetAddress.class, "getByAddress",
            new Object[] { ((InetAddress) oldInstance).getAddress() });
      }
    });
    out.setPersistenceDelegate(BitSet.class, new DefaultPersistenceDelegate() {
      protected void initialize(Class type, Object oldInstance, Object newInstance, Encoder out) {
        super.initialize(type, oldInstance, newInstance, out);
        BitSet bs = (BitSet) oldInstance;
        for (int i = bs.nextSetBit(0); i >= 0; i = bs.nextSetBit(i + 1))
          out.writeStatement(new Statement(bs, "set", new Object[] { i, i + 1, true }));
      }
    });
    out.writeObject(new Employee("Harry Hacker", 50000, 1989, 10, 1));
    out.writeObject(new Point(17, 29));
    out.writeObject(new java.awt.geom.Rectangle2D.Double(5, 10, 20, 30));
    out.writeObject(InetAddress.getLocalHost());
    BitSet bs = new BitSet();
    bs.set(1, 4);
    bs.clear(2, 3);
    out.writeObject(bs);
    out.close();
  }
}
/*
 * This program is a part of the companion code for Core Java 8th ed.
 * (http://horstmann.com/corejava)
 * 
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see .
 */
class Employee {
  public Employee(String n, double s, int year, int month, int day) {
    name = n;
    salary = s;
    GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
    // GregorianCalendar uses 0 for January
    hireDay = calendar.getTime();
  }
  public Employee(String n, double s, Date h) {
    name = n;
    salary = s;
    hireDay = h;
  }
  public String getName() {
    return name;
  }
  public double getSalary() {
    return salary;
  }
  public Date getHireDay() {
    return hireDay;
  }
  public void raiseSalary(double byPercent) {
    double raise = salary * byPercent / 100;
    salary += raise;
  }
  private String name;
  private double salary;
  private Date hireDay;
}