/*
* (C) Copyright 2014 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Nicolas Chapurlat <nchapurlat@nuxeo.com>
*/
package org.nuxeo.ecm.core.schema.types.constraints;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
/**
* Some usefull utils for Constraint API.
*
* @since 7.1
*/
public final class ConstraintUtils {
public static final String DATE_FORMAT = "yyyy-MM-dd";
private ConstraintUtils() {
}
/**
* @return a date formatter xsd compliant : {@value #DATE_FORMAT}
* @since 7.1
*/
public static SimpleDateFormat formatter() {
return new SimpleDateFormat(DATE_FORMAT);
}
/**
* Supports {@link Date}, {@link Calendar}, {@link Number} and {@link String} formatted as YYYY-MM-DD
*
* @param object Any object
* @return a date represented as number of milliseconds since january 1 1970 if the object is supported, null
* otherwise.
* @since 7.1
*/
public static Long objectToTimeMillis(Object object) {
Long timeValue = null;
if (object == null) {
return null;
}
if (object instanceof Date) {
timeValue = ((Date) object).getTime();
} else if (object instanceof Calendar) {
timeValue = ((Calendar) object).getTimeInMillis();
} else if (object instanceof Number) {
timeValue = ((Number) object).longValue();
} else {
SimpleDateFormat dateParser = ConstraintUtils.formatter();
try {
timeValue = dateParser.parse(object.toString()).getTime();
} catch (ParseException e) {
return null;
}
}
return timeValue;
}
/**
* Supports any object which toString method return a numeric as String.
*
* @param object Any object
* @return a BigDecimal if the object represent a number, null otherwise.
* @since 7.1
*/
public static BigDecimal objectToBigDecimal(Object object) {
if (object == null) {
return null;
}
try {
return new BigDecimal(object.toString());
} catch (NumberFormatException nfe) {
return null;
}
}
/**
* Supports any object which toString method return a positive numeric as String.
*
* @param object Any object
* @return a positive long value (rounded if needed) if the object represent a positive numeric, null otherwise.
* @since 7.1
*/
public static Long objectToPostiveLong(Object object) {
if (object == null) {
return null;
}
try {
Long result = Long.parseLong(object.toString());
if (result >= 0) {
return result;
} else {
return null;
}
} catch (NumberFormatException nfe) {
return null;
}
}
@SuppressWarnings("unchecked")
public static <T extends Constraint> T getConstraint(Collection<Constraint> constraints, Class<T> constraintClass) {
for (Constraint constraint : constraints) {
if (constraint.getClass().equals(constraintClass)) {
return (T) constraint;
}
}
return null;
}
}