ai.api.util.ParametersConverter Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of libai Show documentation
Show all versions of libai Show documentation
API.AI Java SDK allows using voice commands and integration with dialog scenarios defined for a particular agent in API.AI.
package ai.api.util;
/***********************************************************************************************************************
*
* API.AI Java SDK - client-side libraries for API.AI
* =================================================
*
* Copyright (C) 2016 by Speaktoit, Inc. (https://www.speaktoit.com)
* https://www.api.ai
*
***********************************************************************************************************************
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
***********************************************************************************************************************/
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
/**
* Helper to extract possible response parameters values
*/
public final class ParametersConverter {
public static final String PROTOCOL_DATE_FORMAT = "yyyy-MM-dd";
public static final String PROTOCOL_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
public static final String PROTOCOL_TIME_FORMAT = "HH:mm:ss";
private static final DateFormat DATE_FORMAT = new SimpleDateFormat(PROTOCOL_DATE_FORMAT, Locale.US);
private static final DateFormat DATE_TIME_FORMAT = new SimpleDateFormat(PROTOCOL_DATE_TIME_FORMAT, Locale.US);
private static final DateFormat TIME_FORMAT = new SimpleDateFormat(PROTOCOL_TIME_FORMAT, Locale.US);
/**
* Constructor is hidden to make the class a static used only
*/
private ParametersConverter() {
}
/**
* @param parameter Cannot be null
* @return Never null
* @throws ParseException
*/
public static Date parseDateTime(final String parameter) throws ParseException {
if (parameter == null) {
throw new IllegalArgumentException("Parameter must not be null");
}
return DATE_TIME_FORMAT.parse(parameter);
}
/**
* @param parameter Cannot be null
* @return Never null
* @throws ParseException
*/
public static Date parseDate(final String parameter) throws ParseException {
if (parameter == null) {
throw new IllegalArgumentException("Parameter must not be null");
}
return DATE_FORMAT.parse(parameter);
}
/**
* @param parameter Cannot be null
* @return Never null
* @throws ParseException
*/
public static Date parseTime(final String parameter) throws ParseException {
if (parameter == null) {
throw new IllegalArgumentException("Parameter must not be null");
}
final Calendar timeParameter = Calendar.getInstance();
timeParameter.setTime(TIME_FORMAT.parse(parameter));
final Calendar taskDueDate = Calendar.getInstance();
taskDueDate.set(Calendar.HOUR_OF_DAY, timeParameter.get(Calendar.HOUR_OF_DAY));
taskDueDate.set(Calendar.MINUTE, timeParameter.get(Calendar.MINUTE));
taskDueDate.set(Calendar.SECOND, timeParameter.get(Calendar.SECOND));
return taskDueDate.getTime();
}
/**
*
* @param parameter Cannot be null
* @return Never null
* @throws ParseException
*/
public static PartialDate parsePartialDate(final String parameter) throws ParseException {
if (parameter == null) {
throw new IllegalArgumentException("Parameter must not be empty");
}
if (parameter.length() == 0) {
throw new ParseException("Parameter must not be empty", 0);
}
if (parameter.contains("u")) {
// if date contains unknown parts
final String[] parts = parameter.split("-");
if (parts.length != 3) {
throw new ParseException(String.format("Partial date must have 3 parts, but have %s: %s", parts.length, parameter), 0);
}
// check each part for unknown
// each part must contains all digits or all 'u' without mixing
final Integer year = parsePart(parts[0]);
final Integer month = parsePart(parts[1]);
final Integer day = parsePart(parts[2]);
final PartialDate result = new PartialDate();
result.set(Calendar.YEAR, year);
result.set(Calendar.MONTH, month);
result.set(Calendar.DATE, day);
return result;
} else {
// parse as normal date
return new PartialDate(DATE_FORMAT.parse(parameter));
}
}
/**
*
* @param parameter Cannot be null
* @return Never null
* @throws NumberFormatException
*/
public static int parseInteger(final String parameter) throws NumberFormatException {
return Integer.parseInt(parameter);
}
/**
*
* @param parameter Cannot be null
* @return Never null
*/
public static float parseFloat(final String parameter) {
if (parameter == null) {
throw new IllegalArgumentException("Parameter must not be empty");
}
return Float.parseFloat(parameter);
}
/**
*
* @param part Cannot be null
* @return Never null
*/
private static Integer parsePart(final String part) {
if (part == null) {
throw new IllegalArgumentException("part");
}
if (part.indexOf('u') >= 0) {
return PartialDate.UNSPECIFIED_VALUE;
} else {
return Integer.parseInt(part);
}
}
}