package edu.isi.karma.metadata;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.rep.Workspace;
import edu.isi.karma.webserver.KarmaException;
import edu.isi.karma.webserver.ServletContextParameterMap;
import edu.isi.karma.webserver.ServletContextParameterMap.ContextParameter;
public class KarmaMetadataManager {
private Map<KarmaMetadataType, KarmaMetadata> metadataTypes;
public KarmaMetadataManager(ServletContextParameterMap contextParameters) throws KarmaException
{
createDirectoryForMetadata(contextParameters);
metadataTypes = new HashMap<>();
}
private void createDirectoryForMetadata(ServletContextParameterMap contextParameters) throws KarmaException {
String userDirPath = contextParameters.getParameterValue(ContextParameter.USER_DIRECTORY_PATH);
File userDir = new File(userDirPath);
if(userDir.exists() && !userDir.isDirectory())
{
throw new KarmaException("Directory provided for user preferences is actually a file!");
}
if(!userDir.exists() && !userDir.mkdirs())
{
throw new KarmaException("Unable to create directory for KARMA_WORK_HOME. Please define the environment variable KARMA_WORK_HOME to save preferences and Karma's learning");
}
}
public void register(KarmaMetadata metadata, UpdateContainer uc) throws KarmaException
{
metadataTypes.put(metadata.getType(), metadata);
}
public boolean isMetadataSupported(KarmaMetadataType type)
{
return metadataTypes.containsKey(type);
}
public void setup(Workspace workspace, UpdateContainer updateContainer) {
// some meta data such as ModelLearner need preloaded-ontologies, we do this meta data first
for(KarmaMetadata metadata : metadataTypes.values())
{
if (metadata instanceof OntologyMetadata)
metadata.setup(updateContainer, workspace);
}
for(KarmaMetadata metadata : metadataTypes.values())
{
if (!(metadata instanceof OntologyMetadata))
metadata.setup(updateContainer, workspace);
}
}
}