Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.WazaBe.HoloEverywhere.preference;
  
  import java.util.HashMap;
  
  
 
 abstract class GenericInflater<T, P extends GenericInflater.Parent<T>> {
 	public interface Factory<T> {
 		public T onCreateItem(String nameContext contextAttributeSet attrs);
 	}
 
 	private static class FactoryMerger<T> implements Factory<T> {
 		private final Factory<T> mF1mF2;
 
 		FactoryMerger(Factory<T> f1Factory<T> f2) {
 			 = f1;
 			 = f2;
 		}
 
 		public T onCreateItem(String nameContext contextAttributeSet attrs) {
 			T v = .onCreateItem(namecontextattrs);
 			if (v != null) {
 				return v;
 			}
 			return .onCreateItem(namecontextattrs);
 		}
 	}
 
 	public interface Parent<T> {
 		public void addItemFromInflater(T child);
 	}
 
 	private static final Class<?>[] mConstructorSignature = new Class[] {
 			Context.classAttributeSet.class };
 
 	private static final HashMap<StringConstructor<?>> sConstructorMap = new HashMap<StringConstructor<?>>();
 
 	private final boolean DEBUG = false;
 
 	private final Object[] mConstructorArgs = new Object[2];
 
 	protected final Context mContext;
 
 
 	private Factory<T> mFactory;
 
 	// these are optional, set by the caller
 	private boolean mFactorySet;

Create a new inflater instance associated with a particular Context.

Parameters:
context The Context in which this inflater will create its items; most importantly, this supplies the theme from which the default values for their attributes are retrieved.
 
 	protected GenericInflater(Context context) {
 		 = context;
 	}

Create a new inflater instance that is a copy of an existing inflater, optionally with its Context changed. For use in implementing cloneInContext(android.content.Context).

Parameters:
original The original inflater to copy.
newContext The new Context to use.
 
 	protected GenericInflater(GenericInflater<T, P> originalContext newContext) {
 		 = newContext;
 		 = original.mFactory;
 	}
 
 	public abstract GenericInflater<T, P> cloneInContext(Context newContext);
 
 	@SuppressWarnings("unchecked")
 	public final T createItem(String nameString prefixAttributeSet attrs)
 		Constructor<?> constructor = .get(name);
 
 		try {
 			if (constructor == null) {
 						prefix != null ? prefix + name : name);
 				constructor = clazz.getConstructor();
				.put(nameconstructor);
			}
			args[1] = attrs;
			return (T) constructor.newInstance(args);
catch (NoSuchMethodException e) {
					attrs.getPositionDescription() + ": Error inflating class "
							+ (prefix != null ? prefix + name : name));
			ie.initCause(e);
			throw ie;
catch (Exception e) {
					attrs.getPositionDescription() + ": Error inflating class "
constructor.toString());
			ie.initCause(e);
			throw ie;
		}
	}
	private final T createItemFromTag(XmlPullParser parserString name,
			AttributeSet attrs) {
		if () {
			..println("******** Creating item: " + name);
		}
		try {
item =  == null ? null : .onCreateItem(name,
					attrs);
			if (item == null) {
				if (-1 == name.indexOf('.')) {
					item = onCreateItem(nameattrs);
else {
					item = createItem(namenullattrs);
				}
			}
			if () {
				..println("Created item is: " + item);
			}
			return item;
catch (InflateException e) {
			throw e;
catch (ClassNotFoundException e) {
					attrs.getPositionDescription() + ": Error inflating class "
name);
			ie.initCause(e);
			throw ie;
catch (Exception e) {
					attrs.getPositionDescription() + ": Error inflating class "
name);
			ie.initCause(e);
			throw ie;
		}
	}
	public Context getContext() {
		return ;
	}
	}
	public final Factory<T> getFactory() {
		return ;
	}
	public T inflate(int resource, P root) {
		return inflate(resourcerootroot != null);
	}
	public T inflate(int resource, P rootboolean attachToRoot) {
		if () {
			..println("INFLATING from resource: " + resource);
		}
		try {
			return inflate(parserrootattachToRoot);
finally {
			parser.close();
		}
	}
	public T inflate(XmlPullParser parser, P root) {
		return inflate(parserrootroot != null);
	}
	@SuppressWarnings("unchecked")
	public T inflate(XmlPullParser parser, P rootboolean attachToRoot) {
		synchronized () {
			final AttributeSet attrs = Xml.asAttributeSet(parser);
result = (T) root;
			try {
				// Look for the root node.
				int type;
				while ((type = parser.next()) != .
						&& type != .) {
					;
				}
				if (type != .) {
": No start tag found!");
				}
				if () {
					..println("**************************");
					..println("Creating root: " + parser.getName());
					..println("**************************");
				}
				// Temp is the root that was found in the xml
xmlRoot = createItemFromTag(parserparser.getName(), attrs);
				result = (T) onMergeRoots(rootattachToRoot, (P) xmlRoot);
				if () {
					..println("-----> start inflating children");
				}
				// Inflate all children under temp
				rInflate(parserresultattrs);
				if () {
					..println("-----> done inflating children");
				}
catch (InflateException e) {
				throw e;
catch (XmlPullParserException e) {
				ex.initCause(e);
				throw ex;
catch (IOException e) {
						parser.getPositionDescription() + ": " + e.getMessage());
				ex.initCause(e);
				throw ex;
			}
			return result;
		}
	}
	protected boolean onCreateCustomFromTag(XmlPullParser parser, T parent,
			final AttributeSet attrsthrows XmlPullParserException {
		return false;
	}
	protected T onCreateItem(String nameAttributeSet attrs)
		return createItem(nameattrs);
	}
	protected P onMergeRoots(P givenRootboolean attachToGivenRoot, P xmlRoot) {
		return xmlRoot;
	}
	@SuppressWarnings("unchecked")
	private void rInflate(XmlPullParser parser, T parent,
			final AttributeSet attrsthrows XmlPullParserException,
		final int depth = parser.getDepth();
		int type;
		while (((type = parser.next()) != . || parser
				.getDepth() > depth) && type != .) {
			if (type != .) {
				continue;
			}
			if (onCreateCustomFromTag(parserparentattrs)) {
				continue;
			}
			if () {
				..println("Now inflating tag: " + parser.getName());
			}
			String name = parser.getName();
item = createItemFromTag(parsernameattrs);
			if () {
				..println("Creating params from parent: " + parent);
			}
			((P) parent).addItemFromInflater(item);
			if () {
				..println("-----> start inflating children");
			}
			rInflate(parseritemattrs);
			if () {
				..println("-----> done inflating children");
			}
		}
	}
	public void setDefaultPackage(String defaultPackage) {
		 = defaultPackage;
	}
	public void setFactory(Factory<T> factory) {
		if () {
			throw new IllegalStateException(""
"A factory has already been set on this inflater");
		}
		if (factory == null) {
			throw new NullPointerException("Given factory can not be null");
		}
		 = true;
		if ( == null) {
			 = factory;
else {
			 = new FactoryMerger<T>(factory);
		}
	}
New to GrepCode? Check out our FAQ X