1 49 package com.ivata.groupware.container.persistence.hibernate; 50 51 import java.io.Serializable ; 52 import java.util.HashMap ; 53 import java.util.List ; 54 import java.util.Map ; 55 56 62 public class HibernateQueryFactory implements Serializable { 63 67 private Map queries; 68 71 private Map queryArguments; 72 73 77 public HibernateQueryFactory(Map queries, Map queryArguments) { 78 super(); 79 this.queries = queries; 80 this.queryArguments = queryArguments; 81 } 82 83 86 public HibernateQuery generateQuery(final String name, 87 final Map arguments) { 88 String query = (String ) queries.get(name); 89 if (query == null) { 90 throw new NullPointerException ("Error in HibernateQueryFactory: no query called '" 91 + name 92 +"'"); 93 } 94 return new HibernateQuery(query, arguments); 95 } 96 97 100 public HibernateQuery generateQuery(final String name, 101 final Object [] arguments) { 102 Object argumentNamesObject = queryArguments.get(name); 103 String [] argumentNames; 104 if (argumentNamesObject instanceof List ) { 105 argumentNames = (String []) ((List ) argumentNamesObject) 106 .toArray(new String [] {}); 107 } else { 108 assert (argumentNamesObject instanceof String []); 109 argumentNames = (String []) argumentNamesObject; 110 } 111 if (argumentNames == null) { 112 throw new NullPointerException ("Error in HibernateQueryFactory: no query called '" 113 + name 114 +"'"); 115 } 116 if(arguments.length > argumentNames.length) { 117 throw new RuntimeException ("Error in HibernateQueryFactory: too many arguments (" 118 + arguments.length 119 + ") provided - expected " 120 + argumentNames.length); 121 } 122 Map argumentMap = new HashMap (); 123 for (int i = 0; i < arguments.length; i++) { 124 String argumentName = argumentNames[i]; 125 Object argument = arguments[i]; 126 argumentMap.put(argumentName, argument); 127 } 128 return generateQuery(name, argumentMap); 129 } 130 } 131 | Popular Tags |