Package org.exquery.restxq

Examples of org.exquery.restxq.RestXqService


                    }
                }

                if(functionRestAnnotations != null) {
                    final ResourceFunction resourceFunction = ResourceFunctionFactory.create(new URI(compiled.getSource().getKey()), functionRestAnnotations);
                    final RestXqService service = new RestXqServiceImpl(resourceFunction, compiled.getContext().getBroker().getBrokerPool());

                    //record the xquerylocation
                    xqueryLocations.add(resourceFunction.getXQueryLocation());
                   
                    //add the service to the list of services for this query
View Full Code Here


               final DocumentImpl module = getContext().getBroker().getResource(moduleUri, Permission.READ);
               if(xqueryRegistry.isXquery(module)) {
                   final SignatureDetail signatureDetail = extractSignatureDetail(resourceFunctionIdentifier);
                   if(signatureDetail != null) {
                       try {
                         final RestXqService serviceToRegister = findService(xqueryRegistry.findServices(getContext().getBroker(), module).iterator(), signatureDetail);
                         if(serviceToRegister != null) {
                             xqueryRegistry.registerServices(context.getBroker(), Collections.singletonList(serviceToRegister));
                             result = BooleanValue.TRUE;
                         } else {
                             result = BooleanValue.FALSE;
                         }
                       } catch(final ExQueryException exqe) {
                           LOG.warn(exqe.getMessage(), exqe);
                           result = BooleanValue.FALSE;
                       }
                   } else {
                       result = BooleanValue.FALSE;
                   }

                } else {
                   result = Sequence.EMPTY_SEQUENCE;
                }
            } else if(isCalledAs(qnDeregisterResourceFunction.getLocalName())) {
                //TODO
                final String resourceFunctionIdentifier = args[1].getStringValue();
                final SignatureDetail signatureDetail = extractSignatureDetail(resourceFunctionIdentifier);
                if(signatureDetail != null) {
                   final RestXqService serviceToDeregister = findService(xqueryRegistry.registered(context.getBroker()), signatureDetail);        
                   if(serviceToDeregister != null) {
                    xqueryRegistry.deregisterService(context.getBroker(), serviceToDeregister);
                    result = BooleanValue.TRUE;
                   } else {
                       result = BooleanValue.FALSE;
View Full Code Here

            throw new XPathException(this, pde.getMessage(), pde);
        }
    }
   
    private RestXqService findService(final Iterator<RestXqService> services, final SignatureDetail signatureDetail) {
        RestXqService result = null;
        if(services != null) {
            while(services.hasNext()) {
                final RestXqService service = services.next();
                final org.exquery.xquery.FunctionSignature signature = service.getResourceFunction().getFunctionSignature();
                if(signature.getName().equals(signatureDetail.name) && signature.getArgumentCount() == signatureDetail.arity) {
                    result = service;
                    break;
                }
            }
View Full Code Here

                        return (String)configuration.getProperty(Configuration.BINARY_CACHE_CLASS_PROPERTY);
                    }
                });
         
           
            final RestXqService service = getRegistry().findService(requestAdapter);
            if(service != null) {
               
                if(log.isTraceEnabled()) {
                    log.trace("Received " + requestAdapter.getMethod().name() + " request for \"" + requestAdapter.getPath() + "\" and found Resource Function \"" + service.getResourceFunction().getFunctionSignature() + "\" in  module \"" + service.getResourceFunction().getXQueryLocation() + "\"");
                }
               
                service.service(
                    requestAdapter,
                    new HttpServletResponseAdapter(response),
                    new ResourceFunctionExecutorImpl(getPool(), request.getContextPath() + request.getServletPath(), request.getRequestURI()),
                    new RestXqServiceSerializerImpl(getPool())
                );
View Full Code Here

       
        if(!(obj instanceof RestXqService)) {
            return false;
        }
       
        final RestXqService other = ((RestXqService)obj);
       
        return
            other.getResourceFunction().getXQueryLocation().equals(getResourceFunction().getXQueryLocation())
            && other.getResourceFunction().getFunctionSignature().getName().equals(fnSignature.getName())
            && other.getResourceFunction().getFunctionSignature().getArgumentCount() == fnSignature.getArgumentCount();
    }
View Full Code Here

            List<RestXqService> list = orderedServices.get(method);
            if(list == null) {
                list = new ArrayList<RestXqService>();
            }

            RestXqService oldValue = null;
            int oldIndex = list.indexOf(service);
            if(oldIndex > -1) {
                oldValue = list.remove(oldIndex);
            }
View Full Code Here

     * or null if there is no service that matches the request
     */
    public RestXqService get(final HttpMethod method, final HttpRequest request) {
        final ReentrantReadWriteLock lock = getOrCreateMethodLock(method);
       
        RestXqService result = null;
        try {
            lock.readLock().lock();
           
            final List<RestXqService> services = orderedServices.get(method);
            if(services != null) {
               
                final String acceptHeaderValue = request.getHeader(HttpHeader.ACCEPT.getHeaderName());
                final AcceptHeader acceptHeader = acceptHeaderValue != null ? new AcceptHeader(acceptHeaderValue) : null;
               
                for(final RestXqService service : services) {
                    if(service.canService(request)) {
                        if(acceptHeader != null && result != null) {
                            /* Does this service Produce an Internet Media Type
                             * which has a higher Quality Factor in the Accept header
                             * that the last result?
                             */
                            if(service.maxProducesQualityFactor(acceptHeader) > result.maxProducesQualityFactor(acceptHeader)) {
                                //yes, so this service has preference over the last result
                                result = service;
                            }
                        } else {
                            result = service;
View Full Code Here

            final ReentrantReadWriteLock lock = getOrCreateMethodLock(key);
            try {
                lock.writeLock().lock();
               

                RestXqService serviceToRemove = null;
                final List<RestXqService> serviceList = orderedServices.get(key);
               
                for(final RestXqService orderedService : serviceList) {
                    if(orderedService.equals(service)) {
                        //label the service to remove
View Full Code Here

TOP

Related Classes of org.exquery.restxq.RestXqService

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.