// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.plugins.tracer2.server;
import java.util.ArrayList;
import org.openstreetmap.josm.Main;
import org.openstreetmap.josm.data.coor.LatLon;
import org.openstreetmap.josm.plugins.tracer2.preferences.ServerParam;
public class GetTrace extends Request {
private LatLon m_oLatLon;
private ServerParam m_oServerParam;
public ArrayList<LatLon> m_listLatLon = new ArrayList<>();
/**
* Trace s simple shape on position.
* @param oLatLon position of starting traceing.
* @param oParam parameter for tracing.
*/
public GetTrace(LatLon oLatLon, ServerParam oParam) {
m_oLatLon = oLatLon;
m_oServerParam = oParam;
}
/**
* Thread that get a shape from the Server.
*/
@Override
public void run() {
m_listLatLon = new ArrayList<>();
try {
String strResponse = callServer("traceOrder=GetTrace"
+ "&traceLat=" + m_oLatLon.lat()
+ "&traceLon=" + m_oLatLon.lon()
+ "&traceName=" + m_oServerParam.getName()
+ "&traceUrl=" + m_oServerParam.getUrl()
+ "&traceTileSize=" + m_oServerParam.getTileSize()
+ "&traceResolution=" + m_oServerParam.getResolution()
//+ "&traceSkipBottom=" + param.getSkipBottom()
+ "&traceMode=" + m_oServerParam.getMode()
+ "&traceThreshold=" + m_oServerParam.getThreshold()
+ "&tracePointsPerCircle=" + m_oServerParam.getPointsPerCircle()
);
if (strResponse == null || strResponse.equals("")) {
return;
}
if (checkError(strResponse) == true) {
return;
}
if (strResponse.startsWith("(")) {
GetPoints(strResponse);
return;
}
String[] astrParts = strResponse.split("&");
for (String strPart : astrParts) {
if (strPart.contains("tracePoints=")) {
String strPoints = strPart.replace("tracePoints=", "");
GetPoints(strPoints);
return;
}
}
} catch (Exception e) {
//m_listLatLon = new ArrayList<>();
Main.warn(e);
}
}
/**
* Get points from string
*/
public void GetPoints(String strResponse) {
try {
if (!strResponse.startsWith("(") || !strResponse.endsWith(")")) {
return;
}
strResponse = strResponse.substring(1, strResponse.length()-1);
ArrayList<LatLon> nodelist = new ArrayList<>();
String[] astrPoints = strResponse.split("\\)\\(");
for (String strPoint : astrPoints) {
String[] astrParts = strPoint.split(":");
double x = Double.parseDouble(astrParts[0]);
double y = Double.parseDouble(astrParts[1]);
nodelist.add(new LatLon(x, y));
}
m_listLatLon = nodelist;
} catch (Exception e) {
//m_listLatLon = new ArrayList<>();
Main.warn(e);
}
}
}