import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.Condition;

import java.util.ArrayList;

public class DekryptMonitor{

  private static ArrayList<String> dekryptert = new ArrayList<String>();
  private static ArrayList<Melding> dekryptListe = new ArrayList<Melding>();

  private Lock laas = new ReentrantLock();
  private Condition nyMeldinglagt = laas.newCondition();
  private Condition tomt = laas.newCondition();

  private Melding beskjed;
  private int antDekryptMeldLagt;
  private int ferdigKryptografer;
  private int antKryptografer;

  public DekryptMonitor(int antKryptografer){ //Legge inn try-method
    this.antKryptografer = antKryptografer;
  }
  /*Etter at kryptografene er ferdig, blir de dekrypterte meldingen videre
  sendt til denne monitoren. Denne monitoren maa legge meldingene inn i en beholder
  en etter en (synkroniseres)*/

  public void leggDekrypterteMeldinger(Melding melding, String dekryptertTekst){
    //System.out.println("\n Dekryptert tekst blir naa tatt imot av dekryptert monitor");
    laas.lock();

    //System.out.println("Dekryptert tekst blir lagt inne i beholder (dekryptListe)");
    //System.out.println("\n Beskjeden er: " + dekryptertTekst + "\n");

    /*Legger inn i arraylist<String>*/
    dekryptert.add(dekryptertTekst);
    /*Legger inn i arrayList<Melding>*/
    dekryptListe.add(melding);

    antDekryptMeldLagt++;

    /*Signalisere til operasjonsleder at en ny melding er naa lagt inn*/
    nyMeldinglagt.signal();

    laas.unlock();
  }

  public Melding hentDekryptertMelding(){
    ArrayList<String> beholder = new ArrayList<String>();
  //  System.out.println("\n Operasjonsleder skal naa hente meldingene");

    if(ferdigKryptografer == antKryptografer && dekryptListe.size() == 0){
      return null;
    }
    laas.lock();

    try{
      while(dekryptListe.size() == 0){
    //    System.out.println("\n Operasjonsleder venter paa meldinger");

        if(ferdigKryptografer == antKryptografer && dekryptListe.size() == 0){
          return null;
        }
        nyMeldinglagt.await();
      }
    //  System.out.println("Operassjonsleder henter ut en melding \n");
      beskjed = dekryptListe.get(0);
      String dekryptOversettelse = dekryptert.get(0);
      beskjed.dekryptEndring(dekryptOversettelse);

      dekryptListe.remove(0);
      dekryptert.remove(0);
    }
    catch(InterruptedException e){
    }
    finally{
      laas.unlock();
      return beskjed;
    }
  }
  /*Andre metoder - hente metoder samt oppdateringsmetoder*/
  public ArrayList<Melding> hentDekryptertListe(){
    return dekryptListe;
  }

  public ArrayList<String> hentStringBeholder(){
    return dekryptert;
  }

  public int hentAntLagtDekryptert(){
    return antDekryptMeldLagt;
  }

  public void nyFerdigKryptograf(){
    ferdigKryptografer++;
  }

  public int hentTotalFerdigKryptografer(){
    return ferdigKryptografer;
  }

  public int hentAntKryptografer(){
    return antKryptografer;
  }
}

Add a code snippet to your website: www.paste.org