Package org.apache.juddi.api.impl

Source Code of org.apache.juddi.api.impl.UDDIPublicationImpl

/*
* 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.util.Date;
import java.util.List;
import java.util.ArrayList;

import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.xml.ws.Holder;

import org.uddi.api_v3.AddPublisherAssertions;
import org.uddi.api_v3.AssertionStatusItem;
import org.uddi.api_v3.BindingDetail;
import org.uddi.api_v3.BusinessDetail;
import org.uddi.api_v3.CompletionStatus;
import org.uddi.api_v3.DeleteBinding;
import org.uddi.api_v3.DeleteBusiness;
import org.uddi.api_v3.DeletePublisherAssertions;
import org.uddi.api_v3.DeleteService;
import org.uddi.api_v3.DeleteTModel;
import org.uddi.api_v3.GetRegisteredInfo;
import org.uddi.api_v3.InfoSelection;
import org.uddi.api_v3.PublisherAssertion;
import org.uddi.api_v3.RegisteredInfo;
import org.uddi.api_v3.SaveBinding;
import org.uddi.api_v3.SaveBusiness;
import org.uddi.api_v3.SaveService;
import org.uddi.api_v3.SaveTModel;
import org.uddi.api_v3.ServiceDetail;
import org.uddi.api_v3.TModelDetail;
import org.uddi.v3_service.DispositionReportFaultMessage;
import org.uddi.v3_service.UDDIPublicationPortType;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.mapping.MappingApiToModel;
import org.apache.juddi.mapping.MappingModelToApi;
import org.apache.juddi.v3.error.ErrorMessage;
import org.apache.juddi.v3.error.FatalErrorException;
import org.apache.juddi.validation.ValidatePublish;
import org.apache.juddi.query.FetchBusinessEntitiesQuery;
import org.apache.juddi.query.FetchTModelsQuery;
import org.apache.juddi.query.FindBusinessByPublisherQuery;
import org.apache.juddi.query.FindTModelByPublisherQuery;
import org.apache.juddi.query.FindPublisherAssertionByBusinessQuery;
import org.apache.juddi.query.DeletePublisherAssertionByBusinessQuery;
import org.apache.juddi.query.TModelQuery;
import org.apache.juddi.model.UddiEntityPublisher;
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.query.util.DynamicQuery;
import org.apache.juddi.query.util.FindQualifiers;
import org.uddi.api_v3.ListDescription;

/**
* This class implements the UDDI Publication Service
* @author <a href="mailto:jfaath@apache.org">Jeff Faath</a> (and many others)
*/
@WebService(serviceName="UDDIPublicationService",
      endpointInterface="org.uddi.v3_service.UDDIPublicationPortType",
      targetNamespace = "urn:uddi-org:v3_service")
public class UDDIPublicationImpl extends AuthenticatedService implements UDDIPublicationPortType {

        private static Log log = LogFactory.getLog(UDDIInquiryImpl.class);
        private UDDIServiceCounter serviceCounter;
   
        public UDDIPublicationImpl() {
            super();
            serviceCounter = ServiceCounterLifecycleResource.getServiceCounter(UDDIPublicationImpl.class);
        }
 
       
       
