Mercurial > hg > tema
view src/kryshen/tema/Context.java @ 2:6c41a0b43e58 release_0_3
Tema 0.3 (imported from CVS).
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Tue, 19 Feb 2008 20:32:17 +0300 |
parents | |
children | e9d13c7ffeb1 |
line wrap: on
line source
/* * Copyright 2006-2008 Mikhail Kryshen * * This file is part of Tema. * * Tema is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * Tema is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the * GNU Lesser General Public License along with Tema. * If not, see <http://www.gnu.org/licenses/>. * * $Id: Context.java,v 1.11 2008/02/19 16:21:00 mikhail Exp $ */ package kryshen.tema; import java.io.File; import java.util.HashMap; import java.util.Map; /** * Tema template context. * * @author Mikhail Kryshen */ public class Context { private Map<String, Object> definitions = new HashMap<String, Object>(); private Context superContext; private File baseDir; public Context() { this(null, null); } public Context(Context superContext) { this(superContext, null); } public Context(File baseDir) { this(null, baseDir); } public Context(Context superContext, File baseDir) { this.superContext = superContext; this.baseDir = baseDir; definitions.put("this", this); if (superContext != null) definitions.put("super", superContext); } public void clear() { definitions.clear(); } public boolean export(String name) { Object value = definitions.get(name); if (value == null) return false; export(name, value); return true; } public void export(String name, Object value) { if (superContext == null) { set(name, value); return; } definitions.remove(name); superContext.export(name, value); } public Object get(String name) throws TemplateException { Object value = definitions.get(name); if (value == null && superContext != null) return superContext.get(name); return value; } /** * Set the definition value. * * @param name Variable name. * @param value New variable value. */ public void set(String name, Object value) { definitions.put(name, value); } /** * Remove the definition recursively. * * @param name Definition name. * @return true if the definition was found and removed. */ public boolean unset(String name) { if (definitions.remove(name) != null) return true; if (superContext != null) return superContext.unset(name); return false; } /** * Returns base directory which should be used to resolve * relative path names in template. */ public File getBaseDirectory() { if (baseDir == null && superContext != null) return superContext.getBaseDirectory(); return baseDir; } }