This project has retired. For details please refer to its Attic page.
UDDIv2PublishImpl.java

UDDIv2PublishImpl.java

/*
 * Copyright 2014 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.List;
import javax.jws.WebService;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.xml.ws.Holder;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.juddi.config.AppConfig;
import org.apache.juddi.config.PersistenceManager;
import org.apache.juddi.config.Property;
import org.apache.juddi.v3.client.mapping.MapUDDIv2Tov3;
import org.apache.juddi.v3.client.mapping.MapUDDIv3Tov2;
import org.uddi.api_v2.AddPublisherAssertions;
import org.uddi.api_v2.AssertionStatusReport;
import org.uddi.api_v2.AuthToken;
import org.uddi.api_v2.BindingDetail;
import org.uddi.api_v2.BusinessDetail;
import org.uddi.api_v2.DeleteBinding;
import org.uddi.api_v2.DeleteBusiness;
import org.uddi.api_v2.DeletePublisherAssertions;
import org.uddi.api_v2.DeleteService;
import org.uddi.api_v2.DeleteTModel;
import org.uddi.api_v2.DiscardAuthToken;
import org.uddi.api_v2.DispositionReport;
import org.uddi.api_v2.GetAssertionStatusReport;
import org.uddi.api_v2.GetAuthToken;
import org.uddi.api_v2.GetPublisherAssertions;
import org.uddi.api_v2.GetRegisteredInfo;
import org.uddi.api_v2.PublisherAssertions;
import org.uddi.api_v2.RegisteredInfo;
import org.uddi.api_v2.Result;
import org.uddi.api_v2.SaveBinding;
import org.uddi.api_v2.SaveBusiness;
import org.uddi.api_v2.SaveService;
import org.uddi.api_v2.SaveTModel;
import org.uddi.api_v2.ServiceDetail;
import org.uddi.api_v2.SetPublisherAssertions;
import org.uddi.api_v2.TModelDetail;
import org.uddi.api_v2.Truncated;
import org.uddi.api_v3.CompletionStatus;
import org.uddi.api_v3.PublisherAssertion;
import org.uddi.v2_service.Publish;
import org.uddi.v3_service.DispositionReportFaultMessage;

/**
 * UDDI v2 Implementation for the Publish service. This implementation is
 * basically a wrapper and API translator that translates and forwards the
 * request to our UDDIv3 Publish implementation<br><br>
 * This class is a BETA feature and is largely untested. Please report any
 * issues
 *
 * @author <a href="mailto:alexoree.apache.org">Alex O'Ree</a>
 * @since 3.2
 */
@WebService(serviceName = "Publish", targetNamespace = "urn:uddi-org:publication_v2",
     endpointInterface = "org.uddi.v2_service.Publish")
public class UDDIv2PublishImpl implements Publish {

        public UDDIv2PublishImpl() {
                logger.warn("This implementation of UDDIv2 Publish service " + UDDIv2PublishImpl.class.getCanonicalName() + " is considered BETA. Please"
                     + " report any issues to https://issues.apache.org/jira/browse/JUDDI");
        }

        static String nodeId = null;

        private static String getNodeID() {
                try {
                        nodeId = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
                } catch (ConfigurationException ex) {
                        logger.warn(ex.getMessage());
                        nodeId = "JUDDI_v3";
                }
                return nodeId;
        }
        private static Log logger = LogFactory.getLog(UDDIv2PublishImpl.class);
        static UDDIPublicationImpl publishService = new UDDIPublicationImpl();
        static UDDISecurityImpl securityService = new UDDISecurityImpl();

