/* * Copyright (C) 2010 Google Inc. * * 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.clearsilver; import java.io.IOException; /** * Utility class that delegates all methods of an CS object. Made to * facilitate the transition to CS being an interface and thus not * extensible in the same way as it was. * <p> * This class, and its subclasses must take care to wrap or unwrap HDF and CS * objects as they are passed through from the callers to the delegate object. * */ public abstract class DelegatedCs implements CS { private final CS cs; public DelegatedCs(CS cs) { // Give it an empty HDF. We aren't going to be using the super object anyways. this.cs = cs; } public CS getCs() { return cs; } /** * Method subclasses are required to override with a method that returns a * new DelegatedHdf object that wraps the specified HDF object. * * @param hdf an HDF object that should be wrapped in a new DelegatedHdf * object of the same type as this current object. * @return an object that is a subclass of DelegatedHdf and which wraps the * given HDF object. */ protected abstract DelegatedHdf newDelegatedHdf(HDF hdf); public void setGlobalHDF(HDF global) { if (global != null && global instanceof DelegatedHdf) { global = ((DelegatedHdf)global).getHdf(); } getCs().setGlobalHDF(global); } public HDF getGlobalHDF() { HDF hdf = getCs().getGlobalHDF(); return hdf != null ? newDelegatedHdf(hdf) : null; } public void close() { getCs().close(); } public void parseFile(String filename) throws IOException { getCs().parseFile(filename); } public void parseStr(String content) { getCs().parseStr(content); } public String render() { return getCs().render(); } public CSFileLoader getFileLoader() { return getCs().getFileLoader(); } public void setFileLoader(CSFileLoader fileLoader) { getCs().setFileLoader(fileLoader); } }