Package abstrasy

Source Code of abstrasy.Pattern

package abstrasy;


import abstrasy.externals.AExtClonable;

import abstrasy.interpreter.InterpreterException;
import abstrasy.interpreter.StdErrors;

/**
* Abstrasy Interpreter
*
* Copyright : Copyright (c) 2006-2012, Luc Bruninx.
*
* Concédée sous licence EUPL, version 1.1 uniquement (la «Licence»).
*
* Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
* Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
*
*   http://www.osor.eu/eupl
*
* Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous
* la Licence est distribué "en l’état", SANS GARANTIES OU CONDITIONS QUELLES
* QU’ELLES SOIENT, expresses ou implicites.
*
* Consultez la Licence pour les autorisations et les restrictions
* linguistiques spécifiques relevant de la Licence.
*
*
* @author Luc Bruninx
* @version 1.0
*/

public class Pattern implements AExtClonable{

    //
    // type primaire
    //
    private long primaryType = Node.TYPE_NONE;
   
    //
    // corps du pattern
    //
    private Node bodyPx = null;
   
    //
    // interface de contrainte générique
    //
    private Node iface=null;

    public Pattern(){
    }

    public static Pattern createPattern(long primaryType,Node bodyPx, Node iface){
        Pattern px=new Pattern();
        px.setPrimaryType(primaryType);
        px.setBodyPx(bodyPx);
        px.setIface(iface);
        return px;
    }
   
    public static Pattern createPattern(String externalId) throws InterpreterException {
        Pattern px=new Pattern();
        px.setPrimaryType(Node.TYPE_EXTERNAL);
        px.setBodyPx( Node.createLazy().append(Node.createPCode(PCoder.PC_EXTERNAL)).append(new Node(externalId)) );
        return px;
    }
   
    public boolean equals(Pattern pattern) throws Exception {
        if(pattern==null) return false;
        if(this==pattern) return true;
        if(this.primaryType!=pattern.primaryType) return false;
        if((this.iface!=null && pattern.iface==null) || (this.iface==null && pattern.iface!=null)) return false;
        if(this.iface!=null && !Node.equalsNodes(iface, pattern.iface)) return false;
        return Node.equalsNodes(bodyPx,pattern.bodyPx);
    }
   
    public void requirePrimaryType(Node node) throws InterpreterException {
            if (node==null)
                throw new InterpreterException(StdErrors.extend(StdErrors.Object_required, "void pattern"));
            node.requireNodeType(primaryType);
    }
   
    public void requireInterface(Node node) throws InterpreterException {
        if(iface!=null){
            Interface cinter=(Interface)iface.getExternal();
            cinter.require(node);
        }
    }
   
    public void requireAll(Node node) throws InterpreterException {
        requirePrimaryType(node);
        requireInterface(node);                            
    }

    @Override
    public Object clone_my_self(Bivalence bival) throws Exception {
        Pattern res=new Pattern();
        //
        // les éléments sont copiés et non clonés
        //
        res.setPrimaryType(primaryType);
        res.setBodyPx(bodyPx);
        res.setIface(iface);
        return res;
    }


    public void setPrimaryType(long primaryType) {
        this.primaryType = primaryType;
    }

    public long getPrimaryType() {
        return primaryType;
    }

    public void setBodyPx(Node bodyPx) {
        this.bodyPx = bodyPx;
    }

    public Node getBodyPx() {
        return bodyPx;
    }

    public void setIface(Node iface) {
        this.iface = iface;
    }

    public Node getIface() {
        return iface;
    }

}
TOP

Related Classes of abstrasy.Pattern

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.