package de.randi2.jsf.wrappers; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.ResourceBundle; import javax.faces.model.SelectItem; import lombok.Getter; import lombok.Setter; import de.randi2.jsf.backingBeans.AlgorithmConfig.AlgorithmPanelId; import de.randi2.model.criteria.constraints.AbstractConstraint; import de.randi2.model.randomization.BiasedCoinRandomizationConfig; import de.randi2.model.randomization.BlockRandomizationConfig; import de.randi2.model.randomization.CompleteRandomizationConfig; import de.randi2.model.randomization.MinimizationConfig; import de.randi2.model.randomization.TruncatedBinomialDesignConfig; import de.randi2.model.randomization.UrnDesignConfig; import de.randi2.simulation.distribution.AbstractDistribution; import de.randi2.simulation.distribution.ConcreteDistribution; import de.randi2.simulation.distribution.UniformDistribution; import de.randi2.simulation.model.DistributionSubjectProperty; public class DistributedCriterionWrapper<V extends Serializable, C extends AbstractConstraint<V>> { public static enum DistributionId { UNIFORM_DISTRIBUTION("uniformDistribution"), CONCRETE_DISTRIBUTION( "concreteDistribution"); private String id = null; private DistributionId(String id) { this.id = id; } @Override public String toString() { return this.id; } } @Getter @Setter private boolean seedB = false; @Getter @Setter private long seed; @Getter @Setter private List<DistributedConstraintWrapper> strataDistributions; private CriterionWrapper<V> criterion; private Class<?> distributionClass = UniformDistribution.class; @Getter private String selectedDistributionId = DistributionId.UNIFORM_DISTRIBUTION.toString(); private List<SelectItem> distributions; public List<SelectItem> getDistributions() { if (distributions == null) { distributions = new ArrayList<SelectItem>(); distributions.add(new SelectItem(DistributionId.UNIFORM_DISTRIBUTION.toString())); distributions.add(new SelectItem(DistributionId.CONCRETE_DISTRIBUTION.toString())); } return distributions; } public void setSelectedDistributionId(String selectedDistributionId) { this.selectedDistributionId = selectedDistributionId; if (selectedDistributionId .equals(DistributionId.CONCRETE_DISTRIBUTION.toString())){ distributionClass = ConcreteDistribution.class; }else if (selectedDistributionId .equals(DistributionId.UNIFORM_DISTRIBUTION.toString())){ distributionClass = UniformDistribution.class; } } public DistributedCriterionWrapper(List<DistributedConstraintWrapper> strataDistributions, CriterionWrapper<V> criterionWrapper ) { super(); this.strataDistributions = strataDistributions; this.criterion = criterionWrapper; } public Class<?> getDistributionClass() { return distributionClass; } public void setDistributionClass( Class<? extends AbstractDistribution<? extends Serializable>> distributionClass) { this.distributionClass = distributionClass; } public CriterionWrapper<V> getCriterion() { return criterion; } public void setCriterion(CriterionWrapper<V> criterion) { this.criterion = criterion; } public boolean isConcreteDistribution(){ return (distributionClass == ConcreteDistribution.class); } public DistributionSubjectProperty getDistributionSubjectProperty(){ DistributionSubjectProperty property = null; if(distributionClass == UniformDistribution.class){ UniformDistribution<Serializable> distri; if(seedB){ distri = new UniformDistribution<Serializable>((List<Serializable>) criterion.getWrappedCriterion().getConfiguredValues(),seed); }else{ distri = new UniformDistribution<Serializable>((List<Serializable>) criterion.getWrappedCriterion().getConfiguredValues()); } property = new DistributionSubjectProperty(criterion.getWrappedCriterion(), distri); }else if(distributionClass == ConcreteDistribution.class){ int[] ints = new int[strataDistributions.size()]; for(int i =0; i< strataDistributions.size();i++){ ints[i] = strataDistributions.get(i).getRatio(); } ConcreteDistribution<Serializable> distri; if(seedB){ distri = new ConcreteDistribution<Serializable>(seed,(List<Serializable>) criterion.getWrappedCriterion().getConfiguredValues(), ints); }else{ distri = new ConcreteDistribution<Serializable>((List<Serializable>) criterion.getWrappedCriterion().getConfiguredValues(), ints); } property = new DistributionSubjectProperty(criterion.getWrappedCriterion(), distri); } return property; } }