Package client.net.sf.saxon.ce.trans.update

Source Code of client.net.sf.saxon.ce.trans.update.PendingUpdateList

package client.net.sf.saxon.ce.trans.update;

import client.net.sf.saxon.ce.Configuration;
import client.net.sf.saxon.ce.expr.XPathContext;
import client.net.sf.saxon.ce.trans.XPathException;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

/**
* List of pending updates to the browser's HTML page
*/
public class PendingUpdateList {


    private List<PendingUpdateAction> list = new ArrayList<PendingUpdateAction>();

    private Logger logger = Logger.getLogger("PendingUpdateList");

    /**
     * Create a Pending Update List
     */

    public PendingUpdateList(Configuration config){
        //this.config = config;
    }

    /**
     * Add an action to the pending update list
     * @param action the Pending Update Action to be added to the list
     * @throws client.net.sf.saxon.ce.trans.XPathException if the pending update action conflicts with an action that is already on the list
     */

    public void add(PendingUpdateAction action) throws XPathException {
        list.add(action);
    }

    /**
     * Apply the pending updates
     * @param context the XPath dynamic evaluation context
     */

    public synchronized void apply(XPathContext context) throws XPathException {
      String state = "";
      try {
      state = "delete";
        for (int i=0; i<list.size(); i++) {
            PendingUpdateAction action = list.get(i);
            if (action instanceof DeleteAction) {
                action.apply(context);
            }
        }
        state = "insert";
        for (int i=0; i<list.size(); i++) {
            PendingUpdateAction action = list.get(i);
            if (action instanceof InsertAction) {
                action.apply(context);
            }
        }
        state = "set-attribute";
        for (int i=0; i<list.size(); i++) {
            PendingUpdateAction action = list.get(i);
            if (action instanceof SetAttributeAction) {
                action.apply(context);
            }
        }
        state = "remove-attribute";
        for (int i=0; i<list.size(); i++) {
            PendingUpdateAction action = list.get(i);
            if (action instanceof RemoveAttributeAction) {
                action.apply(context);
            }
        }
        // empty list in case of further scheduled actions
        list = new ArrayList<PendingUpdateAction>();
      } catch(Exception e) {
        logger.severe("Error on DOM write action: " + state + " " + e.getMessage());
        throw new XPathException(e);
      }


    }


}

// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// This Source Code Form is “Incompatible With Secondary Licenses”, as defined by the Mozilla Public License, v. 2.0.

TOP

Related Classes of client.net.sf.saxon.ce.trans.update.PendingUpdateList

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.