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

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

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

         [ https://issues.apache.org/cayenne/browse/CAY-1123?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

    Artyom Sokolov updated CAY-1123:
    --------------------------------

        Attachment: UUIDType.java

    > 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
    > Attachments: UUIDType.java
    >
    >
    > 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:59:14 EDT