| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF 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 |
| * |
| * 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.apache.lenya.cms.site.usecases; |
| |
| import org.apache.lenya.cms.publication.Area; |
| import org.apache.lenya.cms.publication.Document; |
| import org.apache.lenya.cms.publication.DocumentLocator; |
| import org.apache.lenya.cms.publication.Publication; |
| import org.apache.lenya.cms.site.SiteUtil; |
| import org.apache.lenya.cms.workflow.WorkflowUtil; |
| import org.apache.lenya.workflow.Workflowable; |
| |
| /** |
| * Restore usecase handler. |
| * |
| * @version $Id:$ |
| */ |
| public class Restore extends MoveSubsite { |
| |
| /** |
| * @see org.apache.lenya.cms.site.usecases.MoveSubsite#getSourceAreas() |
| */ |
| protected String[] getSourceAreas() { |
| return new String[] { Publication.TRASH_AREA, Publication.ARCHIVE_AREA }; |
| } |
| |
| /** |
| * @see org.apache.lenya.cms.site.usecases.MoveSubsite#getTargetArea() |
| */ |
| protected String getTargetArea() { |
| return Publication.AUTHORING_AREA; |
| } |
| |
| /** |
| * @see org.apache.lenya.cms.site.usecases.MoveSubsite#getEvent() |
| */ |
| protected String getEvent() { |
| return "restore"; |
| } |
| |
| protected void doCheckPreconditions() throws Exception { |
| super.doCheckPreconditions(); |
| |
| String targetAreaName = getTargetArea(); |
| Document doc = getSourceDocument(); |
| if (doc == null) { |
| return; |
| } |
| // Check to see if parent node exists in target to prevent ghost nodes |
| Area targetArea = doc.getPublication().getArea(targetAreaName); |
| DocumentLocator targetLoc = doc.getLocator().getAreaVersion(targetAreaName); |
| targetLoc = SiteUtil.getAvailableLocator(getSession(), targetLoc); |
| String targetPath = targetLoc.getPath(); |
| targetPath = targetPath.substring(0, targetPath.lastIndexOf('/')); |
| if (!targetArea.getSite().contains(targetPath)) { |
| addErrorMessage("The authoring path [" + targetPath + "] does not exist."); |
| } |
| } |
| |
| protected void doCheckPostconditions() throws Exception { |
| super.doCheckPostconditions(); |
| |
| Document doc = getTargetDocument(true); |
| Workflowable workflowable = WorkflowUtil.getWorkflowable(doc); |
| String state = workflowable.getLatestVersion().getState(); |
| if (!state.equals("authoring")) { |
| addErrorMessage("The state is [" + state + "] instead of [authoring]!"); |
| } |
| |
| } |
| |
| } |