All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jlibs.wadl.cli.completors.MethodCompletion Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2015 Santhosh Kumar Tekuri
 *
 * The JLibs authors license this file to you under the Apache License,
 * version 2.0 (the "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at:
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 */

package jlibs.wadl.cli.completors;

import jlibs.wadl.cli.WADLTerminal;
import jlibs.wadl.cli.model.Path;
import jlibs.wadl.model.Method;
import jlibs.wadl.model.Param;
import jlibs.wadl.model.ParamStyle;
import jlibs.xml.Namespaces;
import jlibs.xml.xsd.XSUtil;
import org.apache.xerces.xs.XSSimpleTypeDefinition;
import org.apache.xerces.xs.XSTypeDefinition;

import javax.xml.namespace.QName;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author Santhosh Kumar T
 */
public class MethodCompletion extends PathCompletion{
    public MethodCompletion(WADLTerminal terminal){
        super(terminal);
    }

    @Override
    protected void completeNext(Buffer buffer, Path path, String arg){
        Method method = path.findMethod(buffer.arg(0));
        if(method==null || method.getRequest()==null)
            return;

        Set params = new HashSet();
        while(buffer.hasNext()){
            int index = arg.indexOf('=');
            if(index!=-1)
                params.add(arg.substring(0, index+1));
            else{
                index = arg.indexOf(':');
                if(index!=-1)
                    params.add(arg.substring(0, index+1));
            }
            arg = buffer.next();
        }
        
        int index = arg.indexOf('=');
        if(index==-1)
            index = arg.indexOf(':');
        if(index==-1){
            for(Param param: method.getRequest().getParam()){
                String candidate = param.getName();
                if(param.getStyle()==ParamStyle.QUERY)
                    candidate += '=';
                else if(param.getStyle()==ParamStyle.HEADER)
                    candidate += ':';
                else
                    continue;
                if(params.contains(candidate) && !param.isRepeating())
                    continue;
                if(param.getFixed()!=null){
                    candidate += param.getFixed();
                    buffer.addCandidate(candidate);
                }else
                    buffer.addCandidate(candidate, (char)0);
            }
        }else{
            for(Param param: method.getRequest().getParam()){
                String paramName = param.getName();
                if(param.getStyle()==ParamStyle.QUERY)
                    paramName += '=';
                else if(param.getStyle()==ParamStyle.HEADER)
                    paramName += ':';
                else
                    continue;
                if(arg.startsWith(paramName)){
                    buffer.eat(paramName.length());
                    QName type = param.getType();
                    if(param.getFixed()!=null)
                        buffer.addCandidate(param.getDefault());
                    else if(type!=null){
                        if(type.equals(new QName(Namespaces.URI_XSD, "boolean"))){
                            buffer.addCandidate("true");
                            buffer.addCandidate("false");
                        }else if(path.getSchema()!=null){
                            XSTypeDefinition typeDef = path.getSchema().getTypeDefinition(type.getLocalPart(), type.getNamespaceURI());
                            if(typeDef instanceof XSSimpleTypeDefinition){
                                List values = XSUtil.getEnumeratedValues((XSSimpleTypeDefinition)typeDef);
                                for(String value: values)
                                    buffer.addCandidate(value);
                            }
                        }
                    }
                    if(!buffer.hasCandidates() && param.getDefault()!=null)
                        buffer.addCandidate(param.getDefault());
                    return;
                }
            }
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy