Package org.exist.memtree

Examples of org.exist.memtree.MemTreeBuilder


            // extract all used fields from query
            final String[] fields = LuceneUtil.extractFields(query, searcher.getIndexReader());

            final PlainTextHighlighter highlighter = new PlainTextHighlighter(query, searcher.getIndexReader());

            final MemTreeBuilder builder = new MemTreeBuilder();
            builder.startDocument();

            // start root element
            final int nodeNr = builder.startElement("", "results", "results", null);

            // Perform actual search
            searcher.search(query, new Collector() {
                private Scorer scorer;
                private AtomicReader reader;

                @Override
                public void setScorer(Scorer scorer) throws IOException {
                    this.scorer = scorer;
                }

                @Override
                public void collect(int docNum) throws IOException {
                    Document doc = reader.document(docNum);

                    // Get URI field of document
                    String fDocUri = doc.get(FIELD_DOC_URI);

                    // Get score
                    float score = scorer.score();

                    // Check if document URI has a full match or if a
                    // document is in a collection
                    if(isDocumentMatch(fDocUri, toBeMatchedURIs)){
                       
                        DocumentImpl storedDoc = null;
                        try {
                            // try to read document to check if user is allowed to access it
                            storedDoc = context.getBroker().getXMLResource(XmldbURI.createInternal(fDocUri), Lock.READ_LOCK);
                            if (storedDoc == null) {
                                return;
                            }

                            // setup attributes
                            AttributesImpl attribs = new AttributesImpl();
                            attribs.addAttribute("", "uri", "uri", "CDATA", fDocUri);
                            attribs.addAttribute("", "score", "score", "CDATA", ""+score);
   
                            // write element and attributes
                            builder.startElement("", "search", "search", attribs);
                            for (String field : fields) {
                                String[] fieldContent = doc.getValues(field);
                                attribs.clear();
                                attribs.addAttribute("", "name", "name", "CDATA", field);
                                for (String content : fieldContent) {
                                    List<Offset> offsets = highlighter.getOffsets(content, searchAnalyzer);
                                    if (offsets != null) {
                                        builder.startElement("", "field", "field", attribs);
                                        highlighter.highlight(content, offsets, builder);
                                        builder.endElement();
                                    }
                                }
                            }
                            builder.endElement();
   
                            // clean attributes
                            attribs.clear();
                        } catch (PermissionDeniedException e) {
                            // not allowed to read the document: ignore the match.
                        } finally {
                            if (storedDoc != null) {
                                storedDoc.getUpdateLock().release(Lock.READ_LOCK);
                            }
                        }
                    }
                }

                @Override
                public void setNextReader(AtomicReaderContext atomicReaderContext) throws IOException {
                    this.reader = atomicReaderContext.reader();
                }

                @Override
                public boolean acceptsDocsOutOfOrder() {
                    return true;
                }
            });

            // finish root element
            builder.endElement();
           
            //System.out.println(builder.getDocument().toString());
           
            // TODO check
            report = ((org.exist.memtree.DocumentImpl) builder.getDocument()).getNode(nodeNr);


        } catch (Exception ex){
            ex.printStackTrace();
            LOG.error(ex);
View Full Code Here


            return Sequence.EMPTY_SEQUENCE;
        }
    try {
      BinaryValue exiBinary = ((BinaryValue)args[0].itemAt(0));
     
      MemTreeBuilder builder = context.getDocumentBuilder();
     
      // create default factory and EXI grammar for schema
      EXIFactory exiFactory = DefaultEXIFactory.newInstance();
      if(args.length > 1) {
        if(!args[1].isEmpty()) {
          Item xsdItem = args[1].itemAt(0);
          InputStream xsdInputStream = EXIUtils.getInputStream(xsdItem, context);
          GrammarFactory grammarFactory = GrammarFactory.newInstance();
          Grammar grammar = grammarFactory.createGrammar(xsdInputStream);
          exiFactory.setGrammar(grammar);
        }
      }
      SAXDecoder decoder = new SAXDecoder(exiFactory);
      SAXAdapter adapter = new AppendingSAXAdapter(builder);
            decoder.setContentHandler(adapter);
            decoder.parse(new InputSource(exiBinary.getInputStream()));
       
        NodeValue node  = (NodeValue)builder.getDocument().getDocumentElement();
        return node;
    }
    catch(EXIException exie) {
      throw new XPathException(this, new JavaErrorCode(exie.getCause()), exie.getMessage());
    }
