package it.albertus.cycles.model; import it.albertus.cycles.engine.InvalidPropertyException; import it.albertus.cycles.resources.Messages; import it.albertus.util.ByteUtils; import java.util.ArrayList; import java.util.List; public class Gearbox extends BikesInfElement { public static final int LENGTH = 20; public static final int MIN_VALUE = 0; /** * I valori sono a 16 bit, ma di fatto vengono considerati solo 8 bit (si * procede per multipli di 256). */ public static final int MAX_VALUE = 65535; /** 22-41 (N, 1, 2, 3, 4, 5, 6, 7, 8, 9) */ private final int[] ratios = new int[LENGTH / 2]; public Gearbox(final int[] ratios) { if (ratios.length > LENGTH / 2) { throw new IllegalArgumentException(Messages.get("err.gearbox", LENGTH / 2, ratios.length)); } for (int i = 0; i < ratios.length; i++) { this.ratios[i] = ratios[i]; } } @Override public List<Byte> toByteList() { final List<Byte> byteList = new ArrayList<Byte>(LENGTH); for (final int ratio : ratios) { byteList.addAll(ByteUtils.toByteList(ratio)); } return byteList; } public static int parse(final String key, final String value, final int radix) { final long newValue = Long.parseLong(value.trim(), radix); if (newValue < MIN_VALUE || newValue > MAX_VALUE) { throw new InvalidPropertyException(Messages.get("err.illegal.value", Integer.toString(MIN_VALUE, radix).toUpperCase(), Integer.toString(MAX_VALUE, radix).toUpperCase(), key, Long.toString(newValue, radix).toUpperCase())); } return (int) newValue; } public int[] getRatios() { return ratios; } }