| [comment encoding = UTF-8 /] |
| [comment |
| /******************************************************************************* |
| * Copyright (c) 2017 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 specification generation |
| *******************************************************************************/ |
| /] |
| |
| [module generateSpecification('http://org.eclipse.lyo/oslc4j/adaptorInterface', 'http://org.eclipse.lyo/oslc4j/vocabulary')] |
| |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::services/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::resourceServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::domainSpecificationServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::vocabularyServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::resourcePropertyServices/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::services::adaptorInterfaceServices/] |
| |
| [import org::eclipse::lyo::oslc4j::codegenerator::files::generateDomainSpecificationConstants/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::files::generateVocabularyConstants/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::files::generateResource/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::files::generateResourceInterface/] |
| [import org::eclipse::lyo::oslc4j::codegenerator::staticFiles::generateLicenseFiles/] |
| |
| [query public canGenerate(aSpecification : Specification) : Boolean = |
| not( |
| aSpecification.generationSetting.oclIsUndefined() |
| or(aSpecification.generationSetting.javaFilesPath.isNullOrEmpty()) |
| or(aSpecification.generationSetting.javaClassPackageName.isNullOrEmpty()) |
| ) |
| /] |
| |
| [query public relevantResources(aSpecification : Specification) : Set(Resource) = |
| (aSpecification.domainSpecifications.resources |
| ->union(aSpecification.domainSpecifications.resources.allRelatedResources()))->flatten()->asSet() |
| /] |
| |
| [query public relevantDomainSpecifications(aSpecification : Specification) : Set(DomainSpecification) = |
| relevantResources(aSpecification)->collectNested(aResource : Resource | aResource.definingDomainSpecification())->flatten()->asSet() |
| /] |
| |
| [query public relevantVocabularies(aSpecification : Specification) : Set(Vocabulary) = |
| relevantDomainSpecifications(aSpecification)->collectNested(aDomainSpecification : DomainSpecification | |
| relevantVocabularies(aDomainSpecification) |
| )->flatten()->asSet() |
| /] |
| |
| [template public generateSpecification(aSpecification : Specification)] |
| [comment @main/] |
| [if (canGenerate(aSpecification))] |
| [aSpecification.generateLicenseFiles() /] |
| [for (aDomainSpecification: DomainSpecification | aSpecification.relevantDomainSpecifications())] |
| [aDomainSpecification.generateDomainSpecificationConstants(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName)/] |
| [/for] |
| |
| [for (aVocabulary: Vocabulary | aSpecification.relevantVocabularies())] |
| [aVocabulary.generateVocabularyConstants(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName)/] |
| [/for] |
| |
| [for (aResource: Resource | aSpecification.relevantResources())] |
| [aResource.generateResource(null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName) /] |
| [aResource.generateResourceInterface(null, null, aSpecification.generationSetting.javaFilesPath, aSpecification.generationSetting.javaClassPackageName) /] |
| [/for] |
| [/if] |
| [/template] |