1 /* 2 * Copyright 2020-2022 Foreseeti AB <https://foreseeti.com> 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.mal_lang.langspec.ttc; 18 19 import static java.util.Objects.requireNonNull; 20 21 import jakarta.json.JsonObject; 22 23 /** 24 * Immutable class representing a TTC expression in a MAL language. 25 * 26 * @since 1.0.0 27 */ 28 public abstract class TtcExpression { 29 /** 30 * Returns the mean TTC of this {@code TtcExpression} object. 31 * 32 * @return the mean TTC of this {@code TtcExpression} object 33 * @throws java.lang.UnsupportedOperationException if this {@code TtcExpression} does not support 34 * mean TTC 35 * @since 1.0.0 36 */ 37 public double getMeanTtc() { 38 throw new UnsupportedOperationException(); 39 } 40 41 /** 42 * Returns the mean probability of this {@code TtcExpression} object. 43 * 44 * @return the mean probability of this {@code TtcExpression} object 45 * @throws java.lang.UnsupportedOperationException if this {@code TtcExpression} does not support 46 * mean probability 47 * @since 1.0.0 48 */ 49 public double getMeanProbability() { 50 throw new UnsupportedOperationException(); 51 } 52 53 /** 54 * Returns the JSON representation of this {@code TtcExpression} object. 55 * 56 * @return the JSON representation of this {@code TtcExpression} object 57 * @since 1.0.0 58 */ 59 public abstract JsonObject toJson(); 60 61 /** 62 * Creates a new {@code TtcExpression} from a {@link jakarta.json.JsonObject}. 63 * 64 * @param jsonTtcExpression the {@link jakarta.json.JsonObject} 65 * @return a new {@code TtcExpression} 66 * @throws java.lang.NullPointerException if {@code jsonTtcExpression} is {@code null} 67 * @since 1.0.0 68 */ 69 public static TtcExpression fromJson(JsonObject jsonTtcExpression) { 70 requireNonNull(jsonTtcExpression); 71 switch (jsonTtcExpression.getString("type")) { 72 case "addition": 73 case "subtraction": 74 case "multiplication": 75 case "division": 76 case "exponentiation": 77 return TtcBinaryOperation.fromJson(jsonTtcExpression); 78 case "function": 79 return TtcFunction.fromJson(jsonTtcExpression); 80 case "number": 81 return TtcNumber.fromJson(jsonTtcExpression); 82 default: 83 throw new RuntimeException( 84 String.format( 85 "Invalid TTC expression type \"%s\"", jsonTtcExpression.getString("type"))); 86 } 87 } 88 }