        @Override
        public DispositionReport addPublisherAssertions(AddPublisherAssertions body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.addPublisherAssertions(MapUDDIv2Tov3.MapAddPublisherAssertions(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport deleteBinding(DeleteBinding body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.deleteBinding(MapUDDIv2Tov3.MapDeleteBinding(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport deleteBusiness(DeleteBusiness body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.deleteBusiness(MapUDDIv2Tov3.MapDeleteBusiness(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport deletePublisherAssertions(DeletePublisherAssertions body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.deletePublisherAssertions(MapUDDIv2Tov3.MapDeletePublisherAssertion(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport deleteService(DeleteService body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.deleteService(MapUDDIv2Tov3.MapDeleteService(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport deleteTModel(DeleteTModel body) throws org.uddi.v2_service.DispositionReport {
                try {
                        publishService.deleteTModel(MapUDDIv2Tov3.MapDeleteTModel(body));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public DispositionReport discardAuthToken(DiscardAuthToken body) throws org.uddi.v2_service.DispositionReport {
                try {
                        securityService.discardAuthToken(new org.uddi.api_v3.DiscardAuthToken(body.getAuthInfo()));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
                return getSuccessMessage();
        }

        @Override
        public AssertionStatusReport getAssertionStatusReport(GetAssertionStatusReport body) throws org.uddi.v2_service.DispositionReport {
                try {

                        return MapUDDIv3Tov2.MapAssertionStatusReport(publishService.getAssertionStatusReport(body.getAuthInfo(), MapUDDIv2Tov3.MapCompletionStatus(body.getCompletionStatus())));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public AuthToken getAuthToken(GetAuthToken body) throws org.uddi.v2_service.DispositionReport {
                try {
                        org.uddi.api_v3.GetAuthToken r = new org.uddi.api_v3.GetAuthToken();
                        r.setCred(body.getCred());
                        r.setUserID(body.getUserID());
                        org.uddi.api_v3.AuthToken authToken = securityService.getAuthToken(r);
                        AuthToken ret = new AuthToken();
                        ret.setAuthInfo(authToken.getAuthInfo());
                        ret.setGeneric("2.0");
                        ret.setOperator(getNodeID());
                        return ret;
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public PublisherAssertions getPublisherAssertions(GetPublisherAssertions body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapPublisherAssertions(publishService.getPublisherAssertions(body.getAuthInfo()), getNodeID(),getUsername(body.getAuthInfo()));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public RegisteredInfo getRegisteredInfo(GetRegisteredInfo body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapRegisteredInfo(publishService.getRegisteredInfo(MapUDDIv2Tov3.MapGetRegisteredInfo(body)), getNodeID());
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }

        }

        @Override
        public BindingDetail saveBinding(SaveBinding body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapBindingDetail(publishService.saveBinding(MapUDDIv2Tov3.MapSaveBinding(body)), getNodeID());
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public BusinessDetail saveBusiness(SaveBusiness body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapBusinessDetail(publishService.saveBusiness(MapUDDIv2Tov3.MapSaveBusiness(body)), getNodeID());
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public ServiceDetail saveService(SaveService body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapServiceDetail(publishService.saveService(MapUDDIv2Tov3.MapSaveService(body)), getNodeID());
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        @Override
        public TModelDetail saveTModel(SaveTModel body) throws org.uddi.v2_service.DispositionReport {
                try {
                        return MapUDDIv3Tov2.MapTModelDetail(publishService.saveTModel(MapUDDIv2Tov3.MapSaveTModel(body)), getNodeID());
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        private String getUsername(String authinfo) {
                String user = "N/A";

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

                        tx.begin();
                        user = publishService.getEntityPublisher(em, authinfo).getAuthorizedName();
                        tx.commit();
                } catch (Exception ex) {
                        logger.error(ex);
                } finally {
                        if (tx.isActive()) {
                                tx.rollback();
                        }
                        em.close();
                }
                return user;
        }

        @Override
        public PublisherAssertions setPublisherAssertions(SetPublisherAssertions body) throws org.uddi.v2_service.DispositionReport {
                try {
                        Holder<List<PublisherAssertion>> req = new Holder<List<PublisherAssertion>>();
                        req.value = MapUDDIv2Tov3.MapSetPublisherAssertions(body);
                        publishService.setPublisherAssertions(body.getAuthInfo(), req);

                        return MapUDDIv3Tov2.MapPublisherAssertions(req.value, getNodeID(), getUsername(body.getAuthInfo()));
                } catch (DispositionReportFaultMessage ex) {
                        throw MapUDDIv3Tov2.MapException(ex, getNodeID());
                }
        }

        private DispositionReport getSuccessMessage() {
                DispositionReport r = new DispositionReport();
                r.setGeneric("2.0");
                r.setTruncated(Truncated.FALSE);
                Result x = new Result();
                r.setOperator(getNodeID());
                r.getResult().add(x);
                return r;
        }

}