📄 propertyfile.java
字号:
// type may be null because it wasn't set String oldValue = (String) props.get(key); try { if (type == Type.INTEGER_TYPE) { executeInteger(oldValue); } else if (type == Type.DATE_TYPE) { executeDate(oldValue); } else if (type == Type.STRING_TYPE) { executeString(oldValue); } else { throw new BuildException("Unknown operation type: " + type); } } catch (NullPointerException npe) { // Default to string type // which means do nothing npe.printStackTrace(); } if (newValue == null) { newValue = ""; } // Insert as a string by default props.put(key, newValue); } /** * Handle operations for type <code>date</code>. * * @param oldValue the current value read from the property file or * <code>null</code> if the <code>key</code> was * not contained in the property file. */ private void executeDate(String oldValue) throws BuildException { Calendar currentValue = Calendar.getInstance(); if (pattern == null) { pattern = "yyyy/MM/dd HH:mm"; } DateFormat fmt = new SimpleDateFormat(pattern); String currentStringValue = getCurrentValue(oldValue); if (currentStringValue == null) { currentStringValue = DEFAULT_DATE_VALUE; } if ("now".equals(currentStringValue)) { currentValue.setTime(new Date()); } else { try { currentValue.setTime(fmt.parse(currentStringValue)); } catch (ParseException pe) { // swallow } } if (operation != Operation.EQUALS_OPER) { int offset = 0; try { offset = Integer.parseInt(value); if (operation == Operation.DECREMENT_OPER) { offset = -1 * offset; } } catch (NumberFormatException e) { throw new BuildException("Value not an integer on " + key); } currentValue.add(field, offset); } newValue = fmt.format(currentValue.getTime()); } /** * Handle operations for type <code>int</code>. * * @param oldValue the current value read from the property file or * <code>null</code> if the <code>key</code> was * not contained in the property file. */ private void executeInteger(String oldValue) throws BuildException { int currentValue = DEFAULT_INT_VALUE; int newV = DEFAULT_INT_VALUE; DecimalFormat fmt = (pattern != null) ? new DecimalFormat(pattern) : new DecimalFormat(); try { String curval = getCurrentValue(oldValue); if (curval != null) { currentValue = fmt.parse(curval).intValue(); } else { currentValue = 0; } } catch (NumberFormatException nfe) { // swallow } catch (ParseException pe) { // swallow } if (operation == Operation.EQUALS_OPER) { newV = currentValue; } else { int operationValue = 1; if (value != null) { try { operationValue = fmt.parse(value).intValue(); } catch (NumberFormatException nfe) { // swallow } catch (ParseException pe) { // swallow } } if (operation == Operation.INCREMENT_OPER) { newV = currentValue + operationValue; } else if (operation == Operation.DECREMENT_OPER) { newV = currentValue - operationValue; } } this.newValue = fmt.format(newV); } /** * Handle operations for type <code>string</code>. * * @param oldValue the current value read from the property file or * <code>null</code> if the <code>key</code> was * not contained in the property file. */ private void executeString(String oldValue) throws BuildException { String newV = DEFAULT_STRING_VALUE; String currentValue = getCurrentValue(oldValue); if (currentValue == null) { currentValue = DEFAULT_STRING_VALUE; } if (operation == Operation.EQUALS_OPER) { newV = currentValue; } else if (operation == Operation.INCREMENT_OPER) { newV = currentValue + value; } this.newValue = newV; } /** * Check if parameter combinations can be supported * @todo make sure the 'unit' attribute is only specified on date * fields */ private void checkParameters() throws BuildException { if (type == Type.STRING_TYPE && operation == Operation.DECREMENT_OPER) { throw new BuildException("- is not supported for string " + "properties (key:" + key + ")"); } if (value == null && defaultValue == null) { throw new BuildException("\"value\" and/or \"default\" " + "attribute must be specified (key:" + key + ")"); } if (key == null) { throw new BuildException("key is mandatory"); } if (type == Type.STRING_TYPE && pattern != null) { throw new BuildException("pattern is not supported for string " + "properties (key:" + key + ")"); } } private String getCurrentValue(String oldValue) { String ret = null; if (operation == Operation.EQUALS_OPER) { // If only value is specified, the property is set to it // regardless of its previous value. if (value != null && defaultValue == null) { ret = value; } // If only default is specified and the property previously // existed in the property file, it is unchanged. if (value == null && defaultValue != null && oldValue != null) { ret = oldValue; } // If only default is specified and the property did not // exist in the property file, the property is set to default. if (value == null && defaultValue != null && oldValue == null) { ret = defaultValue; } // If value and default are both specified and the property // previously existed in the property file, the property // is set to value. if (value != null && defaultValue != null && oldValue != null) { ret = value; } // If value and default are both specified and the property // did not exist in the property file, the property is set // to default. if (value != null && defaultValue != null && oldValue == null) { ret = defaultValue; } } else { ret = (oldValue == null) ? defaultValue : oldValue; } return ret; } /** * Enumerated attribute with the values "+", "-", "=" */ public static class Operation extends EnumeratedAttribute { // Property type operations /** + */ public static final int INCREMENT_OPER = 0; /** - */ public static final int DECREMENT_OPER = 1; /** = */ public static final int EQUALS_OPER = 2; /** {@inheritDoc}. */ public String[] getValues() { return new String[] {"+", "-", "="}; } /** * Convert string to index. * @param oper the string to convert. * @return the index. */ public static int toOperation(String oper) { if ("+".equals(oper)) { return INCREMENT_OPER; } else if ("-".equals(oper)) { return DECREMENT_OPER; } return EQUALS_OPER; } } /** * Enumerated attribute with the values "int", "date" and "string". */ public static class Type extends EnumeratedAttribute { // Property types /** int */ public static final int INTEGER_TYPE = 0; /** date */ public static final int DATE_TYPE = 1; /** string */ public static final int STRING_TYPE = 2; /** {@inheritDoc} */ public String[] getValues() { return new String[] {"int", "date", "string"}; } /** * Convert string to index. * @param type the string to convert. * @return the index. */ public static int toType(String type) { if ("int".equals(type)) { return INTEGER_TYPE; } else if ("date".equals(type)) { return DATE_TYPE; } return STRING_TYPE; } } } /** * Borrowed from Tstamp * @todo share all this time stuff across many tasks as a datetime datatype * @since Ant 1.5 */ public static class Unit extends EnumeratedAttribute { private static final String MILLISECOND = "millisecond"; private static final String SECOND = "second"; private static final String MINUTE = "minute"; private static final String HOUR = "hour"; private static final String DAY = "day"; private static final String WEEK = "week"; private static final String MONTH = "month"; private static final String YEAR = "year"; private static final String[] UNITS = {MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR }; private Map calendarFields = new HashMap(); /** no arg constructor */ public Unit() { calendarFields.put(MILLISECOND, new Integer(Calendar.MILLISECOND)); calendarFields.put(SECOND, new Integer(Calendar.SECOND)); calendarFields.put(MINUTE, new Integer(Calendar.MINUTE)); calendarFields.put(HOUR, new Integer(Calendar.HOUR_OF_DAY)); calendarFields.put(DAY, new Integer(Calendar.DATE)); calendarFields.put(WEEK, new Integer(Calendar.WEEK_OF_YEAR)); calendarFields.put(MONTH, new Integer(Calendar.MONTH)); calendarFields.put(YEAR, new Integer(Calendar.YEAR)); } /** * Convert the value to a Calendar field index. * @return the calander value. */ public int getCalendarField() { String key = getValue().toLowerCase(); Integer i = (Integer) calendarFields.get(key); return i.intValue(); } /** {@inheritDoc}. */ public String[] getValues() { return UNITS; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -