/** * */ package io.pcp.parfait.dxm.semantics; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import io.pcp.parfait.dxm.semantics.PcpScale.SpaceScale; import io.pcp.parfait.dxm.semantics.PcpScale.TimeScale; import io.pcp.parfait.dxm.semantics.PcpScale.UnitScale; import com.google.common.base.Function; import com.google.common.collect.Collections2; public enum PcpDimensionSet { SPACE(SpaceScale.class), TIME(TimeScale.class), EVENT(UnitScale.class), SPACE_PER_TIME(SpaceScale.class, TimeScale.class), SPACE_PER_EVENT(SpaceScale.class, UnitScale.class), TIME_PER_BYTE(TimeScale.class, SpaceScale.class), TIME_PER_EVENT(TimeScale.class, UnitScale.class), EVENTS_PER_SPACE(UnitScale.class, SpaceScale.class), EVENTS_PER_TIME(UnitScale.class, TimeScale.class); private final Collection<UnitMapping> unitMappings; <T extends PcpScale<?>> PcpDimensionSet(Class<T> unitDimension) { this.unitMappings = Collections2.transform(Arrays.asList(unitDimension .getEnumConstants()), new Function<PcpScale<?>, UnitMapping>() { @Override public UnitMapping apply(PcpScale<?> from) { return new UnitMapping(from.getUnit(), PcpDimensionSet.this, from, null); } }); } <T extends PcpScale<?>, U extends PcpScale<?>> PcpDimensionSet(Class<T> unitDimension, Class<U> perDimension) { this.unitMappings = new HashSet<UnitMapping>(); for (PcpScale<?> units : unitDimension.getEnumConstants()) { for (PcpScale<?> divisor : perDimension.getEnumConstants()) { unitMappings.add(new UnitMapping(units.getUnit().divide(divisor.getUnit()), PcpDimensionSet.this, units, divisor)); } } } public Collection<UnitMapping> getUnitMappings() { return unitMappings; } }