View Javadoc
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 }