package org.cagrid.core.resource; import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.xml.bind.JAXBException; import org.cagrid.core.common.JAXBUtils; import org.cagrid.wsrf.properties.ResourceProperty; public class JAXBResourcePropertySupport { public static Map<ResourcePropertyDescriptor<?>, ResourceProperty<?>> buildJAXBResourceProperties( Map<String, ResourcePropertyDescriptor<?>> descriptorsByField, Map<String, URL> fieldURLs) throws JAXBException { Map<ResourcePropertyDescriptor<?>, ResourceProperty<?>> resourceProperties = new HashMap<ResourcePropertyDescriptor<?>, ResourceProperty<?>>(); for (Map.Entry<String, URL> entry : fieldURLs.entrySet()) { String fieldName = entry.getKey(); ResourcePropertyDescriptor<?> descriptor = descriptorsByField .get(fieldName); if (descriptor == null) continue; URL url = entry.getValue(); ResourceProperty<?> resourceProperty = createJAXBResourceProperty( descriptor, url); resourceProperties.put(descriptor, resourceProperty); } return resourceProperties; } public static <T> ResourceProperty<T> createJAXBResourceProperty( ResourcePropertyDescriptor<T> resourcePropertyDescriptor, URL url) throws JAXBException { T property = JAXBUtils.unmarshal( resourcePropertyDescriptor.getResourcePropertyClass(), url); ResourceProperty<T> resourceProperty = new ImmutableSingletonResourceProperty<T>( resourcePropertyDescriptor, property); return resourceProperty; } }