Package org.exist.xquery.value

Examples of org.exist.xquery.value.ValueSequence


      validation = attr.getValue();
    }
  }
 
  public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {
    Sequence result = new ValueSequence();
   
    if (contextItem != null)
      contextSequence = contextItem.toSequence();

    context.pushInScopeNamespaces();
   
        MemTreeBuilder builder = context.getDocumentBuilder();

        try {
//            for (Item item : contextSequence) {
            for (SequenceIterator iterInner = contextSequence.iterate(); iterInner.hasNext();) {
                Item i = iterInner.nextItem();
               
                org.w3c.dom.Node item;
                if (i instanceof NodeValue) {
                  item = ((NodeValue) i).getNode();
        } else
                  item = (org.w3c.dom.Node) i;

                //UNDERSTAND: strange place to workaround
              if (item instanceof org.w3c.dom.Document) {
            org.w3c.dom.Document document = (org.w3c.dom.Document) item;
            item = document.getDocumentElement();
          }
         
          if (item instanceof org.w3c.dom.Element) {
            QName qn;
                  if (item instanceof QNameValue) {
                      qn = ((QNameValue)item).getQName();
                  } else {
                      qn = ((QNameable)item).getQName();
                      if (qn.getPrefix() == null && context.getInScopeNamespace("") != null) {
                           qn.setNamespaceURI(context.getInScopeNamespace(""));
                      }
                  }
            int nodeNr = builder.startElement(qn, null);
           
            if (use_attribute_sets != null)
              getXSLContext().getXSLStylesheet().attributeSet(use_attribute_sets, contextSequence, i);

            super.eval(contextSequence, i);
           
                  builder.endElement();
                  NodeImpl node = builder.getDocument().getNode(nodeNr);
                  result.add(node);
          } else if (item instanceof org.w3c.dom.Text) {
            int nodeNr = builder.characters(i.getStringValue());
                  NodeImpl node = builder.getDocument().getNode(nodeNr);
                  result.add(node);
          } else {
            throw new XPathException("not supported node type "+i.getType());
          }
        }
        } finally {
View Full Code Here


//     
//      return sets;
//    }

    public Sequence attributeSet(String name, Sequence contextSequence, Item contextItem) throws XPathException {
      Sequence result = new ValueSequence();
     
      String[] names = name.split(" ");
     
      String n;
      for (int i = 0; i < names.length; i++) {
        n = names[i];
        if (attributeSets.containsKey(n)) {
          List<AttributeSet> list = attributeSets.get(n);
          for (AttributeSet set : list) {
            result.addAll(set.eval(null, null));
          }
        } else {
          //UNDERSTAND: error???
        }
      }
View Full Code Here

    }
   
    public Sequence templates(Sequence contextSequence, Item contextItem) throws XPathException {

    boolean matched = false;
    Sequence result = new ValueSequence();

    Sequence currentSequence = contextSequence;
   
    if (contextItem != null)
      currentSequence = contextItem.toSequence();
   
    int pos = context.getContextPosition();
   
//    for (Item item : currentSequence) {
    for (SequenceIterator iterInner = currentSequence.iterate(); iterInner.hasNext();) {
      Item item = iterInner.nextItem();
//      if (currentSequence == item)
//        item = null;

      //UNDERSTAND: work around
//      if (item instanceof org.w3c.dom.Document) {
//        org.w3c.dom.Document document = (org.w3c.dom.Document) item;
//        item = (Item) document.getDocumentElement();
//      }
     
      context.setContextSequencePosition(pos, currentSequence);
     
      if ((contextItem == null) && (rootTemplate != null)) {
        context.setContextSequencePosition(0, currentSequence);
        Sequence res = rootTemplate.eval(contextSequence, item);
        result.addAll(res);
        matched = true;
      }

      for (Template template : templates) {
        if (template.matched(contextSequence, item)) { //contextSequence
          matched = true;
         
          Sequence res = template.eval(contextSequence, item);
          result.addAll(res);
          if (res.getItemCount() > 0)
            break;
        }
      }
     
      //XXX: performance !?! how to get subelements sequence?? fast...
      if (!matched) {
        if (item instanceof ElementAtExist || item instanceof DocumentAtExist) {
          NodeAtExist node = (NodeAtExist) item;
         
          NodeList children = node.getChildNodes();
          for (int i=0; i<children.getLength(); i++) {
            NodeAtExist child = (NodeAtExist)children.item(i);
           
//            if (child instanceof Text) {
//                        MemTreeBuilder builder = context.getDocumentBuilder();
//                    builder.characters(item.getStringValue());
//                    result.add(item);
//            } else {
              Sequence res = templates((Sequence)node, (Item)child);
              if (res != null) {
                result.addAll(res);
                matched = true;
              }
//            }
          }
        }
View Full Code Here

   
    public Sequence template(QName name, Sequence contextSequence, Item contextItem) throws XPathException {
    if (!namedTemplates.containsKey(name))
      throw new XPathException("no template with given name = "+name);//TODO: error?
   
    Sequence result = new ValueSequence();

    Sequence currentSequence = contextSequence;
   
    if (contextItem != null)
      currentSequence = contextItem.toSequence();

    int pos = context.getContextPosition();

    Template template = namedTemplates.get(name);
    for (SequenceIterator iterInner = currentSequence.iterate(); iterInner.hasNext();) {
      Item item = iterInner.nextItem();  
     
      //UNDERSTAND: work around
//      if (item instanceof org.w3c.dom.Document) {
//        org.w3c.dom.Document document = (org.w3c.dom.Document) item;
//        item = (Item) document.getDocumentElement();
//      }
     
      context.setContextSequencePosition(pos, currentSequence);

      Sequence res = template.eval(contextSequence, item);
      result.addAll(res);
      if (res.getItemCount() > 0)
        break;

      pos++;
    }
View Full Code Here

        Item item = (Item)args[0].itemAt(0);

        if(!(item instanceof AbstractDateTimeValue))
          throw new XPathException("Function requires one of xs:dateTime, xs:date, or xs:time as first parameter.");

        ValueSequence result = new ValueSequence();
        AbstractDateTimeValue d1 = (AbstractDateTimeValue)item;
        DurationValue diff = (DurationValue)args[1].itemAt(0);
        Sequence seq = args[2].convertTo(Type.INTEGER);
        int count = ((NumericValue)seq.itemAt(0).convertTo(Type.INTEGER)).getInt();
        if (count < 0)
            count = 0;

        // loop through dates/times
        while(count-- > 0)
        {
          result.add(d1);
          d1 = (AbstractDateTimeValue)d1.plus(diff);
        }

        return result;
    }
View Full Code Here

  public Sequence transform(Item xmlSource) throws XPathException {
    if (compiled == null)
      throw new XPathException("Stylesheet has not been prepared.");
   
    //work around for top xpath child::
    Sequence source = new ValueSequence();

    Item xslItem = xmlSource;
    if (xmlSource instanceof Node) {
      xslItem = (Item) ((Node) xmlSource).getOwnerDocument();
    }
    source.add(xslItem);
   
    return compiled.eval(source);
  }
View Full Code Here

  public Sequence transform(Sequence xmlSource) throws XPathException {
    if (compiled == null)
      throw new XPathException("Stylesheet has not been prepared.");
   
    //work around for top xpath child::
    Sequence source = new ValueSequence();
//    for (Item item : xmlSource) {
    for (SequenceIterator iterInner = xmlSource.iterate(); iterInner.hasNext();) {
      Item item = iterInner.nextItem();  
     
      Item xslItem = item;
      if (item instanceof Node) {
        xslItem = (Item) ((Node) item).getOwnerDocument();
      }
      source.add(xslItem);
    }
   
    return compiled.eval(source);
  }
View Full Code Here

            " FROM " + GMLHSQLIndex.TABLE_NAME + (refine_query_on_doc ? " WHERE " + docConstraint : "")
        );
        ResultSet rs = null;
        try {
            rs = ps.executeQuery();
            ValueSequence result;
            if (contextSet == null)
                result = new ValueSequence();
            else
                result = new ValueSequence(contextSet.getLength());
            while (rs.next()) {
                DocumentImpl doc = null;
                try {
                    doc = (DocumentImpl)broker.getXMLResource(XmldbURI.create(rs.getString("DOCUMENT_URI")));             
                } catch (PermissionDeniedException e) {
                    LOG.debug(e);
                    //Untested, but that is roughly what should be returned.
                    if (rs.getMetaData().getColumnClassName(1).equals(Boolean.class.getName())) {
                        result.add(AtomicValue.EMPTY_VALUE);
                    } else if (rs.getMetaData().getColumnClassName(1).equals(Double.class.getName())) {
                        result.add(AtomicValue.EMPTY_VALUE);
                    } else if (rs.getMetaData().getColumnClassName(1).equals(String.class.getName())) {
                        result.add(AtomicValue.EMPTY_VALUE);
                    } else if (rs.getMetaData().getColumnType(1) == java.sql.Types.BINARY) {
                        result.add(AtomicValue.EMPTY_VALUE);
                    } else
                        throw new SQLException("Unable to make an atomic value from '" + rs.getMetaData().getColumnClassName(1) + "'");
                    //Ignore since the broker has no right on the document
                    continue;
                }
                if (contextSet.getDocumentSet().contains(doc.getDocId())) {
                    NodeId nodeId = new DLN(rs.getInt("NODE_ID_UNITS"), rs.getBytes("NODE_ID"), 0);
                    NodeProxy p = new NodeProxy(doc, nodeId);
                    //Node is in the context : check if it is accurate
                    //contextSet.contains(p) would have made more sense but there is a problem with
                    //VirtualNodeSet when on the DESCENDANT_OR_SELF axis
                    if (contextSet.get(p) != null) {
                        if (rs.getMetaData().getColumnClassName(1).equals(Boolean.class.getName())) {
                            result.add(new BooleanValue(rs.getBoolean(1)));
                        } else if (rs.getMetaData().getColumnClassName(1).equals(Double.class.getName())) {
                            result.add(new DoubleValue(rs.getDouble(1)));
                        } else if (rs.getMetaData().getColumnClassName(1).equals(String.class.getName())) {
                            result.add(new StringValue(rs.getString(1)));
                        } else if (rs.getMetaData().getColumnType(1) == java.sql.Types.BINARY) {
                            result.add(BinaryValueFromInputStream.getInstance(context, new Base64BinaryValueType(), new ByteArrayInputStream(rs.getBytes(1))));
                        } else
                            throw new SQLException("Unable to make an atomic value from '" + rs.getMetaData().getColumnClassName(1) + "'");
                    }
                }
            }
View Full Code Here

      if (atRootCall)
        contextInfo.addFlag(DOT_TEST);
    }
 
    public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {
    Sequence result = new ValueSequence();
     
      Sequence selected = select.eval(contextSequence, contextItem);
     
    Collator collator = getCollator(contextSequence, contextItem, 2);   
    TreeMap<AtomicValue, Sequence> map = new TreeMap<AtomicValue, Sequence>(new ValueComparator(collator));

    Item item;
    AtomicValue value;
    NumericValue firstNaN = null;
    for (SequenceIterator i = selected.iterate(); i.hasNext();) {
      item = i.nextItem();
      value = group_by.eval(selected, item).itemAt(0).atomize(); //UNDERSTAND: is it correct?
      if (!map.containsKey(value)) {
        if (Type.subTypeOf(value.getType(), Type.NUMBER)) {
          if (((NumericValue)value).isNaN()) {
            //although NaN does not equal itself, if $arg contains multiple NaN values a single NaN is returned.
            if (firstNaN == null) {
              Sequence seq = new ValueSequence();
              seq.add(item);
              map.put(value, seq);
              firstNaN = (NumericValue)value;
            } else {
              Sequence seq = map.get(firstNaN);
              seq.add(item);
            }
            continue;
          }
        }
        Sequence seq = new ValueSequence();
        seq.add(item);
        map.put(value, seq);
      } else {
        Sequence seq = map.get(value);
        seq.add(item);
      }
    }

    for (Entry<AtomicValue, Sequence> entry : map.entrySet()) {
      for (SequenceIterator iterInner = entry.getValue().iterate(); iterInner.hasNext();) {
View Full Code Here

        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

TOP

Related Classes of org.exist.xquery.value.ValueSequence

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.