| /* |
| * 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.FileNotFoundException; |
| import java.io.IOException; |
| import java.util.Date; |
| import java.util.TimeZone; |
| |
| /** |
| * Utility class that delegates all methods of an HDF object. Made to |
| * facilitate the transition to HDF 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 DelegatedHdf implements HDF { |
| |
| private final HDF hdf; |
| |
| public DelegatedHdf(HDF hdf) { |
| if (hdf == null) { |
| throw new NullPointerException("Null HDF is not allowed in constructor of DelegatedHdf."); |
| } |
| this.hdf = hdf; |
| } |
| |
| /** |
| * Utility function for concrete ClearsilverFactories to unwrap DelegatedHdfs |
| * and get down to a concrete (or unknown) HDF object. |
| * @param hdf the possibly DelegatedHdf to unwrap |
| * @return the innermost non-DelegatedHdf HDF object. |
| */ |
| public static HDF getFullyUnwrappedHdf(HDF hdf) { |
| while (hdf instanceof DelegatedHdf) { |
| hdf = ((DelegatedHdf)hdf).getHdf(); |
| } |
| return hdf; |
| } |
| |
| public HDF getHdf() { |
| return hdf; |
| } |
| |
| /** |
| * 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 close() { |
| getHdf().close(); |
| } |
| |
| public boolean readFile(String filename) throws IOException, FileNotFoundException { |
| return getHdf().readFile(filename); |
| } |
| |
| public CSFileLoader getFileLoader() { |
| return getHdf().getFileLoader(); |
| } |
| |
| public void setFileLoader(CSFileLoader fileLoader) { |
| getHdf().setFileLoader(fileLoader); |
| } |
| |
| public boolean writeFile(String filename) throws IOException { |
| return getHdf().writeFile(filename); |
| } |
| |
| public boolean readString(String data) { |
| return getHdf().readString(data); |
| } |
| |
| public String writeString() { |
| return getHdf().writeString(); |
| } |
| |
| public int getIntValue(String hdfname, |
| int default_value) { |
| return getHdf().getIntValue(hdfname, default_value); |
| } |
| |
| public String getValue(String hdfname, String default_value) { |
| return getHdf().getValue(hdfname, default_value); |
| } |
| |
| public void setValue( |
| String hdfname, String value) { |
| getHdf().setValue(hdfname, value); |
| } |
| |
| public void removeTree(String hdfname) { |
| getHdf().removeTree(hdfname); |
| } |
| |
| public void setSymLink(String hdf_name_src, |
| String hdf_name_dest) { |
| getHdf().setSymLink(hdf_name_src, hdf_name_dest); |
| } |
| |
| public void exportDate( |
| String hdfname, TimeZone timeZone, Date date) { |
| getHdf().exportDate(hdfname, timeZone, date); |
| } |
| |
| public void exportDate( |
| String hdfname, String tz, int tt) { |
| getHdf().exportDate(hdfname, tz, tt); |
| } |
| |
| public DelegatedHdf getObj(String hdfpath) { |
| HDF hdf = getHdf().getObj(hdfpath); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public DelegatedHdf getChild(String hdfpath) { |
| HDF hdf = getHdf().getChild(hdfpath); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public DelegatedHdf getRootObj() { |
| HDF hdf = getHdf().getRootObj(); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public boolean belongsToSameRoot(HDF hdf) { |
| return getFullyUnwrappedHdf(this).belongsToSameRoot(getFullyUnwrappedHdf(hdf)); |
| } |
| |
| public DelegatedHdf getOrCreateObj(String hdfpath) { |
| HDF hdf = getHdf().getOrCreateObj(hdfpath); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public String objName() { |
| return getHdf().objName(); |
| } |
| |
| public String objValue() { |
| return getHdf().objValue(); |
| } |
| |
| public DelegatedHdf objChild() { |
| HDF hdf = getHdf().objChild(); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public DelegatedHdf objNext() { |
| HDF hdf = getHdf().objNext(); |
| return hdf != null ? newDelegatedHdf(hdf) : null; |
| } |
| |
| public void copy(String hdfpath, HDF src) { |
| if (src != null && src instanceof DelegatedHdf) { |
| src = ((DelegatedHdf)src).getHdf(); |
| } |
| getHdf().copy(hdfpath, src); |
| } |
| |
| public String dump() { |
| return getHdf().dump(); |
| } |
| } |
| |