1 /** 2 * MEDOR: Middleware Enabling Distributed Object Requests 3 * 4 * Copyright (C) 2001-2003 France Telecom R&D 5 * Contact: alexandre.lefebvre@rd.francetelecom.com 6 * 7 * This library is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * This library is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 * 21 * Initial developers: M. Alia, S. Chassande-Barrioz, A. Lefebvre 22 */ 23 24 package org.objectweb.medor.optim.api; 25 26 import org.objectweb.medor.query.api.QueryTree; 27 import org.objectweb.medor.query.api.QueryNode; 28 import org.objectweb.medor.api.MedorException; 29 30 /** 31 * This interface describes a rule used by the QueryTransformer. 32 * <p> It typically pushes selections, replaces a JORM scan with the corresp. 33 * RdbQueryLeaf, groups operations on the same data source if possible 34 * (depending on the evaluation capacity of the data source) into 35 * a single QueryLeaf, etc. 36 */ 37 public interface RewriteRule { 38 39 /** 40 * This method applies a single rule. 41 * <p>It is typically called by the 42 * QueryRewriter for applying the entire rewriting process. 43 * @param qt the QueryTree to be rewritten 44 * @param parent the parent QueryNode for which modification of propagated 45 * field, if they are replaced in the qt, should be done. 46 * @return the rewritten QueryTree 47 * @throws MedorException 48 */ 49 public QueryTree rewrite(QueryTree qt, QueryNode parent) 50 throws MedorException; 51 52 /** 53 * This method applies a single rule. It is typically called by the 54 * QueryRewriter for applying the entire rewriting process. 55 * <p>It is the same method, but the QueryTree to be rewritten is the 56 * top QueryTree (no parent).</p> 57 * @param qt the QueryTree to be rewritten 58 * @return the rewritten QueryTree 59 * @throws MedorException 60 */ 61 public QueryTree rewrite(QueryTree qt) 62 throws MedorException; 63 } 64