diff --git a/lib/codegen/fromcto/java/javavisitor.js b/lib/codegen/fromcto/java/javavisitor.js index 952572c..d136047 100644 --- a/lib/codegen/fromcto/java/javavisitor.js +++ b/lib/codegen/fromcto/java/javavisitor.js @@ -106,7 +106,8 @@ class JavaVisitor { * @private */ startClassFile(clazz, parameters) { - const { name: namespace } = ModelUtil.parseNamespace(clazz.getNamespace()); + const { name, version } = ModelUtil.parseNamespace(clazz.getNamespace()); + const namespace = version ? `${name}@${version}` : name; parameters.fileWriter.openFile( namespace.replace(/\./g, '/') + '/' + clazz.getName() + '.java'); parameters.fileWriter.writeLine(0, '// this code is generated and should not be modified'); parameters.fileWriter.writeLine(0, 'package ' + namespace + ';'); @@ -176,10 +177,10 @@ class JavaVisitor { const importedTypes = new Set(); const writeImport = (namespace, typeName) => { - const { name: javaNamespace } = ModelUtil.parseNamespace(namespace); - const { name: classNamespace } = ModelUtil.parseNamespace(classDeclaration.getNamespace()); - const imported = `${javaNamespace}.${typeName}`; - if (!importedTypes.has(imported) && javaNamespace !== classNamespace) { + const { name: javaBaseNamespace } = ModelUtil.parseNamespace(namespace); + const { name: classBaseNamespace } = ModelUtil.parseNamespace(classDeclaration.getNamespace()); + const imported = `${namespace}.${typeName}`; + if (!importedTypes.has(imported) && javaBaseNamespace !== classBaseNamespace) { parameters.fileWriter.writeLine(0, `import ${imported};` ); importedTypes.add(imported); } @@ -189,7 +190,8 @@ class JavaVisitor { if (!this.shouldImportType(classDeclaration.getModelFile(), imported)) { return; } - const { name: namespace } = ModelUtil.parseNamespace(ModelUtil.getNamespace(imported)); + const { name, version } = ModelUtil.parseNamespace(ModelUtil.getNamespace(imported)); + const namespace = version ? `${name}@${version}` : name; const typeName = ModelUtil.getShortName(imported); writeImport(namespace, typeName); }); diff --git a/test/codegen/__snapshots__/codegen.js.snap b/test/codegen/__snapshots__/codegen.js.snap index c5b08e3..cd4ba1d 100644 --- a/test/codegen/__snapshots__/codegen.js.snap +++ b/test/codegen/__snapshots__/codegen.js.snap @@ -1327,15 +1327,15 @@ type ChangeOfAddress { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 1`] = ` { - "key": "concerto/decorator/Decorator.java", + "key": "concerto/decorator@1/0/0/Decorator.java", "value": "// this code is generated and should not be modified -package concerto.decorator; +package concerto.decorator@1.0.0; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1347,15 +1347,15 @@ public abstract class Decorator extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 2`] = ` { - "key": "concerto/decorator/DotNetNamespace.java", + "key": "concerto/decorator@1/0/0/DotNetNamespace.java", "value": "// this code is generated and should not be modified -package concerto.decorator; +package concerto.decorator@1.0.0; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1374,11 +1374,11 @@ public class DotNetNamespace extends Decorator { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 3`] = ` { - "key": "concerto/Concept.java", + "key": "concerto@1/0/0/Concept.java", "value": "// this code is generated and should not be modified -package concerto; +package concerto@1.0.0; -import concerto.decorator.DotNetNamespace; +import concerto.decorator@1.0.0.DotNetNamespace; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1390,11 +1390,11 @@ public abstract class Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 4`] = ` { - "key": "concerto/Asset.java", + "key": "concerto@1/0/0/Asset.java", "value": "// this code is generated and should not be modified -package concerto; +package concerto@1.0.0; -import concerto.decorator.DotNetNamespace; +import concerto.decorator@1.0.0.DotNetNamespace; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1430,11 +1430,11 @@ public abstract class Asset extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 5`] = ` { - "key": "concerto/Participant.java", + "key": "concerto@1/0/0/Participant.java", "value": "// this code is generated and should not be modified -package concerto; +package concerto@1.0.0; -import concerto.decorator.DotNetNamespace; +import concerto.decorator@1.0.0.DotNetNamespace; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1470,11 +1470,11 @@ public abstract class Participant extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 6`] = ` { - "key": "concerto/Transaction.java", + "key": "concerto@1/0/0/Transaction.java", "value": "// this code is generated and should not be modified -package concerto; +package concerto@1.0.0; -import concerto.decorator.DotNetNamespace; +import concerto.decorator@1.0.0.DotNetNamespace; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1493,11 +1493,11 @@ public abstract class Transaction extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 7`] = ` { - "key": "concerto/Event.java", + "key": "concerto@1/0/0/Event.java", "value": "// this code is generated and should not be modified -package concerto; +package concerto@1.0.0; -import concerto.decorator.DotNetNamespace; +import concerto.decorator@1.0.0.DotNetNamespace; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1516,15 +1516,15 @@ public abstract class Event extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 8`] = ` { - "key": "org/acme/hr/base/Category.java", + "key": "org/acme/hr/base@1/0/0/Category.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1536,15 +1536,15 @@ public abstract class Category extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 9`] = ` { - "key": "org/acme/hr/base/GeneralCategory.java", + "key": "org/acme/hr/base@1/0/0/GeneralCategory.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1556,9 +1556,9 @@ public abstract class GeneralCategory extends Category { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 10`] = ` { - "key": "org/acme/hr/base/State.java", + "key": "org/acme/hr/base@1/0/0/State.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) @@ -1580,9 +1580,9 @@ public enum State { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 11`] = ` { - "key": "org/acme/hr/base/TShirtSizeType.java", + "key": "org/acme/hr/base@1/0/0/TShirtSizeType.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) @@ -1601,15 +1601,15 @@ public enum TShirtSizeType { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 12`] = ` { - "key": "org/acme/hr/base/Address.java", + "key": "org/acme/hr/base@1/0/0/Address.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1656,9 +1656,9 @@ public class Address extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 13`] = ` { - "key": "org/acme/hr/base/Level.java", + "key": "org/acme/hr/base@1/0/0/Level.java", "value": "// this code is generated and should not be modified -package org.acme.hr.base; +package org.acme.hr.base@1.0.0; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) @@ -1675,21 +1675,21 @@ public enum Level { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 14`] = ` { - "key": "org/acme/hr/pii.java", + "key": "org/acme/hr@1/0/0/pii.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1715,21 +1715,21 @@ public class pii extends Decorator { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 15`] = ` { - "key": "org/acme/hr/Info.java", + "key": "org/acme/hr@1/0/0/Info.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") @@ -1748,22 +1748,22 @@ public class Info extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 16`] = ` { - "key": "org/acme/hr/Company.java", + "key": "org/acme/hr@1/0/0/Company.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; -import org.acme.hr.base.TShirtSizeType; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; +import org.acme.hr.base@1.0.0.TShirtSizeType; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.annotation.*; @@ -1826,9 +1826,9 @@ public class Company extends Concept { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 17`] = ` { - "key": "org/acme/hr/Department.java", + "key": "org/acme/hr@1/0/0/Department.java", "value": "// this code is generated and should not be modified -package org.acme.hr; +package org.acme.hr@1.0.0; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) @@ -1850,21 +1850,21 @@ public enum Department { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 18`] = ` { - "key": "org/acme/hr/Equipment.java", + "key": "org/acme/hr@1/0/0/Equipment.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"id"}) @@ -1890,9 +1890,9 @@ public abstract class Equipment extends Asset { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 19`] = ` { - "key": "org/acme/hr/LaptopMake.java", + "key": "org/acme/hr@1/0/0/LaptopMake.java", "value": "// this code is generated and should not be modified -package org.acme.hr; +package org.acme.hr@1.0.0; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"$class"}) @@ -1910,21 +1910,21 @@ public enum LaptopMake { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 20`] = ` { - "key": "org/acme/hr/Laptop.java", + "key": "org/acme/hr@1/0/0/Laptop.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"id"}) @@ -1950,21 +1950,21 @@ public class Laptop extends Equipment { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 21`] = ` { - "key": "org/acme/hr/Person.java", + "key": "org/acme/hr@1/0/0/Person.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.annotation.*; @@ -2048,21 +2048,21 @@ public abstract class Person extends Participant { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 22`] = ` { - "key": "org/acme/hr/Employee.java", + "key": "org/acme/hr@1/0/0/Employee.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"id"}) @@ -2137,21 +2137,21 @@ public class Employee extends Person { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 23`] = ` { - "key": "org/acme/hr/Contractor.java", + "key": "org/acme/hr@1/0/0/Contractor.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"id"}) @@ -2184,21 +2184,21 @@ public class Contractor extends Person { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 24`] = ` { - "key": "org/acme/hr/Manager.java", + "key": "org/acme/hr@1/0/0/Manager.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; @JsonIgnoreProperties({"id"}) @@ -2224,21 +2224,21 @@ public class Manager extends Employee { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 25`] = ` { - "key": "org/acme/hr/CompanyEvent.java", + "key": "org/acme/hr@1/0/0/CompanyEvent.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; public class CompanyEvent extends Event { @@ -2249,21 +2249,21 @@ public class CompanyEvent extends Event { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 26`] = ` { - "key": "org/acme/hr/Onboarded.java", + "key": "org/acme/hr@1/0/0/Onboarded.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; public class Onboarded extends CompanyEvent { @@ -2281,21 +2281,21 @@ public class Onboarded extends CompanyEvent { exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 27`] = ` { - "key": "org/acme/hr/ChangeOfAddress.java", + "key": "org/acme/hr@1/0/0/ChangeOfAddress.java", "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.Level; -import org.acme.hr.base.Category; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; +package org.acme.hr@1.0.0; + +import org.acme.hr.base@1.0.0.Address; +import org.acme.hr.base@1.0.0.State; +import org.acme.hr.base@1.0.0.Level; +import org.acme.hr.base@1.0.0.Category; +import org.acme.hr.base@1.0.0.GeneralCategory; +import concerto.decorator@1.0.0.Decorator; +import concerto@1.0.0.Concept; +import concerto@1.0.0.Asset; +import concerto@1.0.0.Transaction; +import concerto@1.0.0.Participant; +import concerto@1.0.0.Event; import com.fasterxml.jackson.annotation.*; public class ChangeOfAddress extends Transaction { diff --git a/test/codegen/fromcto/java/javavisitor.js b/test/codegen/fromcto/java/javavisitor.js index bf370f8..08d7afd 100644 --- a/test/codegen/fromcto/java/javavisitor.js +++ b/test/codegen/fromcto/java/javavisitor.js @@ -202,6 +202,28 @@ describe('JavaVisitor', function () { param.fileWriter.writeLine.getCall(1).args.should.deep.equal([0, 'package org.acme.people;']); param.fileWriter.writeLine.getCall(2).args.should.deep.equal([0, '']); }); + it('should write a java class file header with versioned namespace', () => { + let param = { + fileWriter: mockFileWriter + }; + let mockClass = sinon.createStubInstance(ClassDeclaration); + mockClass.isClassDeclaration.returns(true); + mockClass.getNamespace.returns('org.acme.people@1.0.0'); + mockClass.getModelFile.returns({ + getNamespace: () => { + return 'org.acme.people@1.0.0'; + }, + getName: () => { + return 'Bob'; + } + }); + javaVisit.startClassFile(mockClass, param); + param.fileWriter.openFile.withArgs('org/acme/people@1.0.0/bob.java'); + param.fileWriter.writeLine.callCount.should.deep.equal(3); + param.fileWriter.writeLine.getCall(0).args.should.deep.equal([0, '// this code is generated and should not be modified']); + param.fileWriter.writeLine.getCall(1).args.should.deep.equal([0, 'package org.acme.people@1.0.0;']); + param.fileWriter.writeLine.getCall(2).args.should.deep.equal([0, '']); + }); }); describe('endClassFile', () => {