// Path: src/main/java/engine/Visitor.java
// public abstract class Visitor {
// 
//     protected abstract boolean visit(Board b);
// 
//     protected abstract boolean visit(Tile t);
// 
//     protected abstract boolean visit(Piece p);
//     
//     public abstract boolean visit(CoordGene<Integer> c);
//     
//     public abstract boolean visit(HelpMove h);
// 
// }
// 
// Path: src/main/java/model/HelpMove.java
// public class HelpMove {
// 	private boolean isAdd;
// 	private int pieceId;
// 	private CoordGene<Integer> from;
// 	private CoordGene<Integer> target;
// 	
// 	public HelpMove(boolean isAdd, int pieceId, CoordGene<Integer> from, CoordGene<Integer> target) {
// 		this.isAdd = isAdd;
// 		this.pieceId = pieceId;
// 		this.from = from;
// 		this.target = target;
// 	}
// 	public boolean isAdd() {
// 		return isAdd;
// 	}
// 	public void setAdd(boolean isAdd) {
// 		this.isAdd = isAdd;
// 	}
// 	public int getPieceId() {
// 		return pieceId;
// 	}
// 	public void setPieceId(int pieceId) {
// 		this.pieceId = pieceId;
// 	}
// 	public CoordGene<Integer> getFrom() {
// 		return from;
// 	}
// 	public void setFrom(CoordGene<Integer> from) {
// 		this.from = from;
// 	}
// 	public CoordGene<Integer> getTarget() {
// 		return target;
// 	}
// 	public void setTarget(CoordGene<Integer> target) {
// 		this.target = target;
// 	}
// 	
// 
// 
// }
// 
// Path: src/main/java/utils/CoordGene.java
// public class CoordGene<T> {
// 	
// 	private T x;
// 	private T y;
// 	
// 	public CoordGene(T x, T y) {
// 		this.x = x;
// 		this.y = y;
// 	}
// 	public T getX() {
// 		return x;
// 	}
// 	public void setX(T x) {
// 		this.x = x;
// 	}
// 	public T getY() {
// 		return y;
// 	}
// 	public void setY(T y) {
// 		this.y = y;
// 	}
// 
//     public CoordGene<Integer> getEast() {
//         return new CoordGene<Integer>((Integer)this.x + 1, (Integer)this.y);
//     }
// 
//     public CoordGene<Integer> getSouthEast() {
//         return new CoordGene<Integer>((Integer)this.x, (Integer)this.y + 1);
//     }
// 
//     public CoordGene<Integer> getSouthWest() {
//         return new CoordGene<Integer>((Integer)this.x - 1, (Integer)this.y + 1);
//     }
// 
//     public CoordGene<Integer> getWest() {
//         return new CoordGene<Integer>((Integer)this.x - 1, (Integer)this.y);
//     }
// 
//     public CoordGene<Integer> getNorthWest() {
//         return new CoordGene<Integer>((Integer)this.x, (Integer)this.y - 1);
//     }
// 
//     public CoordGene<Integer> getNorthEast() {
//         return new CoordGene<Integer>((Integer)this.x + 1, (Integer)this.y - 1);
//     }
// 
//     @Override
//     public int hashCode() {
//         int hash = 7;
//         hash = 47 * hash + Objects.hashCode(this.x);
//         hash = 47 * hash + Objects.hashCode(this.y);
//         return hash;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         final CoordGene<?> other = (CoordGene<?>) obj;
//         if (!Objects.equals(this.x, other.x)) {
//             return false;
//         }
//         if (!Objects.equals(this.y, other.y)) {
//             return false;
//         }
//         return true;
//     }
// 
//     public List<CoordGene<Integer>> getNeighbors() {
//         List<CoordGene<Integer>> list = new ArrayList<CoordGene<Integer>>();
//         list.add(getEast());
//         list.add(getSouthEast());
//         list.add(getSouthWest());
//         list.add(getWest());
//         list.add(getNorthWest());
//         list.add(getNorthEast());
//         return list;
//     }
//     
//     @Override
//     public String toString() {
//         return "Coord{" + "x=" + x + ", y=" + y + '}' + '\n';
//     }
// 
// }


import main.java.engine.Visitor;
import main.java.model.HelpMove;
import main.java.utils.CoordGene;
import java.util.List;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package main.java.view;



/**
 *
 * @author duvernet
 */
public class Highlighter {
     private List<CoordGene<Integer>> listTohighlight;
     private HelpMove help;
     
     public Highlighter(){}
     
     public boolean accept(Visitor v){
         if( listTohighlight != null){
            for(CoordGene<Integer> c : getListTohighlight()){
                v.visit(c);
            }
         }
         if(help != null){
             v.visit(help);
         }
         return false;
     }

    /**
     * @return the listCoord
     */
    public List<CoordGene<Integer>> getListTohighlight() {
        return listTohighlight;
    }

