All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.dakusui.floorplan.utils.FloorPlanUtils Maven / Gradle / Ivy

Go to download

A library to model a heterogeneous and distributed software system for testing

There is a newer version: 5.1.1
Show newest version
package com.github.dakusui.floorplan.utils;

import com.github.dakusui.floorplan.component.Attribute;
import com.github.dakusui.floorplan.component.Configurator;
import com.github.dakusui.floorplan.core.Fixture;
import com.github.dakusui.floorplan.core.FixtureConfigurator;
import com.github.dakusui.floorplan.core.FixtureDescriptor;
import com.github.dakusui.floorplan.core.FloorPlan;
import com.github.dakusui.floorplan.policy.Policy;

import java.util.function.Function;

/**
 * A utility class that collects useful methods for users of the 'FloorPlan' library.
 */
public enum FloorPlanUtils {
  ;
  @SuppressWarnings("unchecked")
  public static  T resolve(A attr, Configurator configurator, Policy policy) {
    return (T) Function.class.cast(Function.class.cast(configurator.resolverFor(attr, policy).apply(configurator))).apply(policy);
  }

  public static Fixture buildFixture(FixtureDescriptor fixtureDescriptor) {
    return createFixture(fixtureDescriptor, createPolicy(fixtureDescriptor));
  }

  @SuppressWarnings("unchecked")
  private static Fixture createFixture(FixtureDescriptor fixtureDescriptor, Policy policy) {
    FixtureConfigurator fixtureConfigurator = policy.fixtureConfigurator();
    fixtureDescriptor.attributes().forEach(
        each -> fixtureConfigurator.configure(
            each.target,
            each.attribute,
            each.resolver
        )
    );
    fixtureDescriptor.operatorFactoryAdders().forEach(
        each -> each.accept(fixtureConfigurator)
    );
    return fixtureConfigurator.build();
  }

  private static Policy createPolicy(FixtureDescriptor fixtureDescriptor) {
    Policy.Builder policyBuilder = new Policy.Builder().setProfile(
        fixtureDescriptor.profile()
    );
    fixtureDescriptor.specs().forEach(policyBuilder::addComponentSpec);
    policyBuilder.setFloorPlan(createFloorPlan(fixtureDescriptor));
    return policyBuilder.build();
  }

  private static FloorPlan createFloorPlan(FixtureDescriptor fixtureDescriptor) {
    FloorPlan floorPlan = new FloorPlan.Impl();
    fixtureDescriptor.refs().forEach(floorPlan::add);
    fixtureDescriptor.wires().forEach(each -> floorPlan.wire(each.from, each.as, each.tos));
    return floorPlan;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy