/*******************************************************************************
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package hr.fer.zemris.vhdllab.applets.editor.schema2.interfaces;
import hr.fer.zemris.vhdllab.applets.editor.schema2.enums.EPropertyChange;
import java.util.List;
/**
* Ovo sucelje opisuje objekte koji obavljaju
* neki upit nad shemom.
* Implementacija ovog sucelja svojim akcijama
* NECE promijeniti stanje ISchemaInfo objekta.
*
* Klase koji implementiraju ovo sucelje moraju
* OBAVEZNO implementirati equals na nacin da
* se uzimaju u obzir SVA polja <b>koja odreduju upit</b>,
* inace ce doci do povrata krivo cacheiranih informacija.
* Ne treba, stovise, ne smije se uzimati u obzir pomocna
* polja koja ne odreduju prirodu upita.
*
* Takoder je nuzno implementirati hashCode().
*
* @author brijest
*
*/
public interface IQuery {
/**
* Odgovara na pitanje da li je upit cacheable.
* Ako je upit cacheable, onda ako se upit izvede, i ako na shemi nije
* bilo promjena (na koje je osjetljiv ovaj upit) i ako je sljedeci
* upit potpuno isti kao i ovaj (equals vraca true) onda sljedeci
* upit NECE biti izveden ponovno, vec ce se vratiti rezultat iz
* cachea upita.
*
*/
boolean isCacheable();
/**
* Vraca ime upita.
*/
String getQueryName();
/**
* Lista tipa promjena na koje je osjetljiv ovaj upit.
* Ako se desi promjena ovog tipa, upit ce biti izbrisan iz cachea.
* Ne smije biti mijenjana!!
*
*/
List<EPropertyChange> getPropertyDependency();
/**
* Obavlja upit i vraca objekt koji opisuje uspjesnost upita,
* i sadrzi informacije vezane uz upit.
*
* @param info
* Objekt koji IQuery NECE promijeniti.
*/
IQueryResult performQuery(ISchemaInfo info);
boolean equals(Object o);
int hashCode();
}