/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.impl;
import java.util.HashSet;
import java.util.Set;
import com.emc.storageos.db.client.model.DataObject;
/**
* @author cgarber
*
*/
public class LazyLoadedDataObject<E extends DataObject> implements DataObjectInstrumented<E> {
private Set<String> loaded = new HashSet<String>();
private LazyLoader loader;
private boolean lazyLoadingEnabled;
/*
* (non-Javadoc)
*
* @see com.emc.storageos.db.client.impl.DataObjectInstrumented#setLazyLoader(com.emc.storageos.db.client.impl.LazyLoader)
*/
@Override
public synchronized void initLazyLoading(LazyLoader loader) {
this.loader = loader;
lazyLoadingEnabled = false;
}
/*
* (non-Javadoc)
*
* @see com.emc.storageos.db.client.impl.DataObjectInstrumented#enableLazyLoading()
*/
@Override
public synchronized void enableLazyLoading() {
lazyLoadingEnabled = true;
}
/*
* (non-Javadoc)
*
* @see com.emc.storageos.db.client.impl.DataObjectInstrumented#load()
*/
@Override
public synchronized void load(String lazyLoadedFieldName, DataObject obj) {
if (lazyLoadingEnabled && !loaded.contains(lazyLoadedFieldName)) {
lazyLoadingEnabled = false;
loader.load(lazyLoadedFieldName, obj);
loaded.add(lazyLoadedFieldName);
lazyLoadingEnabled = true;
}
}
/*
* (non-Javadoc)
*
* @see com.emc.storageos.db.client.impl.DataObjectInstrumented#refreshMappedByField(java.lang.String,
* com.emc.storageos.db.client.model.DataObject)
*/
@Override
public synchronized void refreshMappedByField(String lazyLoadedFieldName, DataObject obj) {
if (lazyLoadingEnabled) {
lazyLoadingEnabled = false;
loader.refreshMappedByField(lazyLoadedFieldName, obj);
lazyLoadingEnabled = true;
}
}
/*
* (non-Javadoc)
*
* @see com.emc.storageos.db.client.impl.DataObjectInstrumented#invalidate(java.lang.String,
* com.emc.storageos.db.client.model.DataObject)
*/
@Override
public synchronized void invalidate(String lazyLoadedFieldName) {
loaded.remove(lazyLoadedFieldName);
}
}