/portal-service/src/com/liferay/portal/kernel/util/GetterUtil.java

https://github.com/portalcollc/liferay-portal · Java · 1029 lines · 738 code · 275 blank · 16 comment · 183 complexity · e8c8a963e10e18cd7bb9957468b37107 MD5 · raw file

  1. /**
  2. * Copyright (c) 2000-2011 Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.portal.kernel.util;
  15. import java.text.DateFormat;
  16. import java.util.Date;
  17. /**
  18. * @author Brian Wing Shun Chan
  19. */
  20. public class GetterUtil {
  21. public static String[] BOOLEANS = {"true", "t", "y", "on", "1"};
  22. public static final boolean DEFAULT_BOOLEAN = false;
  23. public static final boolean[] DEFAULT_BOOLEAN_VALUES = new boolean[0];
  24. public static final byte DEFAULT_BYTE = 0;
  25. public static final byte[] DEFAULT_BYTE_VALUES = new byte[0];
  26. public static final Date[] DEFAULT_DATE_VALUES = new Date[0];
  27. public static final double DEFAULT_DOUBLE = 0.0;
  28. public static final double[] DEFAULT_DOUBLE_VALUES = new double[0];
  29. public static final float DEFAULT_FLOAT = 0;
  30. public static final float[] DEFAULT_FLOAT_VALUES = new float[0];
  31. public static final int DEFAULT_INTEGER = 0;
  32. public static final int[] DEFAULT_INTEGER_VALUES = new int[0];
  33. public static final long DEFAULT_LONG = 0;
  34. public static final long[] DEFAULT_LONG_VALUES = new long[0];
  35. public static final Number DEFAULT_NUMBER = 0;
  36. public static final Number DEFAULT_OBJECT = null;
  37. public static final short DEFAULT_SHORT = 0;
  38. public static final short[] DEFAULT_SHORT_VALUES = new short[0];
  39. public static final String DEFAULT_STRING = StringPool.BLANK;
  40. public static boolean get(Object value, boolean defaultValue) {
  41. if (value == null) {
  42. return defaultValue;
  43. }
  44. if (value instanceof String) {
  45. return get((String)value, defaultValue);
  46. }
  47. Class<?> clazz = value.getClass();
  48. if (clazz.isAssignableFrom(Boolean.class)) {
  49. return (Boolean)value;
  50. }
  51. return defaultValue;
  52. }
  53. public static Date get(
  54. Object value, DateFormat dateFormat, Date defaultValue) {
  55. if (value == null) {
  56. return defaultValue;
  57. }
  58. if (value instanceof String) {
  59. return get((String)value, dateFormat, defaultValue);
  60. }
  61. Class<?> clazz = value.getClass();
  62. if (clazz.isAssignableFrom(Date.class)) {
  63. return (Date)value;
  64. }
  65. return defaultValue;
  66. }
  67. public static double get(Object value, double defaultValue) {
  68. if (value == null) {
  69. return defaultValue;
  70. }
  71. if (value instanceof String) {
  72. return get((String)value, defaultValue);
  73. }
  74. Class<?> clazz = value.getClass();
  75. if (clazz.isAssignableFrom(Double.class)) {
  76. return (Double)value;
  77. }
  78. if (value instanceof Number) {
  79. Number number = (Number)value;
  80. return number.doubleValue();
  81. }
  82. return defaultValue;
  83. }
  84. public static float get(Object value, float defaultValue) {
  85. if (value == null) {
  86. return defaultValue;
  87. }
  88. if (value instanceof String) {
  89. return get((String)value, defaultValue);
  90. }
  91. Class<?> clazz = value.getClass();
  92. if (clazz.isAssignableFrom(Float.class)) {
  93. return (Float)value;
  94. }
  95. if (value instanceof Number) {
  96. Number number = (Number)value;
  97. return number.floatValue();
  98. }
  99. return defaultValue;
  100. }
  101. public static int get(Object value, int defaultValue) {
  102. if (value == null) {
  103. return defaultValue;
  104. }
  105. if (value instanceof String) {
  106. return get((String)value, defaultValue);
  107. }
  108. Class<?> clazz = value.getClass();
  109. if (clazz.isAssignableFrom(Integer.class)) {
  110. return (Integer)value;
  111. }
  112. if (value instanceof Number) {
  113. Number number = (Number)value;
  114. return number.intValue();
  115. }
  116. return defaultValue;
  117. }
  118. public static long get(Object value, long defaultValue) {
  119. if (value == null) {
  120. return defaultValue;
  121. }
  122. if (value instanceof String) {
  123. return get((String)value, defaultValue);
  124. }
  125. Class<?> clazz = value.getClass();
  126. if (clazz.isAssignableFrom(Long.class)) {
  127. return (Long)value;
  128. }
  129. if (value instanceof Number) {
  130. Number number = (Number)value;
  131. return number.longValue();
  132. }
  133. return defaultValue;
  134. }
  135. public static Number get(Object value, Number defaultValue) {
  136. if (value == null) {
  137. return defaultValue;
  138. }
  139. if (value instanceof String) {
  140. if (Validator.isNull(value)) {
  141. return defaultValue;
  142. }
  143. if (getFloat(value) == getInteger(value)) {
  144. return getInteger(value);
  145. }
  146. else {
  147. return getFloat(value);
  148. }
  149. }
  150. Class<?> clazz = value.getClass();
  151. if (clazz.isAssignableFrom(Byte.class)) {
  152. return (Byte)value;
  153. }
  154. else if (clazz.isAssignableFrom(Double.class)) {
  155. return (Double)value;
  156. }
  157. else if (clazz.isAssignableFrom(Float.class)) {
  158. return (Float)value;
  159. }
  160. else if (clazz.isAssignableFrom(Integer.class)) {
  161. return (Integer)value;
  162. }
  163. else if (clazz.isAssignableFrom(Long.class)) {
  164. return (Long)value;
  165. }
  166. else if (clazz.isAssignableFrom(Short.class)) {
  167. return (Short)value;
  168. }
  169. if (value instanceof Number) {
  170. return (Number)value;
  171. }
  172. return defaultValue;
  173. }
  174. public static short get(Object value, short defaultValue) {
  175. if (value == null) {
  176. return defaultValue;
  177. }
  178. if (value instanceof String) {
  179. return get((String)value, defaultValue);
  180. }
  181. Class<?> clazz = value.getClass();
  182. if (clazz.isAssignableFrom(Short.class)) {
  183. return (Short)value;
  184. }
  185. if (value instanceof Number) {
  186. Number number = (Number)value;
  187. return number.shortValue();
  188. }
  189. return defaultValue;
  190. }
  191. public static String get(Object value, String defaultValue) {
  192. if (value == null) {
  193. return defaultValue;
  194. }
  195. if (value instanceof String) {
  196. return get((String)value, defaultValue);
  197. }
  198. return defaultValue;
  199. }
  200. public static boolean get(String value, boolean defaultValue) {
  201. if (value == null) {
  202. return defaultValue;
  203. }
  204. try {
  205. value = value.trim().toLowerCase();
  206. if (value.equals(BOOLEANS[0]) || value.equals(BOOLEANS[1]) ||
  207. value.equals(BOOLEANS[2]) || value.equals(BOOLEANS[3]) ||
  208. value.equals(BOOLEANS[4])) {
  209. return true;
  210. }
  211. else {
  212. return false;
  213. }
  214. }
  215. catch (Exception e) {
  216. }
  217. return defaultValue;
  218. }
  219. public static Date get(
  220. String value, DateFormat dateFormat, Date defaultValue) {
  221. if (value == null) {
  222. return defaultValue;
  223. }
  224. try {
  225. Date date = dateFormat.parse(value.trim());
  226. if (date != null) {
  227. return date;
  228. }
  229. }
  230. catch (Exception e) {
  231. }
  232. return defaultValue;
  233. }
  234. public static double get(String value, double defaultValue) {
  235. if (value != null) {
  236. try {
  237. return Double.parseDouble(_trim(value));
  238. }
  239. catch (Exception e) {
  240. }
  241. }
  242. return defaultValue;
  243. }
  244. public static float get(String value, float defaultValue) {
  245. if (value == null) {
  246. return defaultValue;
  247. }
  248. try {
  249. return Float.parseFloat(_trim(value));
  250. }
  251. catch (Exception e) {
  252. }
  253. return defaultValue;
  254. }
  255. public static int get(String value, int defaultValue) {
  256. if (value == null) {
  257. return defaultValue;
  258. }
  259. return _parseInt(_trim(value), defaultValue);
  260. }
  261. public static long get(String value, long defaultValue) {
  262. if (value == null) {
  263. return defaultValue;
  264. }
  265. return _parseLong(_trim(value), defaultValue);
  266. }
  267. public static short get(String value, short defaultValue) {
  268. if (value == null) {
  269. return defaultValue;
  270. }
  271. return _parseShort(_trim(value), defaultValue);
  272. }
  273. public static String get(String value, String defaultValue) {
  274. if (value == null) {
  275. return defaultValue;
  276. }
  277. value = value.trim();
  278. if (value.indexOf(CharPool.RETURN) != -1) {
  279. value = StringUtil.replace(
  280. value, StringPool.RETURN_NEW_LINE, StringPool.NEW_LINE);
  281. }
  282. return value;
  283. }
  284. public static boolean getBoolean(Object value) {
  285. return getBoolean(value, DEFAULT_BOOLEAN);
  286. }
  287. public static boolean getBoolean(Object value, boolean defaultValue) {
  288. return get(value, defaultValue);
  289. }
  290. public static boolean getBoolean(String value) {
  291. return getBoolean(value, DEFAULT_BOOLEAN);
  292. }
  293. public static boolean getBoolean(String value, boolean defaultValue) {
  294. return get(value, defaultValue);
  295. }
  296. public static boolean[] getBooleanValues(Object value) {
  297. return getBooleanValues(value, DEFAULT_BOOLEAN_VALUES);
  298. }
  299. public static boolean[] getBooleanValues(
  300. Object value, boolean[] defaultValue) {
  301. Class<?> clazz = value.getClass();
  302. if (clazz.isArray()) {
  303. Class<?> componentType = clazz.getComponentType();
  304. if (componentType.isAssignableFrom(String.class)) {
  305. return getBooleanValues((String[])value, defaultValue);
  306. }
  307. else if (componentType.isAssignableFrom(Boolean.class)) {
  308. return (boolean[])value;
  309. }
  310. }
  311. return defaultValue;
  312. }
  313. public static boolean[] getBooleanValues(String[] values) {
  314. return getBooleanValues(values, DEFAULT_BOOLEAN_VALUES);
  315. }
  316. public static boolean[] getBooleanValues(
  317. String[] values, boolean[] defaultValue) {
  318. if (values == null) {
  319. return defaultValue;
  320. }
  321. boolean[] booleanValues = new boolean[values.length];
  322. for (int i = 0; i < values.length; i++) {
  323. booleanValues[i] = getBoolean(values[i]);
  324. }
  325. return booleanValues;
  326. }
  327. public static Date getDate(Object value, DateFormat dateFormat) {
  328. return getDate(value, dateFormat, new Date());
  329. }
  330. public static Date getDate(
  331. Object value, DateFormat dateFormat, Date defaultValue) {
  332. return get(value, dateFormat, defaultValue);
  333. }
  334. public static Date getDate(String value, DateFormat dateFormat) {
  335. return getDate(value, dateFormat, new Date());
  336. }
  337. public static Date getDate(
  338. String value, DateFormat dateFormat, Date defaultValue) {
  339. return get(value, dateFormat, defaultValue);
  340. }
  341. public static Date[] getDateValues(Object value, DateFormat dateFormat) {
  342. return getDateValues(value, dateFormat, DEFAULT_DATE_VALUES);
  343. }
  344. public static Date[] getDateValues(
  345. Object value, DateFormat dateFormat, Date[] defaultValue) {
  346. Class<?> clazz = value.getClass();
  347. if (clazz.isArray()) {
  348. Class<?> componentType = clazz.getComponentType();
  349. if (componentType.isAssignableFrom(String.class)) {
  350. return getDateValues((String[])value, dateFormat, defaultValue);
  351. }
  352. else if (componentType.isAssignableFrom(Date.class)) {
  353. return (Date[])value;
  354. }
  355. }
  356. return defaultValue;
  357. }
  358. public static Date[] getDateValues(String[] values, DateFormat dateFormat) {
  359. return getDateValues(values, dateFormat, DEFAULT_DATE_VALUES);
  360. }
  361. public static Date[] getDateValues(
  362. String[] values, DateFormat dateFormat, Date[] defaultValue) {
  363. if (values == null) {
  364. return defaultValue;
  365. }
  366. Date[] dateValues = new Date[values.length];
  367. for (int i = 0; i < values.length; i++) {
  368. dateValues[i] = getDate(values[i], dateFormat);
  369. }
  370. return dateValues;
  371. }
  372. public static double getDouble(Object value) {
  373. return getDouble(value, DEFAULT_DOUBLE);
  374. }
  375. public static double getDouble(Object value, double defaultValue) {
  376. return get(value, defaultValue);
  377. }
  378. public static double getDouble(String value) {
  379. return getDouble(value, DEFAULT_DOUBLE);
  380. }
  381. public static double getDouble(String value, double defaultValue) {
  382. return get(value, defaultValue);
  383. }
  384. public static double[] getDoubleValues(Object value) {
  385. return getDoubleValues(value, DEFAULT_DOUBLE_VALUES);
  386. }
  387. public static double[] getDoubleValues(
  388. Object value, double[] defaultValue) {
  389. Class<?> clazz = value.getClass();
  390. if (clazz.isArray()) {
  391. Class<?> componentType = clazz.getComponentType();
  392. if (componentType.isAssignableFrom(String.class)) {
  393. return getDoubleValues((String[])value, defaultValue);
  394. }
  395. else if (componentType.isAssignableFrom(Double.class)) {
  396. return (double[])value;
  397. }
  398. }
  399. return defaultValue;
  400. }
  401. public static double[] getDoubleValues(String[] values) {
  402. return getDoubleValues(values, DEFAULT_DOUBLE_VALUES);
  403. }
  404. public static double[] getDoubleValues(
  405. String[] values, double[] defaultValue) {
  406. if (values == null) {
  407. return defaultValue;
  408. }
  409. double[] doubleValues = new double[values.length];
  410. for (int i = 0; i < values.length; i++) {
  411. doubleValues[i] = getDouble(values[i]);
  412. }
  413. return doubleValues;
  414. }
  415. public static float getFloat(Object value) {
  416. return getFloat(value, DEFAULT_FLOAT);
  417. }
  418. public static float getFloat(Object value, float defaultValue) {
  419. return get(value, defaultValue);
  420. }
  421. public static float getFloat(String value) {
  422. return getFloat(value, DEFAULT_FLOAT);
  423. }
  424. public static float getFloat(String value, float defaultValue) {
  425. return get(value, defaultValue);
  426. }
  427. public static float[] getFloatValues(Object value) {
  428. return getFloatValues(value, DEFAULT_FLOAT_VALUES);
  429. }
  430. public static float[] getFloatValues(Object value, float[] defaultValue) {
  431. Class<?> clazz = value.getClass();
  432. if (clazz.isArray()) {
  433. Class<?> componentType = clazz.getComponentType();
  434. if (componentType.isAssignableFrom(String.class)) {
  435. return getFloatValues((String[])value, defaultValue);
  436. }
  437. else if (componentType.isAssignableFrom(Float.class)) {
  438. return (float[])value;
  439. }
  440. }
  441. return defaultValue;
  442. }
  443. public static float[] getFloatValues(String[] values) {
  444. return getFloatValues(values, DEFAULT_FLOAT_VALUES);
  445. }
  446. public static float[] getFloatValues(
  447. String[] values, float[] defaultValue) {
  448. if (values == null) {
  449. return defaultValue;
  450. }
  451. float[] floatValues = new float[values.length];
  452. for (int i = 0; i < values.length; i++) {
  453. floatValues[i] = getFloat(values[i]);
  454. }
  455. return floatValues;
  456. }
  457. public static int getInteger(Object value) {
  458. return getInteger(value, DEFAULT_INTEGER);
  459. }
  460. public static int getInteger(Object value, int defaultValue) {
  461. return get(value, defaultValue);
  462. }
  463. public static int getInteger(String value) {
  464. return getInteger(value, DEFAULT_INTEGER);
  465. }
  466. public static int getInteger(String value, int defaultValue) {
  467. return get(value, defaultValue);
  468. }
  469. public static int[] getIntegerValues(Object value) {
  470. return getIntegerValues(value, DEFAULT_INTEGER_VALUES);
  471. }
  472. public static int[] getIntegerValues(Object value, int[] defaultValue) {
  473. Class<?> clazz = value.getClass();
  474. if (clazz.isArray()) {
  475. Class<?> componentType = clazz.getComponentType();
  476. if (componentType.isAssignableFrom(String.class)) {
  477. return getIntegerValues((String[])value, defaultValue);
  478. }
  479. else if (componentType.isAssignableFrom(Integer.class)) {
  480. return (int[])value;
  481. }
  482. }
  483. return defaultValue;
  484. }
  485. public static int[] getIntegerValues(String[] values) {
  486. return getIntegerValues(values, DEFAULT_INTEGER_VALUES);
  487. }
  488. public static int[] getIntegerValues(String[] values, int[] defaultValue) {
  489. if (values == null) {
  490. return defaultValue;
  491. }
  492. int[] intValues = new int[values.length];
  493. for (int i = 0; i < values.length; i++) {
  494. intValues[i] = getInteger(values[i]);
  495. }
  496. return intValues;
  497. }
  498. public static long getLong(Object value) {
  499. return getLong(value, DEFAULT_LONG);
  500. }
  501. public static long getLong(Object value, long defaultValue) {
  502. return get(value, defaultValue);
  503. }
  504. public static long getLong(String value) {
  505. return getLong(value, DEFAULT_LONG);
  506. }
  507. public static long getLong(String value, long defaultValue) {
  508. return get(value, defaultValue);
  509. }
  510. public static long[] getLongValues(Object value) {
  511. return getLongValues(value, DEFAULT_LONG_VALUES);
  512. }
  513. public static long[] getLongValues(Object value, long[] defaultValue) {
  514. Class<?> clazz = value.getClass();
  515. if (clazz.isArray()) {
  516. Class<?> componentType = clazz.getComponentType();
  517. if (componentType.isAssignableFrom(String.class)) {
  518. return getLongValues((String[])value, defaultValue);
  519. }
  520. else if (componentType.isAssignableFrom(Long.class)) {
  521. return (long[])value;
  522. }
  523. else if (Number.class.isAssignableFrom(componentType)) {
  524. Number[] numbers = (Number[])value;
  525. long[] values = new long[numbers.length];
  526. for (int i = 0; i < values.length; i++) {
  527. values[i] = numbers[i].longValue();
  528. }
  529. return values;
  530. }
  531. }
  532. return defaultValue;
  533. }
  534. public static long[] getLongValues(String[] values) {
  535. return getLongValues(values, DEFAULT_LONG_VALUES);
  536. }
  537. public static long[] getLongValues(String[] values, long[] defaultValue) {
  538. if (values == null) {
  539. return defaultValue;
  540. }
  541. long[] longValues = new long[values.length];
  542. for (int i = 0; i < values.length; i++) {
  543. longValues[i] = getLong(values[i]);
  544. }
  545. return longValues;
  546. }
  547. public static Number getNumber(Object value) {
  548. return getNumber(value, DEFAULT_NUMBER);
  549. }
  550. public static Number getNumber(Object value, Number defaultValue) {
  551. return get(value, defaultValue);
  552. }
  553. public static Number getNumber(String value) {
  554. return getNumber(value, DEFAULT_NUMBER);
  555. }
  556. public static Number getNumber(String value, Number defaultValue) {
  557. return get(value, defaultValue);
  558. }
  559. public static Object getObject(Object value) {
  560. return getObject(value, DEFAULT_OBJECT);
  561. }
  562. public static Object getObject(Object value, Object defaultValue) {
  563. if (value == null) {
  564. return defaultValue;
  565. }
  566. return value;
  567. }
  568. public static short getShort(Object value) {
  569. return getShort(value, DEFAULT_SHORT);
  570. }
  571. public static short getShort(Object value, short defaultValue) {
  572. return get(value, defaultValue);
  573. }
  574. public static short getShort(String value) {
  575. return getShort(value, DEFAULT_SHORT);
  576. }
  577. public static short getShort(String value, short defaultValue) {
  578. return get(value, defaultValue);
  579. }
  580. public static short[] getShortValues(Object value) {
  581. return getShortValues(value, DEFAULT_SHORT_VALUES);
  582. }
  583. public static short[] getShortValues(Object value, short[] defaultValue) {
  584. Class<?> clazz = value.getClass();
  585. if (clazz.isArray()) {
  586. Class<?> componentType = clazz.getComponentType();
  587. if (componentType.isAssignableFrom(String.class)) {
  588. return getShortValues((String[])value, defaultValue);
  589. }
  590. else if (componentType.isAssignableFrom(Short.class)) {
  591. return (short[])value;
  592. }
  593. }
  594. return defaultValue;
  595. }
  596. public static short[] getShortValues(String[] values) {
  597. return getShortValues(values, DEFAULT_SHORT_VALUES);
  598. }
  599. public static short[] getShortValues(
  600. String[] values, short[] defaultValue) {
  601. if (values == null) {
  602. return defaultValue;
  603. }
  604. short[] shortValues = new short[values.length];
  605. for (int i = 0; i < values.length; i++) {
  606. shortValues[i] = getShort(values[i]);
  607. }
  608. return shortValues;
  609. }
  610. public static String getString(Object value) {
  611. return getString(value, DEFAULT_STRING);
  612. }
  613. public static String getString(Object value, String defaultValue) {
  614. return get(value, defaultValue);
  615. }
  616. public static String getString(String value) {
  617. return getString(value, DEFAULT_STRING);
  618. }
  619. public static String getString(String value, String defaultValue) {
  620. return get(value, defaultValue);
  621. }
  622. private static int _parseInt(String value, int defaultValue) {
  623. int length = value.length();
  624. if (length <= 0) {
  625. return defaultValue;
  626. }
  627. int pos = 0;
  628. int limit = -Integer.MAX_VALUE;
  629. boolean negative = false;
  630. char c = value.charAt(0);
  631. if (c < CharPool.NUMBER_0) {
  632. if (c == CharPool.MINUS) {
  633. limit = Integer.MIN_VALUE;
  634. negative = true;
  635. }
  636. else if (c != CharPool.PLUS) {
  637. return defaultValue;
  638. }
  639. if (length == 1) {
  640. return defaultValue;
  641. }
  642. pos++;
  643. }
  644. int smallLimit = limit / 10;
  645. int result = 0;
  646. while (pos < length) {
  647. if (result < smallLimit) {
  648. return defaultValue;
  649. }
  650. c = value.charAt(pos++);
  651. if ((c < CharPool.NUMBER_0) || (c > CharPool.NUMBER_9)) {
  652. return defaultValue;
  653. }
  654. int number = c - CharPool.NUMBER_0;
  655. result *= 10;
  656. if (result < (limit + number)) {
  657. return defaultValue;
  658. }
  659. result -= number;
  660. }
  661. if (negative) {
  662. return result;
  663. }
  664. else {
  665. return -result;
  666. }
  667. }
  668. private static long _parseLong(String value, long defaultValue) {
  669. if (_useJDKParseLong == null) {
  670. if (OSDetector.isAIX() && ServerDetector.isWebSphere() &&
  671. JavaProps.isIBM() && JavaProps.is64bit()) {
  672. _useJDKParseLong = Boolean.TRUE;
  673. }
  674. else {
  675. _useJDKParseLong = Boolean.FALSE;
  676. }
  677. }
  678. if (_useJDKParseLong) {
  679. try {
  680. return Long.parseLong(value);
  681. }
  682. catch (NumberFormatException nfe) {
  683. return defaultValue;
  684. }
  685. }
  686. int length = value.length();
  687. if (length <= 0) {
  688. return defaultValue;
  689. }
  690. int pos = 0;
  691. long limit = -Long.MAX_VALUE;
  692. boolean negative = false;
  693. char c = value.charAt(0);
  694. if (c < CharPool.NUMBER_0) {
  695. if (c == CharPool.MINUS) {
  696. limit = Long.MIN_VALUE;
  697. negative = true;
  698. }
  699. else if (c != CharPool.PLUS) {
  700. return defaultValue;
  701. }
  702. if (length == 1) {
  703. return defaultValue;
  704. }
  705. pos++;
  706. }
  707. long smallLimit = limit / 10;
  708. long result = 0;
  709. while (pos < length) {
  710. if (result < smallLimit) {
  711. return defaultValue;
  712. }
  713. c = value.charAt(pos++);
  714. if ((c < CharPool.NUMBER_0) || (c > CharPool.NUMBER_9)) {
  715. return defaultValue;
  716. }
  717. int number = c - CharPool.NUMBER_0;
  718. result *= 10;
  719. if (result < (limit + number)) {
  720. return defaultValue;
  721. }
  722. result -= number;
  723. }
  724. if (negative) {
  725. return result;
  726. }
  727. else {
  728. return -result;
  729. }
  730. }
  731. private static short _parseShort(String value, short defaultValue) {
  732. int i = _parseInt(value, defaultValue);
  733. if ((i < Short.MIN_VALUE) || (i > Short.MAX_VALUE)) {
  734. return defaultValue;
  735. }
  736. return (short)i;
  737. }
  738. private static String _trim(String value) {
  739. value = value.trim();
  740. int length = value.length();
  741. StringBuilder sb = new StringBuilder(length);
  742. for (int i = 0; i < length; i++) {
  743. char c = value.charAt(i);
  744. if ((Character.isDigit(c)) ||
  745. ((c == CharPool.DASH) && (i == 0)) ||
  746. (c == CharPool.PERIOD) || (c == CharPool.UPPER_CASE_E) ||
  747. (c == CharPool.LOWER_CASE_E)) {
  748. sb.append(c);
  749. }
  750. }
  751. return sb.toString();
  752. }
  753. private static Boolean _useJDKParseLong;
  754. }