Update GenericServiceController.java

Clean code
This commit is contained in:
Salman Manoe 2024-12-19 15:39:42 +07:00
parent a635ea60e7
commit 9d932fb6db

View File

@ -1,107 +1,52 @@
package com.jasamedika.medifirst2000.controller; package com.jasamedika.medifirst2000.controller;
import java.lang.reflect.Constructor; import com.jasamedika.medifirst2000.base.vo.BaseModelVO;
import java.lang.reflect.Field; import com.jasamedika.medifirst2000.controller.base.LocaleController;
import java.util.ArrayList; import com.jasamedika.medifirst2000.exception.ServiceVOException;
import java.util.HashMap; import com.jasamedika.medifirst2000.service.ModelService;
import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import java.util.Map; import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.JoinColumn; import javax.persistence.JoinColumn;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.joda.time.chrono.AssembledChronology.Fields; import static com.jasamedika.medifirst2000.util.JsonUtil.ToMaps;
import org.json.JSONException; import static com.jasamedika.medifirst2000.util.rest.RestUtil.getJsonResponse;
import org.json.JSONObject; import static java.net.URLDecoder.decode;
import org.scalastuff.scalabeans.sig.Mirror.Annotation; import static org.springframework.http.HttpStatus.CREATED;
import org.springframework.beans.factory.annotation.Autowired; import static org.springframework.http.HttpStatus.OK;
import org.springframework.cache.annotation.Cacheable; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import org.springframework.context.MessageSource; import static org.springframework.web.bind.annotation.RequestMethod.GET;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.jasamedika.medifirst2000.base.vo.BaseMasterVO;
import com.jasamedika.medifirst2000.base.vo.BaseModelVO;
import com.jasamedika.medifirst2000.base.vo.BaseTransactionVO;
import com.jasamedika.medifirst2000.controller.base.LocaleController;
import com.jasamedika.medifirst2000.service.ModelService;
import com.jasamedika.medifirst2000.util.JsonUtil;
import com.jasamedika.medifirst2000.util.rest.RestUtil;
import com.jasamedika.medifirst2000.vo.AntrianPasienRegistrasiVO;
import com.jasamedika.medifirst2000.vo.PasienDaftarVO;
import java.lang.reflect.Method;
import java.net.URLDecoder;
@RestController @RestController
@RequestMapping("/service") @RequestMapping("/service")
public class GenericServiceController extends LocaleController<AntrianPasienRegistrasiVO> { public class GenericServiceController extends LocaleController<BaseModelVO> {
@Autowired private static final String CONTENT_TYPE = "Content-Type";
private MessageSource messageSource;
@Autowired @Autowired
private ModelService<?> modelService; private ModelService<?> modelService;
private static final String CONTENT_TYPE = "Content-Type";
public static List<Field> GetFields(Class data) { @RequestMapping(value = "/get-setting/", method = GET, produces = APPLICATION_JSON_VALUE)
List<Field> items = new ArrayList<Field>();
String name = data.getName();
Class parent = data.getSuperclass();
if (parent instanceof Class) {
name = ((Class) parent).getName();
}
Class tmpClass = null;
if (BaseModelVO.class.isAssignableFrom(data.getClass())) {
tmpClass = BaseTransactionVO.class;
} else if (BaseTransactionVO.class.isAssignableFrom(data.getClass())) {
tmpClass = BaseMasterVO.class;
}
if ((data == tmpClass)) {
for (Field field : data.getDeclaredFields()) {
items.add(field);
}
return items;
}
if (parent != null) {
for (Field field : GetFields(data.getSuperclass())) {
items.add(field);
}
}
for (Field field : data.getDeclaredFields()) {
items.add(field);
}
return items;
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/get-setting/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getData(@RequestParam(value = "prefix", required = false) String prefix) { public ResponseEntity<String> getData(@RequestParam(value = "prefix", required = false) String prefix) {
return getJsonResponse(GetSettingDataFixed(prefix), CREATED, mapHeaderMessage);
return RestUtil.getJsonResponse(GetSettingDataFixed(prefix), HttpStatus.CREATED, mapHeaderMessage);
} }
@RequestMapping(value = "/list-generic/", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) // &skip={skip}&page={page}&pageSize={pageSize}&filter[logic]={logic}&filter[filters][0][value]={value}&filter[filters][0][field]={fields}&filter[filters][0][operator]={operator}&filter[filters][0][ignoreCase]={ignorecase}", @RequestMapping(value = "/list-generic/", method = GET, produces = APPLICATION_JSON_VALUE)
// method public ResponseEntity<List<Map<String, Object>>> listGeneric(
// = @RequestParam(value = "view", required = false) String entity,
// RequestMethod.GET,
// produces
// =
// MediaType.APPLICATION_JSON_VALUE)
// @Cacheable ("default")
public ResponseEntity<List<Map<String,Object>>> listGeneric(@RequestParam(value = "view", required = false) String entity,
@RequestParam(value = "select", required = false) String field, @RequestParam(value = "select", required = false) String field,
@RequestParam(value = "take", required = false) Integer take, @RequestParam(value = "take", required = false) Integer take,
@RequestParam(value = "skip", required = false) Integer skip, @RequestParam(value = "skip", required = false) Integer skip,
@ -113,82 +58,69 @@ public class GenericServiceController extends LocaleController<AntrianPasienReg
@RequestParam(value = "filter[filters][0][operator]", required = false) String operator, @RequestParam(value = "filter[filters][0][operator]", required = false) String operator,
@RequestParam(value = "filter[filters][0][ignoreCase]", required = false) String ignorecase, @RequestParam(value = "filter[filters][0][ignoreCase]", required = false) String ignorecase,
@RequestParam(value = "criteria", required = false) String criteria, @RequestParam(value = "criteria", required = false) String criteria,
@RequestParam(value = "values", required = false) String values,HttpServletRequest request) @RequestParam(value = "values", required = false) String values, HttpServletRequest request)
throws SecurityException, ClassNotFoundException, JSONException { throws SecurityException, ClassNotFoundException {
// for numeric or integer using {numeric} String data = request.getQueryString();
data = decode(data);
String data =request.getQueryString();
data = URLDecoder.decode(data);
String[] arrQueries = data.split("&"); String[] arrQueries = data.split("&");
for(String query : arrQueries) StringBuilder criteriaBuilder = new StringBuilder(criteria);
{ StringBuilder valuesBuilder = new StringBuilder(values);
if(query.indexOf("filter[filters][0][filter][field]")>=0) for (String query : arrQueries) {
{ if (query.contains("filter[filters][0][filter][field]")) {
if(criteria==null) criteriaBuilder.append(",").append(query.replace("filter[filters][0][filter][field]=", ""));
criteria=query.replace("filter[filters][0][filter][field]=", ""); } else if (query.contains("filter[filters][0][filter][value]")) {
else valuesBuilder.append(",").append(query.replace("filter[filters][0][filter][value]=", ""));
criteria+=","+query.replace("filter[filters][0][filter][field]=", "");
}
else if(query.indexOf("filter[filters][0][filter][value]")>=0)
{
if(values==null)
values=query.replace("filter[filters][0][filter][value]=", "");
else
values+=","+query.replace("filter[filters][0][filter][value]=", "");
} }
} }
// map.put("data", src); values = valuesBuilder.toString();
criteria = criteriaBuilder.toString();
if (field.equals("*")) { if (field.equals("*")) {
field = ""; StringBuilder fieldBuilder = new StringBuilder();
for (Field fieldItem : GetFields(Class.forName("com.jasamedika.medifirst2000.entities." + entity))) {
for (Field fieldItem : GetFields( Class.forName("com.jasamedika.medifirst2000.entities." + entity))) { String name = fieldItem.getName();
{ if (name.equals("serialVersionsUID"))
String name = fieldItem.getName(); continue;
if(name.equals("serialVersionsUID"))continue; boolean valid = false;
Boolean valid = false; for (Annotation annotation : fieldItem.getDeclaredAnnotations()) {
for (java.lang.annotation.Annotation annotation : fieldItem.getDeclaredAnnotations()) { if (annotation instanceof JoinColumn) {
if (annotation instanceof JoinColumn) { valid = true;
valid=true; } else if (annotation instanceof Column) {
} else if (annotation instanceof Column) { Column column = (Column) annotation;
Column column = (Column)annotation; if (column.name().endsWith("Fk"))
if(column.name().endsWith("Fk")) if (!fieldItem.getName().endsWith("Id"))
if(fieldItem.getName().endsWith("Id")==false) valid = true;
valid=true; } else if (annotation instanceof OneToMany) {
}else if (annotation instanceof OneToMany) { valid = true;
valid=true;
}
} }
if(valid ==false)
if (field.equals(""))
field += fieldItem.getName();
else
field += "," + fieldItem.getName();
} }
// field+=",id"; if (!valid)
if (fieldBuilder.toString().isEmpty())
fieldBuilder.append(fieldItem.getName());
else
fieldBuilder.append(",").append(fieldItem.getName());
} }
}else if (field.equals("**")) { field = fieldBuilder.toString();
field="*"; } else if (field.equals("**")) {
field = "*";
}
List<Map<String, Object>> modelGenericVO = modelService.getAllData(entity, field, take, skip, page, pageSize,
logic, value, fieldS, operator, ignorecase, criteria, values);
HttpHeaders headers = new HttpHeaders();
headers.set(CONTENT_TYPE, APPLICATION_JSON_VALUE);
try {
return new ResponseEntity<>(ToMaps(modelGenericVO), headers, OK);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new ServiceVOException(e.getMessage());
} }
// for dateformat using [date]
List<Map<String,Object>> modelGenericVO = modelService.getAllData(entity, field, take, skip, page, pageSize, logic, value,
fieldS, operator, ignorecase, criteria, values);
HttpHeaders headers = new HttpHeaders();
// headers.add(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
headers.set(CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE);
Map<String, Object> map = new HashMap<String, Object>();try {
return new ResponseEntity(JsonUtil.ToMaps(modelGenericVO),headers,HttpStatus.OK);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
} }
// return RestUtil.getJsonResponse(modelGenericVO, HttpStatus.OK);
return null; public static List<Field> GetFields(Class<?> data) {
} List<Field> items = new ArrayList<>();
Class<?> parent = data.getSuperclass();
if (parent != null)
items.addAll(GetFields(data.getSuperclass()));
items.addAll(Arrays.asList(data.getDeclaredFields()));
return items;
}
} }