package org.cagrid.mms.service.wsrf; import gov.nih.nci.cagrid.metadata.ServiceMetadata; import gov.nih.nci.cagrid.metadata.dataservice.DomainModel; import gov.nih.nci.cagrid.metadata.security.ServiceSecurityMetadata; import java.rmi.RemoteException; import java.util.Iterator; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import javax.xml.ws.WebServiceContext; import org.cagrid.core.common.JAXBUtils; import org.cagrid.gaards.security.servicesecurity.GetServiceSecurityMetadataRequest; import org.cagrid.gaards.security.servicesecurity.GetServiceSecurityMetadataResponse; import org.cagrid.mms.model.ModelSourceMetadata; import org.cagrid.mms.model.NamespaceToProjectMapping; import org.cagrid.mms.model.UMLAssociationExclude; import org.cagrid.mms.service.InvalidUMLProjectIndentifier; import org.cagrid.mms.service.MetadataModelService; import org.cagrid.mms.wsrf.stubs.AnnotateServiceMetadataRequest; import org.cagrid.mms.wsrf.stubs.AnnotateServiceMetadataResponse; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForClassesRequest; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForClassesResponse; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForClassesWithExcludesRequest; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForClassesWithExcludesResponse; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForPackagesRequest; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForPackagesResponse; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForProjectRequest; import org.cagrid.mms.wsrf.stubs.GenerateDomainModelForProjectResponse; import org.cagrid.mms.wsrf.stubs.GetModelSourceMetadataRequest; import org.cagrid.mms.wsrf.stubs.GetModelSourceMetadataResponse; import org.cagrid.mms.wsrf.stubs.InvalidUMLProjectIndentifierFaultMessage; import org.cagrid.mms.wsrf.stubs.MetadataModelServicePortType; import org.cagrid.wsrf.properties.InvalidResourceKeyException; import org.cagrid.wsrf.properties.NoSuchResourceException; import org.cagrid.wsrf.properties.Resource; import org.cagrid.wsrf.properties.ResourceException; import org.cagrid.wsrf.properties.ResourceHome; import org.cagrid.wsrf.properties.ResourceProperty; import org.cagrid.wsrf.properties.ResourcePropertySet; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetMultipleResourceProperties; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetMultipleResourcePropertiesResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetResourcePropertyResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.QueryResourceProperties; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.QueryResourcePropertiesResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.InvalidQueryExpressionFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.InvalidResourcePropertyQNameFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.QueryEvaluationErrorFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.ResourceUnknownFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.UnknownQueryExpressionDialectFault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Node; public class MMSWSRFImpl implements MetadataModelServicePortType { private final static String ANONYMOUS_ID = "anonymous"; private final static Logger LOG = LoggerFactory .getLogger(MMSWSRFImpl.class); private final MetadataModelService mms; private final ResourceHome resourceHome; @javax.annotation.Resource private WebServiceContext wsContext; public MMSWSRFImpl(MetadataModelService mms) { this.mms = mms; resourceHome = mms.getResourceHome(); } @Override public GetMultipleResourcePropertiesResponse getMultipleResourceProperties( GetMultipleResourceProperties getMultipleResourcePropertiesRequest) throws ResourceUnknownFault, InvalidResourcePropertyQNameFault { LOG.info("getMultipleResourceProperty " + getMultipleResourcePropertiesRequest); System.out.println(getMultipleResourcePropertiesRequest); GetMultipleResourcePropertiesResponse response = new GetMultipleResourcePropertiesResponse(); for (Iterator iterator = getMultipleResourcePropertiesRequest .getResourceProperty().iterator(); iterator.hasNext();) { QName qname = (QName) iterator.next(); Exception e; try { Resource resource = resourceHome.find(null); if (resource instanceof ResourcePropertySet) { ResourcePropertySet resourcePropertySet = (ResourcePropertySet) resource; ResourceProperty<?> resourceProperty = resourcePropertySet .get(qname); if (resourceProperty != null) { Object resourcePropertyValue = resourceProperty.get(0); LOG.info("getResourceProperty " + qname + " returning " + resourcePropertyValue); if (!(resourcePropertyValue instanceof Node) && !(resourcePropertyValue instanceof JAXBElement<?>)) { resourcePropertyValue = JAXBUtils .wrap(resourcePropertyValue); } response.getAny().add(resourcePropertyValue); } } } catch (NoSuchResourceException nsre) { e = nsre; } catch (InvalidResourceKeyException irke) { e = irke; } catch (ResourceException re) { e = re; } } return response; } @Override public GetServiceSecurityMetadataResponse getServiceSecurityMetadata( GetServiceSecurityMetadataRequest parameters) { LOG.debug("Executing operation getServiceSecurityMetadata"); ServiceSecurityMetadata serviceSecurityMetadata = mms .getServiceSecurityMetadata(); GetServiceSecurityMetadataResponse response = new GetServiceSecurityMetadataResponse(); response.setServiceSecurityMetadata(serviceSecurityMetadata); return response; } @Override public QueryResourcePropertiesResponse queryResourceProperties( QueryResourceProperties queryResourcePropertiesRequest) throws QueryEvaluationErrorFault, ResourceUnknownFault, InvalidResourcePropertyQNameFault, InvalidQueryExpressionFault, UnknownQueryExpressionDialectFault { LOG.debug("Executing operation queryResourceProperties"); // TODO QueryResourcePropertiesResponse response = null; response = new QueryResourcePropertiesResponse(); return response; } @Override public GetResourcePropertyResponse getResourceProperty( QName resourcePropertyQName) throws ResourceUnknownFault, InvalidResourcePropertyQNameFault { LOG.debug("Executing operation getResourceProperty"); Exception e = null; GetResourcePropertyResponse response = null; try { Resource resource = resourceHome.find(null); if (resource instanceof ResourcePropertySet) { ResourcePropertySet resourcePropertySet = (ResourcePropertySet) resource; ResourceProperty<?> resourceProperty = resourcePropertySet .get(resourcePropertyQName); if (resourceProperty != null) { Object resourcePropertyValue = resourceProperty.get(0); LOG.info("getResourceProperty " + resourcePropertyQName + " returning " + resourcePropertyValue); if (!(resourcePropertyValue instanceof Node) && !(resourcePropertyValue instanceof JAXBElement<?>)) { resourcePropertyValue = JAXBUtils .wrap(resourcePropertyValue); } response = new GetResourcePropertyResponse(); response.getAny().add(resourcePropertyValue); } } } catch (NoSuchResourceException nsre) { e = nsre; } catch (InvalidResourceKeyException irke) { e = irke; } catch (ResourceException re) { e = re; } if ((response == null) || (e != null)) { throw new ResourceUnknownFault("No resource for '" + resourcePropertyQName + "'", e); } return response; } @Override public GenerateDomainModelForClassesWithExcludesResponse generateDomainModelForClassesWithExcludes( GenerateDomainModelForClassesWithExcludesRequest parameters) throws InvalidUMLProjectIndentifierFaultMessage { LOG.debug("Executing operation generateDomainModelForClassesWithExcludes"); try { String[] classNames = new String[parameters.getFullyQualifiedClassNames().size()]; UMLAssociationExclude[] excludes = new UMLAssociationExclude[parameters.getUmlAssociationExclude() .getUMLAssociationExclude().size()]; DomainModel model = mms.generateDomainModelForClassesWithExcludes(parameters .getUmlProjectIdentifer().getUMLProjectIdentifer(), (String[]) parameters.getFullyQualifiedClassNames().toArray(classNames), (UMLAssociationExclude[]) parameters.getUmlAssociationExclude() .getUMLAssociationExclude().toArray(excludes)); GenerateDomainModelForClassesWithExcludesResponse response = new GenerateDomainModelForClassesWithExcludesResponse(); response.setDomainModel(model); return response; } catch (RemoteException e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } catch (InvalidUMLProjectIndentifier e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } } @Override public AnnotateServiceMetadataResponse annotateServiceMetadata( AnnotateServiceMetadataRequest parameters) throws InvalidUMLProjectIndentifierFaultMessage { LOG.debug("Executing operation annotateServiceMetadata"); try { ServiceMetadata metadata = mms.annotateServiceMetadata(parameters.getServiceMetadata().getServiceMetadata(),(NamespaceToProjectMapping[])parameters.getNamespaceToProjectMappings().getNamespaceToProjectMapping().toArray()); AnnotateServiceMetadataResponse response = new AnnotateServiceMetadataResponse(); response.setServiceMetadata(metadata); return response; } catch (RemoteException e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } catch (InvalidUMLProjectIndentifier e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } } @Override public GenerateDomainModelForProjectResponse generateDomainModelForProject( GenerateDomainModelForProjectRequest parameters) throws InvalidUMLProjectIndentifierFaultMessage { LOG.debug("Executing operation generateDomainModelForProject"); try { DomainModel model = mms.generateDomainModelForProject(parameters.getUmlProjectIdentifer().getUMLProjectIdentifer()); GenerateDomainModelForProjectResponse response = new GenerateDomainModelForProjectResponse(); response.setDomainModel(model); return response; } catch (RemoteException e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } catch (InvalidUMLProjectIndentifier e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } } @Override public GetModelSourceMetadataResponse getModelSourceMetadata( GetModelSourceMetadataRequest parameters) { LOG.debug("Executing operation getModelSourceMetadata"); try { ModelSourceMetadata metadata = mms.getModelSourceMetadata(); GetModelSourceMetadataResponse response = new GetModelSourceMetadataResponse(); response.setModelSourceMetadata(metadata); return response; } catch (RemoteException e) { e.printStackTrace(); return null; } } @Override public GenerateDomainModelForClassesResponse generateDomainModelForClasses( GenerateDomainModelForClassesRequest parameters) throws InvalidUMLProjectIndentifierFaultMessage { LOG.debug("Executing operation generateDomainModelForClasses"); try { String[] classNames = new String[parameters.getFullyQualifiedClassNames().size()]; DomainModel model = mms.generateDomainModelForClasses(parameters .getUmlProjectIdentifer().getUMLProjectIdentifer(), (String[]) parameters.getFullyQualifiedClassNames().toArray(classNames)); GenerateDomainModelForClassesResponse response = new GenerateDomainModelForClassesResponse(); response.setDomainModel(model); return response; } catch (RemoteException e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } catch (InvalidUMLProjectIndentifier e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } } @Override public GenerateDomainModelForPackagesResponse generateDomainModelForPackages( GenerateDomainModelForPackagesRequest parameters) throws InvalidUMLProjectIndentifierFaultMessage { LOG.debug("Executing operation generateDomainModelForPackages"); try { String[] packageNames = new String[parameters.getPackageNames().size()]; DomainModel model = mms.generateDomainModelForPackages(parameters .getUmlProjectIdentifer().getUMLProjectIdentifer(), (String[]) parameters.getPackageNames().toArray(packageNames)); GenerateDomainModelForPackagesResponse response = new GenerateDomainModelForPackagesResponse(); response.setDomainModel(model); return response; } catch (RemoteException e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } catch (InvalidUMLProjectIndentifier e) { throw new InvalidUMLProjectIndentifierFaultMessage(e.getMessage(),e); } } }