View Full Code Here

    if (newDocumentContext)
            context.pushDocumentContext();
       
    try {
            MemTreeBuilder builder = context.getDocumentBuilder();
            context.proceed(this, builder);
            int nodeNr = builder.characters(text);
            NodeImpl node = builder.getDocument().getNode(nodeNr);
            return node;
        } finally {
            if (newDocumentContext)
                context.popDocumentContext();
        }
View Full Code Here

        context.expressionStart(this);
    context.pushInScopeNamespaces();
        if (newDocumentContext)
            context.pushDocumentContext();
        try {
            MemTreeBuilder builder = context.getDocumentBuilder();
           
            // declare namespaces
//            if(namespaceDecls != null) {
//                for(int i = 0; i < namespaceDecls.length; i++) {
//                    //if ("".equals(namespaceDecls[i].getNamespaceURI())) {
//                        // TODO: the specs are unclear here: should we throw XQST0085 or not?
//                    //  context.inScopeNamespaces.remove(namespaceDecls[i].getLocalName());
////          if (context.inScopeNamespaces.remove(namespaceDecls[i].getLocalName()) == null)
////                throw new XPathException(getAS      TNode(), "XQST0085 : can not undefine '" + namespaceDecls[i] + "'");
//                    //} else
//                        context.declareInScopeNamespace(namespaceDecls[i].getLocalName(), namespaceDecls[i].getNamespaceURI());
//                }
//            }
//            AttributesImpl attrs = new AttributesImpl();
//            if(attributes != null) {
//                AttributeConstructor constructor;
//                Sequence attrValues;
//                QName attrQName;
//                // first, search for xmlns attributes and declare in-scope namespaces
//                for (int i = 0; i < attributes.length; i++) {
//                    constructor = attributes[i];
//                    if(constructor.isNamespaceDeclaration()) {
//                        int p = constructor.getQName().indexOf(':');
//                        if(p == Constants.STRING_NOT_FOUND)
//                            context.declareInScopeNamespace("", constructor.getLiteralValue());
//                        else {
//                            String prefix = constructor.getQName().substring(p + 1);
//                            context.declareInScopeNamespace(prefix, constructor.getLiteralValue());
//                        }
//                    }
//                }
//                // process the remaining attributes
//                for (int i = 0; i < attributes.length; i++) {
//                    context.proceed(this, builder);
//                    constructor = attributes[i];
//                    attrValues = constructor.eval(contextSequence, contextItem);
//                    attrQName = QName.parse(context, constructor.getQName(), "");
//                    if (attrs.getIndex(attrQName.getNamespaceURI(), attrQName.getLocalName()) != -1)
//                        throw new XPathException(this, "XQST0040 '" + attrQName.getLocalName() + "' is a duplicate attribute name");
//                    attrs.addAttribute(attrQName.getNamespaceURI(), attrQName.getLocalName(),
//                            attrQName.getStringValue(), "CDATA", attrValues.getStringValue());
//                }
//            }
            context.proceed(this, builder);

            // evaluate element tag name
          QName qn = null;
          String tagName = name;
          Sequence qnameSeq = null;
            if (qnameExpr != null)
              qnameSeq = qnameExpr.eval(contextSequence, contextItem);
//            else
//              qnameSeq = super.eval(contextSequence, contextItem);
           
            if (qnameSeq != null) {
              if(!qnameSeq.hasOne())
                throw new XPathException(this, "Type error: the node name should evaluate to a single item");
              Item qnitem = qnameSeq.itemAt(0);
              if (qnitem instanceof QNameValue) {
                qn = ((QNameValue)qnitem).getQName();
              } else {
                tagName = qnitem.getStringValue();
              }
            }
            if (qn == null) {
              if (tagName == null)
                  throw new XPathException(this, ErrorCodes.XPTY0004, "element name wasn't provided");

              //Not in the specs but... makes sense
                if(!XMLChar.isValidName(tagName))
                  throw new XPathException(this, ErrorCodes.XPTY0004, "'" + tagName + "' is not a valid element name");

              try {
                qn = QName.parse(context, tagName);
              } catch (IllegalArgumentException e) {
                throw new XPathException(this, ErrorCodes.XPTY0004, "'"+tagName+"' is not a valid element name");
              }
            }
//             
//                //Use the default namespace if specified
//                /*
//                 if (qn.getPrefix() == null && context.inScopeNamespaces.get("xmlns") != null) {
//                     qn.setNamespaceURI((String)context.inScopeNamespaces.get("xmlns"));
//                 }
//                 */
//                if (qn.getPrefix() == null && context.getInScopeNamespace("") != null) {
//                     qn.setNamespaceURI(context.getInScopeNamespace(""));
//                }
//             }
//
            int nodeNr = builder.startElement(qn, null);

            // process attributes
            if (use_attribute_sets != null) {
              ((XSLContext)context).getXSLStylesheet()
                .attributeSet(use_attribute_sets, contextSequence, contextItem);
            }
           
            for (Attribute attr : attributes) {
              attr.eval(contextSequence, contextItem);
            }

            // add namespace declaration nodes
//            if(namespaceDecls != null) {
//                for(int i = 0; i < namespaceDecls.length; i++) {
//                    builder.namespaceNode(namespaceDecls[i]);
//                }
//            }
//            // do we need to add a namespace declaration for the current node?
//            if (qn.needsNamespaceDecl()) {
//                if (context.getInScopePrefix(qn.getNamespaceURI()) == null) {
//                    String prefix = qn.getPrefix();
//                    if (prefix == null || prefix.length() == 0)
//                        prefix = "";
//                    context.declareInScopeNamespace(prefix, qn.getNamespaceURI());
//                    builder.namespaceNode(new QName(prefix, qn.getNamespaceURI(), "xmlns"));
//                }
//            } else if ((qn.getPrefix() == null || qn.getPrefix().length() == 0) &&
//                context.getInheritedNamespace("") != null) {
//                context.declareInScopeNamespace("", "");
//                builder.namespaceNode(new QName("", "", "xmlns"));
//            }
            // process element contents
//            if(content != null) {
//                content.eval(contextSequence, contextItem);
//            } else
              super.eval(contextSequence, contextItem);
           
            builder.endElement();
            NodeImpl node = builder.getDocument().getNode(nodeNr);
            return node;
        } finally {
            context.popInScopeNamespaces();
            if (newDocumentContext)
                context.popDocumentContext();
View Full Code Here

        File home = context.getBroker().getConfiguration().getExistHome();
        return new File(home, arg);
    }

    private ElementImpl createReport(int exitValue, List<String> output, List<String> cmdArgs) {
        MemTreeBuilder builder = context.getDocumentBuilder();
        AttributesImpl attribs = new AttributesImpl();
        attribs.addAttribute("", "exitCode", "exitCode", "CDATA", Integer.toString(exitValue));
        builder.startDocument();
        int nodeNr = builder.startElement(RESULT_QNAME, attribs);

        // print command line
        StringBuilder cmdLine = new StringBuilder();
        for (String param : cmdArgs) {
            cmdLine.append(param).append(' ');
        }
        builder.startElement(COMMAND_LINE_QNAME, null);
        builder.characters(cmdLine.toString());
        builder.endElement();

        // print received output to <stdout>
        builder.startElement(STDOUT_QNAME, null);
        for (String line : output) {
            builder.startElement(LINE_QNAME, null);
            builder.characters(line);
            builder.endElement();
        }
        builder.endElement();

        builder.endElement();

        return (ElementImpl) builder.getDocument().getNode(nodeNr);
    }
