/* * CarInfo.java - Copyright(c) 2014 Joe Pasqua * Provided under the MIT License. See the LICENSE file for details. * Created: Jul 27, 2014 */ package org.noroomattheinn.visibletesla.vehicle; import java.util.Map; import org.noroomattheinn.tesla.ChargeState; import org.noroomattheinn.tesla.Options; import org.noroomattheinn.tesla.VehicleState; import org.noroomattheinn.utils.Utils; /** * CarInfo * * @author Joe Pasqua <joe at NoRoomAtTheInn dot org> */ class CarInfo { /*------------------------------------------------------------------------------ * * Constants and Enums * *----------------------------------------------------------------------------*/ private static final Map<Options.PaintColor,String> ColorMap = Utils.<Options.PaintColor,String>newHashMap( Options.PaintColor.PBCW, "white", Options.PaintColor.PBSB, "black", Options.PaintColor.PMAB, "brown", Options.PaintColor.PMMB, "blue", Options.PaintColor.PMSG, "green", Options.PaintColor.PMSS, "silver", Options.PaintColor.PMTG, "gray", Options.PaintColor.PPMR, "newred", Options.PaintColor.PPSR, "red", Options.PaintColor.PPSW, "pearl", Options.PaintColor.Unknown, "white" ); private static final Map<Options.InteriorColor,String> SeatMap = Utils.<Options.InteriorColor,String>newHashMap( Options.InteriorColor.Black, "black", Options.InteriorColor.Tan, "tan", Options.InteriorColor.Gray, "gray", Options.InteriorColor.White, "white" ); private static final Map<Options.WheelType,String> WheelMap = Utils.<Options.WheelType,String>newHashMap( Options.WheelType.WT1P, "silver19", Options.WheelType.WTX1, "silver19", Options.WheelType.WT19, "silver19", Options.WheelType.WT21, "silver21", Options.WheelType.WTSP, "gray21", Options.WheelType.WTSG, "gray21", Options.WheelType.WTAE, "aero", Options.WheelType.WTTB, "cyclone", Options.WheelType.WTTP, "cyclone", Options.WheelType.Unknown, "silver21" ); private static final String DetailsFormat = "{ \"color\": \"%s\", " + " \"seats\": \"%s\", " + " \"wheels\": \"%s\", " + " \"hasSpoiler\": %b, " + " \"hasPano\": %b, " + " \"model\": \"%s\" }"; private static final String CarStateFormat = "{ \"rf\": \"%s\", \"rr\": \"%s\", \"lf\": \"%s\", \"lr\": \"%s\"," + " \"ft\": \"%s\", \"rt\": \"%s\", " + " \"panoPct\": \"%d\", " + " \"chargePort\": \"%s\", \"charging\": %b, " + " \"locked\": %b }"; /*============================================================================== * ------- ------- * ------- Public Interface To This Class ------- * ------- ------- *============================================================================*/ public static String carDetailsAsJSON(VTVehicle v) { Options options = v.getVehicle().getOptions(); return String.format(DetailsFormat, ColorMap.get(v.paintColor()), SeatMap.get(options.seatType().getColor()), WheelMap.get(v.wheelType()), v.vehicleState.get().hasSpoiler, v.roofType() == Options.RoofType.RFPO, getModel(options)); } public static String carStateAsJSON(VTVehicle v) { VehicleState vs = v.vehicleState.get(); ChargeState cs = v.chargeState.get(); return String.format(CarStateFormat, ooc(vs.isPFOpen), ooc(vs.isPROpen), ooc(vs.isDFOpen), ooc(vs.isDROpen), ooc(vs.isFTOpen), ooc(vs.isRTOpen), vs.panoPercent, ooc(cs.chargePortOpen), cs.chargingState == ChargeState.Status.Charging, vs.locked); } /*------------------------------------------------------------------------------ * * PRIVATE - Utility Methods * *----------------------------------------------------------------------------*/ private static String ooc(boolean openState) { return openState ? "open" : "closed"; } private static String getModel(Options options) { switch (options.model()) { case S60: return "s60"; case S85: return "s85"; case P85: return "p85"; case P85Plus: return "p85+"; case P85D: return "p85d"; } return "unknown"; } }