View Javadoc
1   /*
2    * Copyright (c) 2002-2014, Mairie de Paris
3    * All rights reserved.
4    *
5    * Redistribution and use in source and binary forms, with or without
6    * modification, are permitted provided that the following conditions
7    * are met:
8    *
9    *  1. Redistributions of source code must retain the above copyright notice
10   *     and the following disclaimer.
11   *
12   *  2. Redistributions in binary form must reproduce the above copyright notice
13   *     and the following disclaimer in the documentation and/or other materials
14   *     provided with the distribution.
15   *
16   *  3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
17   *     contributors may be used to endorse or promote products derived from
18   *     this software without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
24   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30   * POSSIBILITY OF SUCH DAMAGE.
31   *
32   * License 1.0
33   */
34  package fr.paris.lutece.portal.business.user.attribute;
35  
36  import fr.paris.lutece.portal.service.util.AppLogService;
37  import fr.paris.lutece.util.sql.DAOUtil;
38  
39  import java.util.ArrayList;
40  import java.util.List;
41  
42  
43  /**
44   *
45   * AttributeFieldDAO
46   *
47   */
48  public class AttributeFieldDAO implements IAttributeFieldDAO
49  {
50      // NEW PK
51      private static final String SQL_QUERY_NEW_PK = " SELECT max(id_field) FROM core_attribute_field ";
52  
53      // NEW POSITION
54      private static final String SQL_QUERY_NEW_POSITION = "SELECT MAX(field_position)" + " FROM core_attribute_field ";
55  
56      // SELECT
57      private static final String SQL_QUERY_SELECT = " SELECT id_field, id_attribute, title, DEFAULT_value, is_DEFAULT_value, height, width, max_size_enter, is_multiple, field_position " +
58          " FROM core_attribute_field WHERE id_field = ? ";
59      private static final String SQL_QUERY_SELECT_ATTRIBUTE_BY_ID_FIELD = " SELECT a.type_class_name, a.id_attribute, a.title, a.help_message, a.is_mandatory, a.attribute_position " +
60          " FROM core_attribute a INNER JOIN core_attribute_field af ON a.id_attribute = af.id_attribute " +
61          " WHERE af.id_field = ? ";
62      private static final String SQL_QUERY_SELECT_ATTRIBUTE_FIELDS_BY_ID_ATTRIBUTE = " SELECT id_field, id_attribute, title, DEFAULT_value, is_DEFAULT_value, height, width, max_size_enter, is_multiple, field_position " +
63          " FROM core_attribute_field WHERE id_attribute = ? ORDER BY field_position ";
64  
65      // INSERT
66      private static final String SQL_QUERY_INSERT = " INSERT INTO core_attribute_field (id_field, id_attribute, title, DEFAULT_value, is_DEFAULT_value, height, width, max_size_enter, is_multiple, field_position) " +
67          " VALUES(?,?,?,?,?,?,?,?,?,?) ";
68  
69      // UPDATE
70      private static final String SQL_QUERY_UPDATE = " UPDATE core_attribute_field SET title = ?, DEFAULT_value = ?, is_DEFAULT_value = ?, height = ?, width = ?, max_size_enter = ?, is_multiple = ?, field_position = ? " +
71          " WHERE id_field = ? ";
72  
73      // DELETE
74      private static final String SQL_QUERY_DELETE = " DELETE FROM core_attribute_field WHERE id_field = ? ";
75      private static final String SQL_QUERY_DELETE_BY_ID_ATTRIBUTE = " DELETE FROM core_attribute_field WHERE id_attribute = ? ";
76  
77      // NEW PK
78      /**
79       * Generate a new PK
80       * @return The new ID
81       */
82      private int newPrimaryKey(  )
83      {
84          DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_PK );
85          daoUtil.executeQuery(  );
86  
87          int nKey = 1;
88  
89          if ( daoUtil.next(  ) )
90          {
91              nKey = daoUtil.getInt( 1 ) + 1;
92          }
93  
94          daoUtil.free(  );
95  
96          return nKey;
97      }
98  
99      /**
100      * Generates a new field position
101      * @return the new entry position
102      */
103     private int newPosition(  )
104     {
105         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_NEW_POSITION );
106         daoUtil.executeQuery(  );
107 
108         int nPos;
109 
110         if ( !daoUtil.next(  ) )
111         {
112             // if the table is empty
113             nPos = 1;
114         }
115 
116         nPos = daoUtil.getInt( 1 ) + 1;
117         daoUtil.free(  );
118 
119         return nPos;
120     }
121 
122     /**
123      * Load attribute field
124      * @param nIdField ID Field
125      * @return Attribute Field
126      */
127     @Override
128     public AttributeField load( int nIdField )
129     {
130         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT );
131         daoUtil.setInt( 1, nIdField );
132         daoUtil.executeQuery(  );
133 
134         AttributeField attributeField = null;
135 
136         if ( daoUtil.next(  ) )
137         {
138             attributeField = new AttributeField(  );
139             attributeField.setIdField( daoUtil.getInt( 1 ) );
140 
141             IAttribute attribute = selectAttributeByIdField( nIdField );
142             attributeField.setAttribute( attribute );
143             attributeField.setTitle( daoUtil.getString( 3 ) );
144             attributeField.setValue( daoUtil.getString( 4 ) );
145             attributeField.setDefaultValue( daoUtil.getBoolean( 5 ) );
146             attributeField.setHeight( daoUtil.getInt( 6 ) );
147             attributeField.setWidth( daoUtil.getInt( 7 ) );
148             attributeField.setMaxSizeEnter( daoUtil.getInt( 8 ) );
149             attributeField.setMultiple( daoUtil.getBoolean( 9 ) );
150             attributeField.setPosition( daoUtil.getInt( 10 ) );
151         }
152 
153         daoUtil.free(  );
154 
155         return attributeField;
156     }
157 
158     /**
159      * Select attribute by id field
160      * @param nIdField id field
161      * @return user attribute
162      */
163     @Override
164     public IAttribute selectAttributeByIdField( int nIdField )
165     {
166         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ATTRIBUTE_BY_ID_FIELD );
167         daoUtil.setInt( 1, nIdField );
168         daoUtil.executeQuery(  );
169 
170         IAttribute attribute = null;
171 
172         if ( daoUtil.next(  ) )
173         {
174             try
175             {
176                 attribute = (IAttribute) Class.forName( daoUtil.getString( 1 ) ).newInstance(  );
177             }
178             catch ( ClassNotFoundException e )
179             {
180                 // class doesn't exist
181                 AppLogService.error( e );
182             }
183             catch ( InstantiationException e )
184             {
185                 // Class is abstract or is an interface or haven't accessible
186                 // builder
187                 AppLogService.error( e );
188             }
189             catch ( IllegalAccessException e )
190             {
191                 // can't access to rhe class
192                 AppLogService.error( e );
193             }
194 
195             attribute.setIdAttribute( daoUtil.getInt( 2 ) );
196             attribute.setTitle( daoUtil.getString( 3 ) );
197             attribute.setHelpMessage( daoUtil.getString( 4 ) );
198             attribute.setMandatory( daoUtil.getBoolean( 5 ) );
199             attribute.setPosition( daoUtil.getInt( 6 ) );
200         }
201 
202         daoUtil.free(  );
203 
204         return attribute;
205     }
206 
207     /**
208      * Load the lists of attribute field associated to an attribute
209      * @param nIdAttribute the ID attribute
210      * @return the list of attribute fields
211      */
212     @Override
213     public List<AttributeField> selectAttributeFieldsByIdAttribute( int nIdAttribute )
214     {
215         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_SELECT_ATTRIBUTE_FIELDS_BY_ID_ATTRIBUTE );
216         daoUtil.setInt( 1, nIdAttribute );
217         daoUtil.executeQuery(  );
218 
219         List<AttributeField> listAttributeFields = new ArrayList<AttributeField>(  );
220 
221         while ( daoUtil.next(  ) )
222         {
223             AttributeField attributeField = new AttributeField(  );
224             attributeField.setIdField( daoUtil.getInt( 1 ) );
225 
226             IAttribute attribute = selectAttributeByIdField( attributeField.getIdField(  ) );
227             attributeField.setAttribute( attribute );
228             attributeField.setTitle( daoUtil.getString( 3 ) );
229             attributeField.setValue( daoUtil.getString( 4 ) );
230             attributeField.setDefaultValue( daoUtil.getBoolean( 5 ) );
231             attributeField.setHeight( daoUtil.getInt( 6 ) );
232             attributeField.setWidth( daoUtil.getInt( 7 ) );
233             attributeField.setMaxSizeEnter( daoUtil.getInt( 8 ) );
234             attributeField.setMultiple( daoUtil.getBoolean( 9 ) );
235             attributeField.setPosition( daoUtil.getInt( 10 ) );
236             listAttributeFields.add( attributeField );
237         }
238 
239         daoUtil.free(  );
240 
241         return listAttributeFields;
242     }
243 
244     /**
245      * Insert a new attribute field
246      * @param attributeField the attribute field
247      * @return new PK
248      */
249     @Override
250     public int insert( AttributeField attributeField )
251     {
252         int nNewPrimaryKey = newPrimaryKey(  );
253         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_INSERT );
254         daoUtil.setInt( 1, nNewPrimaryKey );
255         daoUtil.setInt( 2, attributeField.getAttribute(  ).getIdAttribute(  ) );
256         daoUtil.setString( 3, attributeField.getTitle(  ) );
257         daoUtil.setString( 4, attributeField.getValue(  ) );
258         daoUtil.setBoolean( 5, attributeField.isDefaultValue(  ) );
259         daoUtil.setInt( 6, attributeField.getHeight(  ) );
260         daoUtil.setInt( 7, attributeField.getWidth(  ) );
261         daoUtil.setInt( 8, attributeField.getMaxSizeEnter(  ) );
262         daoUtil.setBoolean( 9, attributeField.isMultiple(  ) );
263         daoUtil.setInt( 10, newPosition(  ) );
264 
265         daoUtil.executeUpdate(  );
266         daoUtil.free(  );
267 
268         return nNewPrimaryKey;
269     }
270 
271     /**
272      * Update an attribute field
273      * @param attributeField the attribute field
274      */
275     @Override
276     public void store( AttributeField attributeField )
277     {
278         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_UPDATE );
279         daoUtil.setString( 1, attributeField.getTitle(  ) );
280         daoUtil.setString( 2, attributeField.getValue(  ) );
281         daoUtil.setBoolean( 3, attributeField.isDefaultValue(  ) );
282         daoUtil.setInt( 4, attributeField.getHeight(  ) );
283         daoUtil.setInt( 5, attributeField.getWidth(  ) );
284         daoUtil.setInt( 6, attributeField.getMaxSizeEnter(  ) );
285         daoUtil.setBoolean( 7, attributeField.isMultiple(  ) );
286         daoUtil.setInt( 8, attributeField.getPosition(  ) );
287         daoUtil.setInt( 9, attributeField.getIdField(  ) );
288 
289         daoUtil.executeUpdate(  );
290         daoUtil.free(  );
291     }
292 
293     /**
294      * Delete an attribute field
295      * @param nIdField The id field
296      */
297     @Override
298     public void delete( int nIdField )
299     {
300         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE );
301         daoUtil.setInt( 1, nIdField );
302 
303         daoUtil.executeUpdate(  );
304         daoUtil.free(  );
305     }
306 
307     /**
308      * Delete all attribute field from an attribute id
309      * @param nIdAttribute the ID attribute
310      */
311     @Override
312     public void deleteAttributeFieldsFromIdAttribute( int nIdAttribute )
313     {
314         DAOUtil daoUtil = new DAOUtil( SQL_QUERY_DELETE_BY_ID_ATTRIBUTE );
315         daoUtil.setInt( 1, nIdAttribute );
316 
317         daoUtil.executeUpdate(  );
318         daoUtil.free(  );
319     }
320 }