1 /************************************************************************** 2 * 3 * Copyright (c) 2016-2019 Yawg project contributors. 4 * 5 **************************************************************************/ 6 7 package com.varmateo.yawg.spi; 8 9 import java.util.Collections; 10 import java.util.Map; 11 import java.util.Optional; 12 13 14 /** 15 * Set of variables made available to the template when generating the 16 * final bake result. 17 * 18 * <p>The meaning of this variables is template specific.</p> 19 */ 20 public interface PageVars { 21 22 23 /** 24 * Retrieves the value of one of the variables. 25 * 26 * @param key The name of the variable whose value is to be 27 * returned. 28 * 29 * @return An <code>Optional</code> containing the value of the 30 * given variable, or nan empty <code>Optional</code> if the 31 * variable does not exist. 32 */ 33 Optional<Object> get(String key); 34 35 36 /** 37 * Fetches a view of the set of page variables as an unmodifiable 38 * map. 39 * 40 * @return An unmodifiable map containing all the vars. Each entry 41 * corresponds to one page variable. 42 */ 43 Map<String, Object> asMap(); 44 45 46 /** 47 * Creates an empty <code>PageVars</code>. 48 * 49 * @return An empty <code>PageVars</code>. 50 */ 51 static PageVars empty() { 52 53 return new PageVars() { 54 @Override 55 public Optional<Object> get(final String key) { 56 return Optional.empty(); 57 } 58 59 @Override 60 public Map<String, Object> asMap() { 61 return Collections.emptyMap(); 62 } 63 }; 64 } 65 66 }