  public void addPublisherAssertions(AddPublisherAssertions body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
     
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      new ValidatePublish(publisher).validateAddPublisherAssertions(em, body);
 
      List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = body.getPublisherAssertion();
      for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
       
        org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
       
        MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
       
        org.apache.juddi.model.PublisherAssertion existingPubAssertion = em.find(modelPubAssertion.getClass(), modelPubAssertion.getId());
        boolean persistNewAssertion = true;
        if (existingPubAssertion != null) {
          if (modelPubAssertion.getTmodelKey().equalsIgnoreCase(existingPubAssertion.getTmodelKey()) &&
            modelPubAssertion.getKeyName().equalsIgnoreCase(existingPubAssertion.getKeyName()) &&
            modelPubAssertion.getKeyValue().equalsIgnoreCase(existingPubAssertion.getKeyValue())) {
            // This pub assertion is already been "asserted".  Simply need to set the "check" value on the existing (and persistent) assertion
            if (publisher.isOwner(existingPubAssertion.getBusinessEntityByFromKey()))
              existingPubAssertion.setFromCheck("true");
            if (publisher.isOwner(existingPubAssertion.getBusinessEntityByToKey()))
              existingPubAssertion.setToCheck("true");
           
            persistNewAssertion = false;
          }
          else {
            // Otherwise, it is a new relationship between these entities.  Remove the old one so the new one can be added.
            // TODO: the model only seems to allow one assertion per two business (primary key is fromKey and toKey). Spec seems to imply as
            // many relationships as desired (the differentiator would be the keyedRef values).
            em.remove(existingPubAssertion);
          }
        }
 
        if (persistNewAssertion) {
          org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
          org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
          modelPubAssertion.setBusinessEntityByFromKey(beFrom);
          modelPubAssertion.setBusinessEntityByToKey(beTo);
 
          modelPubAssertion.setFromCheck("false");
          modelPubAssertion.setToCheck("false");
 
          em.persist(modelPubAssertion);
         
          if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey()))
            modelPubAssertion.setFromCheck("true");
          if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey()))
            modelPubAssertion.setToCheck("true");
        }
       
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS,
                                QueryStatus.SUCCESS, procTime);     
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.ADD_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);                     
                    throw drfm;
                } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  public void deleteBinding(DeleteBinding body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      new ValidatePublish(publisher).validateDeleteBinding(em, body);
     
      List<String> entityKeyList = body.getBindingKey();
      for (String entityKey : entityKeyList) {
        Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
 
        ((org.apache.juddi.model.BindingTemplate)obj).getBusinessService().setModifiedIncludingChildren(new Date());
        // JUDDI-421:  now the businessEntity parent will have it's modifiedIncludingChildren set
        ((org.apache.juddi.model.BindingTemplate)obj).getBusinessService().getBusinessEntity().setModifiedIncludingChildren(new Date());
       
        em.remove(obj);
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.DELETE_BINDING,
                                QueryStatus.SUCCESS, procTime);                     
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.DELETE_BINDING, QueryStatus.FAILED, procTime);                     
                    throw drfm;
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  public void deleteBusiness(DeleteBusiness body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
 
      new ValidatePublish(publisher).validateDeleteBusiness(em, body);
     
      List<String> entityKeyList = body.getBusinessKey();
      for (String entityKey : entityKeyList) {
        Object obj = em.find(org.apache.juddi.model.BusinessEntity.class, entityKey);
        em.remove(obj);
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.SUCCESS, procTime);              
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.DELETE_BUSINESS, QueryStatus.FAILED, procTime);                     
                    throw drfm;
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  public void deletePublisherAssertions(DeletePublisherAssertions body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
 
      new ValidatePublish(publisher).validateDeletePublisherAssertions(em, body);
     
      List<org.uddi.api_v3.PublisherAssertion> entityList = body.getPublisherAssertion();
      for (org.uddi.api_v3.PublisherAssertion entity : entityList) {
        org.apache.juddi.model.PublisherAssertionId pubAssertionId = new org.apache.juddi.model.PublisherAssertionId(entity.getFromKey(), entity.getToKey());
        Object obj = em.find(org.apache.juddi.model.PublisherAssertion.class, pubAssertionId);
        em.remove(obj);
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS,
                                QueryStatus.SUCCESS, procTime);
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.DELETE_PUBLISHERASSERTIONS, QueryStatus.FAILED, procTime);                     
                    throw drfm;                       
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  public void deleteService(DeleteService body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      new ValidatePublish(publisher).validateDeleteService(em, body);
     
      List<String> entityKeyList = body.getServiceKey();
      for (String entityKey : entityKeyList) {
        Object obj = em.find(org.apache.juddi.model.BusinessService.class, entityKey);
       
        ((org.apache.juddi.model.BusinessService)obj).getBusinessEntity().setModifiedIncludingChildren(new Date());
       
        em.remove(obj);
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.DELETE_SERVICE,
                                QueryStatus.SUCCESS, procTime);
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.DELETE_SERVICE, QueryStatus.FAILED, procTime);                     
                    throw drfm;                                              
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public void deleteTModel(DeleteTModel body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
 
      new ValidatePublish(publisher).validateDeleteTModel(em, body);
 
      // tModels are only lazily deleted!
      List<String> entityKeyList = body.getTModelKey();
      for (String entityKey : entityKeyList) {
        Object obj = em.find(org.apache.juddi.model.Tmodel.class, entityKey);
        ((org.apache.juddi.model.Tmodel)obj).setDeleted(true);
       
      }
     
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.SUCCESS, procTime);                     
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.DELETE_TMODEL, QueryStatus.FAILED, procTime);                     
                    throw drfm;                                              
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public List<AssertionStatusItem> getAssertionStatusReport(String authInfo,
      CompletionStatus completionStatus)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
 
      List<org.uddi.api_v3.AssertionStatusItem> result = PublicationHelper.getAssertionStatusItemList(publisher, completionStatus, em);
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.GET_ASSERTIONSTATUSREPORT, QueryStatus.FAILED, procTime);                     
                    throw drfm;                                              
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  public List<PublisherAssertion> getPublisherAssertions(String authInfo)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
     
      List<org.uddi.api_v3.PublisherAssertion> result = new ArrayList<org.uddi.api_v3.PublisherAssertion>(0);
 
      List<?> businessKeysFound = null;
      businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
     
      List<org.apache.juddi.model.PublisherAssertion> pubAssertionList = FindPublisherAssertionByBusinessQuery.select(em, businessKeysFound, null);
                        if (pubAssertionList!=null)
      for(org.apache.juddi.model.PublisherAssertion modelPubAssertion : pubAssertionList) {
        org.uddi.api_v3.PublisherAssertion apiPubAssertion = new org.uddi.api_v3.PublisherAssertion();
 
        MappingModelToApi.mapPublisherAssertion(modelPubAssertion, apiPubAssertion);
       
        result.add(apiPubAssertion);
      }
     
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
                                QueryStatus.SUCCESS, procTime);                     
      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.GET_PUBLISHERASSERTIONS,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                    
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      new ValidatePublish(publisher).validateRegisteredInfo(body);

      List<?> businessKeysFound = null;
      businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
 
     
      List<?> tmodelKeysFound = null;

      if (body.getInfoSelection().equals(InfoSelection.HIDDEN))
        tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted",  Boolean.TRUE, DynamicQuery.PREDICATE_EQUALS));
      else if (body.getInfoSelection().equals(InfoSelection.VISIBLE))
        tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound, new DynamicQuery.Parameter(TModelQuery.ENTITY_ALIAS + ".deleted",  Boolean.FALSE, DynamicQuery.PREDICATE_EQUALS));
      else
        tmodelKeysFound = FindTModelByPublisherQuery.select(em, null, publisher, tmodelKeysFound);
       
      RegisteredInfo result = new RegisteredInfo();
     
      // Sort and retrieve the final results
      List<?> queryResults = FetchBusinessEntitiesQuery.select(em, new FindQualifiers(), businessKeysFound, null, null, null);
      if (queryResults.size() > 0) {
        result.setBusinessInfos(new org.uddi.api_v3.BusinessInfos());
       
        for (Object item : queryResults) {
          org.apache.juddi.model.BusinessEntity modelBusinessEntity = (org.apache.juddi.model.BusinessEntity)item;
          org.uddi.api_v3.BusinessInfo apiBusinessInfo = new org.uddi.api_v3.BusinessInfo();
         
          MappingModelToApi.mapBusinessInfo(modelBusinessEntity, apiBusinessInfo);
         
          result.getBusinessInfos().getBusinessInfo().add(apiBusinessInfo);
        }
      }
 
      // Sort and retrieve the final results
      queryResults = FetchTModelsQuery.select(em, new FindQualifiers(), tmodelKeysFound, null, null, null);
      if (queryResults.size() > 0) {
        result.setTModelInfos(new org.uddi.api_v3.TModelInfos());
       
        for (Object item : queryResults) {
          org.apache.juddi.model.Tmodel modelTModel = (org.apache.juddi.model.Tmodel)item;
          org.uddi.api_v3.TModelInfo apiTModelInfo = new org.uddi.api_v3.TModelInfo();
         
          MappingModelToApi.mapTModelInfo(modelTModel, apiTModelInfo);
         
          result.getTModelInfos().getTModelInfo().add(apiTModelInfo);
        }
      }
     
      tx.commit()
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.GET_REGISTEREDINFO,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public BindingDetail saveBinding(SaveBinding body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
     
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      ValidatePublish validator = new ValidatePublish(publisher);
      validator.validateSaveBinding(em, body, null);
 
      BindingDetail result = new BindingDetail();
                        result.setListDescription(new ListDescription());
      List<org.uddi.api_v3.BindingTemplate> apiBindingTemplateList = body.getBindingTemplate();
      for (org.uddi.api_v3.BindingTemplate apiBindingTemplate : apiBindingTemplateList) {
       
        org.apache.juddi.model.BindingTemplate modelBindingTemplate = new org.apache.juddi.model.BindingTemplate();
                               
        org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
        modelBusinessService.setEntityKey(apiBindingTemplate.getServiceKey());
       
        MappingApiToModel.mapBindingTemplate(apiBindingTemplate, modelBindingTemplate, modelBusinessService);
 
        setOperationalInfo(em, modelBindingTemplate, publisher, false);
 
        em.persist(modelBindingTemplate);
       
        result.getBindingTemplate().add(apiBindingTemplate);
                                result.getListDescription().setActualCount(result.getListDescription().getActualCount()+1);
                                result.getListDescription().setIncludeCount(result.getListDescription().getIncludeCount()+1);
        validator.validateSaveBindingMax(em, modelBindingTemplate.getBusinessService().getEntityKey());
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.SAVE_BINDING,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.SAVE_BINDING,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public BusinessDetail saveBusiness(SaveBusiness body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();
               if (!body.getBusinessEntity().isEmpty()) {
                log.debug("Inbound save business request for key " + body.getBusinessEntity().get(0).getBusinessKey());
                 }
                EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
     
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      ValidatePublish validator = new ValidatePublish(publisher);
      validator.validateSaveBusiness(em, body, null);
 
      BusinessDetail result = new BusinessDetail();
     
      List<org.uddi.api_v3.BusinessEntity> apiBusinessEntityList = body.getBusinessEntity();
      for (org.uddi.api_v3.BusinessEntity apiBusinessEntity : apiBusinessEntityList) {
       
        org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
       
        MappingApiToModel.mapBusinessEntity(apiBusinessEntity, modelBusinessEntity);

        setOperationalInfo(em, modelBusinessEntity, publisher);
 
        em.persist(modelBusinessEntity);
 
        result.getBusinessEntity().add(apiBusinessEntity);
      }
     
      //check how many business this publisher owns.
      validator.validateSaveBusinessMax(em);
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.SAVE_BUSINESS,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                  
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public ServiceDetail saveService(SaveService body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
     
      ValidatePublish validator = new ValidatePublish(publisher);
      validator.validateSaveService(em, body, null);
     
      ServiceDetail result = new ServiceDetail();
 
      List<org.uddi.api_v3.BusinessService> apiBusinessServiceList = body.getBusinessService();
      for (org.uddi.api_v3.BusinessService apiBusinessService : apiBusinessServiceList) {
       
        org.apache.juddi.model.BusinessService modelBusinessService = new org.apache.juddi.model.BusinessService();
        org.apache.juddi.model.BusinessEntity modelBusinessEntity = new org.apache.juddi.model.BusinessEntity();
        modelBusinessEntity.setEntityKey(apiBusinessService.getBusinessKey());
       
        MappingApiToModel.mapBusinessService(apiBusinessService, modelBusinessService, modelBusinessEntity);
 
        setOperationalInfo(em, modelBusinessService, publisher, false);

        em.persist(modelBusinessService);
       
        result.getBusinessService().add(apiBusinessService);
       
        validator.validateSaveServiceMax(em, modelBusinessService.getBusinessEntity().getEntityKey());
      }
     
     
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.SAVE_SERVICE,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.SAVE_SERVICE,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                              
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public TModelDetail saveTModel(SaveTModel body)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, body.getAuthInfo());
 
      new ValidatePublish(publisher).validateSaveTModel(em, body, null);
 
      TModelDetail result = new TModelDetail();
 
      List<org.uddi.api_v3.TModel> apiTModelList = body.getTModel();
      for (org.uddi.api_v3.TModel apiTModel : apiTModelList) {
       
        org.apache.juddi.model.Tmodel modelTModel = new org.apache.juddi.model.Tmodel();
       
        MappingApiToModel.mapTModel(apiTModel, modelTModel);
 
        setOperationalInfo(em, modelTModel, publisher);
 
        em.persist(modelTModel);
       
        result.getTModel().add(apiTModel);
       
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.SAVE_TMODEL,
                                QueryStatus.SUCCESS, procTime);                     

      return result;
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.SAVE_TMODEL,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                                                
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }


  public void setPublisherAssertions(String authInfo,
      Holder<List<PublisherAssertion>> publisherAssertion)
      throws DispositionReportFaultMessage {
          long startTime = System.currentTimeMillis();

    EntityManager em = PersistenceManager.getEntityManager();
    EntityTransaction tx = em.getTransaction();
    try {
      tx.begin();
 
      UddiEntityPublisher publisher = this.getEntityPublisher(em, authInfo);
     
      new ValidatePublish(publisher).validateSetPublisherAssertions(em, publisherAssertion);
     
      List<?> businessKeysFound = null;
      businessKeysFound = FindBusinessByPublisherQuery.select(em, null, publisher, businessKeysFound);
 
      // First, wipe out all previous assertions associated with this publisher
      DeletePublisherAssertionByBusinessQuery.delete(em, businessKeysFound);
     
      // Slate is clean for all assertions involving this publisher, now we simply need to add the new ones (and they will all be "new").
      List<org.uddi.api_v3.PublisherAssertion> apiPubAssertionList = publisherAssertion.value;
      for (org.uddi.api_v3.PublisherAssertion apiPubAssertion : apiPubAssertionList) {
       
        org.apache.juddi.model.PublisherAssertion modelPubAssertion = new org.apache.juddi.model.PublisherAssertion();
       
        MappingApiToModel.mapPublisherAssertion(apiPubAssertion, modelPubAssertion);
       
        org.apache.juddi.model.BusinessEntity beFrom = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getFromKey());
        org.apache.juddi.model.BusinessEntity beTo = em.find(org.apache.juddi.model.BusinessEntity.class, modelPubAssertion.getId().getToKey());
        modelPubAssertion.setBusinessEntityByFromKey(beFrom);
        modelPubAssertion.setBusinessEntityByToKey(beTo);
       
        modelPubAssertion.setFromCheck("false");
        modelPubAssertion.setToCheck("false");
       
        em.persist(modelPubAssertion);
 
        if (publisher.isOwner(modelPubAssertion.getBusinessEntityByFromKey()))
          modelPubAssertion.setFromCheck("true");
        if (publisher.isOwner(modelPubAssertion.getBusinessEntityByToKey()))
          modelPubAssertion.setToCheck("true");
       
      }
 
      tx.commit();
                        long procTime = System.currentTimeMillis() - startTime;
                        serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
                                QueryStatus.SUCCESS, procTime);                     
                } catch (DispositionReportFaultMessage drfm) {
                    long procTime = System.currentTimeMillis() - startTime;
                    serviceCounter.update(PublicationQuery.SET_PUBLISHERASSERTIONS,
                            QueryStatus.FAILED, procTime);                     
                    throw drfm;                                                                                                
    } finally {
      if (tx.isActive()) {
        tx.rollback();
      }
      em.close();
    }
  }

  private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessEntity uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {

    uddiEntity.setAuthorizedName(publisher.getAuthorizedName());

    Date now = new Date();
    uddiEntity.setModified(now);
    uddiEntity.setModifiedIncludingChildren(now);

    String nodeId = "";
    try
    { nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); }
    catch (ConfigurationException ce)
    { throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
    uddiEntity.setNodeId(nodeId);
   
    org.apache.juddi.model.BusinessEntity existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
    if (existingUddiEntity != null)
      uddiEntity.setCreated(existingUddiEntity.getCreated());
    else
      uddiEntity.setCreated(now);
   
    List<org.apache.juddi.model.BusinessService> serviceList = uddiEntity.getBusinessServices();
    for (org.apache.juddi.model.BusinessService service : serviceList)
      setOperationalInfo(em, service, publisher, true);
   
   
    if (existingUddiEntity != null)
      em.remove(existingUddiEntity);
   
  }

  private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BusinessService uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {

    uddiEntity.setAuthorizedName(publisher.getAuthorizedName());

    Date now = new Date();
    uddiEntity.setModified(now);
    uddiEntity.setModifiedIncludingChildren(now);
   
    if(!isChild) {
      org.apache.juddi.model.BusinessEntity parent = em.find(org.apache.juddi.model.BusinessEntity.class, uddiEntity.getBusinessEntity().getEntityKey());
      parent.setModifiedIncludingChildren(now);
      em.persist(parent);
    }

    String nodeId = "";
    try
    { nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); }
    catch (ConfigurationException ce)
    { throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
    uddiEntity.setNodeId(nodeId);
   
    org.apache.juddi.model.BusinessService existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
    if (existingUddiEntity != null) {
      uddiEntity.setCreated(existingUddiEntity.getCreated());
    }
    else
      uddiEntity.setCreated(now);
   
    List<org.apache.juddi.model.BindingTemplate> bindingList = uddiEntity.getBindingTemplates();
    for (org.apache.juddi.model.BindingTemplate binding : bindingList)
      setOperationalInfo(em, binding, publisher, true);
   
   
    if (existingUddiEntity != null)
      em.remove(existingUddiEntity);
   
  }

  private void setOperationalInfo(EntityManager em, org.apache.juddi.model.BindingTemplate uddiEntity, UddiEntityPublisher publisher, boolean isChild) throws DispositionReportFaultMessage {

    uddiEntity.setAuthorizedName(publisher.getAuthorizedName());

    Date now = new Date();
    uddiEntity.setModified(now);
    uddiEntity.setModifiedIncludingChildren(now);

    if(!isChild) {
      org.apache.juddi.model.BusinessService parent = em.find(org.apache.juddi.model.BusinessService.class, uddiEntity.getBusinessService().getEntityKey());
      parent.setModifiedIncludingChildren(now);
      em.persist(parent);
     
      // JUDDI-421:  now the businessEntity parent will have it's modifiedIncludingChildren set
      org.apache.juddi.model.BusinessEntity businessParent = em.find(org.apache.juddi.model.BusinessEntity.class, parent.getBusinessEntity().getEntityKey());
      businessParent.setModifiedIncludingChildren(now);
      em.persist(businessParent);
    }

    String nodeId = "";
    try
    { nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); }
    catch (ConfigurationException ce)
    { throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
    uddiEntity.setNodeId(nodeId);
   
    org.apache.juddi.model.BindingTemplate existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
    if (existingUddiEntity != null)
      uddiEntity.setCreated(existingUddiEntity.getCreated());
    else
      uddiEntity.setCreated(now);
   
    if (existingUddiEntity != null)
      em.remove(existingUddiEntity);
   
  }
 
  private void setOperationalInfo(EntityManager em, org.apache.juddi.model.Tmodel uddiEntity, UddiEntityPublisher publisher) throws DispositionReportFaultMessage {

    uddiEntity.setAuthorizedName(publisher.getAuthorizedName());
   
    Date now = new Date();
    uddiEntity.setModified(now);
    uddiEntity.setModifiedIncludingChildren(now);

    String nodeId = "";
    try
    { nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID); }
    catch (ConfigurationException ce)
    { throw new FatalErrorException(new ErrorMessage("errors.configuration.Retrieval", Property.JUDDI_NODE_ID)); }
    uddiEntity.setNodeId(nodeId);
   
    org.apache.juddi.model.Tmodel existingUddiEntity = em.find(uddiEntity.getClass(), uddiEntity.getEntityKey());
    if (existingUddiEntity != null)
      uddiEntity.setCreated(existingUddiEntity.getCreated());
    else
      uddiEntity.setCreated(now);
   
    if (existingUddiEntity != null)
      em.remove(existingUddiEntity);
   
  }

 
}
TOP

Related Classes of org.apache.juddi.api.impl.UDDIPublicationImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.