/* * Copyright (c) 2017 OBiBa. All rights reserved. * * This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.obiba.magma.type; import java.util.Date; import org.obiba.magma.MagmaDate; import org.obiba.magma.Value; import org.obiba.magma.ValueConverter; import org.obiba.magma.ValueType; /** * Converts {@code datetime} to {@code date} and vice-versa */ public class DatetimeValueConverter implements ValueConverter { @Override public boolean converts(ValueType from, ValueType to) { return from.isDateTime() && to.isDateTime(); } @SuppressWarnings("ConstantConditions") @Override public Value convert(Value value, ValueType to) { if(value == null || value.isNull()) return to.nullValue(); if(to == DateType.get()) { Object dateObject = value.getValue(); Date date; if (dateObject instanceof MagmaDate) date = ((MagmaDate)dateObject).asDate(); else date = (Date) dateObject; return to.valueOf(date); } if(to == DateTimeType.get()) { MagmaDate date = (MagmaDate) value.getValue(); return to.valueOf(date.asCalendar()); } throw new IllegalArgumentException("unknown valueType '" + to.getName() + "'"); } }