Siirto.java

package datastructureproject.luokat.tietorakenteet;

/**
 * Kuvaa shakissa yhden nappulan siirtoa
 */
public class Siirto {
    private static final char EI_YLENNYSTA = '0';
    /**
     * Sotilaan ylennys.
     */
    private char ylennys;
    private Ruutu alku;
    private Ruutu kohde;

    /**
     * 
     * @param alku siiron alkuruutu
     * @param kohde siirron kohderuutu
     */
    public Siirto(Ruutu alku, Ruutu kohde) {
        this.alku = alku.kopioi();
        this.kohde = kohde.kopioi();
        this.ylennys = EI_YLENNYSTA;
    }

    /**
     * 
     * @param x ensimmaisen ruudun x koordinaatti
     * @param y ensimmaisen ruudun y koordinaatti
     * @param x2 toisen ruudun x koordinaatti
     * @param y2 toisen ruudun y koordinaatti
     */
    public Siirto(int x, int y, int x2, int y2) {
        this.alku = new Ruutu(x, y);
        this.kohde = new Ruutu(x2, y2);
        this.ylennys = EI_YLENNYSTA;
    }
    
    /**
     * 
     * @param x ensimmaisen ruudun x koordinaatti
     * @param y ensimmaisen ruudun y koordinaatti
     * @param x2 toisen ruudun x koordinaatti
     * @param y2 toisen ruudun y koordinaatti
     * @param ylennys sotilaan ylennys merkki
     */
    public Siirto(int x, int y, int x2, int y2, char ylennys) {
        this.alku = new Ruutu(x, y);
        this.kohde = new Ruutu(x2, y2);
        this.ylennys = ylennys;
    }

    /**
     * 
     * @param alku siirron lahtoruutu
     * @param kohde siirron kohderuutu
     * @param ylennys mahdollisen ylennyksen merkki UCI-formaatissa
     */
    public Siirto(Ruutu alku, Ruutu kohde, char ylennys) {
        this.alku = alku.kopioi();
        this.kohde = kohde.kopioi();
        this.ylennys = ylennys;
    }

    /**
     * 
     * @param siirto UCI-formaatin mukaisesti
     */
    public Siirto(String siirto) {
        alku = new Ruutu(siirto.substring(0, 2));
        kohde = new Ruutu(siirto.substring(2, 4));
        ylennys = siirto.length() == 5 ? siirto.charAt(4) : EI_YLENNYSTA;
    }

    public String getUCIString() {
        return alku.getAsString() + kohde.getAsString() + (this.ylennys != EI_YLENNYSTA ? ylennys : "");
    }

    /**
     * 
     * @return sisaltaako tama siirto ylennyksen
     */
    public boolean onYlennys() {
        return ylennys != EI_YLENNYSTA;
    }

    public char getYlennys() {
        return ylennys;
    }

    public Ruutu getAlku() {
        return alku;
    }

    public Ruutu getKohde() {
        return kohde;
    }

    @Override
    public String toString() {
        return getUCIString();
    }

    
}