/*******************************************************************************
* 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.DuplicateParameterException;
import hr.fer.zemris.vhdllab.applets.editor.schema2.exceptions.InvalidParameterValueException;
import hr.fer.zemris.vhdllab.applets.editor.schema2.exceptions.ParameterNotFoundException;
import java.util.Set;
/**
* Definira sucelje klasa koje
* sadrze razne parametre vezane
* uz zicu (signal).
* U principu bi ovo mogla biti jedna name-value
* kolekcija, gdje je name kljuc za dohvat nekog
* parametra, a value je njegova vrijednost.
*
* Detaljnije u opisu svake funkcije zasebno.
*
* @author Axel
*
*/
public interface IParameterCollection extends Iterable<IParameter> {
/**
* Vraca IParameter objekt za
* navedeni kljuc.
* Preko IParameter objekta je
* moguce dohvatiti i vrijednost
* i tip parametra.
*
* @param key
* Kljuc za dohvat.
* @throws ParameterNotFoundException
* Navedenu iznimku ako parametar ne postoji.
* @return
* IParametar ako isti postoji.
*/
IParameter getParameter(String key) throws ParameterNotFoundException;
/**
* Dodaje parametar u kolekciju.
*
* @param parameter
* Sam parametar. Za kljuc se uzima ime parametra.
* @throws DuplicateParameterException
* Ako parametar vec postoji pod tim kljucem.
*/
void addParameter(IParameter parameter) throws DuplicateParameterException;
/**
* Mice parametar iz kolekcije parametara.
*
* @param key
* Kljuc pod kojim je spremljen parametar.
* @throws ParameterNotFoundException
* Ako parametar ne postoji, baca se ova iznimka.
*
*/
void removeParameter(String key) throws ParameterNotFoundException;
/**
* Vraca vrijednost parametra za navedeni kljuc.
* Pritom nije moguce odrediti tip parametra,
* osim ako je on unaprijed poznat.
* Ova se funkcija moze pozvati izravno nakon
* getParameter() od dobivenog parametra, pa
* je ona u biti pokrata.
*
* @param key
* Kljuc za dohvat.
* @throws ParameterNotFoundException
* Navedenu iznimku ako parametar ne postoji.
* @return
* IParametar ako isti postoji.
*
*/
Object getValue(String key) throws ParameterNotFoundException;
/**
* Sluzi za postavljanje neke vrijednosti nekog
* parametra odredenog sa key.
* Ako parametar ne postoji, bit ce stvoren
* novi parametar.
* Ova se funkcija moze pozvati izravno nakon
* getParameter() od dobivenog parametra, pa
* je ona u biti pokrata.
*
* @param key
* Kljuc.
* @param value
* Vrijednost.
* @throws ParameterNotFoundException
* Ukoliko parametar ne postoji.
* @throws InvalidParameterValueException
* Iznimka je propagirana od parametra kojem je postavljena
* vrijednost, a baca se u slucaju da vrijednost
* koju zelimo postaviti nije primjenjiva.
*
*/
void setValue(String key, Object value) throws ParameterNotFoundException, InvalidParameterValueException;
/**
* Dohvaca broj parametara u kolekciji
* parametara.
* Pritom je povratna vrijednost nenegativna,
* no vraca se int radi jednostavnosti pisanja
* for petlji :)
*/
int count();
/**
* Vraca listu svih imena parametara.
*
*/
Set<String> getParameterNames();
/**
* Brise sve parametre u kolekciji.
*
*/
void clear();
}