View Javadoc
1   package net.sumaris.core.service.data;
2   
3   /*-
4    * #%L
5    * SUMARiS:: Core
6    * %%
7    * Copyright (C) 2018 SUMARiS Consortium
8    * %%
9    * This program is free software: you can redistribute it and/or modify
10   * it under the terms of the GNU General Public License as
11   * published by the Free Software Foundation, either version 3 of the
12   * License, or (at your option) any later version.
13   * 
14   * This program is distributed in the hope that it will be useful,
15   * but WITHOUT ANY WARRANTY; without even the implied warranty of
16   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   * GNU General Public License for more details.
18   * 
19   * You should have received a copy of the GNU General Public
20   * License along with this program.  If not, see
21   * <http://www.gnu.org/licenses/gpl-3.0.html>.
22   * #L%
23   */
24  
25  
26  import com.google.common.base.Preconditions;
27  import net.sumaris.core.dao.data.MeasurementDao;
28  import net.sumaris.core.dao.data.SaleDao;
29  import net.sumaris.core.model.data.IMeasurementEntity;
30  import net.sumaris.core.model.data.SaleMeasurement;
31  import net.sumaris.core.util.Beans;
32  import net.sumaris.core.vo.data.MeasurementVO;
33  import net.sumaris.core.vo.data.SaleVO;
34  import org.slf4j.Logger;
35  import org.slf4j.LoggerFactory;
36  import org.springframework.beans.factory.annotation.Autowired;
37  import org.springframework.stereotype.Service;
38  
39  import java.util.List;
40  import java.util.Objects;
41  import java.util.stream.Collectors;
42  
43  @Service("saleService")
44  public class SaleServiceImpl implements SaleService {
45  
46  	private static final Logger log = LoggerFactory.getLogger(SaleServiceImpl.class);
47  
48  	@Autowired
49  	protected SaleDao saleDao;
50  
51  	@Autowired
52  	protected MeasurementDao measurementDao;
53  
54  	@Override
55  	public List<SaleVO> getAllByTripId(int tripId) {
56  		return saleDao.getAllByTripId(tripId);
57  	}
58  
59  	@Override
60  	public SaleVO get(int saleId) {
61  		return saleDao.get(saleId);
62  	}
63  
64  	@Override
65  	public List<SaleVO> saveAllByTripId(int tripId, List<SaleVO> sources) {
66  		return saleDao.saveAllByTripId(tripId, sources);
67  	}
68  
69  	@Override
70  	public SaleVOref="../../../../../net/sumaris/core/vo/data/SaleVO.html#SaleVO">SaleVO save(SaleVO sale) {
71  		Preconditions.checkNotNull(sale);
72  		Preconditions.checkNotNull(sale.getStartDateTime(), "Missing startDateTime");
73  		Preconditions.checkNotNull(sale.getSaleLocation(), "Missing saleLocation");
74  		Preconditions.checkNotNull(sale.getSaleLocation().getId(), "Missing saleLocation.id");
75  		Preconditions.checkNotNull(sale.getSaleType(), "Missing saleType");
76  		Preconditions.checkNotNull(sale.getSaleType().getId(), "Missing saleType.id");
77  		Preconditions.checkNotNull(sale.getRecorderDepartment(), "Missing sale.recorderDepartment");
78  		Preconditions.checkNotNull(sale.getRecorderDepartment().getId(), "Missing sale.recorderDepartment.id");
79  
80  		SaleVO savedSale = saleDao.save(sale);
81  
82  		// Save measurements
83  		if (savedSale.getMeasurementValues() != null) {
84  			measurementDao.saveSaleMeasurementsMap(savedSale.getId(), savedSale.getMeasurementValues());
85  		}
86  		else {
87  			List<MeasurementVO> measurements = Beans.getList(savedSale.getMeasurements());
88  			measurements.forEach(m -> fillDefaultProperties(savedSale, m, SaleMeasurement.class));
89  			measurements = measurementDao.saveSaleMeasurements(savedSale.getId(), measurements);
90  			savedSale.setMeasurements(measurements);
91  		}
92  
93  		return savedSale;
94  	}
95  
96  	@Override
97  	public List<SaleVO> save(List<SaleVO> sales) {
98  		Preconditions.checkNotNull(sales);
99  
100 		return sales.stream()
101 				.map(this::save)
102 				.collect(Collectors.toList());
103 	}
104 
105 	@Override
106 	public void delete(int id) {
107 		saleDao.delete(id);
108 	}
109 
110 	@Override
111 	public void delete(List<Integer> ids) {
112 		Preconditions.checkNotNull(ids);
113 		ids.stream()
114 				.filter(Objects::nonNull)
115 				.forEach(this::delete);
116 	}
117 
118 	/* -- protected methods -- */
119 
120 	protected void fillDefaultProperties(SaleVO parent, MeasurementVO measurement, Class<? extends IMeasurementEntity> entityClass) {
121 		if (measurement == null) return;
122 
123 		// Copy recorder department from the parent
124 		if (measurement.getRecorderDepartment() == null || measurement.getRecorderDepartment().getId() == null) {
125 			measurement.setRecorderDepartment(parent.getRecorderDepartment());
126 		}
127 
128 		measurement.setEntityName(entityClass.getSimpleName());
129 	}
130 }