/******************************************************************************* * 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.DuplicateKeyException; import hr.fer.zemris.vhdllab.applets.editor.schema2.exceptions.OverlapException; import hr.fer.zemris.vhdllab.applets.editor.schema2.exceptions.UnknownKeyException; import hr.fer.zemris.vhdllab.applets.editor.schema2.misc.Caseless; import hr.fer.zemris.vhdllab.applets.editor.schema2.misc.Rect2d; import java.util.Set; /** * Sucelje za skup zica koje se nalaze * na shemi. * * @author Axel * */ public interface ISchemaWireCollection extends Iterable<ISchemaWire> { public static final int NO_WIRE = -1; /** * Dohvaca zicu zadanog imena. * * @param wireName * Jedinstveni String identifikator * zice (signala). * * @return * Vraca zicu ciji je jedinstveni * identifikator zadano ime, ili null * ako takva ne postoji. * Pritom ime nije dio IParameterCollection, * tj. sama zica ne zna svoje ime. * Ime je jedinstveni identifikator po kojem * je moguce dohvacati zice. * */ ISchemaWire fetchWire(Caseless wireName); /** * Odreduje da li postoji zadano ime. * * @param wireName * Ime zice. * * @return * True ako zica zadanog imena * postoji u kolekciji, false inace. * */ boolean containsName(Caseless wireName); /** * Dohvaca zicu na zadanim koordinatama. * * @param x * @param y * @param dist * * @return * Vraca prvu zicu ako takva postoji na zadanim * koordinatama ili je udaljena za dist od njih. * Ako ista ne postoji, vraca se null. * */ ISchemaWire fetchWire(int x, int y, int dist); /** * Vraca skup svih zica na danoj koordinati. * @param x * @param y * @return * Null ako nema zica na navedenoj koordinati. */ Set<ISchemaWire> fetchAllWires(int x, int y); /** * Za zicu danog imena vraca pravokutnik * koji je obuhvaca. * * @param wireName * @return * Minimalni pravokutnik koji obuhvaca * zicu, a null zica tog imena ne postoji. */ Rect2d getBounds(Caseless wireName); /** * Odreduje da li postoji zica * na koordinatama. * * @param x * @param y * @return * Vraca zicu ako takva postoji na zadanim * koordinatama ili je udaljena za dist od njih. * Ako ista ne postoji, vraca se null. * */ boolean containsAt(int x, int y, int dist); /** * Dodaje zicu u kolekciju. * * @param wire * Zica jedinstvenog imena. * @throws DuplicateKeyException * Ako postoji zica tog imena u kolekciji. * @throws OverlapException * Ako dolazi do preklapanja s postojecim zicama. */ void addWire(ISchemaWire wire) throws DuplicateKeyException, OverlapException; /** * Mice zicu iz kolekcije. * * @param wireName * Ime zice. * @throws UnknownKeyException * Ako zica (signal) tog imena ne postoji * u kolekciji. */ void removeWire(Caseless wireName) throws UnknownKeyException; /** * Vraca udaljenost do navedene zice. * * @param name * @param xfrom * X lokacija od koje se mjeri udaljenost do zice. * @param yfrom * Y lokacija od koje se mjeri udaljenost do zice. * @return * Ako zica navedenog imena ne postoji, vraca se * ISchemaWireCollection.NO_WIRE. * U protivnom se vraca udaljenost do zice, * ili 0 u slucaju da je (xfrom, yfrom) na samoj * zici. * Iznimno, vraca Integer.MAX_VALUE, ako zica * nema segmenata (rubni slucaj). */ int distanceTo(Caseless name, int xfrom, int yfrom); /** * Vraca skup imena zica na shemi, * preko kojeg je moguce iterirati * po zicama. * */ Set<Caseless> getWireNames(); /** * Brise sve zice iz kolekcije. * */ void clear(); }