├── .checkstyle ├── .gitignore ├── .settings └── gradle │ └── org.springsource.ide.eclipse.gradle.core.prefs ├── .travis.yml ├── LICENSE.markdown ├── README.markdown ├── bootstrap ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.jdt.ui.prefs └── src │ ├── main │ └── joist │ │ ├── Bootstrap.java │ │ └── Files.java │ └── templates │ ├── .factorypath │ ├── .gitignore │ ├── .settings │ ├── org.eclipse.jdt.apt.core.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.jdt.ui.prefs │ ├── ProjectNameCycle.launch │ ├── ProjectNameJetty.launch │ ├── content │ ├── WEB-INF │ │ └── web.xml │ └── index.htm │ ├── src │ └── main │ │ ├── LogConfiguration.java │ │ └── projectName │ │ ├── Environment.java │ │ ├── Registry.java │ │ ├── cli │ │ ├── Cli.java │ │ └── JoistCli.java │ │ ├── migrations │ │ ├── m0000.java │ │ └── m0001.java │ │ └── webapp │ │ ├── ProjectNameServlet.java │ │ └── pages │ │ ├── AbstractProjectNamePage.java │ │ ├── IndexPage.java │ │ └── index.htm │ └── tests │ ├── integration │ └── projectName │ │ ├── AbstractProjectNameIntegrationTest.java │ │ └── domain │ │ └── UserIntegrationTest.java │ ├── unit │ └── projectName │ │ ├── AbstractProjectNameUnitTest.java │ │ └── domain │ │ ├── UserTest.java │ │ └── builders │ │ └── UserBuilder.java │ └── web │ └── projectName │ ├── AbstractProjectNameWebTest.java │ └── webapp │ ├── pageObjects │ ├── AbstractProjectNamePageObject.java │ └── IndexPageObject.java │ └── pages │ └── IndexPageTest.java ├── build.gradle ├── cleanup.xml ├── docs ├── .gitignore ├── CNAME ├── _layouts │ └── default.html ├── aliases.md ├── backPointers.md ├── build.xml ├── codeGeneration.md ├── css │ └── SyntaxHighlighter.css ├── domainObjects.md ├── eagerLoading.md ├── eclipseTips.md ├── gettingStarted.md ├── highlights.md ├── index.md ├── js │ ├── clipboard.swf │ ├── flowplayer-3.2.8.min.js │ ├── shBrushJava.js │ ├── shBrushXml.js │ └── shCore.js ├── migrations.md ├── patterns.md ├── performance.md ├── shims.md ├── typeSafeChangedProperties.md ├── typeSafeQueries.md └── validationRules.md ├── domain-testing ├── .settings │ ├── gradle │ │ └── org.springsource.ide.eclipse.gradle.core.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.jdt.ui.prefs ├── build.gradle └── src │ └── main │ └── java │ └── joist │ └── domain │ ├── AbstractDomainObjectsTest.java │ ├── FlushTestDatabase.java │ └── ValidationAssert.java ├── domain ├── .checkstyle ├── .settings │ ├── gradle │ │ └── org.springsource.ide.eclipse.gradle.core.prefs │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.moreunit.prefs ├── build.gradle └── src │ ├── main │ └── java │ │ └── joist │ │ └── domain │ │ ├── AbstractChanged.java │ │ ├── AbstractDomainObject.java │ │ ├── AbstractQueries.java │ │ ├── Changed.java │ │ ├── Code.java │ │ ├── DomainObject.java │ │ ├── Shim.java │ │ ├── builders │ │ ├── AbstractBuilder.java │ │ └── DefaultsContext.java │ │ ├── exceptions │ │ ├── DisconnectedException.java │ │ ├── DomainObjectsException.java │ │ ├── NotFoundException.java │ │ ├── OpLockException.java │ │ └── TooManyException.java │ │ ├── orm │ │ ├── AliasRegistry.java │ │ ├── Db.java │ │ ├── EagerCache.java │ │ ├── EagerLoading.java │ │ ├── ForeignKeyCodeHolder.java │ │ ├── ForeignKeyHolder.java │ │ ├── ForeignKeyListHolder.java │ │ ├── IdentityMap.java │ │ ├── NamedUpdater.java │ │ ├── Repository.java │ │ ├── UnitTesting.java │ │ ├── Updater.java │ │ ├── impl │ │ │ ├── InstanceDeleter.java │ │ │ ├── InstanceInserter.java │ │ │ ├── InstanceUpdater.java │ │ │ ├── SequenceIdAssigner.java │ │ │ ├── SortInstancesMySQL.java │ │ │ └── SortInstancesPg.java │ │ ├── mappers │ │ │ ├── DataTransferObjectMapper.java │ │ │ ├── DomainObjectMapper.java │ │ │ ├── IdsMapper.java │ │ │ └── ValuesMapper.java │ │ └── queries │ │ │ ├── Alias.java │ │ │ ├── Clauses.java │ │ │ ├── Delete.java │ │ │ ├── Insert.java │ │ │ ├── JoinClause.java │ │ │ ├── Order.java │ │ │ ├── PagedList.java │ │ │ ├── Select.java │ │ │ ├── SelectItem.java │ │ │ ├── SetItem.java │ │ │ ├── Update.java │ │ │ ├── Where.java │ │ │ └── columns │ │ │ ├── Aggregate.java │ │ │ ├── AliasColumn.java │ │ │ ├── BooleanAliasColumn.java │ │ │ ├── ByteArrayAliasColumn.java │ │ │ ├── CalendarDateAliasColumn.java │ │ │ ├── CodeAliasColumn.java │ │ │ ├── ColumnExpression.java │ │ │ ├── DateAliasColumn.java │ │ │ ├── ForeignKeyAliasColumn.java │ │ │ ├── IdAliasColumn.java │ │ │ ├── IntAliasColumn.java │ │ │ ├── LongAliasColumn.java │ │ │ ├── MoneyAliasColumn.java │ │ │ ├── ShortAliasColumn.java │ │ │ ├── StringAliasColumn.java │ │ │ └── TimePointAliasColumn.java │ │ ├── uow │ │ ├── Block.java │ │ ├── BlockWithReturn.java │ │ ├── BlockWithReturnAndSafety.java │ │ ├── BlockWithSafety.java │ │ ├── Snapshot.java │ │ ├── UnitOfWork.java │ │ └── UoW.java │ │ ├── util │ │ ├── Codes.java │ │ ├── ConnectionSettings.java │ │ ├── ListProxy.java │ │ ├── converters │ │ │ ├── CodeToStringConverter.java │ │ │ ├── CodeToTextStringConverter.java │ │ │ ├── DomainObjectToStringConverter.java │ │ │ ├── DomainObjectToTextStringConverter.java │ │ │ └── TextString.java │ │ └── pools │ │ │ ├── C3p0DataSourceFactory.java │ │ │ ├── DataSourceFactory.java │ │ │ └── HikariDataSourceFactory.java │ │ └── validation │ │ ├── ValidationErrors.java │ │ ├── ValidationException.java │ │ ├── Validator.java │ │ ├── errors │ │ ├── GeneralError.java │ │ ├── ObjectError.java │ │ ├── PropertyError.java │ │ └── ValidationError.java │ │ └── rules │ │ ├── MaxLength.java │ │ ├── MustBeAlphanumeric.java │ │ ├── MustBeNumeric.java │ │ ├── NotEmpty.java │ │ ├── NotNull.java │ │ ├── RegexRule.java │ │ └── Rule.java │ └── test │ └── java │ └── joist │ └── domain │ ├── orm │ ├── DummyDomainObject.java │ ├── ForeignKeyHolderTest.java │ ├── ForeignKeyListHolderTest.java │ ├── IdentityMapTest.java │ └── queries │ │ ├── WhereTest.java │ │ └── columns │ │ └── MoneyAliasColumnTest.java │ ├── uow │ └── UoWTest.java │ └── validation │ └── ValidatorTest.java ├── features ├── .checkstyle ├── .settings │ ├── gradle │ │ └── org.springsource.ide.eclipse.gradle.core.prefs │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.apt.core.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.launching.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.moreunit.prefs ├── FeaturesBackup.launch ├── FeaturesCodegen.launch ├── FeaturesCycle.launch ├── FeaturesPermissionFixer.launch ├── FeaturesTests.launch ├── build.gradle └── src │ ├── codegen │ └── java │ │ └── features │ │ └── domain │ │ ├── Aliases.java │ │ ├── ChildAlias.java │ │ ├── ChildCodegen.java │ │ ├── ChildFAlias.java │ │ ├── ChildFCodegen.java │ │ ├── ChildGAlias.java │ │ ├── ChildGCodegen.java │ │ ├── ChildHAlias.java │ │ ├── ChildHCodegen.java │ │ ├── ChildIAAlias.java │ │ ├── ChildIACodegen.java │ │ ├── ChildIBAlias.java │ │ ├── ChildIBCodegen.java │ │ ├── CodeAColor.java │ │ ├── CodeADomainObjectAlias.java │ │ ├── CodeADomainObjectCodegen.java │ │ ├── CodeASize.java │ │ ├── GrandChildAlias.java │ │ ├── GrandChildCodegen.java │ │ ├── HistoryEntryAlias.java │ │ ├── HistoryEntryCodegen.java │ │ ├── InheritanceABaseAlias.java │ │ ├── InheritanceABaseCodegen.java │ │ ├── InheritanceAOwnerAlias.java │ │ ├── InheritanceAOwnerCodegen.java │ │ ├── InheritanceASubOneAlias.java │ │ ├── InheritanceASubOneChildAlias.java │ │ ├── InheritanceASubOneChildCodegen.java │ │ ├── InheritanceASubOneCodegen.java │ │ ├── InheritanceASubTwoAlias.java │ │ ├── InheritanceASubTwoCodegen.java │ │ ├── InheritanceAThingAlias.java │ │ ├── InheritanceAThingCodegen.java │ │ ├── InheritanceBBottomAlias.java │ │ ├── InheritanceBBottomCodegen.java │ │ ├── InheritanceBMiddleAlias.java │ │ ├── InheritanceBMiddleCodegen.java │ │ ├── InheritanceBRootAlias.java │ │ ├── InheritanceBRootChildAlias.java │ │ ├── InheritanceBRootChildCodegen.java │ │ ├── InheritanceBRootCodegen.java │ │ ├── InheritanceCAlias.java │ │ ├── InheritanceCCodegen.java │ │ ├── InheritanceCFoo1Alias.java │ │ ├── InheritanceCFoo1Codegen.java │ │ ├── InheritanceCFoo2Alias.java │ │ ├── InheritanceCFoo2Codegen.java │ │ ├── ManyToManyABarAlias.java │ │ ├── ManyToManyABarCodegen.java │ │ ├── ManyToManyAFooAlias.java │ │ ├── ManyToManyAFooCodegen.java │ │ ├── ManyToManyAFooToBarAlias.java │ │ ├── ManyToManyAFooToBarCodegen.java │ │ ├── ManyToManyBBarAlias.java │ │ ├── ManyToManyBBarCodegen.java │ │ ├── ManyToManyBFooAlias.java │ │ ├── ManyToManyBFooCodegen.java │ │ ├── ManyToManyBFooToBarAlias.java │ │ ├── ManyToManyBFooToBarCodegen.java │ │ ├── OneToOneABarAlias.java │ │ ├── OneToOneABarCodegen.java │ │ ├── OneToOneAFooAlias.java │ │ ├── OneToOneAFooCodegen.java │ │ ├── OneToOneBBarAlias.java │ │ ├── OneToOneBBarCodegen.java │ │ ├── OneToOneBFooAlias.java │ │ ├── OneToOneBFooCodegen.java │ │ ├── ParentAlias.java │ │ ├── ParentBChildBarAlias.java │ │ ├── ParentBChildBarCodegen.java │ │ ├── ParentBChildFooAlias.java │ │ ├── ParentBChildFooCodegen.java │ │ ├── ParentBChildZazAlias.java │ │ ├── ParentBChildZazCodegen.java │ │ ├── ParentBParentAlias.java │ │ ├── ParentBParentCodegen.java │ │ ├── ParentCBarAlias.java │ │ ├── ParentCBarCodegen.java │ │ ├── ParentCFooAlias.java │ │ ├── ParentCFooCodegen.java │ │ ├── ParentCodegen.java │ │ ├── ParentDAlias.java │ │ ├── ParentDChildAAlias.java │ │ ├── ParentDChildACodegen.java │ │ ├── ParentDChildBAlias.java │ │ ├── ParentDChildBCodegen.java │ │ ├── ParentDChildCAlias.java │ │ ├── ParentDChildCCodegen.java │ │ ├── ParentDCodegen.java │ │ ├── ParentDToChildCAlias.java │ │ ├── ParentDToChildCCodegen.java │ │ ├── ParentEAlias.java │ │ ├── ParentECodegen.java │ │ ├── ParentFAlias.java │ │ ├── ParentFCodegen.java │ │ ├── ParentGAlias.java │ │ ├── ParentGCodegen.java │ │ ├── ParentHAlias.java │ │ ├── ParentHCodegen.java │ │ ├── ParentIAlias.java │ │ ├── ParentICodegen.java │ │ ├── PrimitivesAlias.java │ │ ├── PrimitivesBAlias.java │ │ ├── PrimitivesBCodegen.java │ │ ├── PrimitivesCAlias.java │ │ ├── PrimitivesCCodegen.java │ │ ├── PrimitivesCodegen.java │ │ ├── SchemaHash.java │ │ ├── UserTypesAFooAlias.java │ │ ├── UserTypesAFooCodegen.java │ │ ├── ValidationAFooAlias.java │ │ ├── ValidationAFooCodegen.java │ │ ├── ValuesAAlias.java │ │ ├── ValuesACodegen.java │ │ ├── ValuesBAlias.java │ │ ├── ValuesBCodegen.java │ │ ├── builders │ │ ├── Builders.java │ │ ├── ChildBuilderCodegen.java │ │ ├── ChildFBuilderCodegen.java │ │ ├── ChildGBuilderCodegen.java │ │ ├── ChildHBuilderCodegen.java │ │ ├── ChildIABuilderCodegen.java │ │ ├── ChildIBBuilderCodegen.java │ │ ├── CodeADomainObjectBuilderCodegen.java │ │ ├── GrandChildBuilderCodegen.java │ │ ├── HistoryEntryBuilderCodegen.java │ │ ├── InheritanceABaseBuilderCodegen.java │ │ ├── InheritanceAOwnerBuilderCodegen.java │ │ ├── InheritanceASubOneBuilderCodegen.java │ │ ├── InheritanceASubOneChildBuilderCodegen.java │ │ ├── InheritanceASubTwoBuilderCodegen.java │ │ ├── InheritanceAThingBuilderCodegen.java │ │ ├── InheritanceBBottomBuilderCodegen.java │ │ ├── InheritanceBMiddleBuilderCodegen.java │ │ ├── InheritanceBRootBuilderCodegen.java │ │ ├── InheritanceBRootChildBuilderCodegen.java │ │ ├── InheritanceCBuilderCodegen.java │ │ ├── InheritanceCFoo1BuilderCodegen.java │ │ ├── InheritanceCFoo2BuilderCodegen.java │ │ ├── ManyToManyABarBuilderCodegen.java │ │ ├── ManyToManyAFooBuilderCodegen.java │ │ ├── ManyToManyAFooToBarBuilderCodegen.java │ │ ├── ManyToManyBBarBuilderCodegen.java │ │ ├── ManyToManyBFooBuilderCodegen.java │ │ ├── ManyToManyBFooToBarBuilderCodegen.java │ │ ├── OneToOneABarBuilderCodegen.java │ │ ├── OneToOneAFooBuilderCodegen.java │ │ ├── OneToOneBBarBuilderCodegen.java │ │ ├── OneToOneBFooBuilderCodegen.java │ │ ├── ParentBChildBarBuilderCodegen.java │ │ ├── ParentBChildFooBuilderCodegen.java │ │ ├── ParentBChildZazBuilderCodegen.java │ │ ├── ParentBParentBuilderCodegen.java │ │ ├── ParentBuilderCodegen.java │ │ ├── ParentCBarBuilderCodegen.java │ │ ├── ParentCFooBuilderCodegen.java │ │ ├── ParentDBuilderCodegen.java │ │ ├── ParentDChildABuilderCodegen.java │ │ ├── ParentDChildBBuilderCodegen.java │ │ ├── ParentDChildCBuilderCodegen.java │ │ ├── ParentDToChildCBuilderCodegen.java │ │ ├── ParentEBuilderCodegen.java │ │ ├── ParentFBuilderCodegen.java │ │ ├── ParentGBuilderCodegen.java │ │ ├── ParentHBuilderCodegen.java │ │ ├── ParentIBuilderCodegen.java │ │ ├── PrimitivesBBuilderCodegen.java │ │ ├── PrimitivesBuilderCodegen.java │ │ ├── PrimitivesCBuilderCodegen.java │ │ ├── UserTypesAFooBuilderCodegen.java │ │ ├── ValidationAFooBuilderCodegen.java │ │ ├── ValuesABuilderCodegen.java │ │ └── ValuesBBuilderCodegen.java │ │ └── queries │ │ ├── ChildFQueriesCodegen.java │ │ ├── ChildGQueriesCodegen.java │ │ ├── ChildHQueriesCodegen.java │ │ ├── ChildIAQueriesCodegen.java │ │ ├── ChildIBQueriesCodegen.java │ │ ├── ChildQueriesCodegen.java │ │ ├── CodeADomainObjectQueriesCodegen.java │ │ ├── GrandChildQueriesCodegen.java │ │ ├── HistoryEntryQueriesCodegen.java │ │ ├── InheritanceABaseQueriesCodegen.java │ │ ├── InheritanceAOwnerQueriesCodegen.java │ │ ├── InheritanceASubOneChildQueriesCodegen.java │ │ ├── InheritanceASubOneQueriesCodegen.java │ │ ├── InheritanceASubTwoQueriesCodegen.java │ │ ├── InheritanceAThingQueriesCodegen.java │ │ ├── InheritanceBBottomQueriesCodegen.java │ │ ├── InheritanceBMiddleQueriesCodegen.java │ │ ├── InheritanceBRootChildQueriesCodegen.java │ │ ├── InheritanceBRootQueriesCodegen.java │ │ ├── InheritanceCFoo1QueriesCodegen.java │ │ ├── InheritanceCFoo2QueriesCodegen.java │ │ ├── InheritanceCQueriesCodegen.java │ │ ├── ManyToManyABarQueriesCodegen.java │ │ ├── ManyToManyAFooQueriesCodegen.java │ │ ├── ManyToManyAFooToBarQueriesCodegen.java │ │ ├── ManyToManyBBarQueriesCodegen.java │ │ ├── ManyToManyBFooQueriesCodegen.java │ │ ├── ManyToManyBFooToBarQueriesCodegen.java │ │ ├── OneToOneABarQueriesCodegen.java │ │ ├── OneToOneAFooQueriesCodegen.java │ │ ├── OneToOneBBarQueriesCodegen.java │ │ ├── OneToOneBFooQueriesCodegen.java │ │ ├── ParentBChildBarQueriesCodegen.java │ │ ├── ParentBChildFooQueriesCodegen.java │ │ ├── ParentBChildZazQueriesCodegen.java │ │ ├── ParentBParentQueriesCodegen.java │ │ ├── ParentCBarQueriesCodegen.java │ │ ├── ParentCFooQueriesCodegen.java │ │ ├── ParentDChildAQueriesCodegen.java │ │ ├── ParentDChildBQueriesCodegen.java │ │ ├── ParentDChildCQueriesCodegen.java │ │ ├── ParentDQueriesCodegen.java │ │ ├── ParentDToChildCQueriesCodegen.java │ │ ├── ParentEQueriesCodegen.java │ │ ├── ParentFQueriesCodegen.java │ │ ├── ParentGQueriesCodegen.java │ │ ├── ParentHQueriesCodegen.java │ │ ├── ParentIQueriesCodegen.java │ │ ├── ParentQueriesCodegen.java │ │ ├── PrimitivesBQueriesCodegen.java │ │ ├── PrimitivesCQueriesCodegen.java │ │ ├── PrimitivesQueriesCodegen.java │ │ ├── UserTypesAFooQueriesCodegen.java │ │ ├── ValidationAFooQueriesCodegen.java │ │ ├── ValuesAQueriesCodegen.java │ │ └── ValuesBQueriesCodegen.java │ ├── main │ ├── java │ │ └── features │ │ │ ├── Registry.java │ │ │ └── domain │ │ │ ├── Child.java │ │ │ ├── ChildF.java │ │ │ ├── ChildG.java │ │ │ ├── ChildH.java │ │ │ ├── ChildIA.java │ │ │ ├── ChildIB.java │ │ │ ├── CodeADomainObject.java │ │ │ ├── GrandChild.java │ │ │ ├── HistoryEntry.java │ │ │ ├── InheritanceABase.java │ │ │ ├── InheritanceAOwner.java │ │ │ ├── InheritanceASubOne.java │ │ │ ├── InheritanceASubOneChild.java │ │ │ ├── InheritanceASubTwo.java │ │ │ ├── InheritanceAThing.java │ │ │ ├── InheritanceBBottom.java │ │ │ ├── InheritanceBMiddle.java │ │ │ ├── InheritanceBRoot.java │ │ │ ├── InheritanceBRootChild.java │ │ │ ├── InheritanceC.java │ │ │ ├── InheritanceCFoo1.java │ │ │ ├── InheritanceCFoo2.java │ │ │ ├── ManyToManyABar.java │ │ │ ├── ManyToManyAFoo.java │ │ │ ├── ManyToManyAFooToBar.java │ │ │ ├── ManyToManyBBar.java │ │ │ ├── ManyToManyBFoo.java │ │ │ ├── ManyToManyBFooToBar.java │ │ │ ├── OneToOneABar.java │ │ │ ├── OneToOneAFoo.java │ │ │ ├── OneToOneBBar.java │ │ │ ├── OneToOneBFoo.java │ │ │ ├── Parent.java │ │ │ ├── ParentBChildBar.java │ │ │ ├── ParentBChildFoo.java │ │ │ ├── ParentBChildZaz.java │ │ │ ├── ParentBParent.java │ │ │ ├── ParentCBar.java │ │ │ ├── ParentCFoo.java │ │ │ ├── ParentD.java │ │ │ ├── ParentDChildA.java │ │ │ ├── ParentDChildB.java │ │ │ ├── ParentDChildC.java │ │ │ ├── ParentDToChildC.java │ │ │ ├── ParentE.java │ │ │ ├── ParentF.java │ │ │ ├── ParentG.java │ │ │ ├── ParentH.java │ │ │ ├── ParentI.java │ │ │ ├── Primitives.java │ │ │ ├── PrimitivesB.java │ │ │ ├── PrimitivesC.java │ │ │ ├── UserTypesAFoo.java │ │ │ ├── ValidationAFoo.java │ │ │ ├── ValuesA.java │ │ │ ├── ValuesB.java │ │ │ ├── builders │ │ │ ├── ChildBuilder.java │ │ │ ├── ChildFBuilder.java │ │ │ ├── ChildGBuilder.java │ │ │ ├── ChildHBuilder.java │ │ │ ├── ChildIABuilder.java │ │ │ ├── ChildIBBuilder.java │ │ │ ├── CodeADomainObjectBuilder.java │ │ │ ├── GrandChildBuilder.java │ │ │ ├── HistoryEntryBuilder.java │ │ │ ├── InheritanceABaseBuilder.java │ │ │ ├── InheritanceAOwnerBuilder.java │ │ │ ├── InheritanceASubOneBuilder.java │ │ │ ├── InheritanceASubOneChildBuilder.java │ │ │ ├── InheritanceASubTwoBuilder.java │ │ │ ├── InheritanceAThingBuilder.java │ │ │ ├── InheritanceBBottomBuilder.java │ │ │ ├── InheritanceBMiddleBuilder.java │ │ │ ├── InheritanceBRootBuilder.java │ │ │ ├── InheritanceBRootChildBuilder.java │ │ │ ├── InheritanceCBuilder.java │ │ │ ├── InheritanceCFoo1Builder.java │ │ │ ├── InheritanceCFoo2Builder.java │ │ │ ├── ManyToManyABarBuilder.java │ │ │ ├── ManyToManyAFooBuilder.java │ │ │ ├── ManyToManyAFooToBarBuilder.java │ │ │ ├── ManyToManyBBarBuilder.java │ │ │ ├── ManyToManyBFooBuilder.java │ │ │ ├── ManyToManyBFooToBarBuilder.java │ │ │ ├── OneToOneABarBuilder.java │ │ │ ├── OneToOneAFooBuilder.java │ │ │ ├── OneToOneBBarBuilder.java │ │ │ ├── OneToOneBFooBuilder.java │ │ │ ├── ParentBChildBarBuilder.java │ │ │ ├── ParentBChildFooBuilder.java │ │ │ ├── ParentBChildZazBuilder.java │ │ │ ├── ParentBParentBuilder.java │ │ │ ├── ParentBuilder.java │ │ │ ├── ParentCBarBuilder.java │ │ │ ├── ParentCFooBuilder.java │ │ │ ├── ParentDBuilder.java │ │ │ ├── ParentDChildABuilder.java │ │ │ ├── ParentDChildBBuilder.java │ │ │ ├── ParentDChildCBuilder.java │ │ │ ├── ParentDToChildCBuilder.java │ │ │ ├── ParentEBuilder.java │ │ │ ├── ParentFBuilder.java │ │ │ ├── ParentGBuilder.java │ │ │ ├── ParentHBuilder.java │ │ │ ├── ParentIBuilder.java │ │ │ ├── PrimitivesBBuilder.java │ │ │ ├── PrimitivesBuilder.java │ │ │ ├── PrimitivesCBuilder.java │ │ │ ├── UserTypesAFooBuilder.java │ │ │ ├── ValidationAFooBuilder.java │ │ │ ├── ValuesABuilder.java │ │ │ └── ValuesBBuilder.java │ │ │ └── queries │ │ │ ├── ChildFQueries.java │ │ │ ├── ChildGQueries.java │ │ │ ├── ChildHQueries.java │ │ │ ├── ChildIAQueries.java │ │ │ ├── ChildIBQueries.java │ │ │ ├── ChildQueries.java │ │ │ ├── CodeADomainObjectQueries.java │ │ │ ├── GrandChildQueries.java │ │ │ ├── HistoryEntryQueries.java │ │ │ ├── InheritanceABaseQueries.java │ │ │ ├── InheritanceAOwnerQueries.java │ │ │ ├── InheritanceASubOneChildQueries.java │ │ │ ├── InheritanceASubOneQueries.java │ │ │ ├── InheritanceASubTwoQueries.java │ │ │ ├── InheritanceAThingQueries.java │ │ │ ├── InheritanceBBottomQueries.java │ │ │ ├── InheritanceBMiddleQueries.java │ │ │ ├── InheritanceBRootChildQueries.java │ │ │ ├── InheritanceBRootQueries.java │ │ │ ├── InheritanceCFoo1Queries.java │ │ │ ├── InheritanceCFoo2Queries.java │ │ │ ├── InheritanceCQueries.java │ │ │ ├── ManyToManyABarQueries.java │ │ │ ├── ManyToManyAFooQueries.java │ │ │ ├── ManyToManyAFooToBarQueries.java │ │ │ ├── ManyToManyBBarQueries.java │ │ │ ├── ManyToManyBFooQueries.java │ │ │ ├── ManyToManyBFooToBarQueries.java │ │ │ ├── OneToOneABarQueries.java │ │ │ ├── OneToOneAFooQueries.java │ │ │ ├── OneToOneBBarQueries.java │ │ │ ├── OneToOneBFooQueries.java │ │ │ ├── ParentBChildBarQueries.java │ │ │ ├── ParentBChildFooQueries.java │ │ │ ├── ParentBChildZazQueries.java │ │ │ ├── ParentBParentQueries.java │ │ │ ├── ParentCBarQueries.java │ │ │ ├── ParentCFooQueries.java │ │ │ ├── ParentDChildAQueries.java │ │ │ ├── ParentDChildBQueries.java │ │ │ ├── ParentDChildCQueries.java │ │ │ ├── ParentDQueries.java │ │ │ ├── ParentDToChildCQueries.java │ │ │ ├── ParentEQueries.java │ │ │ ├── ParentFQueries.java │ │ │ ├── ParentGQueries.java │ │ │ ├── ParentHQueries.java │ │ │ ├── ParentIQueries.java │ │ │ ├── ParentQueries.java │ │ │ ├── PrimitivesBQueries.java │ │ │ ├── PrimitivesCQueries.java │ │ │ ├── PrimitivesQueries.java │ │ │ ├── UserTypesAFooQueries.java │ │ │ ├── ValidationAFooQueries.java │ │ │ ├── ValuesAQueries.java │ │ │ └── ValuesBQueries.java │ └── resources │ │ └── log4j.properties │ ├── migrations │ ├── java │ │ └── features │ │ │ ├── cli │ │ │ ├── Cli.java │ │ │ └── JoistCli.java │ │ │ └── migrations │ │ │ ├── m0000.java │ │ │ ├── m0001.java │ │ │ ├── m0002.java │ │ │ ├── m0003.java │ │ │ ├── m0004.java │ │ │ ├── m0005.java │ │ │ ├── m0006.java │ │ │ ├── m0007.java │ │ │ ├── m0008.java │ │ │ ├── m0009.java │ │ │ ├── m0010.java │ │ │ ├── m0011.java │ │ │ ├── m0012.java │ │ │ ├── m0013.java │ │ │ ├── m0014.java │ │ │ ├── m0015.java │ │ │ ├── m0016.java │ │ │ ├── m0017.java │ │ │ ├── m0018.java │ │ │ ├── m0019.java │ │ │ ├── m0020.java │ │ │ ├── m0021.java │ │ │ ├── m0022.java │ │ │ ├── m0023.java │ │ │ ├── m0024.java │ │ │ ├── m0025.java │ │ │ ├── m0026.java │ │ │ ├── m0027.java │ │ │ ├── m0028.java │ │ │ ├── m0029.java │ │ │ └── m0030.java │ └── resources │ │ └── log4j.properties │ └── test │ └── java │ ├── features │ ├── domain │ │ ├── AbstractFeaturesTest.java │ │ ├── AliasRegistryTest.java │ │ ├── BatchingTest.java │ │ ├── BetweenTest.java │ │ ├── BuildersTest.java │ │ ├── ChangedPropertiesTest.java │ │ ├── ChildCollectionSkippedTest.java │ │ ├── ChildEagerLoadingTest.java │ │ ├── ChildLazyListTest.java │ │ ├── ChildTest.java │ │ ├── CodeTests.java │ │ ├── DateTimeTest.java │ │ ├── DefaultValuesTest.java │ │ ├── DeleteTest.java │ │ ├── DisconnectedTest.java │ │ ├── DomainObjectTest.java │ │ ├── DropNotNullTest.java │ │ ├── HistoryEntryTest.java │ │ ├── IdentityMapIntegrityTest.java │ │ ├── InheritanceAQueryTest.java │ │ ├── InheritanceATest.java │ │ ├── InheritanceBTest.java │ │ ├── InheritanceCTest.java │ │ ├── JdbcTest.java │ │ ├── ListProxyTest.java │ │ ├── ManyToManyATest.java │ │ ├── ManyToManyBTest.java │ │ ├── OneToOneATest.java │ │ ├── OpLockATest.java │ │ ├── OuterJoinFetchingTest.java │ │ ├── OwnerIsMeTest.java │ │ ├── OwnerIsThemTest.java │ │ ├── PagingATest.java │ │ ├── ParentBTest.java │ │ ├── ParentCTest.java │ │ ├── ParentETest.java │ │ ├── ParentHTest.java │ │ ├── ParentTest.java │ │ ├── ParentsLotsTest.java │ │ ├── PrimitivesAggregatesTest.java │ │ ├── PrimitivesBAggregatesTest.java │ │ ├── PrimitivesBTest.java │ │ ├── PrimitivesCTest.java │ │ ├── PrimitivesRegexRuleTest.java │ │ ├── PrimitivesSelectUniqueTest.java │ │ ├── PrimitivesTest.java │ │ ├── PrimitivesUpdateTest.java │ │ ├── ReadTest.java │ │ ├── RollbackTest.java │ │ ├── SelectTest.java │ │ ├── SnapshotTest.java │ │ ├── UnitTestingSupportTest.java │ │ ├── UoWTest.java │ │ ├── UserTypeATest.java │ │ ├── ValidationATest.java │ │ ├── WithinTest.java │ │ └── queries │ │ │ ├── AggregateTest.java │ │ │ ├── AliasColumnTest.java │ │ │ ├── ChildQueryLimitAndOffsetTest.java │ │ │ ├── ChildQueryTest.java │ │ │ ├── DomainObjectGroupByTest.java │ │ │ ├── PrimitivesGroupByTest.java │ │ │ └── PrimitivesQueryTest.java │ └── migrations │ │ └── SchemaCheckTest.java │ └── log4j-test.properties ├── formatter.xml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── migrations ├── .settings │ ├── gradle │ │ └── org.springsource.ide.eclipse.gradle.core.prefs │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.moreunit.prefs ├── build.gradle └── src │ └── main │ ├── java │ └── joist │ │ ├── AbstractJoistCli.java │ │ ├── codegen │ │ ├── Codegen.java │ │ ├── Config.java │ │ ├── InformationSchemaColumn.java │ │ ├── InformationSchemaWrapper.java │ │ ├── MarkedList.java │ │ ├── Schema.java │ │ ├── dtos │ │ │ ├── CodeEntity.java │ │ │ ├── CodeValue.java │ │ │ ├── Entity.java │ │ │ ├── ManyToManyProperty.java │ │ │ ├── ManyToOneProperty.java │ │ │ ├── OneToManyProperty.java │ │ │ └── PrimitiveProperty.java │ │ └── passes │ │ │ ├── FindCodeValuesPass.java │ │ │ ├── FindForeignKeysPass.java │ │ │ ├── FindManyToManyPropertiesPass.java │ │ │ ├── FindPrimitivePropertiesPass.java │ │ │ ├── FindTablesPass.java │ │ │ ├── GenerateAliasesPass.java │ │ │ ├── GenerateBuilderClassIfNotExistsPass.java │ │ │ ├── GenerateBuilderCodegenPass.java │ │ │ ├── GenerateBuildersClassPass.java │ │ │ ├── GenerateCodesPass.java │ │ │ ├── GenerateDomainClassIfNotExistsPass.java │ │ │ ├── GenerateDomainCodegenPass.java │ │ │ ├── GenerateFlushFunction.java │ │ │ ├── GenerateQueriesCodegenPass.java │ │ │ ├── GenerateQueriesIfNotExistsPass.java │ │ │ ├── GenerateSchemaHash.java │ │ │ ├── MySqlHistoryTriggersPass.java │ │ │ ├── OutputPass.java │ │ │ └── Pass.java │ │ └── migrations │ │ ├── AbstractMigration.java │ │ ├── DatabaseBootstrapper.java │ │ ├── Migrater.java │ │ ├── Migration.java │ │ ├── MigrationKeywords.java │ │ ├── MigrationLoader.java │ │ ├── PermissionFixer.java │ │ ├── SchemaCheck.java │ │ ├── SchemaVersionTable.java │ │ ├── columns │ │ ├── AbstractColumn.java │ │ ├── BigIntColumn.java │ │ ├── BooleanColumn.java │ │ ├── ByteaColumn.java │ │ ├── CharColumn.java │ │ ├── Column.java │ │ ├── ConstraintNamer.java │ │ ├── DateColumn.java │ │ ├── DatetimeColumn.java │ │ ├── ForeignKeyColumn.java │ │ ├── HackyConstraintNamer.java │ │ ├── IntColumn.java │ │ ├── MoneyColumn.java │ │ ├── PrimaryKeyColumn.java │ │ ├── SmallIntColumn.java │ │ ├── TextColumn.java │ │ └── VarcharColumn.java │ │ ├── commands │ │ └── CreateTable.java │ │ └── fill │ │ ├── ConstantFillInStrategy.java │ │ ├── FillInStrategy.java │ │ └── ResultSetFillInStrategy.java │ └── test │ └── joist │ └── migrations │ └── columns │ ├── ForeignKeyColumnTest.java │ ├── PrimaryKeyColumnTest.java │ └── StubConstraintNamer.java ├── perf ├── .settings │ ├── org.apache.ivyde.eclipse.prefs │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.core.runtime.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.jdt.ui.prefs ├── japex.xml └── src │ └── main │ └── java │ ├── joist │ └── perf │ │ ├── HibernateDriver.java │ │ ├── JoistDriver.java │ │ ├── hibernate │ │ ├── Child.java │ │ ├── GrandChild.java │ │ ├── HibernatePrefetch.java │ │ ├── MyConnectionProvider.java │ │ ├── Parent.java │ │ └── objects.hbm.xml │ │ └── joist │ │ └── JoistPrefetch.java │ └── log4j.properties ├── settings.gradle ├── starter ├── .gitignore ├── .settings │ ├── gradle │ │ └── org.springsource.ide.eclipse.gradle.core.prefs │ ├── org.eclipse.jdt.core.prefs │ └── org.eclipse.jdt.ui.prefs ├── build.gradle ├── src │ ├── main │ │ ├── java │ │ │ └── starter │ │ │ │ └── domain │ │ │ │ ├── Employee.java │ │ │ │ ├── HistoryEntry.java │ │ │ │ ├── builders │ │ │ │ ├── EmployeeBuilder.java │ │ │ │ └── HistoryEntryBuilder.java │ │ │ │ └── queries │ │ │ │ ├── EmployeeQueries.java │ │ │ │ └── HistoryEntryQueries.java │ │ └── resources │ │ │ └── log4j.properties │ ├── migrations │ │ ├── java │ │ │ └── starter │ │ │ │ ├── cli │ │ │ │ ├── Cli.java │ │ │ │ └── JoistCli.java │ │ │ │ └── migrations │ │ │ │ ├── m0000.java │ │ │ │ └── m0001.java │ │ └── resources │ │ │ └── log4j.properties │ └── test │ │ └── java │ │ └── starter │ │ └── domain │ │ └── EmployeeTest.java └── starter-cycle.launch └── util ├── .settings ├── gradle │ └── org.springsource.ide.eclipse.gradle.core.prefs ├── org.eclipse.core.resources.prefs ├── org.eclipse.core.runtime.prefs ├── org.eclipse.jdt.core.prefs ├── org.eclipse.jdt.ui.prefs └── org.moreunit.prefs ├── README.markdown ├── build.gradle ├── joist.util.tests.launch └── src ├── main └── java │ └── joist │ ├── converter │ ├── AbstractConverter.java │ ├── AbstractOneWayConverter.java │ ├── Converter.java │ ├── ConverterRegistry.java │ ├── DefaultConverters.java │ └── UnsupportedConversionException.java │ ├── jdbc │ ├── Jdbc.java │ ├── JdbcException.java │ └── RowMapper.java │ ├── sourcegen │ ├── Access.java │ ├── Argument.java │ ├── GClass.java │ ├── GDirectory.java │ ├── GField.java │ ├── GMethod.java │ ├── GSettings.java │ ├── ParsedName.java │ └── Primitives.java │ └── util │ ├── AbstractFixedPrecision.java │ ├── ConstructorTypeParameter.java │ ├── Copy.java │ ├── Default.java │ ├── Execute.java │ ├── FluentList.java │ ├── FluentMap.java │ ├── Function1.java │ ├── Inflector.java │ ├── Interpolate.java │ ├── Join.java │ ├── ListDiff.java │ ├── MapToList.java │ ├── MapToMap.java │ ├── Memoizer.java │ ├── Model.java │ ├── Read.java │ ├── Reflection.java │ ├── StringBuilderr.java │ ├── SystemProperties.java │ ├── TestCounter.java │ ├── TestCounters.java │ ├── Tick.java │ ├── ToString.java │ ├── TopologicalSort.java │ ├── Wrap.java │ └── Write.java └── test ├── java └── joist │ ├── converter │ ├── ConverterInheritanceTest.java │ ├── ConverterTest.java │ └── DefaultConvertersTest.java │ ├── sourcegen │ ├── ArgumentTest.java │ ├── GClassStaticInitializerTest.java │ ├── GClassTest.java │ ├── GConstructorTest.java │ ├── GDirectoryTest.java │ ├── GEnumClassTest.java │ ├── GFieldTest.java │ ├── GInnerClassTest.java │ ├── GInterfaceTest.java │ ├── GMethodTest.java │ └── ParsedNameTest.java │ └── util │ ├── CopyTest.java │ ├── ExecuteTest.java │ ├── FixedPrecisionLimitedTest.java │ ├── FixedPrecisionTest.java │ ├── InflectorTest.java │ ├── InterpolateTest.java │ ├── ListDiffTest.java │ ├── StringBuilderrTest.java │ ├── SystemPropertiesTest.java │ ├── TestCounterTest.java │ ├── TickTest.java │ ├── ToStringTest.java │ ├── TopologicalSortTest.java │ ├── WrapTest.java │ └── WriteTest.java └── resources └── joist └── util └── WriteTest.txt /.checkstyle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.gradle 2 | *.log* 3 | build*.properties 4 | build/ 5 | newproject 6 | docs.zip 7 | .classpath 8 | .project 9 | /*/bin/ 10 | org.eclipse.buildship.core.prefs 11 | /*/out/ 12 | /.idea/ 13 | -------------------------------------------------------------------------------- /.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Sat May 30 15:03:09 CDT 2015 3 | build.family.org.gradle.tooling.model.eclipse.HierarchicalEclipseProject=;domain;domain-testing;features;migrations;starter;util; 4 | org.springsource.ide.eclipse.gradle.rootprojectloc= 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: java 2 | sudo: false 3 | env: 4 | global: 5 | - secure: geb4AbjI6MxYGQ0/JIQ3gmfTbgwAunS4sIPHYg/Ap0JdATJ2ZOtPgOLwCxE2DzwMRLqAOsVCoOdEaDjBqx5PW2ull3N/v75Nq39fVAFa+JMqU1H4IoF68TKOwEJ98VryfqAHSnp6/5KFOE8DjXNQ/AqTqyFLJ1FSkHrdmE7ulck= 6 | - secure: bjxJnjs5uXxAi5wGwI5eWflEBMEo3RSKVj0rnElRWYQFjERl2Wz0E3aGfc/XE7SI1jmjWj4BvkjuIVhA6rybiEZa9P9ioGfuAYBUxFD+B1knxq+NLWEjU9GbhwSL/VkteH3ShaRBw/lHTyPN58rhy+a/9iF8W0VLLU5b/x+UhXo= 7 | before_install: 8 | - echo "db.sa.username = root" > features/build.properties 9 | - echo "db.sa.password = " >> features/build.properties 10 | - echo "db.sa.username = root" > starter/build.properties 11 | - echo "db.sa.password = " >> starter/build.properties 12 | - cat features/build.properties 13 | after_success: 14 | - test -n "$TRAVIS_TAG" && ssh-keyscan -H repo.joist.ws >> ~/.ssh/known_hosts && ./gradlew uploadArchives 15 | jdk: 16 | - openjdk8 17 | services: 18 | - mysql 19 | -------------------------------------------------------------------------------- /LICENSE.markdown: -------------------------------------------------------------------------------- 1 | 2 | Copyright 2009 Stephen Haberman 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | 16 | -------------------------------------------------------------------------------- /bootstrap/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /bootstrap/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Fri Oct 26 22:07:05 CDT 2007 2 | eclipse.preferences.version=1 3 | instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true 4 | line.separator=\r\n 5 | -------------------------------------------------------------------------------- /bootstrap/src/templates/.factorypath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /bootstrap/src/templates/.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | *.log* 3 | -------------------------------------------------------------------------------- /bootstrap/src/templates/.settings/org.eclipse.jdt.apt.core.prefs: -------------------------------------------------------------------------------- 1 | #Fri Feb 06 16:27:06 CST 2009 2 | eclipse.preferences.version=1 3 | org.eclipse.jdt.apt.aptEnabled=true 4 | org.eclipse.jdt.apt.genSrcDir=bin/apt 5 | org.eclipse.jdt.apt.reconcileEnabled=true 6 | -------------------------------------------------------------------------------- /bootstrap/src/templates/ProjectNameCycle.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /bootstrap/src/templates/ProjectNameJetty.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /bootstrap/src/templates/content/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @projectName@ 4 | 5 | 6 | JoistWeb 7 | @projectName@.webapp.@ProjectName@Servlet 8 | 0 9 | 10 | 11 | 12 | JoistWeb 13 | *.htm 14 | 15 | 16 | 17 | index.htm 18 | 19 | 20 | -------------------------------------------------------------------------------- /bootstrap/src/templates/content/index.htm: -------------------------------------------------------------------------------- 1 | This is a dummy page for the Jetty welcome-file entry to find. 2 | 3 | Joist will take over the *.htm files in the classpath before this is served. 4 | 5 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/LogConfiguration.java: -------------------------------------------------------------------------------- 1 | import joist.util.Log; 2 | import joist.util.LogAppenderFactory; 3 | 4 | import org.apache.log4j.Level; 5 | import org.apache.log4j.LogManager; 6 | 7 | public class LogConfiguration { 8 | 9 | public static void setup() { 10 | LogManager.resetConfiguration(); 11 | LogManager.getRootLogger().setLevel(Level.INFO); 12 | LogManager.getRootLogger().addAppender(LogAppenderFactory.newConsoleAppender()); 13 | LogManager.getLogger("@projectName@").setLevel(Level.DEBUG); 14 | LogManager.getLogger("joist").setLevel(Level.DEBUG); 15 | // LogManager.getLogger("joist.jdbc").setLevel(Level.TRACE); 16 | Log.debug("Configuration reset, ConsoleAppender added"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/Environment.java: -------------------------------------------------------------------------------- 1 | package @projectName@; 2 | 3 | public enum Environment { 4 | 5 | DEV(), // 6 | PROD(); 7 | 8 | private Environment() { 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/cli/Cli.java: -------------------------------------------------------------------------------- 1 | package @projectName@.cli; 2 | 3 | import joist.util.Reflection; 4 | import joist.util.SystemProperties; 5 | import @projectName@.Registry; 6 | 7 | import org.apache.commons.lang.StringUtils; 8 | 9 | public class Cli { 10 | 11 | public static void main(String[] args) { 12 | SystemProperties.loadFromFileIfExists("./build.properties"); 13 | Registry.start(); 14 | try { 15 | for (String arg : args) { 16 | String[] parts = StringUtils.split(arg, ".", 2); 17 | Object task = Reflection.newInstance("@projectName@.cli." + parts[0]); 18 | Reflection.invoke(parts[1], task); 19 | } 20 | } finally { 21 | Registry.stop(); 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/cli/JoistCli.java: -------------------------------------------------------------------------------- 1 | package @projectName@.cli; 2 | 3 | import joist.domain.codegen.AbstractJoistCli; 4 | 5 | public class JoistCli extends AbstractJoistCli { 6 | 7 | public JoistCli() { 8 | super("@projectName@"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/migrations/m0000.java: -------------------------------------------------------------------------------- 1 | package @projectName@.migrations; 2 | 3 | import static joist.domain.migrations.MigrationKeywords.*; 4 | import joist.domain.migrations.AbstractMigration; 5 | 6 | public class m0000 extends AbstractMigration { 7 | 8 | public m0000() { 9 | super("Create schema_version."); 10 | } 11 | 12 | public void apply() { 13 | createTable("schema_version", integer("update_lock"), integer("version")); 14 | execute("INSERT INTO schema_version (update_lock, version) values (1, -1)"); 15 | createTable("code_id", varchar("table_name").unique(), integer("next_id")); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/migrations/m0001.java: -------------------------------------------------------------------------------- 1 | package @projectName@.migrations; 2 | 3 | import static joist.domain.migrations.MigrationKeywords.*; 4 | import joist.domain.migrations.AbstractMigration; 5 | 6 | public class m0001 extends AbstractMigration { 7 | 8 | public m0001() { 9 | super("Create user."); 10 | } 11 | 12 | public void apply() { 13 | createTable("user",// 14 | primaryKey("id"), 15 | varchar("username").unique(), 16 | integer("version")); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/webapp/pages/AbstractProjectNamePage.java: -------------------------------------------------------------------------------- 1 | package @projectName@.webapp.pages; 2 | 3 | import joist.domain.uow.UoW; 4 | import joist.domain.validation.ValidationException; 5 | import joist.web.AbstractPage; 6 | import joist.web.controls.MessagesDiv; 7 | 8 | public abstract class Abstract@ProjectName@Page extends AbstractPage { 9 | 10 | protected MessagesDiv messages = new MessagesDiv(); 11 | 12 | public boolean commit() { 13 | try { 14 | UoW.commit(); 15 | return true; 16 | } catch (ValidationException ve) { 17 | for (String message : ve.getValidationErrorMessages()) { 18 | this.messages.addError(message); 19 | } 20 | return false; 21 | } 22 | } 23 | 24 | public MessagesDiv getMessages() { 25 | return this.messages; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/webapp/pages/IndexPage.java: -------------------------------------------------------------------------------- 1 | package @projectName@.webapp.pages; 2 | 3 | import org.exigencecorp.bindgen.Bindable; 4 | 5 | @Bindable 6 | public class IndexPage extends Abstract@ProjectName@Page { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /bootstrap/src/templates/src/main/projectName/webapp/pages/index.htm: -------------------------------------------------------------------------------- 1 | 2 | index 3 | 4 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/integration/projectName/AbstractProjectNameIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package @projectName@; 2 | 3 | import joist.domain.AbstractDomainObjectsTest; 4 | import joist.domain.util.Freeze; 5 | import joist.jdbc.Jdbc; 6 | 7 | public abstract class Abstract@ProjectName@IntegrationTest extends AbstractDomainObjectsTest { 8 | 9 | private static boolean started = false; 10 | 11 | public void setUp() throws Exception { 12 | if (!started) { 13 | Registry.start(); 14 | started = true; 15 | } 16 | super.setUp(); 17 | Freeze.at(2008, 1, 1); 18 | Jdbc.queryForInt(Registry.getDataSource(), "SELECT flush_test_database()"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/integration/projectName/domain/UserIntegrationTest.java: -------------------------------------------------------------------------------- 1 | package @projectName@.domain; 2 | 3 | import @projectName@.Abstract@ProjectName@IntegrationTest; 4 | import @projectName@.domain.builders.UserBuilder; 5 | 6 | public class UserIntegrationTest extends Abstract@ProjectName@IntegrationTest { 7 | 8 | public void testCommit() { 9 | UserBuilder.create(); 10 | this.commitAndReOpen(); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/unit/projectName/AbstractProjectNameUnitTest.java: -------------------------------------------------------------------------------- 1 | package @projectName@; 2 | 3 | import joist.domain.util.Freeze; 4 | import junit.framework.TestCase; 5 | 6 | public abstract class Abstract@ProjectName@UnitTest extends TestCase { 7 | 8 | public void setUp() throws Exception { 9 | super.setUp(); 10 | Freeze.at(2008, 1, 1); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/unit/projectName/domain/UserTest.java: -------------------------------------------------------------------------------- 1 | package @projectName@.domain; 2 | 3 | import @projectName@.Abstract@ProjectName@UnitTest; 4 | 5 | public class UserTest extends Abstract@ProjectName@UnitTest { 6 | 7 | public void testValid() { 8 | User user = new User(); 9 | user.validate(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/unit/projectName/domain/builders/UserBuilder.java: -------------------------------------------------------------------------------- 1 | package @projectName@.domain.builders; 2 | 3 | import joist.domain.util.AbstractBuilder; 4 | import joist.util.TestCounter; 5 | import @projectName@.domain.User; 6 | 7 | public class UserBuilder extends AbstractBuilder { 8 | 9 | private static TestCounter counter = new TestCounter(); 10 | 11 | public static UserBuilder create() { 12 | int i = counter.next(); 13 | User user = new User(); 14 | user.setUsername("user" + i); 15 | return new UserBuilder(user); 16 | } 17 | 18 | protected UserBuilder(User user) { 19 | super(user); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/web/projectName/webapp/pageObjects/IndexPageObject.java: -------------------------------------------------------------------------------- 1 | package @projectName@.webapp.pageObjects; 2 | 3 | import org.openqa.selenium.WebDriver; 4 | 5 | public class IndexPageObject extends Abstract@ProjectName@PageObject { 6 | 7 | public IndexPageObject(WebDriver driver) { 8 | super(driver); 9 | } 10 | 11 | public void open() { 12 | this.open("/index.htm"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /bootstrap/src/templates/tests/web/projectName/webapp/pages/IndexPageTest.java: -------------------------------------------------------------------------------- 1 | package @projectName@.webapp.pages; 2 | 3 | import @projectName@.Abstract@ProjectName@WebTest; 4 | import @projectName@.webapp.pageObjects.IndexPageObject; 5 | 6 | public class IndexPageTest extends Abstract@ProjectName@WebTest { 7 | 8 | private IndexPageObject index; 9 | 10 | public void setUp() throws Exception { 11 | super.setUp(); 12 | this.commitAndReOpen(); 13 | } 14 | 15 | public void testStart() { 16 | this.index = this.startAtIndexPage(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | _site 2 | screencasts 3 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | joist.ws -------------------------------------------------------------------------------- /docs/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/js/clipboard.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenh/joist-java/41dda3478a6a163d914a49191fbe4cb6d28c54e4/docs/js/clipboard.swf -------------------------------------------------------------------------------- /domain-testing/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:18:59 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /domain-testing/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:04:48 CST 2011 2 | eclipse.preferences.version=1 3 | line.separator=\n 4 | -------------------------------------------------------------------------------- /domain-testing/.settings/org.eclipse.jdt.ui.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | formatter_profile=_Joist Coding Standards 3 | formatter_settings_version=12 4 | -------------------------------------------------------------------------------- /domain-testing/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile project(':domain') 4 | compile project(':util') 5 | compile 'junit:junit:4.12' 6 | } 7 | 8 | -------------------------------------------------------------------------------- /domain/.checkstyle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /domain/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:18:13 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /domain/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /domain/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:04:44 CST 2011 2 | eclipse.preferences.version=1 3 | instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true 4 | line.separator=\n 5 | -------------------------------------------------------------------------------- /domain/.settings/org.moreunit.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.moreunit.preferences.version=2 3 | org.moreunit.test_type=junit4 4 | org.moreunit.unitsourcefolder=joist-domain\:src/main/java\:joist-domain\:src/test/java 5 | org.moreunit.useprojectsettings=true 6 | -------------------------------------------------------------------------------- /domain/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile project(':util') 4 | compile 'commons-lang:commons-lang:2.6' 5 | compile 'com.github.stephenh:timeandmoney:1.0.0' 6 | compile 'com.mchange:c3p0:0.9.5.2' 7 | compile 'com.zaxxer:HikariCP:3.1.0' 8 | 9 | testCompile 'junit:junit:4.12' 10 | testCompile 'org.mockito:mockito-all:2.0.2-beta' 11 | } 12 | 13 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/Changed.java: -------------------------------------------------------------------------------- 1 | package joist.domain; 2 | 3 | import java.util.Map; 4 | 5 | public interface Changed { 6 | 7 | void clear(); 8 | 9 | int size(); 10 | 11 | boolean contains(String propertyName); 12 | 13 | Object getOriginal(String propertyName); 14 | 15 | void record(String primitveProperty, Object oldValue, Object newValue); 16 | 17 | void record(String collectionProperty); 18 | 19 | Map getMap(); 20 | } 21 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/Code.java: -------------------------------------------------------------------------------- 1 | package joist.domain; 2 | 3 | public interface Code { 4 | 5 | Long getId(); 6 | 7 | String getCode(); 8 | 9 | String getName(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/Shim.java: -------------------------------------------------------------------------------- 1 | package joist.domain; 2 | 3 | public interface Shim { 4 | 5 | void set(T instance, U value); 6 | 7 | U get(T instance); 8 | 9 | String getName(); 10 | 11 | } 12 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/exceptions/DisconnectedException.java: -------------------------------------------------------------------------------- 1 | package joist.domain.exceptions; 2 | 3 | public class DisconnectedException extends DomainObjectsException { 4 | 5 | private static final long serialVersionUID = 1L; 6 | 7 | public DisconnectedException() { 8 | super("The UoW is currently closed"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/exceptions/DomainObjectsException.java: -------------------------------------------------------------------------------- 1 | package joist.domain.exceptions; 2 | 3 | @SuppressWarnings("serial") 4 | public class DomainObjectsException extends RuntimeException { 5 | 6 | protected DomainObjectsException(String message) { 7 | super(message); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/exceptions/NotFoundException.java: -------------------------------------------------------------------------------- 1 | package joist.domain.exceptions; 2 | 3 | import java.util.Collection; 4 | 5 | /** Exception denoting a domain object was not found. */ 6 | public class NotFoundException extends DomainObjectsException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public NotFoundException(Class type) { 11 | super("Instance of " + type.getSimpleName() + " not found"); 12 | } 13 | 14 | public NotFoundException(Class type, long id) { 15 | super(type.getSimpleName() + "#" + id + " not found"); 16 | } 17 | 18 | public NotFoundException(Class type, Collection ids) { 19 | super(type.getSimpleName() + " id in (" + String.join(", ", (String[]) ids.stream().map(id -> String.valueOf(id)).toArray()) + ") not found"); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/exceptions/OpLockException.java: -------------------------------------------------------------------------------- 1 | package joist.domain.exceptions; 2 | 3 | import joist.domain.DomainObject; 4 | 5 | public class OpLockException extends DomainObjectsException { 6 | 7 | private static final long serialVersionUID = 1L; 8 | 9 | public OpLockException(DomainObject instance) { 10 | super("Op lock failed for " + instance); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/exceptions/TooManyException.java: -------------------------------------------------------------------------------- 1 | package joist.domain.exceptions; 2 | 3 | import java.util.List; 4 | 5 | /** Exception noting too many domain objects were found when only 1 was expected. */ 6 | public class TooManyException extends DomainObjectsException { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public TooManyException(Class type, List instances) { 11 | super("Too many " + type.getSimpleName() + " found: " + instances); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/Db.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm; 2 | 3 | public enum Db { 4 | 5 | MYSQL, PG; 6 | 7 | public boolean isPg() { 8 | return this == PG; 9 | } 10 | 11 | public boolean isMySQL() { 12 | return this == MYSQL; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/EagerLoading.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm; 2 | 3 | import java.util.concurrent.atomic.AtomicBoolean; 4 | 5 | /** Class to flag eager loading. */ 6 | public class EagerLoading { 7 | 8 | private static AtomicBoolean enabled = new AtomicBoolean(true); 9 | 10 | public static boolean isEnabled() { 11 | return enabled.get(); 12 | } 13 | 14 | public static void setEnabled(boolean enabled) { 15 | EagerLoading.enabled.set(enabled); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/NamedUpdater.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm; 2 | 3 | public class NamedUpdater implements Updater { 4 | private final String name; 5 | 6 | public NamedUpdater(final String name) { 7 | this.name = name; 8 | } 9 | 10 | public String getUpdaterId() { 11 | return this.name; 12 | } 13 | 14 | @Override 15 | public String toString() { 16 | return this.name; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/UnitTesting.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm; 2 | 3 | import java.util.concurrent.atomic.AtomicBoolean; 4 | 5 | /** Class to flag unit testing on to more easily work with models sans the db. */ 6 | public class UnitTesting { 7 | 8 | private static AtomicBoolean enabled = new AtomicBoolean(false); 9 | 10 | public static boolean isEnabled() { 11 | return enabled.get(); 12 | } 13 | 14 | public static void setEnabled(boolean enabled) { 15 | UnitTesting.enabled.set(enabled); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/Updater.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm; 2 | 3 | public interface Updater { 4 | String getUpdaterId(); 5 | } 6 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/mappers/IdsMapper.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.mappers; 2 | 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | import java.util.List; 6 | 7 | import joist.domain.DomainObject; 8 | import joist.domain.orm.queries.Alias; 9 | import joist.jdbc.RowMapper; 10 | 11 | public class IdsMapper implements RowMapper { 12 | 13 | private final Alias from; 14 | private final List ids; 15 | 16 | public IdsMapper(Alias from, List ids) { 17 | this.from = from; 18 | this.ids = ids; 19 | } 20 | 21 | public void mapRow(ResultSet rs) throws SQLException { 22 | this.ids.add(new Long(rs.getLong(this.from.getIdColumn().getName()))); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/mappers/ValuesMapper.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.mappers; 2 | 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | import java.util.List; 6 | 7 | import joist.domain.orm.queries.SelectItem; 8 | import joist.domain.orm.queries.columns.ColumnExpression; 9 | import joist.jdbc.RowMapper; 10 | 11 | public class ValuesMapper implements RowMapper { 12 | 13 | private final List results; 14 | private final ColumnExpression column; 15 | 16 | public ValuesMapper(SelectItem item, List results) { 17 | this.results = results; 18 | this.column = (ColumnExpression) item.getColumn(); 19 | } 20 | 21 | public void mapRow(ResultSet rs) throws SQLException { 22 | Object value = rs.getObject(1); 23 | R domainValue = (value == null) ? null : this.column.toDomainValue(value); 24 | this.results.add(domainValue); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/queries/Order.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.queries; 2 | 3 | public class Order { 4 | 5 | private final String text; 6 | 7 | public Order(String text) { 8 | this.text = text; 9 | } 10 | 11 | public String toString() { 12 | return this.text; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/queries/SetItem.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.queries; 2 | 3 | import joist.domain.DomainObject; 4 | import joist.domain.orm.queries.columns.AliasColumn; 5 | 6 | public class SetItem { 7 | 8 | private final AliasColumn column; 9 | private final Object value; 10 | 11 | public SetItem(AliasColumn column, Object value) { 12 | this.column = column; 13 | this.value = value; 14 | } 15 | 16 | public AliasColumn getColumn() { 17 | return this.column; 18 | } 19 | 20 | public Object getValue() { 21 | return this.value; 22 | } 23 | 24 | public String toString() { 25 | return this.column.getQualifiedName(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/queries/columns/ByteArrayAliasColumn.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.queries.columns; 2 | 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | 6 | import joist.domain.DomainObject; 7 | import joist.domain.Shim; 8 | import joist.domain.orm.queries.Alias; 9 | 10 | public class ByteArrayAliasColumn extends AliasColumn { 11 | 12 | public ByteArrayAliasColumn(Alias alias, String name, Shim shim) { 13 | super(alias, name, shim); 14 | } 15 | 16 | @Override 17 | public byte[] toJdbcValue(ResultSet rs, int i) throws SQLException { 18 | return rs.getBytes(i); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/orm/queries/columns/DateAliasColumn.java: -------------------------------------------------------------------------------- 1 | package joist.domain.orm.queries.columns; 2 | 3 | import java.sql.Date; 4 | import java.sql.ResultSet; 5 | import java.sql.SQLException; 6 | 7 | import joist.domain.DomainObject; 8 | import joist.domain.Shim; 9 | import joist.domain.orm.queries.Alias; 10 | 11 | public class DateAliasColumn extends AliasColumn { 12 | 13 | public DateAliasColumn(Alias alias, String name, Shim shim) { 14 | super(alias, name, shim); 15 | } 16 | 17 | @Override 18 | public Date toJdbcValue(ResultSet rs, int i) throws SQLException { 19 | return rs.getDate(i); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/uow/Block.java: -------------------------------------------------------------------------------- 1 | package joist.domain.uow; 2 | 3 | public interface Block { 4 | 5 | void go(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/uow/BlockWithReturn.java: -------------------------------------------------------------------------------- 1 | package joist.domain.uow; 2 | 3 | public interface BlockWithReturn { 4 | 5 | T go(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/uow/BlockWithReturnAndSafety.java: -------------------------------------------------------------------------------- 1 | package joist.domain.uow; 2 | 3 | public interface BlockWithReturnAndSafety { 4 | 5 | T go(); 6 | 7 | T stopped(Exception e); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/uow/BlockWithSafety.java: -------------------------------------------------------------------------------- 1 | package joist.domain.uow; 2 | 3 | public interface BlockWithSafety { 4 | 5 | void go() throws Exception; 6 | 7 | void stopped(Exception e); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/util/converters/CodeToStringConverter.java: -------------------------------------------------------------------------------- 1 | package joist.domain.util.converters; 2 | 3 | import joist.converter.AbstractConverter; 4 | import joist.domain.Code; 5 | 6 | public class CodeToStringConverter extends AbstractConverter { 7 | 8 | public String convertOneToTwo(Code value, Class toType) { 9 | return value.toString(); 10 | } 11 | 12 | @SuppressWarnings("rawtypes") 13 | public Code convertTwoToOne(String value, Class toType) { 14 | // javac needs the double cast--ugh 15 | return (Code) Enum.valueOf((Class) (Class) toType, value); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/util/converters/CodeToTextStringConverter.java: -------------------------------------------------------------------------------- 1 | package joist.domain.util.converters; 2 | 3 | import joist.converter.AbstractOneWayConverter; 4 | import joist.domain.Code; 5 | 6 | public class CodeToTextStringConverter extends AbstractOneWayConverter { 7 | 8 | public String convertOneToTwo(Code value, Class toType) { 9 | return value.getName(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/util/converters/DomainObjectToStringConverter.java: -------------------------------------------------------------------------------- 1 | package joist.domain.util.converters; 2 | 3 | import joist.converter.AbstractConverter; 4 | import joist.domain.DomainObject; 5 | import joist.domain.uow.UoW; 6 | 7 | public class DomainObjectToStringConverter extends AbstractConverter { 8 | 9 | public String convertOneToTwo(DomainObject value, Class toType) { 10 | return value.getId() == null ? "" : value.getId().toString(); 11 | } 12 | 13 | public DomainObject convertTwoToOne(String value, Class toType) { 14 | if ("".equals(value)) { 15 | return null; 16 | } 17 | return UoW.load(toType, new Long(value)); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/util/converters/DomainObjectToTextStringConverter.java: -------------------------------------------------------------------------------- 1 | package joist.domain.util.converters; 2 | 3 | import joist.converter.AbstractOneWayConverter; 4 | import joist.domain.DomainObject; 5 | 6 | public class DomainObjectToTextStringConverter extends AbstractOneWayConverter { 7 | 8 | public String convertOneToTwo(DomainObject value, Class toType) { 9 | return value.toTextString(); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/util/pools/DataSourceFactory.java: -------------------------------------------------------------------------------- 1 | package joist.domain.util.pools; 2 | 3 | import javax.sql.DataSource; 4 | 5 | import joist.domain.util.ConnectionSettings; 6 | 7 | public interface DataSourceFactory { 8 | 9 | DataSource create(ConnectionSettings settings); 10 | 11 | void destroy(DataSource dataSource); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/errors/GeneralError.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.errors; 2 | 3 | public class GeneralError implements ValidationError { 4 | 5 | private final String message; 6 | 7 | public GeneralError(String message) { 8 | this.message = message; 9 | } 10 | 11 | public String getMessage() { 12 | return this.message; 13 | } 14 | 15 | public String toString() { 16 | return this.getMessage(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/errors/ObjectError.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.errors; 2 | 3 | import joist.domain.DomainObject; 4 | 5 | /** An error that applies to the whole object. */ 6 | public class ObjectError implements ValidationError { 7 | 8 | private final DomainObject instance; 9 | private final String message; 10 | 11 | public ObjectError(DomainObject instance, String message) { 12 | this.instance = instance; 13 | this.message = message; 14 | } 15 | 16 | public DomainObject getInstance() { 17 | return this.instance; 18 | } 19 | 20 | public String getMessage() { 21 | return this.message; 22 | } 23 | 24 | public String toString() { 25 | return this.message + " - " + this.instance; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/errors/ValidationError.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.errors; 2 | 3 | public interface ValidationError { 4 | 5 | String getMessage(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/rules/NotEmpty.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.rules; 2 | 3 | import joist.domain.DomainObject; 4 | import joist.domain.Shim; 5 | import joist.domain.validation.ValidationErrors; 6 | 7 | public class NotEmpty implements Rule { 8 | 9 | private final Shim shim; 10 | 11 | public NotEmpty(Shim shim) { 12 | this.shim = shim; 13 | } 14 | 15 | public void validate(ValidationErrors errors, T t) { 16 | String value = this.shim.get(t); 17 | if (value != null && value.trim().length() == 0) { 18 | errors.addPropertyError(t, this.shim.getName(), "cannot be empty"); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/rules/NotNull.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.rules; 2 | 3 | import joist.domain.DomainObject; 4 | import joist.domain.Shim; 5 | import joist.domain.validation.ValidationErrors; 6 | 7 | public class NotNull implements Rule { 8 | 9 | private final Shim shim; 10 | 11 | public NotNull(Shim shim) { 12 | this.shim = shim; 13 | } 14 | 15 | public void validate(ValidationErrors errors, T t) { 16 | Object value = this.shim.get(t); 17 | if (value == null) { 18 | errors.addPropertyError(t, this.shim.getName(), "is required"); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /domain/src/main/java/joist/domain/validation/rules/Rule.java: -------------------------------------------------------------------------------- 1 | package joist.domain.validation.rules; 2 | 3 | import joist.domain.validation.ValidationErrors; 4 | 5 | public interface Rule { 6 | 7 | void validate(ValidationErrors errors, T object); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /features/.checkstyle: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /features/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:19:04 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /features/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /features/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:04:51 CST 2011 2 | eclipse.preferences.version=1 3 | instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true 4 | line.separator=\n 5 | -------------------------------------------------------------------------------- /features/.settings/org.eclipse.jdt.apt.core.prefs: -------------------------------------------------------------------------------- 1 | #Tue Oct 06 22:38:12 CDT 2009 2 | eclipse.preferences.version=1 3 | org.eclipse.jdt.apt.aptEnabled=false 4 | org.eclipse.jdt.apt.genSrcDir=bin/apt 5 | org.eclipse.jdt.apt.reconcileEnabled=false 6 | -------------------------------------------------------------------------------- /features/.settings/org.eclipse.jdt.launching.prefs: -------------------------------------------------------------------------------- 1 | #Wed Jul 08 06:32:43 CDT 2009 2 | eclipse.preferences.version=1 3 | org.eclipse.jdt.launching.PREF_STRICTLY_COMPATIBLE_JRE_NOT_AVAILABLE=warning 4 | -------------------------------------------------------------------------------- /features/.settings/org.moreunit.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.moreunit.preferences.version=2 3 | org.moreunit.test_type=junit4 4 | org.moreunit.unitsourcefolder=joist-features\:src/codegen\:joist-features\:src/test/java 5 | org.moreunit.useprojectsettings=true 6 | -------------------------------------------------------------------------------- /features/FeaturesBackup.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/FeaturesCodegen.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/FeaturesCycle.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/FeaturesPermissionFixer.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/SchemaHash.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class SchemaHash { 4 | 5 | public static final int hashCode = -2064717291; 6 | 7 | } 8 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildFQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildF; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildFQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildFQueriesCodegen() { 9 | super(ChildF.class); 10 | } 11 | 12 | public void delete(ChildF instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildGQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildG; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildGQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildGQueriesCodegen() { 9 | super(ChildG.class); 10 | } 11 | 12 | public void delete(ChildG instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildHQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildH; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildHQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildHQueriesCodegen() { 9 | super(ChildH.class); 10 | } 11 | 12 | public void delete(ChildH instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildIAQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildIA; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildIAQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildIAQueriesCodegen() { 9 | super(ChildIA.class); 10 | } 11 | 12 | public void delete(ChildIA instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildIBQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildIB; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildIBQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildIBQueriesCodegen() { 9 | super(ChildIB.class); 10 | } 11 | 12 | public void delete(ChildIB instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ChildQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.Child; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ChildQueriesCodegen extends AbstractQueries { 7 | 8 | public ChildQueriesCodegen() { 9 | super(Child.class); 10 | } 11 | 12 | public void delete(Child instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/GrandChildQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.GrandChild; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class GrandChildQueriesCodegen extends AbstractQueries { 7 | 8 | public GrandChildQueriesCodegen() { 9 | super(GrandChild.class); 10 | } 11 | 12 | public void delete(GrandChild instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/HistoryEntryQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.HistoryEntry; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class HistoryEntryQueriesCodegen extends AbstractQueries { 7 | 8 | public HistoryEntryQueriesCodegen() { 9 | super(HistoryEntry.class); 10 | } 11 | 12 | public void delete(HistoryEntry instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceABaseQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceABase; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceABaseQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceABaseQueriesCodegen() { 9 | super(InheritanceABase.class); 10 | } 11 | 12 | public void delete(InheritanceABase instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceAOwnerQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceAOwner; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceAOwnerQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceAOwnerQueriesCodegen() { 9 | super(InheritanceAOwner.class); 10 | } 11 | 12 | public void delete(InheritanceAOwner instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceASubOneChildQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceASubOneChild; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceASubOneChildQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceASubOneChildQueriesCodegen() { 9 | super(InheritanceASubOneChild.class); 10 | } 11 | 12 | public void delete(InheritanceASubOneChild instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceASubOneQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceABase; 4 | import features.domain.InheritanceASubOne; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceASubOneQueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceASubOneQueriesCodegen() { 10 | super(InheritanceASubOne.class); 11 | } 12 | 13 | public void delete(InheritanceASubOne instance) { 14 | InheritanceABase.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceASubTwoQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceABase; 4 | import features.domain.InheritanceASubTwo; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceASubTwoQueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceASubTwoQueriesCodegen() { 10 | super(InheritanceASubTwo.class); 11 | } 12 | 13 | public void delete(InheritanceASubTwo instance) { 14 | InheritanceABase.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceAThingQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceAThing; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceAThingQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceAThingQueriesCodegen() { 9 | super(InheritanceAThing.class); 10 | } 11 | 12 | public void delete(InheritanceAThing instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceBBottomQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceBBottom; 4 | import features.domain.InheritanceBMiddle; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceBBottomQueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceBBottomQueriesCodegen() { 10 | super(InheritanceBBottom.class); 11 | } 12 | 13 | public void delete(InheritanceBBottom instance) { 14 | InheritanceBMiddle.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceBMiddleQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceBMiddle; 4 | import features.domain.InheritanceBRoot; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceBMiddleQueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceBMiddleQueriesCodegen() { 10 | super(InheritanceBMiddle.class); 11 | } 12 | 13 | public void delete(InheritanceBMiddle instance) { 14 | InheritanceBRoot.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceBRootChildQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceBRootChild; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceBRootChildQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceBRootChildQueriesCodegen() { 9 | super(InheritanceBRootChild.class); 10 | } 11 | 12 | public void delete(InheritanceBRootChild instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceBRootQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceBRoot; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceBRootQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceBRootQueriesCodegen() { 9 | super(InheritanceBRoot.class); 10 | } 11 | 12 | public void delete(InheritanceBRoot instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceCFoo1QueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceC; 4 | import features.domain.InheritanceCFoo1; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceCFoo1QueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceCFoo1QueriesCodegen() { 10 | super(InheritanceCFoo1.class); 11 | } 12 | 13 | public void delete(InheritanceCFoo1 instance) { 14 | InheritanceC.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceCFoo2QueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceC; 4 | import features.domain.InheritanceCFoo2; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class InheritanceCFoo2QueriesCodegen extends AbstractQueries { 8 | 9 | public InheritanceCFoo2QueriesCodegen() { 10 | super(InheritanceCFoo2.class); 11 | } 12 | 13 | public void delete(InheritanceCFoo2 instance) { 14 | InheritanceC.queries.delete(instance); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/InheritanceCQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.InheritanceC; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class InheritanceCQueriesCodegen extends AbstractQueries { 7 | 8 | public InheritanceCQueriesCodegen() { 9 | super(InheritanceC.class); 10 | } 11 | 12 | public void delete(InheritanceC instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyABarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyABar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyABarQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyABarQueriesCodegen() { 9 | super(ManyToManyABar.class); 10 | } 11 | 12 | public void delete(ManyToManyABar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyAFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyAFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyAFooQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyAFooQueriesCodegen() { 9 | super(ManyToManyAFoo.class); 10 | } 11 | 12 | public void delete(ManyToManyAFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyAFooToBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyAFooToBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyAFooToBarQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyAFooToBarQueriesCodegen() { 9 | super(ManyToManyAFooToBar.class); 10 | } 11 | 12 | public void delete(ManyToManyAFooToBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyBBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyBBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyBBarQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyBBarQueriesCodegen() { 9 | super(ManyToManyBBar.class); 10 | } 11 | 12 | public void delete(ManyToManyBBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyBFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyBFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyBFooQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyBFooQueriesCodegen() { 9 | super(ManyToManyBFoo.class); 10 | } 11 | 12 | public void delete(ManyToManyBFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ManyToManyBFooToBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ManyToManyBFooToBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ManyToManyBFooToBarQueriesCodegen extends AbstractQueries { 7 | 8 | public ManyToManyBFooToBarQueriesCodegen() { 9 | super(ManyToManyBFooToBar.class); 10 | } 11 | 12 | public void delete(ManyToManyBFooToBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/OneToOneABarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.OneToOneABar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class OneToOneABarQueriesCodegen extends AbstractQueries { 7 | 8 | public OneToOneABarQueriesCodegen() { 9 | super(OneToOneABar.class); 10 | } 11 | 12 | public void delete(OneToOneABar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/OneToOneAFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.OneToOneAFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class OneToOneAFooQueriesCodegen extends AbstractQueries { 7 | 8 | public OneToOneAFooQueriesCodegen() { 9 | super(OneToOneAFoo.class); 10 | } 11 | 12 | public void delete(OneToOneAFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/OneToOneBBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.OneToOneBBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class OneToOneBBarQueriesCodegen extends AbstractQueries { 7 | 8 | public OneToOneBBarQueriesCodegen() { 9 | super(OneToOneBBar.class); 10 | } 11 | 12 | public void delete(OneToOneBBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/OneToOneBFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.OneToOneBFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class OneToOneBFooQueriesCodegen extends AbstractQueries { 7 | 8 | public OneToOneBFooQueriesCodegen() { 9 | super(OneToOneBFoo.class); 10 | } 11 | 12 | public void delete(OneToOneBFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentBChildBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentBChildBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentBChildBarQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentBChildBarQueriesCodegen() { 9 | super(ParentBChildBar.class); 10 | } 11 | 12 | public void delete(ParentBChildBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentBChildFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentBChildFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentBChildFooQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentBChildFooQueriesCodegen() { 9 | super(ParentBChildFoo.class); 10 | } 11 | 12 | public void delete(ParentBChildFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentBChildZazQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentBChildZaz; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentBChildZazQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentBChildZazQueriesCodegen() { 9 | super(ParentBChildZaz.class); 10 | } 11 | 12 | public void delete(ParentBChildZaz instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentBParentQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentBParent; 4 | import features.domain.ParentBParentAlias; 5 | import joist.domain.AbstractQueries; 6 | import joist.domain.orm.queries.Select; 7 | 8 | abstract class ParentBParentQueriesCodegen extends AbstractQueries { 9 | 10 | public ParentBParentQueriesCodegen() { 11 | super(ParentBParent.class); 12 | } 13 | 14 | public void delete(ParentBParent instance) { 15 | super.delete(instance); 16 | } 17 | 18 | public ParentBParent findByName(String name) { 19 | ParentBParentAlias pbp0 = new ParentBParentAlias("pbp0"); 20 | return Select.from(pbp0).where(pbp0.name.eq(name)).unique(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentCBarQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentCBar; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentCBarQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentCBarQueriesCodegen() { 9 | super(ParentCBar.class); 10 | } 11 | 12 | public void delete(ParentCBar instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentCFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentCFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentCFooQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentCFooQueriesCodegen() { 9 | super(ParentCFoo.class); 10 | } 11 | 12 | public void delete(ParentCFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentDChildAQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentDChildA; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentDChildAQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentDChildAQueriesCodegen() { 9 | super(ParentDChildA.class); 10 | } 11 | 12 | public void delete(ParentDChildA instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentDChildBQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentDChildB; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentDChildBQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentDChildBQueriesCodegen() { 9 | super(ParentDChildB.class); 10 | } 11 | 12 | public void delete(ParentDChildB instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentDChildCQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentDChildC; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentDChildCQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentDChildCQueriesCodegen() { 9 | super(ParentDChildC.class); 10 | } 11 | 12 | public void delete(ParentDChildC instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentDToChildCQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentDToChildC; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentDToChildCQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentDToChildCQueriesCodegen() { 9 | super(ParentDToChildC.class); 10 | } 11 | 12 | public void delete(ParentDToChildC instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentEQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ParentE; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ParentEQueriesCodegen extends AbstractQueries { 7 | 8 | public ParentEQueriesCodegen() { 9 | super(ParentE.class); 10 | } 11 | 12 | public void delete(ParentE instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentFQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildF; 4 | import features.domain.ParentF; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class ParentFQueriesCodegen extends AbstractQueries { 8 | 9 | public ParentFQueriesCodegen() { 10 | super(ParentF.class); 11 | } 12 | 13 | public void delete(ParentF instance) { 14 | if (instance.getChildOne() != null) { 15 | ChildF.queries.delete(instance.getChildOne()); 16 | } 17 | if (instance.getChildTwo() != null) { 18 | ChildF.queries.delete(instance.getChildTwo()); 19 | } 20 | super.delete(instance); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentGQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildG; 4 | import features.domain.ParentG; 5 | import joist.domain.AbstractQueries; 6 | 7 | abstract class ParentGQueriesCodegen extends AbstractQueries { 8 | 9 | public ParentGQueriesCodegen() { 10 | super(ParentG.class); 11 | } 12 | 13 | public void delete(ParentG instance) { 14 | if (instance.getParentOneChildG() != null) { 15 | ChildG.queries.delete(instance.getParentOneChildG()); 16 | } 17 | if (instance.getParentTwoChildG() != null) { 18 | ChildG.queries.delete(instance.getParentTwoChildG()); 19 | } 20 | super.delete(instance); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentHQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildH; 4 | import features.domain.ParentH; 5 | import joist.domain.AbstractQueries; 6 | import joist.util.Copy; 7 | 8 | abstract class ParentHQueriesCodegen extends AbstractQueries { 9 | 10 | public ParentHQueriesCodegen() { 11 | super(ParentH.class); 12 | } 13 | 14 | public void delete(ParentH instance) { 15 | for (ChildH o : Copy.list(instance.getChildHs())) { 16 | ChildH.queries.delete(o); 17 | } 18 | super.delete(instance); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentIQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ChildIA; 4 | import features.domain.ChildIB; 5 | import features.domain.ParentI; 6 | import joist.domain.AbstractQueries; 7 | import joist.util.Copy; 8 | 9 | abstract class ParentIQueriesCodegen extends AbstractQueries { 10 | 11 | public ParentIQueriesCodegen() { 12 | super(ParentI.class); 13 | } 14 | 15 | public void delete(ParentI instance) { 16 | for (ChildIA o : Copy.list(instance.getChildAs())) { 17 | ChildIA.queries.delete(o); 18 | } 19 | if (instance.getChildB() != null) { 20 | ChildIB.queries.delete(instance.getChildB()); 21 | } 22 | super.delete(instance); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ParentQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.Child; 4 | import features.domain.Parent; 5 | import joist.domain.AbstractQueries; 6 | import joist.util.Copy; 7 | 8 | abstract class ParentQueriesCodegen extends AbstractQueries { 9 | 10 | public ParentQueriesCodegen() { 11 | super(Parent.class); 12 | } 13 | 14 | public void delete(Parent instance) { 15 | for (Child o : Copy.list(instance.getChilds())) { 16 | Child.queries.delete(o); 17 | } 18 | super.delete(instance); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/PrimitivesBQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.PrimitivesB; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class PrimitivesBQueriesCodegen extends AbstractQueries { 7 | 8 | public PrimitivesBQueriesCodegen() { 9 | super(PrimitivesB.class); 10 | } 11 | 12 | public void delete(PrimitivesB instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/PrimitivesCQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.PrimitivesC; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class PrimitivesCQueriesCodegen extends AbstractQueries { 7 | 8 | public PrimitivesCQueriesCodegen() { 9 | super(PrimitivesC.class); 10 | } 11 | 12 | public void delete(PrimitivesC instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/PrimitivesQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.Primitives; 4 | import features.domain.PrimitivesAlias; 5 | import joist.domain.AbstractQueries; 6 | import joist.domain.orm.queries.Select; 7 | 8 | abstract class PrimitivesQueriesCodegen extends AbstractQueries { 9 | 10 | public PrimitivesQueriesCodegen() { 11 | super(Primitives.class); 12 | } 13 | 14 | public void delete(Primitives instance) { 15 | super.delete(instance); 16 | } 17 | 18 | public Primitives findByName(String name) { 19 | PrimitivesAlias p0 = new PrimitivesAlias("p0"); 20 | return Select.from(p0).where(p0.name.eq(name)).unique(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/UserTypesAFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.UserTypesAFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class UserTypesAFooQueriesCodegen extends AbstractQueries { 7 | 8 | public UserTypesAFooQueriesCodegen() { 9 | super(UserTypesAFoo.class); 10 | } 11 | 12 | public void delete(UserTypesAFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ValidationAFooQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ValidationAFoo; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ValidationAFooQueriesCodegen extends AbstractQueries { 7 | 8 | public ValidationAFooQueriesCodegen() { 9 | super(ValidationAFoo.class); 10 | } 11 | 12 | public void delete(ValidationAFoo instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ValuesAQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ValuesA; 4 | import features.domain.ValuesAAlias; 5 | import joist.domain.AbstractQueries; 6 | import joist.domain.orm.queries.Select; 7 | 8 | abstract class ValuesAQueriesCodegen extends AbstractQueries { 9 | 10 | public ValuesAQueriesCodegen() { 11 | super(ValuesA.class); 12 | } 13 | 14 | public void delete(ValuesA instance) { 15 | super.delete(instance); 16 | } 17 | 18 | public ValuesA findByName(String name) { 19 | ValuesAAlias va0 = new ValuesAAlias("va0"); 20 | return Select.from(va0).where(va0.name.eq(name)).unique(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/codegen/java/features/domain/queries/ValuesBQueriesCodegen.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import features.domain.ValuesB; 4 | import joist.domain.AbstractQueries; 5 | 6 | abstract class ValuesBQueriesCodegen extends AbstractQueries { 7 | 8 | public ValuesBQueriesCodegen() { 9 | super(ValuesB.class); 10 | } 11 | 12 | public void delete(ValuesB instance) { 13 | super.delete(instance); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/Child.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class Child extends ChildCodegen { 4 | 5 | public Child() { 6 | } 7 | 8 | public Child(Parent parent, String name) { 9 | this.setParent(parent); 10 | this.setName(name); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ChildF.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ChildF extends ChildFCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ChildG.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ChildG extends ChildGCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ChildH.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ChildH extends ChildHCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ChildIA.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ChildIA extends ChildIACodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ChildIB.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ChildIB extends ChildIBCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/CodeADomainObject.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class CodeADomainObject extends CodeADomainObjectCodegen { 4 | 5 | public CodeADomainObject() { 6 | this.defaultName("the default name"); 7 | this.defaultCodeAColor(CodeAColor.BLUE); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/GrandChild.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class GrandChild extends GrandChildCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/HistoryEntry.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class HistoryEntry extends HistoryEntryCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceABase.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceABase extends InheritanceABaseCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceAOwner.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceAOwner extends InheritanceAOwnerCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceASubOne.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceASubOne extends InheritanceASubOneCodegen { 4 | 5 | public InheritanceASubOne() { 6 | } 7 | 8 | public InheritanceASubOne(String name, String one) { 9 | this.setName(name); 10 | this.setOne(one); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceASubOneChild.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceASubOneChild extends InheritanceASubOneChildCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceASubTwo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceASubTwo extends InheritanceASubTwoCodegen { 4 | 5 | public InheritanceASubTwo() { 6 | } 7 | 8 | public InheritanceASubTwo(String name, String two) { 9 | this.setName(name); 10 | this.setTwo(two); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceAThing.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceAThing extends InheritanceAThingCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceBBottom.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceBBottom extends InheritanceBBottomCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceBMiddle.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceBMiddle extends InheritanceBMiddleCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceBRoot.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceBRoot extends InheritanceBRootCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceBRootChild.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceBRootChild extends InheritanceBRootChildCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceC.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceC extends InheritanceCCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceCFoo1.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceCFoo1 extends InheritanceCFoo1Codegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/InheritanceCFoo2.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class InheritanceCFoo2 extends InheritanceCFoo2Codegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyABar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyABar extends ManyToManyABarCodegen { 4 | 5 | public ManyToManyABar() { 6 | } 7 | 8 | public ManyToManyABar(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyAFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyAFoo extends ManyToManyAFooCodegen { 4 | 5 | public ManyToManyAFoo() { 6 | } 7 | 8 | public ManyToManyAFoo(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyAFooToBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyAFooToBar extends ManyToManyAFooToBarCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyBBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyBBar extends ManyToManyBBarCodegen { 4 | 5 | public ManyToManyBBar() { 6 | } 7 | 8 | public ManyToManyBBar(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyBFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyBFoo extends ManyToManyBFooCodegen { 4 | 5 | public ManyToManyBFoo() { 6 | } 7 | 8 | public ManyToManyBFoo(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ManyToManyBFooToBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ManyToManyBFooToBar extends ManyToManyBFooToBarCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/OneToOneABar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class OneToOneABar extends OneToOneABarCodegen { 4 | 5 | public OneToOneABar() { 6 | } 7 | 8 | public OneToOneABar(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/OneToOneAFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class OneToOneAFoo extends OneToOneAFooCodegen { 4 | 5 | public OneToOneAFoo() { 6 | } 7 | 8 | public OneToOneAFoo(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/OneToOneBBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class OneToOneBBar extends OneToOneBBarCodegen { 4 | 5 | public OneToOneBBar() { 6 | } 7 | 8 | public OneToOneBBar(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/OneToOneBFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class OneToOneBFoo extends OneToOneBFooCodegen { 4 | 5 | public OneToOneBFoo() { 6 | } 7 | 8 | public OneToOneBFoo(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/Parent.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class Parent extends ParentCodegen { 4 | 5 | public Parent() { 6 | } 7 | 8 | public Parent(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentBChildBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentBChildBar extends ParentBChildBarCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentBChildFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentBChildFoo extends ParentBChildFooCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentBChildZaz.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentBChildZaz extends ParentBChildZazCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentBParent.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentBParent extends ParentBParentCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentCBar.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentCBar extends ParentCBarCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentCFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentCFoo extends ParentCFooCodegen { 4 | 5 | public ParentCFoo() { 6 | } 7 | 8 | public ParentCFoo(String name) { 9 | this.setName(name); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentD.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentD extends ParentDCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentDChildA.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentDChildA extends ParentDChildACodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentDChildB.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentDChildB extends ParentDChildBCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentDChildC.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentDChildC extends ParentDChildCCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentDToChildC.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentDToChildC extends ParentDToChildCCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentE.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentE extends ParentECodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentF.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentF extends ParentFCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentG.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentG extends ParentGCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentH.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentH extends ParentHCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ParentI.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ParentI extends ParentICodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/Primitives.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class Primitives extends PrimitivesCodegen { 4 | 5 | public Primitives() { 6 | } 7 | 8 | public Primitives(String name) { 9 | this.setName(name); 10 | this.setFlag(false); 11 | } 12 | 13 | public Primitives flag(boolean flag) { 14 | this.setFlag(flag); 15 | return this; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/PrimitivesB.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class PrimitivesB extends PrimitivesBCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/PrimitivesC.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class PrimitivesC extends PrimitivesCCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/UserTypesAFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class UserTypesAFoo extends UserTypesAFooCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ValidationAFoo.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import joist.domain.util.converters.TextString; 4 | import joist.domain.validation.ValidationErrors; 5 | import joist.domain.validation.rules.Rule; 6 | 7 | public class ValidationAFoo extends ValidationAFooCodegen { 8 | 9 | private static final Rule customRule = new Rule() { 10 | public void validate(ValidationErrors errors, ValidationAFoo foo) { 11 | if ("bar".equals(foo.getName())) { 12 | errors.addPropertyError(foo, "name", "must not be bar"); 13 | } 14 | if ("baz".equals(foo.getName())) { 15 | errors.addObjectError(foo, "is all messed up"); 16 | } 17 | } 18 | }; 19 | 20 | public ValidationAFoo() { 21 | this.addRule(customRule); 22 | } 23 | 24 | @Override 25 | public String toTextString() { 26 | return TextString.join(this.getName()); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ValuesA.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ValuesA extends ValuesACodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/ValuesB.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | public class ValuesB extends ValuesBCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.Child; 4 | import features.domain.Parent; 5 | 6 | public class ChildBuilder extends ChildBuilderCodegen { 7 | 8 | public ChildBuilder(Child instance) { 9 | super(instance); 10 | } 11 | 12 | @Override 13 | public ChildBuilder parent(Parent parent) { 14 | // a silly side affect so we can test this method gets called 15 | this.name("foo"); 16 | return super.parent(parent); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildFBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ChildF; 4 | 5 | public class ChildFBuilder extends ChildFBuilderCodegen { 6 | 7 | public ChildFBuilder(ChildF instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildGBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ChildG; 4 | 5 | public class ChildGBuilder extends ChildGBuilderCodegen { 6 | 7 | public ChildGBuilder(ChildG instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildHBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ChildH; 4 | 5 | public class ChildHBuilder extends ChildHBuilderCodegen { 6 | 7 | public ChildHBuilder(ChildH instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildIABuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ChildIA; 4 | 5 | public class ChildIABuilder extends ChildIABuilderCodegen { 6 | 7 | public ChildIABuilder(ChildIA instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ChildIBBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ChildIB; 4 | 5 | public class ChildIBBuilder extends ChildIBBuilderCodegen { 6 | 7 | public ChildIBBuilder(ChildIB instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/CodeADomainObjectBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.CodeADomainObject; 4 | 5 | public class CodeADomainObjectBuilder extends CodeADomainObjectBuilderCodegen { 6 | 7 | public CodeADomainObjectBuilder(CodeADomainObject instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/GrandChildBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.GrandChild; 4 | 5 | public class GrandChildBuilder extends GrandChildBuilderCodegen { 6 | 7 | public GrandChildBuilder(GrandChild instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/HistoryEntryBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.HistoryEntry; 4 | 5 | public class HistoryEntryBuilder extends HistoryEntryBuilderCodegen { 6 | 7 | public HistoryEntryBuilder(HistoryEntry instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceABaseBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceABase; 4 | 5 | public class InheritanceABaseBuilder extends InheritanceABaseBuilderCodegen { 6 | 7 | public InheritanceABaseBuilder(InheritanceABase instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceAOwnerBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceAOwner; 4 | 5 | public class InheritanceAOwnerBuilder extends InheritanceAOwnerBuilderCodegen { 6 | 7 | public InheritanceAOwnerBuilder(InheritanceAOwner instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceASubOneBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceASubOne; 4 | 5 | public class InheritanceASubOneBuilder extends InheritanceASubOneBuilderCodegen { 6 | 7 | public InheritanceASubOneBuilder(InheritanceASubOne instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceASubOneChildBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceASubOneChild; 4 | 5 | public class InheritanceASubOneChildBuilder extends InheritanceASubOneChildBuilderCodegen { 6 | 7 | public InheritanceASubOneChildBuilder(InheritanceASubOneChild instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceASubTwoBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceASubTwo; 4 | 5 | public class InheritanceASubTwoBuilder extends InheritanceASubTwoBuilderCodegen { 6 | 7 | public InheritanceASubTwoBuilder(InheritanceASubTwo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceAThingBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceAThing; 4 | 5 | public class InheritanceAThingBuilder extends InheritanceAThingBuilderCodegen { 6 | 7 | public InheritanceAThingBuilder(InheritanceAThing instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceBBottomBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceBBottom; 4 | 5 | public class InheritanceBBottomBuilder extends InheritanceBBottomBuilderCodegen { 6 | 7 | public InheritanceBBottomBuilder(InheritanceBBottom instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceBMiddleBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceBMiddle; 4 | 5 | public class InheritanceBMiddleBuilder extends InheritanceBMiddleBuilderCodegen { 6 | 7 | public InheritanceBMiddleBuilder(InheritanceBMiddle instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceBRootBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceBRoot; 4 | 5 | public class InheritanceBRootBuilder extends InheritanceBRootBuilderCodegen { 6 | 7 | public InheritanceBRootBuilder(InheritanceBRoot instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceBRootChildBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceBRootChild; 4 | 5 | public class InheritanceBRootChildBuilder extends InheritanceBRootChildBuilderCodegen { 6 | 7 | public InheritanceBRootChildBuilder(InheritanceBRootChild instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceCBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceC; 4 | 5 | public class InheritanceCBuilder extends InheritanceCBuilderCodegen { 6 | 7 | public InheritanceCBuilder(InheritanceC instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceCFoo1Builder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceCFoo1; 4 | 5 | public class InheritanceCFoo1Builder extends InheritanceCFoo1BuilderCodegen { 6 | 7 | public InheritanceCFoo1Builder(InheritanceCFoo1 instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/InheritanceCFoo2Builder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.InheritanceCFoo2; 4 | 5 | public class InheritanceCFoo2Builder extends InheritanceCFoo2BuilderCodegen { 6 | 7 | public InheritanceCFoo2Builder(InheritanceCFoo2 instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyABarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyABar; 4 | 5 | public class ManyToManyABarBuilder extends ManyToManyABarBuilderCodegen { 6 | 7 | public ManyToManyABarBuilder(ManyToManyABar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyAFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyAFoo; 4 | 5 | public class ManyToManyAFooBuilder extends ManyToManyAFooBuilderCodegen { 6 | 7 | public ManyToManyAFooBuilder(ManyToManyAFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyAFooToBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyAFooToBar; 4 | 5 | public class ManyToManyAFooToBarBuilder extends ManyToManyAFooToBarBuilderCodegen { 6 | 7 | public ManyToManyAFooToBarBuilder(ManyToManyAFooToBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyBBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyBBar; 4 | 5 | public class ManyToManyBBarBuilder extends ManyToManyBBarBuilderCodegen { 6 | 7 | public ManyToManyBBarBuilder(ManyToManyBBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyBFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyBFoo; 4 | 5 | public class ManyToManyBFooBuilder extends ManyToManyBFooBuilderCodegen { 6 | 7 | public ManyToManyBFooBuilder(ManyToManyBFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ManyToManyBFooToBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ManyToManyBFooToBar; 4 | 5 | public class ManyToManyBFooToBarBuilder extends ManyToManyBFooToBarBuilderCodegen { 6 | 7 | public ManyToManyBFooToBarBuilder(ManyToManyBFooToBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/OneToOneABarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.OneToOneABar; 4 | 5 | public class OneToOneABarBuilder extends OneToOneABarBuilderCodegen { 6 | 7 | public OneToOneABarBuilder(OneToOneABar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/OneToOneAFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.OneToOneAFoo; 4 | 5 | public class OneToOneAFooBuilder extends OneToOneAFooBuilderCodegen { 6 | 7 | public OneToOneAFooBuilder(OneToOneAFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/OneToOneBBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.OneToOneBBar; 4 | 5 | public class OneToOneBBarBuilder extends OneToOneBBarBuilderCodegen { 6 | 7 | public OneToOneBBarBuilder(OneToOneBBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/OneToOneBFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.OneToOneBFoo; 4 | 5 | public class OneToOneBFooBuilder extends OneToOneBFooBuilderCodegen { 6 | 7 | public OneToOneBFooBuilder(OneToOneBFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentBChildBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentBChildBar; 4 | 5 | public class ParentBChildBarBuilder extends ParentBChildBarBuilderCodegen { 6 | 7 | public ParentBChildBarBuilder(ParentBChildBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentBChildFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentBChildFoo; 4 | 5 | public class ParentBChildFooBuilder extends ParentBChildFooBuilderCodegen { 6 | 7 | public ParentBChildFooBuilder(ParentBChildFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentBChildZazBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentBChildZaz; 4 | 5 | public class ParentBChildZazBuilder extends ParentBChildZazBuilderCodegen { 6 | 7 | public ParentBChildZazBuilder(ParentBChildZaz instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentBParentBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentBParent; 4 | 5 | public class ParentBParentBuilder extends ParentBParentBuilderCodegen { 6 | 7 | public ParentBParentBuilder(ParentBParent instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.Parent; 4 | 5 | public class ParentBuilder extends ParentBuilderCodegen { 6 | 7 | public ParentBuilder(Parent instance) { 8 | super(instance); 9 | } 10 | 11 | @Override 12 | public String defaultName() { 13 | return "parent"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentCBarBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentCBar; 4 | 5 | public class ParentCBarBuilder extends ParentCBarBuilderCodegen { 6 | 7 | public ParentCBarBuilder(ParentCBar instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentCFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentCFoo; 4 | 5 | public class ParentCFooBuilder extends ParentCFooBuilderCodegen { 6 | 7 | public ParentCFooBuilder(ParentCFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentDBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentD; 4 | 5 | public class ParentDBuilder extends ParentDBuilderCodegen { 6 | 7 | public ParentDBuilder(ParentD instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentDChildABuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentDChildA; 4 | 5 | public class ParentDChildABuilder extends ParentDChildABuilderCodegen { 6 | 7 | public ParentDChildABuilder(ParentDChildA instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentDChildBBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentDChildB; 4 | 5 | public class ParentDChildBBuilder extends ParentDChildBBuilderCodegen { 6 | 7 | public ParentDChildBBuilder(ParentDChildB instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentDChildCBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentDChildC; 4 | 5 | public class ParentDChildCBuilder extends ParentDChildCBuilderCodegen { 6 | 7 | public ParentDChildCBuilder(ParentDChildC instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentDToChildCBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentDToChildC; 4 | 5 | public class ParentDToChildCBuilder extends ParentDToChildCBuilderCodegen { 6 | 7 | public ParentDToChildCBuilder(ParentDToChildC instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentEBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentE; 4 | 5 | public class ParentEBuilder extends ParentEBuilderCodegen { 6 | 7 | public ParentEBuilder(ParentE instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentFBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentF; 4 | 5 | public class ParentFBuilder extends ParentFBuilderCodegen { 6 | 7 | public ParentFBuilder(ParentF instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentGBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentG; 4 | 5 | public class ParentGBuilder extends ParentGBuilderCodegen { 6 | 7 | public ParentGBuilder(ParentG instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentHBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentH; 4 | 5 | public class ParentHBuilder extends ParentHBuilderCodegen { 6 | 7 | public ParentHBuilder(ParentH instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ParentIBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ParentI; 4 | 5 | public class ParentIBuilder extends ParentIBuilderCodegen { 6 | 7 | public ParentIBuilder(ParentI instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/PrimitivesBBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.PrimitivesB; 4 | 5 | public class PrimitivesBBuilder extends PrimitivesBBuilderCodegen { 6 | 7 | public PrimitivesBBuilder(PrimitivesB instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/PrimitivesBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.Primitives; 4 | 5 | public class PrimitivesBuilder extends PrimitivesBuilderCodegen { 6 | 7 | public PrimitivesBuilder(Primitives instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/PrimitivesCBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.PrimitivesC; 4 | 5 | public class PrimitivesCBuilder extends PrimitivesCBuilderCodegen { 6 | 7 | public PrimitivesCBuilder(PrimitivesC instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/UserTypesAFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.UserTypesAFoo; 4 | 5 | public class UserTypesAFooBuilder extends UserTypesAFooBuilderCodegen { 6 | 7 | public UserTypesAFooBuilder(UserTypesAFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ValidationAFooBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ValidationAFoo; 4 | 5 | public class ValidationAFooBuilder extends ValidationAFooBuilderCodegen { 6 | 7 | public ValidationAFooBuilder(ValidationAFoo instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ValuesABuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ValuesA; 4 | 5 | public class ValuesABuilder extends ValuesABuilderCodegen { 6 | 7 | public ValuesABuilder(ValuesA instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/builders/ValuesBBuilder.java: -------------------------------------------------------------------------------- 1 | package features.domain.builders; 2 | 3 | import features.domain.ValuesB; 4 | 5 | public class ValuesBBuilder extends ValuesBBuilderCodegen { 6 | 7 | public ValuesBBuilder(ValuesB instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildFQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ChildFQueries extends ChildFQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildGQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ChildGQueries extends ChildGQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildHQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ChildHQueries extends ChildHQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildIAQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ChildIAQueries extends ChildIAQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildIBQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ChildIBQueries extends ChildIBQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ChildQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.orm.queries.Select; 6 | import features.domain.Child; 7 | import features.domain.ChildAlias; 8 | import features.domain.ParentAlias; 9 | 10 | public class ChildQueries extends ChildQueriesCodegen { 11 | 12 | public List findForParentOfName(String name) { 13 | // SELECT * FROM child c 14 | // INNER JOIN parent p ON p.id = c.parent_id 15 | // WHERE p.name = :name 16 | // ORDER BY c.name 17 | 18 | ChildAlias c = new ChildAlias("c"); 19 | ParentAlias p = new ParentAlias("p"); 20 | Select q = Select.from(c); 21 | q.join(p.on(c.parent)); 22 | q.where(p.name.eq(name)); 23 | q.orderBy(c.name.asc()); 24 | return q.list(); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/CodeADomainObjectQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class CodeADomainObjectQueries extends CodeADomainObjectQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/GrandChildQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class GrandChildQueries extends GrandChildQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/HistoryEntryQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class HistoryEntryQueries extends HistoryEntryQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceABaseQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.orm.queries.Select; 6 | import features.domain.InheritanceABase; 7 | import features.domain.InheritanceABaseAlias; 8 | 9 | public class InheritanceABaseQueries extends InheritanceABaseQueriesCodegen { 10 | 11 | public List findAll() { 12 | InheritanceABaseAlias b = new InheritanceABaseAlias("b"); 13 | return Select.from(b).orderBy(b.id.asc()).list(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceAOwnerQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceAOwnerQueries extends InheritanceAOwnerQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceASubOneChildQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceASubOneChildQueries extends InheritanceASubOneChildQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceASubOneQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.orm.queries.Select; 6 | import features.domain.InheritanceASubOne; 7 | import features.domain.InheritanceASubOneAlias; 8 | 9 | public class InheritanceASubOneQueries extends InheritanceASubOneQueriesCodegen { 10 | 11 | public List findAll() { 12 | InheritanceASubOneAlias sa = new InheritanceASubOneAlias("sa"); 13 | return Select.from(sa).list(); 14 | } 15 | 16 | public InheritanceASubOne findByName(String name) { 17 | InheritanceASubOneAlias sa = new InheritanceASubOneAlias("sa"); 18 | Select q = Select.from(sa); 19 | q.where(sa.name.eq(name)); 20 | return q.unique(); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceASubTwoQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceASubTwoQueries extends InheritanceASubTwoQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceAThingQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceAThingQueries extends InheritanceAThingQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceBBottomQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceBBottomQueries extends InheritanceBBottomQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceBMiddleQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceBMiddleQueries extends InheritanceBMiddleQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceBRootChildQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceBRootChildQueries extends InheritanceBRootChildQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceBRootQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceBRootQueries extends InheritanceBRootQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceCFoo1Queries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceCFoo1Queries extends InheritanceCFoo1QueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceCFoo2Queries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceCFoo2Queries extends InheritanceCFoo2QueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/InheritanceCQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class InheritanceCQueries extends InheritanceCQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyABarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyABarQueries extends ManyToManyABarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyAFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyAFooQueries extends ManyToManyAFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyAFooToBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyAFooToBarQueries extends ManyToManyAFooToBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyBBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyBBarQueries extends ManyToManyBBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyBFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyBFooQueries extends ManyToManyBFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ManyToManyBFooToBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ManyToManyBFooToBarQueries extends ManyToManyBFooToBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/OneToOneABarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class OneToOneABarQueries extends OneToOneABarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/OneToOneAFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class OneToOneAFooQueries extends OneToOneAFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/OneToOneBBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class OneToOneBBarQueries extends OneToOneBBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/OneToOneBFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class OneToOneBFooQueries extends OneToOneBFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentBChildBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentBChildBarQueries extends ParentBChildBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentBChildFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.orm.queries.Select; 6 | import features.domain.ParentBChildFoo; 7 | import features.domain.ParentBChildFooAlias; 8 | import features.domain.ParentBParentAlias; 9 | 10 | public class ParentBChildFooQueries extends ParentBChildFooQueriesCodegen { 11 | 12 | public List findByParentName(String name) { 13 | ParentBParentAlias p = new ParentBParentAlias("p"); 14 | ParentBChildFooAlias f = new ParentBChildFooAlias("f"); 15 | 16 | Select q = Select.from(f); 17 | q.join(p.on(f.parentBParent)); 18 | q.where(p.name.eq(name)); 19 | return q.list(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentBChildZazQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentBChildZazQueries extends ParentBChildZazQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentBParentQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentBParentQueries extends ParentBParentQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentCBarQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentCBarQueries extends ParentCBarQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentCFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentCFooQueries extends ParentCFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentDChildAQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentDChildAQueries extends ParentDChildAQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentDChildBQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentDChildBQueries extends ParentDChildBQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentDChildCQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentDChildCQueries extends ParentDChildCQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentDQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentDQueries extends ParentDQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentDToChildCQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentDToChildCQueries extends ParentDToChildCQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentEQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentEQueries extends ParentEQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentFQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentFQueries extends ParentFQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentGQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentGQueries extends ParentGQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentHQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentHQueries extends ParentHQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ParentIQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ParentIQueries extends ParentIQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/UserTypesAFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.orm.queries.Select; 6 | 7 | import com.domainlanguage.time.CalendarDate; 8 | import com.domainlanguage.time.CalendarInterval; 9 | 10 | import features.domain.UserTypesAFoo; 11 | import features.domain.UserTypesAFooAlias; 12 | 13 | public class UserTypesAFooQueries extends UserTypesAFooQueriesCodegen { 14 | 15 | public UserTypesAFoo findByCreated(CalendarDate on) { 16 | UserTypesAFooAlias utaf = new UserTypesAFooAlias("utaf"); 17 | return Select.from(utaf).where(utaf.created.eq(on)).unique(); 18 | } 19 | 20 | public List findByCreatedWithin(CalendarInterval interval) { 21 | UserTypesAFooAlias utaf = new UserTypesAFooAlias("utaf"); 22 | return Select.from(utaf).where(utaf.created.within(interval)).list(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ValidationAFooQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ValidationAFooQueries extends ValidationAFooQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ValuesAQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ValuesAQueries extends ValuesAQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/java/features/domain/queries/ValuesBQueries.java: -------------------------------------------------------------------------------- 1 | package features.domain.queries; 2 | 3 | public class ValuesBQueries extends ValuesBQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /features/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO, console 3 | 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 7 | 8 | log4j.logger.joist = FINE 9 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/cli/Cli.java: -------------------------------------------------------------------------------- 1 | package features.cli; 2 | 3 | import joist.util.Reflection; 4 | 5 | import org.apache.commons.lang.StringUtils; 6 | 7 | public class Cli { 8 | 9 | public static void main(String[] args) { 10 | for (String arg : args) { 11 | String[] parts = StringUtils.split(arg, ".", 2); 12 | Object task = Reflection.newInstance("features.cli." + parts[0]); 13 | Reflection.invoke(parts[1], task); 14 | } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0000.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createTable; 4 | import static joist.migrations.MigrationKeywords.execute; 5 | import static joist.migrations.MigrationKeywords.integer; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0000 extends AbstractMigration { 9 | 10 | public m0000() { 11 | super("Create schema_version."); 12 | } 13 | 14 | public void apply() { 15 | createTable("schema_version", integer("update_lock"), integer("version")); 16 | execute("INSERT INTO schema_version (update_lock, version) values (1, -1)"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0001.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.bool; 4 | import static joist.migrations.MigrationKeywords.createTable; 5 | import static joist.migrations.MigrationKeywords.integer; 6 | import static joist.migrations.MigrationKeywords.primaryKey; 7 | import static joist.migrations.MigrationKeywords.varchar; 8 | import joist.migrations.AbstractMigration; 9 | 10 | public class m0001 extends AbstractMigration { 11 | 12 | public m0001() { 13 | super("Table with primitives."); 14 | } 15 | 16 | public void apply() { 17 | createTable("primitives", // 18 | primaryKey("id"), 19 | bool("flag"), 20 | varchar("name").unique(), 21 | varchar("skipped").nullable(), 22 | integer("version")); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0008.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createTable; 4 | import static joist.migrations.MigrationKeywords.date; 5 | import static joist.migrations.MigrationKeywords.integer; 6 | import static joist.migrations.MigrationKeywords.primaryKey; 7 | import static joist.migrations.MigrationKeywords.varchar; 8 | import joist.migrations.AbstractMigration; 9 | 10 | public class m0008 extends AbstractMigration { 11 | 12 | public m0008() { 13 | super("User types with timeandmoney."); 14 | } 15 | 16 | public void apply() { 17 | createTable("user_types_a_foo", primaryKey("id"), varchar("name"), date("created"), integer("version")); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0009.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createTable; 4 | import static joist.migrations.MigrationKeywords.integer; 5 | import static joist.migrations.MigrationKeywords.primaryKey; 6 | import static joist.migrations.MigrationKeywords.varchar; 7 | import joist.migrations.AbstractMigration; 8 | 9 | public class m0009 extends AbstractMigration { 10 | 11 | public m0009() { 12 | super("ValidationA."); 13 | } 14 | 15 | public void apply() { 16 | createTable("validation_a_foo", primaryKey("id"), varchar("name"), integer("version")); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0015.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.createSubclassTable; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0015 extends AbstractMigration { 9 | 10 | public m0015() { 11 | super("InheritanceC."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("inheritance_c", varchar("name")); 16 | createSubclassTable("inheritance_c", "inheritance_c_foo1", varchar("foo")); 17 | createSubclassTable("inheritance_c", "inheritance_c_foo2", varchar("foo")); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0018.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.foreignKey; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0018 extends AbstractMigration { 9 | 10 | public m0018() { 11 | super("Self referencing ParentE."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("parent_e", foreignKey("parent_e").nullable(), varchar("name")); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0020.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.addNotNull; 4 | import static joist.migrations.MigrationKeywords.dropColumn; 5 | import static joist.migrations.MigrationKeywords.dropNotNull; 6 | import static joist.migrations.MigrationKeywords.dropUniqueConstraint; 7 | import joist.migrations.AbstractMigration; 8 | 9 | public class m0020 extends AbstractMigration { 10 | 11 | public m0020() { 12 | super("dropNotNull/addNotNull part 2."); 13 | } 14 | 15 | public void apply() { 16 | dropNotNull("values_a", "i"); 17 | dropNotNull("values_a", "a"); 18 | addNotNull("values_a", "j"); 19 | addNotNull("values_a", "b"); 20 | dropUniqueConstraint("values_a", "name"); 21 | dropColumn("values_a", "primitives_id"); 22 | dropColumn("values_a", "description"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0021.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.addUniqueConstraint; 4 | import joist.migrations.AbstractMigration; 5 | 6 | public class m0021 extends AbstractMigration { 7 | 8 | public m0021() { 9 | super("dropNotNull/addNotNull part 3."); 10 | } 11 | 12 | public void apply() { 13 | addUniqueConstraint("values_a", "name"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0022.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.datetime; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0022 extends AbstractMigration { 9 | 10 | public m0022() { 11 | super("Nullable datetime column."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("values_b", varchar("name"), datetime("start").nullable()); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0023.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.renameColumn; 4 | import joist.migrations.AbstractMigration; 5 | 6 | public class m0023 extends AbstractMigration { 7 | 8 | public m0023() { 9 | super("Rename column."); 10 | } 11 | 12 | public void apply() { 13 | renameColumn("parent", "name", "name_2"); 14 | renameColumn("parent", "name_2", "name"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0024.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.changeOwner; 4 | import joist.migrations.AbstractMigration; 5 | import joist.migrations.columns.ForeignKeyColumn.Owner; 6 | 7 | public class m0024 extends AbstractMigration { 8 | 9 | public m0024() { 10 | super("Change owner."); 11 | } 12 | 13 | public void apply() { 14 | changeOwner("child", "parent_id", Owner.IsMe); 15 | changeOwner("child", "parent_id", Owner.IsThem); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0025.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.foreignKey; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0025 extends AbstractMigration { 9 | 10 | public m0025() { 11 | super("Table with foreign key that uses ownerIsMe."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("child_f", varchar("name")); 16 | createEntityTable("parent_f", // 17 | foreignKey("child_one_id", "child_f", "id").ownerIsMe(), 18 | foreignKey("child_two_id", "child_f", "id").ownerIsMe().nullable(), 19 | varchar("name")); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0026.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.foreignKey; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0026 extends AbstractMigration { 9 | 10 | public m0026() { 11 | super("Table with one-to-one foreign key that uses ownerIsThem."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("parent_g", varchar("name")); 16 | createEntityTable("child_g",// 17 | foreignKey("parent_one_id", "parent_g").ownerIsThem().unique(), 18 | foreignKey("parent_two_id", "parent_g").ownerIsThem().nullable().unique(), 19 | varchar("name")); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0027.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.bigint; 4 | import static joist.migrations.MigrationKeywords.createEntityTable; 5 | import static joist.migrations.MigrationKeywords.foreignKey; 6 | import static joist.migrations.MigrationKeywords.varchar; 7 | import joist.migrations.AbstractMigration; 8 | 9 | public class m0027 extends AbstractMigration { 10 | 11 | public m0027() { 12 | super("Parent with threshold and children with quantity. Interesting query is for children with sum(quantity) over threshold"); 13 | } 14 | 15 | public void apply() { 16 | createEntityTable("parent_h", varchar("name"), bigint("threshold")); 17 | createEntityTable("child_h",// 18 | foreignKey("parent_id", "parent_h").ownerIsThem(), 19 | varchar("name"), 20 | bigint("quantity")); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0028.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.foreignKey; 5 | import joist.migrations.AbstractMigration; 6 | 7 | public class m0028 extends AbstractMigration { 8 | 9 | public m0028() { 10 | super("Parent with custom one-to-many names."); 11 | } 12 | 13 | public void apply() { 14 | createEntityTable("parent_i"); 15 | createEntityTable("child_i_a", foreignKey("parent_id", "parent_i").ownerIsThem()); 16 | createEntityTable("child_i_b", foreignKey("parent_id", "parent_i").ownerIsThem().unique()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0029.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.createEntityTable; 4 | import static joist.migrations.MigrationKeywords.foreignKey; 5 | import static joist.migrations.MigrationKeywords.varchar; 6 | import joist.migrations.AbstractMigration; 7 | 8 | public class m0029 extends AbstractMigration { 9 | 10 | public m0029() { 11 | super("Add a child entity of an sub entity."); 12 | } 13 | 14 | public void apply() { 15 | createEntityTable("inheritance_a_sub_one_child", varchar("name"), foreignKey("sub_id", "inheritance_a_sub_one")); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /features/src/migrations/java/features/migrations/m0030.java: -------------------------------------------------------------------------------- 1 | package features.migrations; 2 | 3 | import static joist.migrations.MigrationKeywords.addCode; 4 | import static joist.migrations.MigrationKeywords.removeCode; 5 | import joist.migrations.AbstractMigration; 6 | 7 | public class m0030 extends AbstractMigration { 8 | 9 | public m0030() { 10 | super("Remove code."); 11 | } 12 | 13 | public void apply() { 14 | addCode("code_a_size", "THREE", "Three"); 15 | removeCode("code_a_size", "THREE"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /features/src/migrations/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO, console 3 | 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 7 | 8 | log4j.logger.joist = FINE 9 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/AliasRegistryTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import org.junit.Test; 4 | 5 | public class AliasRegistryTest extends AbstractFeaturesTest { 6 | 7 | @Test 8 | public void testDoesNotBlowUpOnSubClass() { 9 | new Parent() { 10 | { 11 | this.setName("a"); 12 | } 13 | }; 14 | this.commitAndReOpen(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/BatchingTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import joist.domain.uow.UoW; 4 | 5 | import org.junit.Test; 6 | 7 | public class BatchingTest extends AbstractFeaturesTest { 8 | 9 | @Test 10 | public void testNoop() { 11 | } 12 | 13 | @Test 14 | public void testBatch() { 15 | int number = 0; // change when testing batching 16 | 17 | Parent[] ps = new Parent[number]; 18 | for (int i = 0; i < number; i++) { 19 | ps[i] = new Parent("parent" + i); 20 | } 21 | UoW.commit(); 22 | 23 | for (int i = 0; i < number; i++) { 24 | ps[i].setName("Parent" + i); 25 | } 26 | UoW.commit(); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/DateTimeTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import static features.domain.builders.Builders.aValuesB; 4 | import static features.domain.builders.Builders.theValuesB; 5 | import static org.hamcrest.CoreMatchers.is; 6 | import static org.hamcrest.CoreMatchers.nullValue; 7 | import static org.junit.Assert.assertThat; 8 | 9 | import org.junit.Test; 10 | 11 | public class DateTimeTest extends AbstractFeaturesTest { 12 | 13 | @Test 14 | public void testNullDatetime() { 15 | aValuesB().name("foo"); 16 | this.commitAndReOpen(); 17 | assertThat(theValuesB(1).start(), is(nullValue())); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/DomainObjectTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import static org.hamcrest.CoreMatchers.is; 4 | import static org.junit.Assert.assertThat; 5 | import static org.junit.Assert.fail; 6 | 7 | import org.junit.Test; 8 | 9 | public class DomainObjectTest extends AbstractFeaturesTest { 10 | 11 | @Test 12 | public void testIdCannotChange() { 13 | Parent p = new Parent("parent"); 14 | this.commitAndReOpen(); 15 | p = this.reload(p); 16 | try { 17 | p.setId(10l); 18 | fail(); 19 | } catch (IllegalStateException ise) { 20 | assertThat(ise.getMessage(), is("Parent[1] id cannot be changed")); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/OuterJoinFetchingTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import java.util.List; 4 | 5 | import joist.domain.uow.UoW; 6 | 7 | import org.junit.Assert; 8 | import org.junit.Test; 9 | 10 | public class OuterJoinFetchingTest extends AbstractFeaturesTest { 11 | 12 | @Test 13 | public void testWithoutFetching() { 14 | Parent p = new Parent("parent"); 15 | new Child(p, "child1"); 16 | this.commitAndReOpen(); 17 | 18 | List l = Parent.queries.findWithoutChildFetch(); 19 | Assert.assertEquals(1, l.size()); 20 | Assert.assertEquals(1, UoW.getIdentityMap().size()); 21 | } 22 | 23 | // no outer join fetching is implemented yet 24 | 25 | } 26 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/ParentCTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class ParentCTest extends AbstractFeaturesTest { 7 | 8 | @Test 9 | public void testTwoParents() { 10 | ParentCBar bar = new ParentCBar(); 11 | bar.setName("bar"); 12 | bar.setFirstParent(new ParentCFoo("foo1")); 13 | bar.setSecondParent(new ParentCFoo("foo2")); 14 | this.commitAndReOpen(); 15 | 16 | bar = this.reload(bar); 17 | Assert.assertEquals("foo1", bar.getFirstParent().getName()); 18 | Assert.assertEquals("foo2", bar.getSecondParent().getName()); 19 | Assert.assertEquals(bar, bar.getFirstParent().getFirstParentParentCBars().get(0)); 20 | Assert.assertEquals(bar, bar.getSecondParent().getSecondParentParentCBars().get(0)); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/ParentHTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import org.junit.Test; 4 | 5 | public class ParentHTest { 6 | 7 | @Test 8 | public void testNameOfTheOneToManyProperty() { 9 | ParentH p = new ParentH(); 10 | // child has a column called "parent_id" instead of "parent_h_id", so before a tweak 11 | // to codegen, this was coming out as p.getParentChildHs() when really it can just 12 | // be getChildHs() without the "Parent" prefix. 13 | p.getChildHs(); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/PrimitivesBAggregatesTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import static features.domain.builders.Builders.aPrimitivesB; 4 | import static org.hamcrest.CoreMatchers.is; 5 | import static org.junit.Assert.assertThat; 6 | 7 | import org.junit.Test; 8 | 9 | public class PrimitivesBAggregatesTest extends AbstractFeaturesTest { 10 | 11 | @Test 12 | public void testSumSmallInt() { 13 | aPrimitivesB().small1((short) 10).defaults(); 14 | this.commitAndReOpen(); 15 | assertThat(PrimitivesB.queries.sumShort(), is((short) 10)); 16 | } 17 | 18 | @Test 19 | public void testCountSmallInt() { 20 | aPrimitivesB().small1((short) 10).defaults(); 21 | this.commitAndReOpen(); 22 | assertThat(PrimitivesB.queries.countShort(), is(1L)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /features/src/test/java/features/domain/PrimitivesRegexRuleTest.java: -------------------------------------------------------------------------------- 1 | package features.domain; 2 | 3 | import joist.domain.ValidationAssert; 4 | import joist.domain.validation.rules.RegexRule; 5 | 6 | import org.junit.Test; 7 | 8 | public class PrimitivesRegexRuleTest extends AbstractFeaturesTest { 9 | 10 | @Test 11 | public void testDoesNotMatches() { 12 | Primitives p = new Primitives("p"); 13 | p.addRule(new RegexRule("name", "pp", PrimitivesCodegen.Shims.name)); 14 | ValidationAssert.assertErrors(p, "Name is invalid"); 15 | } 16 | 17 | @Test 18 | public void testMatches() { 19 | Primitives p = new Primitives("pop"); 20 | p.addRule(new RegexRule("name", "p.p", PrimitivesCodegen.Shims.name)); 21 | ValidationAssert.assertValid(p); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /features/src/test/java/log4j-test.properties: -------------------------------------------------------------------------------- 1 | log4j.rootCategory=INFO, S 2 | 3 | log4j.appender.S = org.apache.log4j.ConsoleAppender 4 | log4j.appender.S.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.S.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-30c{1} [%-5p] %m%n 6 | 7 | log4j.logger.joist = TRACE 8 | 9 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stephenh/joist-java/41dda3478a6a163d914a49191fbe4cb6d28c54e4/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Sat Sep 08 19:00:52 CDT 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10-all.zip 7 | -------------------------------------------------------------------------------- /migrations/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:19:08 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /migrations/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /migrations/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:04:56 CST 2011 2 | eclipse.preferences.version=1 3 | instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true 4 | line.separator=\n 5 | -------------------------------------------------------------------------------- /migrations/.settings/org.moreunit.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.moreunit.preferences.version=2 3 | org.moreunit.test_type=junit4 4 | org.moreunit.unitsourcefolder=joist-migrations\:src/main/java\:joist-migrations\:src/main/test 5 | org.moreunit.useprojectsettings=true 6 | -------------------------------------------------------------------------------- /migrations/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile project(':domain') 4 | 5 | testCompile 'junit:junit:4.12' 6 | } 7 | 8 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/InformationSchemaColumn.java: -------------------------------------------------------------------------------- 1 | package joist.codegen; 2 | 3 | public class InformationSchemaColumn implements Comparable { 4 | 5 | public String name; 6 | public String tableName; 7 | public String dataType; 8 | public int maximumLength; 9 | public boolean nullable; 10 | public String defaultValue; 11 | public boolean primaryKey; 12 | public boolean unique; 13 | public String foreignKeyConstraintName; 14 | public String foreignKeyTableName; 15 | public String foreignKeyColumnName; 16 | 17 | public int compareTo(InformationSchemaColumn other) { 18 | return this.toString().compareTo(other.toString()); 19 | } 20 | 21 | public String toString() { 22 | return this.tableName + "." + this.name; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/MarkedList.java: -------------------------------------------------------------------------------- 1 | package joist.codegen; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * Keeps track of what values have been checked via {@code get} calls. 8 | * 9 | * Primarily used to detect out-of-date config settings. 10 | */ 11 | public class MarkedList extends ArrayList { 12 | 13 | private static final long serialVersionUID = 1L; 14 | private final List checked = new ArrayList(); 15 | 16 | @Override 17 | @SuppressWarnings("unchecked") 18 | public boolean contains(Object object) { 19 | this.checked.add((T) object); 20 | return super.contains(object); 21 | } 22 | 23 | public List getStaleValues() { 24 | List copy = new ArrayList(this); 25 | copy.removeAll(this.checked); 26 | return copy; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/dtos/CodeEntity.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.dtos; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | import joist.codegen.Config; 7 | 8 | /** Represents tables that generated as enums but are still foreign keys in the database. */ 9 | public class CodeEntity extends Entity { 10 | 11 | private List codes = new ArrayList(); 12 | 13 | public CodeEntity(Config config, String tableName) { 14 | super(config, tableName); 15 | } 16 | 17 | @Override 18 | public boolean isCodeEntity() { 19 | return true; 20 | } 21 | 22 | public void addCode(String id, String code, String name) { 23 | this.codes.add(new CodeValue(id, code, name)); 24 | } 25 | 26 | public List getCodes() { 27 | return this.codes; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/dtos/CodeValue.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.dtos; 2 | 3 | import joist.util.Inflector; 4 | 5 | public class CodeValue { 6 | 7 | public String id; 8 | public String code; 9 | public String name; 10 | 11 | public CodeValue(String id, String code, String name) { 12 | this.id = id; 13 | this.code = code; 14 | this.name = name; 15 | } 16 | 17 | public String getNameCamelCased() { 18 | return Inflector.capitalize(Inflector.camelize(this.code.toLowerCase())); 19 | } 20 | 21 | public String getEnumName() { 22 | if (this.code.matches("^[0-9].*")) { 23 | return "_" + this.code; 24 | } 25 | return this.code; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/passes/GenerateDomainClassIfNotExistsPass.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.passes; 2 | 3 | import joist.codegen.Codegen; 4 | import joist.codegen.dtos.Entity; 5 | import joist.sourcegen.GClass; 6 | 7 | public class GenerateDomainClassIfNotExistsPass implements Pass { 8 | 9 | public void pass(Codegen codegen) { 10 | for (Entity entity : codegen.getSchema().getEntities().values()) { 11 | if (entity.isCodeEntity()) { 12 | continue; 13 | } 14 | if (!codegen.getOutputSourceDirectory().exists(entity.getFullClassName())) { 15 | GClass domain = codegen.getOutputSourceDirectory().getClass(entity.getFullClassName()); 16 | domain.baseClassName(entity.getFullCodegenClassName()); 17 | } else { 18 | codegen.getOutputSourceDirectory().markTouched(entity.getFullClassName()); 19 | } 20 | } 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/passes/GenerateQueriesIfNotExistsPass.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.passes; 2 | 3 | import joist.codegen.Codegen; 4 | import joist.codegen.dtos.Entity; 5 | import joist.sourcegen.GClass; 6 | 7 | public class GenerateQueriesIfNotExistsPass implements Pass { 8 | 9 | public void pass(Codegen codegen) { 10 | for (Entity entity : codegen.getSchema().getEntities().values()) { 11 | if (entity.isCodeEntity()) { 12 | continue; 13 | } 14 | if (!codegen.getOutputSourceDirectory().exists(entity.getFullQueriesClassName())) { 15 | GClass queries = codegen.getOutputSourceDirectory().getClass(entity.getFullQueriesClassName()); 16 | queries.baseClassName(entity.getFullQueriesCodegenClassName()); 17 | } else { 18 | codegen.getOutputSourceDirectory().markTouched(entity.getFullQueriesClassName()); 19 | } 20 | } 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/passes/GenerateSchemaHash.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.passes; 2 | 3 | import joist.codegen.Codegen; 4 | import joist.sourcegen.GClass; 5 | import joist.sourcegen.GField; 6 | 7 | public class GenerateSchemaHash implements Pass { 8 | 9 | public void pass(Codegen codegen) { 10 | GClass schemaHash = codegen.getOutputCodegenDirectory().getClass(codegen.getConfig().getDomainObjectPackage() + ".SchemaHash"); 11 | GField field = schemaHash.getField("hashCode").setPublic().setStatic().setFinal().type("int"); 12 | field.initialValue("{}", codegen.getSchema().getSchemaHashCode()); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/codegen/passes/Pass.java: -------------------------------------------------------------------------------- 1 | package joist.codegen.passes; 2 | 3 | public interface Pass { 4 | 5 | void pass(T parameter); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/AbstractMigration.java: -------------------------------------------------------------------------------- 1 | package joist.migrations; 2 | 3 | import java.sql.SQLException; 4 | 5 | /** A base class with nice helper methods for updates to extend. */ 6 | public abstract class AbstractMigration implements Migration { 7 | 8 | private String description; 9 | 10 | protected AbstractMigration(String description) { 11 | this.description = description; 12 | } 13 | 14 | public String toString() { 15 | return this.description; 16 | } 17 | 18 | public abstract void apply() throws SQLException; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/Migration.java: -------------------------------------------------------------------------------- 1 | package joist.migrations; 2 | 3 | import java.sql.SQLException; 4 | 5 | public interface Migration { 6 | 7 | void apply() throws SQLException; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/BigIntColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class BigIntColumn extends AbstractColumn { 4 | 5 | public BigIntColumn(String name) { 6 | super(name, "bigint"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/BooleanColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import joist.migrations.MigrationKeywords; 4 | 5 | public class BooleanColumn extends AbstractColumn { 6 | 7 | public BooleanColumn(String name) { 8 | super(name, MigrationKeywords.isMySQL() ? "bit" : "boolean"); 9 | } 10 | 11 | public BooleanColumn defaultTrue() { 12 | return this.defaultValue(MigrationKeywords.isMySQL() ? "1" : "true"); 13 | } 14 | 15 | public BooleanColumn defaultFalse() { 16 | return this.defaultValue(MigrationKeywords.isMySQL() ? "0" : "false"); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/ByteaColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class ByteaColumn extends AbstractColumn { 4 | 5 | public ByteaColumn(String name) { 6 | super(name, "bytea"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/CharColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class CharColumn extends AbstractColumn { 4 | 5 | private Integer length; 6 | 7 | public CharColumn(String name, Integer length) { 8 | super(name, "char"); 9 | this.length = length; 10 | } 11 | 12 | public String toSql() { 13 | if (this.length != null) { 14 | return this.getQuotedName() + " char(" + this.length + ")"; 15 | } else { 16 | return super.toSql(); 17 | } 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/Column.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import java.util.List; 4 | 5 | public interface Column { 6 | 7 | boolean isNullable(); 8 | 9 | boolean hasDefault(); 10 | 11 | String getName(); 12 | 13 | void setTableName(String tableName); 14 | 15 | String toSql(); 16 | 17 | List postInjectCommands(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/ConstraintNamer.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import joist.migrations.columns.ForeignKeyColumn.Owner; 4 | 5 | /** 6 | * Abstraction for naming constraints. 7 | * 8 | * This is actually tricky as, due to length requirements, sometimes 9 | * you can't just concatenate together table + column names. 10 | */ 11 | interface ConstraintNamer { 12 | 13 | String name(Owner owner); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/DateColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | /** Store YYYY-MM-DD. */ 4 | public class DateColumn extends AbstractColumn { 5 | 6 | public DateColumn(String name) { 7 | super(name, "date"); 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/DatetimeColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import joist.migrations.MigrationKeywords; 4 | 5 | public class DatetimeColumn extends AbstractColumn { 6 | 7 | public DatetimeColumn(String name) { 8 | super(name, MigrationKeywords.isMySQL() ? "datetime" : "timestamp"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/HackyConstraintNamer.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import joist.migrations.columns.ForeignKeyColumn.Owner; 4 | import joist.util.Interpolate; 5 | 6 | class HackyConstraintNamer implements ConstraintNamer { 7 | 8 | // We need something short (64 char max constraint names), different, and 9 | // that will change each time we apply a new column. nanos might also work. 10 | private long hackyNextId = System.currentTimeMillis(); 11 | 12 | @Override 13 | public String name(Owner owner) { 14 | return Interpolate.string("c_{}_{}_fk", this.hackyNextId++, owner.toString().toLowerCase()); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/IntColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class IntColumn extends AbstractColumn { 4 | 5 | public IntColumn(String name) { 6 | super(name, "int"); 7 | } 8 | 9 | public IntColumn defaultValue(int value) { 10 | return super.defaultValue(Integer.toString(value)); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/MoneyColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class MoneyColumn extends AbstractColumn { 4 | 5 | public MoneyColumn(String name) { 6 | super(name, "int"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/SmallIntColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class SmallIntColumn extends AbstractColumn { 4 | 5 | public SmallIntColumn(String name) { 6 | super(name, "smallint"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/TextColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class TextColumn extends AbstractColumn { 4 | 5 | public TextColumn(String name) { 6 | super(name, "text"); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/columns/VarcharColumn.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | public class VarcharColumn extends AbstractColumn { 4 | 5 | private int length; 6 | 7 | public VarcharColumn(String name) { 8 | super(name, "varchar"); 9 | this.length = 100; 10 | } 11 | 12 | public VarcharColumn length(int length) { 13 | this.length = length; 14 | return this; 15 | } 16 | 17 | @Override 18 | public VarcharColumn defaultValue(String defaultValue) { 19 | return super.defaultValue("'" + defaultValue + "'"); 20 | } 21 | 22 | @Override 23 | public String getDataType() { 24 | return super.getDataType() + "(" + this.length + ")"; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/fill/ConstantFillInStrategy.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.fill; 2 | 3 | import java.sql.Connection; 4 | import java.sql.SQLException; 5 | 6 | import joist.jdbc.Jdbc; 7 | import joist.util.Wrap; 8 | 9 | public class ConstantFillInStrategy implements FillInStrategy { 10 | 11 | private String fragment; 12 | 13 | public ConstantFillInStrategy(String fragment) { 14 | this.fragment = fragment; 15 | } 16 | 17 | public ConstantFillInStrategy(int i) { 18 | this.fragment = String.valueOf(i); 19 | } 20 | 21 | public void fillIn(Connection connection, String tableName, String columnName) throws SQLException { 22 | Jdbc.update(// 23 | connection, 24 | "UPDATE " + Wrap.backquotes(tableName) + " SET " + columnName + " = " + this.fragment); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /migrations/src/main/java/joist/migrations/fill/FillInStrategy.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.fill; 2 | 3 | import java.sql.Connection; 4 | import java.sql.SQLException; 5 | 6 | public interface FillInStrategy { 7 | 8 | void fillIn(Connection connection, String tableName, String columnName) throws SQLException; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /migrations/src/main/test/joist/migrations/columns/PrimaryKeyColumnTest.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import static org.junit.Assert.assertEquals; 4 | import joist.codegen.Config; 5 | import joist.domain.orm.Db; 6 | import joist.migrations.MigrationKeywords; 7 | 8 | import org.junit.After; 9 | import org.junit.Before; 10 | import org.junit.Test; 11 | 12 | public class PrimaryKeyColumnTest { 13 | 14 | @Before 15 | public void setupDb() { 16 | MigrationKeywords.config = new Config("foo", "foo", Db.MYSQL); 17 | } 18 | 19 | @After 20 | public void restoreInt() { 21 | PrimaryKeyColumn.keyColumnType = "int"; 22 | } 23 | 24 | @Test 25 | public void unsignedColumnType() { 26 | PrimaryKeyColumn.keyColumnType = "int unsigned"; 27 | PrimaryKeyColumn p = new PrimaryKeyColumn("id"); 28 | assertEquals("\"id\" int unsigned AUTO_INCREMENT PRIMARY KEY", p.toSql()); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /migrations/src/main/test/joist/migrations/columns/StubConstraintNamer.java: -------------------------------------------------------------------------------- 1 | package joist.migrations.columns; 2 | 3 | import joist.migrations.columns.ForeignKeyColumn.Owner; 4 | import joist.util.Interpolate; 5 | 6 | class StubConstraintNamer implements ConstraintNamer { 7 | 8 | // Like the production one, but we want determinism so always start at 0 9 | private long nextId = 0; 10 | 11 | @Override 12 | public String name(Owner owner) { 13 | return Interpolate.string("c_{}_{}_fk", this.nextId++, owner.toString().toLowerCase()); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /perf/.settings/org.apache.ivyde.eclipse.prefs: -------------------------------------------------------------------------------- 1 | #Sun Oct 10 16:31:14 MDT 2010 2 | eclipse.preferences.version=1 3 | org.apache.ivyde.eclipse.standlaoneretrieve= 4 | -------------------------------------------------------------------------------- /perf/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /perf/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:04:59 CST 2011 2 | eclipse.preferences.version=1 3 | line.separator=\n 4 | -------------------------------------------------------------------------------- /perf/src/main/java/joist/perf/hibernate/GrandChild.java: -------------------------------------------------------------------------------- 1 | package joist.perf.hibernate; 2 | 3 | public class GrandChild { 4 | 5 | private Integer id; 6 | private String name; 7 | private Child child; 8 | private Integer version; 9 | 10 | public Integer getId() { 11 | return this.id; 12 | } 13 | 14 | public void setId(Integer id) { 15 | this.id = id; 16 | } 17 | 18 | public String getName() { 19 | return this.name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public Integer getVersion() { 27 | return this.version; 28 | } 29 | 30 | public void setVersion(Integer version) { 31 | this.version = version; 32 | } 33 | 34 | public Child getChild() { 35 | return this.child; 36 | } 37 | 38 | public void setChild(Child child) { 39 | this.child = child; 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /perf/src/main/java/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootCategory=INFO, S 3 | log4j.appender.S = org.apache.log4j.ConsoleAppender 4 | log4j.appender.S.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.S.layout.ConversionPattern = [%p] %d{HH:mm:ss} %c{1} %m%n 6 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | 2 | include 'util' 3 | include 'domain' 4 | include 'domain-testing' 5 | 6 | // Jitpack doesn't support db tests, but we run those in travis 7 | if (System.env.JITPACK != 'true') { 8 | include 'migrations' 9 | include 'features' 10 | } 11 | // include 'starter' 12 | 13 | -------------------------------------------------------------------------------- /starter/.gitignore: -------------------------------------------------------------------------------- 1 | codegen 2 | -------------------------------------------------------------------------------- /starter/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:19:13 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /starter/.settings/org.eclipse.jdt.ui.prefs: -------------------------------------------------------------------------------- 1 | cleanup_settings_version=2 2 | eclipse.preferences.version=1 3 | formatter_profile=_Joist Coding Standards 4 | formatter_settings_version=12 5 | -------------------------------------------------------------------------------- /starter/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | sourceSets { 3 | main { 4 | java { 5 | srcDir 'src/codegen/java' 6 | } 7 | } 8 | migrations 9 | } 10 | 11 | dependencies { 12 | compile project(':domain') 13 | compile 'org.slf4j:slf4j-log4j12:1.6.1' 14 | 15 | testCompile project(':domain-testing') 16 | testCompile 'org.postgresql:postgresql:42.2.2' 17 | testCompile 'mysql:mysql-connector-java:8.0.11' 18 | 19 | migrationsCompile project(':migrations') 20 | migrationsCompile 'org.postgresql:postgresql:42.2.2' 21 | migrationsCompile 'mysql:mysql-connector-java:8.0.11' 22 | migrationsCompile 'org.slf4j:slf4j-log4j12:1.6.1' 23 | } 24 | 25 | task cycle(type: JavaExec) { 26 | classpath sourceSets.migrations.runtimeClasspath 27 | main = 'starter.cli.Cli' 28 | args 'JoistCli.cycle' 29 | } 30 | cycle.dependsOn(migrationsClasses) 31 | compileJava.dependsOn(cycle) 32 | 33 | 34 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/Employee.java: -------------------------------------------------------------------------------- 1 | package starter.domain; 2 | 3 | public class Employee extends EmployeeCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/HistoryEntry.java: -------------------------------------------------------------------------------- 1 | package starter.domain; 2 | 3 | public class HistoryEntry extends HistoryEntryCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/builders/EmployeeBuilder.java: -------------------------------------------------------------------------------- 1 | package starter.domain.builders; 2 | 3 | import starter.domain.Employee; 4 | 5 | public class EmployeeBuilder extends EmployeeBuilderCodegen { 6 | 7 | public EmployeeBuilder(Employee instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/builders/HistoryEntryBuilder.java: -------------------------------------------------------------------------------- 1 | package starter.domain.builders; 2 | 3 | import starter.domain.HistoryEntry; 4 | 5 | public class HistoryEntryBuilder extends HistoryEntryBuilderCodegen { 6 | 7 | public HistoryEntryBuilder(HistoryEntry instance) { 8 | super(instance); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/queries/EmployeeQueries.java: -------------------------------------------------------------------------------- 1 | package starter.domain.queries; 2 | 3 | public class EmployeeQueries extends EmployeeQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /starter/src/main/java/starter/domain/queries/HistoryEntryQueries.java: -------------------------------------------------------------------------------- 1 | package starter.domain.queries; 2 | 3 | public class HistoryEntryQueries extends HistoryEntryQueriesCodegen { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /starter/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO, console 3 | 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 7 | 8 | -------------------------------------------------------------------------------- /starter/src/migrations/java/starter/cli/Cli.java: -------------------------------------------------------------------------------- 1 | package starter.cli; 2 | 3 | import joist.util.Reflection; 4 | import joist.util.SystemProperties; 5 | 6 | import org.apache.commons.lang.StringUtils; 7 | 8 | /** A really simple class to bootstrap from the command line. */ 9 | public class Cli { 10 | 11 | /** Passed JoistCli.codegen, JoistCli.fixPermissions, will instantiate JoistCli class and call each method. */ 12 | public static void main(String[] args) { 13 | SystemProperties.loadFromFileIfExists("./build.properties"); 14 | for (String arg : args) { 15 | String[] parts = StringUtils.split(arg, ".", 2); 16 | Object task = Reflection.newInstance("starter.cli." + parts[0]); 17 | Reflection.invoke(parts[1], task); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /starter/src/migrations/java/starter/cli/JoistCli.java: -------------------------------------------------------------------------------- 1 | package starter.cli; 2 | 3 | import joist.AbstractJoistCli; 4 | import joist.domain.orm.Db; 5 | 6 | public class JoistCli extends AbstractJoistCli { 7 | 8 | public JoistCli() { 9 | // change to Db.PG for postgres 10 | super("starter", Db.MYSQL); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /starter/src/migrations/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | 2 | log4j.rootLogger=INFO, console 3 | 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 6 | log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 7 | 8 | -------------------------------------------------------------------------------- /starter/src/test/java/starter/domain/EmployeeTest.java: -------------------------------------------------------------------------------- 1 | package starter.domain; 2 | 3 | import static starter.domain.builders.Builders.aEmployee; 4 | import joist.domain.FlushTestDatabase; 5 | import joist.domain.orm.Db; 6 | import joist.domain.orm.Repository; 7 | import joist.domain.uow.UoW; 8 | 9 | import org.junit.After; 10 | import org.junit.Before; 11 | import org.junit.Test; 12 | 13 | public class EmployeeTest { 14 | 15 | private static Repository repo = new Repository(Db.MYSQL, "starter"); 16 | 17 | @Before 18 | public void before() { 19 | FlushTestDatabase.execute(repo); 20 | UoW.open(repo, null); 21 | } 22 | 23 | @After 24 | public void after() { 25 | UoW.closeIfOpen(); 26 | } 27 | 28 | @Test 29 | public void foo() { 30 | aEmployee().name("bob").employeeType(EmployeeType.FTE); 31 | UoW.commitAndReOpen(); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /starter/starter-cycle.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /util/.settings/gradle/org.springsource.ide.eclipse.gradle.core.prefs: -------------------------------------------------------------------------------- 1 | #org.springsource.ide.eclipse.gradle.core.preferences.GradleProjectPreferences 2 | #Tue Oct 28 21:17:54 CDT 2014 3 | org.springsource.ide.eclipse.gradle.linkedresources= 4 | org.springsource.ide.eclipse.gradle.rootprojectloc=.. 5 | -------------------------------------------------------------------------------- /util/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | #Wed Apr 12 11:46:23 CDT 2006 2 | eclipse.preferences.version=1 3 | encoding/=UTF-8 4 | -------------------------------------------------------------------------------- /util/.settings/org.eclipse.core.runtime.prefs: -------------------------------------------------------------------------------- 1 | #Sun Jan 09 16:05:02 CST 2011 2 | eclipse.preferences.version=1 3 | instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true 4 | line.separator=\n 5 | -------------------------------------------------------------------------------- /util/.settings/org.moreunit.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.moreunit.preferences.version=2 3 | org.moreunit.test_type=junit4 4 | org.moreunit.unitsourcefolder=joist-util\:src/main/java\:joist-util\:src/test/java 5 | org.moreunit.useprojectsettings=true 6 | -------------------------------------------------------------------------------- /util/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | dependencies { 3 | compile 'org.slf4j:slf4j-api:1.6.1' 4 | 5 | testCompile 'junit:junit:4.12' 6 | testCompile 'org.slf4j:slf4j-log4j12:1.6.1' 7 | } 8 | 9 | -------------------------------------------------------------------------------- /util/joist.util.tests.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /util/src/main/java/joist/converter/AbstractOneWayConverter.java: -------------------------------------------------------------------------------- 1 | package joist.converter; 2 | 3 | public abstract class AbstractOneWayConverter extends AbstractConverter { 4 | 5 | public final T convertTwoToOne(U value, Class toType) { 6 | throw new UnsupportedConversionException(value, toType); 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /util/src/main/java/joist/converter/Converter.java: -------------------------------------------------------------------------------- 1 | package joist.converter; 2 | 3 | public interface Converter { 4 | 5 | Class getTypeOne(); 6 | 7 | Class getTypeTwo(); 8 | 9 | U convertOneToTwo(T value, Class toType); 10 | 11 | T convertTwoToOne(U value, Class toType); 12 | 13 | void setConverterRegistry(ConverterRegistry registry); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /util/src/main/java/joist/converter/UnsupportedConversionException.java: -------------------------------------------------------------------------------- 1 | package joist.converter; 2 | 3 | public class UnsupportedConversionException extends RuntimeException { 4 | 5 | private static final long serialVersionUID = 1L; 6 | private final Object value; 7 | private final Class toType; 8 | 9 | public UnsupportedConversionException(Object value, Class toType) { 10 | this.value = value; 11 | this.toType = toType; 12 | } 13 | 14 | public String getMessage() { 15 | return "Could not covert " + this.value + " to " + this.toType; 16 | } 17 | 18 | public Object getValue() { 19 | return this.value; 20 | } 21 | 22 | public Class getToType() { 23 | return this.toType; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /util/src/main/java/joist/jdbc/JdbcException.java: -------------------------------------------------------------------------------- 1 | package joist.jdbc; 2 | 3 | import java.sql.SQLException; 4 | 5 | public class JdbcException extends RuntimeException { 6 | 7 | private static final long serialVersionUID = 1L; 8 | 9 | public JdbcException(SQLException sql) { 10 | super(sql); 11 | } 12 | 13 | public SQLException getCause() { 14 | return (SQLException) super.getCause(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /util/src/main/java/joist/jdbc/RowMapper.java: -------------------------------------------------------------------------------- 1 | package joist.jdbc; 2 | 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | 6 | public interface RowMapper { 7 | 8 | void mapRow(ResultSet rs) throws SQLException; 9 | 10 | } 11 | -------------------------------------------------------------------------------- /util/src/main/java/joist/sourcegen/Access.java: -------------------------------------------------------------------------------- 1 | package joist.sourcegen; 2 | 3 | public enum Access { 4 | 5 | PUBLIC("public "), PACKAGE(""), PROTECTED("protected "), PRIVATE("private "); 6 | 7 | private String asPrefix; 8 | 9 | private Access(String asPrefix) { 10 | this.asPrefix = asPrefix; 11 | } 12 | 13 | public String asPrefix() { 14 | return this.asPrefix; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /util/src/main/java/joist/sourcegen/GSettings.java: -------------------------------------------------------------------------------- 1 | package joist.sourcegen; 2 | 3 | public class GSettings { 4 | 5 | private static String defaultIndentation = System.getProperty("joist.sourcegen.defaultIndentation", " "); 6 | 7 | public static void setDefaultIndentation(String value) { 8 | defaultIndentation = value; 9 | } 10 | 11 | public static String getDefaultIndentation() { 12 | return defaultIndentation; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/Default.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | public class Default { 4 | 5 | public static T value(T first, T defaultValue) { 6 | return first != null ? first : defaultValue; 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/FluentMap.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | /** Adds fluent helper methods to HashMap. 6 | * 7 | * Should probably be an interface. 8 | */ 9 | public class FluentMap extends LinkedHashMap { 10 | 11 | private static final long serialVersionUID = 1L; 12 | 13 | public FluentMap with(K key, V value) { 14 | this.put(key, value); 15 | return this; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/Function1.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | public interface Function1 { 4 | 5 | R apply(P p1); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/MapToList.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.ArrayList; 4 | import java.util.LinkedHashMap; 5 | import java.util.List; 6 | 7 | public class MapToList extends LinkedHashMap> { 8 | 9 | private static final long serialVersionUID = -1; 10 | 11 | @Override 12 | public List get(Object key) { 13 | List values = super.get(key); 14 | if (values == null) { 15 | values = (List) new ArrayList(); 16 | this.put((K) key, values); 17 | } 18 | return values; 19 | } 20 | 21 | public void add(Object key) { 22 | this.get(key); 23 | } 24 | 25 | public void add(Object key, V value) { 26 | this.get(key).add(value); 27 | } 28 | 29 | // @Override, commented out as only since 1.8 30 | public boolean remove(Object key, Object value) { 31 | return this.get(key).remove(value); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/Model.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.LinkedHashMap; 4 | 5 | /** A standard UI model object. */ 6 | public class Model extends LinkedHashMap { 7 | 8 | private static final long serialVersionUID = 1L; 9 | 10 | public static Model make(String key, Object value) { 11 | return new Model().with(key, value); 12 | } 13 | 14 | public Model with(String key, Object value) { 15 | this.put(key, value); 16 | return this; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/TestCounter.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.concurrent.atomic.AtomicInteger; 4 | 5 | public class TestCounter { 6 | 7 | private final AtomicInteger current = new AtomicInteger(); 8 | 9 | public TestCounter() { 10 | TestCounters.register(this); 11 | } 12 | 13 | public int next() { 14 | return this.current.incrementAndGet(); 15 | } 16 | 17 | public int tick() { 18 | return this.current.incrementAndGet(); 19 | } 20 | 21 | public int get() { 22 | return this.current.get(); 23 | } 24 | 25 | public void reset() { 26 | this.current.set(0); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/TestCounters.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.LinkedHashSet; 4 | import java.util.Set; 5 | 6 | public class TestCounters { 7 | 8 | private static final Set counters = new LinkedHashSet(); 9 | 10 | public static void register(TestCounter c) { 11 | counters.add(c); 12 | } 13 | 14 | public static void resetAll() { 15 | for (TestCounter c : counters) { 16 | c.reset(); 17 | } 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/Tick.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.regex.Pattern; 4 | 5 | public class Tick { 6 | 7 | private static final Pattern standaloneTick = Pattern.compile("(? " except for '' */ 11 | public static String toQuote(String message) { 12 | message = Tick.standaloneTick.matcher(message).replaceAll("\""); 13 | message = Tick.twoTicks.matcher(message).replaceAll("'"); 14 | return message; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /util/src/main/java/joist/util/ToString.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | public class ToString { 4 | 5 | private ToString() { 6 | } 7 | 8 | /** 9 | * @return SimpleClassName[param1, ...] 10 | */ 11 | public static String to(Object object, Object... parameters) { 12 | if (object == null) { 13 | return "null"; 14 | } 15 | for (int i = 0; i < parameters.length; i++) { 16 | if (parameters[i] == null) { 17 | parameters[i] = "null"; 18 | } 19 | } 20 | return object.getClass().getSimpleName() + "[" + Join.comma(parameters) + "]"; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/CopyTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class CopyTest { 7 | 8 | @Test 9 | public void testUnique() { 10 | FluentList l = Copy.list("one", "one", "two"); 11 | Assert.assertEquals(Copy.list("one", "two"), l.unique()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/StringBuilderrTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class StringBuilderrTest { 7 | 8 | private StringBuilderr sb = new StringBuilderr(); 9 | 10 | @Test 11 | public void testAppendDoesNotTickToQuoteIfNoArguments() { 12 | this.sb.append("'asdf'"); 13 | Assert.assertEquals("'asdf'", this.sb.toString()); 14 | } 15 | 16 | @Test 17 | public void testAppendDoesNotTickToQuote() { 18 | this.sb.append("'asdf' {}", "arg"); 19 | Assert.assertEquals("'asdf' arg", this.sb.toString()); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/SystemPropertiesTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import java.util.Properties; 4 | 5 | import org.junit.Assert; 6 | import org.junit.Test; 7 | 8 | public class SystemPropertiesTest { 9 | 10 | @Test 11 | public void testOverride() { 12 | Properties p = new Properties(); 13 | p.setProperty("foo", "a"); 14 | p.setProperty("foo.dev", "b"); 15 | SystemProperties.overrideForSuffix("dev", p); 16 | Assert.assertEquals("b", p.getProperty("foo")); 17 | } 18 | 19 | @Test 20 | public void testOverrideIsNullSafe() { 21 | Properties p = new Properties(); 22 | p.setProperty("foo", "a"); 23 | p.setProperty("foo.dev", "b"); 24 | p.setProperty("foo.", "b"); 25 | SystemProperties.overrideForSuffix(null, p); 26 | Assert.assertEquals("a", p.getProperty("foo")); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/TestCounterTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class TestCounterTest { 7 | 8 | @Test 9 | public void testResetAll() { 10 | TestCounter c = new TestCounter(); 11 | Assert.assertEquals(1, c.next()); 12 | Assert.assertEquals(2, c.next()); 13 | 14 | TestCounters.resetAll(); 15 | Assert.assertEquals(1, c.next()); 16 | Assert.assertEquals(2, c.next()); 17 | Assert.assertEquals(2, c.get()); 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/TickTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class TickTest { 7 | 8 | @Test 9 | public void testTicksToQuotesGetsSingleTicks() { 10 | Assert.assertEquals("i said \"hi\" then", Tick.toQuote("i said 'hi' then")); 11 | } 12 | 13 | @Test 14 | public void testTicksToQuotesMissesDoubleTicks() { 15 | Assert.assertEquals("i said 'hi' then", Tick.toQuote("i said ''hi'' then")); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/ToStringTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class ToStringTest { 7 | 8 | @Test 9 | public void testToString() { 10 | String s = "asdf"; 11 | Assert.assertEquals("String[4]", ToString.to(s, s.length())); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /util/src/test/java/joist/util/WrapTest.java: -------------------------------------------------------------------------------- 1 | package joist.util; 2 | 3 | import org.junit.Assert; 4 | import org.junit.Test; 5 | 6 | public class WrapTest { 7 | 8 | @Test 9 | public void testQuotes() { 10 | Assert.assertEquals("\"foo\"", Wrap.quotes("foo")); 11 | Assert.assertEquals("[\"foo\", \"bar\"]", Wrap.quotes("foo", "bar").toString()); 12 | } 13 | 14 | @Test 15 | public void testBackquotes() { 16 | Assert.assertEquals("`foo`", Wrap.backquotes("foo")); 17 | Assert.assertEquals("[`foo`, `bar`]", Wrap.backquotes("foo", "bar").toString()); 18 | } 19 | 20 | @Test 21 | public void testTicks() { 22 | Assert.assertEquals("'foo'", Wrap.ticks("foo")); 23 | Assert.assertEquals("['foo', 'bar']", Wrap.ticks("foo", "bar").toString()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /util/src/test/resources/joist/util/WriteTest.txt: -------------------------------------------------------------------------------- 1 | foo --------------------------------------------------------------------------------