| [comment encoding = UTF-8 /] |
| [comment |
| /******************************************************************************* |
| * Copyright (c) 2014 Jad El-khoury. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * and Eclipse Distribution License v. 1.0 which accompanies this distribution. |
| * |
| * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
| * and the Eclipse Distribution License is available at |
| * http://www.eclipse.org/org/documents/edl-v10.php. |
| * |
| * Contributors: |
| * |
| * Jad El-khoury - initial implementation of code generator (https://bugs.eclipse.org/bugs/show_bug.cgi?id=422448) |
| * Matthieu Helleboid - Support for multiple Service Providers. |
| * Anass Radouani - Support for multiple Service Providers. |
| * |
| *******************************************************************************/ |
| /] |
| |
| [module serviceProviderServices('http://org.eclipse.lyo/oslc4j/adaptorInterface')/] |
| |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::services/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/] |
| |
| [comment TODO: we should avoid relying on "eContainer", since objects that come from a composing emf file, will not have the eContainer relationship setup as expected. |
| This method should be able to work even for objects that come from a differnet emf file than that containing the AdaptorInterface. |
| You should also question any other use of "eContainer" in this whole project /] |
| [query public containingAdaptorInterface(aServiceProvider : ServiceProvider) : AdaptorInterface = |
| aServiceProvider.eContainer(AdaptorInterface) |
| /] |
| |
| [comment |
| If there is only 1 SP in the project, just call it 'ServiceProvider. Most projects would most likely have 1 SP, so we make the naming simple. |
| If there are more than 1 SP, we try to use the 'serviceNamespace' given in the model as part of the name - when available. |
| If no such 'serviceNamespace' is available, we simply name it ServiceProvider_i , where i is the position of the SP in the ordered list of SPs under the SPC. |
| /] |
| [query public javaName(aServiceProvider : ServiceProvider, toUpperFirst : Boolean) : String = |
| let name : String = |
| (if (containingAdaptorInterface(aServiceProvider).serviceProviderCatalog.serviceProviders->size() = 1) then |
| 'ServiceProvider' |
| else |
| (if (not aServiceProvider.serviceNamespace.oclIsUndefined())._and(not aServiceProvider.serviceNamespace.equalsIgnoreCase('')) then |
| javaString(aServiceProvider.serviceNamespace, true).concat('ServiceProvider') |
| else |
| 'ServiceProvider' |
| .concat(containingAdaptorInterface(aServiceProvider).serviceProviderCatalog.serviceProviders->indexOf(aServiceProvider).toString()) |
| endif) |
| endif) |
| in |
| if (toUpperFirst) then name.toUpperFirst() else name.toLowerFirst() endif |
| /] |
| |
| [query public servicedResources(aServiceProvider : ServiceProvider) : Set(Resource) = |
| aServiceProvider.services->collectNested(aService : Service | servicedResources(aService))->flatten()->asSet() |
| /] |
| |
| [query public relevantResources(aServiceProvider : ServiceProvider) : Set(Resource) = |
| aServiceProvider.services->collectNested(aService : Service | relevantResources(aService))->flatten()->asSet() |
| /] |
| |
| [query public relevantDomainSpecifications(aServiceProvider : ServiceProvider) : Set(DomainSpecification) = |
| aServiceProvider.services->collectNested(aService : Service | relevantDomainSpecifications(aService))->flatten()->asSet() |
| /] |
| |
| [query public servicedResources(aService: Service) : Set(Resource) = |
| aService.creationFactories.resourceTypes->asSet() |
| ->union(aService.queryCapabilities.resourceTypes->asSet()) |
| ->union(aService.basicCapabilities.resourceTypes->asSet()) |
| ->union(aService.creationDialogs.resourceTypes->asSet()) |
| ->union(aService.selectionDialogs.resourceTypes->asSet()) |
| /] |
| |
| [query public relevantResources(aService: Service) : Set(Resource) = |
| (servicedResources(aService) |
| ->union(servicedResources(aService).allRelatedResources()))->flatten()->asSet() |
| /] |
| |
| [query public relevantDomainSpecifications(aService: Service) : Set(DomainSpecification) = |
| relevantResources(aService)->collectNested(aResource : Resource | |
| definingDomainSpecification(aResource) |
| ->union(aResource.allProperties()->asSet()->collectNested(aResourceProperty : ResourceProperty | aResourceProperty.definingDomainSpecification())) |
| )->flatten()->asSet() |
| ->union(Set{aService.domainSpecification}) |
| /] |
| |
| [comment Services for serviceProviderService /] |
| [query public javaClassPackageNameForService(aServiceProvider : ServiceProvider) : String = |
| javaClassBaseNamespace(containingAdaptorInterface(aServiceProvider)).concat('.services') |
| /] |
| |
| [query public javaClassNameForService(aServiceProvider : ServiceProvider) : String = |
| aServiceProvider.javaName(true).concat('Service') |
| /] |
| |
| [query public javaClassFullNameForService(aServiceProvider : ServiceProvider) : String = |
| javaClassPackageNameForService(aServiceProvider).concat('.').concat(javaClassNameForService(aServiceProvider)) |
| /] |
| |
| [query public javaClassFullFileNameForService(aServiceProvider : ServiceProvider) : String = |
| javaFilesBasePath(containingAdaptorInterface(aServiceProvider)).concatenatePaths(javaClassPackageNameForService(aServiceProvider).substituteAll('.', '/')).concat('/').concat(javaClassNameForService(aServiceProvider)).concat('.java') |
| /] |
| |
| [comment Services for ServiceProviderInfo /] |
| [query public javaClassPackageName(aServiceProvider : ServiceProvider) : String = |
| javaClassBaseNamespace(containingAdaptorInterface(aServiceProvider)) |
| /] |
| |
| [query public javaClassName(aServiceProvider : ServiceProvider) : String = |
| aServiceProvider.javaName(true).concat('Info') |
| /] |
| |
| [query public javaClassFullName(aServiceProvider : ServiceProvider) : String = |
| javaClassPackageName(aServiceProvider).concat('.').concat(javaClassName(aServiceProvider)) |
| /] |
| |
| [query public javaClassFullFileName(aServiceProvider : ServiceProvider) : String = |
| javaFilesBasePath(containingAdaptorInterface(aServiceProvider)).concatenatePaths(javaClassPackageName(aServiceProvider).substituteAll('.', '/')).concat('/').concat(javaClassName(aServiceProvider)).concat('.java') |
| /] |
| |
| [comment Services for ServiceProviderFactory /] |
| [query public javaClassPackageNameForFactory(aServiceProvider : ServiceProvider) : String = |
| javaClassBaseNamespace(containingAdaptorInterface(aServiceProvider)).concat('.servlet') |
| /] |
| |
| [query public javaClassNameForFactory(aServiceProvider : ServiceProvider) : String = |
| aServiceProvider.javaName(true).concat('sFactory') |
| /] |
| |
| [query public javaClassFullNameForFactory(aServiceProvider : ServiceProvider) : String = |
| javaClassPackageNameForFactory(aServiceProvider).concat('.').concat(javaClassNameForFactory(aServiceProvider)) |
| /] |
| |
| [query public javaClassFullFileNameForFactory(aServiceProvider : ServiceProvider) : String = |
| javaFilesBasePath(containingAdaptorInterface(aServiceProvider)).concatenatePaths(javaClassPackageNameForFactory(aServiceProvider).substituteAll('.', '/')).concat('/').concat(javaClassNameForFactory(aServiceProvider)).concat('.java') |
| /] |
| |
| [query public serviceBaseURI (aServiceProvider : ServiceProvider) : String = |
| (if (not aServiceProvider.serviceNamespace.oclIsUndefined())._and(not aServiceProvider.serviceNamespace.equalsIgnoreCase('')) then |
| aServiceProvider.serviceNamespace |
| else |
| (if (containingAdaptorInterface(aServiceProvider).serviceProviderCatalog.serviceProviders->size() = 1) then |
| 'serviceProviders' |
| else |
| 'serviceProviders' |
| .concat(containingAdaptorInterface(aServiceProvider).serviceProviderCatalog.serviceProviders->indexOf(aServiceProvider).toString()) |
| endif) |
| endif) |
| /] |
| |
| [query public collectionURISegment (aServiceProvider : ServiceProvider) : String = |
| '' |
| /] |
| |
| [query public collectionURI (aServiceProvider : ServiceProvider) : String = |
| JAXRSConcatURISegments(serviceBaseURI (aServiceProvider), collectionURISegment (aServiceProvider)) |
| /] |
| |
| [query public instanceURISegment (aServiceProvider : ServiceProvider) : String = |
| (if (not aServiceProvider.instanceID.oclIsUndefined())._and(not aServiceProvider.instanceID.equalsIgnoreCase('')) then |
| aServiceProvider.instanceID |
| else |
| '{serviceProviderId}' |
| endif) |
| /] |
| |
| [query public instanceURI (aServiceProvider : ServiceProvider) : String = |
| JAXRSConcatURISegments(serviceBaseURI (aServiceProvider), instanceURISegment (aServiceProvider)) |
| /] |
| |
| [query public instanceCompositeID (aServiceProvider : ServiceProvider) : Sequence(String) = |
| JAXRSPathParameters(instanceURI (aServiceProvider)) |
| /] |
| |
| [template public instanceJAXRSMethodSignature(aServiceProvider : ServiceProvider)] |
| [for (aPathParameter: String | JAXRSPathParameters(aServiceProvider.instanceURI())) separator(', ')]@PathParam("[aPathParameter /]") final String [aPathParameter /][/for] |
| [/template] |
| |
| [template public instanceMethodSignature(aServiceProvider : ServiceProvider)] |
| [for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')]final String [instanceCompositeID /][/for] |
| [/template] |
| |
| [template public instanceMethodParameterList(aServiceProvider : ServiceProvider)] |
| [for (instanceCompositeID: String | instanceCompositeID(aServiceProvider)) separator(', ')][instanceCompositeID /][/for] |
| [/template] |