• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
DelegatedHdf(HDF hdf)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    */
getFullyUnwrappedHdf(HDF hdf)49   public static HDF getFullyUnwrappedHdf(HDF hdf) {
50     while (hdf instanceof DelegatedHdf) {
51       hdf = ((DelegatedHdf)hdf).getHdf();
52     }
53     return hdf;
54   }
55 
getHdf()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    */
newDelegatedHdf(HDF hdf)69   protected abstract DelegatedHdf newDelegatedHdf(HDF hdf);
70 
close()71   public void close() {
72     getHdf().close();
73   }
74 
readFile(String filename)75   public boolean readFile(String filename) throws IOException, FileNotFoundException {
76     return getHdf().readFile(filename);
77   }
78 
getFileLoader()79   public CSFileLoader getFileLoader() {
80     return getHdf().getFileLoader();
81   }
82 
setFileLoader(CSFileLoader fileLoader)83   public void setFileLoader(CSFileLoader fileLoader) {
84     getHdf().setFileLoader(fileLoader);
85   }
86 
writeFile(String filename)87   public boolean writeFile(String filename) throws IOException {
88     return getHdf().writeFile(filename);
89   }
90 
readString(String data)91   public boolean readString(String data) {
92     return getHdf().readString(data);
93   }
94 
writeString()95   public String writeString() {
96     return getHdf().writeString();
97   }
98 
getIntValue(String hdfname, int default_value)99   public int getIntValue(String hdfname,
100       int default_value) {
101     return getHdf().getIntValue(hdfname, default_value);
102   }
103 
getValue(String hdfname, String default_value)104   public String getValue(String hdfname, String default_value) {
105     return getHdf().getValue(hdfname, default_value);
106   }
107 
setValue( String hdfname, String value)108   public void setValue(
109       String hdfname, String value) {
110     getHdf().setValue(hdfname, value);
111   }
112 
removeTree(String hdfname)113   public void removeTree(String hdfname) {
114     getHdf().removeTree(hdfname);
115   }
116 
setSymLink(String hdf_name_src, String hdf_name_dest)117   public void setSymLink(String hdf_name_src,
118       String hdf_name_dest) {
119     getHdf().setSymLink(hdf_name_src, hdf_name_dest);
120   }
121 
exportDate( String hdfname, TimeZone timeZone, Date date)122   public void exportDate(
123       String hdfname, TimeZone timeZone, Date date) {
124     getHdf().exportDate(hdfname, timeZone, date);
125   }
126 
exportDate( String hdfname, String tz, int tt)127   public void exportDate(
128       String hdfname, String tz, int tt) {
129     getHdf().exportDate(hdfname, tz, tt);
130   }
131 
getObj(String hdfpath)132   public DelegatedHdf getObj(String hdfpath) {
133     HDF hdf = getHdf().getObj(hdfpath);
134     return hdf != null ? newDelegatedHdf(hdf) : null;
135   }
136 
getChild(String hdfpath)137   public DelegatedHdf getChild(String hdfpath) {
138     HDF hdf = getHdf().getChild(hdfpath);
139     return hdf != null ? newDelegatedHdf(hdf) : null;
140   }
141 
getRootObj()142   public DelegatedHdf getRootObj() {
143     HDF hdf = getHdf().getRootObj();
144     return hdf != null ? newDelegatedHdf(hdf) : null;
145   }
146 
belongsToSameRoot(HDF hdf)147   public boolean belongsToSameRoot(HDF hdf) {
148     return getFullyUnwrappedHdf(this).belongsToSameRoot(getFullyUnwrappedHdf(hdf));
149   }
150 
getOrCreateObj(String hdfpath)151   public DelegatedHdf getOrCreateObj(String hdfpath) {
152     HDF hdf = getHdf().getOrCreateObj(hdfpath);
153     return hdf != null ? newDelegatedHdf(hdf) : null;
154   }
155 
objName()156   public String objName() {
157     return getHdf().objName();
158   }
159 
objValue()160   public String objValue() {
161     return getHdf().objValue();
162   }
163 
objChild()164   public DelegatedHdf objChild() {
165     HDF hdf = getHdf().objChild();
166     return hdf != null ? newDelegatedHdf(hdf) : null;
167   }
168 
objNext()169   public DelegatedHdf objNext() {
170     HDF hdf = getHdf().objNext();
171     return hdf != null ? newDelegatedHdf(hdf) : null;
172   }
173 
copy(String hdfpath, HDF src)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 
dump()181   public String dump() {
182     return getHdf().dump();
183   }
184 }
185 
186