| /******************************************************************************* |
| * Copyright (c) 2003, 2004 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| /* |
| * Created on Apr 1, 2004 |
| * |
| * To change the template for this generated file go to |
| * Window - Preferences - Java - Code Generation - Code and Comments |
| */ |
| package org.eclipse.jst.j2ee.internal.web.operations; |
| |
| import java.lang.reflect.InvocationTargetException; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.emf.codegen.jet.JETException; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jst.common.internal.annotations.controller.AnnotationsController; |
| import org.eclipse.jst.common.internal.annotations.controller.AnnotationsControllerManager; |
| import org.eclipse.jst.j2ee.internal.J2EEEditModel; |
| import org.eclipse.jst.j2ee.internal.common.operations.NewJavaClassOperation; |
| import org.eclipse.jst.j2ee.internal.project.WTPJETEmitter; |
| import org.eclipse.jst.j2ee.internal.web.plugin.WebPlugin; |
| import org.eclipse.wst.common.frameworks.internal.enablement.nonui.WFTWrappedException; |
| import org.eclipse.wst.common.frameworks.internal.operations.WTPOperationDataModel; |
| import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel; |
| |
| import com.ibm.wtp.common.logger.proxy.Logger; |
| |
| /** |
| * @author jialin |
| * |
| * To change the template for this generated type comment go to Window - Preferences - Java - Code |
| * Generation - Code and Comments |
| */ |
| public class NewServletClassOperation extends NewJavaClassOperation { |
| protected static final String TO_STRING = "toString"; //$NON-NLS-1$ |
| protected EditModel editModel = null; |
| |
| /** |
| * @param dataModel |
| */ |
| public NewServletClassOperation(WTPOperationDataModel dataModel) { |
| super(dataModel); |
| //EditModel editModel = |
| // J2EEWebNatureRuntime.getEditModelForProject(dataModel.getTargetProject(),this); |
| //EditModel editModel = model.getEditModelForRead(this); |
| //setEditModel(editModel); |
| } |
| |
| protected boolean implementImplementedMethod(IMethod method) { |
| NewServletClassDataModel model = (NewServletClassDataModel) this.operationDataModel; |
| String methodName = method.getElementName(); |
| if (methodName.equals("init")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.INIT); |
| } else if (methodName.equals("toString")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.TO_STRING); |
| } else if (methodName.equals("getServletInfo")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.GET_SERVLET_INFO); |
| } else if (methodName.equals("doPost")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.DO_POST); |
| } else if (methodName.equals("doPut")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.DO_PUT); |
| } else if (methodName.equals("doDelete")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.DO_DELETE); |
| } else if (methodName.equals("destroy")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.DESTROY); |
| } else if (methodName.equals("doGet")) { //$NON-NLS-1$ |
| return model.getBooleanProperty(NewServletClassDataModel.DO_GET); |
| } |
| return false; |
| } |
| |
| protected String getUserDefinedMethodStubs(IType superClassType) { |
| // toString method is not found in the getMethods of the |
| // IType and hence extra handling is needed to generate toString() |
| return generateToString(superClassType); |
| } |
| |
| private String generateToString(IType superClassType) { |
| StringBuffer sb = new StringBuffer(); |
| NewServletClassDataModel model = (NewServletClassDataModel) this.operationDataModel; |
| if (model.getBooleanProperty(NewServletClassDataModel.TO_STRING)) { |
| try { |
| IMethod[] methods = superClassType.getMethods(); |
| // check whether toString is already generated |
| for (int j = 0; j < methods.length; j++) { |
| IMethod method = methods[j]; |
| if (method.getElementName().equals(TO_STRING)) |
| return EMPTY_STRING; |
| } |
| // generate stub for toString method |
| String name = TO_STRING; |
| // Java doc |
| sb.append("\t/* (non-Java-doc)"); //$NON-NLS-1$ |
| sb.append(lineSeparator); |
| sb.append("\t * @see "); //$NON-NLS-1$ |
| sb.append(JAVA_LANG_OBJECT + POUND + name + OPEN_PAR); |
| sb.append(CLOSE_PAR); |
| sb.append(lineSeparator); |
| sb.append("\t */"); //$NON-NLS-1$ |
| sb.append(lineSeparator); |
| // access |
| sb.append(TAB); |
| sb.append(PUBLIC); |
| |
| // return type |
| String returnType = "String"; //$NON-NLS-1$ |
| sb.append(returnType); |
| sb.append(SPACE); |
| // name |
| sb.append(name); |
| // Parameters |
| sb.append(OPEN_PAR + CLOSE_PAR); |
| sb.append(SPACE + OPEN_BRA); |
| sb.append(lineSeparator); |
| // method body |
| sb.append(TODO_COMMENT); |
| sb.append(lineSeparator); |
| sb.append(RETURN_NULL); |
| sb.append(lineSeparator); |
| // method body end |
| sb.append(TAB + CLOSE_BRA); |
| sb.append(lineSeparator); |
| sb.append(lineSeparator); |
| |
| } catch (JavaModelException e) { |
| Logger.getLogger().log(e); |
| } |
| } |
| return sb.toString(); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperation#execute(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { |
| IFolder sourceFolder = createJavaSourceFolder(); |
| IPackageFragment pack = createJavaPackage(); |
| // if using annotations |
| if (((NewServletClassDataModel) getOperationDataModel()).isAnnotated()) |
| generateUsingTemplates(monitor, pack); |
| else |
| createJavaFile(sourceFolder, pack); |
| } |
| |
| /** |
| * @param monitor |
| */ |
| private void generateUsingTemplates(IProgressMonitor monitor, IPackageFragment fragment) throws WFTWrappedException, CoreException { |
| CreateServletTemplateModel tempModel = createTemplateModel(); |
| String source; |
| try { |
| source = generateTemplateSource(tempModel, monitor); |
| } catch (JETException e) { |
| throw new WFTWrappedException(e); |
| } |
| if (fragment != null) { |
| String javaFileName = tempModel.getServletClassName() + ".java"; //$NON-NLS-1$ |
| ICompilationUnit cu = fragment.getCompilationUnit(javaFileName); |
| if (cu == null || !cu.exists()) |
| cu = fragment.createCompilationUnit(javaFileName, source, true, monitor); |
| IFile aFile = (IFile) cu.getResource(); |
| AnnotationsController controller = AnnotationsControllerManager.INSTANCE.getAnnotationsController(this.editModel.getProject()); |
| if (controller != null) |
| controller.process(aFile); |
| ((J2EEEditModel)this.editModel).getWorkingCopy(cu, true); //Track CU. |
| } |
| } |
| |
| private String generateTemplateSource(CreateServletTemplateModel tempModel, IProgressMonitor monitor) throws JETException { |
| String templateURI = "platform:/plugin/" + WebPlugin.PLUGIN_ID + "/templates/" + getTemplateFileName(); //$NON-NLS-1$ //$NON-NLS-2$ |
| WTPJETEmitter emitter = new WTPJETEmitter(templateURI, this.getClass().getClassLoader()); |
| emitter.setIntelligentLinkingEnabled(true); |
| emitter.addVariable("WEB_PLUGIN", WebPlugin.PLUGIN_ID); //$NON-NLS-1$ |
| return emitter.generate(monitor, new Object[]{tempModel}); |
| } |
| |
| protected CreateServletTemplateModel createTemplateModel() { |
| CreateServletTemplateModel model = new CreateServletTemplateModel((NewServletClassDataModel) getOperationDataModel()); |
| return model; |
| } |
| |
| protected String getTemplateFileName() { |
| return "servletXDoclet.javajet"; //$NON-NLS-1$ |
| } |
| |
| /** |
| * @param editModel |
| * The editModel to set. |
| */ |
| public void setEditModel(EditModel editModel) { |
| this.editModel = editModel; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.wst.common.frameworks.internal.operation.WTPOperation#dispose(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| protected void dispose(IProgressMonitor pm) { |
| //if (editModel != null) |
| // editModel.releaseAccess(this); |
| super.dispose(pm); |
| } |
| } |