Java tutorial
/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * https://github.com/CILEA/dspace-cris/wiki/License */ package org.dspace.app.webui.cris.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.dspace.app.cris.configuration.RelationPreferenceConfiguration; import org.dspace.app.cris.model.ACrisObject; import org.dspace.app.cris.model.RelationPreference; import org.dspace.app.cris.service.RelationPreferenceService; import org.dspace.app.webui.cris.dto.ManageRelationDTO; import org.dspace.app.webui.cris.util.RelationPreferenceUtil; import org.dspace.app.webui.util.UIUtil; import org.dspace.authorize.AuthorizeException; import org.dspace.authorize.AuthorizeManager; import org.dspace.content.Item; import org.dspace.core.Constants; import org.dspace.core.Context; import org.dspace.discovery.SearchService; import org.dspace.discovery.SolrServiceImpl; import org.dspace.utils.DSpace; import org.springframework.validation.BindException; import org.springframework.validation.Errors; import org.springframework.web.servlet.ModelAndView; /** * This SpringMVC controller allow owners of the CRIS Object to handles * relations with other object such publications, projects, etc. Relations can * be: - hide, unhide, - select, unselect * * @author Andrea Bollini * */ public class FormRelationManagementController extends BaseFormController { private DSpace dspace = new DSpace(); private RelationPreferenceService relationService = dspace.getServiceManager() .getServiceByName(RelationPreferenceService.class.getName(), RelationPreferenceService.class); private SearchService searcher = dspace.getServiceManager().getServiceByName(SearchService.class.getName(), SearchService.class); private RelationPreferenceUtil relationPreferenceUtil; public void setRelationPreferenceUtil(RelationPreferenceUtil relationPreferenceUtil) { this.relationPreferenceUtil = relationPreferenceUtil; } private ACrisObject getCRISObject(HttpServletRequest request) { String uuid = getUUID(request); ACrisObject cris = applicationService.getEntityByUUID(uuid); return cris; } private String getUUID(HttpServletRequest request) { String pathInfo = request.getPathInfo(); // example /uuid/XXXXXXXXX/relMgmt/publications String path = pathInfo.substring("/uuid/".length()); String[] splitted = path.split("/"); String uuid = splitted[0]; return uuid; } private String getRelationType(HttpServletRequest request) { String pathInfo = request.getPathInfo(); // example /uuid/XXXXXXXXX/relMgmt/publications String path = pathInfo.substring("/uuid/".length()); String[] splitted = path.split("/"); String type = splitted[2]; return type; } private int[] getIDsFromItemList(List<Item> items) { int[] result = new int[items.size()]; int idx = 0; for (Item i : items) { result[idx] = i.getID(); idx++; } return result; } @Override protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception { Context context = UIUtil.obtainContext(request); ACrisObject cris = getCRISObject(request); AuthorizeManager.authorizeActionBoolean(context, cris, Constants.ADMIN, false); String relationType = getRelationType(request); Map<String, Object> data = new HashMap<String, Object>(); String confName = relationService.getConfigurationName(cris, relationType); RelationPreferenceConfiguration conf = relationService.getConfigurationService() .getRelationPreferenceConfiguration(confName); if (conf == null) { throw new IllegalArgumentException("No ReleationPreferenceConfiguration has found for " + confName); } data.put("cris", cris); data.put("confName", confName); data.put("relationType", relationType); boolean admin = AuthorizeManager.isAdmin(context); data.put("isSelectEnabled", conf.isActionEnabled(RelationPreference.SELECTED, admin)); data.put("isHideEnabled", conf.isActionEnabled(RelationPreference.HIDED, admin)); data.put("isUnlinkEnabled", conf.isActionEnabled(RelationPreference.UNLINKED, admin)); data.put("selected", relationPreferenceUtil.getSelected(context, cris, relationType)); data.put("columns", conf.getColumnsVisualizationConfiguration()); return data; } protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception { ACrisObject cris = getCRISObject(request); if (!"submit_exit".equalsIgnoreCase(UIUtil.getSubmitButton(request, "exit"))) { Context context = UIUtil.obtainContext(request); ManageRelationDTO dto = (ManageRelationDTO) command; String relationType = getRelationType(request); boolean doneChange = false; doneChange = relationService.unlink(context, cris, relationType, dto.getToUnLink()) || doneChange; doneChange = relationService.active(context, cris, relationType, dto.getToActivate()) || doneChange; doneChange = relationService.hide(context, cris, relationType, dto.getToHide()) || doneChange; List<String> newSelectedItems = dto.getOrderedSelected(); doneChange = relationService.select(context, cris, relationType, newSelectedItems) || doneChange; if (doneChange) { // make sure to commit the SOLR change ((SolrServiceImpl) searcher).commit(); } } return new ModelAndView(getSuccessView() + cris.getUuid()); } }