package is.idega.tools;
import java.io.*;
import java.util.*;
import java.lang.reflect.Method;
import com.idega.xml.XMLElement;
/**
* Title: idegaclasses
* Description:
* Copyright: Copyright (c) 2001
* Company: idega
* @author <a href="tryggvi@idega.is">Tryggvi Larusson</a>
* @version 1.0
*/
public class IBOServiceWizard extends EJBWizard {
//protected String beanClassSuffix="Bean";
public IBOServiceWizard(String className) {
super(className);
setRemoteInterfaceSuperInterface("com.idega.business.IBOService");
}
public IBOServiceWizard(Class entityClass) {
super(entityClass);
setLegacyIDO(true);
}
public String getBeanSuffix() {
return "Bean";
}
protected static String getClassName(String[] args) {
String className = args[0];
try{
if (className.endsWith(".java") || className.endsWith(".JAVA")) {
File javaFile = new File(className);
FileReader reader = new FileReader(javaFile);
LineNumberReader linereader = new LineNumberReader(new FileReader(javaFile));
String line;
String pack = "";
String clss = "";
int nr = 0;
while ((line = linereader.readLine()) != null) {
StringTokenizer tok = new StringTokenizer(line, " ;");
while (tok.hasMoreTokens()) {
String token = tok.nextToken();
if (token.equals("package")) {
if (tok.hasMoreTokens())
pack = tok.nextToken();
}
else if (token.equals("class")) {
if (tok.hasMoreTokens())
clss = tok.nextToken();
break;
}
//System.out.println("line"+nr++);
}
}
className = pack + "." + clss;
}
}
catch(Exception e)
{
e.printStackTrace();
}
return className;
}
public static void main(String[] args) throws Exception {
try {
String firstArg=args[0];
String className = getClassName(args);
IBOServiceWizard instance = new IBOServiceWizard(className);
if (firstArg.endsWith(".java") || firstArg.endsWith(".JAVA")) {
File javaFile = new File(firstArg);
instance.setWorkingDirectory(javaFile.getParentFile());
}
instance.doJavaFileCreate();
}
catch (java.lang.ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
System.out.println("IBOWizard: You have to supply a valid ClassName as an argument");
}
}
/**
* Overrided in sublcasses
* @param inst
*/
protected void setClassCreatorProperties(EJBWizardClassCreator inst) {
inst.setToThrowRemoteExceptions(true);
inst.setFactorySuperClass("com.idega.business.IBOHomeImpl");
inst.setHomeSuperInterface("com.idega.business.IBOHome");
}
public boolean finderMethodsAllowed() {
return false;
}
public String[] getInternalMethodImplementations(ClassIntrospector introspector) {
int length = 1;
String[] returningMethods = new String[length];
for (int i = 0; i < length; i++) {
String methodString = " protected Class getBeanInterfaceClass()";
methodString += "{\n";
methodString += " return " + introspector.getShortName() + ".class;";
methodString += "\n }\n\n";
returningMethods[i] = methodString;
}
return returningMethods;
}
public String[] getCreateMethodImplementations(ClassIntrospector introspector) {
String[] finderMethodStrings = introspector.getCreateMethods();
Method[] methods = introspector.getCreateMethodsArray();
int length = methods.length;
length += 1;
String[] returningMethods = new String[length];
int i = 0;
for (i = 0; i < methods.length; i++) {
Method method = methods[i];
String methodString = finderMethodStrings[i] + "{\n";
//methodString += "\tcom.idega.business.IBOService service = this.idoCheckOutPooledEntity();\n";
methodString += "\tcom.idega.business.IBOService service = this.iboCheckOutPooledBean();\n";
methodString += "\t((" + introspector.getEntityBeanName() + ")service)." + method.getName() + "(" + introspector.getParametersInForMethod(method) + ");\n";
//methodString += "\t(("+introspector.getEntityBeanName()+")entity)."+introspector.getPostCreateMethodName(method.getName())+"("+introspector.getParametersInForMethod(method)+");\n";
//methodString += "\tthis.idoCheckInPooledEntity(entity);\n";
methodString += "\treturn((" + introspector.getEntityBeanName() + ")service);\n";
methodString += "\tcatch(Exception e){\n\t\tthrow new com.idega.data.IDOCreateException(e);\n\t}\n";
methodString += "}\n";
returningMethods[i] = methodString;
}
String codeString = " public " + introspector.getShortName() + " create() throws javax.ejb.CreateException";
codeString += "{\n";
codeString += " return (" + introspector.getShortName() + ") super.createIBO();";
codeString += "\n }\n\n";
returningMethods[i] = codeString;
i++;
return returningMethods;
}
protected String getSessionBeanType(EJBWizardClassCreator classCreator){
return "Stateless";
}
protected XMLElement getBeanspecificElement(EJBWizardClassCreator classCreator){
ClassIntrospector introspector = classCreator.getClassIntrospector();
String beanName = introspector.getEntityBeanName();
String beanNameWithPackage = introspector.getPackage() + "." + beanName;
String ejbName = beanNameWithPackage;
String homeNameWithPackage = introspector.getPackage() + "." + classCreator.getHomeName();
String interfaceNameWithPackage = introspector.getPackage() + "." + introspector.getShortName();
XMLElement entityElement = new XMLElement("session");
addBeanGeneralElements(entityElement,"",ejbName,beanNameWithPackage,homeNameWithPackage,interfaceNameWithPackage);
XMLElement typeElement = new XMLElement("session-type");
String type = getSessionBeanType(classCreator);
typeElement.addContent(type);
entityElement.addContent(typeElement);
XMLElement transactionTypeElement = new XMLElement("transaction-type");
String transactionType = "Container";
transactionTypeElement.addContent(transactionType);
entityElement.addContent(transactionTypeElement);
XMLElement reentrantElement = new XMLElement("reentrant");
boolean isReentrant = true;
reentrantElement.addContent(String.valueOf(isReentrant));
entityElement.addContent(reentrantElement);
return entityElement;
}
}