/* * 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 } }