/* StagerMethod.java created 2008-02-08
*
*/
package org.signalml.plugin.newstager.method;
import static org.signalml.plugin.i18n.PluginI18n._;
import java.io.File;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.signalml.app.document.BookDocument;
import org.signalml.domain.book.StandardBook;
import org.signalml.method.ComputationException;
import org.signalml.method.MethodExecutionTracker;
import org.signalml.method.TrackableMethod;
import org.signalml.method.iterator.IterableMethod;
import org.signalml.method.iterator.IterableParameter;
import org.signalml.plugin.data.PluginConfigForMethod;
import org.signalml.plugin.exception.PluginException;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.SvarogAccess;
import org.signalml.plugin.export.method.BaseMethodData;
import org.signalml.plugin.method.PluginAbstractMethod;
import org.signalml.plugin.newstager.NewStagerPlugin;
import org.signalml.plugin.newstager.data.NewStagerConstants;
import org.signalml.plugin.newstager.data.NewStagerData;
import org.signalml.plugin.newstager.data.NewStagerResult;
import org.signalml.plugin.newstager.data.logic.NewStagerMgrData;
import org.signalml.plugin.newstager.logic.mgr.NewStagerComputationMgr;
import org.signalml.plugin.tool.PluginAccessHelper;
import org.signalml.plugin.tool.PluginResourceRepository;
import org.springframework.validation.Errors;
/**
* StagerMethod
*
* @author Oskar Kapala © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z
* o.o.
*/
public class NewStagerMethod extends PluginAbstractMethod implements
TrackableMethod, IterableMethod {
protected static final Logger logger = Logger.getLogger(NewStagerMethod.class);
private static final String UID = "3c5b3e3d-c6b5-467b-8c20-fee30874889c";
private static final int[] VERSION = new int[] { 1, 0 };
@Override
public Object doComputation(Object data, MethodExecutionTracker tracker)
throws ComputationException {
NewStagerData stagerData;
try {
stagerData = (NewStagerData) data;
} catch (ClassCastException e) {
throw new ComputationException(e);
}
NewStagerComputationMgr mgr = new NewStagerComputationMgr();
try {
return mgr.compute(new NewStagerMgrData(stagerData, this.getStagerConstants(stagerData)), tracker);
} catch (SignalMLException e) {
// TODO Auto-generated catch block
logger.error("", e);
return null;
}
}
@Override
public Object digestIterationResult(int iteration, Object result) {
// TODO Auto-generated method stub
return null;
}
@Override
public IterableParameter[] getIterableParameters(Object data) {
// TODO Auto-generated method stub
return null;
}
@Override
public void validate(Object dataObj, Errors errors) {
super.validate(dataObj, errors);
if (!errors.hasErrors()) {
NewStagerData data = (NewStagerData) dataObj;
data.validate(errors);
}
}
@Override
public String getName() {
try {
return ((PluginConfigForMethod) PluginResourceRepository
.GetResource("config", NewStagerPlugin.class))
.getMethodConfig().getMethodName();
} catch (PluginException e) {
return "";
}
}
@Override
public BaseMethodData createData() {
return null;
}
@Override
public boolean supportsDataClass(Class<?> clazz) {
return NewStagerData.class.isAssignableFrom(clazz);
}
@Override
public Class<?> getResultClass() {
return NewStagerResult.class;
}
@Override
public String getUID() {
return UID;
}
@Override
public int[] getVersion() {
return VERSION;
}
@Override
public int getTickerCount() {
return 1;
}
@Override
public String getTickerLabel(int ticker) {
if (ticker == 0) {
return _("Sleep staging");
} else {
throw new IndexOutOfBoundsException("No ticker [" + ticker + "]");
}
}
private NewStagerConstants getStagerConstants(NewStagerData stagerData) throws SignalMLException {
SvarogAccess access = PluginAccessHelper.GetSvarogAccess();
if (access == null) {
throw new SignalMLException();
}
BookDocument doc;
try {
doc = new BookDocument(new File(stagerData.getParameters().bookFilePath));
} catch (IOException e) {
throw new SignalMLException(e);
}
StandardBook book = doc.getBook();
return new NewStagerConstants(book.getSamplingFrequency(),
stagerData.getParameters().rules.getBlockLengthInSecINT(),
book.getSegmentCount(),
NewStagerConstants.DEFAULT_MUSCLE_THRESHOLD,
NewStagerConstants.DEFAULT_MUSCLE_THRESHOLD_RATE,
NewStagerConstants.DEFAULT_AMPLITUDE_A,
NewStagerConstants.DEFAULT_AMPLITUDE_B,
NewStagerConstants.DEFAULT_ALPHA_OFFSET,
NewStagerConstants.DEFAULT_DELTA_OFFSET,
NewStagerConstants.DEFAULT_SPINDLE_OFFSET);
}
}