view src/pathfinder/mergetest/EditorObject.java @ 152:09ad66f62f4a before_REP_meeting_on_080822

*** empty log message ***
author pin
date Fri, 22 Aug 2008 15:48:52 +0900
parents
children 1a2269c820df
line wrap: on
line source

package pathfinder.mergetest;

import java.util.ArrayList;
import java.util.List;

import remoteeditor.command.REPCommand;
import sample.merge.TranslaterImp1;

public class EditorObject<P> {
	
	int eid;
	private ChannelSimulator<P> channel;
	private TranslaterImp1 translater;
	private List<REPCommand> sentList;

	public EditorObject(int i, ChannelSimulator<P> cs) {
		// TODO Auto-generated constructor stub
		eid = i;
		channel = cs;
	}

	public EditorObject(int i, ChannelSimulator<P> cs, TranslaterImp1 imp1) {
		// TODO Auto-generated constructor stub
		eid = i;
		channel = cs;
		translater = imp1;
		sentList = new ArrayList<REPCommand>();
	}

	public ChannelSimulator<P> getChannel() {
		// TODO Auto-generated method stub
		return channel;
	}

	public int getEID() {
		// TODO Auto-generated method stub
		return eid;
	}

	public REPCommand receive(REPCommand command) {
		// TODO Auto-generated method stub
		
		if(command.eid == eid){
			if(checkReturnCommand(command)){
				REPCommand[] cmds = translater.catchOwnCommand(command);
				sendMergedCommand(cmds);
				return null;
			}else{
				sentList.add(command);
			}	
		}
		
		return command;
	}

	private boolean checkReturnCommand(REPCommand command) {
		// TODO Auto-generated method stub
		
		if(sentList.size() > 0){
			if(sentList.get(0).seq == command.seq){
				return true;
			}
		}
		
		return false;
	}

	private void sendMergedCommand(REPCommand[] cmds) {
		// TODO Auto-generated method stub
		for(int i = 0; i < cmds.length; i++){
			channel.write((P) cmds[i]);
		}
	}

	public void send(REPCommand command) {
		// TODO Auto-generated method stub
		if(command !=null){
			channel.write((P) command);
		}
	}

}