View Full Code Here

 
  private Sequence renderSearchResultsAsDSML( NamingEnumeration results, String dn ) throws NamingException
  {
    Sequence    xmlResult     = Sequence.EMPTY_SEQUENCE;
   
    MemTreeBuilder builder = context.getDocumentBuilder();
         
    builder.startDocument();
      builder.startElement( new QName( "dsml", DSML_NAMESPACE, DSML_PREFIX ), null );
    builder.addAttribute( new QName( "dn", null, null ), dn );
    builder.startElement( new QName( "directory-entries", DSML_NAMESPACE, DSML_PREFIX ), null );
   
    while( results.hasMore() ) {
      SearchResult result = (SearchResult)results.next();
     
      builder.startElement( new QName( "entry", DSML_NAMESPACE, DSML_PREFIX ), null );
      builder.addAttribute( new QName( "dn", null, null ), result.getName() );

      // Handle objectClass attributes
      Attribute ocattr = result.getAttributes().get( "objectClass" );
     
      if( ocattr != null ) {
        builder.startElement( new QName( "objectclass", DSML_NAMESPACE, DSML_PREFIX ), null );
       
        for( int i = 0; i < ocattr.size(); i++ ) {
            Object value = ocattr.get( i );
           
            builder.startElement( new QName( "oc-value", DSML_NAMESPACE, DSML_PREFIX ), null );
            builder.characters( value.toString() );
            builder.endElement();
          }
       
        builder.endElement();
      }
     
      NamingEnumeration attrs = result.getAttributes().getAll();
     
      // Handle all other attributes
      while( attrs.hasMore() ) {
        Attribute attr = (Attribute)attrs.next();
       
        String name = attr.getID();
       
        if( !name.equals( "objectClass" ) ) {
       
          builder.startElement( new QName( "attr", DSML_NAMESPACE, DSML_PREFIX ), null );
          builder.addAttribute( new QName( "name", null, null ), name );
         
          for( int i = 0; i < attr.size(); i++ ) {
            Object value = attr.get( i );
           
            builder.startElement( new QName( "value", DSML_NAMESPACE, DSML_PREFIX ), null );
            if( name.equals( "userPassword" ) ) {
              builder.characters( new String( (byte[])value ) );
            } else {
              builder.characters( value.toString() );
            }
            builder.endElement();
          }
         
          builder.endElement();
        }
      }
     
      builder.endElement();
    }
   
    builder.endElement();
    builder.endElement();
   
      xmlResult = (NodeValue)builder.getDocument().getDocumentElement();
   
    return( xmlResult );
  }
