package de.ivu.elect.business.konfiguration.control;

import java.io.Serializable;
import java.nio.file.Path;
import java.nio.file.Paths;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.konfiguration.entity.ElectKonfigurationWerte;
import de.ivu.elect.business.konfiguration.entity.KonfigurationExtendedLoader;
import de.ivu.elect.jee.cdi.BeanManagerUtil;
import de.ivu.elect.jee.faces.FacesMessageUtil;

public class VerzeichnisNichtUnterhalbAblageVerzeichnisValidator implements Validator, Serializable {

  private static final long serialVersionUID = 1L;

  @Override
  public void validate(FacesContext facesContext, UIComponent component, Object o) throws ValidatorException {

    if (o != null) {
      String path = o.toString().trim();
      if (!StringUtils.isBlank(path)) {

        String ablage = BeanManagerUtil.getBeanByClass(KonfigurationExtendedLoader.class)
            .resolveStringValue(ElectKonfigurationWerte.ELECT_COMMON_DATEI_ABLAGE_VERZEICHNIS_PFAD);
        if (StringUtils.isBlank(ablage)) {
          return;
        }

        Path pfadAngegeben = Paths.get(path).toAbsolutePath();
        Path pfadAblage = Paths.get(ablage).toAbsolutePath();

        if (pfadAngegeben.startsWith(pfadAblage)) {
          throw new ValidatorException(FacesMessageUtil
              .createErrorMessage(facesContext, "verzeichnis.validation.failed.unterhalb.von.ablageverzeichnis",
                  "verzeichnis.validation.failed.unterhalb.von.ablageverzeichnis", new Object[]{ablage}));
        }
      }
    }
  }
}
