/* * 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.esigate.aggregator; import java.io.IOException; import java.io.Writer; import java.util.regex.Pattern; import org.esigate.HttpErrorPage; import org.esigate.Renderer; import org.esigate.impl.DriverRequest; import org.esigate.parser.Parser; /** * Parses a page to find tags to be replaced by contents from other providers. * * Sample syntax used for includes : * <ul> * <li> * <!--$includeblock$provider$page$blockname$--><!--$endincludeblock$ --></li> * <li><!--$includetemplate$provider$page$templatename$--><!-- $endincludetemplate$--></li> * <li><!--$beginput$name$--><!--$endput$--></li> * </ul> * * Sample syntax used inside included contents for template and block definition: * <ul> * <li><!--$beginblock$name$--></li> * <li><!--$begintemplate$name$--></li> * <li><!--$beginparam$name$--></li> * </ul> * * @author Stanislav Bernatskyi * @author Francois-Xavier Bonnet */ public class AggregateRenderer implements Renderer, Appendable { /** Generic pattern for all the tags we want to look for. */ private static final Pattern PATTERN = Pattern.compile("<!--\\$[^>]*\\$-->"); private final Parser parser = new Parser(PATTERN, IncludeBlockElement.TYPE, IncludeTemplateElement.TYPE, PutElement.TYPE); private Writer out; /** {@inheritDoc} */ @Override public void render(DriverRequest httpRequest, String content, Writer outWriter) throws IOException, HttpErrorPage { this.out = outWriter; if (content == null) { return; } parser.setHttpRequest(httpRequest); parser.parse(content, this); } @Override public Appendable append(CharSequence csq) throws IOException { out.append(csq); return this; } @Override public Appendable append(char c) throws IOException { out.append(c); return this; } @Override public Appendable append(CharSequence csq, int start, int end) throws IOException { out.append(csq, start, end); return this; } }