KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > caucho > ejb > cfg > EjbAmberFindMethod


1 /*
2  * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved
3  *
4  * This file is part of Resin(R) Open Source
5  *
6  * Each copy or derived work must preserve the copyright notice and this
7  * notice unmodified.
8  *
9  * Resin Open Source is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * Resin Open Source is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
17  * of NON-INFRINGEMENT. See the GNU General Public License for more
18  * details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Resin Open Source; if not, write to the
22  *
23  * Free Software Foundation, Inc.
24  * 59 Temple Place, Suite 330
25  * Boston, MA 02111-1307 USA
26  *
27  * @author Scott Ferguson
28  */

29
30 package com.caucho.ejb.cfg;
31
32 import com.caucho.bytecode.JMethod;
33 import com.caucho.config.ConfigException;
34 import com.caucho.ejb.gen.AmberQueryMethod;
35 import com.caucho.ejb.gen.ViewClass;
36 import com.caucho.ejb.ql.EjbSelectQuery;
37 import com.caucho.ejb.ql.QLParser;
38 import com.caucho.java.gen.BaseMethod;
39 import com.caucho.util.L10N;
40
41 /**
42  * Configuration for find method.
43  */

44 public class EjbAmberFindMethod extends EjbMethod {
45   private static final L10N L = new L10N(EjbAmberFindMethod.class);
46
47   private String JavaDoc _query;
48   private String JavaDoc _location;
49
50   private boolean _queryLoadsBean = true;
51   
52   /**
53    * Creates a new method.
54    *
55    * @param view the owning view
56    * @param apiMethod the method from the view
57    * @param implMethod the method from the implementation
58    */

59   public EjbAmberFindMethod(EjbView view, JMethod apiMethod,
60                 String JavaDoc query, String JavaDoc location)
61     throws ConfigException
62   {
63     super(view, apiMethod, null);
64
65     if (apiMethod == null)
66       throw new NullPointerException JavaDoc();
67
68     _query = query;
69     _location = location;
70   }
71
72   /**
73    * Sets true if the query loads the bean.
74    */

75   public void setQueryLoadsBean(boolean queryLoadsBean)
76   {
77     _queryLoadsBean = queryLoadsBean;
78   }
79
80   /**
81    * Assembles the method.
82    */

83   public BaseMethod assemble(ViewClass viewAssembler, String JavaDoc fullClassName)
84     throws ConfigException
85   {
86     JMethod apiMethod = getApiMethod();
87     EjbEntityBean bean = (EjbEntityBean) getView().getBean();
88     
89     QLParser parser = new QLParser(bean,
90                     apiMethod.getName(), apiMethod,
91                     apiMethod.getReturnType());
92
93     if (_location != null)
94       parser.setLocation(_location);
95
96     EjbSelectQuery query = (EjbSelectQuery) parser.parseQuery(_query);
97
98     String JavaDoc returnEJB = parser.getReturnEJB();
99
100     if (returnEJB == null || ! returnEJB.equals(bean.getEJBName()))
101       throw new ConfigException(L.l("{0}: '{1}' query must return collection of '{2}'",
102                     bean.getEJBClass().getName(),
103                     apiMethod.getName(),
104                     bean.getLocal().getName()));
105     
106     AmberQueryMethod queryMethod = new AmberQueryMethod(bean,
107                             getApiMethod(),
108                             fullClassName,
109                             getViewPrefix(),
110                             query);
111
112     queryMethod.setQueryLoadsBean(_queryLoadsBean);
113
114     return queryMethod;
115   }
116 }
117
Popular Tags