1 package tim.prune.gui.colour;
5 import tim.prune.config.ColourUtils;
8 * Factory for the creation of PointColourer objects
10 public abstract class ColourerFactory
12 /** Enumeration of colourer types */
13 public enum ColourerId
26 * Does the specified colourer need a field for maximum number of colours?
27 * @param inId id of colourer
28 * @return true if max colours required, false otherwise
30 public static boolean isMaxColoursRequired(ColourerId inId)
34 case NONE: return false;
35 case BY_FILE: return FileColourer.isMaxColoursRequired();
36 case BY_SEGMENT: return SegmentColourer.isMaxColoursRequired();
37 case BY_ALTITUDE: return AltitudeColourer.isMaxColoursRequired();
38 case BY_SPEED: return SpeedColourer.isMaxColoursRequired();
39 case BY_VSPEED: return VertSpeedColourer.isMaxColoursRequired();
40 case BY_GRADIENT: return GradientColourer.isMaxColoursRequired();
41 case BY_DATE: return DateColourer.isMaxColoursRequired();
47 * Does the specified colourer need fields for start and end colours?
48 * @param inId id of colourer
49 * @return true if colours required, false otherwise
51 public static boolean areColoursRequired(ColourerId inId)
53 // all of them except NONE need start and end colours
54 return inId != ColourerId.NONE;
58 * @param inDesc Single character used as a code (in Config string)
59 * @return associated ColourerId
61 private static ColourerId getColourerId(char inDesc)
65 case 'f': return ColourerId.BY_FILE;
66 case 's': return ColourerId.BY_SEGMENT;
67 case 'a': return ColourerId.BY_ALTITUDE;
68 case 'p': return ColourerId.BY_SPEED;
69 case 'v': return ColourerId.BY_VSPEED;
70 case 'g': return ColourerId.BY_GRADIENT;
71 case 'd': return ColourerId.BY_DATE;
73 return ColourerId.NONE;
77 * Create a new PointColourer object given the parameters
78 * @param inId id of colourer to create
79 * @param inStartColour start colour
80 * @param inEndColour end colour
81 * @param inMaxColours maximum number of colours
82 * @return PointColourer object, or null
84 public static PointColourer createColourer(ColourerId inId, Color inStartColour, Color inEndColour, String inMaxColours)
90 case NONE: return null;
91 case BY_FILE: return new FileColourer(inStartColour, inEndColour, Integer.parseInt(inMaxColours));
92 case BY_SEGMENT: return new SegmentColourer(inStartColour, inEndColour, Integer.parseInt(inMaxColours));
93 case BY_ALTITUDE: return new AltitudeColourer(inStartColour, inEndColour);
94 case BY_SPEED: return new SpeedColourer(inStartColour, inEndColour);
95 case BY_VSPEED: return new VertSpeedColourer(inStartColour, inEndColour);
96 case BY_GRADIENT: return new GradientColourer(inStartColour, inEndColour);
97 case BY_DATE: return new DateColourer(inStartColour, inEndColour, Integer.parseInt(inMaxColours));
100 catch (NumberFormatException nfe) {} // drop out to return null
105 * Create a PointColourer object from the given description
106 * @param inString string from config
107 * @return PointColourer object, or null if string was invalid
109 public static PointColourer createColourer(String inString)
113 String[] comps = inString.split(";");
114 if (comps.length == 4)
116 ColourerId colourerType = getColourerId(comps[0].charAt(0));
117 Color startColour = ColourUtils.colourFromHex(comps[1]);
118 Color endColour = ColourUtils.colourFromHex(comps[2]);
119 String maxColours = comps[3];
120 return createColourer(colourerType, startColour, endColour, maxColours);
123 catch (NullPointerException npe) {}
124 catch (NumberFormatException nfe) {}
129 * Convert the given PointColourer object into a string for the config
130 * @param inColourer PointColourer object
131 * @return string describing object (for later re-creation) or null
133 public static String pointColourerToString(PointColourer inColourer)
135 if (inColourer != null)
137 final String startColour = ColourUtils.makeHexCode(inColourer.getStartColour());
138 final String endColour = ColourUtils.makeHexCode(inColourer.getEndColour());
139 final int maxColours = inColourer.getMaxColours();
140 if (inColourer instanceof FileColourer) {
141 return "f;" + startColour + ";" + endColour + ";" + maxColours;
143 else if (inColourer instanceof SegmentColourer) {
144 return "s;" + startColour + ";" + endColour + ";" + maxColours;
146 else if (inColourer instanceof AltitudeColourer) {
147 return "a;" + startColour + ";" + endColour + ";0";
149 else if (inColourer instanceof SpeedColourer) {
150 return "p;" + startColour + ";" + endColour + ";0";
152 else if (inColourer instanceof VertSpeedColourer) {
153 return "v;" + startColour + ";" + endColour + ";0";
155 else if (inColourer instanceof GradientColourer) {
156 return "g;" + startColour + ";" + endColour + ";0";
158 else if (inColourer instanceof DateColourer) {
159 return "d;" + startColour + ";" + endColour + ";" + maxColours;
166 * Get the colourer-specific end of the description key for translation
167 * @param inId id of colourer
168 * @return end of description key for combobox text
170 public static String getDescriptionKey(ColourerId inId)
174 case NONE: return "none";
175 case BY_FILE: return "byfile";
176 case BY_SEGMENT: return "bysegment";
177 case BY_ALTITUDE: return "byaltitude";
178 case BY_SPEED: return "byspeed";
179 case BY_VSPEED: return "byvertspeed";
180 case BY_GRADIENT: return "bygradient";
181 case BY_DATE: return "bydate";
187 * Get the id of the given colourer, according to its class
188 * @param inColourer point colourer object, or null
189 * @return id, for example for selection in dropdown
191 public static ColourerId getId(PointColourer inColourer)
193 if (inColourer != null)
195 if (inColourer instanceof FileColourer) {return ColourerId.BY_FILE;}
196 if (inColourer instanceof SegmentColourer) {return ColourerId.BY_SEGMENT;}
197 if (inColourer instanceof AltitudeColourer) {return ColourerId.BY_ALTITUDE;}
198 if (inColourer instanceof SpeedColourer) {return ColourerId.BY_SPEED;}
199 if (inColourer instanceof VertSpeedColourer) {return ColourerId.BY_VSPEED;}
200 if (inColourer instanceof GradientColourer) {return ColourerId.BY_GRADIENT;}
201 if (inColourer instanceof DateColourer) {return ColourerId.BY_DATE;}
203 return ColourerId.NONE;