/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.impl.CreateHarvestingClientCommand;
import edu.harvard.iq.dataverse.engine.command.impl.DeleteHarvestingClientCommand;
import edu.harvard.iq.dataverse.engine.command.impl.UpdateHarvestingClientCommand;
import edu.harvard.iq.dataverse.harvest.client.HarvesterServiceBean;
import edu.harvard.iq.dataverse.harvest.client.HarvestingClient;
import edu.harvard.iq.dataverse.harvest.client.HarvestingClientServiceBean;
import edu.harvard.iq.dataverse.harvest.client.oai.OaiHandler;
import edu.harvard.iq.dataverse.search.IndexServiceBean;
import edu.harvard.iq.dataverse.timer.DataverseTimerServiceBean;
import edu.harvard.iq.dataverse.util.JsfHelper;
import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
/**
*
* @author Leonid Andreev
*/
@ViewScoped
@Named
public class HarvestingClientsPage implements java.io.Serializable {
private static final Logger logger = Logger.getLogger(HarvestingClientsPage.class.getCanonicalName());
@Inject
DataverseSession session;
@EJB
AuthenticationServiceBean authSvc;
@EJB
DataverseServiceBean dataverseService;
@EJB
HarvestingClientServiceBean harvestingClientService;
@EJB
HarvesterServiceBean harvesterService;
@EJB
DatasetServiceBean datasetService;
@EJB
IndexServiceBean indexService;
@EJB
EjbDataverseEngine engineService;
@EJB
DataverseTimerServiceBean dataverseTimerService;
@Inject
DataverseRequestServiceBean dvRequestService;
@Inject
NavigationWrapper navigationWrapper;
private List<HarvestingClient> configuredHarvestingClients;
private Dataverse dataverse;
private Long dataverseId = null;
private HarvestingClient selectedClient;
//private static final String solrDocIdentifierDataset = "dataset_";
public enum PageMode {
VIEW, CREATE, EDIT, DELETE
}
private PageMode pageMode = PageMode.VIEW;
public enum CreateStep {
ONE, TWO, THREE, FOUR
}
private CreateStep createStep = CreateStep.ONE;
private Dataverse selectedDestinationDataverse;
public void setSelectedDestinationDataverse(Dataverse dv) {
this.selectedDestinationDataverse = dv;
}
public Dataverse getSelectedDestinationDataverse() {
return this.selectedDestinationDataverse;
}
public List<Dataverse> completeSelectedDataverse(String query) {
return dataverseService.filterByAliasQuery(query);
}
public String init() {
if (!isSessionUserAuthenticated()) {
return "/loginpage.xhtml" + navigationWrapper.getRedirectPage();
} else if (!isSuperUser()) {
return navigationWrapper.notAuthorized();
}
if (dataverseId != null) {
setDataverse(dataverseService.find(getDataverseId()));
if (getDataverse() == null) {
return navigationWrapper.notFound();
}
} else {
setDataverse(dataverseService.findRootDataverse());
}
configuredHarvestingClients = harvestingClientService.getAllHarvestingClients();
pageMode = PageMode.VIEW;
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, JH.localize("harvestclients.title"), JH.localize("harvestclients.toptip")));
return null;
}
public List<HarvestingClient> getConfiguredHarvestingClients() {
return configuredHarvestingClients;
}
public void setConfiguredHarvestingClients(List<HarvestingClient> configuredClients) {
configuredHarvestingClients = configuredClients;
}
public Dataverse getDataverse() {
return dataverse;
}
public void setDataverse(Dataverse dataverse) {
this.dataverse = dataverse;
}
public Long getDataverseId() {
return dataverseId;
}
public void setDataverseId(Long dataverseId) {
this.dataverseId = dataverseId;
}
public void setSelectedClient(HarvestingClient harvestingClient) {
selectedClient = harvestingClient;
}
public void setClientForDelete(HarvestingClient harvestingClient) {
selectedClient = harvestingClient;
this.pageMode = PageMode.DELETE;
}
public HarvestingClient getSelectedClient() {
return selectedClient;
}
public PageMode getPageMode() {
return this.pageMode;
}
public void setPageMode(PageMode pageMode) {
this.pageMode = pageMode;
}
public boolean isCreateMode() {
return PageMode.CREATE == this.pageMode;
}
public boolean isEditMode() {
return PageMode.EDIT == this.pageMode;
}
public boolean isViewMode() {
return PageMode.VIEW == this.pageMode;
}
public boolean isDeleteMode() {
return PageMode.DELETE == this.pageMode;
}
public boolean isCreateStepOne() {
return CreateStep.ONE == this.createStep;
}
public boolean isCreateStepTwo() {
return CreateStep.TWO == this.createStep;
}
public boolean isCreateStepThree() {
return CreateStep.THREE == this.createStep;
}
public boolean isCreateStepFour() {
return CreateStep.FOUR == this.createStep;
}
public void runHarvest(HarvestingClient harvestingClient) {
try {
DataverseRequest dataverseRequest = new DataverseRequest(session.getUser(), (HttpServletRequest)null);
harvesterService.doAsyncHarvest(dataverseRequest, harvestingClient);
} catch (Exception ex) {
String failMessage = "Sorry, harvest could not be started for the selected harvesting client configuration (unknown server error).";
JH.addMessage(FacesMessage.SEVERITY_FATAL, failMessage);
return;
}
String successMessage = JH.localize("harvestclients.actions.runharvest.success");
successMessage = successMessage.replace("{0}", harvestingClient.getName());
JsfHelper.addSuccessMessage(successMessage);
// refresh the harvesting clients list - we want this one to be showing
// "inprogress"; and we want to be able to disable all the actions buttons
// for it:
// (looks like we need to sleep for a few milliseconds here, to make sure
// it has already been updated with the "inprogress" setting)
try{Thread.sleep(500L);}catch(Exception e){}
configuredHarvestingClients = harvestingClientService.getAllHarvestingClients();
}
public void editClient(HarvestingClient harvestingClient) {
setSelectedClient(harvestingClient);
this.newNickname = harvestingClient.getName();
this.newHarvestingUrl = harvestingClient.getHarvestingUrl();
this.initialSettingsValidated = false;
// TODO: do we want to try and contact the server, again, to make
// sure the metadataformat and/or set are still supported?
// and if not, what do we do?
// alternatively, should we make these 2 fields not editable at all?
this.newOaiSet = !StringUtils.isEmpty(harvestingClient.getHarvestingSet()) ? harvestingClient.getHarvestingSet() : "none";
this.newMetadataFormat = harvestingClient.getMetadataPrefix();
this.newHarvestingStyle = harvestingClient.getHarvestStyle();
this.harvestTypeRadio = harvestTypeRadioOAI;
if (harvestingClient.isScheduled()) {
if (HarvestingClient.SCHEDULE_PERIOD_DAILY.equals(harvestingClient.getSchedulePeriod())) {
this.harvestingScheduleRadio = harvestingScheduleRadioDaily;
setHourOfDayAMPMfromInteger(harvestingClient.getScheduleHourOfDay());
} else if (HarvestingClient.SCHEDULE_PERIOD_DAILY.equals(harvestingClient.getSchedulePeriod())) {
this.harvestingScheduleRadio = harvestingScheduleRadioWeekly;
setHourOfDayAMPMfromInteger(harvestingClient.getScheduleHourOfDay());
setWeekdayFromInteger(harvestingClient.getScheduleDayOfWeek());
} else {
// ok, the client is marked as "scheduled" - but the actual
// schedule type is not specified.
// so we'll show it as unscheduled on the edit form:
this.harvestingScheduleRadio = harvestingScheduleRadioNone;
this.newHarvestingScheduleDayOfWeek = "Sunday";
this.newHarvestingScheduleTimeOfDay = "12";
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioAM;
}
} else {
this.harvestingScheduleRadio = harvestingScheduleRadioNone;
// unscheduled; but we populate this values to act as the defaults
// if they decide to schedule it and toggle the form to show the
// time and/or day pulldowns:
this.newHarvestingScheduleDayOfWeek = "Sunday";
this.newHarvestingScheduleTimeOfDay = "12";
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioAM;
}
this.createStep = CreateStep.ONE;
this.pageMode = PageMode.EDIT;
}
public void deleteClient() {
if (selectedClient != null) {
//configuredHarvestingClients.remove(selectedClient);
logger.info("proceeding to delete harvesting client "+selectedClient.getName());
try {
harvestingClientService.setDeleteInProgress(selectedClient.getId());
//engineService.submit(new DeleteHarvestingClientCommand(dvRequestService.getDataverseRequest(), selectedClient));
harvestingClientService.deleteClient(selectedClient.getId());
JsfHelper.addInfoMessage(JH.localize("harvestclients.tab.header.action.delete.infomessage"));
//} catch (CommandException ex) {
// String failMessage = "Selected harvesting client cannot be deleted.";
// JH.addMessage(FacesMessage.SEVERITY_FATAL, failMessage);
} catch (Exception ex) {
String failMessage = "Selected harvesting client cannot be deleted; unknown exception: "+ex.getMessage();
JH.addMessage(FacesMessage.SEVERITY_FATAL, failMessage);
}
} else {
logger.warning("Delete called, with a null selected harvesting client");
}
selectedClient = null;
configuredHarvestingClients = harvestingClientService.getAllHarvestingClients();
this.pageMode = PageMode.VIEW;
}
public void createClient(ActionEvent ae) {
HarvestingClient newHarvestingClient = new HarvestingClient(); // will be set as type OAI by default
newHarvestingClient.setName(newNickname);
if (getSelectedDestinationDataverse() == null) {
JsfHelper.JH.addMessage(FacesMessage.SEVERITY_ERROR,
"Failed to create a new Harvesting Client configuration: no destination dataverse selected.");
}
newHarvestingClient.setDataverse(getSelectedDestinationDataverse());
if (getSelectedDestinationDataverse().getHarvestingClientConfigs() == null) {
getSelectedDestinationDataverse().setHarvestingClientConfigs(new ArrayList<>());
}
getSelectedDestinationDataverse().getHarvestingClientConfigs().add(newHarvestingClient);
newHarvestingClient.setHarvestingUrl(newHarvestingUrl);
if (!StringUtils.isEmpty(newOaiSet)) {
newHarvestingClient.setHarvestingSet(newOaiSet);
}
newHarvestingClient.setMetadataPrefix(newMetadataFormat);
newHarvestingClient.setHarvestStyle(newHarvestingStyle);
if (isNewHarvestingScheduled()) {
newHarvestingClient.setScheduled(true);
if (isNewHarvestingScheduledWeekly()) {
newHarvestingClient.setSchedulePeriod(HarvestingClient.SCHEDULE_PERIOD_WEEKLY);
if (getWeekDayNumber() == null) {
// create a "week day is required..." error message, etc.
// but we may be better off not even giving them an opportunity
// to leave the field blank - ?
}
newHarvestingClient.setScheduleDayOfWeek(getWeekDayNumber());
} else {
newHarvestingClient.setSchedulePeriod(HarvestingClient.SCHEDULE_PERIOD_DAILY);
}
if (getHourOfDay() == null) {
// see the comment above, about the day of week. same here.
}
newHarvestingClient.setScheduleHourOfDay(getHourOfDay());
}
// make default archive url (used to generate links pointing back to the
// archival sources, when harvested datasets are displayed in search results),
// from the harvesting url:
newHarvestingClient.setArchiveUrl(makeDefaultArchiveUrl());
// set default description - they can customize it as they see fit:
newHarvestingClient.setArchiveDescription(JH.localize("harvestclients.viewEditDialog.archiveDescription.default.generic"));
// will try to save it now:
try {
newHarvestingClient = engineService.submit( new CreateHarvestingClientCommand(dvRequestService.getDataverseRequest(), newHarvestingClient));
configuredHarvestingClients = harvestingClientService.getAllHarvestingClients();
// NO, we no longer create timers here. It is the job of the Mother Timer!
//dataverseTimerService.createHarvestTimer(newHarvestingClient);
String successMessage = JH.localize("harvestclients.newClientDialog.success");
successMessage = successMessage.replace("{0}", newHarvestingClient.getName());
JsfHelper.addSuccessMessage(successMessage);
} /* TODO: (?) add a dedicated "NameAlreadyExists" exception for the
create client command?
catch ( CreateHarvestingClientCommand.NicknameAlreadyExistsException naee ) {
FacesContext.getCurrentInstance().addMessage(newHarvestingClient.getName(),
new FacesMessage( FacesMessage.SEVERITY_ERROR, naee.getMessage(), null));
}*/ catch (CommandException ex) {
logger.log(Level.WARNING, "Harvesting client creation command failed", ex);
JsfHelper.JH.addMessage(FacesMessage.SEVERITY_ERROR,
"Harvesting Client creation command failed.",
ex.getMessage());
} catch (Exception ex) {
JH.addMessage(FacesMessage.SEVERITY_FATAL, "Harvesting client creation failed (reason unknown).");
logger.log(Level.SEVERE, "Harvesting client creation failed (reason unknown)." + ex.getMessage(), ex);
}
setPageMode(PageMode.VIEW);
}
// this saves an existing client that the user has edited:
public void saveClient(ActionEvent ae) {
HarvestingClient harvestingClient = getSelectedClient();
if (harvestingClient == null) {
// TODO:
// tell the user somehow that the client cannot be saved, and advise
// them to save the settings they have entered.
// as of now - we will show an error message, but only after the
// edit form has been closed.
}
// nickname is not editable for existing clients:
//harvestingClient.setName(newNickname);
harvestingClient.setHarvestingUrl(newHarvestingUrl);
harvestingClient.setHarvestingSet(newOaiSet);
harvestingClient.setMetadataPrefix(newMetadataFormat);
harvestingClient.setHarvestStyle(newHarvestingStyle);
if (isNewHarvestingScheduled()) {
harvestingClient.setScheduled(true);
if (isNewHarvestingScheduledWeekly()) {
harvestingClient.setSchedulePeriod(HarvestingClient.SCHEDULE_PERIOD_WEEKLY);
if (getWeekDayNumber() == null) {
// create a "week day is required..." error message, etc.
// but we may be better off not even giving them an opportunity
// to leave the field blank - ?
}
harvestingClient.setScheduleDayOfWeek(getWeekDayNumber());
} else {
harvestingClient.setSchedulePeriod(HarvestingClient.SCHEDULE_PERIOD_DAILY);
}
if (getHourOfDay() == null) {
// see the comment above, about the day of week. same here.
}
harvestingClient.setScheduleHourOfDay(getHourOfDay());
}
// will try to save it now:
try {
harvestingClient = engineService.submit( new UpdateHarvestingClientCommand(dvRequestService.getDataverseRequest(), harvestingClient));
configuredHarvestingClients = harvestingClientService.getAllHarvestingClients();
if (!harvestingClient.isScheduled()) {
dataverseTimerService.removeHarvestTimer(harvestingClient);
}
JsfHelper.addSuccessMessage("Succesfully updated harvesting client " + harvestingClient.getName());
} catch (CommandException ex) {
logger.log(Level.WARNING, "Failed to save harvesting client", ex);
JsfHelper.JH.addMessage(FacesMessage.SEVERITY_ERROR,
"Failed to save harvesting client",
ex.getMessage());
} catch (Exception ex) {
JH.addMessage(FacesMessage.SEVERITY_FATAL, "Failed to save harvesting client (reason unknown).");
logger.log(Level.SEVERE, "Failed to save harvesting client (reason unknown)." + ex.getMessage(), ex);
}
setPageMode(PageMode.VIEW);
}
public void validateMetadataFormat(FacesContext context, UIComponent toValidate, Object rawValue) {
String value = (String) rawValue;
UIInput input = (UIInput) toValidate;
input.setValid(true); // Optimistic approach
// metadataFormats are selected from a pulldown that's populated with
// the values returned by the remote OAI server.
// the only validation we want is to make sure the select one from the
// menu.
if (context.getExternalContext().getRequestParameterMap().get("DO_VALIDATION") != null
&& StringUtils.isEmpty(value)) {
input.setValid(false);
context.addMessage(toValidate.getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", JH.localize("harvestclients.newClientDialog.oaiMetadataFormat.required")));
}
}
public boolean validateNickname() {
if ( !StringUtils.isEmpty(getNewNickname()) ) {
if (getNewNickname().length() > 30 || (!Pattern.matches("^[a-zA-Z0-9\\_\\-]+$", getNewNickname())) ) {
//input.setValid(false);
FacesContext.getCurrentInstance().addMessage(getNewClientNicknameInputField().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", JH.localize("harvestclients.newClientDialog.nickname.invalid")));
return false;
// If it passes the regex test, check
} else if ( harvestingClientService.findByNickname(getNewNickname()) != null ) {
//input.setValid(false);
FacesContext.getCurrentInstance().addMessage(getNewClientNicknameInputField().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", JH.localize("harvestclients.newClientDialog.nickname.alreadyused")));
return false;
}
return true;
}
// Nickname field is empty:
FacesContext.getCurrentInstance().addMessage(getNewClientNicknameInputField().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", JH.localize("harvestclients.newClientDialog.nickname.required")));
return false;
}
public boolean validateSelectedDataverse() {
if (selectedDestinationDataverse == null) {
FacesContext.getCurrentInstance().addMessage(getSelectedDataverseMenu().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", JH.localize("harvestclients.newClientDialog.dataverse.required")));
return false;
}
return true;
}
public boolean validateServerUrlOAI() {
if (!StringUtils.isEmpty(getNewHarvestingUrl())) {
OaiHandler oaiHandler = new OaiHandler(getNewHarvestingUrl());
boolean success = true;
String message = null;
// First, we'll try to obtain the list of supported metadata formats:
try {
List<String> formats = oaiHandler.runListMetadataFormats();
if (formats != null && formats.size() > 0) {
createOaiMetadataFormatSelectItems(formats);
} else {
success = false;
message = "received empty list from ListMetadataFormats";
}
// TODO: differentiate between different exceptions/failure scenarios } catch (OaiHandlerException ohee) {
} catch (Exception ex) {
success = false;
message = "Failed to execute listmetadataformats; " + ex.getMessage();
}
if (success) {
logger.info("metadataformats: success");
logger.info(getOaiMetadataFormatSelectItems().size() + " metadata formats total.");
} else {
logger.info("metadataformats: failed;"+message);
}
// And if that worked, the list of sets provided:
if (success) {
try {
List<String> sets = oaiHandler.runListSets();
createOaiSetsSelectItems(sets);
} catch (Exception ex) {
//success = false;
// ok - we'll try and live without sets for now...
// (since listMetadataFormats has succeeded earlier, may
// be safe to assume that this OAI server is at least
// somewhat functioning...)
// (XOAI ListSets buggy as well?)
message = "Failed to execute ListSets; " + ex.getMessage();
logger.warning(message);
}
}
if (success) {
return true;
}
FacesContext.getCurrentInstance().addMessage(getNewClientUrlInputField().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", getNewHarvestingUrl() + ": " + JH.localize("harvestclients.newClientDialog.url.invalid")));
return false;
}
FacesContext.getCurrentInstance().addMessage(getNewClientUrlInputField().getClientId(),
new FacesMessage(FacesMessage.SEVERITY_ERROR, "", getNewHarvestingUrl() + ": " + JH.localize("harvestclients.newClientDialog.url.required")));
return false;
}
public void validateInitialSettings() {
if (isHarvestTypeOAI()) {
boolean nicknameValidated = true;
boolean destinationDataverseValidated = true;
if (isCreateMode()) {
nicknameValidated = validateNickname();
destinationDataverseValidated = validateSelectedDataverse();
}
boolean urlValidated = validateServerUrlOAI();
if (nicknameValidated && destinationDataverseValidated && urlValidated) {
// In Create mode we want to run all 3 validation tests; this is why
// we are not doing "if ((validateNickname() && validateServerUrlOAI())"
// in the line above. -- L.A. 4.4 May 2016.
setInitialSettingsValidated(true);
this.createStep = CreateStep.TWO;
}
// (and if not - it stays set to false)
}
}
public void backToStepOne() {
this.initialSettingsValidated = false;
this.createStep = CreateStep.ONE;
}
public void goToStepThree() {
this.createStep = CreateStep.THREE;
}
public void backToStepTwo() {
this.createStep = CreateStep.TWO;
}
public void goToStepFour() {
this.createStep = CreateStep.FOUR;
}
public void backToStepThree() {
this.createStep = CreateStep.THREE;
}
/*
* Variables and methods for creating a new harvesting client:
*/
private int harvestTypeRadio; // 1 = OAI; 2 = Nesstar
private static int harvestTypeRadioOAI = 1;
private static int harvestTypeRadioNesstar = 2;
UIInput newClientNicknameInputField;
UIInput newClientUrlInputField;
UIInput hiddenInputField;
/*UISelectOne*/ UIInput metadataFormatMenu;
UIInput selectedDataverseMenu;
private String newNickname = "";
private String newHarvestingUrl = "";
private boolean initialSettingsValidated = false;
private String newOaiSet = "";
private String newMetadataFormat = "";
private String newHarvestingStyle = "";
private int harvestingScheduleRadio;
private static final int harvestingScheduleRadioNone = 0;
private static final int harvestingScheduleRadioDaily = 1;
private static final int harvestingScheduleRadioWeekly = 2;
private String newHarvestingScheduleDayOfWeek = "Sunday";
private String newHarvestingScheduleTimeOfDay = "12";
private int harvestingScheduleRadioAMPM;
private static final int harvestingScheduleRadioAM = 0;
private static final int harvestingScheduleRadioPM = 1;
public void initNewClient(ActionEvent ae) {
//this.selectedClient = new HarvestingClient();
this.newNickname = "";
this.newHarvestingUrl = "";
this.initialSettingsValidated = false;
this.newOaiSet = "";
this.newMetadataFormat = "";
this.newHarvestingStyle = HarvestingClient.HARVEST_STYLE_DATAVERSE;
this.harvestTypeRadio = harvestTypeRadioOAI;
this.harvestingScheduleRadio = harvestingScheduleRadioNone;
this.newHarvestingScheduleDayOfWeek = "Sunday";
this.newHarvestingScheduleTimeOfDay = "12";
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioAM;
this.pageMode = PageMode.CREATE;
this.createStep = CreateStep.ONE;
this.selectedDestinationDataverse = null;
}
public boolean isInitialSettingsValidated() {
return this.initialSettingsValidated;
}
public void setInitialSettingsValidated(boolean validated) {
this.initialSettingsValidated = validated;
}
public String getNewNickname() {
return newNickname;
}
public void setNewNickname(String newNickname) {
this.newNickname = newNickname;
}
public String getNewHarvestingUrl() {
return newHarvestingUrl;
}
public void setNewHarvestingUrl(String newHarvestingUrl) {
this.newHarvestingUrl = newHarvestingUrl;
}
public int getHarvestTypeRadio() {
return this.harvestTypeRadio;
}
public void setHarvestTypeRadio(int harvestTypeRadio) {
this.harvestTypeRadio = harvestTypeRadio;
}
public boolean isHarvestTypeOAI() {
return harvestTypeRadioOAI == harvestTypeRadio;
}
public boolean isHarvestTypeNesstar() {
return harvestTypeRadioNesstar == harvestTypeRadio;
}
public String getNewOaiSet() {
return newOaiSet;
}
public void setNewOaiSet(String newOaiSet) {
this.newOaiSet = newOaiSet;
}
public String getNewMetadataFormat() {
return newMetadataFormat;
}
public void setNewMetadataFormat(String newMetadataFormat) {
this.newMetadataFormat = newMetadataFormat;
}
public String getNewHarvestingStyle() {
return newHarvestingStyle;
}
public void setNewHarvestingStyle(String newHarvestingStyle) {
this.newHarvestingStyle = newHarvestingStyle;
}
public int getHarvestingScheduleRadio() {
return this.harvestingScheduleRadio;
}
public void setHarvestingScheduleRadio(int harvestingScheduleRadio) {
this.harvestingScheduleRadio = harvestingScheduleRadio;
}
public boolean isNewHarvestingScheduled() {
return this.harvestingScheduleRadio != harvestingScheduleRadioNone;
}
public boolean isNewHarvestingScheduledWeekly() {
return this.harvestingScheduleRadio == harvestingScheduleRadioWeekly;
}
public boolean isNewHarvestingScheduledDaily() {
return this.harvestingScheduleRadio == harvestingScheduleRadioDaily;
}
public String getNewHarvestingScheduleDayOfWeek() {
return newHarvestingScheduleDayOfWeek;
}
public void setNewHarvestingScheduleDayOfWeek(String newHarvestingScheduleDayOfWeek) {
this.newHarvestingScheduleDayOfWeek = newHarvestingScheduleDayOfWeek;
}
public String getNewHarvestingScheduleTimeOfDay() {
return newHarvestingScheduleTimeOfDay;
}
public void setNewHarvestingScheduleTimeOfDay(String newHarvestingScheduleTimeOfDay) {
this.newHarvestingScheduleTimeOfDay = newHarvestingScheduleTimeOfDay;
}
public int getHarvestingScheduleRadioAMPM() {
return this.harvestingScheduleRadioAMPM;
}
public void setHarvestingScheduleRadioAMPM(int harvestingScheduleRadioAMPM) {
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioAMPM;
}
public boolean isHarvestingScheduleTimeOfDayPM() {
return getHarvestingScheduleRadioAMPM() == harvestingScheduleRadioPM;
}
public void toggleNewClientSchedule() {
}
public UIInput getNewClientNicknameInputField() {
return newClientNicknameInputField;
}
public void setNewClientNicknameInputField(UIInput newClientInputField) {
this.newClientNicknameInputField = newClientInputField;
}
public UIInput getNewClientUrlInputField() {
return newClientUrlInputField;
}
public void setNewClientUrlInputField(UIInput newClientInputField) {
this.newClientUrlInputField = newClientInputField;
}
public UIInput getHiddenInputField() {
return hiddenInputField;
}
public void setHiddenInputField(UIInput hiddenInputField) {
this.hiddenInputField = hiddenInputField;
}
public UIInput getMetadataFormatMenu() {
return metadataFormatMenu;
}
public void setMetadataFormatMenu(UIInput metadataFormatMenu) {
this.metadataFormatMenu = metadataFormatMenu;
}
public UIInput getSelectedDataverseMenu() {
return selectedDataverseMenu;
}
public void setSelectedDataverseMenu(UIInput selectedDataverseMenu) {
this.selectedDataverseMenu = selectedDataverseMenu;
}
private List<SelectItem> oaiSetsSelectItems;
public List<SelectItem> getOaiSetsSelectItems() {
return oaiSetsSelectItems;
}
public void setOaiSetsSelectItems(List<SelectItem> oaiSetsSelectItems) {
this.oaiSetsSelectItems = oaiSetsSelectItems;
}
private void createOaiSetsSelectItems(List<String> setNames) {
setOaiSetsSelectItems(new ArrayList<>());
if (setNames != null) {
for (String set: setNames) {
if (!StringUtils.isEmpty(set)) {
getOaiSetsSelectItems().add(new SelectItem(set, set));
}
}
}
}
private List<SelectItem> oaiMetadataFormatSelectItems;
public List<SelectItem> getOaiMetadataFormatSelectItems() {
return oaiMetadataFormatSelectItems;
}
public void setOaiMetadataFormatSelectItems(List<SelectItem> oaiMetadataFormatSelectItems) {
this.oaiMetadataFormatSelectItems = oaiMetadataFormatSelectItems;
}
private void createOaiMetadataFormatSelectItems(List<String> formats) {
setOaiMetadataFormatSelectItems(new ArrayList<>());
if (formats != null) {
for (String f: formats) {
if (!StringUtils.isEmpty(f)) {
getOaiMetadataFormatSelectItems().add(new SelectItem(f, f));
}
}
}
}
private List<SelectItem> harvestingStylesSelectItems = null;
public List<SelectItem> getHarvestingStylesSelectItems() {
if (this.harvestingStylesSelectItems == null) {
this.harvestingStylesSelectItems = new ArrayList<>();
for (int i = 0; i < HarvestingClient.HARVEST_STYLE_LIST.size(); i++) {
String style = HarvestingClient.HARVEST_STYLE_LIST.get(i);
this.harvestingStylesSelectItems.add(new SelectItem(
style,
HarvestingClient.HARVEST_STYLE_INFOMAP.get(style)));
}
}
return this.harvestingStylesSelectItems;
}
public void setHarvestingStylesSelectItems(List<SelectItem> harvestingStylesSelectItems) {
this.harvestingStylesSelectItems = harvestingStylesSelectItems;
}
private List<String> weekDays = null;
private List<SelectItem> daysOfWeekSelectItems = null;
public List<SelectItem> getDaysOfWeekSelectItems() {
if (this.daysOfWeekSelectItems == null) {
List<String> weekDays = getWeekDays();
this.daysOfWeekSelectItems = new ArrayList<>();
for (int i = 0; i < weekDays.size(); i++) {
this.daysOfWeekSelectItems.add(new SelectItem(weekDays.get(i), weekDays.get(i)));
}
}
return this.daysOfWeekSelectItems;
}
private List<String> getWeekDays() {
if (weekDays == null) {
weekDays = Arrays.asList("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
}
return weekDays;
}
private Integer getWeekDayNumber (String weekDayName) {
List<String> weekDays = getWeekDays();
int i = 1;
for (String weekDayString: weekDays) {
if (weekDayString.equals(weekDayName)) {
return new Integer(i);
}
i++;
}
return null;
}
private Integer getWeekDayNumber() {
return getWeekDayNumber(getNewHarvestingScheduleDayOfWeek());
}
private void setWeekdayFromInteger(Integer weekday) {
if (weekday == null || weekday.intValue() < 1 || weekday.intValue() > 7) {
weekday = 1;
}
this.newHarvestingScheduleDayOfWeek = getWeekDays().get(weekday);
}
private Integer getHourOfDay() {
Integer hour = null;
if (getNewHarvestingScheduleTimeOfDay() != null) {
try {
hour = new Integer(getNewHarvestingScheduleTimeOfDay());
} catch (Exception ex) {
hour = null;
}
}
if (hour != null) {
if (hour.intValue() == 12) {
hour = 0;
}
if (isHarvestingScheduleTimeOfDayPM()) {
hour = hour + 12;
}
}
return hour;
}
private void setHourOfDayAMPMfromInteger(Integer hour24) {
if (hour24 == null || hour24.intValue() > 23) {
hour24 = 0;
}
if (hour24.intValue() > 11) {
hour24 = hour24.intValue() - 12;
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioPM;
} else {
this.harvestingScheduleRadioAMPM = harvestingScheduleRadioAM;
}
if (hour24.intValue() == 0) {
this.newHarvestingScheduleTimeOfDay = "12";
} else {
this.newHarvestingScheduleTimeOfDay = hour24.toString();
}
}
private String makeDefaultArchiveUrl() {
String archiveUrl = null;
if (getNewHarvestingUrl() != null) {
int k = getNewHarvestingUrl().indexOf('/', 8);
if (k > -1) {
archiveUrl = getNewHarvestingUrl().substring(0, k);
}
}
return archiveUrl;
}
public void setDaysOfWeekSelectItems(List<SelectItem> daysOfWeekSelectItems) {
this.daysOfWeekSelectItems = daysOfWeekSelectItems;
}
private List<SelectItem> hoursOfDaySelectItems = null;
public List<SelectItem> getHoursOfDaySelectItems() {
if (this.hoursOfDaySelectItems == null) {
this.hoursOfDaySelectItems = new ArrayList<>();
this.hoursOfDaySelectItems.add(new SelectItem( 12+"", "12:00"));
for (int i = 1; i < 12; i++) {
this.hoursOfDaySelectItems.add(new SelectItem(i+"", i+":00"));
}
}
return this.hoursOfDaySelectItems;
}
public void setHoursOfDaySelectItems(List<SelectItem> hoursOfDaySelectItems) {
this.hoursOfDaySelectItems = hoursOfDaySelectItems;
}
public boolean isSessionUserAuthenticated() {
if (session == null) {
return false;
}
if (session.getUser() == null) {
return false;
}
if (session.getUser().isAuthenticated()) {
return true;
}
return false;
}
public boolean isSuperUser() {
return session.getUser().isSuperuser();
}
}