/**
*
*/
package org.goko.gcode.rs274ngcv3.xml.loader.executiontoken;
import org.apache.commons.lang3.StringUtils;
import org.goko.core.common.exception.GkException;
import org.goko.core.execution.monitor.io.bean.XmlExecutionToken;
import org.goko.core.gcode.element.GCodeProviderReference;
import org.goko.core.gcode.element.IGCodeProvider;
import org.goko.core.gcode.execution.ExecutionToken;
import org.goko.core.gcode.execution.ExecutionTokenState;
import org.goko.core.gcode.rs274ngcv3.IRS274NGCService;
import org.goko.core.workspace.service.ILoader;
import org.goko.core.workspace.service.IMapperService;
/**
* @author Psyko
* @date 23 nov. 2016
*/
public class XmlExecutionTokenLoader implements ILoader<XmlExecutionToken, ExecutionToken>{
/** The RS274 GCode service*/
private IRS274NGCService rs274service;
/**
* @param rs274service
*/
public XmlExecutionTokenLoader(IRS274NGCService rs274service) {
super();
this.rs274service = rs274service;
}
/** (inheritDoc)
* @see org.goko.core.workspace.service.ILoader#load(java.lang.Object, org.goko.core.workspace.service.IMapperService)
*/
@Override
public ExecutionToken load(XmlExecutionToken input, IMapperService mapperService) throws GkException {
IGCodeProvider provider = null;
if(input.getProviderReference() != null){
GCodeProviderReference reference = mapperService.load(input.getProviderReference(), GCodeProviderReference.class);
if(reference.isValid()){
provider = reference;
}
}else if(StringUtils.isNotBlank(input.getGcodeProvider())){ // Backward compatibility
provider = rs274service.getGCodeProvider(input.getGcodeProvider());
}
ExecutionToken token = null;
if(provider != null){
token = new ExecutionToken<ExecutionTokenState>(provider, ExecutionTokenState.NONE);
token.setExecutionOrder(input.getExecutionOrder());
}
return token;
}
/** (inheritDoc)
* @see org.goko.core.workspace.service.ILoader#getOutputClass()
*/
@Override
public Class<ExecutionToken> getOutputClass() {
return ExecutionToken.class;
}
/** (inheritDoc)
* @see org.goko.core.workspace.service.ILoader#getInputClass()
*/
@Override
public Class<XmlExecutionToken> getInputClass() {
return XmlExecutionToken.class;
}
}