import java.util.ArrayList;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author vimar
*/
public class Baustelle {
int aktuellerZiegelStein = 0; // startarray[0]
ArrayList <cluster> ZiegelsteinHaufen; // arraymit 1000 objekten
// chef + arbeiter;
chef cheffe;
bauarbeiter b1,b2,b3,b4;
// zuweisung
public Baustelle(ArrayList <cluster> ZiegelsteinHaufen){
this.ZiegelsteinHaufen = ZiegelsteinHaufen;
cheffe = new chef();
b1 = new bauarbeiter(ZiegelsteinHaufen,"b1",cheffe); //thread1
b2 = new bauarbeiter(ZiegelsteinHaufen,"b2",cheffe); //thread2
b3 = new bauarbeiter(ZiegelsteinHaufen,"b3",cheffe); //thread3
b4 = new bauarbeiter(ZiegelsteinHaufen,"lahmesPferd",cheffe); //thread4
cheffe.setMaxZiegel(ZiegelsteinHaufen.size()); // -1?
cheffe.setB1(b1);
cheffe.setB2(b2);
cheffe.setB3(b3);
cheffe.setB4(b4);
}
public boolean starteArbeit() throws InterruptedException{
//reset
cheffe.isChanged = false;
cheffe.setAktZiegel(0);
// reset ende
// cheffe.getB1().stop();
// cheffe.getB2().stop();
// cheffe.getB3().stop();
//cheffe.getB4().stop();
System.out.println("Nicht alle Centroiden richtig, nochmal alles!");
while(cheffe.getAktZiegel() < cheffe.getMaxZiegel()){ // && das nochmal in if2,if3,if4
if (cheffe.getAktZiegel() < cheffe.getMaxZiegel() -4){
if(!(cheffe.getB1().isAlive())){ // wenn der pennt!
cheffe.setB1(new bauarbeiter(ZiegelsteinHaufen,"Hugo",cheffe));
cheffe.getB1().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB1().start();
}
if(!(cheffe.getB2().isAlive())){
cheffe.setB2(new bauarbeiter(ZiegelsteinHaufen,"Stefan",cheffe));
cheffe.getB2().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB2().start();
}
if(!(cheffe.getB3().isAlive())){
cheffe.setB3(new bauarbeiter(ZiegelsteinHaufen,"Alex",cheffe));
cheffe.getB3().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB3().start();
}
if(!(cheffe.getB4().isAlive())){
cheffe.setB4(new bauarbeiter(ZiegelsteinHaufen,"Johannes",cheffe));
cheffe.getB4().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB4().start();
}
}
else
{
if((!(cheffe.getB1().isAlive())) && (cheffe.getAktZiegel() < cheffe.getMaxZiegel())){ // wenn der pennt!
cheffe.setB1(new bauarbeiter(ZiegelsteinHaufen,"Hugo",cheffe));
cheffe.getB1().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB1().start();
}
if((!(cheffe.getB2().isAlive())) && (cheffe.getAktZiegel() < cheffe.getMaxZiegel())){
cheffe.setB2(new bauarbeiter(ZiegelsteinHaufen,"Stefan",cheffe));
cheffe.getB2().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB2().start();
}
if((!(cheffe.getB3().isAlive()))&& (cheffe.getAktZiegel() < cheffe.getMaxZiegel())){
cheffe.setB3(new bauarbeiter(ZiegelsteinHaufen,"Alex",cheffe));
cheffe.getB3().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB3().start();
}
if((!(cheffe.getB4().isAlive()))&& (cheffe.getAktZiegel() < cheffe.getMaxZiegel())){
cheffe.setB4(new bauarbeiter(ZiegelsteinHaufen,"Johannes",cheffe));
cheffe.getB4().aktZiegel = cheffe.getAktZiegel();
updateAktZiegel();
cheffe.getB4().start();
}
// if (cheffe.getB1().isAlive()) cheffe.getB1().join();
// if (cheffe.getB2().isAlive()) cheffe.getB2().join();
// if (cheffe.getB3().isAlive()) cheffe.getB3().join();
// if (cheffe.getB4().isAlive()) cheffe.getB4().join();
}
}
// Thread.sleep(100);
while(cheffe.getB1().isAlive() || cheffe.getB2().isAlive() ||
cheffe.getB3().isAlive() || cheffe.getB4().isAlive()){
// NIXXX
}
if (!(cheffe.isChanged)){
System.out.println("sind wohl fertig -.-");
return false; // legendärer punkt wenn mal alles fertig is -.-
}
return true; // returned true und geht somit wieder in diese fkt.
// könnte auch "return startearbeit();" schreiben.
}
public synchronized void updateAktZiegel(){
cheffe.setAktZiegel(cheffe.getAktZiegel()+1);
}
}