Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   * Other names may be trademarks of their respective owners.
   *
   * The contents of this file are subject to the terms of either the GNU
  * General Public License Version 2 only ("GPL") or the Common
  * Development and Distribution License("CDDL") (collectively, the
  * "License"). You may not use this file except in compliance with the
  * License. You can obtain a copy of the License at
  * http://www.netbeans.org/cddl-gplv2.html
  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  * specific language governing permissions and limitations under the
  * License.  When distributing the software, include this License Header
  * Notice in each file and include the License file at
  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Oracle in the GPL Version 2 section of the License file that
  * accompanied this code. If applicable, add the following below the
  * License Header, with the fields enclosed by brackets [] replaced by
  * your own identifying information:
  * "Portions Copyrighted [year] [name of copyright owner]"
  * 
  * Contributor(s):
  * 
  * The Original Software is NetBeans. The Initial Developer of the Original
  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
  * Microsystems, Inc. All Rights Reserved.
  * 
  * If you wish your version of this file to be governed by only the CDDL
  * or only the GPL Version 2, indicate your decision by adding
  * "[Contributor] elects to include this software in this distribution
  * under the [CDDL or GPL Version 2] license." If you do not indicate a
  * single choice of license, a recipient has the option to distribute
  * your version of this file under either the CDDL, the GPL Version 2 or
  * to extend the choice of license to its licensees as provided above.
  * However, if you add GPL Version 2 code and therefore, elected the GPL
  * Version 2 license, then the option applies only if the new code is
  * made subject to such option by the copyright holder.
  */
 package org.netbeans.modules.websvc.saas.codegen.java;
 
 import java.util.List;
 import java.util.Set;
Code generator for Accessing Saas services.

