/*
* 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();
}
}