/* * Copyright 2014 Avanza Bank AB * * 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 com.avanza.astrix.serviceunit; import com.avanza.astrix.beans.service.ServiceComponent; import com.avanza.astrix.beans.service.ServiceProperties; import com.avanza.astrix.beans.service.UnsupportedTargetTypeException; class ServiceRegistryExportedService { private final ServiceComponent serviceComponent; private volatile boolean publishServices; private final ExportedServiceBeanDefinition<?> serviceBeanDefinition; public ServiceRegistryExportedService(ServiceComponent serviceComponent, ExportedServiceBeanDefinition<?> serviceBeanDefinition, boolean publishServices) { this.serviceBeanDefinition = serviceBeanDefinition; this.publishServices = publishServices; if (!serviceComponent.canBindType(serviceBeanDefinition.getBeanType())) { throw new UnsupportedTargetTypeException(serviceComponent.getName(), serviceBeanDefinition.getBeanType()); } this.serviceComponent = serviceComponent; } public ServiceProperties exportServiceProperties() { ServiceProperties serviceProperties = serviceComponent.createServiceProperties(serviceBeanDefinition.getServiceDefinition()); serviceProperties.getProperties().put(ServiceProperties.PUBLISHED, Boolean.toString(isPublished())); serviceProperties.setApi(serviceBeanDefinition.getBeanKey().getBeanType()); serviceProperties.setQualifier(serviceBeanDefinition.getBeanKey().getQualifier()); serviceProperties.setComponent(serviceComponent.getName()); return serviceProperties; } private boolean isPublished() { if (serviceBeanDefinition.isAlwaysActive()) { return true; } if (!publishServices) { return false; } return serviceBeanDefinition.getServiceDefinition().isVersioned(); } public void setPublishServices(boolean published) { this.publishServices = published; } }