blob: 63711e61f741d0c0dd62ee8a0ad30ab89c4d0673 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 models.metadata;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.*;
import com.fasterxml.jackson.databind.JsonNode;
import util.APICall;
import util.Constants;
public class ClimateService {
private String id;
private String climateServiceName;
private String purpose;
private String url;
private String scenario;
private String version;
private String rootservice;
private String photo;
public String getScenario() {
return scenario;
}
public void setScenario(String scenario) {
this.scenario = scenario;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getRootservice() {
return rootservice;
}
public void setRootservice(String rootservice) {
this.rootservice = rootservice;
}
private static final String GET_CLIMATE_SERVICES_CALL = Constants.NEW_BACKEND+"climateService/getAllClimateServices/json";
private static final String GET_MOST_RECENTLY_ADDED_CLIMATE_SERVICES_CALL = Constants.NEW_BACKEND+"climateService/getAllMostRecentClimateServicesByCreateTime/json";
private static final String GET_MOST_RECENTLY_USED_CLIMATE_SERVICES_CALL = Constants.NEW_BACKEND+"climateService/getAllMostRecentClimateServicesByLatestAccessTime/json";
private static final String GET_MOST_POPULAR_CLIMATE_SERVICES_CALL = Constants.NEW_BACKEND+"climateService/getAllMostUsedClimateServices/json";
private static final String ADD_CLIMATE_SERVICE_CALL = Constants.NEW_BACKEND+"climateService/addClimateService";
private static final String DELETE_CLIMATE_SERVICE_CALL = Constants.NEW_BACKEND + util.Constants.NEW_DELETE_CLIMATE_SERVICE;
private static final String EDIT_CLIMATE_SERVICE_CALL = Constants.NEW_BACKEND+ "climateService/"
+ util.Constants.NEW_EDIT_CLIMATE_SERVICE + "/name/";
public ClimateService() {
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public String getClimateServiceName() {
return climateServiceName;
}
public String getPurpose() {
return purpose;
}
public String getUrl() {
return url;
}
public void setId(String id) {
this.id = id;
}
public void setClimateServiceName(String climateServiceName) {
this.climateServiceName = climateServiceName;
}
public void setPurpose(String purpose) {
this.purpose = purpose;
}
public void setUrl(String url) {
this.url = url;
setPhoto();
}
public static ClimateService find(String id) {
ClimateService climateService = new ClimateService();
climateService.setId(id);
return climateService;
}
/**
* find a climateService by its name
*
* @param climateServiceName
* @return the founded result. If not found, return null
*/
public static ClimateService findServiceByName(String climateServiceName){
List<ClimateService> allList = all();
for (ClimateService element : allList) {
String elementUri = element.getClimateServiceName();
if (elementUri.equals(climateServiceName))
return element;
}
return null;
}
/**
* Generate the list of all sensor categories
*
* @return a list of all the sensor categories
*/
public static List<ClimateService> all() {
List<ClimateService> climateServices = new ArrayList<ClimateService>();
JsonNode climateServicesNode = APICall
.callAPI(GET_CLIMATE_SERVICES_CALL);
if (climateServicesNode == null || climateServicesNode.has("error")
|| !climateServicesNode.isArray()) {
return climateServices;
}
for (int i = 0; i < climateServicesNode.size(); i++) {
JsonNode json = climateServicesNode.path(i);
ClimateService newService = new ClimateService();
newService.setId(json.path("id").asText());
newService.setClimateServiceName(json.get(
"name").asText());
newService.setPurpose(json.path("purpose").asText());
newService.setUrl(json.path("url").asText());
//newService.setCreateTime(json.path("createTime").asText());
newService.setScenario(json.path("scenario").asText());
newService.setVersion(json.path("versionNo").asText());
newService.setRootservice(json.path("rootServiceId").asText());
climateServices.add(newService);
}
return climateServices;
}
public static List<ClimateService> getMostRecentlyAdded() {
List<ClimateService> climateServices = new ArrayList<ClimateService>();
JsonNode climateServicesNode = APICall
.callAPI(GET_MOST_RECENTLY_ADDED_CLIMATE_SERVICES_CALL);
if (climateServicesNode == null || climateServicesNode.has("error")
|| !climateServicesNode.isArray()) {
return climateServices;
}
for (int i = 0; i < climateServicesNode.size(); i++) {
JsonNode json = climateServicesNode.path(i);
ClimateService newService = new ClimateService();
newService.setId(json.get("id").asText());
newService.setClimateServiceName(json.get(
"name").asText());
newService.setPurpose(json.findPath("purpose").asText());
newService.setUrl(json.findPath("url").asText());
newService.setScenario(json.findPath("scenario").asText());
newService.setVersion(json.findPath("versionNo").asText());
newService.setRootservice(json.findPath("rootServiceId").asText());
climateServices.add(newService);
}
return climateServices;
}
public static List<ClimateService> getMostRecentlyUsed() {
List<ClimateService> climateServices = new ArrayList<ClimateService>();
JsonNode climateServicesNode = APICall
.callAPI(GET_MOST_RECENTLY_USED_CLIMATE_SERVICES_CALL);
if (climateServicesNode == null || climateServicesNode.has("error")
|| !climateServicesNode.isArray()) {
return climateServices;
}
for (int i = 0; i < climateServicesNode.size(); i++) {
JsonNode json = climateServicesNode.path(i);
ClimateService newService = new ClimateService();
newService.setId(json.get("id").asText());
newService.setClimateServiceName(json.get(
"name").asText());
newService.setPurpose(json.findPath("purpose").asText());
newService.setUrl(json.findPath("url").asText());
newService.setScenario(json.findPath("scenario").asText());
newService.setVersion(json.findPath("versionNo").asText());
newService.setRootservice(json.findPath("rootServiceId").asText());
climateServices.add(newService);
}
return climateServices;
}
public static List<ClimateService> getMostPopular() {
List<ClimateService> climateServices = new ArrayList<ClimateService>();
JsonNode climateServicesNode = APICall
.callAPI(GET_MOST_POPULAR_CLIMATE_SERVICES_CALL);
if (climateServicesNode == null || climateServicesNode.has("error")
|| !climateServicesNode.isArray()) {
return climateServices;
}
for (int i = 0; i < climateServicesNode.size(); i++) {
JsonNode json = climateServicesNode.path(i);
ClimateService newService = new ClimateService();
newService.setId(json.get("id").asText());
newService.setClimateServiceName(json.get(
"name").asText());
newService.setPurpose(json.findPath("purpose").asText());
newService.setUrl(json.findPath("url").asText());
newService.setScenario(json.findPath("scenario").asText());
newService.setVersion(json.findPath("versionNo").asText());
newService.setRootservice(json.findPath("rootServiceId").asText());
climateServices.add(newService);
}
return climateServices;
}
/**
* Create a new climate service
*
* @param jsonData
* @return the response from the API server
*/
public static JsonNode create(JsonNode jsonData) {
return APICall.postAPI(ADD_CLIMATE_SERVICE_CALL, jsonData);
}
/**
* Edit a climate service
*
* @param jsonData
* @return
* @throws UnsupportedEncodingException
*/
public static JsonNode edit(String climateServiceName, JsonNode jsonData) throws UnsupportedEncodingException {
return APICall.putAPI(EDIT_CLIMATE_SERVICE_CALL + URLEncoder.encode(climateServiceName, "UTF-8"), jsonData);
}
/**
* Delete a sensor category
*
* @param climateServiceId
* @return
* @throws UnsupportedEncodingException
*/
public static JsonNode delete(String climateServiceId) throws UnsupportedEncodingException {
return APICall.deleteAPI(DELETE_CLIMATE_SERVICE_CALL
+ URLEncoder.encode(climateServiceId, "UTF-8"));
}
/**
* Generate a list of climate service names
*
* @return a list of climate service names
*/
public static List<String> allClimateServiceName() {
List<ClimateService> allList = all();
List<String> resultList = new ArrayList<String>();
for (ClimateService element : allList) {
String elementName = element.getClimateServiceName();
if (elementName != null)
resultList.add(elementName);
}
return resultList;
}
public void setPhoto(){
if(url.contains("threeDimVarVertical.html")){
photo = "/assets/images/3DVerticalProfile.jpeg";
}else if(url.contains("twoDimZonalMean.html")){
photo = "http://einstein.sv.cmu.edu:9002/static/twoDimZonalMean/65778f88e3e057738423aa7183f5ee54/nasa_modis_clt_200401_200412_Annual.jpeg";
}else if(url.contains("twoDimMap.html")){
photo = "http://einstein.sv.cmu.edu:9002/static/twoDimMap/6879a2eedd1910f4c45e6213d342e066/nasa_modis_clt_200401_200412_Annual.jpeg";
}else if(url.contains("twoDimSlice3D.html")){
photo = "http://einstein.sv.cmu.edu:9002/static/twoDimSlice3D/ba6b08d54048d9c8349185d2606d3638/nasa_airs_ta_200401_200412_Annual.jpeg";
}else if(url.contains("scatterPlot2Vars.html")){
photo = "/assets/images/ScatterPlot.png";
}else if(url.contains("conditionalSampling.html")){
photo = "/assets/images/ConditionalSampling1Variable.jpeg";
}else if(url.contains("twoDimTimeSeries.html")){
photo = "/assets/images/TimeSeriesPlot.jpeg";
}else if(url.contains("threeDimZonalMean.html")){
photo = "http://einstein.sv.cmu.edu:9002/static/threeDimZonalMean/e4e120045d2bb589eed371e1ca08fd99/nasa_airs_ta_200401_200412_Annual.jpeg";
}else if(url.contains("diffPlot2Vars.html")){
photo = "/assets/images/DifferencePlot.png";
}else if (url.contains("regridAndDownload.html")) {
photo = "/assets/images/regrid.jpg";
}else if (url.contains("correlationMap.html")) {
photo = "/assets/images/correlationMap.png";
}else if (url.contains("conditionalSampling2Var.html")) {
photo = "/assets/images/conditionalSampling2Variables.jpeg";
}
else{
photo = "http://upload.wikimedia.org/wikipedia/commons/3/33/White_square_with_question_mark.png";
}
}
public String getPhoto() {
return photo;
}
}