/******************************************************************************* * 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 hr.fer.zemris.vhdllab.applets.editor.schema2.exceptions.CommandExecutorException; import java.beans.PropertyChangeListener; import java.util.List; /** * Posrednik izmedu ISchemaCorea (modela) * i bilo kojeg view-a. * * @author Axel * */ public interface ISchemaController { /** * Salje ICommand objekt do registriranog modela. * ICommand objekt radi sve nuzne promjene na modelu * sukladno tome o kojoj se komandi radi i vraca * ICommandResponse koji sadrzi informaciju o uspjesnosti * izvodenja komande. * * @param command */ ICommandResponse send(ICommand command); /** * Obavlja upit nad modelom i cacheira upit ako * je to moguce. Ako je potpuno isti upit vec * obavljen, a u meduvremenu nije bilo promjena * nad modelom, vraca rezultate prethodno izvedenog * i cacheiranog upita. * * @param query */ IQueryResult send(IQuery query); /** * Registrira core na controller. Ako se core ne registrira * na controller, zahtjevi od view-ova nece biti proslijedeni * nikome. * * @param core * Core kojem ce biti proslijedeni zahtjevi. * Ako se proslijedi null, zahtjevi nece biti proslijedivani. */ void registerCore(ISchemaCore core); /** * Dodaje novi listener. Pri bilo kakvoj * promjeni u modelu sheme svi ce listeneri * biti obavijesteni. * * @param listener * @param changeType * Tip promjene za koji se listener aktivira. * ANY_CHANGE za sve vrste promjena. */ void addListener(EPropertyChange changeType, PropertyChangeListener listener); /** * Mice listener s popisa. * * @param listener */ void removeListener(PropertyChangeListener listener); /** * Read-only objekt. * * @return * Objekt koji je moguce iskljucivo citati. * Nikakve promjene se ne smiju raditi izravno * na ovom objektu. */ ISchemaInfo getSchemaInfo(); /** * Za odredivanje da li je moguc undo. * * @return Ako stog prethodno izvedenih komandi nije prazna, vraca true, u * protivnom false. * */ boolean canUndo(); /** * Za odredivanje da li je moguc redo. * * @return Slicno kao i prethodna metoda. */ boolean canRedo(); /** * Vraca listu naziva komandi koje su prethodno obavljene. Vraca praznu * listu, ako takvih nema. * * @return Jasno samo po sebi. * */ List<String> getUndoList(); /** * Vraca listu naziva komandi koje ce tek biti obavljene. Ako takvih nema, * vraca praznu listu. * * @return Jasno samo po sebi. * */ List<String> getRedoList(); /** * Obavlja komandu na vrhu stoga undo komandi, i ako je rezultat uspjesan, * popne je i stavi na stog redo komandi. OPREZ: U principu se ne bi trebalo * dogoditi da je rezultat izvodenja neuspjesan, no ako se to dogodi, brisu * se oba stoga, i undo i redo stog. * * @throws CommandExecutorException * Ako je stog undo komandi prazan, ili se dogodila neka druga greska. * Pritom odmah cisti oba stoga. * * @return Objekt koji govori o uspjesnosti izvodenja undo komande. */ ICommandResponse undo() throws CommandExecutorException; /** * Obavlja komandu s vrha redo stoga i stavlja je na undo stog. * * @throws CommandExecutorException * Slicno kao i prethodno, samo za redo stog. * Pritom odmah cisti oba stoga. * * @return Vidi prethodnu metodu. */ ICommandResponse redo() throws CommandExecutorException; /** * Brise komande s undo i redo liste. * */ void clearCommandCache(); /** * Brise cacheirane upite. */ void clearQueryCache(); }