[jira] Created: (CAY-1123) Add UUID support

From: Artyom Sokolov (JIRA) ("Artyom)
Date: Mon Oct 13 2008 - 07:56:11 EDT

  • Next message: Artyom Sokolov (JIRA): "[jira] Updated: (CAY-1123) Add UUID support"

    Add UUID support
    ----------------

                     Key: CAY-1123
                     URL: https://issues.apache.org/cayenne/browse/CAY-1123
                 Project: Cayenne
              Issue Type: New Feature
             Environment: PostgreSQL
                Reporter: Artyom Sokolov
                Assignee: Andrus Adamchik

    To work properly with PostgreSQL's UUID columnt type I use next class which extends ExtendedType:

    package sandbox.orm.cayenne;

    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.Types;
    import java.util.UUID;

    import org.apache.cayenne.CayenneRuntimeException;
    import org.apache.cayenne.access.types.ExtendedType;
    import org.apache.cayenne.map.DbAttribute;
    import org.apache.cayenne.validation.ValidationResult;

    public class UUIDType implements ExtendedType {

    ..verride
            public String getClassName() {
                    return UUID.class.getName();
            }

    ..verride
            public Object materializeObject(ResultSet rs, int index, int type)
                            throws Exception {
                    UUID uuid = null;
                    switch (type) {
                    case Types.NULL:
                            uuid = null;
                            break;
                    default:
                            try {
                                    uuid = UUID.fromString(rs.getObject(index).toString());
                            } catch (IllegalArgumentException e) {
                                    throw new CayenneRuntimeException(
                                                    "Expected an instance of java.util.UUID, instead got "
                                                                    + uuid.getClass().getName()
                                                                    + ", column index: " + index);
                            }
                    }
                    return uuid;
            }

    ..verride
            public Object materializeObject(CallableStatement rs, int index, int type)
                            throws Exception {
                    UUID uuid = null;
                    switch (type) {
                    case Types.NULL:
                            uuid = null;
                            break;
                    default:
                            try {
                                    uuid = UUID.fromString(rs.getObject(index).toString());
                            } catch (IllegalArgumentException e) {
                                    throw new CayenneRuntimeException(
                                                    "Expected an instance of java.util.UUID, instead got "
                                                                    + uuid.getClass().getName()
                                                                    + ", column index: " + index);
                            }
                    }
                    return uuid;
            }

    ..verride
            public void setJdbcObject(PreparedStatement statement, Object value,
                            int pos, int type, int precision) throws Exception {
                    if (value == null) {
                            statement.setNull(pos, type);
                    } else if (value instanceof UUID) {
                            statement.setObject(pos, value);
                    } else {
                            throw new IllegalArgumentException("Expected java.util.UUID, got "
                                            + value.getClass().getName());
                    }
            }

    ..verride
            public boolean validateProperty(Object source, String property,
                            Object value, DbAttribute dbAttribute,
                            ValidationResult validationResult) {
                    return true;
            }

    }

    Then I register it with Configuration.getSharedConfiguration().getDomain().getNode("MyNode").getAdapter().getExtendedTypes().registerType(new UUIDType());

    Wouldn't it better to have same functionality in Cayenne core?

    Thanks,
    Artyom

    -- 
    This message is automatically generated by JIRA.
    -
    You can reply to this email to add a comment to the issue online.
    



    This archive was generated by hypermail 2.0.0 : Mon Oct 13 2008 - 07:57:31 EDT