| /** |
| ******************************************************************************** |
| * Copyright (c) 2015-2019 Robert Bosch GmbH and others. |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Robert Bosch GmbH - initial API and implementation |
| ******************************************************************************** |
| */ |
| |
| package org.eclipse.app4mc.amalthea.model.util; |
| |
| import java.math.BigInteger; |
| import java.util.List; |
| |
| import org.eclipse.app4mc.amalthea.model.AmaltheaFactory; |
| import org.eclipse.app4mc.amalthea.model.AmaltheaServices; |
| import org.eclipse.app4mc.amalthea.model.Time; |
| import org.eclipse.app4mc.amalthea.model.TimeUnit; |
| |
| public class TimeUtil { |
| |
| // Suppress default constructor |
| private TimeUtil() { |
| throw new IllegalStateException("Utility class"); |
| } |
| |
| /** |
| * Returns a list with all possible Units |
| * @return TimeUnit.VALUES |
| */ |
| public static List<TimeUnit> getTimeUnitList() { |
| return AmaltheaServices.TIME_UNIT_LIST; |
| } |
| |
| /** |
| * Converts a Time object to the given TimeUnit. |
| * Note: when convert from small unit to bigger unit, the function will round the number e.g 5200Ps = 5Ns |
| */ |
| public static Time convertToTimeUnit(Time time, TimeUnit unit) { |
| if (time.getUnit() == unit) { |
| // Units are the same, no conversion |
| return time; |
| } |
| |
| if (time.getUnit() == TimeUnit._UNDEFINED_ || unit == TimeUnit._UNDEFINED_ ) { |
| return null; |
| } |
| |
| Time newTime = AmaltheaFactory.eINSTANCE.createTime(); |
| |
| List<TimeUnit> units = getTimeUnitList(); |
| int power = units.indexOf(time.getUnit()) - units.indexOf(unit); |
| // Get the difference from the source TimeUnit to the destination TimeUnit as a factor |
| double factor = Math.pow(1000, power); |
| |
| // Convert |
| if(factor >= 1.0) { |
| newTime.setValue(time.getValue().multiply(BigInteger.valueOf((long)factor))); |
| } else { |
| factor = 1 / factor; |
| newTime.setValue(time.getValue().divide(BigInteger.valueOf((long)factor))); |
| } |
| newTime.setUnit(unit); |
| |
| return newTime; |
| } |
| } |