Search in sources :

Example 1 with Model

use of com.manydesigns.portofino.model.Model in project Portofino by ManyDesigns.

the class TableTest method testActualColumnNames.

public void testActualColumnNames() {
    Model model = new Model();
    Database db = new Database();
    db.setConnectionProvider(new JdbcConnectionProvider());
    db.setDatabaseName("portofino");
    Schema schema = new Schema();
    schema.setDatabase(db);
    db.getSchemas().add(schema);
    schema.setSchemaName("meta");
    Table table = new Table();
    table.setSchema(schema);
    table.setTableName("ignore");
    schema.getTables().add(table);
    Column column = new Column();
    column.setTable(table);
    column.setColumnName(" ab!!!..acus$%/()");
    column.setColumnType("varchar");
    column.setLength(0);
    column.setScale(0);
    table.getColumns().add(column);
    model.getDatabases().add(db);
    model.init(new PropertiesConfiguration());
    assertNotNull(column.getActualPropertyName());
    assertEquals("_ab_____acus$____", column.getActualPropertyName());
    table = new Table();
    table.setSchema(schema);
    table.setTableName("ignore");
    column = new Column();
    column.setTable(table);
    column.setColumnName("0DPrpt");
    column.setColumnType("varchar");
    column.setLength(0);
    column.setScale(0);
    table.getColumns().add(column);
    schema.getTables().clear();
    schema.getTables().add(table);
    model.init(null);
    assertEquals("_0dprpt", column.getActualPropertyName());
    column.setColumnName("XYZéèçò°àùì");
    model.init(null);
    assertEquals("xyzéèçò_àùì", column.getActualPropertyName());
    column.setColumnName("ĖĔĕĘĘŜŞŝōŎľĿʛʋʊɪɩɨɷ");
    model.init(null);
    assertEquals("ĖĔĕĘĘŜŞŝōŎľĿʛʋʊɪɩɨɷ", column.getActualPropertyName());
}
Also used : Model(com.manydesigns.portofino.model.Model) PropertiesConfiguration(org.apache.commons.configuration2.PropertiesConfiguration)

Example 2 with Model

use of com.manydesigns.portofino.model.Model in project Portofino by ManyDesigns.

the class TableTest method testDuplicatePropertyNames.

public void testDuplicatePropertyNames() {
    Model model = new Model();
    Database db = new Database();
    db.setDatabaseName("portofino");
    db.setConnectionProvider(new JdbcConnectionProvider());
    Schema schema = new Schema();
    schema.setDatabase(db);
    db.getSchemas().add(schema);
    schema.setSchemaName("meta");
    Table table = new Table();
    table.setSchema(schema);
    table.setTableName("ignore");
    schema.getTables().add(table);
    Column column = new Column();
    column.setTable(table);
    column.setColumnName("dup");
    column.setColumnType("varchar");
    column.setLength(0);
    column.setScale(0);
    table.getColumns().add(column);
    Column column2 = new Column();
    column2.setTable(table);
    column2.setColumnName("dup");
    column2.setColumnType("number");
    column2.setLength(0);
    column2.setScale(0);
    table.getColumns().add(column2);
    model.getDatabases().add(db);
    model.init(new PropertiesConfiguration());
    assertFalse(StringUtils.equals(column.getActualPropertyName(), column2.getActualPropertyName()));
    Table table2 = new Table();
    table2.setSchema(schema);
    table2.setTableName("ignore2");
    schema.getTables().add(table2);
    Column column3 = new Column();
    column3.setTable(table2);
    column3.setColumnName("dup");
    column3.setColumnType("date");
    column3.setLength(0);
    column3.setScale(0);
    table2.getColumns().add(column3);
    ForeignKey fk = new ForeignKey(table);
    fk.setToSchema("meta");
    fk.setToTableName("ignore2");
    fk.setToDatabase("portofino");
    fk.setName("dup");
    Reference ref = new Reference(fk);
    ref.setFromColumn("dup");
    ref.setToColumn("dup");
    fk.getReferences().add(ref);
    table.getForeignKeys().add(fk);
    model.init(null);
    assertFalse(StringUtils.equals(column.getActualPropertyName(), column2.getActualPropertyName()));
    assertFalse(StringUtils.equals(column.getActualPropertyName(), fk.getActualOnePropertyName()));
    assertFalse(StringUtils.equals(column3.getActualPropertyName(), fk.getActualManyPropertyName()));
    fk.setName("dup_2");
    model.init(null);
    assertFalse(StringUtils.equals(column.getActualPropertyName(), column2.getActualPropertyName()));
    assertFalse(StringUtils.equals(column.getActualPropertyName(), fk.getActualOnePropertyName()));
    assertFalse(StringUtils.equals(column3.getActualPropertyName(), fk.getActualManyPropertyName()));
}
Also used : Model(com.manydesigns.portofino.model.Model) PropertiesConfiguration(org.apache.commons.configuration2.PropertiesConfiguration)

