Package org.exist.memtree

Examples of org.exist.memtree.MemTreeBuilder


               
                // Store old fragment in stack
                context.pushDocumentContext();
               
                // Create new receiver
                MemTreeBuilder memBuilder = context.getDocumentBuilder();
                docBuilderReceiver = new DocumentBuilderReceiver(memBuilder);
               
                // Switch on retrievel
                sendDataToCB=true;
            }      
View Full Code Here


    private Sequence extractEntries(XmldbURI uri) throws XPathException {
        ZipFileSource zipFileSource = new ZipFileFromDb(uri);
        ZipInputStream zis = null;

        Sequence xmlResponse = null;
        MemTreeBuilder builder = context.getDocumentBuilder();

        builder.startDocument();
        builder.startElement( new QName( "file", ZipModule.NAMESPACE_URI, ZipModule.PREFIX ), null );
        builder.addAttribute( new QName( "href", null, null ), uri.toString() );

        try {
            zis = zipFileSource.getStream();
            ZipEntry zipEntry;
            while ((zipEntry = zis.getNextEntry()) != null) {

                if (zipEntry.isDirectory()) {
                    builder.startElement(new QName("dir",ZipModule.NAMESPACE_URI,ZipModule.PREFIX),null);
                    builder.addAttribute(new QName("name",null,null), zipEntry.toString());
                    builder.endElement();
                } else {
                    logger.debug("file: " + zipEntry.getName());
                    builder.startElement(new QName("entry",ZipModule.NAMESPACE_URI,ZipModule.PREFIX),null);
                    builder.addAttribute(new QName("name",null,null), zipEntry.toString());
                    builder.endElement();
                }
            }
        }catch(PermissionDeniedException pde) {
            logger.error(pde.getMessage(), pde);
            throw new XPathException("Permission denied to read the source zip");
        }catch(IOException ioe){
            logger.error(ioe.getMessage(), ioe);
            throw new XPathException("IO exception while reading the source zip");
        }

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

        } finally {
            context.popDocumentContext();
        }
       
    // create the output
    MemTreeBuilder builder = context.getDocumentBuilder();
    DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(builder);   
    try {
      SequenceIterator i = result.iterate();
      Item next = i.nextItem();   
      StringBuilder buf = null;
View Full Code Here

        boolean   executeResult = false;
        ResultSet rs            = null;

        try {
            boolean makeNodeFromColumnName = false;
            MemTreeBuilder builder = context.getDocumentBuilder();
            int            iRow    = 0;

            //SQL or PreparedStatement?
            if( args.length == 3 ) {

                // get the SQL statement
                sql           = args[1].getStringValue();
                stmt          = con.createStatement();
                makeNodeFromColumnName = ((BooleanValue)args[2].itemAt(0)).effectiveBooleanValue();

                //execute the statement
                executeResult = stmt.execute( sql );
               
            } else if( args.length == 4 ) {

                preparedStmt = true;
               
                //get the prepared statement
                long                     statementUID = ( (IntegerValue)args[1].itemAt( 0 ) ).getLong();
                PreparedStatementWithSQL stmtWithSQL  = SQLModule.retrievePreparedStatement( context, statementUID );
                sql  = stmtWithSQL.getSql();
                stmt = stmtWithSQL.getStmt();
                makeNodeFromColumnName = ((BooleanValue)args[3].itemAt(0)).effectiveBooleanValue();

                if( !args[2].isEmpty() ) {
                    setParametersOnPreparedStatement( stmt, (Element)args[2].itemAt( 0 ) );
                }

                //execute the prepared statement
                executeResult = ( (PreparedStatement)stmt ).execute();
            } else {
                //TODO throw exception
            }
           
            // DW: stmt can be null ?


            // execute the query statement
            if( executeResult ) {
                /* SQL Query returned results */

                // iterate through the result set building an XML document
                rs = stmt.getResultSet();
                ResultSetMetaData rsmd     = rs.getMetaData();
                int               iColumns = rsmd.getColumnCount();

                builder.startDocument();

                builder.startElement( new QName( "result", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
                builder.addAttribute( new QName( "count", null, null ), String.valueOf( -1 ) );

                while( rs.next() ) {
                    builder.startElement( new QName( "row", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
                    builder.addAttribute( new QName( "index", null, null ), String.valueOf( rs.getRow() ) );

                    // get each tuple in the row
                    for( int i = 0; i < iColumns; i++ ) {
                        String columnName = rsmd.getColumnLabel( i + 1 );

                        if( columnName != null ) {

                            String colElement = "field";

                            if(makeNodeFromColumnName && columnName.length() > 0 ) {
                                // use column names as the XML node

                                /**
                                 * Spaces in column names are replaced with
                                 * underscore's
                                 */
                                colElement = SQLUtils.escapeXmlAttr( columnName.replace( ' ', '_' ) );
                            }

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

                            if(!makeNodeFromColumnName || columnName.length() <= 0) {
                                String name;

                                if( columnName.length() > 0 ) {
                                    name = SQLUtils.escapeXmlAttr( columnName );
                                } else {
                                    name = "Column: " + String.valueOf( i + 1 );
                                }

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

                            builder.addAttribute( new QName( TYPE_ATTRIBUTE_NAME, SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), rsmd.getColumnTypeName( i + 1 ) );
                            builder.addAttribute( new QName( TYPE_ATTRIBUTE_NAME, Namespaces.SCHEMA_NS, "xs" ), Type.getTypeName( SQLUtils.sqlTypeToXMLType( rsmd.getColumnType( i + 1 ) ) ) );

                            //get the content
                            if(rsmd.getColumnType(i+1) == Types.SQLXML) {
                                //parse sqlxml value
                                try {
                                    final SQLXML sqlXml = rs.getSQLXML(i+1);
                                   
                                    if(rs.wasNull()) {
                                        // Add a null indicator attribute if the value was SQL Null
                                        builder.addAttribute( new QName( "null", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), "true" );
                                    } else {

                                        SAXParserFactory factory = SAXParserFactory.newInstance();
                                        factory.setNamespaceAware(true);
                                        InputSource src = new InputSource(sqlXml.getCharacterStream());
                                        SAXParser parser = factory.newSAXParser();
                                        XMLReader xr = parser.getXMLReader();

                                        SAXAdapter adapter = new AppendingSAXAdapter(builder);
                                        xr.setContentHandler(adapter);
                                        xr.setProperty(Namespaces.SAX_LEXICAL_HANDLER, adapter);
                                        xr.parse(src);
                                    }
                                } catch(Exception e) {
                                    throw new XPathException("Could not parse column of type SQLXML: " + e.getMessage(), e);
                                }
                            } else {
                                //otherwise assume string value
                                final String colValue = rs.getString(i + 1);
                               
                                if(rs.wasNull()) {
                                    // Add a null indicator attribute if the value was SQL Null
                                    builder.addAttribute( new QName( "null", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), "true" );
                                } else {
                                    if(colValue != null) {
                                        builder.characters(SQLUtils.escapeXmlText( colValue ));
                                    }
                                }
                            }

                            builder.endElement();
                        }
                    }

                    builder.endElement();
                    iRow++;
                }

                builder.endElement();
            } else {
                /* SQL Query performed updates */

                builder.startDocument();

                builder.startElement( new QName( "result", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
                builder.addAttribute( new QName( "updateCount", null, null ), String.valueOf( stmt.getUpdateCount() ) );
                builder.endElement();
            }

            // Change the root element count attribute to have the correct value
            NodeValue node  = (NodeValue)builder.getDocument().getDocumentElement();
            Node      count = node.getNode().getAttributes().getNamedItem( "count" );

            if( count != null ) {
                count.setNodeValue( String.valueOf( iRow ) );
            }

            builder.endDocument();

            // return the XML result set
            return( node );

        }
        catch( SQLException sqle ) {
            LOG.error( "sql:execute() Caught SQLException \"" + sqle.getMessage() + "\" for SQL: \"" + sql + "\"", sqle );

            //return details about the SQLException
            MemTreeBuilder builder = context.getDocumentBuilder();

            builder.startDocument();
            builder.startElement( new QName( "exception", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );

            boolean recoverable = false;

            if( sqle instanceof SQLRecoverableException ) {
                recoverable = true;
            }
            builder.addAttribute( new QName( "recoverable", null, null ), String.valueOf( recoverable ) );


            builder.startElement( new QName( "state", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
            builder.characters( sqle.getSQLState() );
            builder.endElement();

            builder.startElement( new QName( "message", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
           
            String state = sqle.getMessage();
           
            if( state != null ) {
              builder.characters( state );
            }
           
            builder.endElement();

            builder.startElement( new QName( "stack-trace", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
            ByteArrayOutputStream bufStackTrace = new ByteArrayOutputStream();
            sqle.printStackTrace( new PrintStream( bufStackTrace ) );
            builder.characters( new String( bufStackTrace.toByteArray() ) );
            builder.endElement();

            builder.startElement( new QName( "sql", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
            builder.characters( SQLUtils.escapeXmlText( sql ) );
            builder.endElement();

            if( stmt instanceof PreparedStatement ) {
                Element parametersElement = (Element)args[2].itemAt( 0 );

                if( parametersElement.getNamespaceURI().equals( SQLModule.NAMESPACE_URI ) && parametersElement.getLocalName().equals( PARAMETERS_ELEMENT_NAME ) ) {
                    NodeList paramElements = parametersElement.getElementsByTagNameNS( SQLModule.NAMESPACE_URI, PARAM_ELEMENT_NAME );

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

                    for( int i = 0; i < paramElements.getLength(); i++ ) {
                        Element param = ( (Element)paramElements.item( i ) );
                        String  value = param.getFirstChild().getNodeValue();
                        String  type  = param.getAttributeNS( SQLModule.NAMESPACE_URI, TYPE_ATTRIBUTE_NAME );

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

                        builder.addAttribute( new QName( TYPE_ATTRIBUTE_NAME, SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), type );
                        builder.characters( SQLUtils.escapeXmlText( value ) );

                        builder.endElement();
                    }

                    builder.endElement();
                }
            }

            builder.startElement( new QName( "xquery", SQLModule.NAMESPACE_URI, SQLModule.PREFIX ), null );
            builder.addAttribute( new QName( "line", null, null ), String.valueOf( getLine() ) );
            builder.addAttribute( new QName( "column", null, null ), String.valueOf( getColumn() ) );
            builder.endElement();

            builder.endElement();
            builder.endDocument();

            return( (NodeValue)builder.getDocument().getDocumentElement() );
        }
        finally {

            // close any record set or statement
            if( rs != null ) {
View Full Code Here

            long endRevision = -1; // = HEAD
            if (!args[3].isEmpty())
                startRevision = ((IntegerValue)args[3].itemAt(0)).getLong();
            if (!args[4].isEmpty())
                endRevision = ((IntegerValue)args[4].itemAt(0)).getLong();
            MemTreeBuilder builder = context.getDocumentBuilder();
            AttributesImpl attribs = new AttributesImpl();
            attribs.addAttribute("", "uri", "uri", "CDATA", uri);
            attribs.addAttribute("", "start", "start", "CDATA", Long.toString(startRevision));
            int nodeNr = builder.startElement(LOG_ELEMENT, attribs);
            LogHandler handler = new LogHandler(builder);
            repo.log(new String[0], startRevision, endRevision, true, false, handler);
            builder.endElement();
        return builder.getDocument().getNode(nodeNr);
        } catch (SVNException e) {
            throw new XPathException(this, e.getMessage(), e);
        }
    }
View Full Code Here

            contentSeq = super.eval(contextSequence, contextItem);

            if(contentSeq.isEmpty())
            result = Sequence.EMPTY_SEQUENCE;
            else {
                MemTreeBuilder builder = context.getDocumentBuilder();
                context.proceed(this, builder);

                StringBuilder buf = new StringBuilder();
                for(SequenceIterator i = contentSeq.iterate(); i.hasNext(); ) {
                    context.proceed(this, builder);
                    Item next = i.nextItem();
                    if(buf.length() > 0)
                        buf.append(' ');
                    buf.append(next.getStringValue());
                }

                if (buf.indexOf("--") != Constants.STRING_NOT_FOUND|| buf.toString().endsWith("-")) {
                    throw new XPathException(this, ErrorCodes.XQDY0072, "'" + buf.toString() + "' is not a valid comment");
                }

                int nodeNr = builder.comment(buf.toString());
                result = builder.getDocument().getNode(nodeNr);
            }
        } finally {
//            if (newDocumentContext)
//                context.popDocumentContext();
        }
View Full Code Here

            if (nv.getImplementationType() == NodeValue.IN_MEMORY_NODE)
                throw new XPathException("patch cannot be applied to in-memory documents");
            NodeProxy diffProxy = (NodeProxy) nv;
            DocumentImpl diff = diffProxy.getDocument();
       
            MemTreeBuilder builder = context.getDocumentBuilder();
            DocumentBuilderReceiver receiver = new DocumentBuilderReceiver(builder);
            Patch patch = new Patch(context.getBroker(), diff);
            if (isCalledAs("annotate"))
                patch.annotate(reader, receiver);
            else
                patch.patch(reader, receiver);
            NodeValue result = (NodeValue) builder.getDocument().getDocumentElement();
            return result == null ? Sequence.EMPTY_SEQUENCE : result;
        } catch (IOException e) {
            throw new XPathException(this, e.getMessage(), e);
        } catch (XMLStreamException e) {
            throw new XPathException(this, e.getMessage(), e);
View Full Code Here

            return Sequence.EMPTY_SEQUENCE;

        FunctionReference func = (FunctionReference) args[1].itemAt(0);

        NGramIndexWorker index = (NGramIndexWorker) context.getBroker().getIndexController().getWorkerByIndexId(NGramIndex.ID);
        MemTreeBuilder builder = context.getDocumentBuilder();
        DocumentBuilderReceiver docBuilder = new DocumentBuilderReceiver(builder);
        MatchCallback matchCb = new MatchCallback(func, docBuilder);
        Serializer serializer = context.getBroker().getSerializer();
        serializer.reset();
        ValueSequence result = new ValueSequence();
        for (SequenceIterator i = args[0].iterate(); i.hasNext(); ) {
            NodeValue v = (NodeValue) i.nextItem();
            try {
                int nodeNr = builder.getDocument().getLastNode();
                if (v.getImplementationType() == NodeValue.IN_MEMORY_NODE) {
                    ((NodeImpl)v).copyTo(context.getBroker(), docBuilder);
                } else {
                    NodeProxy p = (NodeProxy) v;
                    MatchListener ml = index.getMatchListener(context.getBroker(), p, matchCb);
                    Receiver receiver;
                    if (ml == null)
                        receiver = docBuilder;
                    else {
                        ml.setNextInChain(docBuilder);
                        receiver = ml;
                    }
                    serializer.setReceiver(receiver);
                    serializer.toReceiver((NodeProxy) v, false);
                }
                result.add(builder.getDocument().getNode(++nodeNr));
            } catch (SAXException e) {
                LOG.warn(e.getMessage(), e);
                throw new XPathException(this, e.getMessage());
            }
        }
View Full Code Here

   
    if( msgList.length > 0 ) {
     
      boolean includeHeaders = args[1].effectiveBooleanValue();
     
      MemTreeBuilder builder = context.getDocumentBuilder();
       
          builder.startDocument();
          builder.startElement( new QName( "messages", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
          builder.addAttribute( new QName( "count", null, null ), String.valueOf( msgList.length ) );
     
      try {
        for( int i = 0; i < msgList.length; i++ ) {
          Message message = msgList[ i ];
         
          builder.startElement( new QName( "message", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );

          builder.addAttribute( new QName( "number", null, null ), String.valueOf(message.getMessageNumber()) );
         
          // Sent Date
          if( message.getSentDate() != null ) {
            builder.startElement( new QName( "sent", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
            builder.characters( formatDate( message.getSentDate() ) );
            builder.endElement();
              }
         
          // Received Date
          if( message.getReceivedDate() != null ) {
            builder.startElement( new QName( "received", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
            builder.characters( formatDate( message.getReceivedDate() ) );
            builder.endElement();
              }
         
          // From
          if( message.getFrom() != null ) {
            builder.startElement( new QName( "from", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
            builder.characters( message.getFrom()[0].toString() );
            builder.endElement();
          }
         
          // Recipients
          builder.startElement( new QName( "recipients", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
            // To Recipients
            Address[] toAddresses = message.getRecipients( Message.RecipientType.TO );
            if( toAddresses != null ) {
                        for (Address to : toAddresses) {
                            builder.startElement( new QName( "recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                            builder.addAttribute( new QName( "type", null, null ), "to" );
                            builder.characters(to.toString());
                            builder.endElement();
                        }
            }
           
            // cc Recipients
            Address[] ccAddresses = message.getRecipients( Message.RecipientType.CC );
            if( ccAddresses != null ) {
                        for (Address ccAddress : ccAddresses) {
                            builder.startElement( new QName( "recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                            builder.addAttribute( new QName( "type", null, null ), "cc" );
                            builder.characters(ccAddress.toString());
                            builder.endElement();
                        }
            }
           
            // bcc Recipients
            Address[] bccAddresses = message.getRecipients( Message.RecipientType.BCC );
            if( bccAddresses != null ) {
                        for (Address bccAddress : bccAddresses) {
                            builder.startElement( new QName( "recipient", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                            builder.addAttribute( new QName( "type", null, null ), "bcc" );
                            builder.characters(bccAddress.toString());
                            builder.endElement();
                        }
            }
          builder.endElement();
         
          // Flags
         
          Flags       flags   = message.getFlags();
          Flags.Flag[]   systemFlags    = flags.getSystemFlags();
          String[]     userFlags     = flags.getUserFlags();
         
          if( systemFlags.length > 0 || userFlags.length > 0 ) {
            builder.startElement( new QName( "flags", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
           
                        for (Flags.Flag systemFlag : systemFlags) {
                            if (systemFlag == Flags.Flag.ANSWERED) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "answered" );
                                builder.endElement();
                            } else if (systemFlag == Flags.Flag.DELETED) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "deleted" );
                                builder.endElement();
                            } else if (systemFlag == Flags.Flag.DRAFT) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "draft" );
                                builder.endElement();
                            } else if (systemFlag == Flags.Flag.FLAGGED) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "flagged" );
                                builder.endElement();
                            } else if (systemFlag == Flags.Flag.RECENT) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "recent" );
                                builder.endElement();
                            } else if (systemFlag == Flags.Flag.SEEN) {
                                builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                                builder.addAttribute( new QName( "type", null, null ), "seen" );
                                builder.endElement();
                            }
                        }
           
                        for (String userFlag : userFlags) {
                            builder.startElement( new QName( "flag", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                            builder.addAttribute( new QName( "type", null, null ), "user" );
                            builder.addAttribute(new QName( "value", null, null ), userFlag);
                            builder.endElement();
                        }

            builder.endElement();
          }

          // Headers
         
          if( includeHeaders ) {
            Enumeration headers = message.getAllHeaders();
           
            if( headers.hasMoreElements() ) {
              builder.startElement( new QName( "headers", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
             
              while( headers.hasMoreElements() ) {
                Header header = (Header)headers.nextElement();
               
                builder.startElement( new QName( "header", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
                      builder.addAttribute( new QName( "name", null, null ), header.getName() );
                builder.addAttribute( new QName( "value", null, null ), header.getValue() );
                builder.endElement();
              }
             
              builder.endElement();
            }
          }
         
          // Subject
          builder.startElement( new QName( "subject", MailModule.NAMESPACE_URI, MailModule.PREFIX ), null );
          builder.characters( message.getSubject() );
          builder.endElement();
         
          builder.endElement();
        }
      }
      catch( MessagingException me ) {
        throw( new XPathException(this, "Failed to retrieve messages from list", me ) );
      }
     
      builder.endElement();
       
          ret = (NodeValue)builder.getDocument().getDocumentElement();
    }
   
    return( ret );
  }
View Full Code Here

    String target = args[1].getStringValue();
        File targetDir = FileModuleHelper.getFile(target);
       
   
    context.pushDocumentContext();
    MemTreeBuilder output = context.getDocumentBuilder();
    try {
      if (!targetDir.isAbsolute()) {
        File home = context.getBroker().getConfiguration().getExistHome();
        targetDir = new File(home, target);
      }
     
      output.startDocument();
      output.startElement(new QName("sync", FileModule.NAMESPACE_URI), null);
      output.addAttribute(new QName("collection", FileModule.NAMESPACE_URI), collectionPath);
      output.addAttribute(new QName("dir", FileModule.NAMESPACE_URI), targetDir.getAbsolutePath());
     
      saveCollection(XmldbURI.create(collectionPath), targetDir, startDate, output);
     
      output.endElement();
      output.endDocument();
        } catch(PermissionDeniedException pde) {
            throw new XPathException(this, pde);
    } finally {
      context.popDocumentContext();
    }
    return output.getDocument();
  }
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.