Author(s):
nam
 
 
     private JavaSource targetSource;
     private FileObject saasServiceFile = null;
     private JavaSource saasServiceJS = null;
     private FileObject serviceFolder = null;
 
     public RestClientPojoCodeGenerator() {
     }
 
     public boolean canAccept(SaasMethod methodDocument doc) {
        if (SaasBean.canAccept(methodWadlSaasMethod.classgetDropFileType()) &&
                Util.isJava(doc)) {
            return true;
        }
        return false;
    }
    
    @Override
    public void init(SaasMethod mDocument docthrows IOException {
        init(mnew RestClientSaasBean((WadlSaasMethodm), doc);
    }
    
    public void init(SaasMethod mRestClientSaasBean saasBeanDocument docthrows IOException {
        super.init(mdoc);
        setBean(saasBean); 
         = JavaSource.forFileObject(getTargetFile());
        String packageName = JavaSourceHelper.getPackageName();
        getBean().setPackageName(packageName);
        
         = null;
         = SourceGroupSupport.findJavaSourceFile(getProject(),
                getBean().getSaasServiceName());
        if ( != null) {
             = JavaSource.forFileObject();
        }
        this..setDropFileType(getDropFileType());
    }
    
    protected JavaSource getTargetSource() {
        return this.;
    }
        return ;
    }
    public JavaSource getSaasServiceSource() {
        return ;
    }
    public FileObject getSaasServiceFolder() throws IOException {
        if ( == null) {
            SourceGroup[] srcGrps = SourceGroupSupport.getJavaSourceGroups(getProject());
             = SourceGroupSupport.getFolderForPackage(srcGrps[0],
                    getBean().getSaasServicePackageName(), true);
        }
        return ;
    }
    
    @Override
    public RestClientSaasBean getBean() {
        return (RestClientSaasBeansuper.getBean();
    }
    
    @Override
    protected void preGenerate() throws IOException {
        super.preGenerate();
        if(getBean().getMethod().getSaas().getLibraryJars() == null) {
            WadlSaasEx ex = new WadlSaasEx(getBean().getMethod().getSaas());
            ((WadlSaas)getBean().getMethod().getSaas()).setLibraryJars(ex.getLibraryJars());
        }
        if (getBean().getMethod().getSaas().getLibraryJars().size() > 0) {
            JavaUtil.addClientJars(getBean(), getProject(), null);
        }
    }
    @Override
    public Set<FileObjectgenerate() throws IOException {
        preGenerate();
        //Create Authenticator classes
        //Create Authorization classes
        createSaasServiceClass();
        addSaasServiceMethod();
        addImportsToSaasService();
        //Modify Authenticator class
        //execute this block before insertSaasServiceAccessCode() 
        setJaxbWrapper();
        //No need to check scanning, since we are not locking document
        //Util.checkScanning();
        addImportsToTargetFile();
        finishProgressReporting();
        return new HashSet<FileObject>(.);
    }
    private void setJaxbWrapper() {
        List<QNamerepTypesFromWadl = getBean().findRepresentationTypes(getBean().getMethod());
        if (!repTypesFromWadl.isEmpty()) {
            for(QName qNamerepTypesFromWadl) {
                String nsUri = qName.getNamespaceURI();
                getBean().addOutputWrapperName(qName.getLocalPart());
                getBean().addOutputWrapperPackageName(
                        (getBean().getGroupName() + "." +
                        getBean().getDisplayName()).toLowerCase() +
                        "." + nsUri.substring(nsUri.lastIndexOf(":") + 1).toLowerCase());
            }
        }
    }
    @Deprecated
    protected void addJaxbLib() throws IOException {
    }
        
    @Override
    protected String getCustomMethodBody() throws IOException {
        String paramUse = "";
        String paramDecl = "";
        //Evaluate parameters (query(not fixed or apikey), header, template,...)
        List<ParameterInfoparams = getServiceMethodParameters();
        clearVariablePatterns();
        updateVariableNames(params);
        List<ParameterInforenamedParams = renameParameterNames(params);
        paramUse += Util.getHeaderOrParameterUsage(renamedParams);
        paramDecl += getHeaderOrParameterDeclaration(renamedParams);
        String methodBody = "\n"+ + "try {\n";
        methodBody += paramDecl + "\n";
        methodBody +=  +  + " "+getResultPattern()+" = " + getBean().getSaasServiceName() +
                "." + getBean().getSaasServiceMethodName() + "(" + paramUse + ");\n";
        methodBody += Util.createPrintStatement(
                getBean().getOutputWrapperPackageNames(),
                getBean().getOutputWrapperNames(),
                getDropFileType(),
                getBean().getHttpMethod(),
                getBean().canGenerateJAXBUnmarshaller(), getResultPattern(), );
        methodBody +=  + "} catch (Exception ex) {\n";
        methodBody +=  + "ex.printStackTrace();\n";
        methodBody +=  + "}\n";
        return methodBody;
    }
    protected String getServiceMethodBody() throws IOException {
        String methodBody = "";
        methodBody +=  + getFixedParameterDeclaration();
        //Insert authentication code before new "+Constants.REST_CONNECTION+"() call
        methodBody +=  + getAuthenticationGenerator().getPreAuthenticationCode() + "\n";
        //Insert parameter declaration
        methodBody +=  + getTemplateParameterDefinition(
                getBean().getTemplateParameters(), .false);
        methodBody += "        " + Util.getHeaderOrParameterDefinition(
                getBean().getQueryParameters(), .false);
        methodBody +=  + . + 
                " conn = new " + . + "(\"" + getBean().getUrl() + "\"";
        methodBody += ", " + .;
        methodBody += ", " + (!Util.isPutPostFormParams(getBean())?.:"null");
        methodBody += ");\n";
        //Insert authentication code after new "+Constants.REST_CONNECTION+"() call
        methodBody +=  + getAuthenticationGenerator().getPostAuthenticationCode() + "\n";
        HttpMethodType httpMethod = getBean().getHttpMethod();
        String headerUsage = "null";
        if (getBean().getHeaderParameters() != null && getBean().getHeaderParameters().size() > 0) {
            headerUsage = .;
            methodBody +=  + Util.getHeaderOrParameterDefinition(
                    getBean().getHeaderParameters(), .falsehttpMethod);
        }
        
        //Insert the sleep call to avoid service throttling
        methodBody +=  + "sleep(1000);\n";
        
        //Insert the method call
        methodBody +=  + "return conn." + httpMethod.prefix() + "(" + headerUsage;
        if (httpMethod == . || httpMethod == .) {
            if (Util.isPutPostFormParams(getBean())) {
                methodBody += ", " + .;
            } else if (Util.hasInputRepresentations(getBean())) {
                methodBody += ", " + .;
            } 
        }
        methodBody += ");\n";
        return methodBody;
    }
    protected String getFixedParameterDeclaration() {
        String fixedCode = "";
        List<ParameterInfosignParams = null;
        SaasAuthenticationType authType = getBean().getAuthenticationType();
        if (authType == .) {
            SessionKeyAuthentication sessionKey = (SessionKeyAuthenticationgetBean().getAuthentication();
            signParams = sessionKey.getParameters();
        } else {
            signParams = Collections.emptyList();
        }
        for (ParameterInfo param : getBean().getInputParameters()) {
            if (param.isFixed() && !Util.isContains(paramsignParams)) {
                fixedCode += "String " + getVariableName(param.getName()) + " = \"" + findParamValue(param) + "\";\n";
            }
        }
        return fixedCode;
    }
        return Util.getRestClientMethodParameters(getBean());
    }
        return Collections.emptyList();
    }
    protected String getLoginArguments() {
        return "";
    }
    protected void addImportsToTargetFile() throws IOException {
        List<Stringimports = new ArrayList<String>();
        imports.add(getBean().getSaasServicePackageName() + "." + getBean().getSaasServiceName());
        imports.add( + "." + );
//        if(getBean().canGenerateJAXBUnmarshaller()) {
//            imports.addAll(Util.getJaxBClassImports());
//        }
        JavaUtil.addImportsToSource(getTargetSource(), imports);
    }
    protected void addImportsToSaasService() throws IOException {
        List<Stringimports = new ArrayList<String>();
        imports.add( + "." + );
        imports.add( + "." + );
//        if(getBean().canGenerateJAXBUnmarshaller()) {
//            imports.add(InputStream.class.getName());
//        }
        JavaUtil.addImportsToSource(imports);
    }

    
Insert the Saas client call
    protected void insertSaasServiceAccessCode(boolean isInBlockthrows IOException {
        try {
            String code = "";
            if (isInBlock) {
                code = getCustomMethodBody();
            } else {
                code = "\nprivate String call" + getBean().getName() + "Service() {\n"// NOI18n
                code += getCustomMethodBody() + "\n";
                code += "return "+getResultPattern()+";\n";
                code += "}\n";
            }
            insert(codetrue);
        } catch (BadLocationException ex) {
            throw new IOException(ex.getMessage());
        }
    }

    
Create Saas Service
    public void createSaasServiceClass() throws IOException {
        if ( == null) {
            SourceGroup[] srcGrps = SourceGroupSupport.getJavaSourceGroups(getProject());
            String pkg = getBean().getSaasServicePackageName();
            FileObject targetFolder = SourceGroupSupport.getFolderForPackage(srcGrps[0], pkgtrue);
             = JavaSourceHelper.createJavaSource(
                    getBean().getSaasServiceTemplate()+"."+.
                        targetFolderpkggetBean().getSaasServiceName());
            Set<FileObjectfiles = new HashSet<FileObject>(.getFileObjects());
            if (files != null && files.size() > 0) {
                 = files.iterator().next();
            }
        }
    }

    
Return target and generated file objects
    protected void addSaasServiceMethod() throws IOException {
        List<ParameterInfofilterParams = getServiceMethodParameters();
        final String[] parameters = getGetParamNames(filterParams);
        final Object[] paramTypes = getGetParamTypes(filterParams);
        if (JavaSourceHelper.isContainsMethod(,
                getBean().getSaasServiceMethodName(), parametersparamTypes)) {
            return;
        }
            public void run(WorkingCopy copythrows IOException {
                copy.toPhase(..);
                Modifier[] modifiers = .;
                String type = ;
                String bodyText = "{ \n" + getServiceMethodBody() + "\n }";
                String comment = "\n";// NOI18N
                for (String param : parameters) {
                    comment += "@param $PARAM$ \n".replace("$PARAM$"param);// NOI18N
                }
                comment += "@return an instance of " + type;// NOI18N
                ClassTree initial = JavaSourceHelper.getTopLevelClassTree(copy);
                ClassTree tree = JavaSourceHelper.addMethod(copyinitial,
                        modifiersnullnull,
                        getBean().getSaasServiceMethodName(), typeparametersparamTypes,
                        nullnullnew String[]{"java.io.IOException"},
                        bodyTextcomment);      //NOI18N
                copy.rewrite(initialtree);
            }
        });
        result.commit();
    }
    public ParameterInfo findParameter(String name) {
        List<ParameterInfoparams = getBean().getInputParameters();
        if (params != null) {
            for (ParameterInfo param : params) {
                if (param.getName().equals(name)) {
                    return param;
                }
            }
        }
        return null;
    }
            String indent) {
        if (indent == null) {
            indent = " ";
        }
        String paramDecl = "";
        for (ParameterInfo param : params) {
            String name = getVariableName(param.getName());
            String paramVal = findParamValue(param);
            if (param.getType() != String.class) {
                paramDecl += indent + param.getType().getName() + " " + name + " = " + paramVal + ";\n";
            } else {
                if (paramVal != null) {
                    paramDecl += indent + "String " + name + " = \"" + paramVal + "\";\n";
                } else {
                    paramDecl += indent + "String " + name + " = null;\n";
                }
            }
        }
        return paramDecl;
    }
        String indent = "                 ";
        return getHeaderOrParameterDeclaration(paramsindent);
    }
    //String pathParams[] = new String[][]  { {"{volumeId}", volumeId},  {"{objectId}", objectId}}; 
    private String getTemplateParameterDefinition(List<ParameterInfoparamsString varNameboolean evaluate) {
        String paramsStr = null;
        StringBuffer sb = new StringBuffer();
        for (ParameterInfo param : params) {
            String paramName = getParameterName(param);
            String paramVal = null;
            if (evaluate) {
                paramVal = findParamValue(param);
                if (param.getType() != String.class) {
                    sb.append("{\"" + paramName + "\", \"" + paramVal + "\".toString()},\n");
                } else {
                    if (paramVal != null) {
                        sb.append("{\"{" + paramName + "}\", \"" + paramVal + "\"},\n");
                    } else {
                        sb.append("{\"{" + paramName + "}\", null},\n");
                    }
                }
            } else {
                sb.append("{\"{" + paramName + "}\", " + paramName + "},\n");
            }
        }
        paramsStr = sb.toString();
        if (params.size() > 0) {
            paramsStr = paramsStr.substring(0, paramsStr.length() - 1);
        }
        String paramCode = "";
        paramCode += "             String[][] " + varName + " = new String[][]{\n";
        paramCode += "                 " + paramsStr + "\n";
        paramCode += "             };\n";
        return paramCode;
    }
    private String findParamValue(ParameterInfo param) {
        return Util.findParamValue(param);
    }
    protected void createRestConnectionFile(Project projectthrows IOException {
        SourceGroup[] srcGrps = SourceGroupSupport.getJavaSourceGroups(project);
        String pkg = ;
        FileObject targetFolder = SourceGroupSupport.getFolderForPackage(srcGrps[0],pkg , true);
        JavaSourceHelper.createJavaSource(targetFolderpkg);
        String restResponseTemplate = ;
        JavaSource restResponseJS = JavaSourceHelper.createJavaSource(restResponseTemplatetargetFolderpkg);
    }
New to GrepCode? Check out our FAQ X