org.apache.juddi.api.impl.UDDIInquiryImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.juddi.api.impl.UDDIInquiryImpl.java

Source

/*
 * Copyright 2001-2008 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.apache.juddi.api.impl;

import java.rmi.RemoteException;
import java.util.List;
import java.util.UUID;

import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.api.util.InquiryQuery;
import org.apache.juddi.api.util.PublicationQuery;
import org.apache.juddi.api.util.QueryStatus;
import org.apache.juddi.config.AppConfig;
import org.apache.juddi.config.PersistenceManager;
import org.apache.juddi.config.Property;
import org.apache.juddi.mapping.MappingModelToApi;
import org.apache.juddi.model.TempKey;
import org.apache.juddi.query.util.FindQualifiers;
import org.apache.juddi.v3.error.ErrorMessage;
import org.apache.juddi.v3.error.InvalidKeyPassedException;
import org.apache.juddi.validation.ValidateInquiry;
import org.uddi.api_v3.BindingDetail;
import org.uddi.api_v3.BusinessDetail;
import org.uddi.api_v3.BusinessList;
import org.uddi.api_v3.FindBinding;
import org.uddi.api_v3.FindBusiness;
import org.uddi.api_v3.FindRelatedBusinesses;
import org.uddi.api_v3.FindService;
import org.uddi.api_v3.FindTModel;
import org.uddi.api_v3.GetBindingDetail;
import org.uddi.api_v3.GetBusinessDetail;
import org.uddi.api_v3.GetOperationalInfo;
import org.uddi.api_v3.GetServiceDetail;
import org.uddi.api_v3.GetTModelDetail;
import org.uddi.api_v3.OperationalInfos;
import org.uddi.api_v3.RelatedBusinessesList;
import org.uddi.api_v3.ServiceDetail;
import org.uddi.api_v3.ServiceList;
import org.uddi.api_v3.TModelDetail;
import org.uddi.api_v3.TModelList;
import org.uddi.v3_service.DispositionReportFaultMessage;
import org.uddi.v3_service.UDDIInquiryPortType;

/**
 * This implements the UDDI v3 Inquiry API web service
 * @author <a href="mailto:jfaath@apache.org">Jeff Faath</a>
 */
@WebService(serviceName = "UDDIInquiryService", endpointInterface = "org.uddi.v3_service.UDDIInquiryPortType", targetNamespace = "urn:uddi-org:v3_service")
public class UDDIInquiryImpl extends AuthenticatedService implements UDDIInquiryPortType {

    private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
    private UDDIServiceCounter serviceCounter;

