Files
bstore-j/src/main/java/com/reliancy/dbo/meta/FieldDefinition.java

102 lines
4.0 KiB
Java

/*
Copyright (c) 2011-2022 Reliancy LLC
Licensed under the GNU LESSER GENERAL PUBLIC LICENSE Version 3.
You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html.
You may not use this file except in compliance with the License.
*/
package com.reliancy.dbo.meta;
import java.sql.Timestamp;
import com.reliancy.dbo.DBO;
import com.reliancy.dbo.Entity;
import com.reliancy.dbo.Field;
/**
* Metadata definition for a database field/column.
*
* <p>FieldDefinition extends DBO to store metadata about fields within entities,
* including database column information, constraints, and versioning.
*
* <h2>Usage:</h2>
* <pre>{@code
* MetaTerminal meta = (MetaTerminal) terminal;
*
* // Load field definitions for an entity
* List<FieldDefinition> fields = meta.load_fields("PersonDBO");
*
* // Create new field definition
* FieldDefinition fieldDef = new FieldDefinition();
* fieldDef.set(FieldDefinition.ENTITY_NAME, "PersonDBO");
* fieldDef.set(FieldDefinition.FIELD_NAME, "name");
* fieldDef.set(FieldDefinition.COLUMN_NAME, "name");
* fieldDef.set(FieldDefinition.COLUMN_TYPE, "VARCHAR");
* fieldDef.set(FieldDefinition.TYPE_PARAMS, "255");
* fieldDef.set(FieldDefinition.POSITION, 0);
* meta.save(fieldDef);
* }</pre>
*
* @see com.reliancy.dbo.meta.MetaTerminal
* @see EntityDefinition
* @see ChangeEvent
*/
@Entity.Info(name="bstore.field_definition")
public class FieldDefinition extends DBO {
// Primary key (composite: entity_name + field_name)
public static final Field ID = Field.Str("id").setPk(true); // Format: "EntityName.fieldName"
public static final Field ENTITY_NAME = Field.Str("entity_name"); // FK to EntityDefinition
public static final Field FIELD_NAME = Field.Str("field_name"); // Java field name
// Database mapping
public static final Field COLUMN_NAME = Field.Str("column_name"); // Database column name (id)
public static final Field COLUMN_TYPE = Field.Str("column_type"); // SQL type (VARCHAR, INTEGER, etc.)
public static final Field TYPE_PARAMS = Field.Str("type_params"); // e.g., "255" for VARCHAR(255)
// Position & ordering
public static final Field POSITION = Field.Int("position"); // Field position in entity
// Constraints
public static final Field IS_PK = Field.Bool("is_pk");
public static final Field IS_AUTO_INCREMENT = Field.Bool("is_auto_increment");
public static final Field IS_NULLABLE = Field.Bool("is_nullable");
public static final Field IS_UNIQUE = Field.Bool("is_unique");
public static final Field IS_INDEXED = Field.Bool("is_indexed");
public static final Field DEFAULT_VALUE_JSON = Field.Str("default_value_json"); // JSON representation
// Versioning & tracking
public static final Field ORIGINATOR_ID = Field.Str("originator_id").setTypeParams("128");
public static final Field MIGRATION_ID = Field.Str("migration_id").setTypeParams("128");
// Lifecycle
public static final Field CREATED_ON = Field.DateTime("created_on");
public static final Field UPDATED_ON = Field.DateTime("updated_on");
public static final Field IS_DEPRECATED = Field.Bool("is_deprecated");
public static final Field DEPRECATED_ON = Field.DateTime("deprecated_on");
public static final Field IS_ACTIVE = Field.Bool("is_active");
// Additional metadata
public static final Field DESCRIPTION = Field.Str("description");
public FieldDefinition() {
super();
setStatus(Status.NEW);
set(IS_ACTIVE, true);
set(IS_DEPRECATED, false);
set(IS_PK, false);
set(IS_AUTO_INCREMENT, false);
set(IS_NULLABLE, true);
set(IS_UNIQUE, false);
if (get(CREATED_ON) == null) {
set(CREATED_ON, new Timestamp(System.currentTimeMillis()));
}
}
/**
* Generate ID from entity name and field name.
*/
public static String generateId(String entityName, String fieldName) {
return entityName + "." + fieldName;
}
}