diff --git a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java index a9bf20bd46ed7937141b55920256cc261e78ef4d..a92f370e5e80a948f855e30dd7a0dfb4d225c597 100755 --- a/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java +++ b/src/main/java/no/nibio/vips/logic/controller/session/ObservationBean.java @@ -780,7 +780,7 @@ public class ObservationBean { * @param httpServletRequest * @return */ - public ObservationDataSchema getObservationDataSchema(Integer organizationId, Integer organismId, HttpServletRequest httpServletRequest) + public ObservationDataSchema getObservationDataSchema(Integer organizationId, Integer organismId) { try { @@ -798,6 +798,43 @@ public class ObservationBean { } } + /** + * If there exist title translations for this schema, it + * @param schema + * @param httpServletRequest + * @return + */ + public ObservationDataSchema getLocalizedObservationDataSchema(ObservationDataSchema ods, HttpServletRequest httpServletRequest) throws IOException + { + ResourceBundle bundle = SessionLocaleUtil.getI18nBundle(httpServletRequest); + + // We iterate the schema, replacing default field labels with + // translated ones + // First: Convert to Jackson JsonNode tree + ObjectMapper m = new ObjectMapper(); + JsonNode rootNode = m.readTree(ods.getDataSchema()); + Iterator<Entry<String, JsonNode>> nodeIterator = rootNode.fields(); + + String fieldKeyPrefix = "observationDataField_"; + // Loop through each field + while (nodeIterator.hasNext()) { + Map.Entry<String, JsonNode> schemaPropertyField = (Map.Entry<String, JsonNode>) nodeIterator.next(); + // Get the property field key (e.g. "counting2") + String fieldKey = schemaPropertyField.getKey(); + // Find a translation. + if(bundle.containsKey(fieldKeyPrefix + fieldKey)) + { + // If found, replace with translation + // Get the property field (e.g. {"title":"Counting 2"} ) + JsonNode schemaProperty = schemaPropertyField.getValue(); + ((ObjectNode)schemaProperty).put("title", bundle.getString(fieldKeyPrefix + fieldKey)); + ((ObjectNode)rootNode).replace(fieldKey, schemaProperty); + } + } + ods.setDataSchema(m.writeValueAsString(rootNode)); + return ods; + } + /** * * @param organizationId diff --git a/src/main/java/no/nibio/vips/logic/service/ObservationService.java b/src/main/java/no/nibio/vips/logic/service/ObservationService.java index e8f504e4ca5921de6974c92358329ef129767d6f..42cb7c3fbccdf9c66e1e05583b62b31de1fcf2d4 100755 --- a/src/main/java/no/nibio/vips/logic/service/ObservationService.java +++ b/src/main/java/no/nibio/vips/logic/service/ObservationService.java @@ -366,7 +366,7 @@ public class ObservationService { } // Which organization does this observation belong to? VipsLogicUser observer = SessionControllerGetter.getUserBean().getVipsLogicUser(o.getUserId()); - o.setObservationDataSchema(SessionControllerGetter.getObservationBean().getObservationDataSchema(observer.getOrganizationId().getOrganizationId(), o.getOrganismId(), httpServletRequest)); + o.setObservationDataSchema(SessionControllerGetter.getObservationBean().getObservationDataSchema(observer.getOrganizationId().getOrganizationId(), o.getOrganismId())); VipsLogicUser user = (VipsLogicUser) httpServletRequest.getSession().getAttribute("user"); if(user == null && userUUID != null) diff --git a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java index 37e72c293862242a343ec2c9b99fbbbcf92d62c5..04e3a2c2838c9c968287f88f0cd1554033d2afdf 100755 --- a/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java +++ b/src/main/java/no/nibio/vips/observationdata/ObservationDataService.java @@ -39,6 +39,7 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import no.nibio.vips.logic.i18n.SessionLocaleUtil; +import no.nibio.vips.logic.util.SessionControllerGetter; /** * @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a> @@ -65,15 +66,12 @@ public class ObservationDataService { @Path("schema/{organizationId}/{organismId}") @Produces("application/json;charset=UTF-8") public Response getSchema(@PathParam("organizationId") Integer organizationId,@PathParam("organismId") Integer organismId){ - // Try to find schema for given organism/organization - ObservationDataSchema ods = null; + try { - ods = em.createNamedQuery("ObservationDataSchema.findByPK", ObservationDataSchema.class) - .setParameter("organizationId", organizationId) - .setParameter("organismId", organismId) - .getSingleResult(); - + // Try to find schema for given organism/organization + ObservationDataSchema ods = SessionControllerGetter.getObservationBean().getObservationDataSchema(organizationId, organismId); + /* ResourceBundle bundle = SessionLocaleUtil.getI18nBundle(httpServletRequest); // We iterate the schema, replacing default field labels with @@ -100,11 +98,16 @@ public class ObservationDataService { } } return Response.ok().entity(rootNode).build(); + */ + ods = SessionControllerGetter.getObservationBean().getLocalizedObservationDataSchema(ods, httpServletRequest); + return Response.ok().entity(ods.getDataSchema()).build(); - }catch(IOException | NoResultException ex){} - - // If not found, return standard nominator/denominator (unit) form - return Response.ok().entity(ods != null ? ods.getDataSchema() : this.getStandardSchema()).build(); + } + catch(IOException ex) + { + return Response.serverError().entity(ex).build(); + } + } @GET