
com.github.dakusui.floorplan.utils.FloorPlanUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of floorplan Show documentation
Show all versions of floorplan Show documentation
A library to model a heterogeneous and distributed software
system for testing
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