Package Express.services

Source Code of Express.services.ConcurrencyKeys

package Express.services;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

import DisplayProject.binding.beans.ExtendedPropertyChangeSupport;
import DisplayProject.binding.beans.Observable;
import Framework.Constants;
import Framework.HashTable;
import Framework.RuntimeProperties;

/**
* This class appears in the project, but is for internal use only and is not documented.
* <p>
* @author ITerative Consulting
* @since  26-Feb-2008
*/
@RuntimeProperties(isDistributed=false, isAnchored=false, isShared=false, isTransactional=false)
@SuppressWarnings("serial")
public class ConcurrencyKeys
        implements Serializable, Observable
{

    // ----------
    // Attributes
    // ----------
    public PropertyChangeSupport qq_Listeners = new ExtendedPropertyChangeSupport(this, true);
    private HashTable keys;
    private int lastClean;

    // ------------
    // Constructors
    // ------------
    public ConcurrencyKeys() {
        // Explicitly call the superclass constructor to prevent the implicit call
        super();

    }

    // -------
    // Methods
    // -------
    public void addPropertyChangeListener(String property, PropertyChangeListener listener) {
        qq_Listeners.addPropertyChangeListener(property, listener);
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        qq_Listeners.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(String property, PropertyChangeListener listener) {
        qq_Listeners.removePropertyChangeListener(property, listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        qq_Listeners.removePropertyChangeListener(listener);
    }

    /**
     * add<p>
     * <p>
     * @param keyCB Type: ConcurrencyKeyCB
     */
    public void add(ConcurrencyKeyCB keyCB) {
        this.keys.enter(keyCB, keyCB.getKey());
    }

    /**
     * drop<p>
     * <p>
     * @param keyCB Type: ConcurrencyKeyCB
     * @param stamp Type: int
     */
    @SuppressWarnings("unchecked")
  public void drop(ConcurrencyKeyCB keyCB, int stamp) {
        keyCB.setCount(keyCB.getCount()-1);

        if (keyCB.getCount() <= 0) {

            if (keyCB.getCount() < 0) {
                throw new Error(Error.CM_NEGATIVE_REF_COUNT, "Drop", this, keyCB.getKey(), Error.qq_Resolver.cERROR_METHODNAME_ORIGINATOR_PARAM1).getException();
            }
            else if (keyCB.getLocked()) {
                throw new Error(Error.CM_DROPPING_LOCKED_KEY, "Drop", this, keyCB.getKey(), Error.qq_Resolver.cERROR_METHODNAME_ORIGINATOR_PARAM1).getException();
            }

            if (keyCB.getUpdateStamp() == 0) {
                this.keys.remove(keyCB.getKey());
            }

            if (stamp > this.lastClean) {
                this.lastClean = stamp;
                Array_Of_ConcurrencyKeyCB<ConcurrencyKeyCB> qq_localVector = this.keys.fillArray(Array_Of_ConcurrencyKeyCB.class);
                if (qq_localVector != null) {
                    for (ConcurrencyKeyCB k : qq_localVector) {
                        if (k.getCount() == 0 && k.getStamp() < stamp) {
                            this.keys.remove(k.getKey());
                        }
                    }
                }
            }

        }
    }

    /**
     * get<p>
     * <p>
     * @param key Type: BusinessKey
     * @return ConcurrencyKeyCB
     */
    public ConcurrencyKeyCB get(BusinessKey key) {
        return (ConcurrencyKeyCB)this.keys.find(key);
    }

    /**
     * setup<p>
     * <p>
     * @param size Type: int (Input) (default in Forte: 0)
     */
    public void setup(int size) {
        int tableSize = size;

        if (tableSize == 0) {
            tableSize = 1000;
        }

        this.keys = new HashTable();
        this.keys.setup(tableSize, new ConcurrencyKeyHash(Constants.SP_KT_OBJECT));
    }
// end class ConcurrencyKeys
// c Pass 2 Conversion Time: 312 milliseconds
TOP

Related Classes of Express.services.ConcurrencyKeys

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.