/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.datamanagement.api;
import java.util.Iterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import de.rcenvironment.core.component.execution.api.ComponentContext;
import de.rcenvironment.core.component.execution.impl.ComponentContextImpl;
import de.rcenvironment.core.datamanagement.commons.MetaData;
import de.rcenvironment.core.datamanagement.commons.MetaDataKeys;
import de.rcenvironment.core.datamanagement.commons.MetaDataSet;
/**
* Common utilities for component-level data management.
*
* @author Robert Mischke
*/
public abstract class ComponentDataManagementUtil {
private static Log log = LogFactory.getLog(ComponentDataManagementUtil.class);
/**
* Inserts the appropriate metadata values for the given {@link ComponentContext} into the given {@link MetaDataSet}.
* <ul>
* <li>COMPONENT_RUN_ID</li>
* </ul>
*
* @param mds the metadata set to modify
* @param componentContext the source for the metadata values
*/
public static void setComponentMetaData(MetaDataSet mds, ComponentContext componentContext) {
MetaData mdComponentRunId = new MetaData(MetaDataKeys.COMPONENT_RUN_ID, true, true);
if (((ComponentContextImpl) componentContext).getComponentExecutionDataManagementId() == null) {
throw new IllegalArgumentException("Given data managegment identifier for the associated component run must not be null; "
+ "note: writing files to the data management is only allowed within 'start()' if 'treatStartAsComponentRun()' returns "
+ "true and within 'processInputs()' and not allowed at all if component was cancelled");
}
// transfer component run dm id
mds.setValue(mdComponentRunId, String.valueOf(((ComponentContextImpl) componentContext).getComponentExecutionDataManagementId()));
}
/**
* Sets the FILENAME metadata field.
*
* @param mds the {@link MetaDataSet} to modify
* @param filename the filename to set
*/
public static void setAssociatedFilename(MetaDataSet mds, String filename) {
MetaData mdFilename = new MetaData(MetaDataKeys.FILENAME, true, true);
mds.setValue(mdFilename, filename);
}
/**
* Logs debug information about a {@link MetaDataSet}.
*
* TODO merge into {@link MetaDataSet}?
*
* @param mds the object to log information about
*/
public static void printDebugInfo(MetaDataSet mds) {
Iterator<MetaData> iter = mds.iterator();
while (iter.hasNext()) {
MetaData md = iter.next();
// TODO using sysout here due to current problems with log capture
log.debug(md.getKey() + "/" + md.isReadOnly() + " -> " + mds.getValue(md));
}
}
}