/** * Delegates to @see {@link #getResourceHandler(Class)} */ @SuppressWarnings("unchecked") protected DelegatingResourceHandler<? extends T> getResourceHandler(T delegate) { if (!hasTypesDefined()) return this; if (delegate == null) return null; return getResourceHandler((Class<? extends T>) delegate.getClass()); }
/** * @see org.openmrs.module.webservices.rest.web.resource.api.Converter#getProperty(java.lang.Object, * java.lang.String) */ @Override public Object getProperty(T instance, String propertyName) throws ConversionException { try { DelegatingResourceHandler<? extends T> handler = getResourceHandler(instance); // try to find a @PropertyGetter-annotated method Method annotatedGetter = ReflectionUtil.findPropertyGetterMethod(handler, propertyName); if (annotatedGetter != null) { return annotatedGetter.invoke(handler, instance); } return PropertyUtils.getProperty(instance, propertyName); } catch (Exception ex) { // some properties are allowed to be missing, since they may have been added in later OpenMRS versions if (allowedMissingProperties.contains(propertyName)) return null; throw new ConversionException(propertyName + " on " + instance.getClass(), ex); } }
/** * @see org.openmrs.module.webservices.rest.web.resource.api.Converter#newInstance(java.lang.String) */ @Override public T newInstance(String type) { if (hasTypesDefined()) { if (type == null) throw new IllegalArgumentException(getClass().getSimpleName() + " requires a '" + RestConstants.PROPERTY_FOR_TYPE + "' property to create a new object"); DelegatingResourceHandler<? extends T> handler = getResourceHandler(type); return handler.newDelegate(); } else { return newDelegate(); } }
handler = getResourceHandler((T) instance);
throw new NullPointerException(); DelegatingResourceHandler<? extends T> handler = getResourceHandler(delegate);