blob: c4d0967045062151ee7eeb0d5d8f5e7e0d6c10b3 [file] [log] [blame]
[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]