package edu.harvard.iq.dataverse.engine.command.impl;
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DvObject;
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.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.exception.PermissionException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* Lists the content of a dataverse - both datasets and dataverses.
*
* @author michael
*/
// no annotations here, since permissions are dynamically decided
public class ListDataverseContentCommand extends AbstractCommand<List<DvObject>> {
private final Dataverse dvToList;
public ListDataverseContentCommand(DataverseRequest aRequest, Dataverse anAffectedDataverse) {
super(aRequest, anAffectedDataverse);
dvToList = anAffectedDataverse;
}
@Override
public List<DvObject> execute(CommandContext ctxt) throws CommandException {
LinkedList<DvObject> result = new LinkedList<>();
for (Dataset ds : ctxt.datasets().findByOwnerId(dvToList.getId())) {
try {
ds = ctxt.engine().submit(new GetDatasetCommand(getRequest(), ds));
result.add(ds);
} catch (PermissionException ex) {
}
}
for (Dataverse dv : ctxt.dataverses().findByOwnerId(dvToList.getId())) {
try {
dv = ctxt.engine().submit(new GetDataverseCommand(getRequest(), dv));
result.add(dv);
} catch (PermissionException ex) {
}
}
return result;
}
@Override
public Map<String, Set<Permission>> getRequiredPermissions() {
return Collections.singletonMap("",
dvToList.isReleased() ? Collections.<Permission>emptySet()
: Collections.singleton(Permission.ViewUnpublishedDataverse));
}
}