package com.o3dr.services.android.lib.drone.property; import android.os.Parcel; import java.text.DecimalFormat; import java.text.ParseException; import java.util.LinkedHashMap; import java.util.Map; /** * Created by fhuya on 10/28/14. */ public class Parameter implements DroneAttribute, Comparable<Parameter> { public static final int RANGE_LOW = 0; public static final int RANGE_HIGH = 1; private final static DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(); static { formatter.applyPattern("0.###"); } private String name; private double value; private int type; private String displayName; private String description; private String units; private String range; private String values; public Parameter(String name, double value, int type) { this.name = name; this.value = value; this.type = type; } public String getName() { return name; } public void setName(String name){ this.name = name; } public double getValue() { return value; } public String getDisplayValue(){ return formatter.format(value); } public void setValue(double value){ this.value = value; } public int getType() { return type; } public void setType(int type){ this.type = type; } public String getDisplayName() { return displayName; } public void setDisplayName(String displayName) { this.displayName = displayName; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getUnits() { return units; } public void setUnits(String units) { this.units = units; } public String getRange() { return range; } public void setRange(String range) { this.range = range; } public String getValues() { return values; } public void setValues(String values) { this.values = values; } public boolean hasInfo() { return (description != null && !description.isEmpty()) || (values != null && !values.isEmpty()); } public double[] parseRange() throws ParseException { final DecimalFormat format = formatter; final String[] parts = this.range.split("( to |\\s+|-)"); if (parts.length < 2) { throw new IllegalArgumentException(); } final double[] outRange = new double[2]; outRange[RANGE_LOW] = format.parse(parts[0]).doubleValue(); outRange[RANGE_HIGH] = format.parse(parts[outRange.length -1]).doubleValue(); return outRange; } public Map<Double, String> parseValues() throws ParseException { final DecimalFormat format = formatter; final Map<Double, String> outValues = new LinkedHashMap<Double, String>(); if (values != null) { final String[] tparts = this.values.split(","); for (String tpart : tparts) { final String[] parts = tpart.split(":"); if (parts.length != 2) throw new IllegalArgumentException(); outValues.put(format.parse(parts[0].trim()).doubleValue(), parts[1].trim()); } } return outValues; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Parameter)) return false; Parameter parameter = (Parameter) o; return !(name != null ? !name.equals(parameter.name) : parameter.name != null); } @Override public int hashCode() { return name != null ? name.hashCode() : 0; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(this.name); dest.writeDouble(this.value); dest.writeInt(this.type); dest.writeString(this.displayName); dest.writeString(this.description); dest.writeString(this.units); dest.writeString(this.range); dest.writeString(this.values); } private Parameter(Parcel in) { this.name = in.readString(); this.value = in.readDouble(); this.type = in.readInt(); this.displayName = in.readString(); this.description = in.readString(); this.units = in.readString(); this.range = in.readString(); this.values = in.readString(); } public static final Creator<Parameter> CREATOR = new Creator<Parameter>() { public Parameter createFromParcel(Parcel source) { return new Parameter(source); } public Parameter[] newArray(int size) { return new Parameter[size]; } }; @Override public int compareTo(Parameter another) { return name.compareTo(another.name); } }