package org.androad.sys.ors.ds.openrouteservice;
import java.util.Formatter;
import java.util.Locale;
import junit.framework.Assert;
import org.osmdroid.util.GeoPoint;
import org.androad.sys.ors.adt.ds.DirectoryType;
import org.androad.sys.ors.adt.ds.POIType;
import org.androad.sys.ors.util.Util;
import org.androad.sys.ors.util.constants.ORSXMLConstants;
import android.content.Context;
public class OpenRouteServiceDSRequestComposer implements ORSXMLConstants {
/**
* <pre><?xml version="1.0" encoding="UTF-8"?>
* <xls:XLS xmlns:xls="http://www.opengis.net/xls" xmlns:sch="http://www.ascc.net/xml/schematron"
* xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink"
* xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
* xsi:schemaLocation="http://www.opengis.net/xls http://schemas.opengis.net/ols/1.1.0/DirectoryService.xsd" version="1.1">
* <xls:RequestHeader/>
* <xls:Request methodName="DirectoryRequest" requestID="123456789" version="1.1">
* <xls:DirectoryRequest distanceUnit="M" sortCriteria="Distance">
* <xls:POILocation>
* <xls:WithinDistance>
* <xls:Position>
* <gml:Point>
* <gml:pos>7.092298 50.733306</gml:pos>
* </gml:Point>
* </xls:Position>
* <xls:MinimumDistance value="500" uom="M"/>
* </xls:WithinDistance>
* </xls:POILocation>
* <xls:POIProperties directoryType="OSM">
* <xls:POIProperty name="Keyword" value="public_tran"/>
* </xls:POIProperties>
* </xls:DirectoryRequest>
* </xls:Request>
* </xls:XLS></pre>
*/
public static String create(final Context ctx, final GeoPoint aGeoPoint, final POIType aPOIType, final int pRadiusMeters){
Assert.assertNotNull(aGeoPoint);
Assert.assertNotNull(aPOIType);
final StringBuilder sb = new StringBuilder();
final Formatter f = new Formatter(sb, Locale.ENGLISH);
sb.append(XML_BASE_TAG_UTF8)
.append(XLS_OPENGIS_DIRECTORYSERVICE_TAG_OPEN);
f.format(XLS_REQUESTHEADER_TAG, Util.getORSClientName(ctx));
sb.append(XLS_REQUESTMETHOD_DIRECTORY_TAG_OPEN)
.append(XLS_DIRECTORYREQUEST_TAG_OPEN)
.append(XLS_POILOCATION_TAG_OPEN)
.append(XLS_WITHINDISTANCE_TAG_OPEN)
.append(XLS_POSITION_TAG_OPEN)
.append(GML_POINT_TAG_OPEN);
f.format(GML_POS_TAG, aGeoPoint.getLongitudeE6() / 1E6, aGeoPoint.getLatitudeE6() / 1E6);
sb.append(GML_POINT_TAG_CLOSE)
.append(XLS_POSITION_TAG_CLOSE);
f.format(XLS_MAXIMUMDISTANCE_TAG, pRadiusMeters);
sb.append(XLS_WITHINDISTANCE_TAG_CLOSE)
.append(XLS_POILOCATION_TAG_CLOSE);
f.format(XLS_POIPROPERTIES_TAG_OPEN, DirectoryType.OSM.mName);
switch(aPOIType.POIGROUPS[0]){
case MAINGROUP:
f.format(XLS_POIPROPERTY_TAG, XLS_POIPROPERTY_MAINGROUP_NAME, aPOIType.RAWNAME);
break;
default:
f.format(XLS_POIPROPERTY_TAG, XLS_POIPROPERTY_SUBGROUP_NAME, aPOIType.RAWNAME);
break;
}
sb.append(XLS_POIPROPERTIES_TAG_CLOSE)
.append(XLS_DIRECTORYREQUEST_TAG_CLOSE)
.append(XLS_REQUESTMETHOD_DIRECTORY_TAG_CLOSE)
.append(XLS_OPENGIS_DIRECTORYSERVICE_TAG_CLOSE);
return sb.toString();
}
}