Package org.exist.xmldb.concurrent.action

Source Code of org.exist.xmldb.concurrent.action.ComplexUpdateAction

package org.exist.xmldb.concurrent.action;

import junit.framework.Assert;

import org.xmldb.api.DatabaseManager;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.ResourceSet;
import org.xmldb.api.base.XMLDBException;
import org.xmldb.api.modules.XMLResource;
import org.xmldb.api.modules.XPathQueryService;
import org.xmldb.api.modules.XUpdateQueryService;

/**
* @author wolf
*/
public class ComplexUpdateAction extends Action {

  String sessionUpdate =
    "<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
    "<xu:update select=\"//USER-SESSION-DATA[1]\">" +
    "<xu:element name=\"USER-SESSION-STATUS\">" +
    "<xu:attribute name=\"access-type\">LAST-RESORT</xu:attribute>" +
    "<xu:attribute name=\"authServer\">10.12.1.10</xu:attribute>" +
    "<xu:attribute name=\"authprotocol\">NONE</xu:attribute>" +
    "<xu:attribute name=\"elapsed-time\">60000</xu:attribute>" +
    "<xu:attribute name=\"ip-addr\">192.168.1.97</xu:attribute>" +
    "<xu:attribute name=\"local-id\"></xu:attribute>" +
    "<xu:attribute name=\"mac-addr\">00:3f:cf:7f:8f:da</xu:attribute>" +
    "<xu:attribute name=\"session-id\">4917-AlphaMX3-(MX8)-Thu Sep 30 19:36:03 PDT 2004</xu:attribute>" +
    "<xu:attribute name=\"session-state\">ACTIVE</xu:attribute>" +
    "<xu:attribute name=\"ssid\">TRPZ-ENG</xu:attribute>" +
    "<xu:attribute name=\"start-time\">1096601394656</xu:attribute>" +
    "<xu:attribute name=\"user-name\">user137</xu:attribute>" +
    "<xu:attribute name=\"vlan-name\">default</xu:attribute>" +
    "<xu:attribute name=\"collected-time\">1096601435484</xu:attribute>" +
        "<USER-LOCATION-MEMBER ap-radio=\"1\" ap-type=\"AP\" dap=\"0\" " +
    "dp-system-ip=\"192.168.12.7\" module=\"1\" port=\"3\" " +
    "start-time=\"1096601358656\"/>" +
    "</xu:element>" +
    "<xu:element name=\"USER-SESSION-STATISTICS\">" +
    "<xu:attribute name=\"op-rate\">48</xu:attribute>" +
    "<xu:attribute name=\"rssi\">-65</xu:attribute>" +
    "<xu:attribute name=\"session-id\">4917-AlphaMX3-(MX8)-Thu Sep 30 19:36:03 PDT 2004</xu:attribute>" +
    "<xu:attribute name=\"snr\">50</xu:attribute>" +
    "<xu:attribute name=\"bps\">4448.6</xu:attribute>" +
    "<USER-SESSION-AP-ACCUM rx-badcrypt-bytes=\"55230\" rx-badcrypt-pkts=\"27576\" " +
    "rx-multi-bytes=\"55231\" rx-multi-pkts=\"27623\" rx-uni-bytes=\"55277\" " +
    "rx-uni-pkts=\"27555\" tx-timeouts=\"27554\" tx-uni-bytes=\"55250\" " +
    "tx-uni-pkts=\"27640\" type=\"CURRENT\"/>" +
        "<USER-SESSION-AP-ACCUM rx-badcrypt-bytes=\"88945\" " +
    "rx-badcrypt-pkts=\"29613\" rx-multi-bytes=\"88953\" "+
    "rx-multi-pkts=\"29614\" rx-uni-bytes=\"88998\" " +
    "rx-uni-pkts=\"29687\" tx-timeouts=\"29615\" " +
    "tx-uni-bytes=\"88966\" tx-uni-pkts=\"29614\" type=\"LIFETIME\"/>" +
        "</xu:element>" +
        "</xu:update>" +
        "</xu:modifications>";
 
  String statusUpdate =
    "<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
    "<xu:update select=\"//USER-SESSION-DATA[1]/USER-SESSION-STATUS/@session-state\">INACTIVE</xu:update>" +
    "</xu:modifications>";
 
  private int repeat;

  /**
   * @param collectionPath
   * @param resourceName
   */
  public ComplexUpdateAction(String collectionPath, String resourceName, int repeat) {
    super(collectionPath, resourceName);
    this.repeat = repeat;
  }

  /* (non-Javadoc)
   * @see org.exist.xmldb.test.concurrent.Action#execute()
   */
  public boolean execute() throws Exception {
    Collection col = DatabaseManager.getCollection(collectionPath, "admin", null);
    for(int i = 0; i < repeat; i++) {
      System.out.println("Starting run " + (i + 1));
      query(col, i);
      col.close();
     
      update(col, sessionUpdate);
      // The following update will fail
      String versionUpdate =
        "<xu:modifications xmlns:xu=\"http://www.xmldb.org/xupdate\" version=\"1.0\">" +
        "<xu:update select=\"//USER-SESSION-DATA[1]/@version\">" + (i + 1) +
        "</xu:update></xu:modifications>";
      update(col, versionUpdate);
      update(col, statusUpdate);
    }
    return false;
  }

  /**
   * @param col
   */
  private void query(Collection col, int repeat) throws XMLDBException {
    XPathQueryService service = (XPathQueryService)col.getService("XPathQueryService", "1.0");
    ResourceSet r = service.query("//USER-SESSION-DATA");
    Assert.assertEquals(1, r.getSize());
    System.out.println("------------------------------------------------------------------");
    for(long i = 0; i < r.getSize(); i++) {
      XMLResource res = (XMLResource)r.getResource(i);
      System.out.println(res.getContent());
    }
    System.out.println("------------------------------------------------------------------");
   
    r = service.query("string(//USER-SESSION-DATA[1]/@version)");
    Assert.assertEquals(1, r.getSize());
    Assert.assertEquals(repeat, Integer.parseInt(r.getResource(0).getContent().toString()));
  }

  private void update(Collection col, String xupdate) throws XMLDBException {
    XUpdateQueryService service = (XUpdateQueryService)
    col.getService("XUpdateQueryService", "1.0");
    long mods = service.updateResource(resourceName, xupdate);
    System.out.println("Processed " + mods + " modifications.");
  }
 
  @SuppressWarnings("unused")
  private void displayResource(Collection col) throws XMLDBException {
    XMLResource res = (XMLResource)col.getResource(resourceName);
    System.out.println("------------------------------------------------------------------");
    System.out.println(res.getContent());
    System.out.println("------------------------------------------------------------------");
  }
}
TOP

Related Classes of org.exist.xmldb.concurrent.action.ComplexUpdateAction

TOP
Copyright © 2018 www.massapi.com. 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.