package edu.harvard.iq.dataverse.engine.command.impl;
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.RequiredPermissions;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.search.SearchException;
import edu.harvard.iq.dataverse.search.savedsearch.SavedSearch;
import edu.harvard.iq.dataverse.search.savedsearch.SavedSearchServiceBean;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.json.JsonObjectBuilder;
@RequiredPermissions(Permission.PublishDataverse)
public class CreateSavedSearchCommand extends AbstractCommand<SavedSearch> {
private static final Logger logger = Logger.getLogger(SavedSearchServiceBean.class.getCanonicalName());
private final SavedSearch savedSearchToCreate;
public CreateSavedSearchCommand(DataverseRequest aRequest, DvObject anAffectedDvObject, SavedSearch savedSearch) {
super(aRequest, anAffectedDvObject);
this.savedSearchToCreate = savedSearch;
}
@Override
public SavedSearch execute(CommandContext ctxt) throws CommandException {
String query = savedSearchToCreate.getQuery();
if (query == null) {
/**
* @todo This probably shouldn't be the default. We are disallowing
* wildcard searches. Go fix the DataversePage and make sure the
* query is set.
*/
String wildcardSearch = "*";
savedSearchToCreate.setQuery(wildcardSearch);
}
SavedSearch persistedSavedSearch = ctxt.savedSearches().save(savedSearchToCreate);
if (persistedSavedSearch != null) {
try {
DataverseRequest dataverseRequest = new DataverseRequest(savedSearchToCreate.getCreator(), SavedSearchServiceBean.getHttpServletRequest());
JsonObjectBuilder result = ctxt.savedSearches().makeLinksForSingleSavedSearch(dataverseRequest, persistedSavedSearch, true);
logger.log(Level.INFO, "result from attempt to make links from saved search: {0}", result.build().toString());
} catch (SearchException ex) {
logger.info(ex.getLocalizedMessage());
}
return persistedSavedSearch;
} else {
return null;
}
}
}