package jp.ac.kyutech.mns.ist.filter;

import java.io.Serializable;
import java.util.ArrayList;

import jp.ac.kyutech.mns.ist.Note;
import jp.ac.kyutech.mns.ist.ShortStroke;
import jp.ac.kyutech.mns.ist.SimpleATN;

/**
 * フィルタの新規作成，ファイルへの書き込み，ファイルからの読み出し，の仕組み
 * （１）領域フィルタの新規作成（自動でよい），領域の追加，アクションの登録，アドホックなアクションの実行と保存
 * フィルタの単位：ペンID = Note毎？さらにシートに分ける？ シートに分けないなら領域情報がそれを含むことになる．
 * 
 * @author miuramo
 *
 */

public class BaseSSFilter implements Serializable {
	private static final long serialVersionUID = 826803417402122550L;


	public BaseSSFilter(){

	}

	public void sieve(BaseSSAction act){
		act.beforePickUp();
		for(Note note: SimpleATN.theapp.notes.values()){
			for(ShortStroke ss: note.getAll()){
				if (doesPickUp(ss)){
					act.processPickedUp(ss);
				} else {
					act.processNotPickedUp(ss);
				}
			}
		}
		act.afterPickUp();
	}
	/**
	 * ここに，単独チェックでのピックアップ条件をかく
	 * @param ss
	 * @return
	 */
	public boolean doesPickUp(ShortStroke ss){
		return false;
	}


	public void sieveByPair(BaseSSAction act){
		act.beforePairPickUp();
		for(Note note: SimpleATN.theapp.notes.values()){
			ArrayList<ShortStroke> orig = note.getAll();
			for(int i=1;i<orig.size();i++){
				ShortStroke ss1 = orig.get(i-1);
				ShortStroke ss2 = orig.get(i);
				if (doesPickUpByPair(ss1,ss2)){
					act.processPickedUpByPair(ss1, ss2);
				} else {
					act.processNotPickedUpByPair(ss1, ss2);
				}
			}
		}
		act.afterPairPickUp();
	}
	/**
	 * ここに，ペアチェックでのピックアップ条件をかく
	 * @param ss1
	 * @param ss2
	 * @return
	 */
	public boolean doesPickUpByPair(ShortStroke ss1, ShortStroke ss2){
		return false;
	}

}
