/*******************************************************************************
* 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.exceptions.InvalidCommandOperationException;
/**
* Interface koji propisuje nacin slanja komandi
* interfaceu ISchemaCore.
*
* @author Axel
*
*/
public interface ICommand {
/**
* Vraca jedinstveno ime za neku implementaciju
* ICommanda.
*
* @return
* Vraca jedinstveno ime klase komandi.
* Pritom, programer je odgovoran da to ime zaista
* bude jedinstveno.
*/
String getCommandName();
/**
* Odreduje da li je navedena komanda,
* da se tako izrazimo, 'povratljiva'.
* Mislim da ne trebam detaljno komentirat.
*
* @return
* True ako se moze obaviti undo ove komande,
* false inace.
* Treba imati na umu da u slucaju da je moguce
* napraviti undo, komande je moguce slagati
* u listu, te pozivom metode undoCommand()
* obavljati reverznu operaciju, proizvoljan
* broj puta, ili do pojave komande koja nije
* undoable.
*
*/
boolean isUndoable();
/**
* Radi jednu ili vise promjena na ISchemaInfo
* objektu, te vraca objekt koji govori
* o tome da li je promjena izvedena uspjesno ili
* ne.
* OPREZ: Ako je komanda neuspjesno izvedena, onda ona
* NE SMIJE niposto napraviti bilo kakvu promjenu na info
* objektu - ovo je bitno za one koji implementiraju
* ovo sucelje.
*
* @param info
* Objekt koji sadrzi informacije o sklopovima,
* zicama, itd.
* Na njemu ce biti izvrsene promjene.
*
* @return
* Objekt koji govori o uspjesnosti komande.
*/
ICommandResponse performCommand(ISchemaInfo info);
/**
* Obavlja inverznu operaciju - undo.
*
* @param info
* Objekt na kojem se obavlja undo.
* @return
* Objekt koji govori o uspjesnosti obavljanja
* inverzne operacije.
*/
ICommandResponse undoCommand(ISchemaInfo info) throws InvalidCommandOperationException;
}