Java tutorial
/** * Copyright (c) 2015-present Jorge Daz All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library 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 Lesser General Public License for more * details. */ package jorgediazest.util.data; import com.liferay.portal.kernel.language.LanguageUtil; import com.liferay.portal.kernel.util.CharPool; import com.liferay.portal.kernel.util.DateFormatFactoryUtil; import com.liferay.portal.kernel.util.LocalizationUtil; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.kernel.util.Validator; import java.math.BigDecimal; import java.sql.Time; import java.sql.Timestamp; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeSet; import jorgediazest.util.model.Model; import jorgediazest.util.model.TableInfo; import jorgediazest.util.modelquery.DatabaseUtil; /** * @author Jorge Daz */ public class DataUtil { public static BigDecimal castBigDecimal(Object value) { if (value == null) { return null; } if (value instanceof BigDecimal) { return (BigDecimal) value; } if (value instanceof Number) { return new BigDecimal(((Number) value).toString()); } if (value instanceof String) { if (Validator.isNull(value)) { return null; } try { return new BigDecimal((String) value); } catch (Exception e) { } } return null; } public static Boolean castBoolean(Object value) { if (Validator.isNull(value)) { return null; } if (value instanceof Boolean) { return (Boolean) value; } if (value instanceof String) { try { return Boolean.parseBoolean((String) value); } catch (Exception e) { } } return null; } public static Byte castByte(Object value) { if (value == null) { return null; } if (value instanceof Byte) { return (Byte) value; } if (value instanceof Number) { return ((Number) value).byteValue(); } if (value instanceof String) { if (Validator.isNull(value)) { return null; } try { return Byte.parseByte((String) value); } catch (Exception e) { } } return null; } public static byte[] castBytes(Object value) { if (Validator.isNull(value)) { return null; } if (value instanceof byte[]) { return (byte[]) value; } if (value instanceof String) { try { return ((String) value).getBytes(); } catch (Exception e) { } } return null; } public static Long castDateToEpoch(Object value) { if (Validator.isNull(value)) { return null; } Date date = null; if (value instanceof Date) { date = (Date) value; } else if (value instanceof String) { date = stringToDate((String) value); } if (Validator.isNull(date)) { return castLong(value); } return date.getTime() / 1000L; } public static Double castDouble(Object value) { if (value == null) { return null; } if (value instanceof Double) { return (Double) value; } if (value instanceof Number) { return ((Number) value).doubleValue(); } if (value instanceof String) { if (Validator.isNull(value)) { return null; } try { return Double.parseDouble((String) value); } catch (Exception e) { } } return null; } public static Float castFloat(Object value) { if (value == null) { return null; } if (value instanceof Float) { return (Float) value; } if (value instanceof Number) { return ((Number) value).floatValue(); } if (value instanceof String) { if (Validator.isNull(value)) { return null; } try { return Float.parseFloat((String) value); } catch (Exception e) { } } return null; } public static Integer castInt(Object value) { if (value == null) { return null; } if (value instanceof Integer) { return (Integer) value; } if (value instanceof Number) { return ((Number) value).intValue(); } if (value instanceof String) { return _parseInt((String) value); } return null; } public static Long castLong(Object value) { if (value == null) { return null; } if (value instanceof Long) { return (Long) value; } if (value instanceof Number) { return ((Number) value).longValue(); } if (value instanceof String) { return _parseLong((String) value); } return null; } public static Short castShort(Object value) { if (value == null) { return null; } if (value instanceof Integer) { return ((Integer) value).shortValue(); } if (value instanceof Number) { return ((Number) value).shortValue(); } if (value instanceof String) { return _parseShort((String) value); } return null; } public static String castString(Object value) { if (value == null) { return null; } String aux; if (value.getClass() == byte[].class) { byte[] valueArray = (byte[]) value; aux = new String(valueArray, 0, valueArray.length); } else { aux = value.toString(); } if (DataUtil.getIgnoreCase() && !Validator.isXml(aux)) { aux = StringUtil.toLowerCase(aux); } return aux; } /* Long.compare()is not available at java 1.6 */ public static int compareLongs(long x, long y) { return (x < y) ? -1 : ((x == y) ? 0 : 1); } public static Data createDataObject(Model model, Collection<TableInfo> tableInfoCol, DataComparator dataComparator, String[] attributes, Object[] result) { Data data = new Data(model, dataComparator); if (tableInfoCol != null) { data.addTableInfo(tableInfoCol); } int i = 0; for (String attrib : attributes) { data.set(attrib, result[i++]); } return data; } public static Data createDataObject(Model model, DataComparator dataComparator, String[] attributes, Object[] result) { return createDataObject(model, (Collection<TableInfo>) null, dataComparator, attributes, result); } public static Data createDataObject(Model model, TableInfo tableInfo, DataComparator dataComparator, String[] attributes, Object[] result) { List<TableInfo> tableInfoList = new ArrayList<>(); tableInfoList.add(tableInfo); return createDataObject(model, tableInfoList, dataComparator, attributes, result); } public static Data[] getArrayCommonData(Set<Data> set1, Set<Data> set2) { Set<Data> both = new TreeSet<>(set1); both.retainAll(set2); return both.toArray(new Data[0]); } public static long getIdFromUID(String strValue) { long id = -1; String[] uidArr = strValue.split("_"); if ((uidArr != null) && (uidArr.length >= 3)) { int pos = uidArr.length - 2; while ((pos > 0) && !"PORTLET".equals(uidArr[pos])) { pos = pos - 2; } if ((pos > 0) && "PORTLET".equals(uidArr[pos])) { id = DataUtil.castLong(uidArr[pos + 1]); } } return id; } public static ThreadLocal<Boolean> getIgnorecase() { return DataUtil.ignoreCase; } public static boolean getIgnoreCase() { return DataUtil.ignoreCase.get(); } public static String[] getListAttr(Collection<Data> data, String attr) { return getListAttr(data, attr, data.size()); } public static String[] getListAttr(Collection<Data> data, String attr, int size) { if ((size > data.size()) || (size <= 0)) { size = data.size(); } String[] values = new String[size]; int i = 0; for (Data value : data) { values[i++] = value.get(attr).toString(); if (i >= size) { break; } } return values; } public static boolean isNotNull(Object obj) { return !isNull(obj); } public static boolean isNull(Object obj) { if (Validator.isNull(obj)) { return true; } if (obj instanceof Double) { if (((Double) obj).longValue() == 0) { return true; } return false; } else if (obj instanceof Float) { if (((Float) obj).longValue() == 0) { return true; } return false; } else if (obj instanceof Integer) { if (((Integer) obj).longValue() == 0) { return true; } return false; } else if (obj instanceof String) { Double d = castDouble((String) obj); if (d != null) { if (d.longValue() == 0) { return true; } return false; } Long l = castLong((String) obj); if (l != null) { if (l.longValue() == 0) { return true; } return false; } } return false; } public static void setIgnoreCase(boolean ignoreCase) { DataUtil.ignoreCase.set(ignoreCase); } public static Date stringToDate(String dateString) { Date date = null; try { date = dateFormatyyyyMMddHHmmss.get().parse(dateString); } catch (Exception e) { } if (date != null) { return date; } try { date = dateFormatyyyyMMddHHmmssSSS.get().parse(dateString); } catch (Exception e) { } if (date != null) { return date; } try { date = Timestamp.valueOf(dateString); } catch (Exception e) { } if (date != null) { return date; } try { date = Time.valueOf(dateString); } catch (Exception e) { } return date; } public static Object transformArray(int type, Object[] values) { Set<Object> transformObjects = transformArrayToSet(type, values); if (transformObjects.isEmpty()) { return null; } if (transformObjects.size() == 1) { return transformObjects.toArray()[0]; } return transformObjects; } public static Object transformObject(int type, Object o) { if (o instanceof Map) { return o; } Object transformObject = DatabaseUtil.castObjectToJdbcTypeObject(type, o); if (transformObject instanceof String) { String str = (String) transformObject.toString(); if (Validator.isXml(str)) { transformObject = transformXmlToMap(str); } } return transformObject; } protected static Set<Object> transformArrayToSet(int type, Object[] values) { Set<Object> transformObjects = new HashSet<>(values.length); for (Object o : values) { Object transformObject = transformObject(type, o); if (transformObject != null) { transformObjects.add(transformObject); } } return transformObjects; } protected static Map<Locale, String> transformXmlToMap(String xml) { Map<Locale, String> map = LocalizationUtil.getLocalizationMap(xml); Map<Locale, String> cleanMap = new HashMap<>(); for (Locale key : LanguageUtil.getAvailableLocales()) { if (!map.containsKey(key)) { continue; } String value = map.get(key); if (DataUtil.isNotNull(value)) { if (DataUtil.getIgnoreCase()) { value = StringUtil.toLowerCase(value); } cleanMap.put(key, value); } } return cleanMap; } private static Integer _parseInt(String value) { int length = value.length(); if (length <= 0) { return null; } int pos = 0; int limit = -Integer.MAX_VALUE; boolean negative = false; char c = value.charAt(0); if (c < CharPool.NUMBER_0) { if (c == CharPool.MINUS) { limit = Integer.MIN_VALUE; negative = true; } else if (c != CharPool.PLUS) { return null; } if (length == 1) { return null; } pos++; } int smallLimit = limit / 10; int result = 0; while (pos < length) { if (result < smallLimit) { return null; } c = value.charAt(pos++); if ((c < CharPool.NUMBER_0) || (c > CharPool.NUMBER_9)) { return null; } int number = c - CharPool.NUMBER_0; result *= 10; if (result < (limit + number)) { return null; } result -= number; } if (negative) { return result; } else { return -result; } } private static Long _parseLong(String value) { int length = value.length(); if (length <= 0) { return null; } int pos = 0; long limit = -Long.MAX_VALUE; boolean negative = false; char c = value.charAt(0); if (c < CharPool.NUMBER_0) { if (c == CharPool.MINUS) { limit = Long.MIN_VALUE; negative = true; } else if (c != CharPool.PLUS) { return null; } if (length == 1) { return null; } pos++; } long smallLimit = limit / 10; long result = 0; while (pos < length) { if (result < smallLimit) { return null; } c = value.charAt(pos++); if ((c < CharPool.NUMBER_0) || (c > CharPool.NUMBER_9)) { return null; } int number = c - CharPool.NUMBER_0; result *= 10; if (result < (limit + number)) { return null; } result -= number; } if (negative) { return result; } else { return -result; } } private static Short _parseShort(String value) { Integer i = _parseInt(value); if ((i == null) || (i < Short.MIN_VALUE) || (i > Short.MAX_VALUE)) { return null; } return (short) i.shortValue(); } private static final ThreadLocal<DateFormat> dateFormatyyyyMMddHHmmss = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return DateFormatFactoryUtil.getSimpleDateFormat("yyyyMMddHHmmss"); } }; private static final ThreadLocal<DateFormat> dateFormatyyyyMMddHHmmssSSS = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return DateFormatFactoryUtil.getSimpleDateFormat("yyyyMMddHHmmssSSS"); } }; private static ThreadLocal<Boolean> ignoreCase = new ThreadLocal<Boolean>() { @Override protected Boolean initialValue() { return false; } }; }