org.eclipse.persistence.internal.dynamic.ValuesAccessor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction f2b9fc5
/*
* Copyright (c) 1998, 2019 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// 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.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;
}
@Override
public Object getAttributeValueFromObject(Object entity) throws DescriptorException {
Map propertiesMap = ((DynamicEntityImpl)entity).getPropertiesMap();
PropertyWrapper wrapper = propertiesMap.get(attributeName);
// wrapper is never null
return wrapper.getValue();
}
@Override
public void setAttributeValueInObject(Object entity, Object value) throws DescriptorException {
Map 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 refMapping.getContainerPolicy().getContainerClass();
}
if (refMapping.usesIndirection()) {
return ValueHolderInterface.class;
}
return refMapping.getReferenceClass();
}
else {
if (mapping.getAttributeClassification() == null) {
return ClassConstants.OBJECT;
}
return mapping.getAttributeClassification();
}
}
}