/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.datamanagement;
import java.util.Map;
import java.util.Set;
import de.rcenvironment.core.communication.common.CommunicationException;
import de.rcenvironment.core.communication.common.ResolvableNodeId;
import de.rcenvironment.core.datamanagement.commons.ComponentInstance;
import de.rcenvironment.core.datamanagement.commons.ComponentRun;
import de.rcenvironment.core.datamanagement.commons.DataReference;
import de.rcenvironment.core.datamanagement.commons.EndpointInstance;
import de.rcenvironment.core.datamanagement.commons.TimelineInterval;
import de.rcenvironment.core.datamanagement.commons.WorkflowRun;
import de.rcenvironment.core.datamanagement.commons.WorkflowRunDescription;
import de.rcenvironment.core.datamanagement.commons.WorkflowRunTimline;
import de.rcenvironment.core.datamodel.api.FinalComponentRunState;
import de.rcenvironment.core.datamodel.api.FinalComponentState;
import de.rcenvironment.core.datamodel.api.TimelineIntervalType;
import de.rcenvironment.core.datamodel.api.TypedDatum;
/**
* Distributed service of the {@link RemotableMetaDataService}.
*
* @author Doreen Seider
* @author Jan Flink
*/
public interface MetaDataService {
/**
* Adds a {@link ComponentRun} with the given initial parameters to the database.
*
* @param componentInstanceId The identifier of the related component instance.
* @param nodeId The identifier of the node the component runs on.
* @param count The current run count.
* @param starttime The startime of the {@link ComponentRun}.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @return The component run database identifier.
* @throws CommunicationException in case of communication error
*/
Long addComponentRun(Long componentInstanceId, String nodeId, Integer count, Long starttime,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Links a {@link TypedDatum} as input datum to an {@link EndpointInstance} of a {@link ComponentRun}.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @param typedDatumId The identifier of the {@link TypedDatum}.
* @param endpointInstanceId The identifier of the {@link EndpointInstance}.
* @param count The counter representing the order of incoming values.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @throws CommunicationException in case of communication error
*/
void addInputDatum(Long componentRunId, Long typedDatumId, Long endpointInstanceId, Integer count,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Adds an {@link TypedDatum} as output datum to an {@link EndpointInstance} of a {@link ComponentRun}.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @param endpointInstanceId The identifier of the {@link EndpointInstance}.
* @param datum The serialized {@link TypedDatum} to add.
* @param count The counter representing the order of outgoing values.
* @return The database identifier of the {@link TypedDatum}.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @throws CommunicationException in case of communication error
*/
Long addOutputDatum(Long componentRunId, Long endpointInstanceId, String datum, Integer count,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Adds properties to a {@link ComponentRun}. Properties a represented in a key-value map.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @param properties The key-value map.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @throws CommunicationException in case of communication error
*/
void addComponentRunProperties(Long componentRunId, Map<String, String> properties,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Adds a {@link TimelineInterval} to the {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @param intervalType The type of the interval.
* @param starttime The start time of the interval.
* @param relatedComponentId The database id of the related component.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @return The database identifier of the {@link TimelineInterval}.
* @throws CommunicationException in case of communication error
*/
Long addTimelineInterval(Long workflowRunId, TimelineIntervalType intervalType, long starttime, Long relatedComponentId,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Sets the endtime of the {@link TimelineInterval} with the given identifier.
*
* @param timelineIntervalId The identifier of the {@link TimelineInterval}.
* @param endtime The end time of the interval.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node.
* @throws CommunicationException in case of communication error
*/
void setTimelineIntervalFinished(Long timelineIntervalId, long endtime,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Sets or updates the string representation of a history data item of an {@link ComponentRun}.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @param historyDataItem The string representation of the history data item.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node
* @throws CommunicationException in case of communication error
*/
void setOrUpdateHistoryDataItem(Long componentRunId, String historyDataItem,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Sets the final state and the end time of a {@link ComponentRun}.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @param endtime The end time.
* @param finalState the final state of the run.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node
* @throws CommunicationException in case of communication error
*/
void setComponentRunFinished(Long componentRunId, Long endtime, FinalComponentRunState finalState,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Sets the final state a {@link ComponentInstance}.
*
* @param componentInstanceId The identifier of the {@link ComponentInstance}.
* @param finalState The final {@link FinalComponentState}.
* @param storageNodeId {@link ResolvableNodeId} of the workflow storage node
* @throws CommunicationException in case of communication error
*/
void setComponentInstanceFinalState(Long componentInstanceId, FinalComponentState finalState,
ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Gets a collection of all {@link WorkflowRunDescription}s in the database.
*
* @return A collection of {@link WorkflowRunDescription}s.
* @throws CommunicationException in case of communication error
*/
Set<WorkflowRunDescription> getWorkflowRunDescriptions() throws CommunicationException;
/**
* Gets the {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRunDescription}.
* @param storageNodeId any node id referring to the workflow storage node; if necessary, it will be attempted to resolve this to a more
* specific id
* @return The {@link WorkflowRunDescription}.
* @throws CommunicationException in case of communication error
*/
WorkflowRun getWorkflowRun(Long workflowRunId, ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Gets the {@link WorkflowRunTimline} related to the {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @param storageNodeId any node id referring to the workflow storage node; if necessary, it will be attempted to resolve this to a more
* specific id
* @return The {@link WorkflowRunTimline}.
* @throws CommunicationException in case of communication error
*/
WorkflowRunTimline getWorkflowTimeline(Long workflowRunId, ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Deletes a {@link WorkflowRun} and all related content in the database and the blob store.
*
* @param workflowRunId The identifier of the {@link WorkflowRun} to be deleted.
* @param storageNodeId any node id referring to the workflow storage node; if necessary, it will be attempted to resolve this to a more
* specific id
* @return True if successfully deleted, false otherwise.
* @throws CommunicationException in case of communication error
*/
Boolean deleteWorkflowRun(Long workflowRunId, ResolvableNodeId storageNodeId) throws CommunicationException;
/**
* Deletes all {@link DataReference}s of a {@link WorkflowRun} in the database and the blob store.
*
* @param workflowRunId The identifier of the {@link WorkflowRun} to be deleted.
* @param storageNodeId any node id referring to the workflow storage node; if necessary, it will be attempted to resolve this to a more
* specific id
* @return True if successfully deleted, false otherwise.
* @throws CommunicationException in case of communication error
*/
Boolean deleteWorkflowRunFiles(Long workflowRunId, ResolvableNodeId storageNodeId) throws CommunicationException;
}