package de.ivu.elect.business.stimmeingabe.entity;

import de.ivu.elect.jee.faces.FacesContextUtil;

@javax.enterprise.inject.Vetoed
public class StimmeingabeProperties 
{

   private final AnzahlEingabeProperty anzahlEingabeProperty;
    
   private final DiscriminatorProperty discriminatorProperty;
    
   private final StimmenartProperty stimmenartProperty;
          private final StimmenartMitLeererAuswahlProperty stimmenartMitLeererAuswahlProperty;
    


  public StimmeingabeProperties(Stimmeingabe entity) {
        
    this.anzahlEingabeProperty = new AnzahlEingabeProperty(entity);
            this.discriminatorProperty = new DiscriminatorProperty(entity);
            this.stimmenartProperty = new StimmenartProperty(entity);
        this.stimmenartMitLeererAuswahlProperty = new StimmenartMitLeererAuswahlProperty(entity);
          }

  private static StimmeingabeMeta getMetaData() {
    return FacesContextUtil.getElValue("#{stimmeingabeMeta}", StimmeingabeMeta.class);
  }



    @javax.enterprise.inject.Vetoed
    @Deprecated // ELECT-4623 Nicht mehr neu verwenden, TODO Verwendung reduzieren
   public static class AnzahlEingabeProperty extends
      de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty
  {

    protected final Stimmeingabe entity;

    public AnzahlEingabeProperty(Stimmeingabe entity) {
      super();
      this.entity = entity;
    }

    public StimmeingabeMeta getMetaDataIntern() {
        return getMetaData();
    }

    @Override
    public String getDefaultLabel() {
      return getMetaDataIntern().getAnzahlEingabeEinzahlMessage();
    }

    @Override
    public boolean getDefaultRequired() {
      return getMetaDataIntern().isAnzahlEingabeRequired();
    }

    @Override
    public java.lang.String getDefaultValue() {
      return getMetaDataIntern().getAnzahlEingabeDefaultValue();
    }

  @javax.validation.constraints.Size(max=de.ivu.elect.business.stimmeingabe.entity.StimmeingabeConstants.ANZAHL_EINGABE_MAX_LENGTH  )
    
    @Override
    public java.lang.String getValue() {
      return entity.getAnzahlEingabe();
    }

    @Override
    public void setValue(java.lang.String value) {
      entity.setAnzahlEingabe(value);
    }
    @Override
    public int getDefaultMaxLength() {
      return getMetaDataIntern().getAnzahlEingabeMaxLength();
    }

  }

  public AnzahlEingabeProperty getAnzahlEingabeProperty() {
    return anzahlEingabeProperty;
  }


    
  
    @javax.enterprise.inject.Vetoed
    @Deprecated // ELECT-4623 Nicht mehr neu verwenden, TODO Verwendung reduzieren
   public static class DiscriminatorProperty extends
      de.ivu.elect.jee.presentation.dynamicform.AbstractStringProperty
  {

    protected final Stimmeingabe entity;

    public DiscriminatorProperty(Stimmeingabe entity) {
      super();
      this.entity = entity;
    }

    public StimmeingabeMeta getMetaDataIntern() {
        return getMetaData();
    }

    @Override
    public String getDefaultLabel() {
      return getMetaDataIntern().getDiscriminatorEinzahlMessage();
    }

    @Override
    public boolean getDefaultRequired() {
      return getMetaDataIntern().isDiscriminatorRequired();
    }

    @Override
    public java.lang.String getDefaultValue() {
      return getMetaDataIntern().getDiscriminatorDefaultValue();
    }

  @javax.validation.constraints.Size(max=de.ivu.elect.business.stimmeingabe.entity.StimmeingabeConstants.DISCRIMINATOR_MAX_LENGTH  )
    
    @Override
    public java.lang.String getValue() {
      return entity.getDiscriminator();
    }

    @Override
    public void setValue(java.lang.String value) {
      entity.setDiscriminator(value);
    }
    @Override
    public int getDefaultMaxLength() {
      return getMetaDataIntern().getDiscriminatorMaxLength();
    }

  }

  public DiscriminatorProperty getDiscriminatorProperty() {
    return discriminatorProperty;
  }


    
  
    @javax.enterprise.inject.Vetoed
    @Deprecated // ELECT-4623 Nicht mehr neu verwenden, TODO Verwendung reduzieren
   public static class StimmenartProperty extends
      de.ivu.elect.jee.presentation.dynamicform.AbstractEnumProperty<de.ivu.elect.business.ergebnis.entity.Stimmenart>
  {

    protected final Stimmeingabe entity;

    public StimmenartProperty(Stimmeingabe entity) {
      super();
      this.entity = entity;
    }

    public StimmeingabeMeta getMetaDataIntern() {
        return getMetaData();
    }

    @Override
    public String getDefaultLabel() {
      return getMetaDataIntern().getStimmenartEinzahlMessage();
    }

    @Override
    public boolean getDefaultRequired() {
      return getMetaDataIntern().isStimmenartRequired();
    }

    @Override
    public de.ivu.elect.business.ergebnis.entity.Stimmenart getDefaultValue() {
      return getMetaDataIntern().getStimmenartDefaultValue();
    }

    
    @Override
    public de.ivu.elect.business.ergebnis.entity.Stimmenart getValue() {
      return entity.getStimmenart();
    }

    @Override
    public void setValue(de.ivu.elect.business.ergebnis.entity.Stimmenart value) {
      entity.setStimmenart(value);
    }
    @Override
    public java.util.List<de.ivu.elect.business.ergebnis.entity.Stimmenart> getValues() {
      return java.util.Arrays.stream(de.ivu.elect.business.ergebnis.entity.Stimmenart.values()).filter(getValueFilter()).sorted().collect(java.util.stream.Collectors.toList());
    }

    @Override
    public Class<de.ivu.elect.business.ergebnis.entity.Stimmenart> getEnumClass() {
      return de.ivu.elect.business.ergebnis.entity.Stimmenart.class;
    }

  }

  public StimmenartProperty getStimmenartProperty() {
    return stimmenartProperty;
  }


            @javax.enterprise.inject.Vetoed
        @Deprecated // ELECT-4623 Nicht mehr neu verwenden, TODO Verwendung reduzieren
        public static class StimmenartMitLeererAuswahlProperty extends StimmenartProperty {
        public StimmenartMitLeererAuswahlProperty(Stimmeingabe entity) {
        super(entity);
        }

        @Override
        public boolean hasNoSelectionItem() {
        return true;
        }

        @Override
        public boolean getDefaultRequired() {
        return false;
        }
        }

        public StimmenartMitLeererAuswahlProperty getStimmenartMitLeererAuswahlProperty() {
        return stimmenartMitLeererAuswahlProperty;
        }
    
  }