/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.components.evaluationmemory.execution.internal;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import de.rcenvironment.core.datamodel.api.TypedDatumSerializer;
import de.rcenvironment.core.datamodel.api.TypedDatumService;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Implementation of {@link EvaluationMemoryFileAccessService}.
*
* @author Doreen Seider
*/
public class EvaluationMemoryFileAccessServiceImpl implements EvaluationMemoryFileAccessService {
private TypedDatumSerializer typedDatumSerializer;
private Set<String> memoryFilesInUse = new HashSet<>();
@Override
public synchronized EvaluationMemoryAccess acquireAccessToMemoryFile(String memoryFilePath)
throws IOException {
if (memoryFilesInUse.contains(memoryFilePath)) {
throw new IOException(StringUtils.format("Failed to give read access to memory file: '%s',"
+ " because it seems to be already in use by another 'Evaluation Memory' component", memoryFilePath));
}
memoryFilesInUse.add(memoryFilePath);
EvaluationMemoryFileAccessImpl memoryAccess = new EvaluationMemoryFileAccessImpl(memoryFilePath);
memoryAccess.setTypedDatumSerializer(typedDatumSerializer);
return memoryAccess;
}
@Override
public synchronized boolean releaseAccessToMemoryFile(String memoryFilePath) {
return memoryFilesInUse.remove(memoryFilePath);
}
protected void bindTypedDatumService(TypedDatumService service) {
typedDatumSerializer = service.getSerializer();
}
}