View Full Code Here

        try {
            ftp.changeWorkingDirectory(remoteDirectory);

            FTPFile[] ftpFiles = ftp.listFiles();
               
            MemTreeBuilder builder = context.getDocumentBuilder();
            builder.startDocument();
            builder.startElement(new QName("list", FTPClientModule.NAMESPACE_URI), null);
               
            for(FTPFile ftpFile : ftpFiles) {
                if (ftpFile.getType() == FTPFile.FILE_TYPE) {
                    builder.startElement(new QName("file", FTPClientModule.NAMESPACE_URI), null);
                }
                else if(ftpFile.getType() == FTPFile.DIRECTORY_TYPE) {
                    builder.startElement(new QName("directory", FTPClientModule.NAMESPACE_URI), null);
                }
                builder.characters(ftpFile.getName());
                builder.endElement();
            }
               
            builder.endElement();
            builder.endDocument();
           
            result = (NodeValue)builder.getDocument();

        } catch(IOException ioe) {
            log.error(ioe.getMessage(), ioe);
        }
View Full Code Here

    }

  private Sequence statusReport(String target) {
    context.pushDocumentContext();
    try {
      MemTreeBuilder builder = context.getDocumentBuilder();
      AttributesImpl attrs = new AttributesImpl();
      attrs.addAttribute("", "result", "result", "CDATA", "ok");
      if (target != null)
        attrs.addAttribute("", "target", "target", "CDATA", target);
      builder.startElement(STATUS_ELEMENT, attrs);
      builder.endElement();
     
      return builder.getDocument().getNode(1);
    } finally {
      context.popDocumentContext();
    }
   
  }
