/*
* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.catalog.arcgis.agportal.client;
import com.esri.gpt.catalog.arcgis.agportal.itemInfo.ESRI_ItemInformation;
import com.esri.gpt.framework.geometry.Envelope;
import com.esri.gpt.framework.util.Val;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Item Info JSON adapter.
* NOTE! This is EXPERIMENTAL feature. It might be removed at any time in the future.
*/
public class ItemInfoJsonAdapter {
/**
* Transforms JSON object into item information.
* @param jsonObject JSON object containing item information
* @return item information
* @throws JSONException if accessing JSON object fails
*/
public ESRI_ItemInformation toItemInfo(JSONObject jsonObject) throws JSONException {
ESRI_ItemInformation itemInfo = new ESRI_ItemInformation();
itemInfo.setId(jsonObject.getString("id"));
itemInfo.setTitle(jsonObject.getString("title"));
itemInfo.setDescription(jsonObject.getString("description"));
itemInfo.setSnippet(jsonObject.getString("snippet"));
itemInfo.setUrl(jsonObject.getString("url"));
itemInfo.setOwner(jsonObject.getString("owner"));
itemInfo.setAccess(jsonObject.getString("access"));
itemInfo.setCulture(jsonObject.getString("culture"));
itemInfo.setType(jsonObject.getString("type"));
itemInfo.setTypeKeywords(makeListFromJsonArray(jsonObject.getJSONArray("typeKeywords")));
itemInfo.setTags(makeListFromJsonArray(jsonObject.getJSONArray("tags")));
JSONArray extentArray = jsonObject.getJSONArray("extent");
if (extentArray!=null && extentArray.length()==2) {
String [] lowerCorner = Val.chkStr(extentArray.getJSONArray(0).toString()).replaceAll("^\\[|\\]$", "").split(",");
String [] upperCorner = Val.chkStr(extentArray.getJSONArray(1).toString()).replaceAll("^\\[|\\]$", "").split(",");
double minx = -180, miny = -90, maxx = 180, maxy = 90;
if (lowerCorner!=null && lowerCorner.length==2) {
minx = Val.chkDbl(lowerCorner[0], minx);
miny = Val.chkDbl(lowerCorner[1], miny);
}
if (upperCorner!=null && upperCorner.length==2) {
maxx = Val.chkDbl(upperCorner[0], maxx);
maxy = Val.chkDbl(upperCorner[1], maxy);
}
itemInfo.setExtent(new Envelope(minx, miny, maxx, maxy));
}
String sModifiedDate = Val.chkStr(jsonObject.getString("modified"));
itemInfo.setModifiedDate(formatDate(sModifiedDate));
return itemInfo;
}
/**
* Formats date.
* @param dateAsStringHavingLong string having long numerical
* @return date
*/
private Date formatDate(String dateAsStringHavingLong) {
try {
Long lDate = Long.parseLong(dateAsStringHavingLong);
return new Date(lDate);
} catch (NumberFormatException ex) {
return null;
}
}
/**
* Makes list of strings from JSON array.
* @param array JSON array
* @return list of strings
* @throws JSONException if accessing JSON object fails
*/
private List<String> makeListFromJsonArray(JSONArray array) throws JSONException {
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < array.length(); i++) {
String str = Val.chkStr(array.getString(i));
if (str.length()>0) {
list.add(str);
}
}
return list;
}
}