
package de.ivu.elect.presentation.security;

import javax.enterprise.inject.Specializes;

import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;
import de.ivu.elect.business.security.entity.EntityMitSperrmerkmal;
import de.ivu.elect.presentation.personenregister.PersonenregisterPersonendatenSearchResultEntry;

@Specializes
public class CommonSperrmerkmalSecurityDefinition extends SperrmerkmalSecurityDefinition {

  private static final long serialVersionUID = 1L;

  public CommonSperrmerkmalSecurityDefinition() {
    super();
  }

  @Override
  protected boolean isSperreEinsehbarInternal(EntityMitSperrmerkmal entityMitSperrmerkmal) {
    return isEntityMitSperrmerkmalUebernommenInDb(entityMitSperrmerkmal) || super.isSperreEinsehbarInternal(entityMitSperrmerkmal);
  }

  @Override
  protected boolean isSperreBearbeitbarInternal(EntityMitSperrmerkmal entityMitSperrmerkmal) {
    return isEntityMitSperrmerkmalUebernommenInDb(entityMitSperrmerkmal) || super.isSperreBearbeitbarInternal(entityMitSperrmerkmal);
  }

  protected boolean isEntityMitSperrmerkmalUebernommenInDb(EntityMitSperrmerkmal entityMitSperrmerkmal) {
    // ELECTMUC-1326, dass bereits ins System übernommene Personendaten zwar als Sperrfälle gekennzeichnet werden
    // sollen, aber dennoch für jeden einsehbar und bearbeitbar sind.
    return !matchesEntityMitSperrmerkmalClass(entityMitSperrmerkmal, PersonenregisterPersonendaten.class) //
        && !matchesEntityMitSperrmerkmalClass(entityMitSperrmerkmal, PersonenregisterPersonendatenSearchResultEntry.class);
  }
}
