public Object read(Object request, Map kvp, Map rawKvp) throws Exception { // use emf reflection EObject eObject = (EObject) request; for (Iterator e = kvp.entrySet().iterator(); e.hasNext(); ) { Map.Entry entry = (Map.Entry) e.next(); String property = (String) entry.getKey(); Object value = entry.getValue(); // respect the filter if (filter(property)) { continue; } if (EMFUtils.has(eObject, property)) { try { setValue(eObject, property, value); } catch (Exception ex) { throw new ServiceException( "Failed to set property " + property + " in request object using value " + value + (value != null ? " of type " + value.getClass() : ""), ex, ServiceException.INVALID_PARAMETER_VALUE, property); } } } return request; }
@Override protected void setValue(EObject eObject, String property, Object value) { if ("sortBy".equalsIgnoreCase(property)) { // we get an arraylist of arraylists List sorts = (List) value; final int sortsSize = sorts.size(); if (sortsSize != 1) { throw new OWS20Exception( "Invalid sortBy specification, expecting sorts for just one coverage, but got " + sortsSize + " instead", WCS20Exception.WCS20ExceptionCode.InvalidParameterValue, "sortBy"); } final GetCoverageType getCoverage = (GetCoverageType) (eObject); getCoverage.getSortBy().addAll((List) sorts.get(0)); } else { super.setValue(eObject, property, value); } } }