/*
 * ====================================================================== Parts
 * Copyright 2006 University of Leeds, Oxford University, University of the
 * Highlands and Islands. Licensed 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
 * 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.bodington.spring.easyedit;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.bodington.server.BuildingSessionManagerImpl;
import org.bodington.server.EasyEditorSession;
import org.bodington.server.resources.Resource;
import org.bodington.server.resources.ResourceCreator;
import org.bodington.server.resources.ResourceHierarchyImpl;
import org.bodington.servlet.FacilityList;
import org.bodington.spring.Utils;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

public class CreateController extends SimpleFormController
{
    public CreateController() {
        setCommandClass(CreateCommand.class);
    }
    
    protected ModelAndView onSubmit(
        HttpServletRequest request, HttpServletResponse response, Object command,   BindException errors)
    throws Exception {
        
        CreateCommand createCommand = (CreateCommand)command;
        
        Resource resource = Utils.getResource(request);
        if (resource.findChild(createCommand.getUrl()) != null) {
            errors.rejectValue("url", "url.exists", "This url already exists.");
            return showForm(request, response, errors);
        } else {
        
            ResourceCreator rc = FacilityList.getFacilities().get("easyedit");
            // Create new resource
            Resource newResource = rc.newResource();
            //  Populate values
            newResource.setName(createCommand.getUrl());
            newResource.setTitle(createCommand.getTitle());
            newResource.setIntroduction("");
            newResource.setDescription("");
            // Add to tree
            new ResourceHierarchyImpl().addResource(resource, newResource);
        
            EasyEditorSession session = (EasyEditorSession)BuildingSessionManagerImpl.getSession(newResource);
            session.update(createCommand.getText());
            Utils.saveMessage(request, getMessageSourceAccessor().getMessage(
                "easyedit.created"));
            return onSubmit(command, errors);
        }
        
    }
    
    protected void onBind(HttpServletRequest request, Object command) throws Exception {
        CreateCommand createCommand = (CreateCommand)command;
        if (createCommand.getUrl() != null) {
            createCommand.setUrl(createCommand.getUrl().toLowerCase());
        }
    }

}
