001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.generator.gsp; 022 023import java.net.URI; 024import java.nio.charset.Charset; 025import java.util.ArrayList; 026import java.util.HashMap; 027import java.util.List; 028import java.util.Map; 029 030/** 031 * @author Franck WOLFF 032 */ 033public class GroovyTemplateFactory { 034 035 /////////////////////////////////////////////////////////////////////////// 036 // Fields. 037 038 private final Map<URI, GroovyTemplate> templatesMap = new HashMap<URI, GroovyTemplate>(); 039 040 /////////////////////////////////////////////////////////////////////////// 041 // Constructor. 042 043 public GroovyTemplateFactory() { 044 } 045 046 /////////////////////////////////////////////////////////////////////////// 047 // Checking. 048 049 public boolean isOutdated() { 050 for (GroovyTemplate template : templatesMap.values()) { 051 if (template.isOutdated()) 052 return true; 053 } 054 return false; 055 } 056 057 public void cleanOutdated() { 058 List<URI> outdated = new ArrayList<URI>(); 059 for (GroovyTemplate template : templatesMap.values()) { 060 if (template.isOutdated()) 061 outdated.add(template.getUri()); 062 } 063 for (URI uri : outdated) 064 templatesMap.remove(uri); 065 } 066 067 /////////////////////////////////////////////////////////////////////////// 068 // Cleanup. 069 070 public void clear() { 071 templatesMap.clear(); 072 } 073 074 public void clear(URI uri) { 075 templatesMap.remove(uri); 076 } 077 078 /////////////////////////////////////////////////////////////////////////// 079 // Template loading. 080 081 public GroovyTemplate getTemplate(URI uri, boolean baseTemplate) { 082 return getTemplate(uri, baseTemplate, Charset.defaultCharset()); 083 } 084 085 public GroovyTemplate getTemplate(URI uri, boolean baseTemplate, Charset charset) { 086 if (uri == null || charset == null) 087 throw new IllegalArgumentException("uri and charset cannot be null"); 088 089 GroovyTemplate template = templatesMap.get(uri); 090 091 if (template == null) { 092 template = new GroovyTemplate(uri, baseTemplate, charset); 093 templatesMap.put(uri, template); 094 } 095 096 return template; 097 } 098}