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 }