/* * Licensed to Jasig under one or more contributor license * agreements. See the NOTICE file distributed with this work * for additional information regarding copyright ownership. * Jasig licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a * copy of the License at the following location: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.jasig.cas.services.web; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotNull; import org.jasig.cas.services.RegisteredService; import org.jasig.cas.services.ServicesManager; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; import org.springframework.web.servlet.view.RedirectView; /** * MultiActionController to handle the deletion of RegisteredServices as well as * displaying them on the Manage Services page. * * @author Scott Battaglia * @since 3.1 */ public final class ManageRegisteredServicesMultiActionController extends MultiActionController { /** View name for the Manage Services View. */ private static final String VIEW_NAME = "manageServiceView"; /** Instance of ServicesManager. */ @NotNull private final ServicesManager servicesManager; @NotNull private final String defaultServiceUrl; /** * Constructor that takes the required {@link ServicesManager}. * * @param servicesManager the Services Manager that manages the * RegisteredServices. * @param defaultServiceUrl the service management tool's url. */ public ManageRegisteredServicesMultiActionController( final ServicesManager servicesManager, final String defaultServiceUrl) { super(); this.servicesManager = servicesManager; this.defaultServiceUrl = defaultServiceUrl; } /** * Method to delete the RegisteredService by its ID. * @param request the HttpServletRequest * @param response the HttpServletResponse * @return the Model and View to go to after the service is deleted. */ public ModelAndView deleteRegisteredService( final HttpServletRequest request, final HttpServletResponse response) { final String id = request.getParameter("id"); final long idAsLong = Long.parseLong(id); final ModelAndView modelAndView = new ModelAndView(new RedirectView( "manage.html", true), "status", "deleted"); final RegisteredService r = this.servicesManager.delete(idAsLong); modelAndView.addObject("serviceName", r != null ? r.getName() : ""); return modelAndView; } /** * Method to show the RegisteredServices. * @param request the HttpServletRequest * @param response the HttpServletResponse * @return the Model and View to go to after the services are loaded. */ public ModelAndView manage(final HttpServletRequest request, final HttpServletResponse response) { final Map<String, Object> model = new HashMap<String, Object>(); final List<RegisteredService> services = new ArrayList<RegisteredService>(this.servicesManager.getAllServices()); model.put("services", services); model.put("pageTitle", VIEW_NAME); model.put("defaultServiceUrl", this.defaultServiceUrl); return new ModelAndView(VIEW_NAME, model); } /** * Updates the {@link RegisteredService#getEvaluationOrder()}. Expects an <code>id</code> parameter to indicate * the {@link RegisteredService#getId()} and the new <code>evaluationOrder</code> integer parameter from the request. * @param request The request object that is expected to contain the <code>id</code> and <code>evaluationOrder</code> * as parameters. * @param response The response object. * @returns {@link ModelAndView} object that redirects to a <code>jsonView</code>. The model will contain a * a parameter <code>error</code> whose value should describe the error occurred if the update is unsuccesful. * There will also be a <code>successful</code> boolean parameter that indicates whether or not the update * was successful. * @throws IllegalArgumentException If either of the <code>id</code> or <code>evaluationOrder</code> are invalid * or if the service cannot be located for that id by the active implementation of the {@link ServicesManager}. * @return a {@link ModelAndView} object back to the <code>jsonView</code> */ public ModelAndView updateRegisteredServiceEvaluationOrder(final HttpServletRequest request, final HttpServletResponse response) { long id = Long.parseLong(request.getParameter("id")); int evaluationOrder = Integer.parseInt(request.getParameter("evaluationOrder")); final RegisteredService svc = this.servicesManager.findServiceBy(id); if (svc == null) { throw new IllegalArgumentException("Service id " + id + " cannot be found."); } svc.setEvaluationOrder(evaluationOrder); this.servicesManager.save(svc); return new ModelAndView("jsonView"); } }