Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  //(c) Copyright 2011-2013 PaperCut Software Int. Pty. Ltd. http://www.papercut.com/
  //
  //        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 pl.matisoft.soy.data;
 
 
 import java.util.List;
 import java.util.Map;
 
 import static com.google.common.collect.Lists.newArrayList;
 import static java.util.Collections.unmodifiableList;

An implementation of ToSoyDataConverter that will recursively inspect a passed in model and build a nested structure of SoyMapData objects, which consist only of primitives supported by Soy and thus can be rendered. An implementation supports passing a model object, which is wrapped in Callable or a Future. In case a model wrapped in Callable is passed, the implementation will get a wrapped model object during invocation of this method. In case a model wrapped in Future is passed, the implementation will *synchronously* get a wrapped model object during invocation of this method, assuming a 2 minutes timeout by default. If such a behaviour should be altered, developers are requested to provider their own implementation.
 
 public class DefaultToSoyDataConverter implements ToSoyDataConverter {
 
 	}
 
 			Matcher<PropertyDescriptorignorablePropertiesMatcher) {
 		this. = ignorablePropertiesMatcher;
 	}
 
 	public Optional<SoyMapDatatoSoyMap(final Object modelthrows Exception {
 		if (model == null) {
 			return Optional.absent();
 		}
 
 		return Optional.fromNullable(objectToSoyDataMap(model));
 	}
 
 	@SuppressWarnings("unchecked")
 	protected Map<String, ?> toSoyCompatibleMap(final Object obj)
 			throws Exception {
 		if (!(ret instanceof Map)) {
 			throw new IllegalArgumentException("Input should be a Map or POJO.");
 		}
 
 		return (Map<String, ?>) ret;
 	}
 
 	protected Object toSoyCompatibleObjects(Object objthrows Exception {
 		if (obj == null) {
 			return obj;
 		}
 
 		if (Primitives.isWrapperType(obj.getClass()) || obj instanceof String) {
 			return obj;
 		}
 
 		if (obj instanceof Map) {
 			@SuppressWarnings("unchecked")
 			Map<StringObjectmap = (Map<StringObject>) obj;
 			Map<StringObjectnewMap = new HashMap<StringObject>(map.size());
 			for (String key : map.keySet()) {
 				newMap.put(keytoSoyCompatibleObjects(map.get(key)));
 			}
			return newMap;
		}
		if (obj instanceof Iterable<?>) {
			List<Objectlist = Lists.newArrayList();
			for (Object subValue : ((Iterable<?>) obj)) {
				list.add(toSoyCompatibleObjects(subValue));
			}
			return list;
		}
		if (obj instanceof Callable) {
			final Callable<?> callable = (Callable<?>) obj;
			return toSoyCompatibleObjects(callable.call());
		}
		if (obj.getClass().isArray()) {
			return obj;
		}
		@SuppressWarnings("unchecked")
		Map<StringObjectpojoMap = (Map<StringObject>) pojoToMap(obj);
		Map<StringObjectnewMap = new HashMap<StringObject>(pojoMap.size());
		for (String key : pojoMap.keySet()) {
			newMap.put(keytoSoyCompatibleObjects(pojoMap.get(key)));
		}
		return newMap;
	}
	protected Map<String, ?> pojoToMap(final Object pojo) {
		Map<StringObjectmap = new HashMap<StringObject>();
		try {
			final BeanInfo beanInfo = Introspector.getBeanInfo(pojo.getClass());
			PropertyDescriptor[] propertyDescriptors = beanInfo
			for (PropertyDescriptor pd : propertyDescriptors) {
				if (!isIgnorable(pd)) {
					map.put(pd.getName(), pd.getReadMethod().invoke(pojo));
				}
			}
catch (Exception e) {
			throw new RuntimeException(e);
		}
		return map;
	}
	protected SoyMapData objectToSoyDataMap(Object objthrows Exception {
		if (obj == null) {
			return new SoyMapData();
		}
		if (obj instanceof SoyMapData) {
			return (SoyMapDataobj;
		}
		return new SoyMapData(toSoyCompatibleMap(obj));
	}
	protected boolean isIgnorable(PropertyDescriptor pd) {
	}
	private static class DefaultIgnorablePropertiesMatcher extends
		private static final long serialVersionUID = 0;
				"class""metaClass"));
		public boolean matches(PropertyDescriptor pd) {
			return pd.getReadMethod() == null
		}
	}
New to GrepCode? Check out our FAQ X