1 16 package org.outerj.daisy.publisher.serverimpl.requestmodel; 17 18 import org.xml.sax.ContentHandler ; 19 import org.outerj.daisy.repository.query.QueryManager; 20 import org.outerj.daisy.repository.query.EvaluationContext; 21 import org.outerj.daisy.repository.*; 22 23 import java.util.Map ; 24 import java.util.HashMap ; 25 26 public class ForEachRequest implements Request { 27 private final String query; 28 private final boolean useLastVersion; 29 private final DocumentRequest documentRequest; 30 31 public ForEachRequest(String query, boolean useLastVersion, DocumentRequest documentRequest) { 32 this.query = query; 33 this.useLastVersion = useLastVersion; 34 this.documentRequest = documentRequest; 35 } 36 37 public void process(ContentHandler contentHandler, PublisherContext publisherContext) throws Exception { 38 EvaluationContext evaluationContext = new EvaluationContext(); 39 if (publisherContext.hasDocument()) 40 evaluationContext.setContextDocument(publisherContext.getDocument(), publisherContext.getVersion()); 41 QueryManager queryManager = publisherContext.getRepository().getQueryManager(); 42 43 Map queryOptions = null; 44 if (publisherContext.getVersionMode() == PublisherVersionMode.LAST) { 45 queryOptions = new HashMap (3); 46 queryOptions.put("search_last_version", "true"); 47 } 48 49 VariantKey[] keys = queryManager.performQueryReturnKeys(query, null, queryOptions, publisherContext.getLocale(), evaluationContext); 50 51 for (int i = 0; i < keys.length; i++) { 52 VariantKey currentKey = keys[i]; 53 PublisherContextImpl childPublisherContext = new PublisherContextImpl(publisherContext); 54 childPublisherContext.setDocumentVariant(currentKey.getDocumentId(), currentKey.getBranchId(), currentKey.getLanguageId()); 55 childPublisherContext.setVersionId(useLastVersion ? -2 : -3); 56 documentRequest.process(contentHandler, childPublisherContext); 57 } 58 } 59 } 60 | Popular Tags |