1 4 package com.openedit.modules.revisions; 5 6 import java.util.Iterator ; 7 import java.util.List ; 8 9 import org.apache.commons.logging.Log; 10 import org.apache.commons.logging.LogFactory; 11 import org.openedit.repository.ContentItem; 12 import org.openedit.repository.RepositoryException; 13 14 import com.openedit.OpenEditException; 15 import com.openedit.WebPageRequest; 16 import com.openedit.modules.edit.BaseEditorModule; 17 import com.openedit.page.Page; 18 import com.openedit.users.User; 19 20 26 public class RevisionEditorModule extends BaseEditorModule 27 { 28 private static Log log = LogFactory.getLog( RevisionEditorModule.class ); 29 30 36 public RevisionSession getRevisions( WebPageRequest inContext ) throws OpenEditException 37 { 38 String path = inContext.getRequestParameter( "editPath" ); 39 if ( path == null) 40 { 41 return null; 42 } 43 RevisionSession session = (RevisionSession)inContext.getPageValue("revisions"); 44 if ( session == null || !session.getEditPath().equals(path)) 45 { 46 Page editPage = getPageManager().getPage(path); 47 session = new RevisionSession(); 48 session.setEditPage(editPage); 49 session.setOriginalUrl(inContext.getRequestParameter("origURL")); 50 session.setParentName(inContext.getRequestParameter("parentName")); 51 } 52 List revisions = getPageManager().getRepository().getVersions( path ); 53 session.setRevisions(revisions); 54 inContext.putSessionValue( "revisions", session ); 55 return session; 56 } 57 58 public ContentItem getLatestRevision(WebPageRequest inReq) throws RepositoryException 59 { 60 String path = inReq.getRequestParameter( "editPath" ); 61 if ( path == null) 62 { 63 return null; 64 } 65 ContentItem revision = getPageManager().getLatestVersion( path ); 66 if (revision != null ) 67 { 68 inReq.putPageValue("latest", revision); 69 70 String author = revision.getAuthor(); 71 User user = getUserManager().getUser(author); 72 if (user != null) 73 { 74 inReq.putPageValue("latestemail", user.getEmail()); 75 } 76 return revision; 77 } 78 return null; 79 } 80 81 94 public void getRevisionContent( WebPageRequest inContext ) 95 throws OpenEditException 96 { 97 RevisionSession session = getRevisions(inContext); 98 String version = inContext.getRequiredParameter( "version" ); 99 100 for ( Iterator iter = session.getRevisions().iterator(); iter.hasNext(); ) 101 { 102 ContentItem revision = (ContentItem) iter.next(); 103 if ( revision.getVersion().equals( version ) ) 104 { 105 Page oldpage = getPageManager().getPage( revision.getActualPath() ); 106 inContext.putPageValue("oldPage", oldpage); 107 if ( !session.getEditPage().isBinary() ) 108 { 109 session.setRevisionContent( oldpage.getContent() ); } 111 session.setOldPage(oldpage); 112 session.setSelectedRevision(revision); 113 break; 114 } 115 } 116 } 117 118 125 public void writeRevisionContent( WebPageRequest inContext ) 126 throws OpenEditException 127 { 128 136 if ( inContext.getUser() == null) 137 { 138 throw new OpenEditException("No permissions available"); 139 } 140 RevisionSession session = getRevisions(inContext); 141 ContentItem revision = session.getSelectedRevision(); 142 143 String message = "Version " + revision.getVersion() + " restored."; 144 String content = session.getRevisionContent(); 145 if ( content != null ) 146 { 147 inContext.setRequestParameter( "message", message ); 148 inContext.setRequestParameter( "content", content ); 149 inContext.setRequestParameter( "editPath", session.getEditPath() ); 150 writeContent( inContext ); 151 } 152 else 153 { 154 Page old = getPageManager().getPage(revision.getActualPath()); 155 Page current = session.getEditPage(); 156 current.getContentItem().setMessage(message); 157 current.getContentItem().setAuthor(inContext.getUser().getUserName() ); 158 getPageManager().copyPage(old, current); 159 } 160 log.info("restored revision " + session.getEditPath() ); 161 inContext.removeSessionValue("revisions"); 162 } 164 165 public void deleteAll(WebPageRequest inReq) throws OpenEditException 166 { 167 String path = inReq.getRequestParameter( "editPath" ); 168 if ( path == null) 169 { 170 return; 171 } 172 getPageManager().getRepository().deleteOldVersions( path ); 173 } 174 } | Popular Tags |