001: /*
002: * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved
003: *
004: * This file is part of Resin(R) Open Source
005: *
006: * Each copy or derived work must preserve the copyright notice and this
007: * notice unmodified.
008: *
009: * Resin Open Source is free software; you can redistribute it and/or modify
010: * it under the terms of the GNU General Public License as published by
011: * the Free Software Foundation; either version 2 of the License, or
012: * (at your option) any later version.
013: *
014: * Resin Open Source is distributed in the hope that it will be useful,
015: * but WITHOUT ANY WARRANTY; without even the implied warranty of
016: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
017: * of NON-INFRINGEMENT. See the GNU General Public License for more
018: * details.
019: *
020: * You should have received a copy of the GNU General Public License
021: * along with Resin Open Source; if not, write to the
022: *
023: * Free Software Foundation, Inc.
024: * 59 Temple Place, Suite 330
025: * Boston, MA 02111-1307 USA
026: *
027: * @author Scott Ferguson
028: */
029:
030: package com.caucho.ejb.gen21;
031:
032: import com.caucho.ejb.cfg.*;
033: import com.caucho.java.JavaWriter;
034: import com.caucho.java.gen.BaseMethod;
035: import com.caucho.java.gen.MethodCallChain;
036: import com.caucho.util.L10N;
037:
038: import java.io.IOException;
039: import java.lang.reflect.*;
040:
041: /**
042: * Generates the skeleton for the find method.
043: */
044: public class EntityFindMethod extends BaseMethod {
045: private static L10N L = new L10N(EntityFindMethod.class);
046:
047: private ApiMethod _apiMethod;
048: private String _contextClassName;
049: private String _prefix;
050:
051: public EntityFindMethod(ApiMethod apiMethod, ApiMethod implMethod,
052: String contextClassName, String prefix) {
053: super (apiMethod.getMethod(),
054: (implMethod != null ? new MethodCallChain(implMethod
055: .getMethod()) : null));
056:
057: _apiMethod = apiMethod;
058: _contextClassName = contextClassName;
059: _prefix = prefix;
060: }
061:
062: /**
063: * Gets the parameter types
064: */
065: public Class[] getParameterTypes() {
066: return _apiMethod.getParameterTypes();
067: }
068:
069: /**
070: * Gets the return type.
071: */
072: public Class getReturnType() {
073: return _apiMethod.getReturnType();
074: }
075:
076: /**
077: * Prints the create method
078: *
079: * @param method the create method
080: */
081: public void generateCall(JavaWriter out, String[] args)
082: throws IOException {
083: Class keyType;
084:
085: if (getCall() != null) {
086: keyType = getCall().getReturnType();
087: out.printClass(keyType);
088: out.print(" key;");
089: getCall().generateCall(out, "key", "bean", args);
090: } else {
091: keyType = getParameterTypes()[0];
092: out.printClass(keyType);
093: out.print(" key;");
094: out.println("key = " + args[0] + ";");
095: }
096:
097: out.println();
098:
099: if ("long".equals(keyType.getName()))
100: out.println("Object okey = new Integer(key);");
101: else if ("int".equals(keyType.getName()))
102: out.println("Object okey = new Integer(key);");
103: else
104: out.println("Object okey = key;");
105:
106: out.print("return (" + getReturnType().getName() + ") ");
107: out.print("_server.getContext(okey, false)");
108:
109: if ("RemoteHome".equals(_prefix))
110: out.println(".getEJBObject();");
111: else if ("LocalHome".equals(_prefix))
112: out.println(".getEJBLocalObject();");
113: else
114: throw new IOException(L.l(
115: "trying to create unknown type {0}", _prefix));
116: }
117: }
|