view src/alice/test/dpp/codesegment/philosophy2/TakeLeftForkCodeSegment.java @ 30:5eb22e2f7169 draft

merge 28, 29
author Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 29 Jan 2013 17:17:44 +0900
parents src/alice/test/dpp/codesegment/philosophy/TakeLeftForkCodeSegment.java@d45de183af46 src/alice/test/dpp/codesegment/philosophy/TakeLeftForkCodeSegment.java@f77f0bb99f35
children
line wrap: on
line source

package alice.test.dpp.codesegment.philosophy2;

import alice.codesegment.CodeSegment;
import alice.datasegment.CommandType;
import alice.datasegment.Receiver;
import alice.test.dpp.codesegment.philosophy.EatCodeSegment;
import alice.test.dpp.datasegment.Fork;
import alice.test.dpp.datasegment.Philosophy;

public class TakeLeftForkCodeSegment extends CodeSegment {

	Receiver arg1 = ids.create(CommandType.TAKE);
	Receiver arg2 = ids.create(CommandType.TAKE);
	
	public TakeLeftForkCodeSegment(String pName, String forkName) {
		arg1.setKey(pName);
		arg2.setKey(forkName);
	}
	
	@Override
	public void run() {
		Philosophy phil = arg1.asClass(Philosophy.class);
		Fork fork = arg2.asClass(Fork.class);
		System.out.println(phil.getName() + " take left fork.");
		if (fork.takeFork(phil.getName())) {
			phil.setState(Philosophy.State.EAT);
			new EatCodeSegment(phil.getName());
		} else { 
			new TakeLeftForkCodeSegment(phil.getName(), phil.getLeftFork());
		}
		ods.update("local", phil.getName(), phil);
		ods.update("local", fork.getForkName(), fork);
	}
}