All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.java.ao.atlassian.AtlassianTableNameConverter Maven / Gradle / Ivy

Go to download

This is the core library for Active Objects. It is generic and can be embedded in any environment. As such it is generic and won't contain all connection pooling, etc.

There is a newer version: 6.1.1
Show newest version
package net.java.ao.atlassian;

import net.java.ao.RawEntity;
import net.java.ao.schema.Case;
import net.java.ao.schema.TableAnnotationTableNameConverter;
import net.java.ao.schema.TableNameConverter;
import net.java.ao.schema.UnderscoreTableNameConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Objects;

import static net.java.ao.atlassian.ConverterUtils.checkLength;

/**
 * 

This is the table name converter used by the Active Objects plugin. It works according to the following: *

    *
  • If the {@link net.java.ao.RawEntity entity interface} is annotated with {@link net.java.ao.schema.Table} then the value * of the annotation is used as the base for naming.
  • *
  • Otherwise the {@link Class#getSimpleName() simple class name} is used. *
* Then the following transformations are applied, in order: *
    *
  1. The base name is transform from camel case to under score and upper case. e.q. {@code MyEntity} becomes * {@code MY_ENTITY}.
  2. *
  3. The {@link TablePrefix prefix} is then applied, using its {@link TablePrefix#prepend(String) prepend} method.
  4. *
*

*

This means that if you refactor your entities and don't want to have to upgrade the database tables used behind * the scene, you can use the {@link net.java.ao.schema.Table} annotation to your advantage. For example, one could * refactor the following entity: *

 *     public interface MyEntity {}
 * 
* to *
 *     @Table("MyEntity")
 *     public interface YourEntity {}
 * 
*/ public final class AtlassianTableNameConverter implements TableNameConverter { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final TableNameConverter tableNameConverter; public AtlassianTableNameConverter(TablePrefix prefix) { // this the basic conversion we want, under score and upper case final UnderscoreTableNameConverter baseConverter = new UnderscoreTableNameConverter(Case.UPPER); tableNameConverter = new PrefixedTableNameConverter( Objects.requireNonNull(prefix,"prefix can't be null"), new TableAnnotationTableNameConverter(baseConverter, baseConverter)); } @Override public String getName(Class> entityClass) { final String name = tableNameConverter.getName(entityClass); checkLength(name, "Invalid entity, generated table name (" + name + ") for '" + entityClass.getName() + "' is too long! " + "It should be no longer than " + ConverterUtils.MAX_LENGTH + " chars."); logger.debug("Table name for '{}' is '{}'", entityClass.getName(), name); return name; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy