/* * DeleteDialogHandler.java * * This work is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, * or (at your option) any later version. * * This work is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * * Copyright (c) 2004 Per Cederberg. All rights reserved. */ package org.liquidsite.app.admin; import org.liquidsite.app.admin.view.AdminView; import org.liquidsite.core.content.Content; import org.liquidsite.core.content.ContentException; import org.liquidsite.core.content.ContentSecurityException; import org.liquidsite.core.content.Domain; import org.liquidsite.core.content.PersistentObject; import org.liquidsite.core.web.Request; /** * The delete request handler. This class handles the delete dialog * workflow for domain and content objects. * * @author Per Cederberg, <per at percederberg dot net> * @version 1.0 */ class DeleteDialogHandler extends AdminDialogHandler { /** * Creates a new delete request handler. */ public DeleteDialogHandler() { super("index.html", "delete.html", true); } /** * Displays a form for the specified workflow step. This method * will NOT be called when returning to the start page. * * @param request the request object * @param step the workflow step * * @throws ContentException if the database couldn't be accessed * properly * @throws ContentSecurityException if the user didn't have the * required permissions */ protected void displayStep(Request request, int step) throws ContentException, ContentSecurityException { PersistentObject ref = AdminUtils.getReference(request); AdminView.DIALOG.viewDelete(request, ref); } /** * Validates a form for the specified workflow step. If the form * validation fails in this step, the form page for the workflow * step will be displayed again with an 'error' attribute * containing the message in the validation exception. * * @param request the request object * @param step the workflow step */ protected void validateStep(Request request, int step) { // Nothing to do here } /** * Handles a validated form for the specified workflow step. This * method returns the next workflow step, i.e. the step used when * calling the display method. If the special zero (0) workflow * step is returned, the workflow is assumed to have terminated. * Note that this method also allows additional validation to * occur. By returning the incoming workflow step number and * setting the appropriate request attributes the same results as * in the normal validate method can be achieved. For recoverable * errors, this is the recommended course of action. * * @param request the request object * @param step the workflow step * * @return the next workflow step, or * zero (0) if the workflow has finished * * @throws ContentException if the database couldn't be accessed * properly * @throws ContentSecurityException if the user didn't have the * required permissions */ protected int handleStep(Request request, int step) throws ContentException, ContentSecurityException { Object ref = AdminUtils.getReference(request); Domain domain; Content content; if (ref instanceof Domain) { domain = (Domain) ref; if (domain.equals(request.getEnvironment().getDomain())) { throw new ContentSecurityException( "cannot remove the domain containing the site " + "currently being used"); } domain.delete(request.getUser()); } else if (ref instanceof Content) { content = (Content) ref; if (content.equals(request.getEnvironment().getSite())) { throw new ContentSecurityException( "cannot remove the site currently being used"); } content.delete(request.getUser()); } unfocus(request, ref); return 0; } /** * Unfocuses the specified object. This will modify the site or * content tree focuses, if they were pointing to the specified * object. * * @param request the request object * @param ref the object to unfocus * * @throws ContentException if the database couldn't be accessed * properly */ private void unfocus(Request request, Object ref) throws ContentException { Object focus; focus = AdminView.SITE.getSiteTreeFocus(request); if (focus != null && focus.equals(ref)) { if (ref instanceof Domain) { focus = null; } else { focus = ((Content) ref).getParent(); if (focus == null) { focus = ((Content) ref).getDomain(); } } AdminView.SITE.setSiteTreeFocus(request, focus); } focus = AdminView.CONTENT.getContentTreeFocus(request); if (focus != null && focus.equals(ref)) { if (ref instanceof Domain) { focus = null; } else { focus = ((Content) ref).getParent(); if (focus == null) { focus = ((Content) ref).getDomain(); } } AdminView.CONTENT.setContentTreeFocus(request, focus); } } }