Home | History | Annotate | Download | only in adaptor
      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 com.google.clearsilver.jsilver.adaptor;
     18 
     19 import com.google.clearsilver.jsilver.JSilver;
     20 import com.google.clearsilver.jsilver.JSilverOptions;
     21 import com.google.clearsilver.jsilver.data.DataFactory;
     22 import com.google.clearsilver.jsilver.data.DefaultData;
     23 import com.google.clearsilver.jsilver.data.HDFDataFactory;
     24 
     25 import org.clearsilver.ClearsilverFactory;
     26 import org.clearsilver.DelegatedHdf;
     27 import org.clearsilver.HDF;
     28 
     29 /**
     30  * ClearsilverFactory that adapts JSilver for use as any HDF/CS rendering engine.
     31  */
     32 public class JSilverFactory implements ClearsilverFactory {
     33 
     34   private static final JSilverOptions DEFAULT_OPTIONS = new JSilverOptions();
     35 
     36   private final boolean unwrapDelegatedHdfs;
     37   private final JSilver jSilver;
     38   private final JSilverOptions options;
     39   private final DataFactory dataFactory;
     40 
     41   private final LoadPathToFileCache loadPathCache;
     42 
     43   /**
     44    * Default constructor. enables unwrapping of DelegatedHdfs.
     45    */
     46   public JSilverFactory() {
     47     this(DEFAULT_OPTIONS);
     48   }
     49 
     50   public JSilverFactory(JSilverOptions options) {
     51     this(options, true);
     52   }
     53 
     54   public JSilverFactory(JSilverOptions options, boolean unwrapDelegatedHdfs) {
     55     this(new JSilver(null, options), unwrapDelegatedHdfs);
     56   }
     57 
     58   /**
     59    * This constructor is available for those who already use JSilver and want to use the same
     60    * attributes and caches for their Java Clearsilver Framework code. Users who use only JCF should
     61    * use a different constructor.
     62    *
     63    * @param jSilver existing instance of JSilver to use for parsing and rendering.
     64    * @param unwrapDelegatedHdfs whether to unwrap DelegetedHdfs or not before casting.
     65    */
     66   public JSilverFactory(JSilver jSilver, boolean unwrapDelegatedHdfs) {
     67     this.unwrapDelegatedHdfs = unwrapDelegatedHdfs;
     68     this.jSilver = jSilver;
     69     this.options = jSilver.getOptions();
     70     if (this.options.getLoadPathCacheSize() == 0) {
     71       this.loadPathCache = null;
     72     } else {
     73       this.loadPathCache = new LoadPathToFileCache(this.options.getLoadPathCacheSize());
     74     }
     75     this.dataFactory =
     76         new HDFDataFactory(options.getIgnoreAttributes(), options.getStringInternStrategy());
     77   }
     78 
     79   @Override
     80   public JCs newCs(HDF hdf) {
     81     if (unwrapDelegatedHdfs) {
     82       hdf = DelegatedHdf.getFullyUnwrappedHdf(hdf);
     83     }
     84     return new JCs(JHdf.cast(hdf), jSilver, loadPathCache);
     85   }
     86 
     87   @Override
     88   public JCs newCs(HDF hdf, HDF globalHdf) {
     89     if (unwrapDelegatedHdfs) {
     90       hdf = DelegatedHdf.getFullyUnwrappedHdf(hdf);
     91       globalHdf = DelegatedHdf.getFullyUnwrappedHdf(globalHdf);
     92     }
     93     JCs cs = new JCs(JHdf.cast(hdf), jSilver, loadPathCache);
     94     cs.setGlobalHDF(globalHdf);
     95     return cs;
     96   }
     97 
     98   @Override
     99   public JHdf newHdf() {
    100     return new JHdf(new DefaultData(), dataFactory, loadPathCache, options);
    101   }
    102 }
    103