    public UDDIInquiryImpl() {
        super();
        serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIInquiryImpl.class);
    }

    public BindingDetail findBinding(FindBinding body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateFindBinding(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
            findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

            List<?> keysFound = InquiryHelper.findBinding(body, findQualifiers, em);

            if (keysFound != null && keysFound.size() == 0) {
                if (body.getServiceKey() != null) {
                    // Check that we were passed a valid serviceKey per
                    // 5.1.12.4 of the UDDI v3 spec
                    String serviceKey = body.getServiceKey();
                    org.apache.juddi.model.BusinessService modelBusinessService = null;
                    try {
                        modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
                    } catch (ClassCastException e) {
                        logger.info("uh oh!", e);
                    }
                    if (modelBusinessService == null)
                        throw new InvalidKeyPassedException(
                                new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));

                }
            }
            BindingDetail result = InquiryHelper.getBindingDetailFromKeys(body, findQualifiers, em, keysFound);
            tx.rollback();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_BINDING, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public BusinessList findBusiness(FindBusiness body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateFindBusiness(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
            findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

            List<?> keysFound = InquiryHelper.findBusiness(body, findQualifiers, em);

            BusinessList result = InquiryHelper.getBusinessListFromKeys(body, findQualifiers, em, keysFound);

            tx.rollback();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_BUSINESS, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public RelatedBusinessesList findRelatedBusinesses(FindRelatedBusinesses body)
            throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateFindRelatedBusinesses(body, false);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            // TODO: findQualifiers aren't really used for this call, except maybe for sorting.  Sorting must be done in Java due to the retrieval method used.  Right now
            // no sorting is performed.
            org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
            findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

            RelatedBusinessesList result = InquiryHelper.getRelatedBusinessesList(body, em);

            tx.rollback();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_RELATEDBUSINESSES, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public ServiceList findService(FindService body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateFindService(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
            findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

            List<?> keysFound = InquiryHelper.findService(body, findQualifiers, em);

            if (keysFound.size() == 0) {
                if (body.getBusinessKey() != null) {
                    // Check that we were passed a valid businessKey per
                    // 5.1.12.4 of the UDDI v3 spec
                    String businessKey = body.getBusinessKey();
                    org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
                    try {
                        modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
                    } catch (ClassCastException e) {
                    }
                    if (modelBusinessEntity == null) {
                        throw new InvalidKeyPassedException(
                                new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));
                    }
                }
            }

            ServiceList result = InquiryHelper.getServiceListFromKeys(body, findQualifiers, em, keysFound);

            tx.rollback();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_SERVICE, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public TModelList findTModel(FindTModel body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateFindTModel(body, false);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            org.apache.juddi.query.util.FindQualifiers findQualifiers = new org.apache.juddi.query.util.FindQualifiers();
            findQualifiers.mapApiFindQualifiers(body.getFindQualifiers());

            List<?> keysFound = InquiryHelper.findTModel(body, findQualifiers, em);

            TModelList result = InquiryHelper.getTModelListFromKeys(body, findQualifiers, em, keysFound);

            tx.rollback();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public BindingDetail getBindingDetail(GetBindingDetail body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateGetBindingDetail(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.FIND_TMODEL, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            BindingDetail result = new BindingDetail();

            List<String> bindingKeyList = body.getBindingKey();
            for (String bindingKey : bindingKeyList) {
                org.apache.juddi.model.BindingTemplate modelBindingTemplate = null;
                try {
                    modelBindingTemplate = em.find(org.apache.juddi.model.BindingTemplate.class, bindingKey);
                } catch (ClassCastException e) {
                }
                if (modelBindingTemplate == null)
                    throw new InvalidKeyPassedException(
                            new ErrorMessage("errors.invalidkey.BindingTemplateNotFound", bindingKey));

                org.uddi.api_v3.BindingTemplate apiBindingTemplate = new org.uddi.api_v3.BindingTemplate();

                MappingModelToApi.mapBindingTemplate(modelBindingTemplate, apiBindingTemplate);

                result.getBindingTemplate().add(apiBindingTemplate);
            }

            tx.commit();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_BINDINGDETAIL, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public BusinessDetail getBusinessDetail(GetBusinessDetail body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateGetBusinessDetail(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            BusinessDetail result = new BusinessDetail();

            List<String> businessKeyList = body.getBusinessKey();
            for (String businessKey : businessKeyList) {
                org.apache.juddi.model.BusinessEntity modelBusinessEntity = null;
                try {
                    modelBusinessEntity = em.find(org.apache.juddi.model.BusinessEntity.class, businessKey);
                } catch (ClassCastException e) {
                }
                if (modelBusinessEntity == null)
                    throw new InvalidKeyPassedException(
                            new ErrorMessage("errors.invalidkey.BusinessNotFound", businessKey));

                org.uddi.api_v3.BusinessEntity apiBusinessEntity = new org.uddi.api_v3.BusinessEntity();

                MappingModelToApi.mapBusinessEntity(modelBusinessEntity, apiBusinessEntity);

                result.getBusinessEntity().add(apiBusinessEntity);
            }

            tx.commit();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_BUSINESSDETAIL, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public OperationalInfos getOperationalInfo(GetOperationalInfo body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateGetOperationalInfo(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            OperationalInfos result = new OperationalInfos();

            List<String> entityKeyList = body.getEntityKey();
            for (String entityKey : entityKeyList) {
                org.apache.juddi.model.UddiEntity modelUddiEntity = null;
                try {
                    modelUddiEntity = em.find(org.apache.juddi.model.UddiEntity.class, entityKey);
                } catch (ClassCastException e) {
                }
                if (modelUddiEntity == null)
                    throw new InvalidKeyPassedException(
                            new ErrorMessage("errors.invalidkey.EntityNotFound", entityKey));

                org.uddi.api_v3.OperationalInfo apiOperationalInfo = new org.uddi.api_v3.OperationalInfo();

                MappingModelToApi.mapOperationalInfo(modelUddiEntity, apiOperationalInfo);

                result.getOperationalInfo().add(apiOperationalInfo);
            }

            tx.commit();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_OPERATIONALINFO, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public ServiceDetail getServiceDetail(GetServiceDetail body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateGetServiceDetail(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            ServiceDetail result = new ServiceDetail();

            List<String> serviceKeyList = body.getServiceKey();
            for (String serviceKey : serviceKeyList) {
                org.apache.juddi.model.BusinessService modelBusinessService = null;
                try {
                    modelBusinessService = em.find(org.apache.juddi.model.BusinessService.class, serviceKey);
                } catch (ClassCastException e) {
                }
                if (modelBusinessService == null)
                    throw new InvalidKeyPassedException(
                            new ErrorMessage("errors.invalidkey.ServiceNotFound", serviceKey));

                org.uddi.api_v3.BusinessService apiBusinessService = new org.uddi.api_v3.BusinessService();

                MappingModelToApi.mapBusinessService(modelBusinessService, apiBusinessService);

                result.getBusinessService().add(apiBusinessService);
            }

            tx.commit();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_SERVICEDETAIL, QueryStatus.SUCCESS, procTime);

            return result;

        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    public TModelDetail getTModelDetail(GetTModelDetail body) throws DispositionReportFaultMessage {
        long startTime = System.currentTimeMillis();
        try {
            new ValidateInquiry(null).validateGetTModelDetail(body);
        } catch (DispositionReportFaultMessage drfm) {
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.FAILED, procTime);
            throw drfm;
        }

        EntityManager em = PersistenceManager.getEntityManager();
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();

            if (isAuthenticated())
                this.getEntityPublisher(em, body.getAuthInfo());

            TModelDetail result = new TModelDetail();

            List<String> tmodelKeyList = body.getTModelKey();
            for (String tmodelKey : tmodelKeyList) {
                org.apache.juddi.model.Tmodel modelTModel = null;
                try {
                    modelTModel = em.find(org.apache.juddi.model.Tmodel.class, tmodelKey);
                } catch (ClassCastException e) {
                }
                if (modelTModel == null)
                    throw new InvalidKeyPassedException(
                            new ErrorMessage("errors.invalidkey.TModelNotFound", tmodelKey));

                org.uddi.api_v3.TModel apiTModel = new org.uddi.api_v3.TModel();

                MappingModelToApi.mapTModel(modelTModel, apiTModel);

                result.getTModel().add(apiTModel);
            }

            tx.commit();
            long procTime = System.currentTimeMillis() - startTime;
            serviceCounter.update(InquiryQuery.GET_TMODELDETAIL, QueryStatus.SUCCESS, procTime);

            return result;
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
            em.close();
        }
    }

    private boolean isAuthenticated() {
        boolean result = false;
        try {
            result = AppConfig.getConfiguration().getBoolean(Property.JUDDI_AUTHENTICATE_INQUIRY);
        } catch (ConfigurationException e) {
            log.error("Configuration exception occurred retrieving: " + Property.JUDDI_AUTHENTICATE_INQUIRY, e);
        }
        return result;
    }

}