
package de.ivu.elect.jee.concurrent;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;

import de.ivu.elect.jee.entity.EntityTechnicalNamePk;

@RequestScoped
public class GleichzeitigBearbeitenController implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GleichzeitigBearbeitenStore gleichzeitigBearbeitenStore;

  public GleichzeitigBearbeitenController() {
    super();
  }

  public List<GleichzeitigBearbeitenEntity> registerAndCollectAllOtherGleichzeitigBearbeitenEntities(String sessionId, String geoeffnetDurch, EntityTechnicalNamePk entityGeoeffnet) {
    List<GleichzeitigBearbeitenEntity> result = new ArrayList<>();

    gleichzeitigBearbeitenStore.registerEntityGeoeffnetInSession(sessionId, geoeffnetDurch, entityGeoeffnet);

    for (GleichzeitigBearbeitenEntity gleichzeitigBearbeitenEntity : gleichzeitigBearbeitenStore.collectAllGleichzeitigBearbeitenEntities(entityGeoeffnet)) {
      if (!sessionId.equals(gleichzeitigBearbeitenEntity.getSessionId()) || !geoeffnetDurch.equals(gleichzeitigBearbeitenEntity.getGeoeffnetDurch())) {
        result.add(gleichzeitigBearbeitenEntity);
      }
    }

    return result;
  }

  public void unregister(String sessionId, EntityTechnicalNamePk entityGeoeffnet) {
    gleichzeitigBearbeitenStore.unregisterEntityGeoeffnetInSession(sessionId, entityGeoeffnet);
  }
}
