package com.impossibl.stencil.ext.std; import java.util.Map; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; import com.google.common.collect.Maps; import com.impossibl.stencil.api.Named; import com.impossibl.stencil.api.impl.AnnotatedCallableBase; @Named("attrs") public class AttrsFunction extends AnnotatedCallableBase { public Object doCall(@Named("*") Map<String,Object> attrs, @Named("nulls") Boolean includeNulls) { includeNulls = includeNulls != null ? includeNulls : false; if(!includeNulls) { attrs = Maps.filterValues(attrs, new Predicate<Object>() { @Override public boolean apply(Object input) { return input != null; } }); } attrs = Maps.transformValues(attrs, new Function<Object,Object>() { @Override public String apply(Object value) { return "\"" + value.toString() + "\""; } }); return Joiner.on(" ").withKeyValueSeparator("=").join(attrs); } }