/**
*
*/
package org.goko.gcode.rs274ngcv3.xml.loader.modifier;
import org.goko.core.common.exception.GkException;
import org.goko.core.gcode.rs274ngcv3.element.GCodeProvider;
import org.goko.core.gcode.rs274ngcv3.element.IModifier;
import org.goko.core.workspace.service.ILoader;
import org.goko.core.workspace.service.IMapperService;
import org.goko.gcode.rs274ngcv3.xml.bean.XmlGCodeModifier;
/**
* @author PsyKo
* @date 13 d�c. 2015
*/
public abstract class AbstractModifierLoader<X extends XmlGCodeModifier, M extends IModifier<GCodeProvider>> implements ILoader<X, M>{
protected void loadAbstract(M output, X input, IMapperService mapperService) throws GkException {
output.setEnabled(input.isEnabled());
output.setOrder(input.getOrder());
}
/** (inheritDoc)
* @see org.goko.core.workspace.service.ILoader#load(java.lang.Object, org.goko.core.workspace.service.IMapperService)
*/
@Override
public final M load(X input, IMapperService mapperService) throws GkException {
M output = createOutputInstance();
loadAbstract(output, input, mapperService);
loadModifierData(output, input, mapperService);
return output;
}
protected abstract void loadModifierData(M output, X input, IMapperService mapperService) throws GkException;
/**
* @return an instance of the output object
*/
protected abstract M createOutputInstance();
}