package org.gcube.data_catalogue.grsf_publish_ws; import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.CustomField; import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Group; import org.gcube.data_catalogue.grsf_publish_ws.custom_annotations.Tag; import org.gcube.data_catalogue.grsf_publish_ws.json.input.FisheryRecord; import org.gcube.data_catalogue.grsf_publish_ws.utils.groups.Abundance_Level; import org.gcube.data_catalogue.grsf_publish_ws.utils.groups.Source; import org.gcube.data_catalogue.grsf_publish_ws.utils.groups.Status; import org.gcube.data_catalogue.grsf_publish_ws.utils.groups.Type; import com.fasterxml.jackson.databind.ObjectMapper; public class JTests { //@Test public void test() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, IntrospectionException { FisheryRecord recordFishery = new FisheryRecord(); recordFishery.setType(Type.Fishing_Description); recordFishery.setDatabaseSources(Source.FIRMS); recordFishery.setStatus(Status.Pending); List tags = new ArrayList(); List groupsTitles = new ArrayList(); Map extras = new HashMap(); // bottom up, looks up for Tag/Group fields Class current = recordFishery.getClass(); do{ System.out.println("Class is " + current.getCanonicalName()); Field[] fields = current.getDeclaredFields(); for (Field field : fields) { if(field.isAnnotationPresent(Tag.class)){ Object f = new PropertyDescriptor(field.getName(), current).getReadMethod().invoke(recordFishery); if(f != null){ tags.add(f.toString()); } } if(field.isAnnotationPresent(Group.class)){ Object f = new PropertyDescriptor(field.getName(), current).getReadMethod().invoke(recordFishery); if(f != null){ groupsTitles.add(f.toString()); } } if(field.isAnnotationPresent(CustomField.class)){ Object f = new PropertyDescriptor(field.getName(), current).getReadMethod().invoke(recordFishery); if(f != null){ // get the key to put into the map first extras.put(field.getAnnotation(CustomField.class).key(), f); } } } } while((current = current.getSuperclass())!=null); // print System.out.println("TAGS " + tags); System.out.println("GROUPS " + groupsTitles); System.out.println("EXTRAS " + extras); } //@Test public void testJsonSerializer(){ // // String pendingAsString = "pending"; // Status resSatus = Status.onDeserialize(pendingAsString); // System.out.println("Res is " + resSatus); // // System.out.println("To string is " + resSatus.onSerialize()); Abundance_Level type = Abundance_Level.onDeserialize("Uncertain Not assessed"); System.out.println("Res is " + type.onSerialize()); } //@Test public void testNameToStringEnum(){ Abundance_Level elem = Abundance_Level.Uncertain_Not_Assessed; System.out.println("Enum name is = " + elem.name() + ", enum to string is = " + elem.toString() + ", enum on serialize = " + elem.onSerialize()); // try deserializer String deserialize = "uncertain not assessed"; Abundance_Level res = Abundance_Level.onDeserialize(deserialize); System.out.println(res.name()); } //@Test public void testJSONMapping() throws IOException{ FisheryRecord recordFishery = new FisheryRecord(); recordFishery.setType(Type.Fishing_Description); recordFishery.setDatabaseSources(Source.FIRMS); recordFishery.setAuthor("Costantino Perciante"); recordFishery.setMaintainer("Costantino Perciante"); recordFishery.setAuthorContact("costantino.perciante@isti.cnr.it"); recordFishery.setStatus(Status.Pending); recordFishery.setVersion(new Long(10)); HashMap extras = new HashMap(); extras.put("test1", "testValue"); extras.put("test2", "test2Value"); extras.put("type", "Polygon"); extras.put("coordinates", "[[[2.05827, 49.8625],[2.05827, 55.7447], [-6.41736, 55.7447], [-6.41736, 49.8625], [2.05827, 49.8625]]]"); recordFishery.setExtras(extras); ObjectMapper mapper = new ObjectMapper(); //Object to JSON in String String jsonInString = mapper.writeValueAsString(recordFishery); System.out.println(jsonInString); // JSON back to object FisheryRecord converted = mapper.readValue(jsonInString, recordFishery.getClass()); System.out.println(converted); } }