diff --git a/query/src/main/java/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.java b/query/src/main/java/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.java deleted file mode 100644 index bfe1b6e..0000000 --- a/query/src/main/java/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.java +++ /dev/null @@ -1,465 +0,0 @@ -package com.quarkworks.android.realmtypesafequery; - -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.quarkworks.android.realmtypesafequery.fields.RealmAggregatableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmDistinctableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmEquatableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmField; -import com.quarkworks.android.realmtypesafequery.fields.RealmMinMaxField; -import com.quarkworks.android.realmtypesafequery.fields.RealmNullableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmStringField; -import com.quarkworks.android.realmtypesafequery.fields.RealmComparableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmEmptyableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmInableField; -import com.quarkworks.android.realmtypesafequery.fields.RealmSortableField; - -import java.util.List; - -import io.realm.Case; -import io.realm.Realm; -import io.realm.RealmCollection; -import io.realm.RealmModel; -import io.realm.RealmQuery; -import io.realm.RealmResults; -import io.realm.Sort; - -@SuppressWarnings({"unused", "WeakerAccess", "UnusedReturnValue"}) -public class RealmTypeSafeQuery { - - /* - Static Constructors - */ - - @NonNull - public static Builder with(@NonNull Realm realm) { - return new Builder(realm); - } - - /* - Intermediary builder class - */ - - public static final class Builder { - @NonNull - private final Realm realm; - - private Builder(@NonNull Realm realm) { - this.realm = realm; - } - - @NonNull - public RealmTypeSafeQuery where(@NonNull Class clazz) { - return new RealmTypeSafeQuery<>(clazz, realm); - } - } - - @NonNull - public static RealmTypeSafeQuery where(@NonNull Class clazz, @NonNull Realm realm) { - return new RealmTypeSafeQuery<>(clazz, realm); - } - - /* - Quick Queries - */ - - @Nullable - public static M findFirst(@NonNull Realm realm, @NonNull RealmEquatableField field, @Nullable V value) { - return RealmTypeSafeQuery.with(realm).where(field.getModelClass()) - .equalTo(field, value).findFirst(); - } - - @Nullable - public static & RealmSortableField> M findFirst(@NonNull Realm realm, @NonNull F field, @Nullable V value, @NonNull Sort sortOrder) { - return RealmTypeSafeQuery.with(realm).where(field.getModelClass()).equalTo(field, value) - .sort(field, sortOrder).findFirst(); - } - - @NonNull - public static RealmResults findAll(@NonNull Realm realm, @NonNull RealmEquatableField field, @Nullable V value) { - return new RealmTypeSafeQuery<>(field.getModelClass(), realm) - .equalTo(field, value).findAll(); - } - - @NonNull - public static & RealmSortableField> RealmResults findAll(@NonNull Realm realm, @NonNull F field, @Nullable V value, @NonNull Sort sortOrder) { - return RealmTypeSafeQuery.with(realm).where(field.getModelClass()).equalTo(field, value).sort(field, sortOrder).findAll(); - } - - @NonNull - private final RealmQuery realmQuery; - - /* - Constructors - */ - - public RealmTypeSafeQuery(@NonNull RealmQuery realmQuery) { - this.realmQuery = realmQuery; - } - - public RealmTypeSafeQuery(@NonNull Class modelClass, @NonNull Realm realm) { - realmQuery = realm.where(modelClass); - } - - public RealmTypeSafeQuery(@NonNull RealmCollection realmCollection) { - realmQuery = realmCollection.where(); - } - - @NonNull - public RealmQuery getRealmQuery() { - return realmQuery; - } - - public boolean isValid() { - return realmQuery.isValid(); - } - - /* - Null - */ - - @NonNull - public RealmTypeSafeQuery isNull(@NonNull RealmNullableField field) { - field.isNull(realmQuery); - return this; - } - - @NonNull - public RealmTypeSafeQuery isNotNull(@NonNull RealmNullableField field) { - field.isNotNull(realmQuery); - return this; - } - - /* - EqualTo - */ - - @NonNull - public RealmTypeSafeQuery equalTo(@NonNull RealmEquatableField field, @Nullable V value) { - field.equalTo(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery notEqualTo(@NonNull RealmEquatableField field, @Nullable V value) { - field.notEqualTo(realmQuery, value); - return this; - } - - @NonNull - public final RealmTypeSafeQuery in(@NonNull RealmInableField field, V[] values) { - field.in(realmQuery, values); - return this; - } - - @NonNull - public final RealmTypeSafeQuery in(@NonNull RealmInableField field, List values) { - field.in(realmQuery, values); - return this; - } - - /* - String - */ - - @NonNull - public RealmTypeSafeQuery equalTo(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.equalTo(realmQuery, value, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery notEqualTo(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.notEqualTo(realmQuery, value, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery beginsWith(@NonNull RealmStringField field, @Nullable String value) { - field.beginsWith(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery beginsWith(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.beginsWith(realmQuery, value, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery endsWith(@NonNull RealmStringField field, @Nullable String value) { - field.endsWith(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery endsWith(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.endsWith(realmQuery, value, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery contains(@NonNull RealmStringField field, @Nullable String value) { - field.contains(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery contains(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.contains(realmQuery, value, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery contains(@NonNull RealmStringField field, @Nullable String value, @NonNull String delimiter) { - field.contains(realmQuery, value, delimiter); - return this; - } - - @NonNull - public RealmTypeSafeQuery contains(@NonNull RealmStringField field, @Nullable String value, @NonNull String delimiter, @NonNull Case casing) { - field.contains(realmQuery, value, delimiter, casing); - return this; - } - - @NonNull - public RealmTypeSafeQuery like(@NonNull RealmStringField field, @Nullable String value) { - field.like(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery like(@NonNull RealmStringField field, @Nullable String value, @NonNull Case casing) { - field.like(realmQuery, value, casing); - return this; - } - - /* - Comparison - */ - - @NonNull - public RealmTypeSafeQuery greaterThan(@NonNull RealmComparableField field, @Nullable V value) { - field.greaterThan(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery greaterThanOrEqualTo(@NonNull RealmComparableField field, @Nullable V value) { - field.greaterThanOrEqualTo(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery lessThan(@NonNull RealmComparableField field, @Nullable V value) { - field.lessThan(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery lessThanOrEqualTo(@NonNull RealmComparableField field, @Nullable V value) { - field.lessThanOrEqualTo(realmQuery, value); - return this; - } - - @NonNull - public RealmTypeSafeQuery between(@NonNull RealmComparableField field, @Nullable V start, @Nullable V end) { - field.between(realmQuery, start, end); - return this; - } - - /* - Groups - */ - - public interface Group { - void group(RealmTypeSafeQuery query); - } - - @NonNull - public RealmTypeSafeQuery group(@NonNull RealmTypeSafeQuery.Group group) { - realmQuery.beginGroup(); - group.group(this); - realmQuery.endGroup(); - return this; - } - - @NonNull - public RealmTypeSafeQuery beginGroup() { - realmQuery.beginGroup(); - return this; - } - - @NonNull - public RealmTypeSafeQuery endGroup() { - realmQuery.endGroup(); - return this; - } - - /* - Or - */ - - @NonNull - public RealmTypeSafeQuery or() { - realmQuery.or(); - return this; - } - - @NonNull - public RealmTypeSafeQuery or(@NonNull Group group) { - or().group(group); - return this; - } - - /* - Not - */ - - @NonNull - public RealmTypeSafeQuery not() { - realmQuery.not(); - return this; - } - - @NonNull - public RealmTypeSafeQuery not(@NonNull Group group) { - not().group(group); - return this; - } - - /* - Empty - */ - - @NonNull - public RealmTypeSafeQuery isEmpty(@NonNull RealmEmptyableField field) { - field.isEmpty(realmQuery); - return this; - } - - @NonNull - public RealmTypeSafeQuery isNotEmpty(@NonNull RealmEmptyableField field) { - field.isNotEmpty(realmQuery); - return this; - } - - /* - Distinct - */ - - @NonNull - public RealmQuery distinct(@NonNull RealmDistinctableField field) { - return field.distinct(realmQuery); - } - - @NonNull - @SafeVarargs - public final RealmQuery distinct(@NonNull RealmDistinctableField firstField, @NonNull RealmDistinctableField... remainingFields) { - return firstField.distinct(realmQuery, remainingFields); - } - - /* - Aggregate Functions - */ - - @NonNull - public T sum(@NonNull RealmAggregatableField field) { - return field.sum(realmQuery); - } - - public double average(@NonNull RealmAggregatableField field) { - return field.average(realmQuery); - } - - /* - Min Max - */ - - @Nullable - public T min(@NonNull RealmMinMaxField field) { - return field.min(realmQuery); - } - - @Nullable - public T max(@NonNull RealmMinMaxField field) { - return field.max(realmQuery); - } - - public long count() { - return realmQuery.count(); - } - - /* - Results - */ - - @NonNull - private static String[] fieldNames(@NonNull RealmField[] fields) { - final String[] fieldNames = new String[fields.length]; - for (int i = 0; i < fields.length; i++) { - fieldNames[i] = fields[i].getName(); - } - - return fieldNames; - } - - @NonNull - public RealmResults findAll() { - return realmQuery.findAll(); - } - - - /* - Find First - */ - - @Nullable - public Model findFirst() { - return realmQuery.findFirst(); - } - - /* - Async - */ - - @NonNull - public RealmResults findAllAsync() { - return realmQuery.findAllAsync(); - } - - @NonNull - public Model findFirstAsync() { - return realmQuery.findFirstAsync(); - } - - - /* - Sort - */ - - @NonNull - public RealmTypeSafeQuery sort(@NonNull RealmSortableField field) { - field.sort(realmQuery); - return this; - } - - @NonNull - public RealmTypeSafeQuery sort(@NonNull RealmSortableField field, @NonNull Sort sortOrder) { - field.sort(realmQuery, sortOrder); - return this; - } - - @NonNull - public RealmTypeSafeQuery sort(@NonNull RealmSortableField field1, @NonNull Sort sortOrder1, @NonNull RealmSortableField field2, @NonNull Sort sortOrder2) { - field1.sort(realmQuery, sortOrder1, field2, sortOrder2); - return this; - } - - @NonNull - public RealmTypeSafeQuery sort(@NonNull RealmSortableField[] fields, @NonNull Sort[] sortOrders) { - RealmSortableField.Companion.sort(realmQuery, fields, sortOrders); - return this; - } -} \ No newline at end of file diff --git a/query/src/main/java/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.java b/query/src/main/java/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.java deleted file mode 100644 index 477ae69..0000000 --- a/query/src/main/java/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.quarkworks.android.realmtypesafequery.constants; - -import java.util.Date; - -@SuppressWarnings("unused") -public class RealmDefaults { - public final static boolean BOOLEAN = false; - public final static byte BYTE = 0x0; - public final static short SHORT = 0; - public final static int INTEGER = 0; - public final static long LONG = 0L; - - public final static float FLOAT = 0.0f; - public final static double DOUBLE = 0.0d; - - public final static String STRING = ""; - public final static Date DATE = new Date(0); - - public final static byte[] BYTE_ARRAY = new byte[] {}; -} \ No newline at end of file diff --git a/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.kt b/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.kt new file mode 100644 index 0000000..fcbb0bb --- /dev/null +++ b/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/RealmTypeSafeQuery.kt @@ -0,0 +1,382 @@ +package com.quarkworks.android.realmtypesafequery + +import com.quarkworks.android.realmtypesafequery.fields.RealmAggregatableField +import com.quarkworks.android.realmtypesafequery.fields.RealmComparableField +import com.quarkworks.android.realmtypesafequery.fields.RealmDistinctableField +import com.quarkworks.android.realmtypesafequery.fields.RealmEmptyableField +import com.quarkworks.android.realmtypesafequery.fields.RealmEquatableField +import com.quarkworks.android.realmtypesafequery.fields.RealmField +import com.quarkworks.android.realmtypesafequery.fields.RealmInableField +import com.quarkworks.android.realmtypesafequery.fields.RealmMinMaxField +import com.quarkworks.android.realmtypesafequery.fields.RealmNullableField +import com.quarkworks.android.realmtypesafequery.fields.RealmSortableField +import com.quarkworks.android.realmtypesafequery.fields.RealmStringField +import io.realm.Case +import io.realm.Realm +import io.realm.RealmCollection +import io.realm.RealmModel +import io.realm.RealmQuery +import io.realm.RealmResults +import io.realm.Sort + +/** + * @author berbschloe@quarkworks.co (Brandon Erbschloe) + * @author paul@quarkworks.co (Paul Gillis) + */ +@Suppress("unused") +class RealmTypeSafeQuery(private val realmQuery: RealmQuery) { + /* + * Constructors + */ + constructor(modelClass: Class, realm: Realm) : this(realm.where(modelClass)) + constructor(realmCollection: RealmCollection) : this(realmCollection.where()) + + val isValid = realmQuery.isValid + + companion object { + + /* + * Static Constructors + */ + + @JvmStatic + fun with(realm: Realm) = Builder(realm) + + @JvmStatic + fun where(clazz: Class, realm: Realm): RealmTypeSafeQuery { + return RealmTypeSafeQuery(clazz, realm) + } + + /* + * Quick Queries + */ + + @JvmStatic + fun findFirst(realm: Realm, field: RealmEquatableField, value: V?): M? { + return RealmTypeSafeQuery.with(realm).where(field.modelClass) + .equalTo(field, value).findFirst() + } + + @JvmStatic + fun findFirst(realm: Realm, field: F, value: V?, sortOrder: Sort): M? + where M : RealmModel, F : RealmSortableField, F : RealmEquatableField + { + return RealmTypeSafeQuery.with(realm) + .where(field.modelClass) + .equalTo(field, value) + .sort(field, sortOrder) + .findFirst() + } + + @JvmStatic + fun findAll(realm: Realm, field: RealmEquatableField, value: V?): RealmResults { + return RealmTypeSafeQuery(field.modelClass, realm) + .equalTo(field, value).findAll() + } + + @JvmStatic + fun findAll(realm: Realm, field: F, value: V?, sortOrder: Sort): RealmResults + where M : RealmModel, F : RealmSortableField, F : RealmEquatableField { + return RealmTypeSafeQuery.with(realm) + .where(field.modelClass) + .equalTo(field, value) + .sort(field, sortOrder) + .findAll() + } + + /* + * Results + */ + + @JvmStatic + private fun fieldNames(fields: Array>): Array { + val fieldNames = Array(fields.size) { "" } + fields.forEachIndexed { index, realmField -> + fieldNames[index] = realmField.name + } + + return fieldNames + } + } + + /* + * Intermediary builder class + */ + + class Builder internal constructor(private val realm: Realm) { + fun where(clazz: Class): RealmTypeSafeQuery { + return RealmTypeSafeQuery(clazz, realm) + } + } + + /* + * Null + */ + + fun isNull(field: RealmNullableField): RealmTypeSafeQuery { + field.isNull(realmQuery) + return this + } + + fun isNotNull(field: RealmNullableField): RealmTypeSafeQuery { + field.isNotNull(realmQuery) + return this + } + + /* + * EqualTo + */ + + fun equalTo(field: RealmEquatableField, value: V?): RealmTypeSafeQuery { + field.equalTo(realmQuery, value) + return this + } + + fun notEqualTo(field: RealmEquatableField, value: V?): RealmTypeSafeQuery { + field.notEqualTo(realmQuery, value) + return this + } + + fun `in`(field: RealmInableField, values: Array): RealmTypeSafeQuery { + field.`in`(realmQuery, values) + return this + } + + fun `in`(field: RealmInableField, values: List): RealmTypeSafeQuery { + field.`in`(realmQuery, values) + return this + } + + /* + * String + */ + + fun equalTo(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.equalTo(realmQuery, value, casing) + return this + } + + fun notEqualTo(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.notEqualTo(realmQuery, value, casing) + return this + } + + fun beginsWith(field: RealmStringField, value: String?): RealmTypeSafeQuery { + field.beginsWith(realmQuery, value) + return this + } + + fun beginsWith(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.beginsWith(realmQuery, value, casing) + return this + } + + fun endsWith(field: RealmStringField, value: String?): RealmTypeSafeQuery { + field.endsWith(realmQuery, value) + return this + } + + fun endsWith(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.endsWith(realmQuery, value, casing) + return this + } + + fun contains(field: RealmStringField, value: String?): RealmTypeSafeQuery { + field.contains(realmQuery, value) + return this + } + + fun contains(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.contains(realmQuery, value, casing) + return this + } + + fun contains(field: RealmStringField, value: String?, delimiter: String): RealmTypeSafeQuery { + field.contains(realmQuery, value, delimiter) + return this + } + + fun contains(field: RealmStringField, value: String?, delimiter: String, casing: Case): RealmTypeSafeQuery { + field.contains(realmQuery, value, delimiter, casing) + return this + } + + fun like(field: RealmStringField, value: String?): RealmTypeSafeQuery { + field.like(realmQuery, value) + return this + } + + fun like(field: RealmStringField, value: String?, casing: Case): RealmTypeSafeQuery { + field.like(realmQuery, value, casing) + return this + } + + /* + * Comparison + */ + + fun greaterThan(field: RealmComparableField, value: V?): RealmTypeSafeQuery { + field.greaterThan(realmQuery, value) + return this + } + + fun greaterThanOrEqualTo(field: RealmComparableField, value: V?): RealmTypeSafeQuery { + field.greaterThanOrEqualTo(realmQuery, value) + return this + } + + fun lessThan(field: RealmComparableField, value: V?): RealmTypeSafeQuery { + field.lessThan(realmQuery, value) + return this + } + + fun lessThanOrEqualTo(field: RealmComparableField, value: V?): RealmTypeSafeQuery { + field.lessThanOrEqualTo(realmQuery, value) + return this + } + + fun between(field: RealmComparableField, start: V?, end: V?): RealmTypeSafeQuery { + field.between(realmQuery, start, end) + return this + } + + /* + * Groups + */ + + interface Group { + fun group(query: RealmTypeSafeQuery) + } + + fun group(group: (RealmTypeSafeQuery) -> Unit): RealmTypeSafeQuery { + realmQuery.beginGroup() + group(this) + realmQuery.endGroup() + return this + } + + fun group(group: RealmTypeSafeQuery.Group): RealmTypeSafeQuery = group(group::group) + + fun beginGroup(): RealmTypeSafeQuery { + realmQuery.beginGroup() + return this + } + + fun endGroup(): RealmTypeSafeQuery { + realmQuery.endGroup() + return this + } + + /* + * Or + */ + + fun or(): RealmTypeSafeQuery { + realmQuery.or() + return this + } + + fun or(group: Group): RealmTypeSafeQuery { + or().group(group) + return this + } + + /* + * Not + */ + + operator fun not(): RealmTypeSafeQuery { + realmQuery.not() + return this + } + + fun not(group: Group): RealmTypeSafeQuery { + not().group(group) + return this + } + + /* + * Empty + */ + + fun isEmpty(field: RealmEmptyableField): RealmTypeSafeQuery { + field.isEmpty(realmQuery) + return this + } + + fun isNotEmpty(field: RealmEmptyableField): RealmTypeSafeQuery { + field.isNotEmpty(realmQuery) + return this + } + + /* + * Distinct + */ + + fun distinct(field: RealmDistinctableField): RealmQuery = field.distinct(realmQuery) + + @SafeVarargs + fun distinct(firstField: RealmDistinctableField, vararg remainingFields: RealmDistinctableField): RealmQuery { + return firstField.distinct(realmQuery, *remainingFields) + } + + /* + * Aggregate Functions + */ + + fun sum(field: RealmAggregatableField): T = field.sum(realmQuery) + + fun average(field: RealmAggregatableField): Double = field.average(realmQuery) + + /* + * Min Max + */ + + fun min(field: RealmMinMaxField): T? = field.min(realmQuery) + + fun max(field: RealmMinMaxField): T? = field.max(realmQuery) + + fun count(): Long = realmQuery.count() + + fun findAll(): RealmResults = realmQuery.findAll() + + + /* + * Find First + */ + + fun findFirst(): Model? = realmQuery.findFirst() + + /* + * Async + */ + + fun findAllAsync(): RealmResults = realmQuery.findAllAsync() + + fun findFirstAsync(): Model = realmQuery.findFirstAsync() + + + /* + * Sort + */ + + fun sort(field: RealmSortableField): RealmTypeSafeQuery { + field.sort(realmQuery) + return this + } + + fun sort(field: RealmSortableField, sortOrder: Sort): RealmTypeSafeQuery { + field.sort(realmQuery, sortOrder) + return this + } + + fun sort(field1: RealmSortableField, sortOrder1: Sort, field2: RealmSortableField, sortOrder2: Sort): RealmTypeSafeQuery { + field1.sort(realmQuery, sortOrder1, field2, sortOrder2) + return this + } + + fun sort(fields: Array>, sortOrders: Array): RealmTypeSafeQuery { + RealmSortableField.sort(realmQuery, fields, sortOrders) + return this + } +} \ No newline at end of file diff --git a/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.kt b/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.kt new file mode 100644 index 0000000..1f231fd --- /dev/null +++ b/query/src/main/kotlin/com/quarkworks/android/realmtypesafequery/constants/RealmDefaults.kt @@ -0,0 +1,24 @@ +package com.quarkworks.android.realmtypesafequery.constants + +import java.util.Date + +/** + * @author berbschloe@quarkworks.co (Brandon Erbschloe) + * @author paul@quarkworks.co (Paul Gillis) + */ +@Suppress("unused") +object RealmDefaults { + const val BOOLEAN = false + const val BYTE: Byte = 0x0 + const val SHORT: Short = 0 + const val INTEGER = 0 + const val LONG = 0L + + const val FLOAT = 0.0f + const val DOUBLE = 0.0 + + const val STRING = "" + @JvmStatic val DATE = Date(0) + + @JvmStatic val BYTE_ARRAY = byteArrayOf() +} \ No newline at end of file