Example 3 with Model

use of com.manydesigns.portofino.model.Model in project Portofino by ManyDesigns.

the class QueryUtils method getRelatedObjects.

/**
 * Navigates a ...-to-many relationship returning the list of objects associated with a given entity.
 * @param persistence the persistence object
 * @param databaseName the name of the database (connection provider)
 * @param entityName the type (entity name) of the master object
 * @param obj the master object
 * @param oneToManyRelationshipName the name of the relationship to navigate
 * @return the list of associated objects
 */
@SuppressWarnings({ "unchecked" })
public static List<Object> getRelatedObjects(Persistence persistence, String databaseName, String entityName, Object obj, String oneToManyRelationshipName) {
    Model model = persistence.getModel();
    ForeignKey relationship = DatabaseLogic.findOneToManyRelationship(model, databaseName, entityName, oneToManyRelationshipName);
    if (relationship == null) {
        throw new IllegalArgumentException("Relationship not defined: " + oneToManyRelationshipName);
    }
    Table fromTable = relationship.getFromTable();
    Session session = persistence.getSession(fromTable.getDatabaseName());
    ClassAccessor toAccessor = persistence.getTableAccessor(databaseName, entityName);
    try {
        CriteriaDefinition criteria = createCriteria(session, fromTable);
        List<Predicate> where = new ArrayList<>();
        for (Reference reference : relationship.getReferences()) {
            Column fromColumn = reference.getActualFromColumn();
            Column toColumn = reference.getActualToColumn();
            PropertyAccessor toPropertyAccessor = toAccessor.getProperty(toColumn.getActualPropertyName());
            Object toValue = toPropertyAccessor.get(obj);
            where.add(criteria.builder.equal(criteria.root.get(fromColumn.getActualPropertyName()), toValue));
        }
        return session.createQuery(criteria.query.where(where.toArray(new Predicate[0]))).list();
    } catch (Throwable e) {
        String msg = String.format("Cannot access relationship %s on entity %s.%s", oneToManyRelationshipName, databaseName, entityName);
        logger.warn(msg, e);
    }
    return null;
}
Also used : PropertyAccessor(com.manydesigns.elements.reflection.PropertyAccessor) Predicate(javax.persistence.criteria.Predicate) ClassAccessor(com.manydesigns.elements.reflection.ClassAccessor) Model(com.manydesigns.portofino.model.Model) Session(org.hibernate.Session)

Example 4 with Model

use of com.manydesigns.portofino.model.Model in project Portofino by ManyDesigns.

the class QueryUtilsTest method testMergeQueryWithAlias.

