Back to index

wims  3.65+svn20090927
Mfd2SubstitutionElement.java
Go to the documentation of this file.
00001 /*
00002 $Id: Mfd2SubstitutionElement.java,v 1.3 2003/02/18 11:48:47 sander Exp $
00003 */
00004 
00005 
00006 /*
00007 Copyright (C) 2001-2002 Mainline Project (I3S - ESSI - CNRS -UNSA)
00008 
00009 This library is free software; you can redistribute it and/or
00010 modify it under the terms of the GNU Lesser General Public
00011 License as published by the Free Software Foundation; either
00012 version 2.1 of the License, or (at your option) any later version.
00013 
00014 This library is distributed in the hope that it will be useful,
00015 but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public
00020 License along with this library; if not, write to the Free Software
00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 
00023 For further information on the GNU Lesser General Public License,
00024 see: http://www.gnu.org/copyleft/lesser.html
00025 For further information on this library, contact: mainline@essi.fr
00026 */
00027 
00028 
00029 package fr.ove.openmath.jome.model;
00030 
00031 import java.util.*;
00032 import fr.ove.openmath.jome.model.*;
00033 import fr.ove.openmath.jome.model.events.ModelEvent;
00034 
00045 public class Mfd2SubstitutionElement extends KaryOperator {
00046     private boolean gotoVariable = true;
00047     private boolean addNewInstance = false;
00048     
00053     public Mfd2SubstitutionElement() {
00054         // le nom du Cd et le nom du symbol sont mis a "" car l'instance ne correspond à aucun symbol dans
00055         // un cd. L'instance est juste un constituant d'un opérateur correspondant à un symbol dans un cd
00056         // Même remarque en ce qui concerne la forme linéaire (nom opérateur et ending).
00057         //super("substElem", "", 2, "", "");
00058         setResourceIdentifier("substElem");
00059         setTheOperator("");
00060         setOperatorArity(2);
00061         setEnding("");
00062     }
00063     
00069     public FormulaTreeStructure insert(FormulaTreeStructure current) {
00070         // Surcharge car on insère un template supplémentaire pour coller à l'arité du symbol
00071         current = super.insert(current);
00072         super.addElement();
00073         return current;
00074     }
00075     
00080     public FormulaTreeStructure addElement() {
00081         // surchage car :
00082         // * si gotoVariable, le addElement correspond à se positionner sur le second template
00083         // * si addNewInstance, alors ça veut dire que l'on veut ajouter un autre élément (i.e. instance)
00084         //   C'est dû au fait que l'instance gère l'aspet 2n-aire d'un opérateur (dont l'instance est un
00085         // opérande) dont la saisie est la même que pour une opérateur n-aire.
00086         if (gotoVariable) {
00087             gotoVariable = false;
00088             addNewInstance = true;
00089             return (FormulaTreeStructure) getChild(1).getChild(0);
00090         }
00091         else if (addNewInstance) {
00092             // On veut ajouter un autre élement, donc il faut remonter sur le grand-père (car en fait
00093             // le père est un Slot) et ajouter un élément au père.
00094             addNewInstance = false;
00095             return ((Mfd2Substitution) getFather().getFather()).addElement();
00096         }
00097         else
00098             return super.addElement(); // normalement ne devrait pas être appelé, sinon non respect arité.
00099     }
00100 
00120 }