/* ================================================================== * DaoDatumMetadataBiz.java - Oct 3, 2014 4:02:04 PM * * Copyright 2007-2014 SolarNetwork.net Dev Team * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * ================================================================== */ package net.solarnetwork.central.daum.biz.dao; import java.util.List; import java.util.Set; import org.joda.time.DateTime; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import net.solarnetwork.central.datum.biz.DatumMetadataBiz; import net.solarnetwork.central.datum.dao.GeneralLocationDatumMetadataDao; import net.solarnetwork.central.datum.dao.GeneralNodeDatumMetadataDao; import net.solarnetwork.central.datum.domain.GeneralLocationDatumMetadata; import net.solarnetwork.central.datum.domain.GeneralLocationDatumMetadataFilter; import net.solarnetwork.central.datum.domain.GeneralLocationDatumMetadataFilterMatch; import net.solarnetwork.central.datum.domain.GeneralNodeDatumMetadata; import net.solarnetwork.central.datum.domain.GeneralNodeDatumMetadataFilter; import net.solarnetwork.central.datum.domain.GeneralNodeDatumMetadataFilterMatch; import net.solarnetwork.central.datum.domain.LocationSourcePK; import net.solarnetwork.central.datum.domain.NodeSourcePK; import net.solarnetwork.central.domain.FilterResults; import net.solarnetwork.central.domain.SortDescriptor; import net.solarnetwork.domain.GeneralDatumMetadata; /** * DAO-based implementation of {@link DatumMetadataBiz}. * * <p> * The configurable properties of this class are: * </p> * * <dl class="class-properties"> * <dt>generalLocationDatumMetadataDao</dt> * <dd>The {@link GeneralLocationDatumMetadataDao} to use.</dd> * * <dt>generalNodeDatumMetadataDao</dt> * <dd>The {@link GeneralNodeDatumMetadataDao} to use.</dd> * </dl> * * @author matt * @version 1.1 */ public class DaoDatumMetadataBiz implements DatumMetadataBiz { private GeneralLocationDatumMetadataDao generalLocationDatumMetadataDao = null; private GeneralNodeDatumMetadataDao generalNodeDatumMetadataDao = null; @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void addGeneralNodeDatumMetadata(Long nodeId, String sourceId, GeneralDatumMetadata meta) { assert nodeId != null; assert sourceId != null; assert meta != null; NodeSourcePK pk = new NodeSourcePK(nodeId, sourceId); GeneralNodeDatumMetadata gdm = generalNodeDatumMetadataDao.get(pk); GeneralDatumMetadata newMeta = meta; if ( gdm == null ) { gdm = new GeneralNodeDatumMetadata(); gdm.setCreated(new DateTime()); gdm.setId(pk); newMeta = meta; } else if ( gdm.getMeta() != null && gdm.getMeta().equals(meta) == false ) { newMeta = new GeneralDatumMetadata(gdm.getMeta()); newMeta.merge(meta, true); } if ( newMeta != null && newMeta.equals(gdm.getMeta()) == false ) { // have changes, so persist gdm.setMeta(newMeta); generalNodeDatumMetadataDao.store(gdm); } } @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void storeGeneralNodeDatumMetadata(Long nodeId, String sourceId, GeneralDatumMetadata meta) { assert nodeId != null; assert sourceId != null; assert meta != null; NodeSourcePK pk = new NodeSourcePK(nodeId, sourceId); GeneralNodeDatumMetadata gdm = generalNodeDatumMetadataDao.get(pk); if ( gdm == null ) { gdm = new GeneralNodeDatumMetadata(); gdm.setCreated(new DateTime()); gdm.setId(pk); gdm.setMeta(meta); } else { gdm.setMeta(meta); } generalNodeDatumMetadataDao.store(gdm); } @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void removeGeneralNodeDatumMetadata(Long nodeId, String sourceId) { GeneralNodeDatumMetadata meta = generalNodeDatumMetadataDao .get(new NodeSourcePK(nodeId, sourceId)); if ( meta != null ) { generalNodeDatumMetadataDao.delete(meta); } } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) @Override public FilterResults<GeneralNodeDatumMetadataFilterMatch> findGeneralNodeDatumMetadata( GeneralNodeDatumMetadataFilter criteria, List<SortDescriptor> sortDescriptors, Integer offset, Integer max) { return generalNodeDatumMetadataDao.findFiltered(criteria, sortDescriptors, offset, max); } @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void addGeneralLocationDatumMetadata(Long locationId, String sourceId, GeneralDatumMetadata meta) { assert locationId != null; assert sourceId != null; assert meta != null; LocationSourcePK pk = new LocationSourcePK(locationId, sourceId); GeneralLocationDatumMetadata gdm = generalLocationDatumMetadataDao.get(pk); GeneralDatumMetadata newMeta = meta; if ( gdm == null ) { gdm = new GeneralLocationDatumMetadata(); gdm.setCreated(new DateTime()); gdm.setId(pk); newMeta = meta; } else if ( gdm.getMeta() != null && gdm.getMeta().equals(meta) == false ) { newMeta = new GeneralDatumMetadata(gdm.getMeta()); newMeta.merge(meta, true); } if ( newMeta != null && newMeta.equals(gdm.getMeta()) == false ) { // have changes, so persist gdm.setMeta(newMeta); generalLocationDatumMetadataDao.store(gdm); } } @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void storeGeneralLocationDatumMetadata(Long locationId, String sourceId, GeneralDatumMetadata meta) { assert locationId != null; assert sourceId != null; assert meta != null; LocationSourcePK pk = new LocationSourcePK(locationId, sourceId); GeneralLocationDatumMetadata gdm = generalLocationDatumMetadataDao.get(pk); if ( gdm == null ) { gdm = new GeneralLocationDatumMetadata(); gdm.setCreated(new DateTime()); gdm.setId(pk); gdm.setMeta(meta); } else { gdm.setMeta(meta); } generalLocationDatumMetadataDao.store(gdm); } @Transactional(readOnly = false, propagation = Propagation.REQUIRED) @Override public void removeGeneralLocationDatumMetadata(Long locationId, String sourceId) { GeneralLocationDatumMetadata meta = generalLocationDatumMetadataDao .get(new LocationSourcePK(locationId, sourceId)); if ( meta != null ) { generalLocationDatumMetadataDao.delete(meta); } } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) @Override public FilterResults<GeneralLocationDatumMetadataFilterMatch> findGeneralLocationDatumMetadata( GeneralLocationDatumMetadataFilter criteria, List<SortDescriptor> sortDescriptors, Integer offset, Integer max) { return generalLocationDatumMetadataDao.findFiltered(criteria, sortDescriptors, offset, max); } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) @Override public Set<NodeSourcePK> getGeneralNodeDatumMetadataFilteredSources(Long[] nodeIds, String metadataFilter) { return generalNodeDatumMetadataDao.getFilteredSources(nodeIds, metadataFilter); } @Transactional(readOnly = true, propagation = Propagation.SUPPORTS) @Override public Set<LocationSourcePK> getGeneralLocationDatumMetadataFilteredSources(Long[] locationIds, String metadataFilter) { return generalLocationDatumMetadataDao.getFilteredSources(locationIds, metadataFilter); } public GeneralNodeDatumMetadataDao getGeneralNodeDatumMetadataDao() { return generalNodeDatumMetadataDao; } public void setGeneralNodeDatumMetadataDao(GeneralNodeDatumMetadataDao generalNodeDatumMetadataDao) { this.generalNodeDatumMetadataDao = generalNodeDatumMetadataDao; } public GeneralLocationDatumMetadataDao getGeneralLocationDatumMetadataDao() { return generalLocationDatumMetadataDao; } public void setGeneralLocationDatumMetadataDao( GeneralLocationDatumMetadataDao generalLocationDatumMetadataDao) { this.generalLocationDatumMetadataDao = generalLocationDatumMetadataDao; } }