Java tutorial
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package edu.harvard.iq.dvn.core.web.admin; import com.icesoft.faces.component.datapaginator.DataPaginator; import com.icesoft.faces.component.ext.*; import com.icesoft.faces.component.paneltabset.PanelTabSet; import com.icesoft.faces.context.Resource; import com.icesoft.faces.context.effects.JavascriptContext; import edu.harvard.iq.dvn.core.admin.*; import edu.harvard.iq.dvn.core.gnrs.GNRSServiceLocal; import edu.harvard.iq.dvn.core.harvest.HarvestFormatType; import edu.harvard.iq.dvn.core.harvest.HarvestStudyServiceLocal; import edu.harvard.iq.dvn.core.harvest.HarvesterServiceLocal; import edu.harvard.iq.dvn.core.harvest.SetDetailBean; import edu.harvard.iq.dvn.core.index.IndexServiceLocal; import edu.harvard.iq.dvn.core.index.Indexer; import edu.harvard.iq.dvn.core.mail.MailServiceLocal; import edu.harvard.iq.dvn.core.study.*; import edu.harvard.iq.dvn.core.util.*; import edu.harvard.iq.dvn.core.vdc.*; import edu.harvard.iq.dvn.core.web.VDCNetworkUI; import edu.harvard.iq.dvn.core.web.VDCUIList; import edu.harvard.iq.dvn.core.web.collection.CollectionUI; import edu.harvard.iq.dvn.core.web.common.StatusMessage; import edu.harvard.iq.dvn.core.web.common.VDCBaseBean; import edu.harvard.iq.dvn.core.web.login.LoginWorkflowBean; import edu.harvard.iq.dvn.core.web.networkAdmin.*; import edu.harvard.iq.dvn.core.web.push.beans.NetworkStatsBean; import edu.harvard.iq.dvn.core.web.site.ClassificationList; import edu.harvard.iq.dvn.core.web.site.ClassificationUI; import edu.harvard.iq.dvn.core.web.site.EditSitePage; import edu.harvard.iq.dvn.core.web.site.VDCUI; import edu.harvard.iq.dvn.core.web.study.StudyCommentUI; import edu.harvard.iq.dvn.core.web.util.CharacterValidator; import edu.harvard.iq.dvn.core.web.util.XhtmlValidator; import edu.harvard.iq.dvn.core.doi.DOIEZIdServiceLocal; import java.io.*; import java.net.MalformedURLException; import java.net.URL; import java.nio.ByteBuffer; import java.nio.channels.WritableByteChannel; import java.text.SimpleDateFormat; import java.util.*; import java.util.logging.FileHandler; import java.util.logging.Level; import java.util.logging.Logger; import javax.ejb.EJB; import javax.ejb.EJBException; import javax.faces.application.FacesMessage; import javax.faces.bean.ViewScoped; import javax.faces.component.UIComponent; import javax.faces.component.UIData; import javax.faces.component.UIInput; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import javax.faces.event.ValueChangeEvent; import javax.faces.model.SelectItem; import javax.inject.Inject; import javax.inject.Named; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.servlet.http.HttpServletRequest; import javax.xml.bind.JAXBException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import org.apache.commons.io.input.NullInputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.validator.routines.InetAddressValidator; import org.icefaces.component.fileentry.FileEntry; import org.icefaces.component.fileentry.FileEntryEvent; import org.icefaces.component.fileentry.FileEntryResults; import org.xml.sax.SAXException; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.auth.AccessToken; import twitter4j.auth.RequestToken; /** * * @author gdurand */ @ViewScoped @Named("OptionsPage") public class OptionsPage extends VDCBaseBean implements java.io.Serializable { @EJB VDCNetworkServiceLocal vdcNetworkService; @EJB VDCServiceLocal vdcService; @EJB TemplateServiceLocal templateService; @EJB MailServiceLocal mailService; @EJB EditVDCPrivilegesService editVDCPrivileges; @EJB UserServiceLocal userService; @EJB GroupServiceLocal groupService; @EJB VDCCollectionServiceLocal vdcCollectionService; @EJB RoleServiceLocal roleService; @EJB GuestBookResponseServiceBean guestBookResponseServiceBean; @EJB OAISetServiceLocal oaiService; @EJB EditLockssService editLockssService; @EJB EditHarvestSiteService editHarvestSiteService; @EJB(name = "dvnTimer") DvnTimerRemote remoteTimerService; @EJB HarvesterServiceLocal harvesterService; @EJB HandlePrefixServiceLocal handlePrefixService; @EJB StudyFieldServiceLocal studyFieldService; @EJB IndexServiceLocal indexService; @EJB EditUserService editUserService; @EJB StudyServiceLocal studyService; @EJB VDCGroupServiceLocal vdcGroupService; @EJB StudyCommentService studyCommentService; @EJB HarvestingDataverseServiceLocal harvestingDataverseService; @EJB OAISetServiceLocal oaiSetService; @EJB EditNetworkPrivilegesService privileges; @EJB NetworkRoleServiceLocal networkRoleService; @EJB StudyFileServiceLocal studyFileService; @EJB HarvestStudyServiceLocal harvestStudyService; @EJB GNRSServiceLocal gnrsService; @EJB DOIEZIdServiceLocal doiEZIdServiceLocal; @Inject EditNetworkNamePage editNetworkNamePage; @Inject EditNetworkAnnouncementsPage editNetworkAnnouncementsPage; @Inject EditBannerFooterPage editBannerFooterPage; @Inject EditSitePage editSitePage; @PersistenceContext(unitName = "VDCNet-ejbPU") EntityManager em; public void preRenderView() { super.preRenderView(); if (vdc != null) { if (tabSet1.getSelectedIndex() == 0) { // studies tab JavascriptContext.addJavascriptCall(FacesContext.getCurrentInstance(), "initManageStudiesTableBlockHeight();"); } else if (tabSet1.getSelectedIndex() == 3 && dvPermissionsSubTab.getSelectedIndex() == 3) { JavascriptContext.addJavascriptCall(getFacesContext(), "initDownloadDataTableBlockHeight();"); } } else { if (tabSet1.getSelectedIndex() == 7 && permissionsSubTab.getSelectedIndex() == 4) { JavascriptContext.addJavascriptCall(getFacesContext(), "initDownloadDataTableBlockHeight();"); } } } public void init() { if (getVDCRequestBean().getCurrentVDC() != null) { vdcId = getVDCRequestBean().getCurrentVDC().getId(); editVDCPrivileges.setVdc(vdcId); vdc = editVDCPrivileges.getVdc(); } else { } if (getVDCRequestBean().getCurrentVDC() == null) { HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext() .getRequest(); Iterator iterator = request.getParameterMap().keySet().iterator(); while (iterator.hasNext()) { Object key = (Object) iterator.next(); if (key instanceof String && ((String) key).indexOf("dataverseType") != -1 && !request.getParameter((String) key).equals("")) { //this.setDataverseType(request.getParameter((String) key)); } } //manage dataverses page initAlphabeticFilter(); populateVDCUIList(false); } if (twitterVerifier != null && getSessionMap().get("requestToken") != null) { addTwitter(); } // Home panels success = false; if (getVDCRequestBean().getCurrentVDC() != null) { chkNetworkAnnouncements = getVDCRequestBean().getCurrentVDC().isDisplayNetworkAnnouncements(); chkLocalAnnouncements = getVDCRequestBean().getCurrentVDC().isDisplayAnnouncements(); localAnnouncements = getVDCRequestBean().getCurrentVDC().getAnnouncements(); chkNewStudies = getVDCRequestBean().getCurrentVDC().isDisplayNewStudies(); //Contact us page this.setContactUsEmail(getVDCRequestBean().getCurrentVDC().getContactEmail()); //Edit Study Comments allowStudyComments = getVDCRequestBean().getCurrentVDC().isAllowStudyComments(); allowStudyCommentsCheckbox.setValue(allowStudyComments); } else { this.setContactUsEmail(vdcNetworkService.find().getContactEmail()); this.setEditSystemEmail(vdcNetworkService.find().getSystemEmail()); } //Edit Lockss settings Long lockssConfigId = null; if (getVDCRequestBean().getCurrentVDC() != null) { if (getVDCRequestBean().getCurrentVDC().getLockssConfig() != null) lockssConfigId = this.getVDCRequestBean().getCurrentVDC().getLockssConfig().getId(); } else { LockssConfig networkConfig = vdcNetworkService.getLockssConfig(); if (networkConfig != null) { lockssConfigId = networkConfig.getId(); } } // Based on lockssConfigId, set up stateful session bean for create/edit, // and set default values for form controls if (lockssConfigId == null) { editLockssService.newLockssConfig(getVDCRequestBean().getCurrentVDCId()); lockssConfig = editLockssService.getLockssConfig(); selectHarvestType = EditLockssConfigPage.HarvestType.NONE; selectOAISetId = new Long(-1); } else { editLockssService.initLockssConfig(lockssConfigId); lockssConfig = editLockssService.getLockssConfig(); selectLicenseId = lockssConfig.getLicenseType().getId(); selectHarvestType = EditLockssConfigPage.HarvestType.valueOf(lockssConfig.getserverAccess().toString()); if (getVDCRequestBean().getCurrentVDC() == null && lockssConfig.getOaiSet() != null) { this.selectOAISetId = lockssConfig.getOaiSet().getId(); } } for (LicenseType licenseType : editLockssService.getLicenseTypes()) { licenseTypes.put(licenseType.getId(), licenseType); } initCollection(); // Search Fields if (getVDCRequestBean().getCurrentVDC() != null) { searchResultsFields = getVDCRequestBean().getCurrentVDC().getSearchResultFields(); for (Iterator it = searchResultsFields.iterator(); it.hasNext();) { StudyField elem = (StudyField) it.next(); if (elem.getName().equals(StudyFieldConstant.productionDate)) { productionDateResults = true; } if (elem.getName().equals(StudyFieldConstant.producer)) { producerResults = true; } if (elem.getName().equals(StudyFieldConstant.distributionDate)) { distributionDateResults = true; } if (elem.getName().equals(StudyFieldConstant.distributor)) { distributorResults = true; } if (elem.getName().equals(StudyFieldConstant.publicationReplicationData)) { replicationForResults = true; } if (elem.getName().equals(StudyFieldConstant.publication)) { relatedPublicationsResults = true; } if (elem.getName().equals(StudyFieldConstant.relatedMaterial)) { relatedMaterialResults = true; } if (elem.getName().equals(StudyFieldConstant.relatedStudies)) { relatedStudiesResults = true; } } defaultSortOrder = getVDCRequestBean().getCurrentVDC().getDefaultSortOrder(); } //Add site page //add account page if (isFromPage("AddAccountPage")) { editUserService = (EditUserService) sessionGet(editUserService.getClass().getName()); user = editUserService.getUser(); } else { editUserService.newUser(); sessionPut(editUserService.getClass().getName(), editUserService); //sessionPut( (studyService.getClass().getName() + "." + studyId.toString()), studyService); user = editUserService.getUser(); HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext() .getRequest(); if (request.getAttribute("studyId") != null) { studyId = new Long(request.getAttribute("studyId").toString()); editUserService.setRequestStudyId(studyId); } else if (this.getRequestParam("studyId") != null) { studyId = new Long(Long.parseLong(getRequestParam("studyId"))); editUserService.setRequestStudyId(studyId); } } studyId = editUserService.getRequestStudyId(); if (studyId != null) { study = studyService.getStudy(studyId); } if (getVDCRequestBean().getCurrentVDC() == null) { //Manage Classifications List list = (List) vdcGroupService.findAll(); itemBeansSize = list.size(); initClassifications(); //Edit export schedule page VDCNetwork vdcNetwork = this.getVDCRequestBean().getVdcNetwork(); exportSchedulePeriod = vdcNetwork.getExportPeriod(); exportHourOfDay = vdcNetwork.getExportHourOfDay(); exportDayOfWeek = vdcNetwork.getExportDayOfWeek(); setSelectExportPeriod(loadSelectExportPeriod()); //OAI Sets initSetData(); //Network Settings VDCNetwork thisVdcNetwork = vdcNetworkService.findRootNetwork(); //DV requirements page setRequireDvaffiliation(thisVdcNetwork.isRequireDVaffiliation()); setRequireDvclassification(thisVdcNetwork.isRequireDVclassification()); setRequireDvdescription(thisVdcNetwork.isRequireDVdescription()); setRequireDvstudiesforrelease(thisVdcNetwork.isRequireDVstudiesforrelease()); //NetworkPrivileges page //Network Terms of Use networkAccountTermsOfUse = getVDCRequestBean().getVdcNetwork().getTermsOfUse(); networkAccountTermsOfUseEnabled = getVDCRequestBean().getVdcNetwork().isTermsOfUseEnabled(); networkDepositTermsOfUse = getVDCRequestBean().getVdcNetwork().getDepositTermsOfUse(); networkDepositTermsOfUseEnabled = getVDCRequestBean().getVdcNetwork().isDepositTermsOfUseEnabled(); networkDownloadTermsOfUse = getVDCRequestBean().getVdcNetwork().getDownloadTermsOfUse(); networkDownloadTermsOfUseEnabled = getVDCRequestBean().getVdcNetwork().isDownloadTermsOfUseEnabled(); } if (getVDCRequestBean().getCurrentVDC() == null) { //usergroups page initGroupData(); //all user page //initUserData(); -- moved to click event on the tab } initSelectedTabIndex(); //end init } // variables for template management private Map<VDCNetwork, Long> defaultNetworkTemplateMap = new HashMap(); // stores a Map of VDCNetworks to their default template id private boolean showDefaultPopup = false; private List<VDCNetworkUI> vdcNetworksForDefault; // used by the default template popup private Long defaultTemplatePopupId = null; // used by the default template popup public void initTemplates() { if (getVDCRequestBean().getCurrentVDC() != null) { List<Long> templateIds = templateService .getSubnetworkTemplates(getVDCRequestBean().getCurrentVDC().getVdcNetwork().getId(), true); List<Template> subnetTemplates = new ArrayList(); for (Long id : templateIds) { Template template = templateService.getTemplate(id); if (template != null) { subnetTemplates.add(template); } } templateList = subnetTemplates; templateList.addAll(templateService.getVDCTemplates(getVDCRequestBean().getCurrentVDCId())); defaultTemplateId = getVDCRequestBean().getCurrentVDC().getDefaultTemplate().getId(); } else { templateList = templateService.getNetworkTemplates(); defaultTemplateId = getVDCRequestBean().getVdcNetwork().getDefaultTemplate().getId(); } // whether a template is being used determines if it can be removed or not (initialized here, so the page doesn't call thew service bean multiple times) for (Template template : templateList) { if (templateService.isTemplateUsed(template.getId())) { templateInUseList.add(template.getId()); } if (templateService.isTemplateUsedAsVDCDefault(template.getId())) { templateinsUseAsVDCDefaultList.add(template.getId()); } } // initialize the defaultNetworkTemplateMap for (VDCNetwork vdcNetwork : vdcNetworkService.getVDCNetworks()) { defaultNetworkTemplateMap.put(vdcNetwork, vdcNetwork.getDefaultTemplate().getId()); } } public boolean isNetworkDefault(Long templateId) { return defaultNetworkTemplateMap.containsValue(templateId); } public boolean isNetworkDefaultForAll(Long templateId) { for (Long defaultTemplateId : defaultNetworkTemplateMap.values()) { if (!defaultTemplateId.equals(templateId)) { return false; } } return true; } public List<VDCNetworkUI> getDefaultTemplateList(Long templateId) { List<VDCNetworkUI> templateVDCNetworkUIs = new ArrayList(); for (VDCNetwork vdcNetwork : defaultNetworkTemplateMap.keySet()) { VDCNetworkUI vdcNetworkUI = new VDCNetworkUI(); vdcNetworkUI.setVdcNetwork(vdcNetwork); if (defaultNetworkTemplateMap.get(vdcNetwork).equals(templateId)) { vdcNetworkUI.setDefaultTemplateSelected(true); } else { vdcNetworkUI.setDefaultTemplateSelected(false); } templateVDCNetworkUIs.add(vdcNetworkUI); } return templateVDCNetworkUIs; } public void toggleDefaultPopup(Long templateId) { defaultTemplatePopupId = templateId; vdcNetworksForDefault = getDefaultTemplateList(templateId); showDefaultPopup = !showDefaultPopup; } public void saveDefaultTemplates() { for (VDCNetworkUI vdcNetworkUI : vdcNetworksForDefault) { if (vdcNetworkUI.getDefaultTemplateSelected()) { VDCNetwork vdcNetwork = vdcNetworkUI.getVdcNetwork(); vdcNetworkService.updateDefaultTemplate(defaultTemplatePopupId, vdcNetwork.getId()); defaultNetworkTemplateMap.put(vdcNetwork, defaultTemplatePopupId); } } showDefaultPopup = !showDefaultPopup; } public String updateDefaultAction(Long templateId) { // first, verify that the template has not been disabled if (templateService.getTemplate(templateId).isEnabled()) { if (getVDCRequestBean().getCurrentVDC() == null) { vdcNetworkService.updateDefaultTemplate(templateId); } else { vdcService.updateDefaultTemplate(getVDCRequestBean().getCurrentVDCId(), templateId); } defaultTemplateId = templateId; } else { // add flash message getVDCRenderBean().getFlash().put("warningMessage", "The template you are trying to make Default was disabled by another user. Please reload this page to update."); } return ""; } public String updateDefaultAction(Long templateId, VDCNetwork vdcNetwork) { // first, verify that the template has not been disabled if (templateService.getTemplate(templateId).isEnabled()) { vdcNetworkService.updateDefaultTemplate(templateId, vdcNetwork.getId()); defaultNetworkTemplateMap.put(vdcNetwork, templateId); } else { // add flash message getVDCRenderBean().getFlash().put("warningMessage", "The template you are trying to make Default was disabled by another user. Please reload this page to update."); } return ""; } public boolean isShowDefaultPopup() { return showDefaultPopup; } public void setShowDefaultPopup(boolean showDefaultPopup) { this.showDefaultPopup = showDefaultPopup; } public List<VDCNetworkUI> getVdcNetworksForDefault() { return vdcNetworksForDefault; } public void initDVTerms() { depositTermsOfUse = getVDCRequestBean().getCurrentVDC().getDepositTermsOfUse(); depositTermsOfUseEnabled = getVDCRequestBean().getCurrentVDC().isDepositTermsOfUseEnabled(); downloadTermsOfUse = getVDCRequestBean().getCurrentVDC().getDownloadTermsOfUse(); downloadTermsOfUseEnabled = getVDCRequestBean().getCurrentVDC().isDownloadTermsOfUseEnabled(); } public void initDVGeneralSettings() { vdc = vdcService.findById(vdcId); if (vdc.isRestricted()) { siteRestriction = "Restricted"; } else { siteRestriction = "Public"; } editSitePage.initDVGeneralSettings(); } public void initGuestbookQuestionnaire() { //guestbook questionnaire customQuestions.clear(); guestBookQuestionnaire = getVDCRequestBean().getCurrentVDC().getGuestBookQuestionnaire(); newQuestion = new CustomQuestion(); newQuestion.setCustomQuestionValues(new ArrayList()); if (guestBookQuestionnaire == null) { // set up default guest book questionnaire guestBookQuestionnaire = new GuestBookQuestionnaire(); guestBookQuestionnaire.setEnabled(false); guestBookQuestionnaire.setEmailRequired(true); guestBookQuestionnaire.setFirstNameRequired(true); guestBookQuestionnaire.setLastNameRequired(true); guestBookQuestionnaire.setPositionRequired(true); guestBookQuestionnaire.setInstitutionRequired(true); guestBookQuestionnaire.setVdc(vdc); guestBookQuestionnaire.setCustomQuestions(new ArrayList()); vdc.setGuestBookQuestionnaire(guestBookQuestionnaire); } else { if (guestBookQuestionnaire.getCustomQuestions() == null) { guestBookQuestionnaire.setCustomQuestions(new ArrayList()); } else { for (CustomQuestion customQuestion : guestBookQuestionnaire.getCustomQuestions()) { if (!customQuestion.isHidden()) { CustomQuestionUI customQuestionUI = new CustomQuestionUI(); customQuestionUI.setCustomQuestion(customQuestion); customQuestionUI.setEditMode(false); customQuestions.add(customQuestionUI); } } } } newQuestion.setGuestBookQuestionnaire(guestBookQuestionnaire); questionTypeSelectItems = loadQuestionTypeSelectItems(); } public void initDVPrivilegedUsers() { vdcId = getVDCRequestBean().getCurrentVDC().getId(); editVDCPrivileges.setVdc(vdcId); vdc = editVDCPrivileges.getVdc(); if (vdc.isRestricted()) { siteRestriction = "Restricted"; } else { siteRestriction = "Public"; } initContributorSetting(); initUserName(); vdcRoleList = new ArrayList<RoleListItem>(); // Add empty VDCRole to list, to allow user input of a new VDCRole vdcRoleList.add(new RoleListItem(null, null)); // Add rest of items to the list from vdc object for (VDCRole vdcRole : vdc.getVdcRoles()) { vdcRoleList.add(new RoleListItem(vdcRole, vdcRole.getRoleId())); } setFilesRestricted(vdc.isFilesRestricted()); } private String tab; public String getTab() { return tab; } public void setTab(String tab) { this.tab = tab; } private String tab2; public String getTab2() { return tab2; } public void setTab2(String tab2) { this.tab2 = tab2; } private int selectedIndex; public int getSelectedIndex() { return selectedIndex; } public void setSelectedIndex(int selectedIndex) { this.selectedIndex = selectedIndex; } private PanelTabSet tabSet1 = new PanelTabSet(); public PanelTabSet getTabSet1() { return tabSet1; } public void setTabSet1(PanelTabSet tabSet1) { this.tabSet1 = tabSet1; } private PanelTabSet permissionsSubTab = new PanelTabSet(); public PanelTabSet getPermissionsSubTab() { return permissionsSubTab; } public void setPermissionsSubTab(PanelTabSet permissionsSubTab) { this.permissionsSubTab = permissionsSubTab; } private PanelTabSet harvestingSubTab = new PanelTabSet(); public PanelTabSet getHarvestingSubTab() { return harvestingSubTab; } public void setHarvestingSubTab(PanelTabSet harvestingSubTab) { this.harvestingSubTab = harvestingSubTab; } private PanelTabSet dvSettingsSubTab = new PanelTabSet(); public PanelTabSet getDvSettingsSubTab() { return dvSettingsSubTab; } public void setDvSettingsSubTab(PanelTabSet dvSettingsSubTab) { this.dvSettingsSubTab = dvSettingsSubTab; } private PanelTabSet dvPermissionsSubTab = new PanelTabSet(); public PanelTabSet getDvPermissionsSubTab() { return dvPermissionsSubTab; } public void setDvPermissionsSubTab(PanelTabSet dvPermissionsSubTab) { this.dvPermissionsSubTab = dvPermissionsSubTab; } private PanelTabSet networkGeneralSettingsSubTab = new PanelTabSet(); public PanelTabSet getNetworkGeneralSettingsSubTab() { return networkGeneralSettingsSubTab; } public void setNetworkGeneralSettingsSubTab(PanelTabSet networkGeneralSettingsSubTab) { this.networkGeneralSettingsSubTab = networkGeneralSettingsSubTab; } private void initSelectedTabIndex() { if (tab == null && getVDCRequestBean().getSelectedTab() != null) { tab = getVDCRequestBean().getSelectedTab(); } if (tab != null && vdc != null) { if (tab.equals("studies")) { selectedIndex = 0; } else if (tab.equals("collections")) { selectedIndex = 1; } else if (tab.equals("templates")) { initTemplates(); selectedIndex = 2; } else if (tab.equals("permissions")) { selectedIndex = 3; dvPermissionsSubTab.setSelectedIndex(0); initDVPrivilegedUsers(); if (tab2 != null && tab2.equals("tou")) { initDVTerms(); dvPermissionsSubTab.setSelectedIndex(1); } if (tab2 != null && tab2.equals("guestbook")) { initGuestbookQuestionnaire(); dvPermissionsSubTab.setSelectedIndex(2); } if (tab2 != null && tab2.equals("responses")) { System.err.print("in init selected tab index vdc !=null"); dvPermissionsSubTab.setSelectedIndex(3); } } else if (tab.equals("settings")) { selectedIndex = 4; dvSettingsSubTab.setSelectedIndex(0); initDVGeneralSettings(); if (tab2 != null && tab2.equals("customization")) { dvSettingsSubTab.setSelectedIndex(2); } } tabSet1.setSelectedIndex(selectedIndex); } if (tab != null && vdc == null) { if (tab.equals("dataverseOptions")) { selectedIndex = 0; } else if (tab.equals("settings")) { selectedIndex = 1; networkGeneralSettingsSubTab.setSelectedIndex(0); editNetworkNamePage.init(); if (tab2 != null && tab2.equals("advanced")) { networkGeneralSettingsSubTab.setSelectedIndex(1); } if (tab2 != null && tab2.equals("customization")) { networkGeneralSettingsSubTab.setSelectedIndex(2); } } else if (tab.equals("subnetworks")) { selectedIndex = 2; } else if (tab.equals("classifications")) { selectedIndex = 3; } else if (tab.equals("templates")) { initTemplates(); selectedIndex = 4; } else if (tab.equals("vocabulary")) { initControlledVocabulary(); selectedIndex = 5; } else if (tab.equals("harvesting")) { selectedIndex = 6; if (tab2 != null && tab2.equals("oaisets")) { initUserData(); harvestingSubTab.setSelectedIndex(1); } if (tab2 != null && tab2.equals("settings")) { initUserData(); harvestingSubTab.setSelectedIndex(2); } } else if (tab.equals("permissions")) { initPrivilegedUserData(); permissionsSubTab.setSelectedIndex(0); if (tab2 != null && tab2.equals("users")) { initUserData(); permissionsSubTab.setSelectedIndex(1); } if (tab2 != null && tab2.equals("groups")) { permissionsSubTab.setSelectedIndex(2); } if (tab2 != null && tab2.equals("tou")) { permissionsSubTab.setSelectedIndex(3); } if (tab2 != null && tab2.equals("responses")) { System.err.print("in init selected tab index vdc == null (network)"); permissionsSubTab.setSelectedIndex(4); } selectedIndex = 7; } else if (tab.equals("utilities")) { selectedIndex = 8; } tabSet1.setSelectedIndex(selectedIndex); } } public String initGuestBookResponses() { if (getVDCRequestBean().getCurrentVDC() != null) { vdcId = getVDCRequestBean().getCurrentVDC().getId(); if (!show30Days) { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds(vdcId); } else { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds30Days(vdcId); } fullCount = guestBookResponseServiceBean.findCountAll(vdcId); thirtyDayCount = guestBookResponseServiceBean.findCount30Days(vdcId); } else { if (!show30Days) { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds(null); } else { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds30Days(null); } fullCount = guestBookResponseServiceBean.findCountAll(null); thirtyDayCount = guestBookResponseServiceBean.findCount30Days(null); } guestBookResponses.clear(); guestBookResponsesDisplay.clear(); columnHeadings.clear(); customQuestionIds.clear(); if (vdc != null && vdc.getGuestBookQuestionnaire() != null) { GuestBookQuestionnaire gbq = vdc.getGuestBookQuestionnaire(); if (gbq.getCustomQuestions().size() > 0) { for (CustomQuestion cq : gbq.getCustomQuestions()) { columnHeadings.add(cq.getQuestionString()); customQuestionIds.add(cq.getId()); } } } for (Long gbr : guestBookResponsesAllIds) { GuestBookResponseUI guestBookResponseDisplay = new GuestBookResponseUI(gbr, customQuestionIds); guestBookResponsesDisplay.add(guestBookResponseDisplay); } //JavascriptContext.addJavascriptCall(getFacesContext(), "initDownloadDataTableBlockHeight();"); return ""; } public String toggle30Days() { if (getVDCRequestBean().getCurrentVDC() != null) { vdcId = getVDCRequestBean().getCurrentVDC().getId(); if (!show30Days) { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds(vdcId); } else { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds30Days(vdcId); } } else { if (!show30Days) { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds(null); } else { guestBookResponsesAllIds = guestBookResponseServiceBean.findAllIds30Days(null); } } guestBookResponses.clear(); guestBookResponsesDisplay.clear(); columnHeadings.clear(); customQuestionIds.clear(); if (vdc != null && vdc.getGuestBookQuestionnaire() != null) { GuestBookQuestionnaire gbq = vdc.getGuestBookQuestionnaire(); if (gbq.getCustomQuestions().size() > 0) { for (CustomQuestion cq : gbq.getCustomQuestions()) { columnHeadings.add(cq.getQuestionString()); customQuestionIds.add(cq.getId()); } } } for (Long gbr : guestBookResponsesAllIds) { GuestBookResponseUI guestBookResponseDisplay = new GuestBookResponseUI(gbr, customQuestionIds); guestBookResponsesDisplay.add(guestBookResponseDisplay); } JavascriptContext.addJavascriptCall(getFacesContext(), "initDownloadDataTableBlockHeight();"); return ""; } private String twitterVerifier; public String getTwitterVerifier() { return twitterVerifier; } public void setTwitterVerifier(String twitterVerifier) { this.twitterVerifier = twitterVerifier; } public void updateEnabledAction(Long templateId) { Template template = null; int templateIndex = 0; // get the the template (and the index, so we can refrsh afterwards) for (int i = 0; i < templateList.size(); i++) { Template t = templateList.get(i); if (t.getId().equals(templateId)) { templateIndex = i; template = t; break; } } // first, check if we are trying disable a template and verify it has not been made a default if (template.isEnabled()) { // network level template if (getVDCRequestBean().getCurrentVDC() == null) { if (vdcNetworkService.find().getDefaultTemplate().equals(template) || templateService.isTemplateUsedAsVDCDefault(template.getId())) { getVDCRenderBean().getFlash().put("warningMessage", "The template you are trying to disable was made a default template by another user. Please reload this page to update."); return; } // vdc level template } else if (vdcService.findById(getVDCRequestBean().getCurrentVDCId()).getDefaultTemplate() .equals(template)) { getVDCRenderBean().getFlash().put("warningMessage", "The template you are trying to disable was made a default template by another user. Please reload this page to update."); return; } } else { for (Template testTemplate : templateList) { if (testTemplate.isEnabled() && !testTemplate.equals(template) && testTemplate.getName().equals(template.getName())) { getVDCRenderBean().getFlash().put("warningMessage", "The template you are trying to enable has the same name as another enabled template. Please edit the name and re-try enabling."); return; } } } template.setEnabled(!template.isEnabled()); templateService.updateTemplate(template); // now update the template in the list (this is needed or a second attempt to change will result in an optimistic lock) templateList.set(templateIndex, templateService.getTemplate(template.getId())); } public String savePermissionsChanges() { if (filesRestricted != vdc.isFilesRestricted()) { vdc.setFilesRestricted(filesRestricted); if (vdc.getHarvestingDataverse() != null) { vdc.getHarvestingDataverse().setSubsetRestricted(filesRestricted); } } saveContributorSetting(); // For each item in display role list, update the vdc with the selected role for (int i = 1; i < vdcRoleList.size(); i++) { if (vdcRoleList.get(i).selectedRoleId != null) { // Prior to 3.0, we called a stateless RoleService bean to get the role, but with the upgrade // this was creating a new row for each Role; so we moved the finder method to the stateful bean // so the row would not be detached and this fixed it Role role = editVDCPrivileges.findRoleById(vdcRoleList.get(i).selectedRoleId); vdcRoleList.get(i).getVdcRole().setRole(role); } } this.editVDCPrivileges.save(); editVDCPrivileges.setVdc(vdc.getId()); vdc = editVDCPrivileges.getVdc(); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated dataverse permissions."); return ""; } public String authorizeTwitter() { String callbackURL = "http://" + PropertyUtil.getHostUrl() + "/dvn"; callbackURL += getVDCRequestBean().getCurrentVDC() == null ? "/faces/networkAdmin/NetworkOptionsPage.xhtml" : getVDCRequestBean().getCurrentVDCURL() + "/faces/admin/OptionsPage.xhtml"; Twitter twitter = new TwitterFactory().getInstance(); try { RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL); getSessionMap().put("requestToken", requestToken); redirect(requestToken.getAuthorizationURL()); } catch (TwitterException te) { te.printStackTrace(); } return null; } public void addTwitter() { Long vdcId = getVDCRequestBean().getCurrentVDCId(); try { Twitter twitter = new TwitterFactory().getInstance(); AccessToken accessToken = twitter .getOAuthAccessToken((RequestToken) getSessionMap().remove("requestToken"), twitterVerifier); vdcService.setTwitterCredentials(accessToken.getToken(), accessToken.getTokenSecret(), vdcId); if (vdcId != null) { // refresh the current vdc object, since it has changed getVDCRequestBean().setCurrentVDC(vdcService.findById(vdcId)); } getVDCRenderBean().getFlash().put("successMessage", "Automatic tweets are now enabled."); } catch (TwitterException te) { te.printStackTrace(); } } public void removeTwitter() { Long vdcId = getVDCRequestBean().getCurrentVDCId(); vdcService.removeTwitterCredentials(vdcId); if (vdcId != null) { // refresh the current vdc object, since it has changed getVDCRequestBean().setCurrentVDC(vdcService.findById(vdcId)); } getVDCRenderBean().getFlash().put("successMessage", "Automatic tweets are now disabled."); } public boolean isTwitterConfigured() { return PropertyUtil.isTwitterConsumerConfigured(); } public boolean isTwitterEnabled() { if (getVDCRequestBean().getCurrentVDC() == null) { return (vdcNetworkService.getTwitterCredentials() != null); } else { return (getVDCRequestBean().getCurrentVDC().getTwitterCredentials() != null); } } private void sendReleaseEmails() { String networkAdminEmailAddress = getVDCRequestBean().getVdcNetwork().getSystemEmail(); String toMailAddress = vdc.getContactEmail(); String siteAddress = "unknown"; String hostUrl = PropertyUtil.getHostUrl(); siteAddress = hostUrl + "/dvn" + getVDCRequestBean().getCurrentVDCURL(); String name = vdc.getName(); if (toMailAddress != null) { mailService.sendReleaseSiteNotification(toMailAddress, name, siteAddress); } else { Logger.getLogger("Release Emails vdc contact email is null"); } if (networkAdminEmailAddress != null) { mailService.sendReleaseSiteNotificationNetwork(networkAdminEmailAddress, name, siteAddress); } else { Logger.getLogger("Release Emails Network contact email is null"); } } private void saveContributorSetting() { switch (selectedSetting) { case CONTRIB_CREATE: vdc.setAllowRegisteredUsersToContribute(false); vdc.setAllowContributorsEditAll(false); break; case CONTRIB_EDIT: vdc.setAllowRegisteredUsersToContribute(false); vdc.setAllowContributorsEditAll(true); break; case USER_CREATE: vdc.setAllowRegisteredUsersToContribute(true); vdc.setAllowContributorsEditAll(false); break; case USER_EDIT: vdc.setAllowRegisteredUsersToContribute(true); vdc.setAllowContributorsEditAll(true); } } public enum ContributorSetting { CONTRIB_CREATE, CONTRIB_EDIT, USER_CREATE, USER_EDIT }; private ContributorSetting selectedSetting; public ContributorSetting getSelectedSetting() { return selectedSetting; } public void setSelectedSetting(ContributorSetting selectedSetting) { this.selectedSetting = selectedSetting; } private List<Template> templateList; public List<Template> getTemplateList() { return templateList; } Long defaultTemplateId; public Long getDefaultTemplateId() { return defaultTemplateId; } public void setDefaultTemplateId(Long defaultTemplateId) { this.defaultTemplateId = defaultTemplateId; } private List<Long> templateInUseList = new ArrayList(); private List<Long> templateinsUseAsVDCDefaultList = new ArrayList(); public boolean isDefault(Long templateId) { return defaultTemplateId.equals(templateId); } public boolean isInUse(Long templateId) { return templateInUseList.contains(templateId); } public boolean isVDCDefault(Long templateId) { return templateinsUseAsVDCDefaultList.contains(templateId); } private String siteRestriction; public String getSiteRestriction() { return siteRestriction; } public void setSiteRestriction(String siteRestriction) { this.siteRestriction = siteRestriction; } private String newUserName; public String getNewUserName() { return this.newUserName; } public void setNewUserName(String userName) { this.newUserName = userName; } private boolean filesRestricted; public boolean isFilesRestricted() { return this.filesRestricted; } public void setFilesRestricted(boolean filesRestricted) { this.filesRestricted = filesRestricted; } private List<RoleListItem> vdcRoleList; public List<RoleListItem> getVdcRoleList() { return vdcRoleList; } public void setVdcRoleList(List<RoleListItem> vdcRoleList) { this.vdcRoleList = vdcRoleList; } public class RoleListItem { private VDCRole vdcRole; private Long selectedRoleId; public RoleListItem(VDCRole vdcRole, Long selectedRoleId) { this.vdcRole = vdcRole; this.selectedRoleId = selectedRoleId; } public Long getSelectedRoleId() { return selectedRoleId; } public void setSelectedRoleId(Long selectedRoleId) { this.selectedRoleId = selectedRoleId; } public VDCRole getVdcRole() { return vdcRole; } public void setVdcRole(VDCRole vdcRole) { this.vdcRole = vdcRole; } } private VDC vdc; public VDC getVdc() { return this.vdc; } public void setVdc(VDC vdc) { this.vdc = vdc; } private Long vdcId; public Long getVdcId() { return this.vdcId; } public void setVdcId(Long vdcId) { this.vdcId = vdcId; } private void initContributorSetting() { if (!vdc.isAllowRegisteredUsersToContribute() && !vdc.isAllowContributorsEditAll()) { selectedSetting = ContributorSetting.CONTRIB_CREATE; } else if (!vdc.isAllowRegisteredUsersToContribute() && vdc.isAllowContributorsEditAll()) { selectedSetting = ContributorSetting.CONTRIB_EDIT; } else if (vdc.isAllowRegisteredUsersToContribute() && !vdc.isAllowContributorsEditAll()) { selectedSetting = ContributorSetting.USER_CREATE; } else if (vdc.isAllowRegisteredUsersToContribute() && vdc.isAllowContributorsEditAll()) { selectedSetting = ContributorSetting.USER_EDIT; } } private void initUserName() { newUserName = "Enter Username"; } private javax.faces.component.UIData userTable; public javax.faces.component.UIData getUserTable() { return userTable; } public void setUserTable(javax.faces.component.UIData userTable) { this.userTable = userTable; } private HtmlInputText userInputText; public HtmlInputText getUserInputText() { return this.userInputText; } public void setUserInputText(HtmlInputText userInputText) { this.userInputText = userInputText; } private HtmlInputText groupInputText; public HtmlInputText getGroupInputText() { return this.groupInputText; } public void setGroupInputText(HtmlInputText groupInputText) { this.groupInputText = groupInputText; } private HtmlDataTable fileGroupTable; public HtmlDataTable getFileGroupTable() { return this.fileGroupTable; } public void setFileGroupTable(HtmlDataTable fileGroupTable) { this.fileGroupTable = fileGroupTable; } private HtmlDataTable fileUserTable; public HtmlDataTable getFileUserTable() { return this.fileUserTable; } public void setFileUserTable(HtmlDataTable fileUserTable) { this.fileUserTable = fileUserTable; } private String addFileUserName; public String getAddFileUserName() { return this.addFileUserName; } public void setAddFileUserName(String addFileUserName) { this.addFileUserName = addFileUserName; } private String addFileGroupName; public String getAddFileGroupName() { return this.addFileGroupName; } public void setAddFileGroupName(String addFileGroupName) { this.addFileGroupName = addFileGroupName; } public void removeFileGroup(ActionEvent ae) { this.editVDCPrivileges.removeAllowedFileGroup(((UserGroup) fileGroupTable.getRowData()).getId()); } public void removeFileUser(ActionEvent ae) { this.editVDCPrivileges.removeAllowedFileUser(((VDCUser) fileUserTable.getRowData()).getId()); } public void addFileUser(ActionEvent ae) { if (validateUserName(FacesContext.getCurrentInstance(), fileUserInputText, addFileUserName)) { VDCUser user = userService.findByUserName(addFileUserName); this.editVDCPrivileges.addAllowedFileUser(user.getId()); addFileUserName = ""; } } public void addFileGroup(ActionEvent ae) { if (validateGroupName(FacesContext.getCurrentInstance(), fileGroupInputText, addFileGroupName)) { UserGroup group = groupService.findByName(addFileGroupName); this.editVDCPrivileges.addAllowedFileGroup(group.getId()); addFileGroupName = ""; } } public boolean validateUserName(FacesContext context, UIComponent toValidate, Object value) { String userNameStr = (String) value; String msg = null; boolean valid = true; VDCUser user = null; user = userService.findByUserName(userNameStr); if (user == null) { valid = false; msg = "User not found."; } if (valid) { for (VDCRole vdcRole : vdc.getVdcRoles()) { if (vdcRole != null && vdcRole.getVdcUser().getId().equals(user.getId())) { valid = false; msg = "User already in privileged users list."; break; } } } if (valid) { if (user.getNetworkRole() != null && user.getNetworkRole().getName().equals(NetworkRoleServiceBean.ADMIN)) { valid = false; msg = "User is a Network Administrator and already has all privileges to this dataverse."; } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage(msg); context.addMessage(toValidate.getClientId(context), message); } return valid; } public boolean validateGroupName(FacesContext context, UIComponent toValidate, Object value) { String groupNameStr = (String) value; String msg = null; boolean valid = true; UserGroup group = null; group = this.groupService.findByName(groupNameStr); if (group == null) { valid = false; msg = "Group not found."; } if (valid) { for (Iterator it = vdc.getAllowedGroups().iterator(); it.hasNext();) { UserGroup elem = (UserGroup) it.next(); if (elem.getId().equals(group.getId())) { valid = false; msg = "Group already in privileged groups list."; break; } } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage(msg); context.addMessage(toValidate.getClientId(context), message); } return valid; } private HtmlInputText fileUserInputText; public HtmlInputText getFileUserInputText() { return this.fileUserInputText; } public void setFileUserInputText(HtmlInputText fileUserInputText) { this.fileUserInputText = fileUserInputText; } private HtmlInputText fileGroupInputText; public HtmlInputText getFileGroupInputText() { return this.fileGroupInputText; } public void setFileGroupInputText(HtmlInputText fileGroupInputText) { this.fileGroupInputText = fileGroupInputText; } private boolean success; public boolean isSuccess() { return this.success; } public void setSuccess(boolean success) { this.success = success; } public boolean isEnableSelectRelease() { if (getVDCRequestBean().getVdcNetwork().isRequireDVstudiesforrelease() == false || !vdc.isRestricted()) { return true; } return hasStudies(vdc); } public boolean isReleasable() { if (getVDCRequestBean().getVdcNetwork().isRequireDVstudiesforrelease() == false) { return true; } return hasStudies(vdc); } public boolean isNotReleasableAndNotReleased() { if (getVDCRequestBean().getVdcNetwork().isRequireDVstudiesforrelease() == false) { return false; } else { return (!(hasStudies(vdc)) && vdc.isRestricted()); } } public boolean isReleasedWithoutRequiredStudies() { if (!vdc.isRestricted() && getVDCRequestBean().getVdcNetwork().isRequireDVstudiesforrelease() == true && !(hasStudies(vdc))) { return true; } else { return false; } } private boolean hasStudies(VDC vdcIn) { if (vdcIn.getNumberReleasedStudies() > 0 || vdcIn.isHarvestingDv() || vdcIn.getRootCollection().getStudies().size() > 0) { return true; } if (vdcIn.getRootCollection().getStudies().size() > 0) { return true; } if (vdcIn.getOwnedCollections().size() > 1) { for (VDCCollection vdcc : vdcIn.getOwnedCollections()) { if (vdcc.getStudies().size() > 0) { return true; } } } if (vdcIn.getLinkedCollections().size() > 0) { for (VDCCollection vdcc : vdcIn.getLinkedCollections()) { if (vdcc.getStudies().size() > 0) { return true; } } } if (vdcIn != null) { Long collectionId = new Long(0); if (new VDCUI(vdcIn).containsOnlyLinkedCollections()) { collectionId = new Long(getVDCRequestBean().getCurrentVDC().getLinkedCollections().get(0).getId()); } else { collectionId = new Long(getVDCRequestBean().getCurrentVDC().getRootCollection().getId()); } CollectionUI collUI = new CollectionUI(vdcCollectionService.find(new Long(collectionId))); if (collUI.getStudyIds().size() > 0) { return true; } } return false; } public List getRoleSelectItems() { List selectItems = new ArrayList(); if (!vdc.isHarvestingDv()) { selectItems.add( new SelectItem(roleService.findByName(RoleServiceLocal.CONTRIBUTOR).getId(), "Contributor")); } selectItems.add(new SelectItem(roleService.findByName(RoleServiceLocal.CURATOR).getId(), "Curator")); selectItems.add(new SelectItem(roleService.findByName(RoleServiceLocal.ADMIN).getId(), "Admin")); Role role = roleService.findByName(RoleServiceLocal.PRIVILEGED_VIEWER); selectItems.add(new SelectItem(role.getId(), "Access Restricted Site")); return selectItems; } private Long newRoleId; public Long getNewRoleId() { return newRoleId; } public void setNewRoleId(Long newRoleId) { this.newRoleId = newRoleId; } private String groupName; public String getGroupName() { return this.groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } private UIData groupTable; public UIData getGroupTable() { return this.groupTable; } public void setGroupTable(UIData groupTable) { this.groupTable = groupTable; } public String tousave_action() { if (validateTerms()) { VDC vdc = vdcService.find(new Long(getVDCRequestBean().getCurrentVDC().getId())); vdc.setDepositTermsOfUse(depositTermsOfUse); vdc.setDepositTermsOfUseEnabled(depositTermsOfUseEnabled); vdc.setDownloadTermsOfUse(downloadTermsOfUse); vdc.setDownloadTermsOfUseEnabled(downloadTermsOfUseEnabled); vdcService.edit(vdc); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated terms of use for this dataverse."); return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix() + "&tab=permissions&tab2=tou"; } else { return null; } } public String toucancel_action() { return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix(); } private boolean validateTerms() { String elementValue = downloadTermsOfUse; boolean isUseTerms = true; if ((elementValue == null || elementValue.equals("")) && (downloadTermsOfUseEnabled)) { isUseTerms = false; FacesMessage message = new FacesMessage( "To enable this feature, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); FacesContext fc = FacesContext.getCurrentInstance(); fc.addMessage(textAreaDownloadUse.getClientId(fc), message); } elementValue = depositTermsOfUse; if ((elementValue == null || elementValue.equals("")) && (depositTermsOfUseEnabled)) { isUseTerms = false; FacesMessage message = new FacesMessage( "To enable this feature, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); FacesContext fc = FacesContext.getCurrentInstance(); fc.addMessage(textAreaDepositUse.getClientId(fc), message); } return isUseTerms; } private HtmlInputTextarea textAreaDepositUse; public HtmlInputTextarea getTextAreaDepositUse() { return textAreaDepositUse; } public void setTextAreaDepositUse(HtmlInputTextarea textAreaDepositUse) { this.textAreaDepositUse = textAreaDepositUse; } private HtmlInputTextarea textAreaDownloadUse; public HtmlInputTextarea getTextAreaDownloadUse() { return textAreaDownloadUse; } public void setTextAreaDownloadUse(HtmlInputTextarea textAreaDownloadUse) { this.textAreaDownloadUse = textAreaDownloadUse; } private boolean depositTermsOfUseEnabled; public boolean isDepositTermsOfUseEnabled() { return depositTermsOfUseEnabled; } public void setDepositTermsOfUseEnabled(boolean termsOfUseEnabled) { this.depositTermsOfUseEnabled = termsOfUseEnabled; } private String depositTermsOfUse; public String getDepositTermsOfUse() { return depositTermsOfUse; } public void setDepositTermsOfUse(String termsOfUse) { this.depositTermsOfUse = termsOfUse; } private boolean downloadTermsOfUseEnabled; public boolean isDownloadTermsOfUseEnabled() { return downloadTermsOfUseEnabled; } public void setDownloadTermsOfUseEnabled(boolean termsOfUseEnabled) { this.downloadTermsOfUseEnabled = termsOfUseEnabled; } private String downloadTermsOfUse; public String getDownloadTermsOfUse() { return downloadTermsOfUse; } public void setDownloadTermsOfUse(String termsOfUse) { this.downloadTermsOfUse = termsOfUse; } private GuestBookQuestionnaire guestBookQuestionnaire; private List<CustomQuestionUI> customQuestions = new ArrayList(); private String questionType; private CustomQuestion newQuestion; private List<SelectItem> loadQuestionTypeSelectItems() { List selectItems = new ArrayList<SelectItem>(); selectItems.add(new SelectItem("text", "Plain Text Input")); selectItems.add(new SelectItem("radiobuttons", "Radio Buttons")); return selectItems; } private List<SelectItem> questionTypeSelectItems = new ArrayList(); public List<SelectItem> getQuestionTypeSelectItems() { return questionTypeSelectItems; } public void setQuestionTypeSelectItems(List<SelectItem> questionTypeSelectItems) { this.questionTypeSelectItems = questionTypeSelectItems; } public String guestbooksave_action() { vdc.setGuestBookQuestionnaire(guestBookQuestionnaire); vdcService.edit(vdc); String forwardPage = "/admin/OptionsPage?faces-redirect=true" + getContextSuffix() + "&tab=permissions&tab2=guestbook"; getVDCRenderBean().getFlash().put("successMessage", "Successfully updated guest book questionnaire."); return forwardPage; } public String guestbookcancel_action() { return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix(); } public boolean isQuestionRemovable() { return true; } private List<SelectItem> questionInputLevelSelectItems = new ArrayList(); public List<SelectItem> getQuestionInputLevelSelectItems() { return this.questionInputLevelSelectItems; } private HtmlSelectOneMenu questionTypeListBox; private HtmlInputText inputCustomQuestionText; private HtmlInputText inputCustomQuestionTextTable; private HtmlDataTable customQuestionsDataTable; public HtmlDataTable getCustomQuestionsDataTable() { return customQuestionsDataTable; } public void setCustomQuestionsDataTable(HtmlDataTable customQuestionsPanelSeries) { this.customQuestionsDataTable = customQuestionsPanelSeries; } public HtmlInputText getInputCustomQuestionText() { return inputCustomQuestionText; } public void setInputCustomQuestionText(HtmlInputText inputQuestionText) { this.inputCustomQuestionText = inputQuestionText; } public HtmlInputText getInputCustomQuestionTextTable() { return inputCustomQuestionTextTable; } public void setInputCustomQuestionTextTable(HtmlInputText inputCustomQuestionTextTable) { this.inputCustomQuestionTextTable = inputCustomQuestionTextTable; } public HtmlSelectOneMenu getQuestionTypeListBox() { return questionTypeListBox; } public void setQuestionTypeListBox(HtmlSelectOneMenu questionTypeListBox) { this.questionTypeListBox = questionTypeListBox; } public GuestBookQuestionnaire getGuestBookQuestionnaire() { return guestBookQuestionnaire; } public boolean getGuestBookQuestionnaireEnabled() { return guestBookQuestionnaire.isEnabled(); } public void setGuestBookQuestionnaire(GuestBookQuestionnaire guestBookQuestionnaire) { this.guestBookQuestionnaire = guestBookQuestionnaire; } public void toggleQuestionType(ValueChangeEvent ae) { if (newQuestion.getCustomQuestionValues().isEmpty()) { CustomQuestionValue addCQV = new CustomQuestionValue(); addCQV.setCustomQuestion(newQuestion); newQuestion.getCustomQuestionValues().add(addCQV); } } public void addCustomQuestion() { String questionText = (String) inputCustomQuestionText.getValue(); if (questionText.trim().isEmpty()) { getVDCRenderBean().getFlash().put("customQuestionWarningMessage", "Please enter question text."); return; } newQuestion.setQuestionType(questionType); if (newQuestion.getQuestionType().equals("radiobuttons")) { if (newQuestion.getCustomQuestionValues().isEmpty()) { getVDCRenderBean().getFlash().put("customQuestionWarningMessage", "Please enter answer text."); return; } else { for (CustomQuestionValue cqv : newQuestion.getCustomQuestionValues()) { if (cqv.getValueString().trim().isEmpty()) { getVDCRenderBean().getFlash().put("customQuestionWarningMessage", "Please enter answer text."); return; } } } } else { newQuestion.setCustomQuestionValues(null); } newQuestion.setGuestBookQuestionnaire(guestBookQuestionnaire); newQuestion.setQuestionString(questionText); newQuestion.setCustomQuestionResponses(new ArrayList()); if (guestBookQuestionnaire.getCustomQuestions() == null) { guestBookQuestionnaire.setCustomQuestions(new ArrayList()); } CustomQuestionUI customQuestionUI = new CustomQuestionUI(); customQuestionUI.setCustomQuestion(newQuestion); customQuestionUI.setEditMode(false); customQuestions.add(customQuestionUI); guestBookQuestionnaire.getCustomQuestions().add(newQuestion); inputCustomQuestionText.setValue(""); newQuestion = new CustomQuestion(); newQuestion.setCustomQuestionValues(new ArrayList()); questionType = "text"; } public void removeCustomQuestion(ActionEvent ae) { //we will do an actual remove if there are no responses and a virtual remove if there are responses boolean remove = false; CustomQuestionUI customQuestionUI = (CustomQuestionUI) customQuestionsDataTable.getRowData(); CustomQuestionUI customQuestionUIRemove = new CustomQuestionUI(); for (CustomQuestionUI customQuestionUITest : customQuestions) { if (customQuestionUITest.getCustomQuestion().getQuestionString() .equals(customQuestionUI.getCustomQuestion().getQuestionString())) { customQuestionUIRemove = customQuestionUITest; if (customQuestionUITest.getCustomQuestion().getId() != null && !customQuestionUITest.getCustomQuestion().getCustomQuestionResponses().isEmpty()) { customQuestionUITest.getCustomQuestion().setHidden(true); } else { remove = true; } } } customQuestions.remove(customQuestionUIRemove); if (remove) { guestBookQuestionnaire.getCustomQuestions().remove(customQuestionsDataTable.getRowIndex()); vdc.getGuestBookQuestionnaire().getCustomQuestions().remove(customQuestionsDataTable.getRowIndex()); } } public void editCustomQuestion(ActionEvent ae) { CustomQuestionUI customQuestionUI = (CustomQuestionUI) customQuestionsDataTable.getRowData(); getInputCustomQuestionTextTable().setValue(customQuestionUI.getCustomQuestion().getQuestionString()); customQuestionUI.setEditMode(true); } public void saveCustomQuestion(ActionEvent ae) { CustomQuestionUI customQuestionUI = (CustomQuestionUI) customQuestionsDataTable.getRowData(); customQuestionUI.setEditMode(false); } public List<CustomQuestionUI> getCustomQuestions() { return customQuestions; } public void setCustomQuestions(List<CustomQuestionUI> customQuestions) { this.customQuestions = customQuestions; } public void addCustomRow(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); int row = dataTable.getRowIndex(); CustomQuestionValue data = (CustomQuestionValue) dataTable.getRowData(); CustomQuestionValue newElem = new CustomQuestionValue(); newElem.setCustomQuestion(data.getCustomQuestion()); newElem.setValueString(""); data.getCustomQuestion().getCustomQuestionValues().add(newElem); } public void removeCustomRow(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); if (dataTable.getRowCount() > 1) { CustomQuestionValue data = (CustomQuestionValue) dataTable.getRowData(); for (CustomQuestion cq : getGuestBookQuestionnaire().getCustomQuestions()) { if (cq.getQuestionString().equals(data.getCustomQuestion().getQuestionString())) { cq.getCustomQuestionValues().remove(data); } } } } public void addCustomRowInit(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); int row = dataTable.getRowIndex(); CustomQuestionValue data = (CustomQuestionValue) dataTable.getRowData(); CustomQuestionValue newElem = new CustomQuestionValue(); newElem.setCustomQuestion(newQuestion); newElem.setValueString(""); newQuestion.getCustomQuestionValues().add(newElem); } public void removeCustomRowInit(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); if (dataTable.getRowCount() > 1) { int index = dataTable.getRowIndex(); newQuestion.getCustomQuestionValues().remove(index); } } public String getQuestionType() { return questionType; } public void setQuestionType(String questionType) { this.questionType = questionType; } public CustomQuestion getNewQuestion() { return newQuestion; } public void setNewQuestion(CustomQuestion newQuestion) { this.newQuestion = newQuestion; } //Download Response Page private List<GuestBookResponse> guestBookResponses = new ArrayList(); private List<GuestBookResponseUI> guestBookResponsesDisplay = new ArrayList(); private List<GuestBookResponse> guestBookResponsesAll = new ArrayList(); private List<Long> guestBookResponsesAllIds = new ArrayList(); private boolean show30Days = true; public boolean isShow30Days() { return show30Days; } public void setShow30Days(boolean show30Days) { this.show30Days = show30Days; } private List<String> columnHeadings = new ArrayList(); private List<Long> customQuestionIds = new ArrayList(); private Long fullCount = new Long(0); private Long thirtyDayCount = new Long(0); private String csvString = ""; private String getColumnString() { String csvColumnString = ""; csvColumnString += "User/Session,First Name,Last Name,Email,Institution,Position,"; if (vdc == null) { csvColumnString += "Dataverse,"; } csvColumnString += "Study Global ID, Study Title,Study File,Time,Type,Session"; if (!columnHeadings.isEmpty()) { for (String heading : columnHeadings) { csvColumnString += "," + getSafeCString(heading); } } return csvColumnString; } private String writeCSVStringQuery() { StringBuffer csvOutput = new StringBuffer(); csvOutput.append(getColumnString()); csvOutput.append("\n"); List list = (List) guestBookResponseServiceBean.findDownloadInfoAll(guestBookResponsesAllIds); Iterator iterator = list.iterator(); while (iterator.hasNext()) { StringBuffer csvCol = new StringBuffer(); Object[] gbrInfo = (Object[]) iterator.next(); String userName = (String) gbrInfo[0]; if (!(userName == null) && !userName.isEmpty()) { csvCol.append(getSafeCString(userName)); } else { csvCol.append(getSafeCString("Anonymous - + " + gbrInfo[1])); } csvCol.append(",").append(getSafeCString((String) gbrInfo[2])); csvCol.append(",").append(getSafeCString((String) gbrInfo[3])); csvCol.append(",").append(getSafeCString((String) gbrInfo[4])); csvCol.append(",").append(getSafeCString((String) gbrInfo[5])); csvCol.append(",").append(getSafeCString((String) gbrInfo[12])); if (vdc == null) { csvCol.append(",").append(getSafeCString((String) gbrInfo[6])); } csvCol.append(",").append( getSafeCString((String) gbrInfo[7] + ":" + (String) gbrInfo[8] + "/" + (Long) gbrInfo[13])); csvCol.append(",").append(getSafeCString((String) gbrInfo[9])); csvCol.append(",").append(getSafeCString((String) gbrInfo[10])); Date responseTime = (Date) gbrInfo[11]; csvCol.append(",").append(getSafeCString(responseTime.toString())); csvCol.append(",").append(getSafeCString((String) gbrInfo[15])); csvCol.append(",").append(getSafeCString((String) gbrInfo[1])); if (!customQuestionIds.isEmpty()) { List customQuestionResponsesQueryResults = guestBookResponseServiceBean .findCustomResponsePerGuestbookResponse((Long) gbrInfo[14]); Iterator cqIterator = customQuestionResponsesQueryResults.iterator(); List<CustomQuestionResponse> cqrList = new ArrayList(); while (cqIterator.hasNext()) { Object[] cqResponse = (Object[]) cqIterator.next(); CustomQuestionResponse cqrAdd = new CustomQuestionResponse(); cqrAdd.setResponse((String) cqResponse[0]); CustomQuestion dummyQuestion = new CustomQuestion(); dummyQuestion.setId((Long) cqResponse[1]); cqrAdd.setCustomQuestion(dummyQuestion); cqrList.add(cqrAdd); } if (!cqrList.isEmpty()) { List<String> customQuestionResponseStrings = new ArrayList(customQuestionIds.size()); for (int i = 0; i < cqrList.size(); i++) { customQuestionResponseStrings.add(i, ""); } for (Long qid : customQuestionIds) { int index = customQuestionIds.indexOf(qid); for (CustomQuestionResponse cqr : cqrList) { if (cqr.getCustomQuestion().getId().equals(qid)) { customQuestionResponseStrings.set(index, cqr.getResponse()); } } } for (String response : customQuestionResponseStrings) { csvCol.append(",").append(getSafeCString(response)); } } } csvCol.append("\n"); csvOutput.append(csvCol); } return csvOutput.toString(); } private String writeCSVString() { String csvOutput = getColumnString() + "\n"; csvOutput = writeCSVStringQuery(); return csvOutput; } private String getSafeCString(String strIn) { String retString = strIn; if (strIn == null) { return ""; } int nextSpace = strIn.indexOf(","); if (nextSpace > 0) { // If the string is already enclosed in double quotes, remove them: retString = retString.replaceFirst("^\"", ""); retString = retString.replaceFirst("\"$", ""); // Escape all remaining double quotes, by replacing each one with // 2 double quotes in a row (""). // This is an ancient (IBM Mainframe ancient) CSV convention. // (see http://en.wikipedia.org/wiki/Comma-separated_values#Basic_rules) // Excel apparently follows it to this day. On the other hand, // Excel does NOT understand backslash escapes and will in fact // be confused by it! retString = retString.replaceAll("\"", "\"\""); // finally, add double quotes around the string: retString = "\"" + retString + "\""; } return retString; } public List<GuestBookResponse> getGuestBookResponses() { return guestBookResponses; } public void setGuestBookResponses(List<GuestBookResponse> guestBookResponses) { this.guestBookResponses = guestBookResponses; } public Long getFullCount() { return fullCount; } public void setFullCount(Long fullCount) { this.fullCount = fullCount; } public Long getThirtyDayCount() { return thirtyDayCount; } public void setThirtyDayCount(Long thirtyDayCount) { this.thirtyDayCount = thirtyDayCount; } public List<String> getColumnHeadings() { return columnHeadings; } public void setColumnHeadings(List<String> columnHeadings) { this.columnHeadings = columnHeadings; } public List<GuestBookResponseUI> getGuestBookResponsesDisplay() { return guestBookResponsesDisplay; } public void setGuestBookResponsesDisplay(List<GuestBookResponseUI> guestBookResponsesDisplay) { this.guestBookResponsesDisplay = guestBookResponsesDisplay; } public Resource getDownloadCSV() { return new OptionsPage.ExportFileResource("csv"); } private void writeFile(File fileIn, String dataIn, int bufSize) { ByteBuffer dataByteBuffer = ByteBuffer.wrap(dataIn.getBytes()); try { FileOutputStream outputFile = new FileOutputStream(fileIn, true); WritableByteChannel outChannel = outputFile.getChannel(); try { outChannel.write(dataByteBuffer); outputFile.close(); } catch (IOException e) { e.printStackTrace(System.err); } } catch (IOException e) { throw new EJBException(e); } } public void openFile() { } public class ExportFileResource implements Resource, Serializable { File file; String fileType; public ExportFileResource(String fileType) { this.fileType = fileType; } public String calculateDigest() { return file != null ? file.getPath() : null; } public Date lastModified() { return file != null ? new Date(file.lastModified()) : null; } // TODO: WE ARE ADDING THIS CALL AS A WORKAROUND FOR AN ICEFACES ISSUE WHERE THE OPEN // METHOD IS CALLED TWICE; THIS IS FIXED IN A MORE RECENT VERSION OF ICEFACES, SO WHEN WE // UPGRADE WE WILL NEED TO REMOVE THIS WORKAROUND boolean firstCall = true; public InputStream open() throws IOException { if (firstCall) { // this is the first call to open(); we toggle the boolean and skip this time around firstCall = false; return new NullInputStream(0); } else { // this is the second call top open(); we reset the boolean and let the call proceed firstCall = true; } try { file = File.createTempFile("downloadFile", "tmp"); } catch (IOException ioException) { System.out.print("Guestbookresponse open exception: " + ioException); } csvString = writeCSVString(); writeFile(file, csvString, csvString.length()); return new FileInputStream(file); } public void withOptions(Resource.Options options) throws IOException { String filePrefix = "dataDownload_" + new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(new Date()); options.setFileName(filePrefix + "." + fileType); } public File getFile() { return file; } } // Edit Home Panels private boolean chkNetworkAnnouncements = false; public boolean isChkNetworkAnnouncements() { return chkNetworkAnnouncements; } public void setChkNetworkAnnouncements(boolean chkNetworkAnnouncements) { this.chkNetworkAnnouncements = chkNetworkAnnouncements; } private boolean chkLocalAnnouncements; public boolean isChkLocalAnnouncements() { return chkLocalAnnouncements; } public void setChkLocalAnnouncements(boolean chkLocalAnnouncements) { this.chkLocalAnnouncements = chkLocalAnnouncements; } private String localAnnouncements; public String getLocalAnnouncements() { return localAnnouncements; } public void setLocalAnnouncements(String localAnnouncements) { this.localAnnouncements = localAnnouncements; } private boolean chkNewStudies; public boolean isChkNewStudies() { return chkNewStudies; } public void setChkNewStudies(boolean chkNewStudies) { this.chkNewStudies = chkNewStudies; } private HtmlInputTextarea localAnnouncementsInputText; public HtmlInputTextarea getLocalAnnouncementsInputText() { return this.localAnnouncementsInputText; } public void setLocalAnnouncementsInputText(HtmlInputTextarea localAnnouncementsInputText) { this.localAnnouncementsInputText = localAnnouncementsInputText; } //Contact Us Page private String contactUsEmail; public String getContactUsEmail() { return this.contactUsEmail; } public void setContactUsEmail(String contactUsEmail) { this.contactUsEmail = contactUsEmail; } private String editSystemEmail; public String getEditSystemEmail() { return this.editSystemEmail; } public void setEditSystemEmail(String editSystemEmail) { this.editSystemEmail = editSystemEmail; } // Edit Study Comments protected boolean allowStudyComments = true; protected HtmlSelectBooleanCheckbox allowStudyCommentsCheckbox = new HtmlSelectBooleanCheckbox(); public HtmlSelectBooleanCheckbox getAllowStudyCommentsCheckbox() { return allowStudyCommentsCheckbox; } public void setAllowStudyCommentsCheckbox(HtmlSelectBooleanCheckbox allowStudyCommentsCheckbox) { this.allowStudyCommentsCheckbox = allowStudyCommentsCheckbox; } public boolean isAllowStudyComments() { return allowStudyComments; } public void setAllowStudyComments(boolean allowStudyComments) { this.allowStudyComments = allowStudyComments; } //Edit Site Page private StatusMessage msg; public StatusMessage getMsg() { return msg; } public String saveGeneralSettings_action() { // Step 1: Validate all the page fields - call each validiate method separately, so that all error messages display! boolean isValid = editSitePage.isValidName(); isValid = editSitePage.isValidAlias() && isValid; isValid = editSitePage.isValidAffiliation() && isValid; isValid = editSitePage.isValidShortDescription() && isValid; if (editSitePage.getDataverseType().equals("Scholar")) { isValid = editSitePage.isValidScholarName() && isValid; } isValid = editSitePage.isValidDescription() && isValid; isValid = editSitePage.isValidClassificationCheckBoxes() && isValid; if (!isValid) { getVDCRenderBean().getFlash().put("warningMessage", "Could not update general settings. See below for details."); return null; } // Step 2: Set values and save to db vdc.setName((String) editSitePage.getDataverseName().getValue()); vdc.setAlias((String) editSitePage.getDataverseAlias().getValue()); vdc.setAffiliation((String) editSitePage.getAffiliation().getValue()); vdc.setDvnDescription((String) editSitePage.getShortDescription().getValue()); String dataverseType = editSitePage.getDataverseType(); vdc.setDtype(dataverseType); if (dataverseType.equals("Scholar")) { vdc.setFirstName(editSitePage.getFirstName()); vdc.setLastName(editSitePage.getLastName()); } else { vdc.setFirstName(null); vdc.setLastName(null); } vdc.setDisplayAnnouncements(editSitePage.isChkLocalAnnouncements()); vdc.setAnnouncements(editSitePage.getLocalAnnouncements()); // classifications vdc.getVdcGroups().clear(); for (ClassificationUI classUI : editSitePage.getClassificationList().getClassificationUIs()) { if (classUI.isSelected()) { vdc.getVdcGroups().add(classUI.getVdcGroup()); } } // TODO: cleanup - these are working because the xhtml values are bound to the options page vdc.setContactEmail(this.getContactUsEmail()); // TODO: cleanup - these are working because the xhtml values are bound to the options page allowStudyComments = (Boolean) allowStudyCommentsCheckbox.getValue(); vdc.setAllowStudyComments(allowStudyComments); if (editSitePage.getSelectSubNetworkId() > 0) { VDCNetwork vdcNetwork = vdcNetworkService.findById(editSitePage.getSelectSubNetworkId()); vdc.setVdcNetwork(vdcNetwork); } else { vdc.setVdcNetwork(vdcNetworkService.findRootNetwork()); } //Update default template if you've changed the sub net and invalidatated the default template. if (!editSitePage.getSelectSubNetworkId().equals(editSitePage.getOriginalSubNetworkId()) && !editSitePage.isValidTemplate(vdc.getDefaultTemplate())) { vdc.setDefaultTemplate( vdcNetworkService.findById(editSitePage.getSelectSubNetworkId()).getDefaultTemplate()); } // Check if user has changed released state boolean releaseStateChanged = false; if (siteRestriction.equals("Public")) { if (vdc.isRestricted()) { // user has switched from Not Released -> Released releaseStateChanged = true; vdc.setReleaseDate(DateUtil.getTimestamp()); vdc.setRestricted(false); } } else { if (!vdc.isRestricted()) { // user has switched from Released -> Not Released releaseStateChanged = true; vdc.setReleaseDate(null); vdc.setRestricted(true); } } vdcService.edit(vdc); // Step 3: if newly released, send e-mail, tweets, etc... // TODO: DO we need NetworkStatBean? We need to investigate if this is old code and can just be removed NetworkStatsBean statsBean = (NetworkStatsBean) FacesContext.getCurrentInstance().getExternalContext() .getRequestMap().get("NetworkStatsBean"); if (releaseStateChanged) { if (!vdc.isRestricted()) { sendReleaseEmails(); // tweet release of dataverse TwitterCredentials tc = vdcNetworkService.getTwitterCredentials(); if (tc != null) { try { String message = "New dataverse released: " + vdc.getName() + " Dataverse"; URL url = new URL("http://" + PropertyUtil.getHostUrl() + "/dvn/dv/" + vdc.getAlias()); TwitterUtil.tweet(tc, message, url); } catch (MalformedURLException ex) { Logger.getLogger(PrivilegedUsersPage.class.getName()).log(Level.SEVERE, null, ex); } // TODO: DO we need NetworkStatBean? We need to investigate if this is old code and can just be removed if (statsBean != null) { statsBean.releaseAndUpdateInlineDataverseValue(vdc.getId(), (List<VDCGroup>) vdc.getVdcGroups()); } } } } else { // TODO: DO we need NetworkStatBean? We need to investigate if this is old code and can just be removed if (statsBean != null) { statsBean.restrictAndUpdateInlineDataverseValue(vdc.getId(), (List<VDCGroup>) vdc.getVdcGroups()); } } getVDCRenderBean().getFlash().put("successMessage", "Successfully updated general settings."); return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix() + "&tab=settings&tab2=general"; } //Edit Lockss Config page private LockssConfig lockssConfig; private Long selectOAISetId; private Long selectLicenseId; private Map<Long, LicenseType> licenseTypes = new HashMap(); private EditLockssConfigPage.HarvestType selectHarvestType; private HtmlSelectOneMenu licenseMenu; private HtmlSelectOneMenu oaiSetMenu; private HtmlDataTable serverTable; private boolean showEditExportSchedulePage = false; public boolean isShowEditExportSchedulePage() { return showEditExportSchedulePage; } public void setShowEditExportSchedulePage(boolean showEditExportSchedulePage) { this.showEditExportSchedulePage = showEditExportSchedulePage; } public void showEditExportSchedulePageAction(ActionEvent event) { VDCNetwork vdcNetwork = this.getVDCRequestBean().getVdcNetwork(); exportSchedulePeriod = vdcNetwork.getExportPeriod(); exportHourOfDay = vdcNetwork.getExportHourOfDay(); exportDayOfWeek = vdcNetwork.getExportDayOfWeek(); setSelectExportPeriod(loadSelectExportPeriod()); setShowEditExportSchedulePage(true); } public List<SelectItem> getSelectOAISets() { List selectItems = new ArrayList<SelectItem>(); selectItems.add(new SelectItem(null, "No Set (All Owned Studies)")); for (OAISet oaiSet : oaiService.findAll()) { // Don't show OAISets that have been created for dataverse-level Lockss Harvesting if (oaiSet.getLockssConfig() == null || oaiSet.getLockssConfig().getVdc() == null) { selectItems.add(new SelectItem(oaiSet.getId(), oaiSet.getName())); } } return selectItems; } public boolean isLicenseRequired() { return !selectHarvestType.equals(EditLockssConfigPage.HarvestType.NONE); } public List<LicenseType> getSelectLicenseTypes() { List selectItems = new ArrayList<SelectItem>(); for (LicenseType licenseType : licenseTypes.values()) { selectItems.add(new SelectItem(licenseType.getId(), licenseType.getName())); } return selectItems; } private boolean validateLicenseType() { boolean valid = true; if (!this.selectHarvestType.equals(EditLockssConfigPage.HarvestType.NONE) && selectLicenseId == null) { valid = false; } if (!valid) { ((UIInput) licenseMenu).setValid(false); FacesMessage message = new FacesMessage("This field is required."); FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(licenseMenu.getClientId(context), message); } return valid; } private boolean validateOaiSet() { boolean valid = true; if (!this.selectHarvestType.equals(EditLockssConfigPage.HarvestType.NONE) && getVDCRequestBean().getCurrentVDC() == null && new Long(-1).equals(this.selectOAISetId)) { valid = false; } if (!valid) { ((UIInput) oaiSetMenu).setValid(false); FacesMessage message = new FacesMessage("This field is required."); FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(oaiSetMenu.getClientId(context), message); } return valid; } private boolean validateLockssServers() { boolean valid = false; if (!selectHarvestType.equals(EditLockssConfigPage.HarvestType.GROUP) && !getLockssConfig().isAllowRestricted()) { valid = true; } else { for (Iterator<LockssServer> it = lockssConfig.getLockssServers().iterator(); it.hasNext();) { LockssServer elem = it.next(); if (elem.getIpAddress() != null && !elem.getIpAddress().trim().isEmpty()) { valid = true; } } } if (!valid) { String errMessage; if (selectHarvestType.equals(EditLockssConfigPage.HarvestType.GROUP) && !getLockssConfig().isAllowRestricted()) { errMessage = "Please specify servers that are allowed to harvest."; } else if (!selectHarvestType.equals(EditLockssConfigPage.HarvestType.GROUP) && getLockssConfig().isAllowRestricted()) { errMessage = "Please specify servers that are allowed to access restricted data."; } else { errMessage = "Please specify servers that are allowed to harvest and access restricted data."; } FacesMessage message = new FacesMessage(errMessage); FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(serverTable.getClientId(context), message); } return valid; } public void validateIpAddress(FacesContext context, UIComponent toValidate, Object value) { boolean valid = doValidate(value); if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("Invalid IP address or hostname."); context.addMessage(toValidate.getClientId(context), message); } } private static boolean doValidate(Object value) { boolean valid = false; String address = value.toString(); // first, assume it's a domain name if (address.startsWith("*.")) { StringBuffer sb = new StringBuffer(address); sb.setCharAt(0, 'a'); address = sb.toString(); } valid = validateDomainName(address); if (!valid) { // Try to validate it as an ip address String ipAddress = value.toString(); // for the purposes of validation, if the string ends in ".*", // replace it with dummy data for the validator. if (ipAddress.endsWith(".*")) { StringBuffer sb = new StringBuffer(ipAddress); sb.setCharAt(ipAddress.length() - 1, '1'); ipAddress = sb.toString(); // if necessary, add dummy values to the end of the string, // so it will pass validation. String[] splitStrings = ipAddress.split("\\."); if (splitStrings.length == 2) { ipAddress += ".1.1"; } else if (splitStrings.length == 3) { ipAddress += ".1"; } } InetAddressValidator val = InetAddressValidator.getInstance(); valid = val.isValid(ipAddress); } return valid; } /** * Cribbed from: http://pappul.blogspot.com/2006/07/validation-of-host-name-in-java.html * @param domainName * @return */ private static boolean validateDomainName(String domainName) { if ((domainName == null) || (domainName.length() > 63)) { return false; } String domainIdentifier = "((\\p{Alnum})([-]|(\\p{Alnum}))*(\\p{Alnum}))|(\\p{Alnum})"; String domainNameRule = "(" + domainIdentifier + ")((\\.)(" + domainIdentifier + "))*"; String oneAlpha = "(.)*((\\p{Alpha})|[-])(.)*"; return domainName.matches(domainNameRule) && domainName.matches(oneAlpha); } public String locksSS_save() { boolean validLicenseType = validateLicenseType(); boolean validOai = validateOaiSet(); boolean validServers = validateLockssServers(); if (validLicenseType && validOai && validServers) { removeEmptyRows(); if (selectHarvestType.equals(EditLockssConfigPage.HarvestType.NONE)) { editLockssService.removeLockssConfig(); } else { lockssConfig.setserverAccess(LockssConfig.ServerAccess.valueOf(selectHarvestType.toString())); lockssConfig.setLicenseType(licenseTypes.get(selectLicenseId)); editLockssService.saveChanges(selectOAISetId); } // refresh currentVDC object if (getVDCRequestBean().getCurrentVDC() != null) { if (selectHarvestType.equals(EditLockssConfigPage.HarvestType.NONE)) { getVDCRequestBean().getCurrentVDC().setLockssConfig(null); } else { getVDCRequestBean().getCurrentVDC().setLockssConfig(lockssConfig); } if (showEditExportSchedulePage) { saveExportSchedule(); } } else { saveExportSchedule(); } getVDCRenderBean().getFlash().put("successMessage", "Successfully updated LOCKSS harvest settings."); return getReturnPage(); } else { return ""; } } public String locksSS_cancel() { editLockssService.cancel(); return getReturnPage(); } private String getReturnPage() { if (getVDCRequestBean().getCurrentVDC() == null) { return "/networkAdmin/NetworkOptionsPage?faces-redirect=true&tab=harvesting&tab2=settings"; } else { return ""; } } public HtmlSelectOneMenu getLicenseMenu() { return licenseMenu; } public void setLicenseMenu(HtmlSelectOneMenu licenseMenu) { this.licenseMenu = licenseMenu; } public HtmlSelectOneMenu getOaiSetMenu() { return oaiSetMenu; } public void setOaiSetMenu(HtmlSelectOneMenu oaiSetMenu) { this.oaiSetMenu = oaiSetMenu; } public HtmlDataTable getServerTable() { return serverTable; } public void setServerTable(HtmlDataTable serverTable) { this.serverTable = serverTable; } public Long getSelectOAISetId() { return selectOAISetId; } public void setSelectOAISetId(Long selectOAISetId) { this.selectOAISetId = selectOAISetId; } public LockssConfig getLockssConfig() { return lockssConfig; } public void setLockssConfig(LockssConfig lockssConfig) { this.lockssConfig = lockssConfig; } public Long getSelectLicenseId() { return selectLicenseId; } public void setSelectLicenseId(Long selectLicenseId) { this.selectLicenseId = selectLicenseId; } public EditLockssConfigPage.HarvestType getSelectHarvestType() { return selectHarvestType; } public void setSelectHarvestType(EditLockssConfigPage.HarvestType selectHarvestType) { this.selectHarvestType = selectHarvestType; } private void initCollection() { if (lockssConfig.getLockssServers() == null || lockssConfig.getLockssServers().size() == 0) { LockssServer elem = new LockssServer(); elem.setLockssConfig(lockssConfig); List<LockssServer> servers = new ArrayList(); servers.add(elem); lockssConfig.setLockssServers(servers); } } public void addRow(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); LockssServer newElem = new LockssServer(); newElem.setLockssConfig(lockssConfig); lockssConfig.getLockssServers().add(dataTable.getRowIndex() + 1, newElem); } public void removeRow(ActionEvent ae) { HtmlDataTable dataTable = (HtmlDataTable) ae.getComponent().getParent().getParent(); if (dataTable.getRowCount() > 1) { List data = (List) dataTable.getValue(); editLockssService.removeCollectionElement(data, dataTable.getRowIndex()); } } private void removeEmptyRows() { for (Iterator<LockssServer> it = lockssConfig.getLockssServers().iterator(); it.hasNext();) { LockssServer elem = it.next(); if (elem.getIpAddress() != null && elem.getIpAddress().trim().isEmpty()) { editLockssService.removeCollectionElement(it, elem); } } } //Edit Harvest Site Page HtmlSelectBooleanCheckbox scheduledCheckbox; HtmlSelectOneMenu schedulePeriod; String _HARVEST_DTYPE = "Basic"; public HtmlSelectOneMenu getSchedulePeriod() { return schedulePeriod; } public void setSchedulePeriod(HtmlSelectOneMenu schedulePeriod) { this.schedulePeriod = schedulePeriod; } private HarvestingDataverse harvestingDataverse; public List getAllowedFileGroups() { return editHarvestSiteService.getAllowedFileGroups(); } public List getAllowedFileUsers() { return editHarvestSiteService.getAllowedFileUsers(); } private String validatedServerUrl = null; public void validateOAIServer(FacesContext context, UIComponent toValidate, Object value) { String validationMessage = null; String currentServerUrl = ((String) value).trim(); if (isSaving()) { if (validatedServerUrl == null || !validatedServerUrl.equals(currentServerUrl)) { validationMessage = "You must first validate the server."; } } else { boolean valid = assignHarvestingSets(currentServerUrl, (String) inputHarvestType.getLocalValue()); if (valid) { assignMetadataFormats(currentServerUrl, (String) inputHarvestType.getLocalValue()); validatedServerUrl = currentServerUrl; } else { validationMessage = "Invalid OAI Server Url"; } } if (validationMessage != null) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage(validationMessage); context.addMessage(toValidate.getClientId(context), message); } } public void getOAISets(ActionEvent ea) { } private Long harvestId; public Long getHarvestId() { return harvestId; } public void setHarvestId(Long harvestIdIn) { harvestId = harvestIdIn; } public HarvestingDataverse getHarvestingDataverse() { return harvestingDataverse; } public void setHarvestingDataverse(HarvestingDataverse harvestingDataverse) { this.harvestingDataverse = harvestingDataverse; } public EditHarvestSiteService getEditHarvestSiteService() { return editHarvestSiteService; } public void setEditHarvestSiteService(EditHarvestSiteService editHarvestSiteService) { this.editHarvestSiteService = editHarvestSiteService; } public String save() { Long userId = getVDCSessionBean().getLoginBean().getUser().getId(); if (harvestingDataverse.isOai()) { String schedulePeriod = editHarvestSiteService.getHarvestingDataverse().getSchedulePeriod(); Integer dayOfWeek = editHarvestSiteService.getHarvestingDataverse().getScheduleDayOfWeek(); Integer hourOfDay = editHarvestSiteService.getHarvestingDataverse().getScheduleHourOfDay(); if (schedulePeriod != null && schedulePeriod.equals("notSelected")) { editHarvestSiteService.getHarvestingDataverse().setSchedulePeriod(null); } if (hourOfDay != null && hourOfDay.intValue() == -1) { editHarvestSiteService.getHarvestingDataverse().setScheduleHourOfDay(null); } if (dayOfWeek != null && dayOfWeek.intValue() == -1) { editHarvestSiteService.getHarvestingDataverse().setScheduleDayOfWeek(null); } } else { editHarvestSiteService.getHarvestingDataverse().setScheduled(false); editHarvestSiteService.getHarvestingDataverse().setSchedulePeriod(null); editHarvestSiteService.getHarvestingDataverse().setScheduleHourOfDay(null); editHarvestSiteService.getHarvestingDataverse().setScheduleDayOfWeek(null); } editHarvestSiteService.save(userId, dataverseNameHarvest, dataverseAliasHarvest, filesRestricted, _HARVEST_DTYPE, dataverseAffiliationHarvest); remoteTimerService.updateHarvestTimer(harvestingDataverse); if (isCreateMode()) { getVDCRenderBean().getFlash().put("successMessage", "Your new dataverse has been created!"); return "/site/AddSiteSuccessPage?faces-redirect=true&vdcId=" + editHarvestSiteService.getHarvestingDataverse().getVdc().getId(); } else { getVDCRenderBean().getFlash().put("successMessage", "Successfully updated harvesting settings."); return generateReturnPage(); } } public String cancel() { if (isCreateMode()) { return "/networkAdmin/NetworkOptionsPage?faces-redirect=true"; } else { return generateReturnPage(); } } private String generateReturnPage() { if (getVDCRequestBean().getCurrentVDCId() != null) { return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix(); } else { return "/site/HarvestSitesPage.xhtml?faces-redirect=true"; } } private String dataverseNameHarvest; public String getDataverseNameHarvest() { return this.dataverseNameHarvest; } public void setDataverseNameHarvest(String dataverseName) { this.dataverseNameHarvest = dataverseName; } private String dataverseAliasHarvest; public String getDataverseAliasHarvest() { return this.dataverseAliasHarvest; } public void setDataverseAliasHarvest(String dataverseAlias) { this.dataverseAliasHarvest = dataverseAlias; } private String dataverseAffiliationHarvest; public String getdataverseAffiliationHarvest() { return this.dataverseAffiliationHarvest; } public void setdataverseAffiliationHarvest(String dataverseAffiliation) { this.dataverseAffiliationHarvest = dataverseAffiliation; } private HtmlDataTable groupTableHarvest; public HtmlDataTable getGroupTableHarvest() { return this.groupTableHarvest; } public void setGroupTableHarvest(HtmlDataTable groupTable) { this.groupTableHarvest = groupTable; } private HtmlDataTable userTableHarvest; public HtmlDataTable getUserTableHarvest() { return this.userTableHarvest; } public void setUserTableHarvest(HtmlDataTable userTable) { this.userTableHarvest = userTable; } private HtmlDataTable harvestDataTable; public HtmlDataTable getHarvestDataTable() { return this.harvestDataTable; } public void setHarvestDataTable(HtmlDataTable userTable) { this.harvestDataTable = userTable; } public void doRunNow(ActionEvent ae) { HarvestingDataverse hd = (HarvestingDataverse) this.harvestDataTable.getRowData(); harvesterService.doAsyncHarvest(hd); Date previousDate = hd.getLastHarvestTime(); HarvestingDataverse tempHD = null; Date tempDate = null; try { do { Thread.sleep(100); // sleep for 1/10 second to wait for harvestingNow or lastHarvestDate to be updated tempHD = harvestingDataverseService.find(hd.getId()); tempDate = tempHD.getLastHarvestTime(); } while (!tempHD.isHarvestingNow() && !isHarvestingDateUpdated(previousDate, tempDate)); } catch (InterruptedException e) { } this.harvestSiteList = harvestingDataverseService.findAll(); } public void doSchedule(ActionEvent ae) { HarvestingDataverse hd = (HarvestingDataverse) this.harvestDataTable.getRowData(); hd.setScheduled(true); remoteTimerService.updateHarvestTimer(hd); harvestingDataverseService.edit(hd); // set list to null, to force a fresh retrieval of data harvestSiteList = null; } public void doUnschedule(ActionEvent ae) { HarvestingDataverse hd = (HarvestingDataverse) this.harvestDataTable.getRowData(); hd.setScheduled(false); remoteTimerService.updateHarvestTimer(hd); harvestingDataverseService.edit(hd); // set list to null, to force a fresh retrieval of data harvestSiteList = null; } private boolean isHarvestingDateUpdated(Date previousDate, Date tempDate) { boolean isUpdated = false; if (previousDate == null) { if (tempDate != null) { isUpdated = true; } } else if (!previousDate.equals(tempDate)) { isUpdated = true; } return isUpdated; } private String addUserName; public String getAddUserName() { return this.addUserName; } public void setAddUserName(String addUserName) { this.addUserName = addUserName; } private String addGroupName; public String getAddGroupName() { return this.addGroupName; } public void setAddGroupName(String addGroupName) { this.addGroupName = addGroupName; } public void removeGroup(ActionEvent ae) { this.editHarvestSiteService.removeAllowedFileGroup(((UserGroup) groupTable.getRowData()).getId()); } public void removeUser(ActionEvent ae) { this.editHarvestSiteService.removeAllowedFileUser(((VDCUser) userTable.getRowData()).getId()); } public void addUser(ActionEvent ae) { if (validateUserName(FacesContext.getCurrentInstance(), userInputText, addUserName)) { VDCUser user = userService.findByUserName(addUserName); this.editHarvestSiteService.addAllowedFileUser(user.getId()); addUserName = ""; } } public void addUserDV(ActionEvent ae) { if (validateUserName(FacesContext.getCurrentInstance(), userInputText, newUserName)) { VDCUser user = userService.findByUserName(newUserName); VDCRole vdcRole = new VDCRole(); vdcRole.setVdcUser(user); vdcRole.setRole(roleService.findById(newRoleId)); vdcRole.setVdc(vdc); // Add the new vdcRole object to the second position in the display list - // the first position stays null to allow for more inserts. vdcRoleList.add(1, new OptionsPage.RoleListItem(vdcRole, vdcRole.getRoleId())); // Add new vdcRole to the actual list in the vdc object vdc.getVdcRoles().add(0, vdcRole); // Reset newUserName, to be ready for new input from user initUserName(); // Reset newRoleId, to be ready for new input from user newRoleId = null; } } public void addGroupDV(ActionEvent ae) { if (validateGroupName(FacesContext.getCurrentInstance(), groupInputText, groupName)) { UserGroup group = groupService.findByName(groupName); this.editVDCPrivileges.addAllowedGroup(group.getId()); groupName = ""; } } public void removeGroupDV(ActionEvent ae) { editVDCPrivileges.removeAllowedGroup(((UserGroup) groupTable.getRowData()).getId()); } public void removeRole(ActionEvent ea) { vdcRoleList.remove(userTable.getRowIndex()); editVDCPrivileges.removeRole(userTable.getRowIndex() - 1); } public void addGroup(ActionEvent ae) { if (validateGroupName(FacesContext.getCurrentInstance(), groupInputText, addGroupName)) { UserGroup group = groupService.findByName(addGroupName); this.editHarvestSiteService.addAllowedFileGroup(group.getId()); addGroupName = ""; } } private HtmlInputText userInputTextHarvest; public HtmlInputText getUserInputTextHarvest() { return this.userInputTextHarvest; } public void setUserInputTextHarvest(HtmlInputText userInputText) { this.userInputTextHarvest = userInputText; } private HtmlInputText groupInputTextHarvest; public HtmlInputText getGroupInputTextHarvest() { return this.groupInputTextHarvest; } public void setGroupInputTextHarvest(HtmlInputText groupInputText) { this.groupInputTextHarvest = groupInputText; } private void assignMetadataFormats(String oaiUrl, String harvestType) { if (HarvestingDataverse.HARVEST_TYPE_OAI.equals(harvestType)) { if (oaiUrl != null) { editHarvestSiteService.setMetadataFormats(harvesterService.getMetadataFormats(oaiUrl)); } else { editHarvestSiteService.setMetadataFormats(null); } } else if (HarvestingDataverse.HARVEST_TYPE_NESSTAR.equals(harvestType)) { List<String> formats = new ArrayList(); formats.add("ddi"); editHarvestSiteService.setMetadataFormats(formats); } else { editHarvestSiteService.setMetadataFormats(null); } } private boolean assignHarvestingSets(String oaiUrl, String harvestType) { boolean valid = true; if (HarvestingDataverse.HARVEST_TYPE_OAI.equals(harvestType) && oaiUrl != null) { try { editHarvestSiteService.setHarvestingSets(harvesterService.getSets(oaiUrl)); } catch (EJBException e) { valid = false; } } else { editHarvestSiteService.setHarvestingSets(null); } return valid; } public List<SelectItem> getHarvestingSetsSelect() { List<SelectItem> harvestingSetsSelect = new ArrayList<SelectItem>(); if (this.editHarvestSiteService.getHarvestingSets() != null) { for (Iterator it = this.editHarvestSiteService.getHarvestingSets().iterator(); it.hasNext();) { SetDetailBean elem = (SetDetailBean) it.next(); harvestingSetsSelect.add(new SelectItem(elem.getSpec(), elem.getName())); } } return harvestingSetsSelect; } public List<SelectItem> getMetadataFormatsSelect() { List<SelectItem> metadataFormatsSelect = new ArrayList<SelectItem>(); if (this.editHarvestSiteService.getMetadataFormats() != null) { for (Iterator it = this.editHarvestSiteService.getMetadataFormats().iterator(); it.hasNext();) { String elem = (String) it.next(); HarvestFormatType hft = harvesterService.findHarvestFormatTypeByMetadataPrefix(elem); if (hft != null) { metadataFormatsSelect.add(new SelectItem(hft.getId(), hft.getName())); } } } return metadataFormatsSelect; } public List<SelectItem> getHandlePrefixSelect() { List<SelectItem> handlePrefixSelect = new ArrayList<SelectItem>(); List<HandlePrefix> prefixList = handlePrefixService.findAll(); for (Iterator it = prefixList.iterator(); it.hasNext();) { HandlePrefix prefix = (HandlePrefix) it.next(); handlePrefixSelect.add( new SelectItem(prefix.getId(), "Register harvested studies with prefix " + prefix.getPrefix())); } return handlePrefixSelect; } private Long handlePrefixId; public Long getHandlePrefixId() { Long id = null; if (harvestingDataverse.getHandlePrefix() != null) { id = harvestingDataverse.getHandlePrefix().getId(); } return id; } public void setHandlePrefixId(Long handlePrefixId) { this.handlePrefixId = handlePrefixId; } private HtmlSelectOneMenu handlePrefixSelectOneMenu; public HtmlSelectOneMenu getHandlePrefixSelectOneMenu() { return this.handlePrefixSelectOneMenu; } public void setHandlePrefixSelectOneMenu(HtmlSelectOneMenu handlePrefixSelectOneMenu) { this.handlePrefixSelectOneMenu = handlePrefixSelectOneMenu; } public Boolean getSubsetRestrictedWrapper() { return harvestingDataverse.isSubsetRestricted(); } public void setSubsetRestrictedWrapper(Boolean subsetRestrictedWrapper) { if (subsetRestrictedWrapper != null) { harvestingDataverse.setSubsetRestricted(subsetRestrictedWrapper); } else { harvestingDataverse.setSubsetRestricted(false); } } public void validateSchedulePeriod(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (isOai() && scheduledCheckbox.getLocalValue().equals(Boolean.TRUE)) if (((String) value).equals("notSelected")) { valid = false; } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } public void validateHourOfDay(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (isOai() && schedulePeriod != null && schedulePeriod.getLocalValue() != null && (schedulePeriod.getLocalValue().equals("daily") || schedulePeriod.getLocalValue().equals("weekly"))) { if (value == null || ((Integer) value).equals(new Integer(-1))) { valid = false; } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } public void validateDayOfWeek(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (isOai() && schedulePeriod != null && schedulePeriod.getLocalValue() != null && schedulePeriod.getLocalValue().equals("weekly")) { if (value == null || ((Integer) value).equals(new Integer(-1))) { valid = false; } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } private boolean isOai() { return (inputHarvestType != null && inputHarvestType.getLocalValue().equals("oai")); } public HtmlSelectBooleanCheckbox getScheduledCheckbox() { return scheduledCheckbox; } public void setScheduledCheckbox(HtmlSelectBooleanCheckbox scheduledCheckbox) { this.scheduledCheckbox = scheduledCheckbox; } private boolean isUpdateMode() { return editHarvestSiteService.getEditMode().equals(EditHarvestSiteService.EDIT_MODE_UPDATE); } private boolean isCreateMode() { return editHarvestSiteService.getEditMode().equals(EditHarvestSiteService.EDIT_MODE_CREATE); } public boolean getCreateMode() { return isCreateMode(); } private HtmlSelectOneRadio inputHarvestType; public HtmlSelectOneRadio getInputHarvestType() { return inputHarvestType; } public void setInputHarvestType(HtmlSelectOneRadio inputHarvestTypeIn) { inputHarvestType = inputHarvestTypeIn; } public String getPageTitle() { if (isCreateMode()) { return ResourceBundle.getBundle("BundlePageInfo").getString("createHarvestingDvTitle"); } else { return ResourceBundle.getBundle("BundlePageInfo").getString("editHarvestingDvTitle"); } } private HtmlCommandButton saveCommand; public HtmlCommandButton getSaveCommand() { return saveCommand; } public void setSaveCommand(HtmlCommandButton saveCommand) { this.saveCommand = saveCommand; } public boolean isSaving() { // check to see if the current request is from the user clicking one of the save buttons FacesContext fc = FacesContext.getCurrentInstance(); Map reqParams = fc.getExternalContext().getRequestParameterMap(); return reqParams.containsKey(saveCommand.getClientId(fc)); } private String defaultSortOrder = ""; public String getDefaultSortOrder() { return defaultSortOrder; } public void setDefaultSortOrder(String defaultSortOrder) { this.defaultSortOrder = defaultSortOrder; } Collection<StudyField> searchResultsFields; private boolean productionDateResults; public boolean isProductionDateResults() { return productionDateResults; } public void setProductionDateResults(boolean productionDateResults) { this.productionDateResults = productionDateResults; } private boolean producerResults; public boolean isProducerResults() { return producerResults; } public void setProducerResults(boolean checked) { this.producerResults = checked; } private boolean distributionDateResults; public boolean isDistributionDateResults() { return distributionDateResults; } public void setDistributionDateResults(boolean checked) { this.distributionDateResults = checked; } private boolean distributorResults; public boolean isDistributorResults() { return distributorResults; } public void setDistributorResults(boolean checked) { this.distributorResults = checked; } private boolean replicationForResults; public boolean isReplicationForResults() { return replicationForResults; } public void setReplicationForResults(boolean checked) { this.replicationForResults = checked; } private boolean relatedPublicationsResults; public boolean isRelatedPublicationsResults() { return relatedPublicationsResults; } public void setRelatedPublicationsResults(boolean checked) { this.relatedPublicationsResults = checked; } private boolean relatedMaterialResults; public boolean isRelatedMaterialResults() { return relatedMaterialResults; } public void setRelatedMaterialResults(boolean checked) { this.relatedMaterialResults = checked; } private boolean relatedStudiesResults; public boolean isRelatedStudiesResults() { return relatedStudiesResults; } public void setRelatedStudiesResults(boolean checked) { this.relatedStudiesResults = checked; } public IndexServiceLocal getIndexService() { return indexService; } public StudyFieldServiceLocal getStudyFieldService() { return studyFieldService; } private List<StudyField> getDefaultSearchResultsFields() { ArrayList searchResultsFields = new ArrayList(); List allStudyFields = studyFieldService.findAll(); for (Iterator it = allStudyFields.iterator(); it.hasNext();) { StudyField elem = (StudyField) it.next(); if (elem.isSearchResultField()) { searchResultsFields.add(elem); } } return searchResultsFields; } public String saveCustomization() throws java.io.IOException, ParserConfigurationException, SAXException, TransformerException, JAXBException { String banner = editBannerFooterPage.getBanner(); String footer = editBannerFooterPage.getFooter(); editBannerFooterPage.getCombinedTextField().setValue(banner + footer); boolean validXML = true; String retString = "/admin/OptionsPage?faces-redirect=true" + getContextSuffix() + "&tab=settings&tab2=customization"; ArrayList<String> errorMessage = new ArrayList(); XhtmlValidator validator = new XhtmlValidator(); validXML = validator.validateXhtmlMessage(banner + footer, errorMessage); if (!validXML) { if (errorMessage.size() > 0) { getVDCRenderBean().getFlash().put("warningMessage", errorMessage.get(0)); } else { getVDCRenderBean().getFlash().put("warningMessage", "HTML Error . . .It's possible an end tag is missing, or the markup is unbalanced."); } return ""; } vdc.setHeader(banner); vdc.setFooter(footer); vdc.setDisplayInFrame(editBannerFooterPage.isDisplayInFrame()); vdc.setParentSite(editBannerFooterPage.getParentSite()); List<StudyField> newSearchResultsFields = getDefaultSearchResultsFields(); if (productionDateResults) { StudyField productionDateResultsField = studyFieldService.findByName(StudyFieldConstant.productionDate); newSearchResultsFields.add(productionDateResultsField); } if (producerResults) { StudyField producerResultsField = studyFieldService.findByName(StudyFieldConstant.producer); newSearchResultsFields.add(producerResultsField); } if (distributionDateResults) { StudyField distributionDateResultsField = studyFieldService .findByName(StudyFieldConstant.distributionDate); newSearchResultsFields.add(distributionDateResultsField); } if (distributorResults) { StudyField distributorResultsField = studyFieldService.findByName(StudyFieldConstant.distributor); newSearchResultsFields.add(distributorResultsField); } if (replicationForResults) { StudyField replicationResultsField = studyFieldService .findByName(StudyFieldConstant.publicationReplicationData); newSearchResultsFields.add(replicationResultsField); } if (relatedPublicationsResults) { StudyField relatedpubResultsField = studyFieldService.findByName(StudyFieldConstant.publication); newSearchResultsFields.add(relatedpubResultsField); } if (relatedMaterialResults) { StudyField relatedmatResultsField = studyFieldService.findByName(StudyFieldConstant.relatedMaterial); newSearchResultsFields.add(relatedmatResultsField); } if (relatedStudiesResults) { StudyField relatedstudiesResultsField = studyFieldService.findByName(StudyFieldConstant.relatedStudies); newSearchResultsFields.add(relatedstudiesResultsField); } if (!newSearchResultsFields.isEmpty()) { vdc.setSearchResultFields(newSearchResultsFields); } vdc.setDefaultSortOrder(defaultSortOrder); vdcService.edit(vdc); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated customization settings."); return retString; } public String cancelCustomization() { return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix(); } private ArrayList alphaCharacterList; private void initAlphabeticFilter() { if (alphaCharacterList == null) { alphaCharacterList = new ArrayList(); alphaCharacterList.add(String.valueOf('#')); for (char ch = 'A'; ch <= 'Z'; ch++) { alphaCharacterList.add(String.valueOf(ch)); } } } public ArrayList getAlphaCharacterList() { return this.alphaCharacterList; } public void setAlphaCharacterList(ArrayList list) { this.alphaCharacterList = list; } private VDCUIList vdcUIList; public VDCUIList getVdcUIList() { return this.vdcUIList; } private Long vdcUIListSize; public Long getVdcUIListSize() { return vdcUIListSize; } private Long vdcUnreleased; public Long getVdcUnreleased() { return vdcUnreleased; } private boolean hideRestricted = false; private HtmlInputHidden hiddenAlphaCharacter = new HtmlInputHidden(); public HtmlInputHidden getHiddenAlphaCharacter() { return hiddenAlphaCharacter; } public void setHiddenAlphaCharacter(HtmlInputHidden hiddenAlphaCharacter) { this.hiddenAlphaCharacter = hiddenAlphaCharacter; } private Long groupId = new Long("-1"); public void changeAlphaCharacter(ValueChangeEvent event) { String newValue = (String) event.getNewValue(); String oldValue = (String) event.getOldValue(); if (!newValue.isEmpty()) { if (newValue.equals("All")) { populateVDCUIList(false); } else { this.vdcUIList.getPaginator().gotoFirstPage(); hiddenAlphaCharacter.setValue(newValue); populateVDCUIList(true); } } } private void populateVDCUIList(boolean isAlphaSort) { // new logic for alpha sort if (!isAlphaSort) { if (vdcUIList == null || (vdcUIList.getAlphaCharacter() != null && ("All".equals((String) hiddenAlphaCharacter.getValue())))) { vdcUIList = new VDCUIList(groupId, hideRestricted); vdcUIList.setAlphaCharacter(new String("")); vdcUIList.setSortColumnName(vdcUIList.getDateCreatedColumnName()); } } else { if (!((String) hiddenAlphaCharacter.getValue()).equals(vdcUIList.getAlphaCharacter())) { vdcUIList = new VDCUIList(groupId, (String) hiddenAlphaCharacter.getValue(), hideRestricted); vdcUIList.setAlphaCharacter((String) hiddenAlphaCharacter.getValue()); vdcUIList.setOldSort(new String("")); vdcUIList.setSortColumnName(vdcUIList.getNameColumnName()); } } vdcUIList.getVdcUIList(); vdcUnreleased = new Long(0); vdcUIListSize = new Long(String.valueOf(vdcUIList.getVdcUIList().size())); vdcUnreleased = vdcService.getVdcCount(vdcUIList.getVdcIds(), Boolean.TRUE); } public DataPaginator getPaginator() { if (this.vdcUIList != null) { return this.vdcUIList.getPaginator(); } return null; } public void setPaginator(DataPaginator paginator) { if (this.vdcUIList != null) { this.vdcUIList.setPaginator(paginator); } } //Add Acount Page private VDCUser user; public VDCUser getUser() { return this.user; } public void setUser(VDCUser user) { this.user = user; } private Long studyId; public Long getStudyId() { return this.studyId; } public void setStudyId(Long studyId) { this.studyId = studyId; } private Study study; public Study getStudy() { return this.study; } public void setStudy(Study study) { this.study = study; } HtmlInputSecret inputPassword; public HtmlInputSecret getInputPassword() { return inputPassword; } public void setInputPassword(HtmlInputSecret inputPassword) { this.inputPassword = inputPassword; } public EditUserService getEditUserService() { return editUserService; } public String createAccount() { String workflowValue = null; user.setActive(true); editUserService.save(); if (StringUtil.isEmpty(workflowValue)) { getVDCRenderBean().getFlash().put("successMessage", "User account created successfully."); } LoginWorkflowBean loginWorkflowBean = (LoginWorkflowBean) this.getBean("LoginWorkflowBean"); return loginWorkflowBean.processAddAccount(user); } public String cancelAddAccount() { editUserService.cancel(); // if user is logged in return to the appropriate options page // if not logged in, to the appropriate home page if (getVDCSessionBean().getLoginBean() != null) { if (getVDCRequestBean().getCurrentVDC() != null) { return "/admin/OptionsPage?faces-redirect=true" + getContextSuffix(); } else { return "/networkAdmin/NetworkOptionsPage.xhtml?faces-redirect=true"; } } else { return getVDCRequestBean().home(); } } public void validatePassword(FacesContext context, UIComponent toValidate, Object value) { String retypedPassword = (String) value; String errorMessage = null; if (!inputPassword.getLocalValue().equals(retypedPassword)) { errorMessage = "Passwords do not match."; } if (errorMessage != null) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage(errorMessage); context.addMessage(toValidate.getClientId(context), message); } } //manage controlled vocab private List<ControlledVocabulary> controlledVocabularyList; public List<ControlledVocabulary> getControlledVocabularyList() { return controlledVocabularyList; } public void setControlledVocabularyList(List<ControlledVocabulary> controlledVocabularyList) { this.controlledVocabularyList = controlledVocabularyList; } //manage classifications private int itemBeansSize = 0; public int getItemBeansSize() { return itemBeansSize; } private HtmlGraphicImage toggleImage = new HtmlGraphicImage(); public HtmlGraphicImage getToggleImage() { return toggleImage; } public void setToggleImage(HtmlGraphicImage toggleImage) { this.toggleImage = toggleImage; } protected void initClassifications() { if (list == null) { list = new ClassificationList(); } list.getClassificationUIs(new Long("-1")); } ClassificationList list = null; public ClassificationList getList() { return list; } public void toggleChildren(javax.faces.event.ActionEvent event) { Long parentNodeId = new Long(toggleImage.getAttributes().get("groupingId").toString()); list.getClassificationUIs(parentNodeId); } //Comment review page protected List<StudyCommentUI> commentsForReview = null; protected Long totalNotifications; public Long getTotalNotifications() { return totalNotifications; } protected HtmlCommandLink deleteCommentLink; public HtmlCommandLink getDeleteCommentLink() { return deleteCommentLink; } public void setDeleteCommentLink(HtmlCommandLink deleteCommentLink) { this.deleteCommentLink = deleteCommentLink; } protected HtmlCommandLink ignoreCommentFlagLink; public HtmlCommandLink getIgnoreCommentFlagLink() { return ignoreCommentFlagLink; } public void setIgnoreCommentFlagLink(HtmlCommandLink ignoreCommentFlagLink) { this.ignoreCommentFlagLink = ignoreCommentFlagLink; } protected Long flaggedCommentId; public List<StudyCommentUI> getCommentsForReview() { if (commentsForReview == null) { commentsForReview = new ArrayList(); List<StudyComment> tempCommentsForReview = studyCommentService.getAbusiveStudyComments(); Iterator iterator = tempCommentsForReview.iterator(); while (iterator.hasNext()) { StudyComment studyComment = (StudyComment) iterator.next(); StudyCommentUI studyCommentUI = new StudyCommentUI(studyComment); commentsForReview.add(studyCommentUI); } totalNotifications = new Long(Integer.toString(commentsForReview.size())); } return commentsForReview; } public void deleteFlaggedComment(ActionEvent event) { if (deleteCommentLink.getAttributes().get("commentId") != null) { flaggedCommentId = new Long(deleteCommentLink.getAttributes().get("commentId").toString()); } String deletedMessage = "You reported as abusive a comment in the study titled, " + getFlaggedStudyTitle() + ". " + "\n" + "The comment was, \"" + getFlaggedStudyComment() + "\". " + "\n" + "This comment was deleted in accordance with the " + "study comments terms of use."; studyCommentService.deleteComment(flaggedCommentId, deletedMessage); getVDCRenderBean().getFlash().put("successMessage", "Successfully deleted the flagged comment."); //cleanup flaggedCommentId = new Long("0"); commentsForReview = null; } public void ignoreCommentFlag(ActionEvent event) { if (ignoreCommentFlagLink.getAttributes().get("commentId") != null) { flaggedCommentId = new Long(ignoreCommentFlagLink.getAttributes().get("commentId").toString()); } String okMessage = "You reported as abusive a comment in the study titled, " + getFlaggedStudyTitle() + ". " + "\n" + "The comment was, \"" + getFlaggedStudyComment() + "\". " + "\n" + "According to the terms of use of this study, the " + "reported comment is not an abuse. This comment will remain posted, and will " + "no longer appear to you as reported."; studyCommentService.okComment(flaggedCommentId, okMessage); getVDCRenderBean().getFlash().put("successMessage", "Successfully ignored the flagged comment."); //cleanup flaggedCommentId = new Long("0"); commentsForReview = null; } protected String getFlaggedStudyComment() { String comment = new String(""); Iterator iterator = commentsForReview.iterator(); while (iterator.hasNext()) { StudyCommentUI studycommentui = (StudyCommentUI) iterator.next(); if (studycommentui.getStudyComment().getId().equals(flaggedCommentId)) { comment = studycommentui.getStudyComment().getComment(); break; } } return comment; } protected String getFlaggedStudyTitle() { String title = new String(""); Iterator iterator = commentsForReview.iterator(); while (iterator.hasNext()) { StudyCommentUI studycommentui = (StudyCommentUI) iterator.next(); if (studycommentui.getStudyComment().getId().equals(flaggedCommentId)) { title = studycommentui.getStudyComment().getStudyVersion().getStudy().getReleasedVersion() .getMetadata().getTitle(); break; } } return title; } //harvest sites page private List<HarvestingDataverse> harvestSiteList; public List<HarvestingDataverse> getHarvestSiteList() { if (harvestSiteList == null) { harvestSiteList = harvestingDataverseService.findAll(); } return harvestSiteList; } //Edit Export Schedule page HtmlSelectOneMenu exportPeriod; private String exportSchedulePeriod; Integer exportDayOfWeek; Integer exportHourOfDay; private List<SelectItem> selectExportPeriod = new ArrayList(); public HtmlSelectOneMenu getExportPeriod() { return exportPeriod; } public void setExportPeriod(HtmlSelectOneMenu exportPeriod) { this.exportPeriod = exportPeriod; } public String getExportSchedulePeriod() { return exportSchedulePeriod; } public void setExportSchedulePeriod(String exportSchedulePeriod) { this.exportSchedulePeriod = exportSchedulePeriod; } public Integer getExportDayOfWeek() { return exportDayOfWeek; } public void setExportDayOfWeek(Integer exportDayOfWeek) { this.exportDayOfWeek = exportDayOfWeek; } public Integer getExportHourOfDay() { return exportHourOfDay; } public void setExportHourOfDay(Integer exportHourOfDay) { this.exportHourOfDay = exportHourOfDay; } public void setSelectExportPeriod(List<SelectItem> selectExportPeriod) { this.selectExportPeriod = selectExportPeriod; } public List<SelectItem> getSelectExportPeriod() { return selectExportPeriod; } private HtmlDataTable dataTable; public HtmlDataTable getDataTable() { return this.dataTable; } public void setDataTable(HtmlDataTable dataTable) { this.dataTable = dataTable; } private HtmlDataTable dataTableUserGroups; public HtmlDataTable getDataTableUserGroups() { return this.dataTableUserGroups; } public void setDataTableUserGroups(HtmlDataTable dataTable) { this.dataTableUserGroups = dataTable; } public List<SelectItem> loadSelectExportPeriod() { List selectItems = new ArrayList<SelectItem>(); if (this.getVDCRequestBean().getVdcNetwork().getExportPeriod() == null || this.getVDCRequestBean().getVdcNetwork().getExportPeriod().equals("")) { selectItems.add(new SelectItem("", "Not Selected")); } selectItems.add(new SelectItem("daily", "Export daily")); selectItems.add(new SelectItem("weekly", "Export weekly")); if ((this.getVDCRequestBean().getVdcNetwork().getExportPeriod() != null) && (!this.getVDCRequestBean().getVdcNetwork().getExportPeriod().equals(""))) { selectItems.add(new SelectItem("none", "Disable export")); } return selectItems; } public void validateExportHourOfDay(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (exportPeriod.getLocalValue() != null && (exportPeriod.getLocalValue().equals("daily") || exportPeriod.getLocalValue().equals("weekly"))) { if (value == null || ((Integer) value).equals(new Integer(-1))) { valid = false; } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } public void validateExportDayOfWeek(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (exportPeriod != null && exportPeriod.getLocalValue() != null && exportPeriod.getLocalValue().equals("weekly")) { if (value == null || ((Integer) value).equals(new Integer(-1))) { valid = false; } } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } public void validateExportPeriod(FacesContext context, UIComponent toValidate, Object value) { boolean valid = true; if (((String) value).equals("notSelected")) { exportPeriod.setValue("notSelected"); valid = false; } if (!valid) { ((UIInput) toValidate).setValid(false); FacesMessage message = new FacesMessage("This field is required."); context.addMessage(toValidate.getClientId(context), message); } } private void saveExportSchedule() { VDCNetwork vdcnetwork = getVDCRequestBean().getVdcNetwork(); vdcnetwork.setExportPeriod(exportSchedulePeriod); vdcnetwork.setExportHourOfDay(exportHourOfDay); if (exportDayOfWeek != null && exportDayOfWeek.intValue() == -1) { exportDayOfWeek = null; } vdcnetwork.setExportDayOfWeek(exportDayOfWeek); vdcNetworkService.edit(vdcnetwork); remoteTimerService.createExportTimer(vdcnetwork); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated export schedule."); } //OAI sets data List<OAISet> oaiSets; private HtmlDataTable oaiSetDataTable; public HtmlDataTable getOaiSetDataTable() { return this.oaiSetDataTable; } public void setOaiSetDataTable(HtmlDataTable dataTable) { this.oaiSetDataTable = dataTable; } public List<OAISet> getOaiSets() { return oaiSets; } private void initSetData() { oaiSets = oaiSetService.findAllOrderedSorted(); } public void deleteSet(ActionEvent ae) { OAISet oaiSet = (OAISet) oaiSetDataTable.getRowData(); oaiSetService.remove(oaiSet.getId()); initSetData(); // Re-fetch list to reflect Delete action getVDCRenderBean().getFlash().put("successMessage", "Successfully deleted OAI set."); } public String saveNetworkGeneralSettings_action() { String networkName = (String) editNetworkNamePage.getTextFieldNetworkName().getValue(); if (networkName.isEmpty()) { getVDCRenderBean().getFlash().put("warningMessage", "Network name is rerquired."); return "/networkAdmin/NetworkOptionsPage.xhtml?faces-redirect=true&tab=settings&tab2=general"; } VDCNetwork thisVdcNetwork = vdcNetworkService.find(new Long(0)); thisVdcNetwork.setContactEmail(this.getContactUsEmail()); thisVdcNetwork.setSystemEmail(this.getEditSystemEmail()); thisVdcNetwork.setName((String) editNetworkNamePage.getTextFieldNetworkName().getValue()); thisVdcNetwork.setDisplayAnnouncements(editNetworkAnnouncementsPage.isChkEnableNetworkAnnouncements()); thisVdcNetwork.setAnnouncements(editNetworkAnnouncementsPage.getNetworkAnnouncements()); vdcNetworkService.edit(thisVdcNetwork); getVDCRequestBean().setVdcNetwork(thisVdcNetwork); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated general network settings."); return "/networkAdmin/NetworkOptionsPage.xhtml?faces-redirect=true&tab=settings&tab2=general"; } //DV Requirements private boolean requireDvdescription; public boolean isRequireDvdescription() { return requireDvdescription; } public void setRequireDvdescription(boolean requireDvdescription) { this.requireDvdescription = requireDvdescription; } private boolean requireDvaffiliation; public boolean isRequireDvaffiliation() { return requireDvaffiliation; } public void setRequireDvaffiliation(boolean requireDvaffiliation) { this.requireDvaffiliation = requireDvaffiliation; } private boolean requireDvclassification; public boolean isRequireDvclassification() { return requireDvclassification; } public void setRequireDvclassification(boolean requireDvclassification) { this.requireDvclassification = requireDvclassification; } private boolean requireDvstudiesforrelease; public boolean isRequireDvstudiesforrelease() { return requireDvstudiesforrelease; } public void setRequireDvstudiesforrelease(boolean requireDvstudiesforrelease) { this.requireDvstudiesforrelease = requireDvstudiesforrelease; } public String saveNetworkAdvancedSettings_action() { VDCNetwork vdcnetwork = vdcNetworkService.findRootNetwork(); vdcnetwork.setRequireDVaffiliation(requireDvaffiliation); vdcnetwork.setRequireDVclassification(requireDvclassification); vdcnetwork.setRequireDVdescription(requireDvdescription); vdcnetwork.setRequireDVstudiesforrelease(requireDvstudiesforrelease); vdcNetworkService.edit(vdcnetwork); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated the network dataverse creation and release requirements. "); return "/networkAdmin/NetworkOptionsPage?faces-redirect=true&tab=settings&tab2=advanced"; } //Network Priviledged users page public EditNetworkPrivilegesService getPrivileges() { return privileges; } public void setPrivileges(EditNetworkPrivilegesService privileges) { this.privileges = privileges; } private String userName; public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } private String TOUuserName; public String getTOUUserName() { return this.TOUuserName; } public void setTOUUserName(String name) { this.TOUuserName = name; } /* private UIData userTable; public javax.faces.component.UIData getUserTable() { return userTable; } public void setUserTable(javax.faces.component.UIData userTable) { this.userTable = userTable; } */ private UIData TOUuserTable; public UIData getUserTOUTable() { return TOUuserTable; } public void setUserTOUTable(javax.faces.component.UIData tut) { this.TOUuserTable = tut; } public List getNetworkRoleSelectItems() { List selectItems = new ArrayList(); NetworkRole role = networkRoleService.findByName(NetworkRoleServiceLocal.CREATOR); selectItems.add(new SelectItem(role.getId(), "Dataverse Creator")); selectItems.add(new SelectItem(networkRoleService.findByName(NetworkRoleServiceLocal.ADMIN).getId(), "Network Admin")); return selectItems; } public void clearRole(ActionEvent ea) { NetworkPrivilegedUserBean user = (NetworkPrivilegedUserBean) userTable.getRowData(); user.setNetworkRoleId(null); } public void clearTOURole(ActionEvent ea) { VDCUser user = (VDCUser) TOUuserTable.getRowData(); user.setBypassTermsOfUse(false); } public void addNetworkUser(ActionEvent ae) { VDCUser user = null; if (userName.indexOf("'") != -1) { setUserNotFound(true); } else { user = userService.findByUserName(userName); if (user == null) { setUserNotFound(true); } else { this.privileges.addPrivilegedUser(user.getId()); } } } private boolean privilegedUserNotFound = false; public boolean isPrivilegedUserNotFound() { return privilegedUserNotFound; } public void setPrivilegedUserNotFound(boolean privilegedUserNotFound) { this.privilegedUserNotFound = privilegedUserNotFound; } public void searchForPrivilegedUsers(ActionEvent ae) { privilegedUserNotFound = false; List<NetworkPrivilegedUserBean> searchResult = privileges.getPrivilegedUsersByName(userName); if (searchResult.isEmpty()) { privilegedUserNotFound = true; return; } for (NetworkPrivilegedUserBean npub : searchResult) { boolean found = false; if (privilegedUsersSearchList != null) { for (NetworkPrivilegedUserBean test : privilegedUsersSearchList) { if (npub.getUser().equals(test.getUser())) { found = true; } } if (!found) { privilegedUsersSearchList.add(npub); privileges.getPrivilegedUsers().add(npub); } } else { privilegedUsersSearchList = new ArrayList(); privilegedUsersSearchList.add(npub); if (privileges.getPrivilegedUsers() == null) { privileges.setPrivilegedUsers(new ArrayList<NetworkPrivilegedUserBean>()); } privileges.getPrivilegedUsers().add(npub); } } } List<NetworkPrivilegedUserBean> privilegedUsersSearchList; public List<NetworkPrivilegedUserBean> getPrivilegedUsersSearchList() { return privilegedUsersSearchList; } public void setPrivilegedUsersSearchList(List<NetworkPrivilegedUserBean> privilegedUsersSearchList) { this.privilegedUsersSearchList = privilegedUsersSearchList; } public void addTOUUser(ActionEvent ae) { VDCUser user = null; // See comment in the addUser method! if (TOUuserName.indexOf("'") != -1) { setTOUUserNotFound(true); } else { user = userService.findByUserName(TOUuserName); if (user == null) { setTOUUserNotFound(true); } else { this.privileges.addTOUPrivilegedUser(user.getId()); } } } private boolean userNotFound; public boolean isUserNotFound() { return userNotFound; } public void setUserNotFound(boolean userNotFound) { this.userNotFound = userNotFound; } private boolean TOUuserNotFound; public boolean isTOUUserNotFound() { return TOUuserNotFound; } public void setTOUUserNotFound(boolean userNotFound) { this.TOUuserNotFound = userNotFound; } public boolean getDisplayPrivilegedUsers() { if (tab2.equals("users")) return false; return getPrivileges().getPrivilegedUsers().size() > 1; } public boolean getDisplayTOUPrivilegedUsers() { return getPrivileges().getTOUPrivilegedUsers().size() > 0; } public String saveNetworkPrivilegedUsersPage() { HttpServletRequest request = (HttpServletRequest) this.getExternalContext().getRequest(); String hostName = request.getLocalName(); int port = request.getLocalPort(); String portStr = ""; if (port != 80) { portStr = ":" + port; } // Needed to send an approval email to approved creators String creatorUrl = "http://" + hostName + portStr + request.getContextPath() + "/faces/site/AddSitePage.xhtml"; privileges.save(creatorUrl); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated network permissions."); tab2 = ""; return "/networkAdmin/NetworkOptionsPage.xhtml?faces-redirect=true&tab=permissions"; } //NetworkTerms of Use private boolean networkAccountTermsOfUseEnabled; private String networkAccountTermsOfUse; public boolean isNetworkAccountTermsOfUseEnabled() { return networkAccountTermsOfUseEnabled; } public void setNetworkAccountTermsOfUseEnabled(boolean termsOfUseEnabled) { this.networkAccountTermsOfUseEnabled = termsOfUseEnabled; } public String getNetworkAccountTermsOfUse() { return networkAccountTermsOfUse; } public void setNetworkAccountTermsOfUse(String termsOfUse) { this.networkAccountTermsOfUse = termsOfUse; } private boolean networkDepositTermsOfUseEnabled; private String networkDepositTermsOfUse; public boolean isNetworkDepositTermsOfUseEnabled() { return networkDepositTermsOfUseEnabled; } public void setNetworkDepositTermsOfUseEnabled(boolean termsOfUseEnabled) { this.networkDepositTermsOfUseEnabled = termsOfUseEnabled; } public String getNetworkDepositTermsOfUse() { return networkDepositTermsOfUse; } public void setNetworkDepositTermsOfUse(String termsOfUse) { this.networkDepositTermsOfUse = termsOfUse; } private boolean networkDownloadTermsOfUseEnabled; private String networkDownloadTermsOfUse; public boolean isNetworkDownloadTermsOfUseEnabled() { return networkDownloadTermsOfUseEnabled; } public void setNetworkDownloadTermsOfUseEnabled(boolean termsOfUseEnabled) { this.networkDownloadTermsOfUseEnabled = termsOfUseEnabled; } public String getnetworkDownloadTermsOfUse() { return networkDownloadTermsOfUse; } public void setnetworkDownloadTermsOfUse(String termsOfUse) { this.networkDownloadTermsOfUse = termsOfUse; } public String save_NetworkTermsOfUseAction() { if (validateAccountTerms()) { // action code here VDCNetwork vdcNetwork = vdcNetworkService.find(); vdcNetwork.setTermsOfUse(networkAccountTermsOfUse); vdcNetwork.setTermsOfUseEnabled(networkAccountTermsOfUseEnabled); vdcNetwork.setDepositTermsOfUse(networkDepositTermsOfUse); vdcNetwork.setDepositTermsOfUseEnabled(networkDepositTermsOfUseEnabled); vdcNetwork.setDownloadTermsOfUse(networkDownloadTermsOfUse); vdcNetwork.setDownloadTermsOfUseEnabled(networkDownloadTermsOfUseEnabled); vdcNetwork.setTermsOfUseUpdated(new Date()); vdcNetworkService.edit(vdcNetwork); userService.clearAgreedTermsOfUse(); getVDCRenderBean().getFlash().put("successMessage", "Successfully updated network terms of use."); return "/networkAdmin/NetworkOptionsPage.xhtml?faces-redirect=true&tab=permissions&tab2=tou"; } else { getVDCRenderBean().getFlash().put("warningMessage", "To enable this terms of use, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); return null; } } private boolean validateAccountTerms() { String elementValue = networkAccountTermsOfUse; boolean isUseTerms = true; if ((elementValue == null || elementValue.equals("")) && (networkAccountTermsOfUseEnabled)) { isUseTerms = false; FacesMessage message = new FacesMessage( "To enable this feature, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); FacesContext.getCurrentInstance().addMessage("form1:textArea1", message); } elementValue = networkDepositTermsOfUse; if ((elementValue == null || elementValue.equals("")) && (networkDepositTermsOfUseEnabled)) { isUseTerms = false; FacesMessage message = new FacesMessage( "To enable this feature, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); FacesContext.getCurrentInstance().addMessage("form1:textArea1", message); } elementValue = networkDownloadTermsOfUse; if ((elementValue == null || elementValue.equals("")) && (networkDownloadTermsOfUseEnabled)) { isUseTerms = false; FacesMessage message = new FacesMessage( "To enable this feature, you must also enter terms of use in the field below. Please enter terms of use as either plain text or html."); FacesContext.getCurrentInstance().addMessage("form1:textArea1", message); } return isUseTerms; } //Utilities page private File uploadedDdiFile = null; // <editor-fold defaultstate="collapsed" desc="studyLock utilities"> String studyLockStudyId; public String getStudyLockStudyId() { return studyLockStudyId; } public void setStudyLockStudyId(String studyLockStudyId) { this.studyLockStudyId = studyLockStudyId; } public List getStudyLockList() { return studyService.getStudyLocks(); } public String removeLock_action() { try { studyService.removeStudyLock(new Long(studyLockStudyId)); addMessage("studyLockMessage", "Study lock removed (for study id = " + studyLockStudyId + ")"); } catch (NumberFormatException nfe) { addMessage("studyLockMessage", "Action failed: The study id must be of type Long."); } catch (Exception e) { e.printStackTrace(); addMessage("studyLockMessage", "Action failed: An unknown error occurred trying to remove lock for study id = " + studyLockStudyId); } return null; } // </editor-fold> String indexDVId; String indexStudyIds; String reRegisterStudyIds; private String fixGlobalId; private String studyIdRange; private String handleCheckReport; public String getIndexDVId() { return indexDVId; } public void setIndexDVId(String indexDVId) { this.indexDVId = indexDVId; } public String getIndexStudyIds() { return indexStudyIds; } public void setIndexStudyIds(String indexStudyIds) { this.indexStudyIds = indexStudyIds; } public String getReRegisterStudyIds() { return reRegisterStudyIds; } public void setReRegisterStudyIds(String reRegisterStudyIds) { this.reRegisterStudyIds = reRegisterStudyIds; } public String getFixGlobalId() { return fixGlobalId; } public void setFixGlobalId(String gid) { fixGlobalId = gid; } public String getStudyIdRange() { return studyIdRange; } public void setStudyIdRange(String sir) { studyIdRange = sir; } public String getHandleCheckReport() { return handleCheckReport; } public void setHandleCheckReport(String hcr) { handleCheckReport = hcr; } private boolean deleteLockDisabled; public String getIndexLocks() { String indexLocks = "There is no index lock at this time."; deleteLockDisabled = true; File lockFile = getLockFile(); if (lockFile != null) { indexLocks = "There has been a lock on the index since " + (new Date(lockFile.lastModified())).toString() + "."; deleteLockDisabled = false; } return indexLocks; } private File getLockFileFromDir(File lockFileDir) { File lockFile = null; if (lockFileDir.exists()) { File[] locks = lockFileDir.listFiles(new IndexLockFileNameFilter()); if (locks.length > 0) { lockFile = locks[0]; } } return lockFile; } private File getLockFile() { File lockFile = null; File lockFileDir = null; String lockDir = System.getProperty("org.apache.lucene.lockDir"); if (lockDir != null) { lockFileDir = new File(lockDir); lockFile = getLockFileFromDir(lockFileDir); } else { lockFileDir = new File(Indexer.getInstance().getIndexDir()); lockFile = getLockFileFromDir(lockFileDir); } return lockFile; } public String indexAll_action() { try { File indexDir = new File(Indexer.getInstance().getIndexDir()); if (!indexDir.exists() || indexDir.list().length == 0) { indexService.indexAll(); addMessage("indexMessage", "Reindexing completed."); } else { addMessage("indexMessage", "Reindexing failed: The index directory must be empty before 'index all' can be run."); } } catch (Exception e) { e.printStackTrace(); if (e.getMessage() != null) { addMessage("indexMessage", "Reindexing failed: " + e.getMessage()); } else { addMessage("indexMessage", "Reindexing failed: An unknown error occurred trying to reindex the DVN."); } } return null; } public String indexDV_action() { try { VDC vdc = vdcService.findById(new Long(indexDVId)); if (vdc != null) { List studyIDList = new ArrayList(); for (Study study : vdc.getOwnedStudies()) { studyIDList.add(study.getId()); } indexService.updateIndexList(studyIDList); addMessage("indexMessage", "Indexing completed (for dataverse id = " + indexDVId + ".)"); } else { addMessage("indexMessage", "Indexing failed: There is no dataverse with dvId = " + indexDVId + "."); } } catch (NumberFormatException nfe) { addMessage("indexMessage", "Indexing failed: The dataverse id must be of type Long."); } catch (Exception e) { e.printStackTrace(); addMessage("indexMessage", "Indexing failed: An unknown error occurred trying to index dataverse with id = " + indexDVId + "."); } return null; } public String indexStudies_action() { try { Map tokenizedLists = determineStudyIds(indexStudyIds); indexService.updateIndexList((List) tokenizedLists.get("idList")); addMessage("indexMessage", "Indexing request completed."); addStudyMessages("indexMessage", tokenizedLists); } catch (Exception e) { e.printStackTrace(); addMessage("indexMessage", "Indexing failed: An unknown error occurred trying to index the following: \"" + indexStudyIds + "\"."); } return null; } public String indexLocks_action() { File lockFile = getLockFile(); if (lockFile.exists()) { if (lockFile.delete()) { addMessage("indexMessage", "Index lock deleted."); } else { addMessage("indexMessage", "Index lock could not be deleted."); } } return null; } public String indexBatch_action() { try { indexService.indexBatch(); addMessage("indexMessage", "Indexing update completed."); } catch (Exception e) { e.printStackTrace(); addMessage("indexMessage", "Indexing failed: An unknown error occurred trying to update the index."); } return null; } public String indexCollectionStudies_action() { // Check if the lucene top-level directory exists: String dvnIndexLocation = System.getProperty("dvn.index.location"); boolean dvnIndexLocationExists = false; if (dvnIndexLocation != null) { File locationDirectory = new File(dvnIndexLocation); if (locationDirectory.exists() && locationDirectory.isDirectory()) { dvnIndexLocationExists = true; } } if (!dvnIndexLocationExists) { addMessage("indexMessage", "Cannot reindex: The index directory (" + dvnIndexLocation + ") does not exist."); return null; } /* // Check for an existing lock file: String lockFileName = dvnIndexLocation + "/collReindex.lock"; File collReindexLockFile = new File(lockFileName); if (collReindexLockFile.exists()) { String errorMessage = "Cannot reindex: collection reindexing already in progress;"; errorMessage += ("lock file " + lockFileName + ", created on " + (new Date(collReindexLockFile.lastModified())).toString() + "."); addMessage("indexMessage", errorMessage); return null; } // Create a lock file: try { collReindexLockFile.createNewFile(); } catch (IOException ex) { String errorMessage = "Error: could not create lock file ("; errorMessage += (lockFileName + ")"); addMessage("indexMessage", errorMessage); } */ try { indexService.updateStudiesInCollections(); addMessage("indexMessage", "Reindexing of collection-linked studies completed."); } catch (Exception e) { e.printStackTrace(); addMessage("indexMessage", "Reindexing failed: An error occurred trying to reindex the collection-linked studies. (" + e.getMessage() + ")"); } /* // delete the lock file: collReindexLockFile.delete(); * */ return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="export utilities"> String exportFormat; String exportDVId; String exportStudyIds; public String getExportFormat() { return exportFormat; } public void setExportFormat(String exportFormat) { this.exportFormat = exportFormat == null || exportFormat.equals("") ? null : exportFormat; } public String getExportDVId() { return exportDVId; } public void setExportDVId(String exportDVId) { this.exportDVId = exportDVId; } public String getExportStudyIds() { return exportStudyIds; } public void setExportStudyIds(String exportStudyIds) { this.exportStudyIds = exportStudyIds; } public String exportUpdated_action() { try { studyService.exportUpdatedStudies(); addMessage("exportMessage", "Export succeeded (for updated studies)."); } catch (Exception e) { addMessage("exportMessage", "Export failed: Exception occurred while exporting studies. See export log for details."); } return null; } public String updateHarvestStudies_action() { try { harvestStudyService.updateHarvestStudies(); addMessage("exportMessage", "Update Harvest Studies succeeded."); } catch (Exception e) { addMessage("exportMessage", "Export failed: An unknown exception occurred while updating harvest studies."); } return null; } public String exportAll_action() { try { List<Long> allStudyIds = studyService.getAllStudyIds(); studyService.exportStudies(allStudyIds, exportFormat); addMessage("exportMessage", "Export succeeded for all studies."); } catch (Exception e) { e.printStackTrace(); addMessage("exportMessage", "Export failed: An unknown error occurred trying to export all studies."); } return null; } public String exportDV_action() { try { VDC vdc = vdcService.findById(new Long(exportDVId)); if (vdc != null) { List studyIDList = new ArrayList(); for (Study study : vdc.getOwnedStudies()) { studyIDList.add(study.getId()); } studyService.exportStudies(studyIDList, exportFormat); addMessage("exportMessage", "Export succeeded (for dataverse id = " + exportDVId + ")"); } else { addMessage("exportMessage", "Export failed: There is no dataverse with dvId = " + exportDVId); } } catch (NumberFormatException nfe) { addMessage("exportMessage", "Export failed: The dataverse id must be of type Long."); } catch (Exception e) { e.printStackTrace(); addMessage("exportMessage", "Export failed: An unknown error occurred trying to export dataverse with id = " + exportDVId); } return null; } public String exportStudies_action() { try { Map tokenizedLists = determineStudyIds(exportStudyIds); studyService.exportStudies((List) tokenizedLists.get("idList"), exportFormat); addMessage("exportMessage", "Export request completed."); addStudyMessages("exportMessage", tokenizedLists); } catch (Exception e) { e.printStackTrace(); addMessage("exportMessage", "Export failed: An unknown error occurred trying to export the following: \"" + exportStudyIds + "\""); } return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="harvest utilities"> Long harvestDVId; String harvestIdentifier; public Long getHarvestDVId() { return harvestDVId; } public void setHarvestDVId(Long harvestDVId) { this.harvestDVId = harvestDVId; } public String getHarvestIdentifier() { return harvestIdentifier; } public void setHarvestIdentifier(String harvestIdentifier) { this.harvestIdentifier = harvestIdentifier; } private List<SelectItem> harvestDVSelectItems; public List<SelectItem> getHarvestDVs() { if (harvestDVSelectItems == null) { harvestDVSelectItems = createSelectItemList(harvestingDataverseService.findInfoAll()); } return harvestDVSelectItems; } public String harvestStudy_action() { String link = null; HarvestingDataverse hd = null; try { hd = harvestingDataverseService.find(harvestDVId); Long studyId = harvesterService.getRecord(hd, harvestIdentifier, hd.getHarvestFormatType().getMetadataPrefix()); if (studyId != null) { indexService.updateStudy(studyId); // create link String HttpServletRequest req = (HttpServletRequest) getExternalContext().getRequest(); link = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath() + "/dv/" + hd.getVdc().getAlias() + "/faces/study/StudyPage.xhtml?studyId=" + studyId; } addMessage("harvestMessage", "Harvest succeeded" + (link == null ? "." : ": " + link)); } catch (Exception e) { e.printStackTrace(); addMessage("harvestMessage", "Harvest failed: An unexpected error occurred trying to get this record."); addMessage("harvestMessage", "Exception message: " + e.getMessage()); addMessage("harvestMessage", "Harvest URL: " + hd.getServerUrl() + "?verb=GetRecord&identifier=" + harvestIdentifier + "&metadataPrefix=" + hd.getHarvestFormatType().getMetadataPrefix()); } return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="file utilities"> String fileExtension; String fileStudyIds; public String getFileExtension() { return fileExtension; } public void setFileExtension(String fileExtension) { this.fileExtension = fileExtension; } public String getFileStudyIds() { return fileStudyIds; } public void setFileStudyIds(String fileStudyIds) { this.fileStudyIds = fileStudyIds; } public String determineFileTypeForExtension_action() { try { List<FileMetadata> fileMetadatas = studyFileService.getStudyFilesByExtension(fileExtension); Map<String, Integer> fileTypeCounts = new HashMap<String, Integer>(); for (FileMetadata fmd : fileMetadatas) { StudyFile sf = fmd.getStudyFile(); String newFileType = FileUtil.determineFileType(fmd); sf.setFileType(newFileType); studyFileService.updateStudyFile(sf); Integer count = fileTypeCounts.get(newFileType); if (fileTypeCounts.containsKey(newFileType)) { fileTypeCounts.put(newFileType, fileTypeCounts.get(newFileType) + 1); } else { fileTypeCounts.put(newFileType, 1); } } addMessage("fileMessage", "Determine File Type request completed for extension ." + fileExtension); for (String key : fileTypeCounts.keySet()) { addMessage("fileMessage", fileTypeCounts.get(key) + (fileTypeCounts.get(key) == 1 ? " file" : " files") + " set to type: " + key); } } catch (Exception e) { e.printStackTrace(); addMessage("fileMessage", "Request failed: An unknown error occurred trying to process the following extension: \"" + fileExtension + "\""); } return null; } public String determineFileTypeForStudies_action() { try { Map tokenizedLists = determineStudyIds(fileStudyIds); for (Iterator<Long> iter = ((List<Long>) tokenizedLists.get("idList")).iterator(); iter.hasNext();) { Long studyId = iter.next(); Study study = studyService.getStudy(studyId); // determine the file type for the latest version of the study for (FileMetadata fmd : study.getLatestVersion().getFileMetadatas()) { fmd.getStudyFile().setFileType(FileUtil.determineFileType(fmd)); } studyService.updateStudy(study); } addMessage("fileMessage", "Determine File Type request completed."); addStudyMessages("fileMessage", tokenizedLists); } catch (Exception e) { e.printStackTrace(); addMessage("fileMessage", "Request failed: An unknown error occurred trying to process the following: \"" + fileStudyIds + "\""); } return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="import utilities"> private Long importDVId; private Long importFileFormat; private String importBatchDir; // file upload completed percent (Progress) private int fileProgress; // render manager for the application, uses session id for on demand // render group. private String sessionId; //L.A.private RenderManager renderManager; //L.A.private PersistentFacesState persistentFacesState; public static final Log mLog = LogFactory.getLog(UtilitiesPage.class); //L.A.private InputFile inputFile; public Long getImportDVId() { return importDVId; } public void setImportDVId(Long importDVId) { this.importDVId = importDVId; } public Long getImportFileFormat() { return importFileFormat; } public void setImportFileFormat(Long importFileFormat) { this.importFileFormat = importFileFormat; } public String getImportBatchDir() { return importBatchDir; } public void setImportBatchDir(String importBatchDir) { this.importBatchDir = importBatchDir; } public int getFileProgress() { return fileProgress; } public void setFileProgress(int p) { fileProgress = p; } //L.A.public InputFile getInputFile(){ //L.A. return inputFile; //L.A. } //L.A. public void setInputFile(InputFile in){ //L.A. inputFile = in; //L.A.} private List<SelectItem> importDVsSelectItems; public List<SelectItem> getImportDVs() { if (importDVsSelectItems == null) { importDVsSelectItems = createSelectItemList(vdcService.findInfoAllNonHarvesting()); } return importDVsSelectItems; } public List<SelectItem> getImportFileFormatTypes() { List<SelectItem> metadataFormatsSelect = new ArrayList<SelectItem>(); for (HarvestFormatType hft : harvesterService.findAllHarvestFormatTypes()) { metadataFormatsSelect.add(new SelectItem(hft.getId(), hft.getName())); } return metadataFormatsSelect; } public String importBatch_action() { FileHandler logFileHandler = null; Logger importLogger = null; if (importBatchDir == null || importBatchDir.equals("")) return null; try { int importFailureCount = 0; int fileFailureCount = 0; List<Long> studiesToIndex = new ArrayList<Long>(); //sessionId = ((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false)).getId(); sessionId = "batchimportsession"; File batchDir = new File(importBatchDir); if (batchDir.exists() && batchDir.isDirectory()) { // create Logger String logTimestamp = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(new Date()); String dvAlias = vdcService.find(importDVId).getAlias(); importLogger = Logger.getLogger( "edu.harvard.iq.dvn.core.web.networkAdmin.UtilitiesPage." + dvAlias + "_" + logTimestamp); String logFileName = FileUtil.getImportFileDir() + File.separator + "batch_" + dvAlias + "_" + logTimestamp + ".log"; logFileHandler = new FileHandler(logFileName); importLogger.addHandler(logFileHandler); importLogger .info("BEGIN BATCH IMPORT (dvId = " + importDVId + ") from directory: " + importBatchDir); for (int i = 0; i < batchDir.listFiles().length; i++) { File studyDir = batchDir.listFiles()[i]; if (studyDir.isDirectory()) { // one directory per study importLogger.info("Found study directory: " + studyDir.getName()); File xmlFile = null; Map<File, String> filesToUpload = new HashMap(); for (int j = 0; j < studyDir.listFiles().length; j++) { File file = studyDir.listFiles()[j]; if ("study.xml".equals(file.getName())) { xmlFile = file; } else { addFile(file, "", filesToUpload, importLogger); } } if (xmlFile != null) { try { importLogger.info("Found study.xml and " + filesToUpload.size() + " other " + (filesToUpload.size() == 1 ? "file." : "files.")); // TODO: we need to incorporate the add files step into the same transaction of the import!!! Study study = studyService.importStudy(xmlFile, importFileFormat, importDVId, getVDCSessionBean().getLoginBean().getUser().getId()); study.getLatestVersion().setVersionNote("Study imported via batch import."); importLogger.info("Import of study.xml succeeded: study id = " + study.getId()); studiesToIndex.add(study.getId()); if (!filesToUpload.isEmpty()) { List<StudyFileEditBean> fileBeans = new ArrayList(); for (File file : filesToUpload.keySet()) { StudyFileEditBean fileBean = new StudyFileEditBean(file, studyService.generateFileSystemNameSequence(), study); fileBean.getFileMetadata().setCategory(filesToUpload.get(file)); fileBeans.add(fileBean); } try { studyFileService.addFiles(study.getLatestVersion(), fileBeans, getVDCSessionBean().getLoginBean().getUser()); importLogger.info("File upload succeeded."); } catch (Exception e) { fileFailureCount++; importLogger.severe("File Upload failed (dir = " + studyDir.getName() + "): exception message = " + e.getMessage()); logException(e, importLogger); } } } catch (Exception e) { importFailureCount++; importLogger.severe("Import failed (dir = " + studyDir.getName() + "): exception message = " + e.getMessage()); logException(e, importLogger); } } else { // no ddi.xml found in studyDir importLogger.warning("No study.xml file was found in study directory. Skipping... "); } } else { importLogger.warning("Found non directory at top level. Skipping... (filename = " + studyDir.getName() + ")"); } } // generate status message String statusMessage = studiesToIndex.size() + (studiesToIndex.size() == 1 ? " study" : " studies") + " successfully imported"; statusMessage += (fileFailureCount == 0 ? "" : " (" + fileFailureCount + " of which failed file upload)"); statusMessage += (importFailureCount == 0 ? "." : "; " + importFailureCount + (importFailureCount == 1 ? " study" : " studies") + " failed import."); importLogger.info("COMPLETED BATCH IMPORT: " + statusMessage); // now index all studies importLogger.info("POST BATCH IMPORT, start calls to index."); indexService.updateIndexList(studiesToIndex); importLogger.info("POST BATCH IMPORT, calls to index finished."); addMessage("importMessage", "Batch Import request completed."); addMessage("importMessage", statusMessage); addMessage("importMessage", "For more detail see log file at: " + logFileName); } else { addMessage("importMessage", "Batch Import failed: " + importBatchDir + " does not exist or is not a directory."); } } catch (Exception e) { e.printStackTrace(); addMessage("importMessage", "Batch Import failed: An unexpected error occurred during processing."); addMessage("importMessage", "Exception message: " + e.getMessage()); } finally { if (logFileHandler != null) { logFileHandler.close(); importLogger.removeHandler(logFileHandler); } // importBatchDir = ""; } return null; } private void addFile(File file, String catName, Map<File, String> filesToUpload, Logger importLogger) throws Exception { if (file.getName() != null && file.getName().startsWith(".")) { // ignore hidden files (ie files that start with "." } else if (file.isDirectory()) { String tempCatName = StringUtil.isEmpty(catName) ? file.getName() : catName + " - " + file.getName(); for (int j = 0; j < file.listFiles().length; j++) { addFile(file.listFiles()[j], tempCatName, filesToUpload, importLogger); } } else { importLogger.info("Attempting to create temp file " + sessionId + "/" + file.getName()); File tempFile = FileUtil.createTempFile(sessionId, file.getName()); FileUtil.copyFile(file, tempFile); filesToUpload.put(tempFile, catName); } } /** * Return the reference to the * {@link com.icesoft.faces.webapp.xmlhttp.PersistentFacesState * PersistentFacesState} associated with this Renderable. * <p/> * The typical (and recommended usage) is to get and hold a reference to the * PersistentFacesState in the constructor of your managed bean and return * that reference from this method. * * @return the PersistentFacesState associated with this Renderable */ //L.A.public PersistentFacesState getState() { //L.A. return persistentFacesState; //L.A.} //L.A.public void setRenderManager(RenderManager renderManager) { //L.A. this.renderManager = renderManager; //L.A renderManager.getOnDemandRenderer(sessionId).add(this); //L.A.} /** * Callback method that is called if any exception occurs during an attempt * to render this Renderable. * <p/> * It is up to the application developer to implement appropriate policy * when a RenderingException occurs. Different policies might be * appropriate based on the severity of the exception. For example, if the * exception is fatal (the session has expired), no further attempts should * be made to render this Renderable and the application may want to remove * the Renderable from some or all of the * {@link com.icesoft.faces.async.render.GroupAsyncRenderer}s it * belongs to. If it is a transient exception (like a client's connection is * temporarily unavailable) then the application has the option of removing * the Renderable from GroupRenderers or leaving them and allowing another * render call to be attempted. * * @param renderingException The exception that occurred when attempting to * render this Renderable. */ /* Commenting out the entire method -- L.A. public void renderingException(RenderingException renderingException) { if (mLog.isTraceEnabled() && renderingException instanceof TransientRenderingException) { mLog.trace("InputFileController Transient Rendering excpetion:", renderingException); } else if (renderingException instanceof FatalRenderingException) { if (mLog.isTraceEnabled()) { mLog.trace("InputFileController Fatal rendering exception: ", renderingException); } renderManager.getOnDemandRenderer(sessionId).remove(this); renderManager.getOnDemandRenderer(sessionId).dispose(); } } L.A. */ /** * Dispose callback called due to a view closing or session * invalidation/timeout */ public void dispose() throws Exception { if (mLog.isTraceEnabled()) { mLog.trace("OutputProgressController dispose OnDemandRenderer for session: " + sessionId); } //L.A. renderManager.getOnDemandRenderer(sessionId).remove(this); //L.A. renderManager.getOnDemandRenderer(sessionId).dispose(); } /** * <p>This method is bound to the inputFile component and is executed * multiple times during the file upload process. Every call allows * the user to finds out what percentage of the file has been uploaded. * This progress information can then be used with a progressBar component * for user feedback on the file upload progress. </p> * * @param event holds a InputFile object in its source which can be probed * for the file upload percentage complete. */ public void fileUploadProgress(EventObject event) { //L.A.InputFile ifile = (InputFile) event.getSource(); //L.A.fileProgress = ifile.getFileInfo().getPercent(); getImportFileFormat(); getImportDVId(); // System.out.println("sessid "+ sessionId); //getImportFileFormat()getImportFileFormat() System.out.println("render "+ renderManager.getOnDemandRenderer(sessionId).toString()); //L.A.if (persistentFacesState !=null) { //L.A. renderManager.getOnDemandRenderer(sessionId).requestRender();} } public String importSingleFile_action() { //L.A.if(inputFile==null) return null; //L.A.File originalFile = inputFile.getFile(); //File originalFile = null; if (uploadedDdiFile != null) { try { Study study = studyService.importStudy(uploadedDdiFile, getImportFileFormat(), getImportDVId(), getVDCSessionBean().getLoginBean().getUser().getId()); indexService.updateStudy(study.getId()); // create result message HttpServletRequest req = (HttpServletRequest) getExternalContext().getRequest(); String studyURL = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath() + "/dv/" + study.getOwner().getAlias() + "/faces/study/StudyPage.xhtml?globalId=" + study.getGlobalId(); addMessage("importMessage", "Import succeeded."); addMessage("importMessage", "Study URL: " + studyURL); } catch (Exception e) { e.printStackTrace(); addMessage("harvestMessage", "Import failed: An unexpected error occurred trying to import this study."); addMessage("harvestMessage", "Exception message: " + e.getMessage()); } } return null; } public String uploadFile() { //L.A. inputFile =getInputFile(); String str = ""; /* Commenting out everything InputFile-related: -- L.A. if (inputFile.getStatus() != InputFile.SAVED){ str = "File " + inputFile.getFileInfo().getFileName()+ " has not been saved. \n"+ "Status: "+ inputFile.getStatus(); logger.info(str); addMessage("importMessage",str); if(inputFile.getStatus() != InputFile.INVALID) return null; } -- L.A. */ return null; } public void uploadFileListener(FileEntryEvent fileEvent) { File uploadedFile = null; FileEntry fe = (FileEntry) fileEvent.getComponent(); FileEntryResults results = fe.getResults(); File parent = null; StringBuilder m = null; for (FileEntryResults.FileInfo i : results.getFiles()) { //Note that the fileentry component has capabilities for //simultaneous uploads of multiple files. uploadedFile = i.getFile(); } uploadedDdiFile = uploadedFile; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="delete utilities"> String deleteStudyIds; public String getDeleteStudyIds() { return deleteStudyIds; } public void setDeleteStudyIds(String deleteStudyIds) { this.deleteStudyIds = deleteStudyIds; } public String deleteStudies_action() { try { Map tokenizedLists = determineStudyIds(deleteStudyIds); studyService.deleteStudyList((List) tokenizedLists.get("idList")); addMessage("deleteMessage", "Delete request completed."); addStudyMessages("deleteMessage", tokenizedLists); } catch (Exception e) { e.printStackTrace(); addMessage("deleteMessage", "Delete failed: An unknown error occurred trying to delete the following: \"" + deleteStudyIds + "\""); } return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="handle utilities"> public String handleRegisterAll_action() { try { gnrsService.registerAll(); addMessage("handleMessage", "Handle registration request completed."); } catch (Exception e) { e.printStackTrace(); addMessage("handleMessage", "Handle registration failed: An unknown error occurred trying to index the following: \"" + indexStudyIds + "\""); } return null; } public String handleFixAll_action() { try { gnrsService.fixAll(); addMessage("handleMessage", "Handle re-registration request completed."); } catch (Exception e) { e.printStackTrace(); addMessage("handleMessage", "Handle registration failed: An unknown error occurred trying to index the following: \"" + indexStudyIds + "\""); } return null; } public String handleFixSingle_action() { // TODO: also need a method to do this on a range of study IDs (?) String hdl = fixGlobalId; hdl = hdl.replaceFirst("^hdl:", ""); try { gnrsService.fixHandle(hdl); addMessage("handleMessage", "Re-registered handle " + hdl); } catch (Exception e) { e.printStackTrace(); addMessage("handleMessage", "Handle (re)registration failed for \"" + hdl + "\""); } return null; } public String reRegisterStudies_action() { String statusMessage = ""; Map tokenizedLists = determineStudyIds(reRegisterStudyIds); for (Iterator<Long> iter = ((List<Long>) tokenizedLists.get("idList")).iterator(); iter.hasNext();) { Long studyId = iter.next(); Study study = null; try { study = studyService.getStudy(studyId); } catch (Exception ex) { study = null; } if (study != null) { // determine the "protocol" of the global name (i.e., "hdl" or "doi"): String namingProtocol = study.getProtocol(); if (namingProtocol != null) { if (namingProtocol.equals("hdl")) { String studyHandle = study.getAuthority() + "/" + study.getStudyId(); try { gnrsService.fixHandle(studyHandle); } catch (Exception gnrsEx) { statusMessage = statusMessage + "registration failed for " + studyHandle + "; "; } } else if (namingProtocol.equals("doi")) { String studyDOI = "doi:" + study.getAuthority() + "/" + study.getStudyId(); if (study.isReleased()) { // Check if already registered: String createStatus = ""; HashMap regMetadata = doiEZIdServiceLocal.getIdentifierMetadata(study); if (regMetadata == null || !("reserved".equals(regMetadata.get("_status")) || "public".equals(regMetadata.get("_status")))) { // And register the identifier if not: doiEZIdServiceLocal.createIdentifier(study); } if (!createStatus.equals("Identifier not created")) { doiEZIdServiceLocal.publicizeIdentifier(study); // Note: publicizeIdentifier does not provide any diagnostics! statusMessage = statusMessage + "publicized " + studyId + " (" + studyDOI + "); "; } else { statusMessage = statusMessage + "failed to create doi for " + studyId + " (" + studyDOI + "); "; } } else if (study.isDraft() || study.isInReview()) { // This is an unreleased study; so we need to create // a DOI with the status "reserved" (as opposed to // "public"). // Check if already registered: String createStatus = ""; HashMap regMetadata = doiEZIdServiceLocal.getIdentifierMetadata(study); if (regMetadata == null || !("reserved".equals(regMetadata.get("_status")) || "public".equals(regMetadata.get("_status")))) { // And register the identifier if not: doiEZIdServiceLocal.createIdentifier(study); } if (!createStatus.equals("Identifier not created")) { statusMessage = statusMessage + "created doi for unreleased study " + studyId + " (" + studyDOI + "); "; } else { statusMessage = statusMessage + "failed to create doi for unreleased study " + studyId + " (" + studyDOI + "); "; } } } } } } addMessage("handleMessage", "Request completed; " + statusMessage); return null; } public String handleCheckRange_action() { handleCheckReport = null; if (studyIdRange == null || !(studyIdRange.matches("^[0-9][0-9]*$") || studyIdRange.matches("^[0-9][0-9]*\\-[0-9][0-9]*$"))) { addMessage("handleMessage", "Invalid study ID range!"); return null; } String checkOutput = ""; if (studyIdRange.indexOf('-') > 0) { // range: Long idStart = null; Long idEnd = null; try { String rangeStart = studyIdRange.substring(0, studyIdRange.indexOf('-')); String rangeEnd = studyIdRange.substring(studyIdRange.indexOf('-') + 1); idStart = new Long(rangeStart); idEnd = new Long(rangeEnd); } catch (Exception ex) { addMessage("handleMessage", "Invalid study ID range: " + studyIdRange); return null; } if (!(idStart.compareTo(idEnd) < 0)) { addMessage("handleMessage", "Invalid numeric range: " + studyIdRange); return null; } Long studyId = idStart; while (studyId.compareTo(idEnd) <= 0) { try { Study chkStudy = studyService.getStudy(studyId); String chkHandle = chkStudy.getAuthority() + "/" + chkStudy.getStudyId(); if (gnrsService.isHandleRegistered(chkHandle)) { checkOutput = checkOutput.concat(studyId + "\thdl:" + chkHandle + "\tok\n"); } else { checkOutput = checkOutput.concat(studyId + "\thdl:" + chkHandle + "\tNOT REGISTERED\n"); } } catch (Exception ex) { checkOutput = checkOutput.concat(studyId + "\t\tNO SUCH STUDY\n"); } studyId = studyId + 1; } //addMessage("handleMessage", checkOutput); handleCheckReport = checkOutput; } else { // single id: try { Long studyId = new Long(studyIdRange); Study chkStudy = studyService.getStudy(studyId); String chkHandle = chkStudy.getAuthority() + "/" + chkStudy.getStudyId(); if (gnrsService.isHandleRegistered(chkHandle)) { checkOutput = studyId + "\thdl:" + chkHandle + "\t\tok\n"; } else { checkOutput = studyId + "\thdl:" + chkHandle + "\t\tNOT REGISTERED\n"; } //addMessage("handleMessage", checkOutput); handleCheckReport = checkOutput; } catch (Exception ex) { addMessage("handleMessage", "No such study: id=" + studyIdRange); } } return null; } // </editor-fold> // <editor-fold defaultstate="collapsed" desc="study utilities"> String createStudyDraftIds; public String getCreateStudyDraftIds() { return createStudyDraftIds; } public void setCreateStudyDraftIds(String createStudyDraftIds) { this.createStudyDraftIds = createStudyDraftIds; } public String createStudyDrafts_action() { try { Map tokenizedLists = determineStudyIds(createStudyDraftIds); List ignoredList = new ArrayList(); for (Iterator it = ((List) tokenizedLists.get("idList")).iterator(); it.hasNext();) { Long studyId = (Long) it.next(); Study study = studyService.getStudy(studyId); Long currentVersionNumber = study.getLatestVersion().getVersionNumber(); StudyVersion editVersion = study.getEditVersion(); if (currentVersionNumber.equals(editVersion.getVersionNumber())) { // working copy already exists it.remove(); ignoredList.add(studyId); } else { // save new version studyService.saveStudyVersion(editVersion, getVDCSessionBean().getLoginBean().getUser().getId()); studyService.updateStudyVersion(editVersion); } } tokenizedLists.put("ignoredList", ignoredList); tokenizedLists.put("ignoredReason", "working verison already exists"); addMessage("studyMessage", "Create Study Draft request completed."); addStudyMessages("studyMessage", tokenizedLists); } catch (Exception e) { e.printStackTrace(); addMessage("studyMessage", "Create Drafts failed: An unknown error occurred trying to delete the following: \"" + deleteStudyIds + "\""); } return null; } // </editor-fold> // **************************** // Common methods // **************************** private void addMessage(String component, String message) { FacesMessage facesMsg = new FacesMessage(message); FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(component, facesMsg); } private void addStudyMessages(String component, Map tokenizedLists) { if (tokenizedLists.get("idList") != null && !((List) tokenizedLists.get("idList")).isEmpty()) { addMessage(component, "The following studies were successfully processed: " + tokenizedLists.get("idList") + "."); } if (tokenizedLists.get("ignoredList") != null && !((List) tokenizedLists.get("ignoredList")).isEmpty()) { addMessage(component, "The following studies were ignored (" + ((String) tokenizedLists.get("ignoredReason")) + "): " + tokenizedLists.get("ignoredList") + "."); } if (tokenizedLists.get("invalidStudyIdList") != null && !((List) tokenizedLists.get("invalidStudyIdList")).isEmpty()) { addMessage(component, "The following study ids were invalid: " + tokenizedLists.get("invalidStudyIdList") + "."); } if (tokenizedLists.get("failedTokenList") != null && !((List) tokenizedLists.get("failedTokenList")).isEmpty()) { addMessage(component, "The following tokens could not be interpreted: " + tokenizedLists.get("failedTokenList") + "."); } } private Map determineIds(String ids) { List<Long> idList = new ArrayList(); List<String> failedTokenList = new ArrayList(); StringTokenizer st = new StringTokenizer(ids, ",; \t\n\r\f"); while (st.hasMoreTokens()) { String token = st.nextToken(); try { idList.add(new Long(token)); } catch (NumberFormatException nfe) { if (token.indexOf("-") == -1) { failedTokenList.add(token); } else { try { Long startId = new Long(token.substring(0, token.indexOf("-"))); Long endId = new Long(token.substring(token.indexOf("-") + 1)); for (long i = startId.longValue(); i <= endId.longValue(); i++) { idList.add(new Long(i)); } } catch (NumberFormatException nfe2) { failedTokenList.add(token); } } } } Map returnMap = new HashMap(); returnMap.put("idList", idList); returnMap.put("failedTokenList", failedTokenList); return returnMap; } private Map determineStudyIds(String studyIds) { Map tokenizedLists = determineIds(studyIds); List invalidStudyIdList = new ArrayList(); for (Iterator<Long> iter = ((List<Long>) tokenizedLists.get("idList")).iterator(); iter.hasNext();) { Long id = iter.next(); try { studyService.getStudy(id); } catch (EJBException e) { if (e.getCause() instanceof IllegalArgumentException) { invalidStudyIdList.add(id); iter.remove(); } else { throw e; } } } tokenizedLists.put("invalidStudyIdList", invalidStudyIdList); return tokenizedLists; } // duplicate from harvester private void logException(Throwable e, Logger logger) { boolean cause = false; String fullMessage = ""; do { String message = e.getClass().getName() + " " + e.getMessage(); if (cause) { message = "\nCaused By Exception.................... " + e.getClass().getName() + " " + e.getMessage(); } StackTraceElement[] ste = e.getStackTrace(); message += "\nStackTrace: \n"; for (int m = 0; m < ste.length; m++) { message += ste[m].toString() + "\n"; } fullMessage += message; cause = true; } while ((e = e.getCause()) != null); logger.severe(fullMessage); } public boolean isDeleteLockDisabled() { return deleteLockDisabled; } public void setDeleteLockDisabled(boolean deleteLockDisabled) { this.deleteLockDisabled = deleteLockDisabled; } // user groups page List<UserGroupsInfoBean> groups; public List<UserGroupsInfoBean> getGroups() { return groups; } private void initGroupData() { groups = new ArrayList<UserGroupsInfoBean>(); List<UserGroup> userGroups = groupService.findAll(); for (Iterator it = userGroups.iterator(); it.hasNext();) { UserGroup elem = (UserGroup) it.next(); groups.add(new UserGroupsInfoBean(elem)); } } public void deleteGroup(ActionEvent ae) { UserGroupsInfoBean bean = (UserGroupsInfoBean) dataTableUserGroups.getRowData(); UserGroup userGroup = bean.getGroup(); groupService.remove(userGroup.getId()); initGroupData(); // Re-fetch list to reflect Delete action } public void initControlledVocabulary() { // Manage Controlled Vocab... controlledVocabularyList = templateService.getNetworkControlledVocabulary(); } public void initUserData() { //getPrivileges().getPrivilegedUsers().clear(); tab2 = "users"; userData = new ArrayList(); List users = userService.findAllIds(); Long defaultNetworkAdminId = vdcNetworkService.find().getDefaultNetworkAdmin().getId(); for (Iterator it = users.iterator(); it.hasNext();) { Long elem = (Long) it.next(); userData.add(new AllUsersDataBean(elem, defaultNetworkAdminId)); } userDataCount = new Long(userData.size()); } public void allUsersSearchAction() { tab2 = "users"; userData = new ArrayList(); List users = userService.findAllIdsSearch(allUsersSearchTerm); Long defaultNetworkAdminId = vdcNetworkService.find().getDefaultNetworkAdmin().getId(); for (Iterator it = users.iterator(); it.hasNext();) { Long elem = (Long) it.next(); userData.add(new AllUsersDataBean(elem, defaultNetworkAdminId)); } } public String updateAllUsersList() { String checkString = (String) getInputFilterTerm().getValue(); filterTerm = checkString; tab2 = "users"; userData = new ArrayList(); List users = userService.findAllIdsSearch(filterTerm); System.out.print("filterTerm " + filterTerm); Long defaultNetworkAdminId = vdcNetworkService.find().getDefaultNetworkAdmin().getId(); for (Iterator it = users.iterator(); it.hasNext();) { Long elem = (Long) it.next(); userData.add(new AllUsersDataBean(elem, defaultNetworkAdminId)); } userDataCount = new Long(userData.size()); return ""; } private HtmlInputText inputFilterTerm; public HtmlInputText getInputFilterTerm() { return this.inputFilterTerm; } public void setInputFilterTerm(HtmlInputText inputFilterTerm) { this.inputFilterTerm = inputFilterTerm; } private String filterTerm; public String getFilterTerm() { return filterTerm; } public void setFilterTerm(String filterTerm) { this.filterTerm = filterTerm; } private String allUsersSearchTerm; public String getAllUsersSearchTerm() { return allUsersSearchTerm; } public void setAllUsersSearchTerm(String allUsersSearchTerm) { this.allUsersSearchTerm = allUsersSearchTerm; } public Long getDefaultNetworkAdminId() { return vdcNetworkService.find().getDefaultNetworkAdmin().getId(); } private Long userDataCount; public Long getUserDataCount() { return userDataCount; } public void setUserDataCount(Long userDataCount) { this.userDataCount = userDataCount; } public void initPrivilegedUserData() { privileges.setNetwork(vdcNetworkService.find()); privileges.initTOUPrivilegedUsers(); sessionPut(getPrivileges().getClass().getName(), privileges); } private HtmlDataTable userDataTable; public HtmlDataTable getUserDataTable() { return this.userDataTable; } public void setUserDataTable(HtmlDataTable userDataTable) { this.userDataTable = userDataTable; } private List<edu.harvard.iq.dvn.core.web.networkAdmin.AllUsersDataBean> userData; public List<edu.harvard.iq.dvn.core.web.networkAdmin.AllUsersDataBean> getUserData() { return this.userData; } public void setUserData(List<edu.harvard.iq.dvn.core.web.networkAdmin.AllUsersDataBean> userData) { this.userData = userData; } public void activateUser(ActionEvent ae) { AllUsersDataBean bean = (AllUsersDataBean) userDataTable.getRowData(); VDCUser user = bean.getUser(); userService.setActiveStatus(bean.getUser().getId(), true); initUserData(); // Re-fetch list to reflect Delete action } public void deactivateUser(ActionEvent ae) { AllUsersDataBean bean = (AllUsersDataBean) userDataTable.getRowData(); userService.setActiveStatus(bean.getUser().getId(), false); initUserData(); // Re-fetch list to reflect Delete action } }