Package br.com.six2six.fixturefactory.function

Source Code of br.com.six2six.fixturefactory.function.FixtureFunction

package br.com.six2six.fixturefactory.function;

import java.util.Arrays;
import java.util.List;

import br.com.six2six.fixturefactory.Fixture;
import br.com.six2six.fixturefactory.ObjectFactory;
import br.com.six2six.fixturefactory.processor.Processor;

public class FixtureFunction implements AtomicFunction, RelationFunction {

  private Class<?> clazz;

  private List<String> labels;
 
  private Integer quantity;

  public FixtureFunction(Class<?> clazz, String label) {
    this.clazz = clazz;
    this.labels = Arrays.asList(label);
  }

  public FixtureFunction(Class<?> clazz, String label, Integer quantity) {
    this(clazz, Arrays.asList(label), quantity);
  }
 
  public FixtureFunction(Class<?> clazz, List<String> labels, Integer quantity) {
    this.clazz = clazz;
    this.labels = labels;
    this.quantity = quantity;
  }

  @Override
  public <T> T generateValue() {
    return generate(Fixture.from(clazz));
  }
 
  @Override
  public <T> T generateValue(Processor processor) {
    return generate(Fixture.from(clazz).uses(processor));
  }
 
  @Override
  public <T> T generateValue(Object owner) {
    return generate(new ObjectFactory(Fixture.of(clazz), owner));
  }

  @Override
  public <T> T generateValue(Object owner, Processor processor) {
      return generate(Fixture.from(clazz).uses(processor));
  }

  @SuppressWarnings("unchecked")
  private <T> T generate(ObjectFactory objectFactory) {
    if(quantity != null) {
      return gimmeWithQuantity(objectFactory);
    } else {
      return (T) objectFactory.gimme(getLabel());
    }
  }

  @SuppressWarnings("unchecked")
  private <T> T gimmeWithQuantity(ObjectFactory objectFactory) {
    if(labels.size() == 1) {
      return (T) objectFactory.gimme(quantity, getLabel());
    } else {
      return (T) objectFactory.gimme(quantity, labels);
    }
  }
 
  private String getLabel() {
    return labels.get(0);
  }
}
TOP

Related Classes of br.com.six2six.fixturefactory.function.FixtureFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.