blob: d8e9b166f2453c013a5db8c8dce9c47473773270 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* dclarke, mnorman - Dynamic Persistence
* http://wiki.eclipse.org/EclipseLink/Development/Dynamic
* (https://bugs.eclipse.org/bugs/show_bug.cgi?id=200045)
*
******************************************************************************/
package org.eclipse.persistence.internal.dynamic;
//javase imports
import java.util.Map;
//EclipseLink imports
import org.eclipse.persistence.exceptions.DescriptorException;
import org.eclipse.persistence.indirection.ValueHolderInterface;
import org.eclipse.persistence.internal.dynamic.DynamicEntityImpl.PropertyWrapper;
import org.eclipse.persistence.internal.helper.ClassConstants;
import org.eclipse.persistence.mappings.AttributeAccessor;
import org.eclipse.persistence.mappings.CollectionMapping;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.ForeignReferenceMapping;
/**
* ValueAccessor is a specialized AttributeAccessor enabling access to property values
*
* @author dclarke, mnorman
* @since EclipseLink 1.2
*/
public class ValuesAccessor extends AttributeAccessor {
protected DatabaseMapping mapping;
public ValuesAccessor(DatabaseMapping mapping) {
super();
this.mapping = mapping;
setAttributeName(mapping.getAttributeName());
}
@Override
public boolean isValuesAccessor() {
return true;
}
public Object getAttributeValueFromObject(Object entity) throws DescriptorException {
Map<String, PropertyWrapper> propertiesMap = ((DynamicEntityImpl)entity).getPropertiesMap();
PropertyWrapper wrapper = propertiesMap.get(attributeName);
// wrapper is never null
return wrapper.getValue();
}
public void setAttributeValueInObject(Object entity, Object value) throws DescriptorException {
Map<String, PropertyWrapper> propertiesMap = ((DynamicEntityImpl)entity).getPropertiesMap();
PropertyWrapper wrapper = propertiesMap.get(attributeName);
// wrapper is never null
wrapper.setValue(value);
wrapper.isSet(true);
}
@Override
public Class<?> getAttributeClass() {
if (mapping.isForeignReferenceMapping()) {
ForeignReferenceMapping refMapping = (ForeignReferenceMapping)mapping;
if (refMapping.isCollectionMapping()) {
return ((CollectionMapping)refMapping).getContainerPolicy().getContainerClass();
}
if (refMapping.usesIndirection()) {
return ValueHolderInterface.class;
}
return refMapping.getReferenceClass();
}
else {
if (mapping.getAttributeClassification() == null) {
return ClassConstants.OBJECT;
}
return mapping.getAttributeClassification();
}
}
}