/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package edu.isi.karma.controller.command.importdata;
import java.io.IOException;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import edu.isi.karma.controller.command.Command;
import edu.isi.karma.controller.command.CommandException;
import edu.isi.karma.controller.command.CommandType;
import edu.isi.karma.controller.command.selection.SuperSelectionManager;
import edu.isi.karma.controller.update.ErrorUpdate;
import edu.isi.karma.controller.update.UpdateContainer;
import edu.isi.karma.controller.update.WorksheetListUpdate;
import edu.isi.karma.controller.update.WorksheetUpdateFactory;
import edu.isi.karma.imp.Import;
import edu.isi.karma.rep.Worksheet;
import edu.isi.karma.rep.Workspace;
import edu.isi.karma.webserver.KarmaException;
/**
* This abstract class in an interface to all Commands that Import data
*
*
* @author mielvandersande
*/
public abstract class ImportCommand extends Command {
private static Logger logger = LoggerFactory
.getLogger(ImportCommand.class.getSimpleName());
// Id of the revised worksheet, or null if no revision is present
private String revisionId;
public ImportCommand(String id, String model) {
super(id, model);
this.revisionId = null;
addTag(CommandTag.Import);
}
public ImportCommand(String id, String model, String revisionId) {
super(id, model);
this.revisionId = revisionId;
addTag(CommandTag.Import);
}
public String getRevisionId() {
return revisionId;
}
public boolean hasRevisionId() {
return revisionId != null;
}
@Override
public UpdateContainer doIt(Workspace workspace) throws CommandException {
UpdateContainer c = new UpdateContainer();
try {
Import imp = createImport(workspace);
Worksheet wsht = imp.generateWorksheet();
if (hasRevisionId()) {
Worksheet revisedWorksheet = workspace.getWorksheet(getRevisionId());
wsht.setRevisedWorksheet(revisedWorksheet);
}
c.add(new WorksheetListUpdate());
c.append(WorksheetUpdateFactory.createWorksheetHierarchicalAndCleaningResultsUpdates(wsht.getId(), SuperSelectionManager.DEFAULT_SELECTION, workspace.getContextId()));
} catch (JSONException | IOException | KarmaException | NullPointerException | ClassNotFoundException e) {
logger.error("Error occured while generating worksheet from " + getTitle() + "!", e);
return new UpdateContainer(new ErrorUpdate(
"Error occured during import: " + e.getMessage()));
}
return c;
}
@Override
public UpdateContainer undoIt(Workspace workspace) {
return null;
}
@Override
public CommandType getCommandType() {
return CommandType.notUndoable;
}
protected abstract Import createImport(Workspace workspace);
}