1 16 package org.outerj.daisy.frontend; 17 18 import org.outerj.daisy.frontend.util.AbstractDaisyApple; 19 import org.outerj.daisy.frontend.util.FormHelper; 20 import org.outerj.daisy.frontend.util.XmlObjectXMLizable; 21 import org.outerj.daisy.frontend.components.siteconf.SiteConf; 22 import org.outerj.daisy.repository.query.QueryHelper; 23 import org.outerj.daisy.repository.Repository; 24 import org.outerj.daisy.repository.RepositoryException; 25 import org.apache.cocoon.components.flow.apples.StatelessAppleController; 26 import org.apache.cocoon.components.flow.apples.AppleRequest; 27 import org.apache.cocoon.components.flow.apples.AppleResponse; 28 import org.apache.cocoon.environment.Request; 29 import org.apache.cocoon.forms.formmodel.Form; 30 import org.apache.cocoon.forms.FormContext; 31 import org.apache.avalon.framework.service.Serviceable; 32 import org.apache.avalon.framework.service.ServiceManager; 33 import org.apache.avalon.framework.service.ServiceException; 34 import org.outerx.daisy.x10.SearchResultDocument; 35 36 import java.util.Locale ; 37 import java.util.Date ; 38 import java.util.Map ; 39 import java.util.HashMap ; 40 41 public class RecentChangesApple extends AbstractDaisyApple implements StatelessAppleController, Serviceable { 42 private static final int DEFAULT_PERIOD = 7; private static final int DEFAULT_LIMIT = 50; 44 private ServiceManager serviceManager; 45 private SiteConf siteConf; 46 private Repository repository; 47 private Form form; 48 49 public void service(ServiceManager serviceManager) throws ServiceException { 50 this.serviceManager = serviceManager; 51 } 52 53 protected void processInternal(AppleRequest appleRequest, AppleResponse appleResponse) throws Exception { 54 Request request = appleRequest.getCocoonRequest(); 55 Locale locale = WikiHelper.getLocale(request); 56 siteConf = WikiHelper.getSiteConf(request); 57 repository = WikiHelper.getRepository(request, serviceManager); 58 59 form = FormHelper.createForm(serviceManager, "resources/form/recentchanges_definition.xml"); 60 boolean endProcessing = true; 61 if (request.getParameter("period") != null) { endProcessing = form.process(new FormContext(request, locale)); 63 } else { 64 form.getChild("period").setValue(new Integer (DEFAULT_PERIOD)); 66 form.getChild("limit").setValue(new Integer (DEFAULT_LIMIT)); 67 form.getChild("scope").setValue("currentSiteCollection"); 68 } 69 70 Map viewData = new HashMap (); 71 viewData.put("CocoonFormsInstance", form); 72 viewData.put("pageContext", new PageContext(getMountPoint(), siteConf, repository, getLayoutType(), getSkin(), getContext())); 73 viewData.put("locale", locale); 74 75 if (endProcessing) { 76 String query = getQuery(form); 77 SearchResultDocument searchResultDocument = repository.getQueryManager().performQuery(query, locale); 78 viewData.put("pageXml", new XmlObjectXMLizable(searchResultDocument)); 79 } 80 81 appleResponse.sendPage("Form-recentchanges-Pipe", viewData); 82 } 83 84 private String getQuery(Form form) throws Exception { 85 int period = ((Integer )form.getChild("period").getValue()).intValue(); 86 int limit = ((Integer )form.getChild("limit").getValue()).intValue(); 87 String scope = (String )form.getChild("scope").getValue(); 88 89 Date fromDate = new Date (System.currentTimeMillis() - (((long)period) * 24L * 60L * 60L * 1000L)); 90 91 StringBuffer query = new StringBuffer ("select id, branch, language, name, versionCreationTime, versionCreatorName, versionState where versionCreationTime > "); 92 query.append(QueryHelper.formatDateTime(fromDate)); 93 94 if (scope.equals("currentSiteCollection")) { 95 query.append(" and InCollection(").append(QueryHelper.formatString(getCollectionName())).append(")"); 96 } 97 98 query.append(" order by versionCreationTime desc limit "); 99 query.append(String.valueOf(limit)); 100 query.append(" option search_last_version='true'"); 101 102 return query.toString(); 103 } 104 105 private String getCollectionName() throws RepositoryException { 106 return repository.getCollectionManager().getCollection(siteConf.getCollectionId(), false).getName(); 107 } 108 } 109 | Popular Tags |