Skip to content

Commit

Permalink
#64: Implements a workaround to override a few of the transformation …
Browse files Browse the repository at this point in the history
…methods by refactoring the overridable methods into a helper class
  • Loading branch information
tjuerge committed Apr 4, 2015
1 parent 7b6f7bf commit 9a847b7
Show file tree
Hide file tree
Showing 14 changed files with 725 additions and 503 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ package org.sculptor.generator.cartridge.springdatajpa

import org.sculptor.dsl.sculptordsl.DslRepository
import org.sculptor.generator.chain.ChainOverride
import org.sculptor.generator.transform.DslTransformation
import org.sculptor.generator.transform.DslTransformationHelper

@ChainOverride
class DslTransformationExtension extends DslTransformation {
class DslTransformationHelperExtension extends DslTransformationHelper {

override boolean hasGapOperations(DslRepository dslRepository) {
false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@
package org.sculptor.generator.cartridge.springdatajpa

import org.sculptor.generator.chain.ChainOverride
import org.sculptor.generator.transform.Transformation
import sculptormetamodel.Repository
import sculptormetamodel.RepositoryOperation
import org.sculptor.generator.transform.TransformationHelper

@ChainOverride
class TransformationExtension extends Transformation {
class TransformationHelperExtension extends TransformationHelper {

override void modifyPagingOperations(Repository repository) {
override boolean isModifyDynamicFindersEnabled() {
false
}

override void modifyDynamicFinderOperations(RepositoryOperation op) {
override boolean isModifyPagingOperationsEnabled() {
false
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -39,32 +39,55 @@ class SpringDataJpaGeneratorTest extends GeneratorTestBase {
}

@Test
def void assertMediaRepositoryCustomInterface() {
def void assertRepositoryCustomInterface() {
val code = getFileText(TO_GEN_SRC + "/org/sculptor/example/library/media/domain/MediaRepositoryCustom.java");
assertContainsConsecutiveFragments(code,
#[
"public interface MediaRepositoryCustom {",
"public List<Media> findMediaByCharacter(Long libraryId, String characterName);",
"public List<Media> findMediaByName(Long libraryId, String name);",
"public Map<String, Movie> findMovieByUrlIMDB(Set<String> keys);",
"}"
])
assertContainsConsecutiveFragments(code, #[
"public interface MediaRepositoryCustom {",
"public List<Media> findMediaByCharacter(Long libraryId, String characterName);",
"public List<Media> findMediaByName(Long libraryId, String name);",
"public Map<String, Movie> findMovieByUrlIMDB(Set<String> keys);",
"}"
])
}

@Test
def void assertMediaRepositoryCustomClass() {
def void assertRepositoryCustomClass() {
val code = getFileText(
TO_SRC + "/org/sculptor/example/library/media/repositoryimpl/MediaRepositoryCustomImpl.java");
assertContainsConsecutiveFragments(code,
#[
"public class MediaRepositoryCustomImpl implements MediaRepositoryCustom {",
"public MediaRepositoryCustomImpl() {",
"}",
"public List<Media> findMediaByCharacter(Long libraryId, String characterName) {",
"// TODO Auto-generated method stub",
"throw new UnsupportedOperationException(\"findMediaByCharacter not implemented\");",
"}"
])
assertContainsConsecutiveFragments(code, #[
"public class MediaRepositoryCustomImpl implements MediaRepositoryCustom {",
"public MediaRepositoryCustomImpl() {",
"}",
"public List<Media> findMediaByCharacter(Long libraryId, String characterName) {",
"// TODO Auto-generated method stub",
"throw new UnsupportedOperationException(\"findMediaByCharacter not implemented\");",
"}"
])
}

@Test
def void assertServiceBaseClass() {
val code = getFileText(
TO_GEN_SRC + "/org/sculptor/example/library/media/serviceimpl/MediaCharacterServiceImplBase.java");
assertContainsConsecutiveFragments(code, #[
"public MediaCharacterServiceImplBase() {",
"}",
"@Autowired",
"private MediaCharacterRepository mediaCharacterRepository;",
"protected MediaCharacterRepository getMediaCharacterRepository() {",
"return mediaCharacterRepository;",
"}",
"@Autowired",
"private LibraryRepository libraryRepository;",
"protected LibraryRepository getLibraryRepository() {",
"return libraryRepository;",
"}",
"@Autowired",
"private LibraryService libraryService;",
"protected LibraryService getLibraryService() {",
"return libraryService;",
"}"
])
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,9 @@ Application Library {
- Set<@Engagement> engagements <-> media
- Set<@MediaCharacter> mediaCharacters <-> existsInMedia

Repository MediaRepository {> @MediaCharacterRepository
Repository MediaRepository {
int getNumberOfMovies(Long libraryId);
List<@Media> findMediaByCharacter(Long libraryId, String characterName)
gap;
List<@Media> findMediaByCharacter(Long libraryId, String characterName) gap;

findByTitle(String title);

Expand All @@ -64,10 +63,8 @@ Application Library {
findAll;
findByQuery;
findByKeys(Set<String> keys, String keyPropertyName, Class<@Media> persistentClass);
List<@Media> findMediaByName(Long libraryId, String name)
gap;
Map<String, @Movie> findMovieByUrlIMDB(Set<String> keys)
gap;
List<@Media> findMediaByName(Long libraryId, String name) gap;
Map<String, @Movie> findMovieByUrlIMDB(Set<String> keys) gap;
}

}
Expand Down Expand Up @@ -97,6 +94,9 @@ Application Library {
}

Service MediaCharacterService {
gap
> @LibraryService
> @LibraryRepository
findAll => MediaCharacterRepository.findAll;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@
package org.sculptor.generator.cartridge.test

import org.sculptor.generator.chain.ChainOverride
import org.sculptor.generator.transform.Transformation
import org.sculptor.generator.transform.TransformationHelper

@ChainOverride
class TransformationExtension extends Transformation {
class TransformationHelperExtension extends TransformationHelper {

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import org.sculptor.generator.ext.Helper
import org.sculptor.generator.transform.DslTransformation
import sculptormetamodel.Entity
import sculptormetamodel.InheritanceType
import sculptormetamodel.Service
import sculptormetamodel.ValueObject

import static org.junit.Assert.*
Expand Down Expand Up @@ -78,16 +79,18 @@ class DslTransformationTest {
assertEquals("module" + i + "Doc", module.doc)
assertEquals("module" + i + "Value2", getHint(module, "key2"))

assertEquals(1, module.services.size)
val service = module.services.get(0)
assertEquals("service" + i + "Name", service.name)
assertEquals("service" + i + "Doc", service.doc)
assertEquals("service" + i + "Value2", getHint(service, "key2"))
assertFalse(service.localInterface)
assertFalse(service.remoteInterface)
assertEquals(2, module.services.size)
for (j : 1 .. 2) {
val service = module.services.get(j - 1)
assertEquals("service" + i + j + "Name", service.name)
assertEquals("service" + i + j + "Doc", service.doc)
assertEquals("service" + i + j + "Value2", getHint(service, "key2"))
assertFalse(service.localInterface)
assertFalse(service.remoteInterface)
}
}
}

def getTransformedApp() {
val transformation = dslTransformProvider.get
transformation.transform(model)
Expand Down Expand Up @@ -118,7 +121,8 @@ class DslTransformationTest {
assertEquals(0, references.size)
assertEquals(0, operations.size)
assertEquals(0, traits.size)
assertNull(repository)
assertNotNull(repository)
assertEquals("repository1Name", repository.name)

// TODO: Verify references, attributes, etc
]
Expand All @@ -137,10 +141,23 @@ class DslTransformationTest {
}

def createDslModel() {
val service1 = FACTORY.createDslService
service1.setName("service1Name")
service1.setDoc("service1Doc")
service1.setHint("key1 = service1Value1 , notRemote, notLocal , key2 = service1Value2 , key3")
val service11 = FACTORY.createDslService
service11.name = "service11Name"
service11.doc = "service11Doc"
service11.hint = "key1 = service11Value1 , notRemote, notLocal , key2 = service11Value2 , key3"

val dependency1 = FACTORY.createDslDependency
dependency1.dependency = service11

val service12 = FACTORY.createDslService
service12.name = "service12Name"
service12.doc = "service12Doc"
service12.hint = "key1 = service12Value1 , notRemote, notLocal , key2 = service12Value2 , key3"
service12.dependencies.addAll(dependency1)

val repository1 = FACTORY.createDslRepository
repository1.setName("repository1Name")
repository1.setDoc("repository1Doc")

val entity1 = FACTORY.createDslEntity => [
name = "Entity1"
Expand All @@ -158,6 +175,7 @@ class DslTransformationTest {
gapClass = true
discriminatorValue = "disc1"
inheritanceType = DslInheritanceType::JOINED
repository = repository1
]

val vo1 = FACTORY.createDslValueObject => [
Expand All @@ -174,20 +192,30 @@ class DslTransformationTest {
module1.setName("module1Name")
module1.setDoc("module1Doc")
module1.setHint("key1 = module1Value1 , key2 = module1Value2 , key3")
module1.services.add(service1)
module1.services.addAll(service11, service12)
module1.domainObjects.addAll(entity1, vo1)

val service2 = FACTORY.createDslService
service2.setName("service2Name")
service2.setDoc("service2Doc")
service2.setHint("key1 = service2Value1 , notRemote, notLocal , key2 = service2Value2 , key3")

val service21 = FACTORY.createDslService
service21.name = "service21Name"
service21.doc = "service21Doc"
service21.hint = "key1 = service21Value1 , notRemote, notLocal , key2 = service21Value2 , key3"

val dependency2 = FACTORY.createDslDependency
dependency2.dependency = service11 // from module 1

val service22 = FACTORY.createDslService
service22.name = "service22Name"
service22.doc = "service22Doc"
service22.hint = "key1 = service22Value1 , notRemote, notLocal , key2 = service22Value2 , key3"
service22.dependencies.addAll(dependency2)

val module2 = FACTORY.createDslModule
module2.setBasePackage("com.acme.module2")
module2.setName("module2Name")
module2.setDoc("module2Doc")
module2.setHint("key1 = module2Value1 , key2 = module2Value2 , key3")
module2.services.add(service2)
module2.services.addAll(service21, service22)

val app = FACTORY.createDslApplication
app.setBasePackage("com.acme")
Expand All @@ -198,4 +226,26 @@ class DslTransformationTest {
app
}

@Test
def void testServiceDependency() {
val module = transformedApp.modules.namedElement("module1Name")
val Service service = module.services.findFirst[name == "service12Name"] as Service
assertNotNull(service)
service => [
assertEquals(1, serviceDependencies.size)
assertEquals("service11Name", serviceDependencies.get(0).name)
]
}

@Test
def void testCrossModuleServiceDependency() {
val module = transformedApp.modules.namedElement("module2Name")
val Service service = module.services.findFirst[name == "service22Name"] as Service
assertNotNull(service)
service => [
assertEquals(1, serviceDependencies.size)
assertEquals("service11Name", serviceDependencies.get(0).name)
]
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -326,4 +326,15 @@ class LibraryTransformationTest extends XtextTest {
op.typeName)
}

@Test
def void assertMediaCharacterServiceDependencies() {
val mediaCharacterService = mediaModule.services.namedElement("MediaCharacterService")
assertEquals(1, mediaCharacterService.serviceDependencies.size)
val serviceDependency = mediaCharacterService.serviceDependencies.get(0)
assertEquals("LibraryService", serviceDependency.name)

assertEquals(1, mediaCharacterService.repositoryDependencies.size)
val repositoryDependency = mediaCharacterService.repositoryDependencies.get(0)
assertEquals("LibraryRepository", repositoryDependency.name)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ Application Library {
}

Service MediaCharacterService {
> @LibraryService
> @LibraryRepository
findAll => MediaCharacterRepository.findAll;
}

Expand Down

0 comments on commit 9a847b7

Please sign in to comment.