source: osm/applications/editors/josm/plugins/CommandLine/src/CommandLine/Command.java@ 25038

Last change on this file since 25038 was 25038, checked in by hind, 14 years ago

CommandLine.jar and some quickfixes

File size: 6.4 KB
Line 
1/*
2 * Command.java
3 *
4 * Copyright 2010 Hind <foxhind@gmail.com>
5 *
6 */
7
8package CommandLine;
9
10import java.util.ArrayList;
11import java.util.Collection;
12import java.util.List;
13import java.util.regex.*;
14
15import org.openstreetmap.josm.data.osm.Node;
16import org.openstreetmap.josm.data.osm.OsmPrimitive;
17import org.openstreetmap.josm.data.osm.Relation;
18import org.openstreetmap.josm.data.osm.Way;
19import org.openstreetmap.josm.data.osm.DataSet;
20
21public class Command {
22 public String name; // Command name
23 public String run; // Executable file with arguments ("nya.exe {arg1} {arg2} ... {argn}")
24 public ArrayList<Parameter> parameters; // Required parameters list
25 public ArrayList<Parameter> optParameters; // Optional parameters list
26 public int currentParameterNum;
27 public boolean tracks;
28
29 public Command () { parameters = new ArrayList<Parameter>(); optParameters = new ArrayList<Parameter>(); currentParameterNum = 0; tracks = false; }
30
31 public boolean loadObject(Object obj) {
32 Parameter currentParameter = parameters.get(currentParameterNum);
33 //System.out.println("Parameter " + String.valueOf(currentParameterNum) + " (" + currentParameter.name + ")");
34 if (currentParameter.maxInstances == 1) {
35 //System.out.println("mI = 1");
36 //System.out.println("Candidate: " + String.valueOf(obj));
37 if (isPair(obj, currentParameter)) {
38 currentParameter.setValue(obj);
39 //System.out.println("Accepted");
40 return true;
41 }
42 }
43 else {
44 //System.out.println("mI = " + String.valueOf(currentParameter.maxInstances));
45 ArrayList<OsmPrimitive> multiValue = currentParameter.getValueList();
46 if (obj instanceof Collection) {
47 if ( ((Collection)obj).size() > currentParameter.maxInstances && currentParameter.maxInstances != 0)
48 return false;
49 //System.out.println("Candidate (selected) accepted");
50 multiValue.clear();
51 multiValue.addAll((Collection<OsmPrimitive>)obj);
52 return true;
53 }
54 else if (obj instanceof OsmPrimitive) {
55 if (multiValue.size() < currentParameter.maxInstances || currentParameter.maxInstances == 0) {
56 //System.out.println("Candidate: " + String.valueOf(obj));
57 if (isPair(obj, currentParameter)) {
58 multiValue.add((OsmPrimitive)obj);
59 //System.out.println("Accepted, added to list");
60 return true;
61 }
62 else {
63 if (nextParameter() && multiValue.size() > 0) {
64 //System.out.println("Not accepted but considering for next Parameter");
65 return loadObject(obj);
66 }
67 }
68 }
69 else {
70 if (nextParameter()) {
71 //System.out.println("Not accepted but considering for next Parameter");
72 return loadObject(obj);
73 }
74 }
75 }
76 else if (obj instanceof String) {
77 //System.out.println("Candidate: " + (String)obj);
78 if (isPair(obj, currentParameter)) {
79 currentParameter.setValue(obj);
80 //System.out.println("Accepted");
81 return true;
82 }
83 }
84 }
85 return false;
86 }
87
88 public boolean nextParameter() {
89 currentParameterNum++;
90 return (currentParameterNum < parameters.size()) ? true : false;
91 }
92
93 public boolean hasNextParameter() {
94 return ((currentParameterNum + 1) < parameters.size()) ? true : false;
95 }
96
97 public void resetLoading() {
98 currentParameterNum = 0;
99 for (Parameter parameter : parameters) {
100 if (parameter.maxInstances != 1)
101 parameter.getValueList().clear();
102 }
103 }
104
105 private static boolean isPair(Object obj, Parameter parameter) {
106 switch (parameter.type) {
107 case POINT:
108 if (obj instanceof String) {
109 Pattern p = Pattern.compile("(-?\\d*\\.?\\d*,-?\\d*\\.?\\d*;?)*");
110 Matcher m = p.matcher((String)obj);
111 return m.matches();
112 }
113 break;
114 case NODE:
115 if (obj instanceof Node) return true;
116 break;
117 case WAY:
118 if (obj instanceof Way) return true;
119 break;
120 case RELATION:
121 if (obj instanceof Relation) return true;
122 break;
123 case ANY:
124 if (obj instanceof Node || obj instanceof Way || obj instanceof Relation) return true;
125 break;
126 case LENGTH:
127 if (obj instanceof String) {
128 Pattern p = Pattern.compile("\\d*\\.?\\d*");
129 Matcher m = p.matcher((String)obj);
130 if (m.matches()) {
131 Float value = Float.parseFloat((String)obj);
132 if (parameter.minVal != 0 && value < parameter.minVal)
133 break;
134 if (parameter.maxVal != 0 && value > parameter.maxVal)
135 break;
136 return true;
137 }
138 }
139 break;
140 case NATURAL:
141 if (obj instanceof String) {
142 Pattern p = Pattern.compile("\\d*");
143 Matcher m = p.matcher((String)obj);
144 if (m.matches()) {
145 Integer value = Integer.parseInt((String)obj);
146 if (parameter.minVal != 0 && value < parameter.minVal)
147 break;
148 if (parameter.maxVal != 0 && value > parameter.maxVal)
149 break;
150 return true;
151 }
152 }
153 break;
154 case STRING:
155 if (obj instanceof String) return true;
156 break;
157 case RELAY:
158 if (obj instanceof String) {
159 if (parameter.getRawValue() instanceof Relay) {
160 if ( ((Relay)(parameter.getRawValue())).isCorrectValue((String)obj) )
161 return true;
162 }
163 }
164 break;
165 }
166 return false;
167 }
168
169 public Collection<OsmPrimitive> getDepsObjects() {
170 ArrayList<OsmPrimitive> depsObjects = new ArrayList<OsmPrimitive>();
171 for (Parameter parameter : parameters) {
172 if (!parameter.isOsm())
173 continue;
174 if (parameter.maxInstances == 1) {
175 depsObjects.addAll(getDepsObjects(depsObjects, (OsmPrimitive)parameter.getRawValue()));
176 }
177 else {
178 for (OsmPrimitive primitive : parameter.getValueList()) {
179 depsObjects.addAll(getDepsObjects(depsObjects, primitive));
180 }
181 }
182 }
183 return depsObjects;
184 }
185
186 public Collection<OsmPrimitive> getDepsObjects(Collection<OsmPrimitive> currentObjects, OsmPrimitive primitive) {
187 ArrayList<OsmPrimitive> depsObjects = new ArrayList<OsmPrimitive>();
188 if (!currentObjects.contains(primitive)) {
189 if (primitive instanceof Way) {
190 depsObjects.addAll(((Way)primitive).getNodes());
191 }
192 else if (primitive instanceof Relation) {
193 Collection<OsmPrimitive> relationMembers = ((Relation)primitive).getMemberPrimitives();
194 for (OsmPrimitive member : relationMembers) {
195 if (!currentObjects.contains(member)) {
196 depsObjects.add(member);
197 depsObjects.addAll(getDepsObjects(currentObjects, member));
198 }
199 }
200 }
201 }
202 return depsObjects;
203 }
204}
Note: See TracBrowser for help on using the repository browser.