1 /* 2 * FIEBDC 3 parser 3 * Copyright (C) 2014 DiSiD Technologies 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/copyleft/gpl.html>. 17 */ 18 19 package com.disid.fiebdc3; 20 21 import java.util.ArrayList; 22 import java.util.Date; 23 import java.util.List; 24 25 /** 26 * Concept of a Fiebdc 3 database. 27 * 28 * @author DiSiD Team 29 */ 30 public class Concept { 31 32 private String code; 33 34 private String measureUnit; 35 36 private String summary; 37 38 private List<Float> prices = new ArrayList<Float>(); 39 40 private List<Date> lastUpdates = new ArrayList<Date>(); 41 42 private String type; 43 44 private String description; 45 46 /** 47 * Creates a concept with the given code. 48 * 49 * @param code 50 * which uniquely identifies a concept 51 */ 52 Concept(String code) { 53 this.code = code; 54 } 55 56 /** 57 * Spec definition:<br/> 58 * <i>CODIGO: CODIGO del concepto descrito. Un concepto puede tener varios 59 * CODIGOs que actuarán como sinónimos, este mecanismo permite integrar 60 * distintos sistemas de clasificación. Puede tener un máximo de 20 61 * caracteres. </i> 62 */ 63 public String getCode() { 64 return code; 65 } 66 67 public void setCode(String code) { 68 this.code = code; 69 } 70 71 /** 72 * Spec definition:<br/> 73 * <i> UNIDAD: Unidad de medida. Existe una relación de unidades de medida 74 * recomendadas, elaborada por la Asociación de Redactores de Bases de Datos 75 * de CONSTRUCCION. Véase el Anexo 7 sobre Unidades de Medida.</i> 76 */ 77 public String getMeasureUnit() { 78 return measureUnit; 79 } 80 81 public void setMeasureUnit(String measureUnit) { 82 this.measureUnit = measureUnit; 83 } 84 85 /** 86 * Spec definition:<br/> 87 * <i>RESUMEN: Resumen del texto descriptivo. Cada soporte indicará el 88 * número de caracteres que admite en su campo resumen. Se recomienda un 89 * máximo de 64 caracteres.</i> 90 */ 91 public String getSummary() { 92 return summary; 93 } 94 95 public void setSummary(String summary) { 96 this.summary = summary; 97 } 98 99 /** 100 * Spec definition:<br/> 101 * <i>PRECIO: Precio del concepto. Un concepto puede tener varios precios 102 * alternativos que representen distintas épocas, ámbitos geográficos, etc., 103 * definidos biunívocamente respecto al campo [CABECERA \ 104 * {ROTULO_IDENTIFICACION\} del registro ~V. Cuando haya más de un precio se 105 * asignarán secuencialmente a cada ROTULO definido; si hay más ROTULOS que 106 * precios, se asignará a aquellos el último precio definido. En el caso que 107 * el concepto posea descomposición, este precio será el resultado de dicha 108 * descomposición y se proporcionará, de forma obligatoria, para permitir su 109 * comprobación. En caso de discrepancia, tendrá preponderancia el resultado 110 * obtenido por la descomposición, tal como se indica en el registro Tipo 111 * Descomposición, ~D, y complementariamente se podría informar al usuario 112 * de dicha situación. Esto se aplica también a los conceptos tipo capítulo 113 * y concepto raíz de una Obra o Presupuesto. Como excepción a esta regla 114 * está el intercambio de mediciones no estructuradas (véase la descripción 115 * del registro Tipo Mediciones, ~M).</i> 116 */ 117 public List<Float> getPrices() { 118 return prices; 119 } 120 121 public void addPrice(Float price) { 122 this.prices.add(price); 123 } 124 125 /** 126 * Return the main (first) price of the concept. 127 * 128 * @return the main (first) price of the concept 129 */ 130 public Float getMainPrice() { 131 return prices.get(0); 132 } 133 134 /** 135 * Spec definition:<br/> 136 * <i>FECHA: Fecha de la última actualización del precio. Cuando haya más de 137 * una fecha se asignarán secuencialmente a cada precio definido, si hay más 138 * precios que fechas, los precios sin su correspondiente fecha tomarán la 139 * última fecha definida.</i> 140 */ 141 public List<Date> getLastUpdates() { 142 return lastUpdates; 143 } 144 145 public void addLastUpdate(Date lastUpdate) { 146 this.lastUpdates.add(lastUpdate); 147 } 148 149 /** 150 * Return the main (first) lastUpdate of the concept. 151 * 152 * @return the main (first) lastUpdate of the concept 153 */ 154 public Date getMainLastUpdate() { 155 return lastUpdates.get(0); 156 } 157 158 /** 159 * Spec definition:<br/> 160 * <i>TIPO: Tipo de concepto, Inicialmente se reservan los siguientes tipos: 161 * 0 (Sin clasificar) 1 (Mano de obra), 2 (Maquinaria y medios aux.), 3 162 * (Materiales). También se permite (y aconseja) utilizar la clasificación 163 * indicada por el BOE y la CNC en índices y fórmulas polinómicas de 164 * revisión de precios así como los aconsejados por la Asociación de 165 * Redactores de Bases de Datos de la Construcción. En el Anexo 4 aparecen 166 * los tipos actualmente vigentes.</i> 167 */ 168 public String getType() { 169 return type; 170 } 171 172 public void setType(String type) { 173 this.type = type; 174 } 175 176 /** 177 * Spec definition:<br/> 178 * <i>TEXTO_DESCRIPTIVO: Texto descriptivo del concepto sin limitación de 179 * tamaño. El texto podrá contener caracteres fin de línea (ASCII-13 + 180 * ASCII-10) que se mantendrán al reformatearlo.</i> 181 */ 182 public String getDescription() { 183 return description; 184 } 185 186 public void setDescription(String description) { 187 this.description = description; 188 } 189 190 @Override 191 public String toString() { 192 return "Concept {" + "Code: " + code + ", Summary: " + summary 193 + ", Type: " + type + ", Measure unit: " + measureUnit 194 + ", Prices: " + prices + ", Last updates: " + lastUpdates 195 + ", Description: " + description + "}"; 196 } 197 }