diff --git a/src/main/java/no/nibio/vips/util/ModelUtil.java b/src/main/java/no/nibio/vips/util/ModelUtil.java index bed787c891765b3c3bec67fc3f7d351909280060..4781caec68dd179311c4567adb3641db424e185c 100755 --- a/src/main/java/no/nibio/vips/util/ModelUtil.java +++ b/src/main/java/no/nibio/vips/util/ModelUtil.java @@ -19,12 +19,16 @@ package no.nibio.vips.util; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLConnection; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import no.nibio.vips.entity.WeatherObservation; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; @@ -115,4 +119,30 @@ public class ModelUtil { return Base64.encodeBase64String(bytes); } + /** + * This solves the problem of the model not knowing if the ModelConfiguration + * contains a halfway serialized List of WeatherObservation (typically LinkedHashMap) + * OR a List of actual WeatherObservations. + * @param unknownClassList + * @return + */ + public List<WeatherObservation> extractWeatherObservationList(Object unknownClassList) + { + try + { + // These are real WeatherObservation classes + List<WeatherObservation> obsList = (List<WeatherObservation>) unknownClassList; + if(obsList != null && obsList.size() > 0) + { + WeatherObservation o = obsList.get(0); + } + return obsList; + } + catch(ClassCastException ex) + { + // These are semi serialized, tell ObjectMapper/Jackson how to do it + ObjectMapper mapper = new ObjectMapper(); + return mapper.convertValue(unknownClassList, new TypeReference<List<WeatherObservation>>(){}); + } + } }