Java tutorial
/** * ------------------------------------------------------ * Laboratrio de Linguagens e Tcnicas Adaptativas * Escola Politcnica, Universidade So Paulo * ------------------------------------------------------ * * This program is free software: you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation, either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License * for more details. * **/ package br.usp.poli.lta.cereda.aa.model.actions; import java.util.HashSet; import java.util.Set; import org.apache.commons.lang3.Validate; /** * Representa uma varivel de consulta nas aes elementares. Cada varivel * possui um conjunto de valores. * @author Paulo Roberto Massa Cereda * @version 1.0 * @since 1.0 */ public class Variable { // atributos da classe, contendo um conjunto de valores e um sinalizador // indicando se a varivel est disponvel para preenchimento private boolean available; private Set<Object> values; /** * Construtor vazio. */ public Variable() { available = true; values = new HashSet<>(); } /** * Construtor com parmetro. * @param value Valor da varivel. */ public Variable(Object value) { available = false; values = new HashSet<>(); values.add(value); } /** * Retorna a cardinalidade do conjunto. * @return Valor inteiro representando a cardinalidade do conjunto de * valores. */ public int size() { return values.size(); } /** * Obtm todos os valores do conjunto. * @return Conjunto de valores armazenados na varivel. */ public Set<Object> getValues() { Validate.isTrue(!available, "No possvel obter o valor de uma varivel no inicializada."); return values; } /** * Verifica se a varivel est disponvel para preencimento. * @return Valor lgico indicando se a varivel est disponvel para * preenchimento. */ public boolean isAvailable() { return available; } /** * Define o conjunto de valores da varivel. * @param values Conjunto de valores da varivel. */ public void setValues(Set<Object> values) { this.values = values; available = false; } /** * Retorna uma representao textual da varivel. * @return Representao textual da varivel. */ @Override public String toString() { String div = " :: "; StringBuilder sb = new StringBuilder(); sb.append("Varivel: { "); sb.append("Disponvel para preenchimento? ").append(printAnswer(available)); if (!available) { sb.append(div).append("Elementos: "); if (values.isEmpty()) { sb.append("conjunto vazio"); } else { sb.append(printElements(values, ", ")); } } sb.append(" }"); return sb.toString(); } /** * Retorna uma representao textual do valor lgico informado. * @param value Valor lgico. * @return Representao textual do valor lgico. */ private String printAnswer(boolean value) { String yes = "sim"; String no = "no"; return (value ? yes : no); } /** * Retorna uma representao textual do conjunto de estados. * @param set Conjunto de estados. * @param separator Separador dos elementos. * @return Representao textual do conjunto de estados. */ private String printElements(Set<Object> set, String separator) { StringBuilder sb = new StringBuilder(); for (Object element : set) { if (element == null) { sb.append(""); } else { sb.append(element); } sb.append(separator.concat(" ")); } return "(".concat(sb.toString().substring(0, sb.length() - 2)).concat(")"); } /** * Retorna um vetor de objetos. Este mtodo esttico utilizado somente * para facilitar a especificao de um vetor de objetos. * @param objects Lista de objetos. * @return Vetor de objetos. */ public static Object[] values(Object... objects) { return objects; } }