Search in sources :

Example 6 with PersistentWrapper

use of com.ramussoft.common.persistent.PersistentWrapper in project ramus by Vitaliy-Yakovchuk.

the class PersistentFactory method checkClass.

protected void checkClass(ClassLoader classLoader, Class<?> p, String pluginName, String typeName) {
    PersistentWrapper wrapper = new PersistentWrapper(p);
    Table table = p.getAnnotation(Table.class);
    String className = p.getName();
    PersistentRow row = getRow(className);
    if (row == null) {
        row = new PersistentRow(classLoader);
        rows.add(row);
    } else
        row.setClassLoader(classLoader);
    row.setClassName(className);
    row.setExists(true);
    row.setPluginName(pluginName);
    fillTable(table, row, p);
    if (table != null)
        row.setTableType(table.type().ordinal());
    row.setTypeName(typeName);
    String[] fields = wrapper.getFields();
    fields = Arrays.copyOf(fields, fields.length + 1);
    String valueBranchId = "valueBranchId";
    fields[fields.length - 1] = valueBranchId;
    for (String fieldName : fields) {
        String databaseField = wrapper.toDatabaseField(fieldName);
        PersistentField field = getField(row, databaseField);
        if (field == null) {
            field = new PersistentField();
            row.getFields().add(field);
        }
        int type = wrapper.getAnnotationType(fieldName);
        if (valueBranchId.equals(fieldName)) {
            field.setAutoset(true);
            field.setFieldId(-2);
            field.setPrimary(true);
            field.setDefaultValue("0");
        } else {
            Class<? extends Annotation> annotation = PersistentWrapper.ANNOTATIONS[type];
            if (Attribute.class.isAssignableFrom(annotation)) {
                Attribute attr = wrapper.getAnnotation(fieldName, Attribute.class);
                field.setAutoset(attr.autoset());
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (Element.class.isAssignableFrom(annotation)) {
                Element attr = wrapper.getAnnotation(fieldName, Element.class);
                field.setAutoset(attr.autoset());
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (com.ramussoft.common.persistent.Long.class.isAssignableFrom(annotation)) {
                com.ramussoft.common.persistent.Long attr = wrapper.getAnnotation(fieldName, com.ramussoft.common.persistent.Long.class);
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
                if (attr.setDefaultValue()) {
                    field.setDefaultValue(Long.toString(attr.defaultValue()));
                }
            } else if (com.ramussoft.common.persistent.Double.class.isAssignableFrom(annotation)) {
                com.ramussoft.common.persistent.Double attr = wrapper.getAnnotation(fieldName, com.ramussoft.common.persistent.Double.class);
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (Date.class.isAssignableFrom(annotation)) {
                Date attr = wrapper.getAnnotation(fieldName, Date.class);
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (Text.class.isAssignableFrom(annotation)) {
                Text attr = wrapper.getAnnotation(fieldName, Text.class);
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (Id.class.isAssignableFrom(annotation)) {
                Id attr = wrapper.getAnnotation(fieldName, Id.class);
                field.setFieldId(attr.id());
                field.setPrimary(true);
                field.setAutoset(true);
            } else if (Qualifier.class.isAssignableFrom(annotation)) {
                Qualifier attr = wrapper.getAnnotation(fieldName, Qualifier.class);
                field.setFieldId(attr.id());
                field.setPrimary(attr.primary());
            } else if (Binary.class.isAssignableFrom(annotation)) {
                Binary binary = wrapper.getAnnotation(fieldName, Binary.class);
                field.setFieldId(binary.id());
            } else if (com.ramussoft.common.persistent.Integer.class.isAssignableFrom(annotation)) {
                com.ramussoft.common.persistent.Integer integer = wrapper.getAnnotation(fieldName, com.ramussoft.common.persistent.Integer.class);
                field.setFieldId(integer.id());
                field.setPrimary(integer.primary());
            } else {
                throw new RuntimeException("Unknown annotation class: " + annotation.getName());
            }
        }
        field.setDatabaseName(databaseField);
        field.setType(type);
        field.setName(fieldName);
    }
}
Also used : Table(com.ramussoft.common.persistent.Table) PersistentField(com.ramussoft.common.persistent.PersistentField) PersistentRow(com.ramussoft.common.persistent.PersistentRow) Attribute(com.ramussoft.common.attribute.Attribute) Element(com.ramussoft.common.persistent.Element) Text(com.ramussoft.common.persistent.Text) Date(com.ramussoft.common.persistent.Date) Qualifier(com.ramussoft.common.persistent.Qualifier) Id(com.ramussoft.common.persistent.Id) Binary(com.ramussoft.common.persistent.Binary) PersistentWrapper(com.ramussoft.common.persistent.PersistentWrapper)

Example 7 with PersistentWrapper

use of com.ramussoft.common.persistent.PersistentWrapper in project ramus by Vitaliy-Yakovchuk.

the class UniversalPersistentFactory method save.

public Object save(Object object, boolean cached, JDBCCallback callback) {
    if (object instanceof List)
        saveList((List) object, cached, callback);
    Class clazz = object.getClass();
    PersistentRow row = rowHash.get(clazz);
    PersistentWrapper wrapper = rowWrappers.get(clazz);
    List<PersistentField> fields = row.getFields();
    Object[] objects = new Object[fields.size()];
    StringBuffer insert = new StringBuffer("INSERT INTO " + row.getTableName() + " (");
    StringBuffer values = new StringBuffer(") VALUES (");
    boolean first = true;
    for (int i = 0; i < objects.length; i++) {
        PersistentField field = fields.get(i);
        if (first)
            first = false;
        else {
            insert.append(", ");
            values.append(", ");
        }
        insert.append(field.getDatabaseName());
        values.append('?');
        objects[i] = wrapper.getField(object, field.getName());
    }
    String sql = insert.toString() + values.toString() + ")";
    return template.update(sql, objects, cached, callback);
}
Also used : PersistentField(com.ramussoft.common.persistent.PersistentField) PersistentRow(com.ramussoft.common.persistent.PersistentRow) ArrayList(java.util.ArrayList) List(java.util.List) PersistentWrapper(com.ramussoft.common.persistent.PersistentWrapper)

Example 8 with PersistentWrapper

use of com.ramussoft.common.persistent.PersistentWrapper in project ramus by Vitaliy-Yakovchuk.

the class UniversalPersistentFactory method deleteInTransaction.

public void deleteInTransaction(Object object) throws SQLException {
    Class clazz = object.getClass();
    PersistentRow row = rowHash.get(clazz);
    PersistentWrapper wrapper = rowWrappers.get(clazz);
    List<PersistentField> fields = row.getKeyFields();
    Object[] objects = new Object[fields.size()];
    StringBuffer delete = new StringBuffer("DELETE FROM " + row.getTableName() + " WHERE ");
    boolean first = true;
    for (int i = 0; i < objects.length; i++) {
        PersistentField field = fields.get(i);
        if (first)
            first = false;
        else {
            delete.append(" AND ");
        }
        delete.append(field.getDatabaseName());
        delete.append("=?");
        objects[i] = wrapper.getField(object, field.getName());
    }
    String sql = delete.toString();
    PreparedStatement ps = template.getPreparedStatement(sql, true);
    template.setParams(ps, objects);
    ps.execute();
}
Also used : PersistentField(com.ramussoft.common.persistent.PersistentField) PersistentRow(com.ramussoft.common.persistent.PersistentRow) PreparedStatement(java.sql.PreparedStatement) PersistentWrapper(com.ramussoft.common.persistent.PersistentWrapper)

Example 9 with PersistentWrapper

use of com.ramussoft.common.persistent.PersistentWrapper in project ramus by Vitaliy-Yakovchuk.

the class UniversalPersistentFactory method fillTable.

@Override
protected void fillTable(Table table, PersistentRow row, Class<?> p) {
    if (table != null)
        row.setTableName(getTableName(table));
    rowHash.put(p, row);
    rowWrappers.put(p, new PersistentWrapper(p));
}
Also used : PersistentWrapper(com.ramussoft.common.persistent.PersistentWrapper)

Example 10 with PersistentWrapper

use of com.ramussoft.common.persistent.PersistentWrapper in project ramus by Vitaliy-Yakovchuk.

the class UniversalPersistentFactory method saveInTransaction.

public void saveInTransaction(Object object, final boolean cached) throws SQLException {
    Class clazz = object.getClass();
    PersistentRow row = rowHash.get(clazz);
    PersistentWrapper wrapper = rowWrappers.get(clazz);
    List<PersistentField> fields = row.getFields();
    Object[] objects = new Object[fields.size()];
    StringBuffer insert = new StringBuffer("INSERT INTO " + row.getTableName() + " (");
    StringBuffer values = new StringBuffer(") VALUES (");
    boolean first = true;
    for (int i = 0; i < objects.length; i++) {
        PersistentField field = fields.get(i);
        if (first)
            first = false;
        else {
            insert.append(", ");
            values.append(", ");
        }
        insert.append(field.getDatabaseName());
        values.append('?');
        objects[i] = wrapper.getField(object, field.getName());
    }
    String sql = insert.toString() + values.toString() + ")";
    PreparedStatement ps = template.getPreparedStatement(sql, cached);
    synchronized (ps) {
        template.setParams(ps, objects);
        if (!cached)
            ps.close();
        ps.execute();
    }
}
Also used : PersistentField(com.ramussoft.common.persistent.PersistentField) PersistentRow(com.ramussoft.common.persistent.PersistentRow) PreparedStatement(java.sql.PreparedStatement) PersistentWrapper(com.ramussoft.common.persistent.PersistentWrapper)

Aggregations

PersistentWrapper (com.ramussoft.common.persistent.PersistentWrapper)24 PersistentField (com.ramussoft.common.persistent.PersistentField)22 PersistentRow (com.ramussoft.common.persistent.PersistentRow)22 Persistent (com.ramussoft.common.persistent.Persistent)9 ArrayList (java.util.ArrayList)9 PreparedStatement (java.sql.PreparedStatement)6 List (java.util.List)6 FindObject (com.ramussoft.common.attribute.FindObject)5 AttributePlugin (com.ramussoft.common.attribute.AttributePlugin)4 RowMapper (com.ramussoft.jdbc.RowMapper)4 ResultSet (java.sql.ResultSet)4 SQLException (java.sql.SQLException)4 Attribute (com.ramussoft.common.Attribute)3 Attribute (com.ramussoft.common.attribute.Attribute)2 Binary (com.ramussoft.common.persistent.Binary)2 Date (com.ramussoft.common.persistent.Date)2 Element (com.ramussoft.common.persistent.Element)2 Id (com.ramussoft.common.persistent.Id)2 Qualifier (com.ramussoft.common.persistent.Qualifier)2 Table (com.ramussoft.common.persistent.Table)2