Clean code

Persiapan service split jumlah pelayanan cloning object persistence
This commit is contained in:
Salman Manoe 2023-08-26 23:22:44 +07:00
parent 3002091772
commit 8fb26ced95
2 changed files with 111 additions and 153 deletions

View File

@ -1,22 +1,5 @@
package com.jasamedika.medifirst2000.converter;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import org.hibernate.Hibernate;
import org.hibernate.proxy.HibernateProxy;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
@ -29,12 +12,23 @@ import com.jasamedika.medifirst2000.base.vo.BaseActiveVO;
import com.jasamedika.medifirst2000.converter.base.BaseVoConverter;
import com.jasamedika.medifirst2000.util.ExtendedSpringBeanUtil;
import com.jasamedika.medifirst2000.util.JsonUtil;
import org.hibernate.Hibernate;
import org.hibernate.proxy.HibernateProxy;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.*;
@Component
public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> implements BaseVoConverter<T, T1> {
private Class<T> classOfT;
// private Class<T1> classOfT1;
// private Class<T1> classOfT1;
private Boolean useGson;
private Boolean useExclude;
@ -75,65 +69,66 @@ public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> imp
public void setUseExclude(Boolean useExclude) {
this.useExclude = useExclude;
}
private static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() {
@Override
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
return (HibernateProxy.class.isAssignableFrom(type.getRawType()) ? (TypeAdapter<T>) new HibernateProxyTypeAdapter(gson) : null);
}
@Override
@SuppressWarnings("unchecked")
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
return (HibernateProxy.class.isAssignableFrom(type.getRawType())
? (TypeAdapter<T>) new HibernateProxyTypeAdapter(gson) : null);
}
};
private static final class HibernateProxyTypeAdapter extends TypeAdapter<HibernateProxy> {
private final Gson context;
private HibernateProxyTypeAdapter(Gson context) {
this.context = context;
}
private HibernateProxyTypeAdapter(Gson context) {
this.context = context;
}
@Override
public HibernateProxy read(JsonReader r) throws IOException {
throw new UnsupportedOperationException("Not supported");
}
@Override
public HibernateProxy read(JsonReader r) throws IOException {
throw new UnsupportedOperationException("Not supported");
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void write(JsonWriter out, HibernateProxy value) throws IOException {
if (value == null) {
out.nullValue();
return;
}
// Retrieve the original (not proxy) class
Class<?> baseType = Hibernate.getClass(value);
// Get the TypeAdapter of the original class, to delegate the
// serialization
TypeAdapter delegate = context.getAdapter(TypeToken.get(baseType));
// Get a filled instance of the original class
Object unproxiedValue = ((HibernateProxy) value).getHibernateLazyInitializer().getImplementation();
// Serialize the value
delegate.write(out, unproxiedValue);
}
@SuppressWarnings({"rawtypes", "unchecked"})
@Override
public void write(JsonWriter out, HibernateProxy value) throws IOException {
if (value == null) {
out.nullValue();
return;
}
// Retrieve the original (not proxy) class
Class<?> baseType = Hibernate.getClass(value);
// Get the TypeAdapter of the original class, to delegate the serialization
TypeAdapter delegate = context.getAdapter(TypeToken.get(baseType));
// Get a filled instance of the original class
Object unproxiedValue = ((HibernateProxy) value).getHibernateLazyInitializer()
.getImplementation();
// Serialize the value
delegate.write(out, unproxiedValue);
}
}
public T transferModelToVOCustom(T1 model, T vo, String[] fieldsToInclude) {
try {
// Add TypeAdapterFactory // Syamsu
// GsonBuilder builder = new GsonBuilder();
// builder.registerTypeAdapterFactory(BaseConverterImpl.FACTORY);
// Gson gson = builder.create();
// Sampai sini
Map<String, Object> serialized = model.serialize(fieldsToInclude, model.getClass().getSimpleName());
// Add TypeAdapterFactory // Syamsu
// GsonBuilder builder = new GsonBuilder();
// builder.registerTypeAdapterFactory(BaseConverterImpl.FACTORY);
// Gson gson = builder.create();
// Sampai sini
Map<String, Object> serialized = model.serialize(fieldsToInclude, model.getClass().getSimpleName());
Gson gson = new Gson();
String json = gson.toJson(serialized);
vo = (T) gson.fromJson(json, vo.getClass());
} catch (Exception e) {
e.printStackTrace();
}
@ -249,7 +244,7 @@ public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> imp
return vos;
}
public T Clone(T model, T vo, String[] expected) throws IllegalArgumentException, IllegalAccessException {
public T clone(T model, T vo, String[] expected) throws IllegalArgumentException, IllegalAccessException {
List<String> fieldsToInclude = new ArrayList<String>();
for (Field field : model.GetFields(model.getClass())) {
@ -268,30 +263,26 @@ public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> imp
return vo;
}
public T1 Clone(T1 model, T1 vo, String[] expected) throws IllegalArgumentException, IllegalAccessException {
List<String> fieldsToInclude = new ArrayList<String>();
for (Field field : model.GetFields(model.getClass())) {
public T1 clone(T1 model, T1 vo, String[] expected) throws IllegalArgumentException, IllegalAccessException {
for (Field field : BaseModel.GetFields(model.getClass())) {
String str = field.getName();
Boolean valid = false;
boolean valid = false;
for (String key : expected) {
if (str.equals(key))
if (str.equals(key)) {
valid = true;
break;
}
}
if (!valid) {
try {
field.setAccessible(true);
Object obj = field.get(model);
field.set(vo, obj);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
}
fieldsToInclude.add(str);
}
return vo;
}
@ -314,15 +305,16 @@ public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> imp
Gson gson = new Gson();
try {
if (getUseGson() == null || getUseGson() == false) {
if (getUseExclude() == null || getUseExclude() == false)
gson = new GsonBuilder()//.excludeFieldsWithoutExposeAnnotation()
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
if (getUseExclude() == null || getUseExclude() == false)
gson = new GsonBuilder()// .excludeFieldsWithoutExposeAnnotation()
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
else
gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
//serialized = model.serialize(fieldsToInclude.toArray(new String[0]), model.getClass().getName());
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
// serialized = model.serialize(fieldsToInclude.toArray(new
// String[0]), model.getClass().getName());
String json = gson.toJson(ToMap(model));
gson = new GsonBuilder()//.excludeFieldsWithoutExposeAnnotation()
gson = new GsonBuilder()// .excludeFieldsWithoutExposeAnnotation()
.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS").create();
vo = (T) gson.fromJson(json, vo.getClass());
}
@ -563,16 +555,16 @@ public class BaseConverterImpl<T extends BaseActiveVO, T1 extends BaseModel> imp
return maps;
}
public T transferModelToVOCustom(T1 model, T vo) {
if (null == vo)
vo = (T) new Object();
try {
String[] fieldsToInclude = null;
Map<String, Object> serialized = model.serialize(fieldsToInclude,model.getClass().getSimpleName());
Map<String, Object> serialized = model.serialize(fieldsToInclude, model.getClass().getSimpleName());
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
String json = gson.toJson(serialized);
vo = (T) gson.fromJson(json, vo.getClass());
String json = gson.toJson(serialized);
vo = (T) gson.fromJson(json, vo.getClass());
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -9,7 +9,6 @@ import java.util.Map;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.orm.jpa.JpaSystemException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -18,14 +17,10 @@ import com.google.gson.Gson;
import com.jasamedika.medifirst2000.converter.AgamaConverter;
import com.jasamedika.medifirst2000.converter.AsalRujukanConverter;
import com.jasamedika.medifirst2000.converter.BaseConverterImpl;
import com.jasamedika.medifirst2000.converter.DesaKelurahanConverter;
import com.jasamedika.medifirst2000.converter.GolonganDarahConverter;
import com.jasamedika.medifirst2000.converter.HubunganKeluargaConverter;
import com.jasamedika.medifirst2000.converter.JenisKelaminConverter;
import com.jasamedika.medifirst2000.converter.KelompokPasienConverter;
import com.jasamedika.medifirst2000.converter.KotaKabupatenConverter;
import com.jasamedika.medifirst2000.converter.LoginUserConverter;
import com.jasamedika.medifirst2000.converter.PasienConverter;
import com.jasamedika.medifirst2000.converter.PegawaiConverter;
import com.jasamedika.medifirst2000.converter.PekerjaanConverter;
import com.jasamedika.medifirst2000.converter.PendidikanConverter;
@ -42,7 +37,6 @@ import com.jasamedika.medifirst2000.dao.PasienDaftarDao;
import com.jasamedika.medifirst2000.dao.PasienDao;
import com.jasamedika.medifirst2000.dao.RegistrasiPelayananPasienDao;
import com.jasamedika.medifirst2000.dao.custom.AntrianPasienRegistrasiDaoCustom;
import com.jasamedika.medifirst2000.dao.custom.PasienDaoCustom;
import com.jasamedika.medifirst2000.entities.Agama;
import com.jasamedika.medifirst2000.entities.Alamat;
import com.jasamedika.medifirst2000.entities.AntrianPasienDiPeriksa;
@ -54,21 +48,18 @@ import com.jasamedika.medifirst2000.entities.JadwalDokter;
import com.jasamedika.medifirst2000.entities.JenisKelamin;
import com.jasamedika.medifirst2000.entities.Kebangsaan;
import com.jasamedika.medifirst2000.entities.KelompokPasien;
import com.jasamedika.medifirst2000.entities.LoginUser;
import com.jasamedika.medifirst2000.entities.Negara;
import com.jasamedika.medifirst2000.entities.Pasien;
import com.jasamedika.medifirst2000.entities.PasienDaftar;
import com.jasamedika.medifirst2000.entities.Pegawai;
import com.jasamedika.medifirst2000.entities.Pekerjaan;
import com.jasamedika.medifirst2000.entities.Pendidikan;
import com.jasamedika.medifirst2000.entities.RegistrasiPelayananPasien;
import com.jasamedika.medifirst2000.entities.Ruangan;
import com.jasamedika.medifirst2000.entities.StatusPerkawinan;
import com.jasamedika.medifirst2000.entities.TitlePasien;
import com.jasamedika.medifirst2000.enums.StatusAntrianEnum;
import com.jasamedika.medifirst2000.enums.TipePasienEnum;
import com.jasamedika.medifirst2000.exception.ServiceVOException;
import com.jasamedika.medifirst2000.service.AgamaService;
import com.jasamedika.medifirst2000.service.AntrianPasienDiPeriksaService;
import com.jasamedika.medifirst2000.service.AntrianPasienRegistrasiService;
import com.jasamedika.medifirst2000.service.KelompokPasienService;
@ -80,10 +71,8 @@ import com.jasamedika.medifirst2000.util.Age;
import com.jasamedika.medifirst2000.util.AgeCalculator;
import com.jasamedika.medifirst2000.util.CommonUtil;
import com.jasamedika.medifirst2000.util.DateUtil;
import com.jasamedika.medifirst2000.vo.AgamaVO;
import com.jasamedika.medifirst2000.vo.AntrianPasienRegistrasiVO;
import com.jasamedika.medifirst2000.vo.DesaKelurahanVO;
import com.jasamedika.medifirst2000.vo.GridAntrianPasienDiPeriksaVO;
import com.jasamedika.medifirst2000.vo.GridAntrianPasienRegistrasiVO;
import com.jasamedika.medifirst2000.vo.KebangsaanVO;
import com.jasamedika.medifirst2000.vo.KelompokPasienVO;
@ -115,9 +104,6 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
@Autowired
private BaseConverterImpl<PasienVO, Pasien> pasienConverter;
@Autowired
private BaseConverterImpl<PasienDaftarVO, PasienDaftar> pasienDaftarConverter;
@Autowired
private JenisKelaminConverter jenisKelaminConverter;
@ -142,24 +128,15 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
@Autowired
private RuanganConverter ruanganConverter;
@Autowired
private LoginUserConverter loginUserConverter;
@Autowired
private GolonganDarahConverter golonganDarahConverter;
@Autowired
private AntrianPasienRegistrasiService antrianPasienRegistrasiService;
@Autowired
private KelompokPasienService kelompokPasienService;
@Autowired
private AntrianPasienDiPeriksaService antrianPasienDiPeriksaService;
@Autowired
private RegistrasiPasienConverter registrasiPasienConverter;
@Autowired
private PegawaiConverter pegawaiConverter;
@ -172,9 +149,6 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
@Autowired
private AntrianPasienDiPeriksaDao antrianPasienDiPeriksaDao;
@Autowired
private RegistrasiPelayananPasienDao registrasiPelayananPasienDao;
@Autowired
private PasienDaftarDao pasienDaftarDao;
@ -184,9 +158,6 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
@Autowired
private PasienService pasienService;
@Autowired
private AgamaDao agamaDao;
@Autowired
private PasienDao pasienDao;
@ -293,14 +264,12 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
model.setStatusPerkawinan(
statusPerkawinanConverter.transferVOToModel(vo.getStatusPerkawinan(), new StatusPerkawinan()));
}
//add by askur 04102016
// add by askur 04102016
if (CommonUtil.isNotNullOrEmpty(vo.getKebangsaan())) {
model.setKebangsaan(
kebangsaanConverter.transferVOToModel(vo.getKebangsaan(), new Kebangsaan()));
model.setKebangsaan(kebangsaanConverter.transferVOToModel(vo.getKebangsaan(), new Kebangsaan()));
}
if (CommonUtil.isNotNullOrEmpty(vo.getNegara())) {
model.setNegara(
negaraConverter.transferVOToModel(vo.getNegara(), new Negara()));
model.setNegara(negaraConverter.transferVOToModel(vo.getNegara(), new Negara()));
}
//
UUID noReservasi = UUID.randomUUID();
@ -310,14 +279,14 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
else
model.setNoReservasi(noReservasi.toString().substring(1, 8));
AntrianPasienRegistrasi antrianPasienRegistrasi = antrianPasienRegistrasiDao.save(model);
// no lama
//model.setNoAntrian(antrianPasienRegistrasiDao.getCountByMonthAndYear(model.getTglReservasi()));
// model.setNoAntrian(antrianPasienRegistrasiDao.getCountByMonthAndYear(model.getTglReservasi()));
// no antrian baru
model.setNoAntrian(antrianPasienRegistrasiDao.getCountByMonthAndYear(model.getTglReservasi(), model.getJenis()));
model.setNoAntrian(
antrianPasienRegistrasiDao.getCountByMonthAndYear(model.getTglReservasi(), model.getJenis()));
antrianPasienRegistrasi = antrianPasienRegistrasiDao.save(model);
Map<String, Object> result = new HashMap<String, Object>();
if (CommonUtil.isNotNullOrEmpty(antrianPasienRegistrasi)) {
@ -594,7 +563,7 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
pasien.setTglDaftar(new Date());
pasien.setNoIdentitas(model.getNoIdentitas());
}
//want to edit by askur 03012017
// want to edit by askur 03012017
pasien.setNoCm(pasienService.generatePasienCM());
pasien = pasienDao.save(pasien);
if (CommonUtil.isNotNullOrEmpty(pasien)) {
@ -739,7 +708,7 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
model.setTglLahir(antrianPasienRegistrasi.getTglLahir());
}
try {
model = antrianPasienRegistrasiConverter.Clone(antrianPasienRegistrasi, antrianPasienRegistrasi,
model = antrianPasienRegistrasiConverter.clone(antrianPasienRegistrasi, antrianPasienRegistrasi,
new String[] { "id" });
} catch (IllegalArgumentException | IllegalAccessException e) {
@ -767,7 +736,7 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
Integer ruanganId, String dateStart, String dateEnd, String namaPasien, String noReservasi) {
Date startDate = null;
Date endDate = null;
if (CommonUtil.isNotNullOrEmpty(dateStart)) {
startDate = DateUtil.toDate(dateStart);
}
@ -793,45 +762,41 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
if (rowStart < 0) {
rowStart = 0;
}
int rowEnd = limit;
List<AntrianPasienRegistrasi> antrianPasienRegistrasiList = antrianPasienRegistrasiDaoCustom
.findAllAntrianPagingList(rowStart, rowEnd, startDate, endDate, ruanganId, namaPasien, noReservasi);
List<GridAntrianPasienRegistrasiVO> gridAntrianPasienDiPeriksaVoList = new ArrayList<GridAntrianPasienRegistrasiVO>();
for (AntrianPasienRegistrasi model : antrianPasienRegistrasiList) {
GridAntrianPasienRegistrasiVO gridAntrianPasienRegistrasiVO = new GridAntrianPasienRegistrasiVO();
gridAntrianPasienRegistrasiVO.setNoAntrian(model.getNoAntrian());
if(CommonUtil.isNotNullOrEmpty(model.getRuangan()))
{
gridAntrianPasienRegistrasiVO.setRuangan(ruanganConverter.transferModelToVOCustom(model.getRuangan(),
new RuanganVO(), new String[] { "id", "namaRuangan", "kdRuangan" }));
}
else
{
if (CommonUtil.isNotNullOrEmpty(model.getRuangan())) {
gridAntrianPasienRegistrasiVO.setRuangan(ruanganConverter.transferModelToVOCustom(model.getRuangan(),
new RuanganVO(), new String[] { "id", "namaRuangan", "kdRuangan" }));
} else {
RuanganVO ruang = new RuanganVO();
ruang.setNamaRuangan("");
ruang.setId(null);
ruang.setKdRuangan(null);
gridAntrianPasienRegistrasiVO.setRuangan(ruang);
}
if (model.getPegawai() != null)
gridAntrianPasienRegistrasiVO.setDokter(pegawaiConverter.transferModelToVOCustom(model.getPegawai(),
new PegawaiVO(), new String[] { "id", "namaLengkap", "noTlp" }));
else
gridAntrianPasienRegistrasiVO.setDokter(new PegawaiVO());
if (model.getJenisPasien() != null)
gridAntrianPasienRegistrasiVO.setKelompokPasien(
kelompokPasienConverter.transferModelToVO(model.getJenisPasien(), new KelompokPasienVO()));
if (model.getIsConfirm() != null && model.getIsConfirm() == true)
gridAntrianPasienRegistrasiVO.setStatus("Confirm");
else {
@ -842,7 +807,7 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
} else {
gridAntrianPasienRegistrasiVO.setStatus("Reservasi");
}
}
gridAntrianPasienRegistrasiVO.setNoReservasi(model.getNoReservasi());
gridAntrianPasienRegistrasiVO.setNoRec(model.getNoRec());
@ -867,10 +832,10 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
gridAntrianPasienDiPeriksaVoList.add(gridAntrianPasienRegistrasiVO);
}
}
return constructMapReturn(gridAntrianPasienDiPeriksaVoList, totalRow, totalPages);
}
@Override
@ -923,8 +888,9 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
} else
gridAntrianPasienRegistrasiVO.setNamaPasien(model.getNamaPasien());
gridAntrianPasienRegistrasiVO.setNoRec(model.getNoRec());
if (CommonUtil.isNotNullOrEmpty(model.getTglLahir())) {;
if (CommonUtil.isNotNullOrEmpty(model.getTglLahir())) {
;
Age age = AgeCalculator.calculateAge(model.getTglLahir());
if (CommonUtil.isNotNullOrEmpty(age)) {
gridAntrianPasienRegistrasiVO.setUmur(age.toString());
@ -979,11 +945,11 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
}
@Override
public Map<String,Object> getPasienByNoRec(String id) {
public Map<String, Object> getPasienByNoRec(String id) {
BaseConverterImpl<AntrianPasienRegistrasiVO, AntrianPasienRegistrasi> converter = new BaseConverterImpl<>();
AntrianPasienRegistrasiVO vo = new AntrianPasienRegistrasiVO();
AntrianPasienRegistrasi data = antrianPasienRegistrasiDaoCustom.findByNoRec(id);
AntrianPasienRegistrasi data = antrianPasienRegistrasiDaoCustom.findByNoRec(id);
try {
return data.ToMap();
} catch (IllegalArgumentException e) {
@ -1002,10 +968,10 @@ public class RegistrasiPasienOnlineServiceImpl extends BaseVoServiceImpl
PasienDaftar data = pasienDaftarDao.findByNoRec(id);
if (data == null) {
AntrianPasienDiPeriksa antrianPasienDiPeriksa = antrianPasienDiPeriksaDao.findOne(id);
if(antrianPasienDiPeriksa==null)
if (antrianPasienDiPeriksa == null)
data = pasienDaftarDao.findByNoRec(id);
else
data = antrianPasienDiPeriksa.getPasienDaftar();
data = antrianPasienDiPeriksa.getPasienDaftar();
}
Gson gson = new Gson();
String json;