View Full Code Here

        if (logger.isDebugEnabled()) {
            logger.debug("Listing matching files in directory: " + baseDir);
        }

        MemTreeBuilder builder = context.getDocumentBuilder();

        builder.startDocument();
        builder.startElement(new QName("list", NAMESPACE_URI, PREFIX), null);
        builder.addAttribute(new QName("directory", null, null), baseDir.toString());

        for (SequenceIterator i = patterns.iterate(); i.hasNext();) {
            String pattern = i.nextItem().getStringValue();
            File[] scannedFiles = DirectoryScanner.scanDir(baseDir, pattern);
           

            if (logger.isDebugEnabled()) {
                logger.debug("Found: " + scannedFiles.length);
            }

            for (File file : scannedFiles) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Found: " + file.getAbsolutePath());
                }

                String relPath = file.toString().substring(baseDir.toString().length() + 1);

                int lastSeparatorPosition = relPath.lastIndexOf(File.separatorChar);

                String relDir = null;
                if (lastSeparatorPosition >= 0) {
                    relDir = relPath.substring(0, lastSeparatorPosition);
                    relDir = relDir.replace(File.separatorChar, '/');
                }

                builder.startElement(new QName("file", NAMESPACE_URI, PREFIX), null);

                builder.addAttribute(new QName("name", null, null), file.getName());

                Long sizeLong = file.length();
                String sizeString = Long.toString(sizeLong);
                String humanSize = getHumanSize(sizeLong, sizeString);

                builder.addAttribute(new QName("size", null, null), sizeString);
                builder.addAttribute(new QName("human-size", null, null), humanSize);
                builder.addAttribute(new QName("modified", null, null), new DateTimeValue(new Date(file.lastModified())).getStringValue());

                if (relDir != null && relDir.length() > 0) {
                    builder.addAttribute(new QName("subdir", null, null), relDir);
                }

                builder.endElement();

            }
        }

        builder.endElement();

        Sequence xmlResponse = (NodeValue) builder.getDocument().getDocumentElement();

        return (xmlResponse);
    }
View Full Code Here

        if (logger.isDebugEnabled() ) {
            logger.debug("Found: " + scannedFiles.length);
        }


        MemTreeBuilder builder = context.getDocumentBuilder();

        builder.startDocument();
        builder.startElement(new QName("list", null, null), null);

        for (File entry : scannedFiles) {
            if (logger.isDebugEnabled()) {
                logger.debug("Found: " + entry.getAbsolutePath());
            }

            String entryType = "unknown";
            if(entry.isFile()){
                entryType="file";

            } else if(entry.isDirectory()){
                entryType="directory";
            }

            builder.startElement(new QName(entryType, NAMESPACE_URI, PREFIX), null);

            builder.addAttribute(new QName("name", null, null), entry.getName());

            if(entry.isFile()){
                Long sizeLong = entry.length();
                String sizeString = Long.toString(sizeLong);
                String humanSize = getHumanSize(sizeLong, sizeString);

                builder.addAttribute(new QName("size", null, null), sizeString);
                builder.addAttribute(new QName("human-size", null, null), humanSize);
            }

            builder.addAttribute(new QName("modified", null, null),
                    new DateTimeValue(new Date(entry.lastModified())).getStringValue());

            builder.addAttribute(new QName("hidden", null, null),
                    new BooleanValue(entry.isHidden()).getStringValue());

            builder.addAttribute(new QName("canRead", null, null),
                    new BooleanValue(entry.canRead()).getStringValue());

            builder.addAttribute(new QName("canWrite", null, null),
                    new BooleanValue(entry.canWrite()).getStringValue());

            builder.endElement();

        }

        builder.endElement();


        return (NodeValue) builder.getDocument().getDocumentElement();
    }
View Full Code Here

TOP

Related Classes of org.exist.memtree.MemTreeBuilder

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.