package net.techreadiness.persistence.dao;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import net.techreadiness.persistence.domain.DeviceDO;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;
@Repository
@Scope("prototype")
public class DeviceDAOImpl extends BaseDAOImpl<DeviceDO> implements DeviceDAO {
@Override
public List<DeviceDO> findByOrgId(Long orgId) {
StringBuilder sb = new StringBuilder();
sb.append("select d ");
sb.append("from DeviceDO d ");
sb.append("where d.org.orgId =:orgId ");
TypedQuery<DeviceDO> query = em.createQuery(sb.toString(), DeviceDO.class);
query.setParameter("orgId", orgId);
return getResultList(query);
}
@Override
public List<DeviceDO> findById(List<Long> deviceIds) {
if (deviceIds.size() < 1) {
return new ArrayList<>();
}
StringBuilder sb = new StringBuilder();
sb.append("select d ");
sb.append("from DeviceDO d ");
sb.append("where d.deviceId in (:deviceIds) ");
TypedQuery<DeviceDO> query = em.createQuery(sb.toString(), DeviceDO.class);
query.setParameter("deviceIds", deviceIds);
return getResultList(query);
}
@Override
public int deleteDevicesForOrg(Long orgId) {
int numDeleted = 0;
StringBuilder sb = new StringBuilder();
sb.append("select d ");
sb.append("from DeviceDO d ");
sb.append("where d.org.orgId = :orgId ");
TypedQuery<DeviceDO> query = em.createQuery(sb.toString(), DeviceDO.class);
query.setParameter("orgId", orgId);
List<DeviceDO> devices = getResultList(query);
if (devices != null) {
for (DeviceDO deviceDO : devices) {
em.remove(deviceDO);
numDeleted++;
}
}
return numDeleted;
}
@Override
public int createSnapshotSetOfDevicesForChildOrgs(Long scopeId, Long parentOrgId, Long snapshotSummaryId) {
int numUpdate = 0;
StringBuilder sb = new StringBuilder();
sb.append("insert into device ");
sb.append("(org_id, name, location, count, operating_system, processor, memory, storage, flash_version, java_version, browser, screen_resolution, display_size) ");
sb.append("select d.org_id, d.name, d.location, d.count, d.operating_system, d.processor, d.memory, d.storage, d.flash_version, d.java_version, d.browser, d.screen_resolution, d.display_size");
sb.append("from device d where d.org_id in ");
sb.append("(select o.org_id from org o, org_part op ");
sb.append("where o.parent_org_id = :parentOrgId and ");
sb.append("op.org_id = o.org_id and ");
sb.append("op.scope_id = :scopeId);");
Query createQuery = em.createQuery(sb.toString());
createQuery.setParameter("snapshotSummaryId", snapshotSummaryId);
createQuery.setParameter("parentOrgId", parentOrgId);
createQuery.setParameter("scopeId", scopeId);
numUpdate = createQuery.executeUpdate();
return numUpdate;
}
}