org.jboss.tools.ws.jaxws.ui.commands.ServiceCreationCommand.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.ws.jaxws.ui.commands.ServiceCreationCommand.java

Source

/******************************************************************************* 
 * Copyright (c) 2008 - 2014 Red Hat, Inc. and others. 
 * Distributed under license by Red Hat, Inc. All rights reserved. 
 * This program is 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: 
 * Red Hat, Inc. - initial API and implementation 
 ******************************************************************************/
package org.jboss.tools.ws.jaxws.ui.commands;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.jboss.tools.ws.jaxws.core.data.ServiceModel;
import org.jboss.tools.ws.jaxws.ui.JBossJAXWSUIPlugin;
import org.jboss.tools.ws.jaxws.ui.utils.JBossWSCreationUtils;

public class ServiceCreationCommand extends AbstractDataModelOperation {

    private ServiceModel model;
    private IResource resource;

    public static final String LINE_SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$

    public ServiceCreationCommand(ServiceModel model) {
        this.model = model;
    }

    public IResource getResource() {
        return this.resource;
    }

    @Override
    public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
        IJavaProject project = model.getJavaProject();

        // find the class, make sure it's in the project and open if we find it
        if (model.getServiceClasses() != null && model.getServiceClasses().size() == 1) {
            String clazzName = model.getServiceClasses().get(0);
            IResource test = findClass(project, clazzName);
            if (test != null) {
                this.resource = test;
            } else {
                ICompilationUnit createdClass = createJavaClass(model.getCustomPackage(),
                        JBossWSCreationUtils.classNameFromQualifiedName(model.getServiceClasses().get(0)), project);
                if (createdClass != null) {
                    this.resource = createdClass.getResource();
                }
            }
        }

        return null;
    }

    public IResource findClass(IJavaProject project, String className) {
        try {
            IType type = project.findType(className);
            if (type != null) {
                if (type.getResource() != null)
                    return type.getResource();
            }
        } catch (JavaModelException e) {
            e.printStackTrace();
        }
        return null;
    }

    private ICompilationUnit createJavaClass(String packageName, String className, IJavaProject project) {
        try {
            IPath srcPath = new Path(JBossWSCreationUtils.getJavaProjectSrcLocation(project.getProject()));
            srcPath = project.getPath().append(srcPath.makeRelativeTo(project.getProject().getLocation()));
            IPackageFragmentRoot root = project.findPackageFragmentRoot(srcPath);
            if (packageName == null) {
                packageName = ""; //$NON-NLS-1$
            }
            IPackageFragment pkg = root.createPackageFragment(packageName, false, null);
            ICompilationUnit wrapperCls = pkg.createCompilationUnit(className + ".java", "", true, null); //$NON-NLS-1$//$NON-NLS-2$
            if (!packageName.equals("")) { //$NON-NLS-1$
                wrapperCls.createPackageDeclaration(packageName, null);
            }

            StringBuffer clsContent = new StringBuffer();
            clsContent.append("@WebService()").append(LINE_SEPARATOR); //$NON-NLS-1$
            clsContent.append("public class ").append(className).append(" {" + LINE_SEPARATOR); //$NON-NLS-1$ //$NON-NLS-2$
            clsContent.append("}").append(LINE_SEPARATOR); //$NON-NLS-1$
            wrapperCls.createType(clsContent.toString(), null, true, null);

            wrapperCls.createImport("javax.jws.WebMethod", null, null); //$NON-NLS-1$
            wrapperCls.createImport("javax.jws.WebService", null, null); //$NON-NLS-1$

            IType serviceClsType = wrapperCls.findPrimaryType();
            clsContent = new StringBuffer();
            clsContent.append("@WebMethod()"); //$NON-NLS-1$
            clsContent.append(LINE_SEPARATOR);
            clsContent.append("public String sayHello(String name) {"); //$NON-NLS-1$
            clsContent.append(LINE_SEPARATOR);
            clsContent.append("    System.out.println(\"Hello: \" + name);"); //$NON-NLS-1$
            clsContent.append(LINE_SEPARATOR);
            clsContent.append("    return \"Hello \" + name + \"!\";"); //$NON-NLS-1$
            clsContent.append(LINE_SEPARATOR);
            clsContent.append("}"); //$NON-NLS-1$
            serviceClsType.createMethod(clsContent.toString(), null, true, null);
            wrapperCls.save(null, true);
            return wrapperCls;
        } catch (Exception e) {
            JBossJAXWSUIPlugin.getDefault().logError(e);
            return null;
        }
    }
}