/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.datamanagement;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
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.EndpointData;
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.FinalWorkflowState;
import de.rcenvironment.core.datamodel.api.TimelineIntervalType;
import de.rcenvironment.core.datamodel.api.TypedDatum;
import de.rcenvironment.core.utils.common.rpc.RemotableService;
import de.rcenvironment.core.utils.common.rpc.RemoteOperationException;
/**
* Interface for the meta data service support.
*
* @author Jan Flink
*/
@RemotableService
public interface RemotableMetaDataService {
/**
* Adds a new {@link WorkflowRun} with the given initial parameters to the database.
*
* @param workflowTitle The title of the workflow.
* @param workflowControllerNodeId The workflow controller node identifier.
* @param workflowDataManagementNodeId The workflow data management node identifier.
* @param starttime The startime of the workflow run.
* @return The database identifier of the {@link WorkflowRun}.
* @throws RemoteOperationException standard remote operation exception
*/
Long addWorkflowRun(String workflowTitle, String workflowControllerNodeId, String workflowDataManagementNodeId, Long starttime)
throws RemoteOperationException;
/**
* Adds a reference to the workflow file to a {@link WorkflowRun}.
*
* @param workflowRunId The Id of the workflow to modify
* @param wfFileReference Reference to the workflow file.
* @throws RemoteOperationException standard remote operation exception
*/
void addWorkflowFileToWorkflowRun(Long workflowRunId, String wfFileReference) throws RemoteOperationException;
/**
* Adds {@link ComponentInstance}s to a {@link WorkflowRun}.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @param componentInstances The collection of {@link ComponentInstance}s.
* @return The map holding the relation between components execution identifier (String) and the database identifier (Long) of the
* {@link ComponentInstance}s.
* @throws RemoteOperationException standard remote operation exception
*/
Map<String, Long> addComponentInstances(Long workflowRunId, Collection<ComponentInstance> componentInstances)
throws RemoteOperationException;
/**
* Adds {@link EndpointInstance}s to a {@link ComponentInstance}.
*
* @param componentInstanceId The identifier of the {@link ComponentInstance}.
* @param endpointInstances The collection of {@link EndpointInstance}s.
* @return The map holding the relation between endpoint execution identifier (String) and the database identifier (Long) of the
* {@link ComponentInstance}s.
* @throws RemoteOperationException standard remote operation exception
*/
Map<String, Long> addEndpointInstances(Long componentInstanceId, Collection<EndpointInstance> endpointInstances)
throws RemoteOperationException;
/**
* Adds a {@link ComponentRun} with the given initial parameters to the database.
*
* @param componentInstanceId The identifier of the related {@link ComponentInstance}.
* @param nodeId The identifier of the node the component runs on.
* @param count The current run count.
* @param starttime The start time of the {@link ComponentRun}.
* @return The component run database identifier.
* @throws RemoteOperationException standard remote operation exception
*/
Long addComponentRun(Long componentInstanceId, String nodeId, Integer count, Long starttime) throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void addInputDatum(Long componentRunId, Long typedDatumId, Long endpointInstanceId, Integer count) throws RemoteOperationException;
/**
* 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}.
* @throws RemoteOperationException standard remote operation exception
*/
Long addOutputDatum(Long componentRunId, Long endpointInstanceId, String datum, Integer count) throws RemoteOperationException;
/**
* Adds properties to a {@link WorkflowRun}. Properties a represented in a key-value map.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @param properties The key-value map.
* @throws RemoteOperationException standard remote operation exception
*/
void addWorkflowRunProperties(Long workflowRunId, Map<String, String> properties) throws RemoteOperationException;
/**
* Adds properties to a {@link ComponentInstance}. Properties a represented in a key-value map.
*
* @param componentInstanceId The identifier of the {@link ComponentInstance}.
* @param properties The key-value map.
* @throws RemoteOperationException standard remote operation exception
*/
void addComponentInstanceProperties(Long componentInstanceId, Map<String, String> properties) throws RemoteOperationException;
/**
* Adds properties to a {@link ComponentInstance}. Properties a represented in a key-value map.
*
* @param endpointInstanceId The identifier of the {@link ComponentInstance}.
* @param properties The key-value map.
* @throws RemoteOperationException standard remote operation exception
*/
void addEndpointInstanceProperties(Long endpointInstanceId, Map<String, String> properties) throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void addComponentRunProperties(Long componentRunId, Map<String, String> properties) throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void setOrUpdateHistoryDataItem(Long componentRunId, String historyDataItem) throws RemoteOperationException;
/**
* Sets the final state and the end time of a {@link WorkflowRun}.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @param endtime The end time.
* @param finalState The final {@link FinalWorkflowState}.
* @throws RemoteOperationException standard remote operation exception
*/
void setWorkflowRunFinished(Long workflowRunId, Long endtime, FinalWorkflowState finalState) throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void setComponentRunFinished(Long componentRunId, Long endtime, FinalComponentRunState finalState) throws RemoteOperationException;
/**
* Sets the final state a {@link ComponentInstance}.
*
* @param componentInstanceId The identifier of the {@link ComponentInstance}.
* @param finalState The final {@link FinalComponentState}.
* @throws RemoteOperationException standard remote operation exception
*/
void setComponentInstanceFinalState(Long componentInstanceId, FinalComponentState finalState) throws RemoteOperationException;
/**
* Gets a collection of all {@link WorkflowRun}s in the database ordered by timestamp descending.
*
* @return A collection of {@link WorkflowRunDescription}s.
* @throws RemoteOperationException standard remote operation exception
*/
// TODO to make use of the ordered result, this should return List instead of Set - misc_ro
Set<WorkflowRunDescription> getWorkflowRunDescriptions() throws RemoteOperationException;
/**
* Gets the {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @return The {@link WorkflowRun}.
* @throws RemoteOperationException standard remote operation exception
*/
WorkflowRun getWorkflowRun(Long workflowRunId) throws RemoteOperationException;
/**
* Gets a collection of all {@link ComponentRun}s related to the {@link ComponentInstance} with the given identifier.
*
* @param componentInstanceId The identifier of the {@link ComponentInstance}.
* @return A collection of {@link ComponentRun}s.
* @throws RemoteOperationException standard remote operation exception
*/
Collection<ComponentRun> getComponentRuns(Long componentInstanceId) throws RemoteOperationException;
/**
* Gets a collection of all {@link EndpointData} items representing the input data of a {@link ComponentRun} with the given identifier.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @return The collection of {@link EndpointData} items.
* @throws RemoteOperationException standard remote operation exception
*/
Collection<EndpointData> getInputData(Long componentRunId) throws RemoteOperationException;
/**
* Gets a collection of all {@link EndpointData} items representing the output data of a {@link ComponentRun} with the given identifier.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @return The collection of {@link EndpointData} items.
* @throws RemoteOperationException standard remote operation exception
*/
Collection<EndpointData> getOutputData(Long componentRunId) throws RemoteOperationException;
/**
* Gets a map of key value entries representing properties of a {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @return The key-value map.
* @throws RemoteOperationException standard remote operation exception
*/
Map<String, String> getWorkflowRunProperties(Long workflowRunId) throws RemoteOperationException;
/**
* Gets a map of key value entries representing properties of a {@link ComponentRun} with the given identifier.
*
* @param componentRunId The identifier of the {@link ComponentRun}.
* @return The key-value map.
* @throws RemoteOperationException standard remote operation exception
*/
Map<String, String> getComponentRunProperties(Long componentRunId) throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void addTimelineInterval(Long workflowRunId, TimelineIntervalType intervalType, long starttime) throws RemoteOperationException;
/**
* 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.
* @return The database identifier of the {@link TimelineInterval}.
* @throws RemoteOperationException standard remote operation exception
*/
Long addTimelineInterval(Long workflowRunId, TimelineIntervalType intervalType, long starttime, Long relatedComponentId)
throws RemoteOperationException;
/**
* 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.
* @throws RemoteOperationException standard remote operation exception
*/
void setTimelineIntervalFinished(Long timelineIntervalId, long endtime) throws RemoteOperationException;
/**
* Gets the {@link WorkflowRunTimline} related to the {@link WorkflowRun} with the given identifier.
*
* @param workflowRunId The identifier of the {@link WorkflowRun}.
* @return The {@link WorkflowRunTimline}.
* @throws RemoteOperationException standard remote operation exception
*/
WorkflowRunTimline getWorkflowTimeline(Long workflowRunId) throws RemoteOperationException;
/**
* 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.
* @return True if successfully deleted, false otherwise.
* @throws RemoteOperationException standard remote operation exception
*/
Boolean deleteWorkflowRun(Long workflowRunId) throws RemoteOperationException;
/**
* 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.
* @return True if successfully deleted, false otherwise.
* @throws RemoteOperationException standard remote operation exception
*/
Boolean deleteWorkflowRunFiles(Long workflowRunId) throws RemoteOperationException;
/**
* Gets the {@link DataReference} for the given uuid from the meta data backend.
*
* @param dataReferenceKey The key of the {@link DataReference} to return.
* @return The {@link DataReference}.
* @throws RemoteOperationException standard remote operation exception
*/
DataReference getDataReference(String dataReferenceKey) throws RemoteOperationException;
}