
org.datanucleus.cache.L2CacheRetrieveFieldManager Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of datanucleus-core Show documentation
Show all versions of datanucleus-core Show documentation
DataNucleus Core provides the primary components of a heterogenous Java persistence solution.
It supports persistence API's being layered on top of the core functionality.
Also includes the JDO API.
/**********************************************************************
Copyright (c) 2011 Andy Jefferson and others. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Contributors:
...
**********************************************************************/
package org.datanucleus.cache;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.datanucleus.ExecutionContext;
import org.datanucleus.PropertyNames;
import org.datanucleus.cache.CachedPC.CachedId;
import org.datanucleus.exceptions.NucleusObjectNotFoundException;
import org.datanucleus.identity.IdentityUtils;
import org.datanucleus.metadata.AbstractClassMetaData;
import org.datanucleus.metadata.AbstractMemberMetaData;
import org.datanucleus.metadata.MetaDataUtils;
import org.datanucleus.metadata.RelationType;
import org.datanucleus.state.ObjectProvider;
import org.datanucleus.store.fieldmanager.AbstractFieldManager;
import org.datanucleus.store.types.ContainerHandler;
import org.datanucleus.store.types.ElementContainerAdapter;
import org.datanucleus.store.types.MapContainerAdapter;
import org.datanucleus.store.types.SCOUtils;
import org.datanucleus.store.types.TypeManager;
import org.datanucleus.util.ClassUtils;
import org.datanucleus.util.NucleusLogger;
/**
* FieldManager responsible for retrieving the values from the provided CachedPC object.
*/
public class L2CacheRetrieveFieldManager extends AbstractFieldManager
{
/** ObjectProvider of the object we are copying values into. */
ObjectProvider op;
/** Execution Context. */
ExecutionContext ec;
/** CachedPC that we are taking values from. */
CachedPC cachedPC;
List fieldsNotLoaded = null;
public L2CacheRetrieveFieldManager(ObjectProvider op, CachedPC cachedpc)
{
this.op = op;
this.ec = op.getExecutionContext();
this.cachedPC = cachedpc;
}
public int[] getFieldsNotLoaded()
{
if (fieldsNotLoaded == null)
{
return null;
}
int[] flds = new int[fieldsNotLoaded.size()];
int i=0;
for (Integer fldNum : fieldsNotLoaded)
{
flds[i++] = fldNum;
}
return flds;
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchBooleanField(int)
*/
@Override
public boolean fetchBooleanField(int fieldNumber)
{
return (Boolean)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchByteField(int)
*/
@Override
public byte fetchByteField(int fieldNumber)
{
return (Byte)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchCharField(int)
*/
@Override
public char fetchCharField(int fieldNumber)
{
return (Character)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchDoubleField(int)
*/
@Override
public double fetchDoubleField(int fieldNumber)
{
return (Double)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchFloatField(int)
*/
@Override
public float fetchFloatField(int fieldNumber)
{
return (Float)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchIntField(int)
*/
@Override
public int fetchIntField(int fieldNumber)
{
return (Integer)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchLongField(int)
*/
@Override
public long fetchLongField(int fieldNumber)
{
return (Long)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchShortField(int)
*/
@Override
public short fetchShortField(int fieldNumber)
{
return (Short)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchStringField(int)
*/
@Override
public String fetchStringField(int fieldNumber)
{
return (String)cachedPC.getFieldValue(fieldNumber);
}
/* (non-Javadoc)
* @see org.datanucleus.store.fieldmanager.AbstractFieldManager#fetchObjectField(int)
*/
@Override
public Object fetchObjectField(int fieldNumber)
{
Object value = cachedPC.getFieldValue(fieldNumber);
if (value == null)
{
return null;
}
AbstractMemberMetaData mmd = op.getClassMetaData().getMetaDataForManagedMemberAtAbsolutePosition(fieldNumber);
Object fieldValue = null;
if (mmd.hasContainer())
{
fieldValue = processContainerField(fieldNumber, value, mmd);
}
else
{
fieldValue = processField(fieldNumber, value, mmd);
}
return fieldValue;
}
private Object processContainerField(int fieldNumber, Object container, AbstractMemberMetaData mmd)
{
Object fieldContainer = null;
TypeManager typeManager = op.getExecutionContext().getTypeManager();
ContainerHandler containerHandler = typeManager.getContainerHandler(mmd.getType());
if (mmd.hasMap())
{
fieldContainer = processMapContainer(fieldNumber, container, mmd, containerHandler);
}
else
{
fieldContainer = processElementContainer(fieldNumber, container, mmd, containerHandler);
}
return fieldContainer;
}
private Object processMapContainer(int fieldNumber, Object cachedMapContainer, AbstractMemberMetaData mmd, ContainerHandler
© 2015 - 2025 Weber Informatics LLC | Privacy Policy