## Access Modifiers
snippet po
	protected ${0}
snippet pu
	public ${0}
snippet pr
	private ${0}
##
## Annotations
snippet before
	@Before
	static void ${1:intercept}(${2:args}) { ${0} }
snippet mm
	@ManyToMany
	${0}
snippet mo
	@ManyToOne
	${0}
snippet om
	@OneToMany${1:(cascade=CascadeType.ALL)}
	${0}
snippet oo
	@OneToOne
	${1}
##
## Basic Java packages and import
snippet im
	import ${0}
snippet j.b
	java.beans.
snippet j.i
	java.io.
snippet j.m
	java.math.
snippet j.n
	java.net.
snippet j.u
	java.util.
##
## Class
snippet cl
	class ${1:`vim_snippets#Filename("$1", "untitled")`} ${0}
snippet pcl
	public class ${1:`vim_snippets#Filename("$1", "untitled")`} ${0}
snippet in
	interface ${1:`vim_snippets#Filename("$1", "untitled")`} ${2:extends Parent}
snippet tc
	public class ${1:`vim_snippets#Filename("$1")`} extends ${0:TestCase}
##
## Class Enhancements
snippet ext
	extends ${0}
snippet imp
	implements ${0}
##
## Comments
snippet /*
	/*
	 * ${0}
	 */
##
## Constants
snippet co
	static public final ${1:String} ${2:var} = ${3};
snippet cos
	static public final String ${1:var} = "${2}";
##
## Control Statements
snippet case
	case ${1}:
		${0}
snippet def
	default:
		${0}
snippet el
	else
snippet eif
	else if (${1}) ${0}
snippet if
	if (${1}) ${0}
snippet sw
	switch (${1}) {
		${0}
	}
##
## Create a Method
snippet m
	${1:void} ${2:method}(${3}) ${4:throws }
##
## Create a Variable
snippet v
	${1:String} ${2:var}${3: = null}${4};
##
## Declaration for ArrayList
snippet d.al
	List<${1:Object}> ${2:list} = new ArrayList<$1>();${0}
## Declaration for HashMap
snippet d.hm
	Map<${1:Object}, ${2:Object}> ${3:map} = new HashMap<$1, $2>();${0}
## Declaration for HashSet
snippet d.hs
	Set<${1:Object}> ${2:set} = new HashSet<$1>();${0}
## Declaration for Stack
snippet d.st
	Stack<${1:Object}> ${2:stack} = new Stack<$1>();${0}
##
## Singleton Pattern
snippet singlet
	private static class Holder {
		private static final ${1:`vim_snippets#Filename("$1")`} INSTANCE = new $1();
	}

	private $1() { }

	public static $1 getInstance() {
		return Holder.INSTANCE;
	}
##
## Enhancements to Methods, variables, classes, etc.
snippet ab
	abstract ${0}
snippet fi
	final ${0}
snippet st
	static ${0}
snippet sy
	synchronized ${0}
##
## Error Methods
snippet err
	System.err.print("${0:Message}");
snippet errf
	System.err.printf("${1:Message}", ${0:exception});
snippet errln
	System.err.println("${0:Message}");
##
## Exception Handling
snippet as
	assert ${1:test} : "${2:Failure message}";
snippet ae
	assertEquals("${1:Failure message}", ${2:expected}, ${3:actual});
snippet aae
	assertArrayEquals("${1:Failure message}", ${2:expecteds}, ${3:actuals});
snippet af
	assertFalse("${1:Failure message}", ${2:condition});
snippet at
	assertTrue("${1:Failure message}", ${2:condition});
snippet an
	assertNull("${1:Failure message}", ${2:object});
snippet ann
	assertNotNull("${1:Failure message}", ${2:object});
snippet ass
	assertSame("${1:Failure message}", ${2:expected}, ${3:actual});
snippet asns
	assertNotSame("${1:Failure message}", ${2:expected}, ${3:actual});
snippet fa
	fail("${1:Failure message}");
snippet ca
	catch(${1:Exception} ${2:e}) ${0}
snippet thr
	throw ${0}
snippet ths
	throws ${0}
snippet try
	try {
		${0}
	} catch(${1:Exception} ${2:e}) {
	}
snippet tryf
	try {
		${0}
	} catch(${1:Exception} ${2:e}) {
	} finally {
	}
##
## Find Methods
snippet findall
	List<${1:listName}> ${2:items} = ${1}.findAll();
snippet findbyid
	${1:var} ${2:item} = ${1}.findById(${3});
##
## Javadocs
snippet /**
	/**
	 * ${0}
	 */
snippet @au
	@author `system("grep \`id -un\` /etc/passwd | cut -d \":\" -f5 | cut -d \",\" -f1")`
snippet @br
	@brief ${0:Description}
snippet @fi
	@file ${0:`vim_snippets#Filename("$1")`}.java
snippet @pa
	@param ${0:param}
snippet @re
	@return ${0:param}
##
## Logger Methods
snippet debug
	Logger.debug(${1:param});
snippet error
	Logger.error(${1:param});
snippet info
	Logger.info(${1:param});
snippet warn
	Logger.warn(${1:param});
##
## Loops
snippet enfor
	for (${1} : ${2}) ${0}
snippet for
	for (${1}; ${2}; ${3}) ${0}
snippet wh
	while (${1}) ${0}
##
## Main method
snippet main
	public static void main (String[] args) {
		${0}
	}
##
## Print Methods
snippet print
	System.out.print("${0:Message}");
snippet printf
	System.out.printf("${1:Message}", ${0:args});
snippet println
	System.out.println(${0});
snippet printlna
	System.out.println(Arrays.toString(${0}));
##
## Render Methods
snippet ren
	render(${1:param});
snippet rena
	renderArgs.put("${1}", ${2});
snippet renb
	renderBinary(${1:param});
snippet renj
	renderJSON(${1:param});
snippet renx
	renderXml(${1:param});
##
## Setter and Getter Methods
snippet set
	${1:public} void set${3:}(${2:String} ${0:}){
		this.$4 = $4;
	}
snippet get
	${1:public} ${2:String} get${3:}(){
		return this.${0:};
	}
##
## Terminate Methods or Loops
snippet re
	return ${0}
snippet br
	break;
##
## Test Methods
snippet t
	public void test${1:Name}() throws Exception {
		${0}
	}
snippet test
	@Test
	public void test${1:Name}() throws Exception {
		${0}
	}
##
## Utils
snippet Sc
	Scanner
##
## Miscellaneous
snippet action
	public static void ${1:index}(${2:args}) { ${0} }
snippet rnf
	notFound(${1:param});
snippet rnfin
	notFoundIfNull(${1:param});
snippet rr
	redirect(${1:param});
snippet ru
	unauthorized(${1:param});
snippet unless
	(unless=${1:param});