public void testMergeQueryWithAlias() throws NoSuchFieldException {
    Model model = new Model();
    Database database = new Database();
    database.setDatabaseName("db");
    model.getDatabases().add(database);
    Schema schema = new Schema(database);
    schema.setSchemaName("schema");
    database.getSchemas().add(schema);
    Table table = new Table(schema);
    table.setTableName("test_table");
    schema.getTables().add(table);
    Column column = new Column(table);
    column.setColumnName("column1");
    column.setColumnType("varchar");
    column.setLength(10);
    column.setScale(0);
    table.getColumns().add(column);
    PrimaryKey primaryKey = new PrimaryKey(table);
    PrimaryKeyColumn pkColumn = new PrimaryKeyColumn(primaryKey);
    primaryKey.getPrimaryKeyColumns().add(pkColumn);
    pkColumn.setColumnName("column1");
    table.setPrimaryKey(primaryKey);
    model.init(new PropertiesConfiguration());
    TableAccessor tableAccessor = new TableAccessor(table);
    TableCriteria criteria = new TableCriteria(table);
    criteria.eq(tableAccessor.getProperty("column1"), "123");
    // W/o select
    QueryStringWithParameters queryStringWithParameters = QueryUtils.mergeQuery("from test_table t", criteria, null);
    assertEquals("FROM test_table t WHERE t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("from test_table t where t.foo = 1", criteria, null);
    assertEquals("FROM test_table t WHERE (t.foo = 1) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("from test_table t, other where t.foo = other.bar", criteria, null);
    assertEquals("FROM test_table t, other WHERE (t.foo = other.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("from test_table t, other x where t.foo = x.bar", criteria, null);
    assertEquals("FROM test_table t, other x WHERE (t.foo = x.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    // W/select
    queryStringWithParameters = QueryUtils.mergeQuery("select t from test_table t", criteria, null);
    assertEquals("SELECT t FROM test_table t WHERE t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t from test_table t where t.foo = 1", criteria, null);
    assertEquals("SELECT t FROM test_table t WHERE (t.foo = 1) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t from test_table t, other where t.foo = other.bar", criteria, null);
    assertEquals("SELECT t FROM test_table t, other WHERE (t.foo = other.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t from test_table t, other x where t.foo = x.bar", criteria, null);
    assertEquals("SELECT t FROM test_table t, other x WHERE (t.foo = x.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    // W/multiple select
    queryStringWithParameters = QueryUtils.mergeQuery("select t, u from test_table t", criteria, null);
    assertEquals("SELECT t, u FROM test_table t WHERE t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t, u from test_table t where t.foo = 1", criteria, null);
    assertEquals("SELECT t, u FROM test_table t WHERE (t.foo = 1) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t, u from test_table t, other where t.foo = other.bar", criteria, null);
    assertEquals("SELECT t, u FROM test_table t, other WHERE (t.foo = other.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
    queryStringWithParameters = QueryUtils.mergeQuery("select t, u from test_table t, other x where t.foo = x.bar", criteria, null);
    assertEquals("SELECT t, u FROM test_table t, other x WHERE (t.foo = x.bar) AND t.column1 = :p1", queryStringWithParameters.getQueryString());
}
Also used : TableAccessor(com.manydesigns.portofino.reflection.TableAccessor) QueryStringWithParameters(com.manydesigns.elements.text.QueryStringWithParameters) TableCriteria(com.manydesigns.portofino.persistence.TableCriteria) Model(com.manydesigns.portofino.model.Model) PropertiesConfiguration(org.apache.commons.configuration2.PropertiesConfiguration)

Example 5 with Model

use of com.manydesigns.portofino.model.Model in project Portofino by ManyDesigns.

the class TableTest method testActualEntityNames.

public void testActualEntityNames() {
    Model model = new Model();
    Database db = new Database();
    db.setDatabaseName("portofino");
    Schema schema = new Schema();
    schema.setDatabase(db);
    schema.setSchemaName("meta");
    Table table = new Table();
    table.setSchema(schema);
    table.setTableName(" ab!!!..acus$%/()");
    model.getDatabases().add(db);
    table.init(model, null);
    assertNotNull(table.getActualEntityName());
    assertEquals("_ab_____acus$____", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    table = new Table();
    table.setSchema(schema);
    table.setTableName("0DPrpt");
    table.init(model, null);
    assertEquals("_0dprpt", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    db = new Database();
    db.setDatabaseName("1portofino");
    schema = new Schema();
    schema.setDatabase(db);
    schema.setSchemaName("meta");
    table = new Table();
    table.setSchema(schema);
    table.setTableName("0DPrpt");
    table.init(model, null);
    assertEquals("_0dprpt", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    db = new Database();
    db.setDatabaseName("$1portofino");
    schema = new Schema();
    schema.setDatabase(db);
    schema.setSchemaName("meta");
    table = new Table();
    table.setSchema(schema);
    table.setTableName("0DPrpt");
    table.init(model, null);
    assertEquals("_0dprpt", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    db = new Database();
    db.setDatabaseName(".portofino");
    table.setTableName("0DPrpt");
    table.init(model, null);
    assertEquals("_0dprpt", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    table.setTableName("XYZéèçò°àùì");
    table.init(model, null);
    assertEquals("xyzéèçò_àùì", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
    table.setTableName("ĖĔĕĘĘŜŞŝōŎľĿʛʋʊɪɩɨɷ");
    table.init(model, null);
    assertEquals("ĖĔĕĘĘŜŞŝōŎľĿʛʋʊɪɩɨɷ", table.getActualEntityName());
    System.out.println(table.getActualEntityName());
}
Also used : Model(com.manydesigns.portofino.model.Model)

Aggregations

Model (com.manydesigns.portofino.model.Model)6 PropertiesConfiguration (org.apache.commons.configuration2.PropertiesConfiguration)3 ClassAccessor (com.manydesigns.elements.reflection.ClassAccessor)1 PropertyAccessor (com.manydesigns.elements.reflection.PropertyAccessor)1 QueryStringWithParameters (com.manydesigns.elements.text.QueryStringWithParameters)1 TableCriteria (com.manydesigns.portofino.persistence.TableCriteria)1 TableAccessor (com.manydesigns.portofino.reflection.TableAccessor)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Predicate (javax.persistence.criteria.Predicate)1 JAXBContext (javax.xml.bind.JAXBContext)1 JAXBException (javax.xml.bind.JAXBException)1 Unmarshaller (javax.xml.bind.Unmarshaller)1 ConfigurationException (org.apache.commons.configuration2.ex.ConfigurationException)1 FileObject (org.apache.commons.vfs2.FileObject)1 FileSystemException (org.apache.commons.vfs2.FileSystemException)1 Session (org.hibernate.Session)1