Home | History | Annotate | Download | only in clearsilver
      1 /*
      2  * Copyright (C) 2010 Google Inc.
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package org.clearsilver;
     18 
     19 import java.io.FileNotFoundException;
     20 import java.io.IOException;
     21 import java.util.Date;
     22 import java.util.TimeZone;
     23 
     24 /**
     25  * Utility class that delegates all methods of an HDF object. Made to
     26  * facilitate the transition to HDF being an interface and thus not
     27  * extensible in the same way as it was.
     28  * <p>
     29  * This class, and its subclasses must take care to wrap or unwrap HDF and CS
     30  * objects as they are passed through from the callers to the delegate object.
     31  */
     32 public abstract class DelegatedHdf implements HDF {
     33 
     34   private final HDF hdf;
     35 
     36   public DelegatedHdf(HDF hdf) {
     37     if (hdf == null) {
     38       throw new NullPointerException("Null HDF is not allowed in constructor of DelegatedHdf.");
     39     }
     40     this.hdf = hdf;
     41   }
     42 
     43   /**
     44    * Utility function for concrete ClearsilverFactories to unwrap DelegatedHdfs
     45    * and get down to a concrete (or unknown) HDF object.
     46    * @param hdf the possibly DelegatedHdf to unwrap
     47    * @return the innermost non-DelegatedHdf HDF object.
     48    */
     49   public static HDF getFullyUnwrappedHdf(HDF hdf) {
     50     while (hdf instanceof DelegatedHdf) {
     51       hdf = ((DelegatedHdf)hdf).getHdf();
     52     }
     53     return hdf;
     54   }
     55 
     56   public HDF getHdf() {
     57     return hdf;
     58   }
     59 
     60   /**
     61    * Method subclasses are required to override with a method that returns a
     62    * new DelegatedHdf object that wraps the specified HDF object.
     63    *
     64    * @param hdf an HDF object that should be wrapped in a new DelegatedHdf
     65    * object of the same type as this current object.
     66    * @return an object that is a subclass of DelegatedHdf and which wraps the
     67    * given HDF object.
     68    */
     69   protected abstract DelegatedHdf newDelegatedHdf(HDF hdf);
     70 
     71   public void close() {
     72     getHdf().close();
     73   }
     74 
     75   public boolean readFile(String filename) throws IOException, FileNotFoundException {
     76     return getHdf().readFile(filename);
     77   }
     78 
     79   public CSFileLoader getFileLoader() {
     80     return getHdf().getFileLoader();
     81   }
     82 
     83   public void setFileLoader(CSFileLoader fileLoader) {
     84     getHdf().setFileLoader(fileLoader);
     85   }
     86 
     87   public boolean writeFile(String filename) throws IOException {
     88     return getHdf().writeFile(filename);
     89   }
     90 
     91   public boolean readString(String data) {
     92     return getHdf().readString(data);
     93   }
     94 
     95   public String writeString() {
     96     return getHdf().writeString();
     97   }
     98 
     99   public int getIntValue(String hdfname,
    100       int default_value) {
    101     return getHdf().getIntValue(hdfname, default_value);
    102   }
    103 
    104   public String getValue(String hdfname, String default_value) {
    105     return getHdf().getValue(hdfname, default_value);
    106   }
    107 
    108   public void setValue(
    109       String hdfname, String value) {
    110     getHdf().setValue(hdfname, value);
    111   }
    112 
    113   public void removeTree(String hdfname) {
    114     getHdf().removeTree(hdfname);
    115   }
    116 
    117   public void setSymLink(String hdf_name_src,
    118       String hdf_name_dest) {
    119     getHdf().setSymLink(hdf_name_src, hdf_name_dest);
    120   }
    121 
    122   public void exportDate(
    123       String hdfname, TimeZone timeZone, Date date) {
    124     getHdf().exportDate(hdfname, timeZone, date);
    125   }
    126 
    127   public void exportDate(
    128       String hdfname, String tz, int tt) {
    129     getHdf().exportDate(hdfname, tz, tt);
    130   }
    131 
    132   public DelegatedHdf getObj(String hdfpath) {
    133     HDF hdf = getHdf().getObj(hdfpath);
    134     return hdf != null ? newDelegatedHdf(hdf) : null;
    135   }
    136 
    137   public DelegatedHdf getChild(String hdfpath) {
    138     HDF hdf = getHdf().getChild(hdfpath);
    139     return hdf != null ? newDelegatedHdf(hdf) : null;
    140   }
    141 
    142   public DelegatedHdf getRootObj() {
    143     HDF hdf = getHdf().getRootObj();
    144     return hdf != null ? newDelegatedHdf(hdf) : null;
    145   }
    146 
    147   public boolean belongsToSameRoot(HDF hdf) {
    148     return getFullyUnwrappedHdf(this).belongsToSameRoot(getFullyUnwrappedHdf(hdf));
    149   }
    150 
    151   public DelegatedHdf getOrCreateObj(String hdfpath) {
    152     HDF hdf = getHdf().getOrCreateObj(hdfpath);
    153     return hdf != null ? newDelegatedHdf(hdf) : null;
    154   }
    155 
    156   public String objName() {
    157     return getHdf().objName();
    158   }
    159 
    160   public String objValue() {
    161     return getHdf().objValue();
    162   }
    163 
    164   public DelegatedHdf objChild() {
    165     HDF hdf = getHdf().objChild();
    166     return hdf != null ? newDelegatedHdf(hdf) : null;
    167   }
    168 
    169   public DelegatedHdf objNext() {
    170     HDF hdf = getHdf().objNext();
    171     return hdf != null ? newDelegatedHdf(hdf) : null;
    172   }
    173 
    174   public void copy(String hdfpath, HDF src) {
    175     if (src != null && src instanceof DelegatedHdf) {
    176       src = ((DelegatedHdf)src).getHdf();
    177     }
    178     getHdf().copy(hdfpath, src);
    179   }
    180 
    181   public String dump() {
    182     return getHdf().dump();
    183   }
    184 }
    185 
    186