diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java new file mode 100644 index 0000000000..1a80a78ac0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.server.hibernate/src/org/eclipse/emf/cdo/server/internal/hibernate/tuplizer/CDORevisionPropertyAccessor.java @@ -0,0 +1,155 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2008 Eike Stepper, Germany. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + **************************************************************************/ +package org.eclipse.emf.cdo.server.internal.hibernate.tuplizer; + +import org.eclipse.emf.cdo.internal.protocol.revision.InternalCDORevision; +import org.eclipse.emf.cdo.protocol.model.CDOFeature; + +import org.hibernate.HibernateException; +import org.hibernate.PropertyNotFoundException; +import org.hibernate.engine.SessionFactoryImplementor; +import org.hibernate.engine.SessionImplementor; +import org.hibernate.property.Getter; +import org.hibernate.property.PropertyAccessor; +import org.hibernate.property.Setter; + +import java.lang.reflect.Method; +import java.util.Map; + +/** + * @author Eike Stepper + */ +public class CDORevisionPropertyAccessor implements PropertyAccessor +{ + private CDORevisionTuplizer tuplizer; + + public CDORevisionPropertyAccessor(CDORevisionTuplizer tuplizer) + { + this.tuplizer = tuplizer; + } + + public CDORevisionTuplizer getTuplizer() + { + return tuplizer; + } + + @SuppressWarnings("unchecked") + public Getter getGetter(Class theClass, String propertyName) throws PropertyNotFoundException + { + return new CDORevisionGetter(this, propertyName); + } + + @SuppressWarnings("unchecked") + public Setter getSetter(Class theClass, String propertyName) throws PropertyNotFoundException + { + return new CDORevisionSetter(this, propertyName); + } + + /** + * @author Eike Stepper + */ + public static class BaseAccessor + { + private CDORevisionPropertyAccessor propertyAccessor; + + private CDOFeature cdoFeature; + + public BaseAccessor(CDORevisionPropertyAccessor propertyAccessor, String propertyName) + { + this.propertyAccessor = propertyAccessor; + cdoFeature = propertyAccessor.getTuplizer().getCDOClass().lookupFeature(propertyName); + if (cdoFeature == null) + { + throw new IllegalStateException("Feature not found: " + propertyName); + } + } + + public CDORevisionPropertyAccessor getPropertyAccessor() + { + return propertyAccessor; + } + + public CDOFeature getCDOFeature() + { + return cdoFeature; + } + } + + /** + * @author Eike Stepper + */ + public static class CDORevisionGetter extends BaseAccessor implements Getter + { + private static final long serialVersionUID = 1L; + + public CDORevisionGetter(CDORevisionPropertyAccessor propertyAccessor, String propertyName) + { + super(propertyAccessor, propertyName); + } + + public Object get(Object target) throws HibernateException + { + InternalCDORevision revision = (InternalCDORevision)target; + return revision.getValue(getCDOFeature()); + } + + @SuppressWarnings("unchecked") + public Object getForInsert(Object target, Map mergeMap, SessionImplementor session) throws HibernateException + { + return get(target); + } + + public Method getMethod() + { + return null; + } + + public String getMethodName() + { + return null; + } + + @SuppressWarnings("unchecked") + public Class getReturnType() + { + return Object.class; + } + } + + /** + * @author Eike Stepper + */ + public static class CDORevisionSetter extends BaseAccessor implements Setter + { + private static final long serialVersionUID = 1L; + + public CDORevisionSetter(CDORevisionPropertyAccessor propertyAccessor, String propertyName) + { + super(propertyAccessor, propertyName); + } + + public Method getMethod() + { + return null; + } + + public String getMethodName() + { + return null; + } + + public void set(Object target, Object value, SessionFactoryImplementor factory) throws HibernateException + { + InternalCDORevision revision = (InternalCDORevision)target; + revision.setValue(getCDOFeature(), value); + } + } +} |