import AP.Common.GDT as apCommonGDT;
businessobject JsonStructure_BO {
element ID:ID;
node Result [0,n]
{
element ID : IntegerValue;
element ParentID : IntegerValue;
element NodeLevelID: IntegerValue;
element Name : LANGUAGEINDEPENDENT_EXTENDED_Name;
element Value : LANGUAGEINDEPENDENT_EXTENDED_Name;
}
}
import ABSL;
import AP.PlatinumEngineering;
import AP.Common.GDT;
// Communication details
var ScenarioName = "GOOGLE";
var ServiceName = "GOOGLE";
var HttpMethod = "GET";
var HttpResource = ""; //URL – File Name
// not required for this example
var ContentType = "";
var Body = "";
var HeaderParameter : collectionof NameAndValue; // Set URL Parameter
var URLParameter : collectionof NameAndValue;
var URLParameterEntry : NameAndValue;
URLParameterEntry.Name = "address";
if (this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.IsSet()) // to check the adress is entered
{
var originalCityName = this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.CityName;
var originalStreetName = this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.StreetName;
var originalHouseNumber = this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.HouseID;
URLParameterEntry.Value = URL.Encode(originalCityName.Concatenate(",".Concatenate(originalStreetName.Concatenate(",".Concatenate(originalHouseNumber))))); // address string to check via Google
}
else // nothing to normalize
{
URLParameterEntry.Value = "";
}
URLParameter.Add(URLParameterEntry);
URLParameterEntry.Name = "language";
URLParameterEntry.Value = Context.GetCurrentUserLanguage().ToString();
URLParameter.Add(URLParameterEntry);
// Execute webservice call
var ws_result = WebServiceUtilities.ExecuteRESTService(ScenarioName, ServiceName, HttpMethod, HttpResource, URLParameter, HeaderParameter, ContentType, Body);
//JSON Parser;
var json = ws_result.Content;
var i = 0;
var i0 = 0;
var controlTag = "";
var controlTag2;
var lastControlTag;
var noOpenObjects = 0; // for checking check only
var noOpenArrays = 0; // for checking check only
var afterColon = false;
var string;
var result : elementsof JsonStructure_BO.Result;
var results : collectionof elementsof JsonStructure_BO.Result;
var ID = 0;
var parentID = 0;
var errorFlag = 0;
var blockId = 0;
if (ws_result.Code.Replace(" ","")=="200") // do only if return code is 200 ("OK")
{
while (i<json.Length())
{
i = json.FindRegex("\\{|\\}|\\[|\\]|\"|:|,|\\d+|true|false", i);
if (i < 0) {
//raise Message.Create("E", "Parsing error (control tag not found)");
break; // *** Error ***
}
lastControlTag = controlTag;
controlTag = json.Substring(i,1);
switch (controlTag) {
case "{" , "}", "[", "]", "," {
i = i + 1;
switch (controlTag) {
case "{" {
noOpenObjects = noOpenObjects + 1;
parentID = ID;
blockId = blockId+1;
}
case "}" {
noOpenObjects = noOpenObjects - 1;
// lookup for "grandparent ID" -> parentID
if (!(parentID == 0)) {
var partentIDtab = results.Where(n=>n.ID == parentID);
if (partentIDtab.Count() == 1) {
parentID = partentIDtab.GetFirst().ParentID;
}
else {
//raise Message.Create("E", "Parsing error (parentID not found)");
errorFlag = 1;
break; // *** Error ***
}
}
}
case "[" {
noOpenArrays = noOpenArrays + 1;
parentID = ID;
}
case "]" {
noOpenArrays = noOpenArrays - 1;
// lookup for "grandparent ID" -> parentID
if (!(parentID == 0)) {
var partentIDtab = results.Where(n=>n.ID == parentID);
if (partentIDtab.Count() == 1) {
parentID = partentIDtab.GetFirst().ParentID;
}
else {
//raise Message.Create("E", "Parsing error (parentID not found for array)");
errorFlag = 1; break; // *** Error ***
}
}
}
}
// close old node and open new one with exception list
if ( (controlTag == "," && (lastControlTag == "}" || lastControlTag == "]")) ) {
// no new node required
}
else {
if( ID > 0 ) {results.Add(result);}
ID = ID + 1;
result.ID = ID;
result.ParentID = parentID;
result.Name = "";
result.Value = "";
result.NodeLevelID = blockId;
}
afterColon = false;
} // end case "{" , ",", "}"
case ":" {
if (afterColon) {
//raise Message.Create("E", "Parsing error (open colon)");
errorFlag = 1; break; // *** Error ***
}
afterColon = true;
i = i + 1;
}
case "\"" {
i = i + 1;
i0 = i;
i = json.FindRegex("\\{|\\}|\\[|\\]|\"", i);
if (i < 0) {
//raise Message.Create("E", "Parsing error (control tag not found after quote)");
errorFlag = 1; break; // *** Error ***
}
controlTag2 = json.Substring(i,1);
if (controlTag2 == "\"") {
string = json.Substring(i0, i-i0);
if (!afterColon) { // before colon -> name
result.Name = string;
}
else {// after colon -> value
result.Value = string;
afterColon = false;
}
}
else {
//raise Message.Create("E", "Parsing error (quote not closed)");
errorFlag = 1; break; // *** Error ***
}
i = i + 1;
}
case "t", "T" {
if (!afterColon) {
//raise Message.Create("E", "Parsing error (true/false)");
errorFlag = 1; break; // *** Error ***
}
result.Value = "true";
afterColon = false;
i = i + 4;
}
case "f", "F" {
if (!afterColon) {
//raise Message.Create("E", "Parsing error (true/false)");
errorFlag = 1; break; // *** Error ***
}
result.Value = "false";
afterColon = false;
i = i + 5;
}
default {
// implementation for numeric (\d in regex)
if (!afterColon) {
//raise Message.Create("E", "Parsing error (numeric before colon)");
errorFlag = 1; break; // *** Error ***
}
i = i + 1;
i0 = i - 1;
i = json.FindRegex("\\{|\\}|\\[|\\]|\"|:|,|true|false", i);
if (i < 0) {
//raise Message.Create("E", "Parsing error (numeric: end not found)");
errorFlag = 1; break; // *** Error ***
}
controlTag2 = json.Substring(i,1);
if (controlTag2 == "}" || controlTag2 == ",") {
string = json.Substring(i0, i-i0);
result.Value = string;
afterColon = false;
}
else {
//raise Message.Create("E", "Parsing error (numeric end not correct)");
errorFlag = 1; break; // *** Error ***
}
}
}
// check
if (noOpenObjects < 0 || noOpenArrays < 0)
{
//raise Message.Create("E", "Parsing error (error during object/array processing) (1)"); // *** Error ***
errorFlag = 1;
}
} //while end
// final check
if (!(noOpenObjects == 0) && !(noOpenArrays == 0) && !(parentID == 0))
{
//raise Message.Create("E", "Parsing error (error during final check"); // *** Error ***
errorFlag = 1;
}
// End of JSON Parser
var resultTab: collectionof elementsof JsonStructure_BO.Result;
var postalCode = "";
var streetName = "";
var townName = "";
var countryCode = "";
var houseNumber = "";
var lat = 0;
var long = 0;
var coordinates: GeoCoordinates;
if (this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.IsSet()) // to check that an address BO exists
{
foreach (var r in results)
{
switch (r.Name)
{
case "postal_code"
{
resultTab = results.Where(n=>n.NodeLevelID == r.NodeLevelID && n.Name == "short_name");
if (!resultTab.GetFirst().IsInitial())
{
postalCode = resultTab.GetFirst().Value;
if (postalCode.Length()>0)
{
this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.StreetPostalCode = postalCode;
}
}
}
case "route" // street name
{
resultTab = results.Where(n=>n.NodeLevelID == r.NodeLevelID && n.Name == "short_name");
if (!resultTab.GetFirst().IsInitial())
{
streetName = resultTab.GetFirst().Value;
if (streetName.Length()>0)
{
this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.StreetName = streetName;
}
}
}
case "administrative_area_level_2" // town name
{
resultTab = results.Where(n=>n.NodeLevelID == r.NodeLevelID && n.Name == "short_name");
if (!resultTab.GetFirst().IsInitial())
{
townName = resultTab.GetFirst().Value;
if (townName.Length()>0)
{
this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.CityName = townName;
}
}
}
case "country" // country code
{
resultTab = results.Where(n=>n.NodeLevelID == r.NodeLevelID && n.Name == "short_name");
if (!resultTab.GetFirst().IsInitial())
{
countryCode = resultTab.GetFirst().Value;
if (countryCode.Length()>0)
{
this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.CountryCode = countryCode;
}
}
}
case "street_number" //house number from Google...
{
resultTab = results.Where(n=>n.NodeLevelID == r.NodeLevelID && n.Name == "short_name");
if (!resultTab.GetFirst().IsInitial())
{
houseNumber = resultTab.GetFirst().Value;
if (houseNumber.Length()>0)
{
this.CurrentDefaultAddressInformation.Address.DefaultPostalAddressRepresentation.HouseID = houseNumber;
}
}
}
case "location" // geolocation coordinates
{
resultTab = results.Where(n=>n.ParentID == r.ID);
if (resultTab.Count()>0)
{
foreach (var rr in resultTab)
{
switch (rr.Name)
{
case "lat"
{
coordinates.LatitudeMeasure.content = Numeric.ParseFromString(rr.Value.Replace("\n","").Trim());
//this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LatitudeMeasure.content = Numeric.ParseFromString(rr.Value);
}
case "lng"
{
//Trace.Info("A STR=",rr.Value);
//Trace.Info("B STR=",rr.Value.Replace("\n","").Trim());
coordinates.LongitudeMeasure.content = Numeric.ParseFromString(rr.Value.Replace("\n","").Trim());
//this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LongitudeMeasure.content = Numeric.ParseFromString(rr.Value);
}
}
}
if (this.CurrentDefaultAddressInformation.Address.GeographicalLocation.IsSet())
{
this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LongitudeMeasure = coordinates.LongitudeMeasure;
this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LatitudeMeasure = coordinates.LatitudeMeasure;
}
else
{
this.CurrentDefaultAddressInformation.Address.GeographicalLocation.Create();
this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LongitudeMeasure = coordinates.LongitudeMeasure;
this.CurrentDefaultAddressInformation.Address.GeographicalLocation.GeoCoordinates.LatitudeMeasure = coordinates.LatitudeMeasure;
}
}
}
} // end switch
}//end foraech
}// end if
} // end "global" if
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
10 | |
10 | |
7 | |
7 | |
6 | |
5 | |
5 | |
5 | |
4 |