1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
package org.manzerbredes.open_klm.args;
import java.util.HashMap;
import org.javatuples.Pair;
import org.manzerbredes.open_klm.drivers.Driver;
import org.manzerbredes.open_klm.drivers.DriverTypeA;
import org.manzerbredes.open_klm.drivers.DriverTypeA.*;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
/**
* Parse args for DriverTypeA
*
* @author Manzerbredes
*
*/
public class ArgsTypeA implements Args{
/**
* Define Keyboard primary color state
*/
private HashMap<Region, Pair<Color,Intensity>> primaryColorsState=new HashMap<>();
/**
* Define Keyboard secondary color state (for wave)
*/
private HashMap<Region, Pair<Color,Intensity>> secondaryColorsState=new HashMap<>();
/**
* Define Keyboard mode state
*/
private Mode mode=Mode.NORMAL;
/**
* Build a ArgsTypeA
*
* @param driver The driver to use
*/
public ArgsTypeA(){
// Init primary color state
this.primaryColorsState.put(Region.LEFT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.HIGH));
this.primaryColorsState.put(Region.MIDDLE, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.HIGH));
this.primaryColorsState.put(Region.RIGHT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.HIGH));
// Init secondary color state
this.secondaryColorsState.put(Region.LEFT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.LOW));
this.secondaryColorsState.put(Region.MIDDLE, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.LOW));
this.secondaryColorsState.put(Region.RIGHT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.OFF, Intensity.LOW));
// Init mode
this.mode=Mode.NORMAL;
}
@Override
public void applyAndExit(Driver aDriver, String[] args){
if(aDriver.getType().equals(DriverTypeA.class)){
// Build arguments parser
OptionParser argsParser = new OptionParser();
// Define left color, middle color, right color
argsParser.accepts("lc").withRequiredArg();
argsParser.accepts("mc").withRequiredArg();
argsParser.accepts("rc").withRequiredArg();
// Define left secondary color, middle secondary color, right secondary color
argsParser.accepts("lsc").withRequiredArg();
argsParser.accepts("msc").withRequiredArg();
argsParser.accepts("rsc").withRequiredArg();
// Define mode
argsParser.accepts("mode").withRequiredArg();
// Parse the options
OptionSet parsedOptions = argsParser.parse(args);
// Try to apply options
try {
if(parsedOptions.hasArgument("lc")){
this.primaryColorsState.put(Region.LEFT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("lc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("mc")){
this.primaryColorsState.put(Region.MIDDLE, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("mc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("rc")){
this.primaryColorsState.put(Region.RIGHT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("rc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("lsc")){
this.secondaryColorsState.put(Region.LEFT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("lsc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("msc")){
this.secondaryColorsState.put(Region.MIDDLE, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("msc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("rsc")){
this.secondaryColorsState.put(Region.RIGHT, new Pair<DriverTypeA.Color, DriverTypeA.Intensity>(Color.valueOf((String) parsedOptions.valueOf("rsc")),Intensity.HIGH));
}
if(parsedOptions.hasArgument("mode")){
this.mode=Mode.valueOf(parsedOptions.argumentOf("mode"));
}
}
catch(Exception e){
System.err.println(e.getMessage());
System.exit(1);
}
// Apply argument
this.applyArguments((DriverTypeA) aDriver);
// Exit after apply
System.exit(0);
}
// Error invalid driver
System.exit(1);
}
/**
* Apply to device
*/
private void applyArguments(DriverTypeA driver){
for(Region region:Region.values()){
driver.setRegionColor(region, this.primaryColorsState.get(region).getValue0(), this.primaryColorsState.get(region).getValue1());
}
for(Region region:Region.values()){
driver.setSecondaryRegionColor(region, this.secondaryColorsState.get(region).getValue0(), this.primaryColorsState.get(region).getValue1());
}
driver.setMode(this.mode);
}
}
|