View Javadoc
1   package fr.ifremer.dali.dao.system.extraction;
2   
3   /*
4    * #%L
5    * Dali :: Core
6    * $Id:$
7    * $HeadURL:$
8    * %%
9    * Copyright (C) 2014 - 2015 Ifremer
10   * %%
11   * This program is free software: you can redistribute it and/or modify
12   * it under the terms of the GNU Affero General Public License as published by
13   * the Free Software Foundation, either version 3 of the License, or
14   * (at your option) any later version.
15   *
16   * This program is distributed in the hope that it will be useful,
17   * but WITHOUT ANY WARRANTY; without even the implied warranty of
18   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19   * GNU General Public License for more details.
20   *
21   * You should have received a copy of the GNU Affero General Public License
22   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
23   * #L%
24   */
25  
26  import fr.ifremer.dali.config.DaliConfiguration;
27  import fr.ifremer.dali.dto.referential.pmfm.PmfmDTO;
28  import fr.ifremer.dali.dto.referential.pmfm.QualitativeValueDTO;
29  import fr.ifremer.quadrige3.core.dao.referential.transcribing.TranscribingItemExtendDao;
30  import fr.ifremer.quadrige3.core.dao.technical.Assert;
31  import fr.ifremer.quadrige3.core.dao.technical.csv.CSVDaoImpl;
32  import org.springframework.beans.factory.annotation.Autowired;
33  import org.springframework.context.annotation.Lazy;
34  import org.springframework.dao.DataRetrievalFailureException;
35  import org.springframework.jdbc.core.RowMapper;
36  import org.springframework.stereotype.Repository;
37  
38  import javax.annotation.Resource;
39  import javax.sql.DataSource;
40  import java.util.List;
41  import java.util.Map;
42  import java.util.Optional;
43  import java.util.Properties;
44  
45  /**
46   * Dao for extraction with JDBC access on spring data source
47   * <p/>
48   * Created by Ludovic on 11/12/2015.
49   */
50  @Repository("daliExtractionResultDao")
51  @Lazy
52  public class DaliExtractionResultDaoImpl extends CSVDaoImpl implements DaliExtractionResultDao {
53  
54      private final Properties connectionProperties;
55  
56      @Resource(name = "transcribingItemDao")
57      private TranscribingItemExtendDao transcribingItemDao;
58  
59      @Resource
60      protected DaliConfiguration config;
61  
62      /**
63       * <p>Constructor for DaliExtractionResultDaoImpl.</p>
64       *
65       * @param dataSource a {@link javax.sql.DataSource} object.
66       */
67      @Autowired
68      public DaliExtractionResultDaoImpl(DataSource dataSource) {
69          super(dataSource);
70          this.connectionProperties = null;
71      }
72  
73      /**
74       * <p>Constructor for DaliExtractionResultDaoImpl.</p>
75       */
76      public DaliExtractionResultDaoImpl() {
77          this((Properties) null);
78      }
79  
80      /**
81       * <p>Constructor for DaliExtractionResultDaoImpl.</p>
82       *
83       * @param connectionProperties a {@link java.util.Properties} object.
84       */
85      public DaliExtractionResultDaoImpl(Properties connectionProperties) {
86          super();
87          this.connectionProperties = connectionProperties;
88      }
89  
90      @Override
91      public long queryCount(String query) {
92          return queryCount(query, null);
93      }
94  
95      /**
96       * {@inheritDoc}
97       */
98      @Override
99      public long queryCount(String query, Map<String, Object> queryBindings) {
100         Long count = queryCount(connectionProperties, query, queryBindings);
101         if (count == null) throw new DataRetrievalFailureException(String.format("query count result is null: %s ; bindings=%s", query, queryBindings));
102         return count;
103     }
104 
105     /**
106      * {@inheritDoc}
107      */
108     @Override
109     public <T> List<T> query(String sql, Map<String, Object> queryBindings, RowMapper<T> rowMapper) {
110         return query(connectionProperties, sql, queryBindings, rowMapper);
111     }
112 
113     @Override
114     public int queryUpdate(String query) {
115         return queryUpdate(query, null);
116     }
117 
118     /**
119      * {@inheritDoc}
120      */
121     @Override
122     public int queryUpdate(String query, Map<String, Object> paramMap) {
123         return queryUpdate(connectionProperties, query, paramMap);
124     }
125 
126     @Override
127     public String getPmfmNameForExtraction(PmfmDTO pmfm) {
128         Assert.notNull(pmfm);
129         return Optional
130                 .ofNullable(transcribingItemDao.getTranscribingItemById(config.getTranscribingItemTypeLbForPmfmExtraction(), pmfm.getId()))
131                 .orElse(
132                         Optional.ofNullable(transcribingItemDao.getTranscribingItemById(config.getTranscribingItemTypeLbForPmfmNm(), pmfm.getId()))
133                                 .orElse(
134                                         Optional.ofNullable(pmfm.getName())
135                                                 .orElse(pmfm.getParameter().getName())
136                                 )
137                 );
138     }
139 
140     @Override
141     public String getPmfmUnitNameForExtraction(PmfmDTO pmfm) {
142         Assert.notNull(pmfm);
143         return pmfm.getUnit() == null || config.getExtractionUnitIdsToIgnore().contains(pmfm.getUnit().getId()) ? "" : pmfm.getUnit().getName();
144     }
145 
146     @Override
147     public String getQualitativeValueNameForExtraction(QualitativeValueDTO qualitativeValue) {
148         Assert.notNull(qualitativeValue);
149         return Optional
150                 .ofNullable(transcribingItemDao.getTranscribingItemById(config.getTranscribingItemTypeLbForQualitativeValueExtraction(), qualitativeValue.getId()))
151                 .orElse(
152                         Optional.ofNullable(transcribingItemDao.getTranscribingItemById(config.getTranscribingItemTypeLbForQualitativeValueNm(), qualitativeValue.getId()))
153                                 .orElse(qualitativeValue.getName())
154                 );
155     }
156 
157 }