Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.cognifide.slice.core.internal.provider;
  
  /*
   * #%L
   * Slice - Core
   * $Id:$
   * $HeadURL:$
   * %%
   * Copyright (C) 2012 Cognifide Limited
  * %%
  * 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.
  * #L%
  */
 
 
 import java.util.List;
 
 
This class creates object or list of objects of given injectable type using Guice injector.

Author(s):
Witold Szczerba
RafaƂ Malinowski
 
 public class SliceModelProvider implements ModelProvider {
 
 	private static final Logger LOG = LoggerFactory.getLogger(SliceModelProvider.class);
 
 	private final Injector injector;
 
 	private final ContextScope contextScope;
 
 	private final ContextProvider contextProvider;
 
 
 
 	public SliceModelProvider(final Injector injectorfinal ContextScope contextScope,
 			final ClassToKeyMapper classToKeyMapperfinal ExecutionContextStack currentExecutionContext) {
 		this. = injector;
 		this. = contextScope;
 		this. = contextScope.getContextProvider();
 		this. = classToKeyMapper;
 		this. = currentExecutionContext;
 	}

 
 	public final <T> T get(final Class<T> typefinal String path) {
 		/*
 		 * This method is not synchronized on purpose, the only case where concurrency issues may occur is
 		 * when the contentPathContext variable is used from different threads, and since the
 		 * CurrentPathContext is request scoped it would mean multiple threads in same request which then is
 		 * against servlet specification.
 		 */
 		ExecutionContextImpl executionItem = new ExecutionContextImpl(path);
 		.debug("creating new instance of " + type.getName() + " from " + path);
 		return get(typeexecutionItem);
 	}

 
	public <T> T get(Class<T> typeResource resource) {
		ExecutionContextImpl executionItem = new ExecutionContextImpl(resource);
		.debug("creating new instance of " + type.getName() + " from resource: " + resource);
		return get(typeexecutionItem);
	}

	public Object get(String classNameString paththrows ClassNotFoundException {
		final Key<?> key = .getKey(className);
		if (null == key) {
			throw new ClassNotFoundException("key for class " + className + " not found");
		}
		ExecutionContextImpl executionItem = new ExecutionContextImpl(path);
		.debug("creating new instance for " + key.toString() + " from " + path);
		return get(keyexecutionItem);
	}
	@SuppressWarnings("unchecked")
	private <T> T get(Class<T> typeExecutionContextImpl executionItem) {
		return (T) get(Key.get(type), executionItem);
	}
	private Object get(Key<?> keyExecutionContextImpl executionItem) {
		final ContextProvider oldContextProvider = .getContextProvider();
		if ((executionItem.getResource() == null) && (executionItem.getPath() != null)) {
			executionItem.setPath(.getAbsolutePath(executionItem.getPath()));
		}
		try {
			return .getInstance(key);
finally {
			.setContextProvider(oldContextProvider);
		}
	}

	public final <T> List<T> getList(final Class<T> typefinal Iterator<Stringpaths) {
		final ArrayList<T> result = new ArrayList<T>();
		if (null == paths) {
			return result;
		}
		while (paths.hasNext()) {
			final String path = paths.next();
			final T model = get(typepath);
			result.add(model);
		}
		return result;
	}

	public final <T> List<T> getList(final Class<T> typefinal String[] paths) {
		if (null == paths) {
			return new ArrayList<T>();
		}
		return getList(type, Arrays.asList(paths).iterator());
	}
New to GrepCode? Check out our FAQ X