package edu.harvard.iq.dataverse.engine.command.impl;
import edu.harvard.iq.dataverse.DatasetFieldType;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DataverseFieldTypeInputLevel;
import edu.harvard.iq.dataverse.authorization.Permission;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import java.util.ArrayList;
import java.util.List;
/**
* Update an existing dataverse.
* @author michael
*/
@RequiredPermissions( Permission.EditDataverse )
public class UpdateDataverseCommand extends AbstractCommand<Dataverse> {
private final Dataverse editedDv;
private final List<DatasetFieldType> facetList;
private final List<Dataverse> featuredDataverseList;
private final List<DataverseFieldTypeInputLevel> inputLevelList;
public UpdateDataverseCommand(Dataverse editedDv, List<DatasetFieldType> facetList, List<Dataverse> featuredDataverseList,
DataverseRequest aRequest, List<DataverseFieldTypeInputLevel> inputLevelList ) {
super(aRequest, editedDv);
this.editedDv = editedDv;
// add update template uses this command but does not
// update facet list or featured dataverses
if (facetList != null){
this.facetList = new ArrayList<>(facetList);
} else {
this.facetList = null;
}
if (featuredDataverseList != null){
this.featuredDataverseList = new ArrayList<>(featuredDataverseList);
} else {
this.featuredDataverseList = null;
}
if (inputLevelList != null){
this.inputLevelList = new ArrayList<>(inputLevelList);
} else {
this.inputLevelList = null;
}
}
@Override
public Dataverse execute(CommandContext ctxt) throws CommandException {
Dataverse result = ctxt.dataverses().save(editedDv);
if ( facetList != null ) {
ctxt.facets().deleteFacetsFor(result);
int i=0;
for ( DatasetFieldType df : facetList ) {
ctxt.facets().create(i++, df.getId(), result.getId());
}
}
if ( featuredDataverseList != null ) {
ctxt.featuredDataverses().deleteFeaturedDataversesFor(result);
int i=0;
for ( Object obj : featuredDataverseList ) {
Dataverse dv = (Dataverse) obj;
ctxt.featuredDataverses().create(i++, dv.getId(), result.getId());
}
}
if ( inputLevelList != null ) {
ctxt.fieldTypeInputLevels().deleteFacetsFor(result);
for ( DataverseFieldTypeInputLevel obj : inputLevelList ) {
ctxt.fieldTypeInputLevels().create(obj);
}
}
ctxt.index().indexDataverse(result);
return result;
}
}