package de.openjobs.step;

import junit.framework.Assert;

import org.jbehave.core.annotations.AsParameterConverter;
import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.Then;
import org.jbehave.core.annotations.When;

import de.openjobs.entities.Arbeitgeber;
import de.openjobs.entities.Stellenangebot;

public class BewerbenSteps {

	public BewerbenSteps() {
		super();
	}

	@AsParameterConverter
	public Arbeitgeber erstelleArbeitgeber(String tokenName) {
		if ("Arbeitgeber".equals(tokenName)) {
			return new Arbeitgeber();
		} else {
			Assert.fail();
		}
		return null;
	}

	@Given("ein Arbeitgeber")
	public Arbeitgeber registriereArbeitgeber() {
		return new Arbeitgeber();
	}

	@When("dieser $Arbeitgeber registriert wurde")
	public void istEinArbeitgeber(Arbeitgeber arbeitgeber) {
		Assert.assertNotNull(arbeitgeber);
	}

	@AsParameterConverter
	public Stellenangebot erstelleStellenangebot(String tokenName) {
		if ("Stellenangebot".equals(tokenName)) {
			return new Stellenangebot();
		} else {
			Assert.fail();
		}
		return null;
	}
	
	@When("ein Stellenangebot erstellt hat")
	public Stellenangebot erstelleStellenangebot() {
		final Arbeitgeber arbeitgeber = new Arbeitgeber();
		return arbeitgeber.erstelleStellenangebot();
	}

	@When("ein valides $Stellenangebot vorliegt")
	public void istEinStellenangebot(Stellenangebot stellenangebot) {
		Assert.assertNotNull(stellenangebot);
	}

	@When("das $Stellenangebot $anzahl Stelle zur Vermittlung bietet")
	public void setzeMaxAnzahlStellen(Stellenangebot stellenangebot,
			Integer anzahl) {
		stellenangebot.setAnzahlStellen(anzahl);
	}

	@Then("kann das $Stellenangebot noch auf $anzahl Stelle(n) vermittelt werden")
	public void vermittelbarAufStellen(Stellenangebot stellenangebot,
			Integer anzahl) {
		final Integer stellen = stellenangebot.getAnzahlStellen();
		Assert.assertEquals(anzahl, stellen);
	}
	//
	// @TextSyntax("Der Arbeitssuchende erstellt ein Stellengesuch.")
	// public Stellengesuch createStellengesuch() {
	// return new Stellengesuch();
	// }
	//
	// @TextSyntax("Es liegt ein valides #1 vor.")
	// public void istEinStellengesuch(Stellengesuch stellengesuch) {
	// Assert.assertNotNull(stellengesuch);
	// }
	//
	// @TextSyntax("Registrierung eines Arbeitssuchenden.")
	// public Arbeitssuchender registriereArbeitssuchender() {
	// return new Arbeitssuchender();
	// }
	//
	// @TextSyntax("Es liegt ein registrierter #1 vor.")
	// public void istEinArbeitssuchender(Arbeitssuchender arbeitssuchender) {
	// Assert.assertNotNull(arbeitssuchender);
	// }
	//
	//
	// /**
	// *
	// * @param arbeitssuchender
	// * @param stellenangebot
	// * @return Bewerbung
	// */
	// @TextSyntax("Der registrierte #1 erstellt zum #2 eine Bewerbung.")
	// public Bewerbung bewirbtSichAufStellenangebot(Arbeitssuchender
	// arbeitssuchender, Stellenangebot stellenangebot) {
	// return arbeitssuchender.erstelleBewerbung(stellenangebot);
	// }
	//
	// @TextSyntax("Damit liegt eine gültige Bewerbung vor.")
	// public void istEineBewerbung(Bewerbung bewerbung) {
	// Assert.assertNotNull(bewerbung);
	// }
	//
	// @TextSyntax("Der #1 wird vom #2 eingestellt und damit wird eine Stelle des #3 besetzt.")
	// public void einstellenArbeitssuchenden(Arbeitssuchender arbeitssuchender,
	// Arbeitgeber arbeitgeber, Stellenangebot stellenangebot ) {
	// stellenangebot.verringereStellenUm(1);
	// }

}

@@ -354,16 +354,179 @@
 teps %7B%0A%0A
+%09private final static Arbeitgeber ARBEITGEBER = new Arbeitgeber();%0A%09private final static Stellenangebot STELLENANGEBOT = ARBEITGEBER.erstelleStellenangebot();%0A%09%0A%09%0A
 %09public 
@@ -543,16 +543,16 @@
 eps() %7B%0A
-
 %09%09super(
@@ -692,33 +692,27 @@
 %09return 
-new Arbeitgeber()
+ARBEITGEBER
 ;%0A%09%09%7D el
@@ -840,33 +840,27 @@
 %09return 
-new Arbeitgeber()
+ARBEITGEBER
 ;%0A%09%7D%0A%0A%09@
@@ -1151,28 +1151,22 @@
 urn 
-new Stellenangebot()
+STELLENANGEBOT
 ;%0A%09%09
@@ -1314,104 +1314,29 @@
 %7B%0A%09%09
-final Arbeitgeber arbeitgeber = new Arbeitgeber();%0A%09%09return arbeitgeber.erstelleStellenangebot()
+return STELLENANGEBOT
 ;%0A%09%7D

version mit Konstanten