    /**
     * @param listCoord the listCoord to set
     */
    public void setListTohighlight(List<CoordGene<Integer>> listCoord) {
        this.listTohighlight = listCoord;
    }

// Path: src/main/java/engine/Visitor.java
// public abstract class Visitor {
// 
//     protected abstract boolean visit(Board b);
// 
//     protected abstract boolean visit(Tile t);
// 
//     protected abstract boolean visit(Piece p);
//     
//     public abstract boolean visit(CoordGene<Integer> c);
//     
//     public abstract boolean visit(HelpMove h);
// 
// }
// 
// Path: src/main/java/model/HelpMove.java
// public class HelpMove {
// 	private boolean isAdd;
// 	private int pieceId;
// 	private CoordGene<Integer> from;
// 	private CoordGene<Integer> target;
// 	
// 	public HelpMove(boolean isAdd, int pieceId, CoordGene<Integer> from, CoordGene<Integer> target) {
// 		this.isAdd = isAdd;
// 		this.pieceId = pieceId;
// 		this.from = from;
// 		this.target = target;
// 	}
// 	public boolean isAdd() {
// 		return isAdd;
// 	}
// 	public void setAdd(boolean isAdd) {
// 		this.isAdd = isAdd;
// 	}
// 	public int getPieceId() {
// 		return pieceId;
// 	}
// 	public void setPieceId(int pieceId) {
// 		this.pieceId = pieceId;
// 	}
// 	public CoordGene<Integer> getFrom() {
// 		return from;
// 	}
// 	public void setFrom(CoordGene<Integer> from) {
// 		this.from = from;
// 	}
// 	public CoordGene<Integer> getTarget() {
// 		return target;
// 	}
// 	public void setTarget(CoordGene<Integer> target) {
// 		this.target = target;
// 	}
// 	
// 
// 
// }
// 
// Path: src/main/java/utils/CoordGene.java
// public class CoordGene<T> {
// 	
// 	private T x;
// 	private T y;
// 	
// 	public CoordGene(T x, T y) {
// 		this.x = x;
// 		this.y = y;
// 	}
// 	public T getX() {
// 		return x;
// 	}
// 	public void setX(T x) {
// 		this.x = x;
// 	}
// 	public T getY() {
// 		return y;
// 	}
// 	public void setY(T y) {
// 		this.y = y;
// 	}
// 
//     public CoordGene<Integer> getEast() {
//         return new CoordGene<Integer>((Integer)this.x + 1, (Integer)this.y);
//     }
// 
//     public CoordGene<Integer> getSouthEast() {
//         return new CoordGene<Integer>((Integer)this.x, (Integer)this.y + 1);
//     }
// 
//     public CoordGene<Integer> getSouthWest() {
//         return new CoordGene<Integer>((Integer)this.x - 1, (Integer)this.y + 1);
//     }
// 
//     public CoordGene<Integer> getWest() {
//         return new CoordGene<Integer>((Integer)this.x - 1, (Integer)this.y);
//     }
// 
//     public CoordGene<Integer> getNorthWest() {
//         return new CoordGene<Integer>((Integer)this.x, (Integer)this.y - 1);
//     }
// 
//     public CoordGene<Integer> getNorthEast() {
//         return new CoordGene<Integer>((Integer)this.x + 1, (Integer)this.y - 1);
//     }
// 
//     @Override
//     public int hashCode() {
//         int hash = 7;
//         hash = 47 * hash + Objects.hashCode(this.x);
//         hash = 47 * hash + Objects.hashCode(this.y);
//         return hash;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         if (this == obj) {
//             return true;
//         }
//         if (obj == null) {
//             return false;
//         }
//         if (getClass() != obj.getClass()) {
//             return false;
//         }
//         final CoordGene<?> other = (CoordGene<?>) obj;
//         if (!Objects.equals(this.x, other.x)) {
//             return false;
//         }
//         if (!Objects.equals(this.y, other.y)) {
//             return false;
//         }
//         return true;
//     }
// 
//     public List<CoordGene<Integer>> getNeighbors() {
//         List<CoordGene<Integer>> list = new ArrayList<CoordGene<Integer>>();
//         list.add(getEast());
//         list.add(getSouthEast());
//         list.add(getSouthWest());
//         list.add(getWest());
//         list.add(getNorthWest());
//         list.add(getNorthEast());
//         return list;
//     }
//     
//     @Override
//     public String toString() {
//         return "Coord{" + "x=" + x + ", y=" + y + '}' + '\n';
//     }
// 
// }


// Path: src/main/java/view/Highlighter.java
import main.java.engine.Visitor;
import main.java.model.HelpMove;
import main.java.utils.CoordGene;
import java.util.List;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package main.java.view;



/**
 *
 * @author duvernet
 */
public class Highlighter {
     private List<CoordGene<Integer>> listTohighlight;
     private HelpMove help;
     
     public Highlighter(){}
     
     public boolean accept(Visitor v){
         if( listTohighlight != null){
            for(CoordGene<Integer> c : getListTohighlight()){
                v.visit(c);
            }
         }
         if(help != null){
             v.visit(help);
         }
         return false;
     }

    /**
     * @return the listCoord
     */
    public List<CoordGene<Integer>> getListTohighlight() {
        return listTohighlight;
    }

    /**
     * @param listCoord the listCoord to set
     */
    public void setListTohighlight(List<CoordGene<Integer>> listCoord) {
        this.listTohighlight = listCoord;
    }

    public void setHelp(HelpMove help) {