/*
* DNugget.java
* Copyright (c) 2005 by University of Hamburg. All Rights Reserved.
* Departament of Informatics.
* Distributed Systems and Information Systems.
*
* Created by walczak on Jan 19, 2006.
* Last revision $Revision: 6926 $ by:
* $Author: braubach $ on $Date: 2008-09-28 22:16:58 +0200 (So, 28 Sep 2008) $.
*/
package nuggets.delegate;
import nuggets.AttributeSetOperation;
import nuggets.IAssembler;
import nuggets.ICruncher;
import nuggets.IDelegate;
import nuggets.INugget;
import nuggets.IReader;
import nuggets.InstanceNotAvailableException;
/** DNugget
* @author walczak
* @since Jan 19, 2006
*/
public class DNugget extends ADelegate implements IDelegate
{
/**
* @param o
* @param mill
* @see nuggets.IDelegate#persist(java.lang.Object, nuggets.ICruncher)
*/
public void persist(Object o, ICruncher mill, ClassLoader classloader)
{
((INugget)o)._persist(mill);
}
/**
* @param o
* @param attribute
* @param value
* @see nuggets.delegate.ADelegate#set(java.lang.Object, java.lang.String, java.lang.Object)
*/
public void set(Object o, String attribute, Object value)
{
((INugget)o)._set(attribute, value);
}
/**
* @param object
* @param asm
* @throws Exception
* @see nuggets.delegate.ADelegate#assemble(java.lang.Object, nuggets.IAssembler)
*/
public void assemble(Object object, IAssembler asm) throws Exception
{
INugget nugget=(INugget)object;
IReader reader=asm.getReader();
// set all other attributes
int count=reader.getAttributeCount();
for(int i=0; i<count; i++) {
String attribute = reader.getAttributeName(i);
if (attribute!=null) {
String sid = reader.getAttributeValue(i);
if (reader.isReferenceAttribute(i)) {
try {
nugget._set(attribute, asm.getValue(sid));
} catch(InstanceNotAvailableException inae) {
asm.delay(new AttributeSetOperation(this, object, attribute, sid));
}
} else {
nugget._set(attribute, sid);
}
}
}
}
}