/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.excel.execution;
import java.io.File;
import de.rcenvironment.components.excel.common.ExcelComponentConstants;
import de.rcenvironment.components.excel.common.ExcelService;
import de.rcenvironment.components.excel.common.ExcelUtils;
import de.rcenvironment.core.component.api.ComponentException;
import de.rcenvironment.core.component.datamanagement.api.ComponentDataManagementService;
import de.rcenvironment.core.component.execution.api.ComponentContext;
import de.rcenvironment.core.component.execution.api.ComponentLog;
import de.rcenvironment.core.component.model.api.LazyDisposal;
import de.rcenvironment.core.component.model.spi.DefaultComponent;
import de.rcenvironment.core.datamodel.api.TypedDatumConverter;
import de.rcenvironment.core.datamodel.api.TypedDatumFactory;
import de.rcenvironment.core.datamodel.api.TypedDatumService;
import de.rcenvironment.core.notification.DistributedNotificationService;
/**
* Excel component parent (abstract) class for handling RCE specific things.
*
* @author Markus Kunde
*/
@LazyDisposal
public abstract class ExcelRCEComponent extends DefaultComponent {
private static final int NOTIFICATION_BUFFER = 1000;
protected DistributedNotificationService notificationService;
protected ExcelService excelService;
protected TypedDatumFactory typedDatumFactory;
protected TypedDatumConverter typedDatumConverter;
protected ComponentDataManagementService dataManagementService;
protected ComponentContext componentContext;
protected ComponentLog componentLog;
protected abstract void executingOneStep() throws ComponentException;
@Override
public void setComponentContext(ComponentContext componentContext) {
this.componentContext = componentContext;
this.componentLog = componentContext.getLog();
}
@Override
public boolean treatStartAsComponentRun() {
boolean isDriver = Boolean.valueOf(componentContext.getConfigurationValue(ExcelComponentConstants.DRIVER));
return isDriver || componentContext.getInputs().isEmpty();
}
@Override
public void start() throws ComponentException {
notificationService = componentContext.getService(DistributedNotificationService.class);
excelService = componentContext.getService(ExcelService.class);
typedDatumFactory = componentContext.getService(TypedDatumService.class).getFactory();
typedDatumConverter = componentContext.getService(TypedDatumService.class).getConverter();
dataManagementService = componentContext.getService(ComponentDataManagementService.class);
File originExcelFile =
ExcelUtils.getAbsoluteFile(componentContext.getConfigurationValue(ExcelComponentConstants.XL_FILENAME));
if (originExcelFile == null) {
throw new ComponentException("Cannot prepare Excel component. Maybe filename/path is wrong?");
}
notificationService.setBufferSize(componentContext.getExecutionIdentifier() + ExcelComponentConstants.NOTIFICATION_SUFFIX,
NOTIFICATION_BUFFER);
if (treatStartAsComponentRun()) {
executingOneStep();
}
}
@Override
public void processInputs() throws ComponentException {
executingOneStep();
}
@Override
public void dispose() {
if (componentContext != null) {
// clears notification buffer
notificationService.removePublisher(componentContext.getExecutionIdentifier()
+ ExcelComponentConstants.NOTIFICATION_SUFFIX);
}
}
}