/* * 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.Closeable; import java.io.IOException; import java.util.Date; import java.util.TimeZone; /** * This interface establishes the API for an HDF data structure used by * Clearsilver templates when rendering content. */ public interface HDF extends Closeable { /** * Clean up CS object state. */ void close(); /** * Loads the contents of the specified HDF file from disk into the current * HDF object. The loaded contents are merged with the existing contents. */ boolean readFile(String filename) throws IOException; /** * Get the file loader in use, if any. * @return the file loader in use. */ CSFileLoader getFileLoader(); /** * Set the CS file loader to use * @param fileLoader the file loader that should be used. */ void setFileLoader(CSFileLoader fileLoader); /** * Serializes HDF contents to a file (readable by readFile) */ boolean writeFile(String filename) throws IOException; /** * Parses/loads the contents of the given string as HDF into the current * HDF object. The loaded contents are merged with the existing contents. */ boolean readString(String data); /** * Serializes HDF contents to a string (readable by readString) */ String writeString(); /** * Retrieves the integer value at the specified path in this HDF node's * subtree. If the value does not exist, or cannot be converted to an * integer, default_value will be returned. */ int getIntValue(String hdfName, int defaultValue); /** * Retrieves the value at the specified path in this HDF node's subtree. */ String getValue(String hdfName, String defaultValue); /** * Sets the value at the specified path in this HDF node's subtree. */ void setValue(String hdfName, String value); /** * Remove the specified subtree. */ void removeTree(String hdfName); /** * Links the src hdf name to the dest. */ void setSymLink(String hdfNameSrc, String hdfNameDest); /** * Export a date to a clearsilver tree using a specified timezone */ void exportDate(String hdfName, TimeZone timeZone, Date date); /** * Export a date to a clearsilver tree using a specified timezone */ void exportDate(String hdfName, String tz, int tt); /** * Retrieves the HDF object that is the root of the subtree at hdfpath, or * null if no object exists at that path. */ HDF getObj(String hdfpath); /** * Retrieves the HDF for the first child of the root of the subtree * at hdfpath, or null if no child exists of that path or if the * path doesn't exist. */ HDF getChild(String hdfpath); /** * Return the root of the tree where the current node lies. If the * current node is the root, return this. Implementations may not * necessarily return the same instance of {@code HDF} every time. * Use {@link #belongsToSameRoot(HDF)} to check if two {@code HDF}s * belong to the same root. */ HDF getRootObj(); /** * Checks if the given hdf object belongs to the same root HDF object * as this one. * * @param hdf The hdf object to compare to. * @throws IllegalArgumentException If the supplied hdf object is from * a different implementation (e.g. mixing JNI and jsilver). */ boolean belongsToSameRoot(HDF hdf); /** * Retrieves the HDF object that is the root of the subtree at * hdfpath, create the subtree if it doesn't exist */ HDF getOrCreateObj(String hdfpath); /** * Returns the name of this HDF node. The root node has no name, so * calling this on the root node will return null. */ String objName(); /** * Returns the value of this HDF node, or null if this node has no value. * Every node in the tree can have a value, a child, and a next peer. */ String objValue(); /** * Returns the child of this HDF node, or null if there is no child. * Use this in conjunction with objNext to walk the HDF tree. Every node * in the tree can have a value, a child, and a next peer. */ HDF objChild(); /** * Returns the child of this HDF node, or null if there is no child. * Use this in conjunction with objNext to walk the HDF tree. Every node * in the tree can have a value, a child, and a next peer. */ HDF objNext(); /** * Deep copy of the contents of the source HDF structure to this HDF * starting at the specified HDF path node. * <p> * This method copies over the attributes and value of the node and recurses * through all the children of the source node. Any symlink in the source * node becomes a symlink in the copy. * <p> * @param hdfpath the node within this HDF where the source structure should * be copied to. * @param src the source HDF to copy over. */ void copy(String hdfpath, HDF src); /** * Generates a string representing the content of the HDF tree rooted at * this node. */ String dump(); }