From 0fb6c8ed0407bfbbfb2e7f7e268659edf83d6e51 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 13 May 2020 23:17:38 +0800 Subject: [PATCH] =?UTF-8?q?0.2.0=20=E5=AE=8C=E5=96=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 ++ build.gradle | 29 ++++---- settings.gradle | 6 +- src/gaea.data/build.gradle | 2 - .../com/synebula/gaea/data/StatusData.kt | 58 ---------------- .../com/synebula/gaea/data/type/Status.kt | 36 ---------- src/gaea.domain/build.gradle | 14 ++++ .../gaea/domain/model/AggregateRoot.kt | 3 + .../com/synebula/gaea/domain/model/Entity.kt | 3 + .../gaea/domain/model/IAggregateRoot.kt | 8 +++ .../com/synebula/gaea/domain/model/IEntity.kt | 21 ++++++ .../com/synebula/gaea/domain/model/IValue.kt | 7 ++ .../model/complex/ComplexAggregateRoot.kt | 3 + .../domain/model/complex/ComplexEntity.kt | 5 ++ .../model/complex/IComplexAggregateRoot.kt | 9 +++ .../domain/model/complex/IComplexEntity.kt | 7 ++ .../domain/repository/IComplexRepository.kt | 45 ++++++++++++ .../gaea/domain/repository/IRepository.kt | 44 ++++++++++++ .../domain/repository/ITypedRepository.kt | 38 ++++++++++ .../domain/repository/context/IContext.kt | 30 ++++++++ .../domain/repository/context/IUnitOfWork.kt | 26 +++++++ .../specifications/AndNotSpecification.kt | 26 +++++++ .../specifications/AndSpecification.kt | 26 +++++++ .../specifications/AnySpecification.kt | 17 +++++ .../specifications/CompositeSpecification.kt | 26 +++++++ .../specifications/ICompositeSpecification.kt | 26 +++++++ .../specifications/ISpecification.kt | 62 +++++++++++++++++ .../specifications/NoneSpecification.kt | 17 +++++ .../specifications/NotSpecification.kt | 24 +++++++ .../specifications/OrNotSpecification.kt | 26 +++++++ .../specifications/OrSpecification.kt | 17 +++++ .../specifications/Specification.kt | 27 ++++++++ .../synebula/gaea/domain/service/Command.kt | 14 ++++ .../gaea/domain/service/ComplexService.kt | 54 +++++++++++++++ .../synebula/gaea/domain/service/ICommand.kt | 15 ++++ .../gaea/domain/service/IComplexService.kt | 19 +++++ .../synebula/gaea/domain/service/IService.kt | 24 +++++++ .../synebula/gaea/domain/service/Service.kt | 55 +++++++++++++++ src/gaea/build.gradle | 10 +++ .../synebula/gaea/data/IObjectConverter.kt} | 4 +- .../synebula/gaea/data/cache/CacheEntity.kt | 2 +- .../com/synebula/gaea/data/cache/ICache.kt | 2 +- .../synebula/gaea/data/code/CompositeCode.kt | 2 +- .../com/synebula/gaea/data/code/DateCode.kt | 2 +- .../gaea/data/code/FixedRandomCode.kt | 2 +- .../gaea/data/code/FixedSerialCode.kt | 2 +- .../com/synebula/gaea/data/code/GUIDCode.kt | 2 +- .../synebula/gaea/data/code/ICodeGenerator.kt | 2 +- .../synebula/gaea/data/code/SnowflakeCode.kt | 0 .../com/synebula/gaea/data/code/ValueCode.kt | 2 +- .../com/synebula/gaea/data/date/AlignTime.kt | 0 .../com/synebula/gaea/data/date/DateExtend.kt | 0 .../com/synebula/gaea/data/date/DateTime.kt | 0 .../com/synebula/gaea/data/date/Time.kt | 0 .../synebula/gaea/data/date/TimeExchanger.kt | 0 .../com/synebula/gaea/data/date/TimeSpan.kt | 0 .../com/synebula/gaea/data/message/Message.kt | 15 ++++ .../gaea/data/message/http/HttpMessage.kt | 37 ++++++++++ .../gaea/data/message/http/HttpStatus.kt | 36 ++++++++++ .../serializable/AbstractJsonSerializer.kt | 0 .../data/serializable/IJsonSerializable.kt | 2 +- .../gaea/data/serializable/ISerializable.kt | 2 +- .../gaea/data/type/DataOperateType.kt | 2 +- .../gaea/data/type/SortDirectionEnum.kt | 0 .../com/synebula/gaea/data/type/Status.kt | 0 .../com/synebula/gaea/data/type/TimeUnit.kt | 0 .../kotlin/com/synebula/gaea/log/ILogger.kt | 17 +++++ .../kotlin/com/synebula/gaea/log/Level.kt | 28 ++++++++ .../com/synebula/gaea/log/NullLogger.kt | 69 +++++++++++++++++++ .../synebula/gaea/log/logger/IDebugLogger.kt | 47 +++++++++++++ .../synebula/gaea/log/logger/IErrorLogger.kt | 46 +++++++++++++ .../synebula/gaea/log/logger/IInfoLogger.kt | 46 +++++++++++++ .../synebula/gaea/log/logger/ITraceLogger.kt | 48 +++++++++++++ .../synebula/gaea/log/logger/IWarnLogger.kt | 46 +++++++++++++ .../synebula/gaea/test/CodeGenerateTest.kt | 0 75 files changed, 1223 insertions(+), 125 deletions(-) create mode 100644 .gitignore delete mode 100644 src/gaea.data/build.gradle delete mode 100644 src/gaea.data/src/main/kotlin/com/synebula/gaea/data/StatusData.kt delete mode 100644 src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/Status.kt create mode 100644 src/gaea.domain/build.gradle create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexAggregateRoot.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexEntity.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexAggregateRoot.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexEntity.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IRepository.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/ITypedRepository.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndNotSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AnySpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/CompositeSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ICompositeSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ISpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NoneSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NotSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrNotSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrSpecification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/Specification.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Command.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ICommand.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IService.kt create mode 100644 src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt create mode 100644 src/gaea/build.gradle rename src/{gaea.data/src/main/kotlin/com/synebula/gaea/data/IObjectConvertor.kt => gaea/src/main/kotlin/com/synebula/gaea/data/IObjectConverter.kt} (90%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt (98%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt (93%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt (97%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt (97%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt (98%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt (98%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt (94%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt (94%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/SnowflakeCode.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt (94%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/AlignTime.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/DateExtend.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/DateTime.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/Time.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/TimeExchanger.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/date/TimeSpan.kt (100%) create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/message/Message.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpMessage.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpStatus.kt rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/serializable/AbstractJsonSerializer.kt (100%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt (90%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt (94%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt (93%) rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/type/SortDirectionEnum.kt (100%) create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/data/type/Status.kt rename src/{gaea.data => gaea}/src/main/kotlin/com/synebula/gaea/data/type/TimeUnit.kt (100%) create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/ILogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/Level.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/NullLogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IDebugLogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IErrorLogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IInfoLogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/ITraceLogger.kt create mode 100644 src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IWarnLogger.kt rename src/{gaea.data => gaea}/src/test/kotlin/com/synebula/gaea/test/CodeGenerateTest.kt (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..02cfcc9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.* +gradlew* +build +gradle + +!.gitignore \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4ef645c..573de26 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ buildscript { ext { - kotlin_version = '1.2.10' + kotlin_version = '1.3.41' } repositories { - maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenLocal() + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() } @@ -15,24 +15,27 @@ buildscript { } allprojects { - apply plugin: 'idea' - - group 'com.synebula' - version '0.1' - - repositories { - maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } - mavenLocal() - mavenCentral() + ext { + version '0.2.0' } + group 'com.synebula' + version project.version + + apply plugin: 'idea' + + repositories { + mavenLocal() + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } + mavenCentral() + } } subprojects { buildscript { repositories { - maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenLocal() + maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() } } @@ -44,7 +47,7 @@ subprojects { dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" - compile "org.jetbrains.kotlin:kotlin-reflect" + compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/settings.gradle b/settings.gradle index dbc5642..8aea451 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,6 @@ rootProject.name = 'gaea' -include 'src:gaea.data' -findProject(':src:gaea.data')?.name = 'gaea.data' +include 'src:gaea' +findProject(':src:gaea')?.name = 'gaea' +include 'src:gaea.domain' +findProject(':src:gaea.domain')?.name = 'gaea.domain' diff --git a/src/gaea.data/build.gradle b/src/gaea.data/build.gradle deleted file mode 100644 index 7d82dc7..0000000 --- a/src/gaea.data/build.gradle +++ /dev/null @@ -1,2 +0,0 @@ -dependencies { -} diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/StatusData.kt b/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/StatusData.kt deleted file mode 100644 index 370e226..0000000 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/StatusData.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.synebula.gaea.data - -import com.synebula.gaea.data.type.Status -import java.util.* - -/** - * - * @author reize - * @version 0.0.1 - * @since 2016年9月6日 下午3:47:35 - */ -open class StatusData { - var code: Status - set(value) { - field = value - this.status = value.code - } - var status: Int - var message: String = "" - var data: T? = null - val timestamp = Date().time - - /** - * ctor - */ - constructor(code: Status) { - this.code = code - this.status = code.code - } - - constructor() : this(Status.success) { - } - - /** - * @param data 数据 - */ - constructor(data: T) : this(Status.success) { - this.data = data - } - - /** - * @param status 状态 - * @param message 消息 - */ - constructor(status: Status, message: String) : this(status) { - this.message = message - } - - /** - * @param status 状态 - * @param message 消息 - * @param data 数据 - */ - constructor(status: Status, message: String, data: T) : this(status) { - this.message = message - this.data = data - } -} \ No newline at end of file diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/Status.kt b/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/Status.kt deleted file mode 100644 index d971b10..0000000 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/Status.kt +++ /dev/null @@ -1,36 +0,0 @@ -package com.synebula.gaea.data.type - -/** - * 状态类型。 - * - * @author reize - * @version 0.0.1 - * @since 2016年9月6日 下午3:27:55 - */ -enum class Status(val code: Int) { - /** - * 成功 - */ - success(200), - - /** - * 失败 - */ - failure(400), - - /** - * 错误 - */ - error(500); - - companion object { - fun valueOf(code: Int): Status { - return when (code) { - 200 -> Status.success - 400 -> Status.failure - else -> Status.error - } - } - } - -} diff --git a/src/gaea.domain/build.gradle b/src/gaea.domain/build.gradle new file mode 100644 index 0000000..62e020e --- /dev/null +++ b/src/gaea.domain/build.gradle @@ -0,0 +1,14 @@ +dependencies { + compile project(":src:gaea") +} + +publishing { + publications { + mavenJava(MavenPublication) { + group 'com.synebula' + artifactId 'gaea.domain' + version project.version + from components.java + } + } +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt new file mode 100644 index 0000000..b630ca8 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/AggregateRoot.kt @@ -0,0 +1,3 @@ +package com.synebula.gaea.domain.model + +abstract class AggregateRoot : Entity(), IAggregateRoot diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt new file mode 100644 index 0000000..95d3fe8 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/Entity.kt @@ -0,0 +1,3 @@ +package com.synebula.gaea.domain.model + +abstract class Entity : IEntity diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt new file mode 100644 index 0000000..5653797 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IAggregateRoot.kt @@ -0,0 +1,8 @@ +package com.synebula.gaea.domain.model + +/** + * 继承本接口,说明对象为聚合根。 + * + * @author alex + **/ +interface IAggregateRoot : IEntity diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt new file mode 100644 index 0000000..b64d221 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IEntity.kt @@ -0,0 +1,21 @@ +package com.synebula.gaea.domain.model + +/** + * 继承本接口,说明对象为实体类型。 + * + * @author alex + * + * @param 主键的类型。 + **/ +interface IEntity { + + /** + * 实体ID + */ + var id: TKey + + /** + * 实体对象是否有效。 + */ + var alive: Boolean +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt new file mode 100644 index 0000000..3686ce2 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/IValue.kt @@ -0,0 +1,7 @@ +package com.synebula.gaea.domain.model + +/** + * 继承本接口,说明对象为值类型。 + * @author alex + */ +interface IValue diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexAggregateRoot.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexAggregateRoot.kt new file mode 100644 index 0000000..48e25fc --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexAggregateRoot.kt @@ -0,0 +1,3 @@ +package com.synebula.gaea.domain.model.complex + +abstract class ComplexAggregateRoot : ComplexEntity(), IComplexAggregateRoot diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexEntity.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexEntity.kt new file mode 100644 index 0000000..4d734e9 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/ComplexEntity.kt @@ -0,0 +1,5 @@ +package com.synebula.gaea.domain.model.complex + + +abstract class ComplexEntity : IComplexEntity { +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexAggregateRoot.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexAggregateRoot.kt new file mode 100644 index 0000000..487dc15 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexAggregateRoot.kt @@ -0,0 +1,9 @@ +package com.synebula.gaea.domain.model.complex + +/** + * 继承本接口,说明对象为聚合根。 + * + * @param 主键的类型。 + * @author alex + */ +interface IComplexAggregateRoot : IComplexEntity diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexEntity.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexEntity.kt new file mode 100644 index 0000000..b4ff554 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/model/complex/IComplexEntity.kt @@ -0,0 +1,7 @@ +package com.synebula.gaea.domain.model.complex + +import com.synebula.gaea.domain.model.IEntity + +interface IComplexEntity : IEntity { + var secondary: TSecond +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt new file mode 100644 index 0000000..cacc48d --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IComplexRepository.kt @@ -0,0 +1,45 @@ +package com.synebula.gaea.domain.repository + +import com.synebula.gaea.domain.model.complex.IComplexAggregateRoot + +/** + * 继承本接口表示对象为仓储类。 + * + * @param this T is the parameter + * @author alex + */ +interface IComplexRepository, TKey, TSecond> { + + /** + * 插入单个对象。 + * + * @param obj 需要插入的对象。 + * @return 返回原对象,如果对象ID为自增,则补充自增ID。 + */ + fun add(obj: TAggregateRoot) + + /** + * 更新对象。 + * + * @param obj 需要更新的对象。 + * @return + */ + fun update(obj: TAggregateRoot) + + /** + * 通过id删除该条数据 + * + * @param key 对象ID。 + * @param secondary 对象副主键。 + * @return + */ + fun remove(key: TKey, secondary: TSecond) + + /** + * 根据ID获取对象。 + * + * @param key 对象ID。 + * @return + */ + operator fun get(key: TKey, secondary: TSecond): TAggregateRoot +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IRepository.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IRepository.kt new file mode 100644 index 0000000..eda343c --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/IRepository.kt @@ -0,0 +1,44 @@ +package com.synebula.gaea.domain.repository + +import com.synebula.gaea.domain.model.IAggregateRoot + +/** + * 继承本接口表示对象为仓储类。 + * + * @param this T is the parameter + * @author alex + */ +interface IRepository, TKey> { + + /** + * 插入单个对象。 + * + * @param obj 需要插入的对象。 + * @return 返回原对象,如果对象ID为自增,则补充自增ID。 + */ + fun add(obj: TAggregateRoot) + + /** + * 更新对象。 + * + * @param obj 需要更新的对象。 + * @return + */ + fun update(obj: TAggregateRoot) + + /** + * 通过id删除该条数据 + * + * @param id + * @return + */ + fun remove(id: TKey) + + /** + * 根据ID获取对象。 + * + * @param id 对象ID。 + * @return + */ + operator fun get(id: TKey): TAggregateRoot +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/ITypedRepository.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/ITypedRepository.kt new file mode 100644 index 0000000..946bc80 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/ITypedRepository.kt @@ -0,0 +1,38 @@ +package com.synebula.gaea.domain.repository + +import com.synebula.gaea.domain.model.IAggregateRoot + +interface ITypedRepository, TKey> { + /** + * 插入单个对象。 + * + * @param obj 需要插入的对象。 + * @return 返回原对象,如果对象ID为自增,则补充自增ID。 + */ + fun add(obj: TAggregateRoot): Unit + + /** + * 更新对象。 + * + * @param obj 需要更新的对象。 + * @return + */ + fun update(obj: TAggregateRoot): Unit + + /** + * 通过id删除该条数据 + * + * @param id id + * @param clazz 操作数据的类型 + */ + fun remove(id: TKey, clazz: Class): Unit + + /** + * 根据ID获取对象。 + * + * @param id id + * @param clazz 操作数据的类型 + * @return 聚合根 + */ + fun get(id: TKey, clazz: Class): TAggregateRoot +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt new file mode 100644 index 0000000..9c4cb5a --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IContext.kt @@ -0,0 +1,30 @@ +package com.synebula.gaea.domain.repository.context + +import com.synebula.gaea.domain.model.IAggregateRoot + +/** + * 继承自IUnitOfWork,表示实现了工作单元模式的上下文接口。 + * + * @author alex + */ +interface IContext : IUnitOfWork { + /** + * 将指定的聚合根标注为“新建”状态。 + * @param obj + */ + fun , TKey> add(obj: TType) + + /** + * 将指定的聚合根标注为“更改”状态。 + * + * @param obj + */ + fun , TKey> update(obj: TType) + + /** + * 将指定的聚合根标注为“删除”状态。 + * + * @param obj + */ + fun , TKey> remove(obj: TType) +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt new file mode 100644 index 0000000..4b018d6 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/context/IUnitOfWork.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.context + +/** + * 表示所有继承于该接口的类型都是Unit Of Work的一种实现。 + * + * @author alex + */ +interface IUnitOfWork { + + /** + * 获得一个boolean值,该值表述了当前的Unit Of Work事务是否已被提交。 + * + * @return 返回Unit Of Work事务是否已被提交。 + */ + val isCommitted: Boolean + + /** + * 提交当前的Unit Of Work事务。 + */ + fun commit() + + /** + * 回滚当前的Unit Of Work事务。 + */ + fun rollback() +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndNotSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndNotSpecification.kt new file mode 100644 index 0000000..2ba6898 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndNotSpecification.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 表示第一个规约对象和第二个规约对象反转的结果取与。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class AndNotSpecification +/** + * 构造一个新的混合规约对象。 + * + * @param left + * 表达式左侧规约对象。 + * @param right + * 表达式右侧规约对象。 + */ +(left: ISpecification, right: ISpecification) : CompositeSpecification(left, right) { + + override fun isSatisfiedBy(obj: T): Boolean { + return left.isSatisfiedBy(obj) && NotSpecification(right).isSatisfiedBy(obj) + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndSpecification.kt new file mode 100644 index 0000000..bf500ce --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AndSpecification.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 表示第一个规约对象和第二个规约对象取与。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class AndSpecification +/** + * 构造一个新的混合规约对象。 + * + * @param left + * 表达式左侧规约对象。 + * @param right + * 表达式右侧规约对象。 + */ +(left: ISpecification, right: ISpecification) : CompositeSpecification(left, right) { + + override fun isSatisfiedBy(obj: T): Boolean { + return left.isSatisfiedBy(obj) && right.isSatisfiedBy(obj) + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AnySpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AnySpecification.kt new file mode 100644 index 0000000..e876883 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/AnySpecification.kt @@ -0,0 +1,17 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 任何对象都返回真。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class AnySpecification : Specification() { + + override fun isSatisfiedBy(obj: T): Boolean { + return true + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/CompositeSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/CompositeSpecification.kt new file mode 100644 index 0000000..d392344 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/CompositeSpecification.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 实现了接口ICompositeSpecification,混合规约的基类。 + * @author alex + * + * @param + */ +abstract class CompositeSpecification +/** + * 构造一个新的混合规约对象。 + * + * @param left + * 表达式左侧规约对象。 + * @param right + * 表达式右侧规约对象。 + */ +( + /** + * 表达式左侧规约对象。 + */ + override val left: ISpecification, + /** + * 表达式右侧规约对象。 + */ + override val right: ISpecification) : Specification(), ICompositeSpecification diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ICompositeSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ICompositeSpecification.kt new file mode 100644 index 0000000..fa715ec --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ICompositeSpecification.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 定义一个有两个规约对象混合规约接口。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +interface ICompositeSpecification : ISpecification { + + /** + * 获取左侧规约对象。 + * + * @return 返回左侧规约对象。 + */ + val left: ISpecification + + /** + * 获取右侧规约对象。 + * + * @return 返回右侧规约对象。 + */ + val right: ISpecification +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ISpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ISpecification.kt new file mode 100644 index 0000000..86d8006 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/ISpecification.kt @@ -0,0 +1,62 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 声明规约对象的公共接口。 + * + * @author alex + * + * @param + */ +interface ISpecification { + /** + * 判断是否符合条件。 + * + * @param obj + * 规约类型的对象。 + * @return 符合条件的返回True。 + */ + fun isSatisfiedBy(obj: T): Boolean + + /** + * 结合当前规约对象和另一规约对象进行与判断。 + * + * @param other + * 需要进行与结合的另一个规约对象。 + * @return 结合后的规约对象。 + */ + fun and(other: ISpecification): ISpecification + + /** + * 结合当前规约对象和另一规约对象进行或判断。 + * + * @param other + * 需要进行或结合的另一个规约对象。 + * @return 结合后的规约对象。 + */ + fun or(other: ISpecification): ISpecification + + /** + * 结合当前规约对象和另一规约对象进行与且非判断 + * + * @param other + * 需要进行非结合的另一个规约对象。 + * @return 结合后的规约对象。 + */ + fun andNot(other: ISpecification): ISpecification + + /** + * 结合当前规约对象和另一规约对象进行或非判断。 + * + * @param other + * 需要进行或非结合的另一个规约对象。 + * @return 结合后的规约对象。 + */ + fun orNot(other: ISpecification): ISpecification + + /** + * 反转当前规约的判断结果。 + * + * @return 反转后的规约对象。 + */ + operator fun not(): ISpecification +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NoneSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NoneSpecification.kt new file mode 100644 index 0000000..7dac9f1 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NoneSpecification.kt @@ -0,0 +1,17 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 任何对象都返回假。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class NoneSpecification : Specification() { + + override fun isSatisfiedBy(obj: T): Boolean { + return false + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NotSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NotSpecification.kt new file mode 100644 index 0000000..a6a28fd --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/NotSpecification.kt @@ -0,0 +1,24 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 逆反规约。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class NotSpecification +/** + * 构造一个新的逆反规约对象。 + * + * @param specification + * 需要逆反的规约对象。 + */ +(private val spec: ISpecification) : Specification() { + + override fun isSatisfiedBy(obj: T): Boolean { + return !spec.isSatisfiedBy(obj) + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrNotSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrNotSpecification.kt new file mode 100644 index 0000000..504ec8d --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrNotSpecification.kt @@ -0,0 +1,26 @@ +package com.synebula.gaea.domain.repository.specifications + +/** + * 表示第一个规约对象和第二个规约对象反转的结果取或。 + * + * @author alex + * + * @param + * 规约对象的类型。 + */ +class OrNotSpecification +/** + * 构造一个新的混合规约对象。 + * + * @param left + * 表达式左侧规约对象。 + * @param right + * 表达式右侧规约对象。 + */ +(left: ISpecification, right: ISpecification) : CompositeSpecification(left, right) { + + override fun isSatisfiedBy(obj: T): Boolean { + return left.isSatisfiedBy(obj) || NotSpecification(right).isSatisfiedBy(obj) + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrSpecification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrSpecification.kt new file mode 100644 index 0000000..e9297b2 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/OrSpecification.kt @@ -0,0 +1,17 @@ +package com.synebula.gaea.domain.repository.specifications + +class OrSpecification +/** + * 构造一个新的混合规约对象。 + * + * @param left + * 表达式左侧规约对象。 + * @param right + * 表达式右侧规约对象。 + */ +(left: ISpecification, right: ISpecification) : CompositeSpecification(left, right) { + + override fun isSatisfiedBy(obj: T): Boolean { + return left.isSatisfiedBy(obj) || right.isSatisfiedBy(obj) + } +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/Specification.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/Specification.kt new file mode 100644 index 0000000..0a0fdd8 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/repository/specifications/Specification.kt @@ -0,0 +1,27 @@ +package com.synebula.gaea.domain.repository.specifications + +abstract class Specification : ISpecification { + + abstract override fun isSatisfiedBy(obj: T): Boolean + + override fun and(other: ISpecification): ISpecification { + return AndSpecification(this, other) + } + + override fun or(other: ISpecification): ISpecification { + return OrSpecification(this, other) + } + + override fun andNot(other: ISpecification): ISpecification { + return AndNotSpecification(this, other) + } + + override fun orNot(other: ISpecification): ISpecification { + return OrNotSpecification(this, other) + } + + override fun not(): ISpecification { + return NotSpecification(this) + } + +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Command.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Command.kt new file mode 100644 index 0000000..dcc92c1 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Command.kt @@ -0,0 +1,14 @@ +package com.synebula.gaea.domain.service + +import java.util.* + +/** + * 命令基础实现类,发给service的命令。 + * + * @author alex + * @version 0.1 + * @since 2018 18-2-8 + */ +class Command : ICommand { + override var timestamp = 0L +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt new file mode 100644 index 0000000..630bc17 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ComplexService.kt @@ -0,0 +1,54 @@ +package com.synebula.gaea.domain.service + +import com.synebula.gaea.data.IObjectConverter +import com.synebula.gaea.data.message.http.HttpMessage +import com.synebula.gaea.domain.model.complex.IComplexAggregateRoot +import com.synebula.gaea.domain.repository.IComplexRepository +import com.synebula.gaea.log.ILogger + +/** + * 复合主键的服务基类 + * + * @author alex + * @version 0.1 + * @since 2018 18-2-8 + */ +open class ComplexService, TKey, TSecond> +(var logger: ILogger, protected var repository: IComplexRepository, + protected var converter: IObjectConverter, protected var aggregateRootClass: Class) + : IComplexService { + + override fun add(command: ICommand): HttpMessage> { + val msg = HttpMessage>() + val root = this.convert(command) + repository.add(root) + msg.data = Pair(root.id, root.secondary) + return msg + } + + override fun update(key: TKey, secondary: TSecond, command: ICommand) { + val root = this.convert(command) + root.id = key + root.secondary = secondary + repository.update(root) + } + + override fun remove(key: TKey, secondary: TSecond) { + repository.remove(key, secondary) + } + + /** + * 转换ICommand类型到聚合根类型,默认实现,根据需要进行覆写。 + * + * @param command + * @return + */ + protected fun convert(command: ICommand): TAggregateRoot { + try { + return converter.convert(command, aggregateRootClass) + } catch (ex: Exception) { + throw RuntimeException("command not match aggregate root", ex) + } + + } +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ICommand.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ICommand.kt new file mode 100644 index 0000000..b80936e --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/ICommand.kt @@ -0,0 +1,15 @@ +package com.synebula.gaea.domain.service + +/** + * 命令接口,发给service的命令。 + * + * @author alex + * @version 0.1 + * @since 2018 18-2-8 + */ +interface ICommand { + /** + * 时间戳。 + */ + var timestamp: Long +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt new file mode 100644 index 0000000..a0c4005 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IComplexService.kt @@ -0,0 +1,19 @@ +package com.synebula.gaea.domain.service + +import com.synebula.gaea.data.message.http.HttpMessage + +/** + * class IFlatService + * + * @author alex + * @version 0.1 + * @since 2018 18-2-8 + */ +interface IComplexService { + + fun add(command: ICommand): HttpMessage> + + fun update(key: TKey, secondary: TSecond, command: ICommand) + + fun remove(key: TKey, secondary: TSecond) +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IService.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IService.kt new file mode 100644 index 0000000..6a12a2c --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/IService.kt @@ -0,0 +1,24 @@ +package com.synebula.gaea.domain.service + +import com.synebula.gaea.data.message.http.HttpMessage +import com.synebula.gaea.log.ILogger + + +/** + * 继承该接口,表明对象为领域服务。 + * @author alex + * @version 0.0.1 + * @since 2016年9月18日 下午2:23:15 + */ +interface IService { + /** + * 日志组件。若无日志组件则默认为NullLogger对象,不会为null。 + */ + var logger: ILogger + + fun add(command: ICommand): HttpMessage + + fun update(key: TKey, command: ICommand) + + fun remove(key: TKey) +} diff --git a/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt new file mode 100644 index 0000000..7b2a205 --- /dev/null +++ b/src/gaea.domain/src/main/kotlin/com/synebula/gaea/domain/service/Service.kt @@ -0,0 +1,55 @@ +package com.synebula.gaea.domain.service + +import com.synebula.gaea.data.IObjectConverter +import com.synebula.gaea.data.message.http.HttpMessage +import com.synebula.gaea.domain.model.IAggregateRoot +import com.synebula.gaea.domain.repository.IRepository +import com.synebula.gaea.log.ILogger + + +/** + * class FlatService + * + * @author alex + * @version 0.1 + * @since 2018 18-2-8 + */ +open class Service, TKey> +(override var logger: ILogger, + protected var repository: IRepository, + protected var converter: IObjectConverter, + protected var aggregateRootClass: Class) : IService { + + override fun add(command: ICommand): HttpMessage { + val msg = HttpMessage() + val root = this.convert(command) + repository.add(root) + msg.data = root.id + return msg + } + + override fun update(key: TKey, command: ICommand) { + val root = this.convert(command) + root.id = key + repository.update(root) + } + + override fun remove(key: TKey) { + repository.remove(key) + } + + /** + * 转换ICommand类型到聚合根类型,默认实现,根据需要进行覆写。 + * + * @param command + * @return + */ + protected fun convert(command: ICommand): TAggregateRoot { + try { + return converter.convert(command, aggregateRootClass) + } catch (ex: Exception) { + throw RuntimeException("command not match aggregate root", ex) + } + + } +} diff --git a/src/gaea/build.gradle b/src/gaea/build.gradle new file mode 100644 index 0000000..ed89581 --- /dev/null +++ b/src/gaea/build.gradle @@ -0,0 +1,10 @@ +publishing { + publications { + mavenJava(MavenPublication) { + group 'com.synebula' + artifactId 'gaea.data' + version project.version + from components.java + } + } +} diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/IObjectConvertor.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/IObjectConverter.kt similarity index 90% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/IObjectConvertor.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/IObjectConverter.kt index 384e32f..a375a88 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/IObjectConvertor.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/IObjectConverter.kt @@ -7,7 +7,7 @@ package com.synebula.gaea.data * @version 0.1 * @since 2018 18-2-2 */ -interface IObjectConvertor { +interface IObjectConverter { /** * 转换源对象到目标对象。 @@ -16,6 +16,6 @@ interface IObjectConvertor { * @param dest 目标对象。 * @param 目标对象类型。 * @return 目标对象 - */ + */ fun convert(src: Any, dest: Class): T } diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt similarity index 98% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt index b12a8fd..7d30454 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/CacheEntity.kt @@ -4,7 +4,7 @@ import java.util.Date /** * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年9月29日 下午1:38:58 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt similarity index 93% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt index 8e6fdd5..e6b5aed 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/cache/ICache.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.cache /** * 缓存接口。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年8月15日 下午4:53:19 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt similarity index 97% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt index 6928a58..46953b2 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/CompositeCode.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.code /** * 组合编号,根据模板组合生成编号。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 下午2:53:50 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt similarity index 97% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt index e8a6864..7d603a1 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/DateCode.kt @@ -4,7 +4,7 @@ import java.text.SimpleDateFormat import java.util.Date /** - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 下午3:42:47 * @param pattern 时间格式化模式。不需要定制可以选择默认构造方法:"yyyyMMdd"。 diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt similarity index 98% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt index 29e8cb1..49a5562 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedRandomCode.kt @@ -4,7 +4,7 @@ import java.util.Random /** * 固定长度随机编号生成。 - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 上午10:58:05 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt similarity index 98% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt index 43bb7ec..17bf044 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/FixedSerialCode.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.code /** * 序列编号,自增的编号。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 下午3:17:36 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt similarity index 94% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt index 12c9698..a24406f 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/GUIDCode.kt @@ -5,7 +5,7 @@ import java.util.UUID /** * 全球唯一编号生成。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 下午2:46:09 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt similarity index 94% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt index 3fafa7a..73a89df 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ICodeGenerator.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.code /** * 继承本接口的类,都能实现编号生成工作。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 上午10:41:03 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/SnowflakeCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/SnowflakeCode.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/SnowflakeCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/SnowflakeCode.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt similarity index 94% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt index 78fc0ae..fe8bf7f 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/code/ValueCode.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.code /** * 默认值编号,返回默认值。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年10月24日 下午4:07:10 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/AlignTime.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/AlignTime.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/AlignTime.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/AlignTime.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/DateExtend.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/DateExtend.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/DateExtend.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/DateExtend.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/DateTime.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/DateTime.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/DateTime.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/DateTime.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/Time.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/Time.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/Time.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/Time.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/TimeExchanger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/TimeExchanger.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/TimeExchanger.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/TimeExchanger.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/TimeSpan.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/date/TimeSpan.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/date/TimeSpan.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/date/TimeSpan.kt diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/Message.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/Message.kt new file mode 100644 index 0000000..95f9eec --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/Message.kt @@ -0,0 +1,15 @@ +package com.synebula.gaea.data.message + +import java.util.Date + +open class Message { + /** + * 传递的业务数据 + */ + var data: T? = null + + /** + * 消息时间戳 + */ + val timestamp: Long = Date().time +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpMessage.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpMessage.kt new file mode 100644 index 0000000..7e11771 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpMessage.kt @@ -0,0 +1,37 @@ +package com.synebula.gaea.data.message.http + +import com.synebula.gaea.data.message.Message + +/** + * + * 用来统一Http返回消息类型,通常使用json格式传递 + * + * @param status http编码。200成功,400错误,500异常 + * @tparam T 消息数据类型 + */ +class HttpMessage(var status: Int = HttpStatus.Success.code) : Message() { + /** + * 附带提示消息 + */ + var message = "" + + constructor(data: T) : this(HttpStatus.Success.code) { + this.data = data + } + + constructor(status: Int, message: String) : this(status) { + this.message = message + } + + constructor(status: Int, data: T, message: String) : this(status) { + this.data = data + this.message = message + } + + fun from(other: HttpMessage) { + this.status = other.status + this.data = other.data + this.message = message + } +} + diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpStatus.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpStatus.kt new file mode 100644 index 0000000..113e969 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/message/http/HttpStatus.kt @@ -0,0 +1,36 @@ +package com.synebula.gaea.data.message.http + +/** + * 状态类型。 + * + * @author alex + * @version 0.0.1 + * @since 2016年9月6日 下午3:27:55 + */ +enum class HttpStatus(val code: Int) { + /** + * 成功 + */ + Success(200), + + /** + * 失败 + */ + Failure(400), + + /** + * 错误 + */ + Error(500); + + companion object { + fun valueOf(code: Int): HttpStatus { + return when (code) { + 200 -> HttpStatus.Success + 400 -> HttpStatus.Failure + else -> HttpStatus.Error + } + } + } + +} diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/AbstractJsonSerializer.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/AbstractJsonSerializer.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/AbstractJsonSerializer.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/AbstractJsonSerializer.kt diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt similarity index 90% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt index eb21f7f..de5afeb 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/IJsonSerializable.kt @@ -2,7 +2,7 @@ package com.synebula.gaea.data.serializable /** * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年9月6日 下午3:44:24 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt similarity index 94% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt index 960071e..a85ccd2 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/serializable/ISerializable.kt @@ -3,7 +3,7 @@ package com.synebula.gaea.data.serializable /** * 继承该接口的类都可以序列号对象。 * - * @author reize + * @author alex * @version 0.0.1 * @since 2016年9月6日 下午3:42:01 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt similarity index 93% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt index b7a4248..168362b 100644 --- a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/DataOperateType.kt @@ -2,7 +2,7 @@ package com.synebula.gaea.data.type /** * 数据操作类型。包括创建、更新和删除。 - * @author reize + * @author alex * @version 0.0.1 * @since 2016年8月17日 下午2:48:29 */ diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/SortDirectionEnum.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/SortDirectionEnum.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/SortDirectionEnum.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/type/SortDirectionEnum.kt diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/Status.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/Status.kt new file mode 100644 index 0000000..e69de29 diff --git a/src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/TimeUnit.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/data/type/TimeUnit.kt similarity index 100% rename from src/gaea.data/src/main/kotlin/com/synebula/gaea/data/type/TimeUnit.kt rename to src/gaea/src/main/kotlin/com/synebula/gaea/data/type/TimeUnit.kt diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/ILogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/ILogger.kt new file mode 100644 index 0000000..6aa0ab8 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/ILogger.kt @@ -0,0 +1,17 @@ +package com.synebula.gaea.log + +import com.synebula.gaea.log.logger.* + +/** + * 定义日志记录的统一接口。 + * + * @author alex + * @version 0.0.1 + * @since 2016年8月15日 下午3:35:24 + */ +interface ILogger : ITraceLogger, IDebugLogger, IInfoLogger, IWarnLogger, IErrorLogger { + /** + * @return 日志对象的Name + */ + val name: String +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/Level.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/Level.kt new file mode 100644 index 0000000..429ad23 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/Level.kt @@ -0,0 +1,28 @@ +package com.synebula.gaea.log + +/** + * 日志等级 + * @author Looly + */ +enum class Level { + /** + * 'TRACE' log level. + */ + TRACE, + /** + * 'DEBUG' log level. + */ + DEBUG, + /** + * 'INFO' log level. + */ + INFO, + /** + * 'WARN' log level. + */ + WARN, + /** + * 'ERROR' log level. + */ + ERROR +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/NullLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/NullLogger.kt new file mode 100644 index 0000000..df3aa9e --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/NullLogger.kt @@ -0,0 +1,69 @@ +package com.synebula.gaea.log + +/** + * 默认空日志对象,不会执行任何操作。可以让使用日志的时候可以不会为空(null)。 + * + * @author alex + * @version 0.0.1 + * @since 2016年9月18日 下午1:58:36 + */ +class NullLogger : ILogger { + + override val isTraceEnabled: Boolean + get() = false + + override val isDebugEnabled: Boolean + get() = false + + override val isInfoEnabled: Boolean + get() = false + + override val isWarnEnabled: Boolean + get() = false + + override val isErrorEnabled: Boolean + get() = false + + override val name: String + get() = NullLogger::class.simpleName!! + + override fun trace(t: Throwable) {} + + override fun trace(format: String, vararg args: Any) {} + + override fun trace(t: Throwable, format: String, vararg args: Any) {} + + override fun trace(obj: Any, t: Throwable, format: String, vararg args: Any) {} + + override fun debug(t: Throwable) {} + + override fun debug(format: String, vararg args: Any) {} + + override fun debug(t: Throwable, format: String, vararg args: Any) {} + + override fun debug(obj: Any, t: Throwable, format: String, vararg args: Any) {} + + override fun info(t: Throwable) {} + + override fun info(format: String, vararg args: Any) {} + + override fun info(t: Throwable, format: String, vararg args: Any) {} + + override fun info(obj: Any, t: Throwable, format: String, vararg args: Any) {} + + override fun warn(t: Throwable) {} + + override fun warn(format: String, vararg args: Any) {} + + override fun warn(t: Throwable, format: String, vararg args: Any) {} + + override fun warn(obj: Any, t: Throwable, format: String, vararg args: Any) {} + + override fun error(t: Throwable) {} + + override fun error(format: String, vararg args: Any) {} + + override fun error(t: Throwable, format: String, vararg args: Any) {} + + override fun error(obj: Any, t: Throwable, format: String, vararg args: Any) {} +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IDebugLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IDebugLogger.kt new file mode 100644 index 0000000..655eb2f --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IDebugLogger.kt @@ -0,0 +1,47 @@ +package com.synebula.gaea.log.logger + +/** + * DEBUG级别日志接口 + * + * @author Looly + */ +interface IDebugLogger { + /** + * @return DEBUG 等级是否开启 + */ + val isDebugEnabled: Boolean + + /** + * 打印 DEBUG 等级的日志 + * + * @param t 错误对象 + */ + fun debug(t: Throwable) + + /** + * 打印 DEBUG 等级的日志 + * + * @param format 消息模板 + * @param args 参数 + */ + fun debug(format: String, vararg args: Any) + + /** + * 打印 DEBUG 等级的日志 + * + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun debug(t: Throwable, format: String, vararg args: Any) + + /** + * 打印 DEBUG 等级的日志 + * + * @param obj 输出错误对象 + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun debug(obj: Any, t: Throwable, format: String, vararg args: Any) +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IErrorLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IErrorLogger.kt new file mode 100644 index 0000000..b6ae32c --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IErrorLogger.kt @@ -0,0 +1,46 @@ +package com.synebula.gaea.log.logger + +/** + * ERROR级别日志接口 + * @author Looly + */ +interface IErrorLogger { + /** + * @return ERROR 等级是否开启 + */ + val isErrorEnabled: Boolean + + /** + * 打印 ERROR 等级的日志 + * + * @param t 错误对象 + */ + fun error(t: Throwable) + + /** + * 打印 ERROR 等级的日志 + * + * @param format 消息模板 + * @param args 参数 + */ + fun error(format: String, vararg args: Any) + + /** + * 打印 ERROR 等级的日志 + * + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun error(t: Throwable, format: String, vararg args: Any) + + /** + * 打印 ERROR 等级的日志 + * + * @param obj 输出错误对象 + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun error(obj: Any, t: Throwable, format: String, vararg args: Any) +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IInfoLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IInfoLogger.kt new file mode 100644 index 0000000..b66fc93 --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IInfoLogger.kt @@ -0,0 +1,46 @@ +package com.synebula.gaea.log.logger + +/** + * INFO级别日志接口 + * @author Looly + */ +interface IInfoLogger { + /** + * @return INFO 等级是否开启 + */ + val isInfoEnabled: Boolean + + /** + * 打印 INFO 等级的日志 + * + * @param t 错误对象 + */ + fun info(t: Throwable) + + /** + * 打印 INFO 等级的日志 + * + * @param format 消息模板 + * @param args 参数 + */ + fun info(format: String, vararg args: Any) + + /** + * 打印 INFO 等级的日志 + * + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun info(t: Throwable, format: String, vararg args: Any) + + /** + * 打印 INFO 等级的日志 + * + * @param obj 输出错误对象 + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun info(obj: Any, t: Throwable, format: String, vararg args: Any) +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/ITraceLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/ITraceLogger.kt new file mode 100644 index 0000000..aa579fe --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/ITraceLogger.kt @@ -0,0 +1,48 @@ +package com.synebula.gaea.log.logger + +/** + * TRACE级别日志接口 + * + * @author Looly + */ +interface ITraceLogger { + /** + * @return TRACE 等级是否开启 + */ + val isTraceEnabled: Boolean + + /** + * 打印 TRACE 等级的日志 + * + * @param t 错误对象 + */ + fun trace(t: Throwable) + + /** + * 打印 TRACE 等级的日志 + * + * @param format 消息模板 + * @param args 参数 + */ + fun trace(format: String, vararg args: Any) + + /** + * 打印 TRACE 等级的日志 + * + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun trace(t: Throwable, format: String, vararg args: Any) + + /** + * 打印 TRACE 等级的日志 + * + * @param obj 输出错误对象 + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun trace(obj: Any, t: Throwable, format: String, vararg args: Any) + +} diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IWarnLogger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IWarnLogger.kt new file mode 100644 index 0000000..8eebbda --- /dev/null +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/log/logger/IWarnLogger.kt @@ -0,0 +1,46 @@ +package com.synebula.gaea.log.logger + +/** + * WARN级别日志接口 + * @author Looly + */ +interface IWarnLogger { + /** + * @return WARN 等级是否开启 + */ + val isWarnEnabled: Boolean + + /** + * 打印 WARN 等级的日志 + * + * @param t 错误对象 + */ + fun warn(t: Throwable) + + /** + * 打印 WARN 等级的日志 + * + * @param format 消息模板 + * @param args 参数 + */ + fun warn(format: String, vararg args: Any) + + /** + * 打印 WARN 等级的日志 + * + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun warn(t: Throwable, format: String, vararg args: Any) + + /** + * 打印 WARN 等级的日志 + * + * @param obj 输出错误对象 + * @param t 错误对象 + * @param format 消息模板 + * @param args 参数 + */ + fun warn(obj: Any, t: Throwable, format: String, vararg args: Any) +} diff --git a/src/gaea.data/src/test/kotlin/com/synebula/gaea/test/CodeGenerateTest.kt b/src/gaea/src/test/kotlin/com/synebula/gaea/test/CodeGenerateTest.kt similarity index 100% rename from src/gaea.data/src/test/kotlin/com/synebula/gaea/test/CodeGenerateTest.kt rename to src/gaea/src/test/kotlin/com/synebula/gaea/test/CodeGenerateTest.kt