Back to index

wims  3.65+svn20090927
UnaryOperator.java
Go to the documentation of this file.
00001 /*
00002 $Id: UnaryOperator.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 
00038 public class UnaryOperator extends Operator {
00046     public FormulaTreeStructure insert(FormulaTreeStructure current) {
00047         // On recherche la position d'insertion de notre instance.
00048         current = findLocation(current);
00049 
00050         if (current.getFather() == null) {
00051             // On commence la saisie de la formule, on ajoute l'instance courante telle
00052             // qu'elle dansla formule.
00053             current.addChild(this);
00054 
00055         }
00056         else { // 2 possibilités s'offrent à nous !!!
00057             if ((current.getAsOperatorPriority() == resourcesManager.getAsOperatorPriority("constantPriorities")) &&
00058                 current.isTemplate()) {
00059                 // Le cas classique (on va même dire normal !!!)
00060                 // La position d'insertion est un template.
00061                 // On doit remplacer le template par l'instance courante (nos parenthèses)
00062                 int rank = current.getRank();
00063                 FormulaTreeStructure father = (FormulaTreeStructure) current.getFather();
00064                 father.addChild(this, rank);
00065                 father.removeChild(current);
00066             }
00067             else {
00068                 // Le cas pas classique
00069                 // La position d'insertion n'est pas un template.
00070                 // On créé une multiplication implicite.
00071                 current = (new Multiplication()).insert(current);
00072                 // On insère nos parenthèses
00073                 current = insert(current);
00074                 // On retourne le dernier point d'insertion.
00075                 return current;
00076             }
00077         }
00078 
00079         // On ajoute un template à notre opérateur.
00080         VariableOrNumber template = new VariableOrNumber();
00081         addChild(template);
00082 
00083         // On retourne le dernier point d'insertion.
00084         return template;
00085 
00086     }
00087     
00091     public String createLinear(String linear) {
00092         linear += getTheOperator();
00093         linear = ((FormulaTreeStructure) getChild(0)).createLinear(linear);
00094         return linear;
00095     }
00096 
00100     public String evaluate() {
00101         return getTheOperator() + ((FormulaTreeStructure) getChild(0)).evaluate();
00102     }
00103 }
00104