All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.intelie.liverig.witsml.query.Query Maven / Gradle / Ivy

The newest version!
package net.intelie.liverig.witsml.query;

import net.intelie.liverig.parser.MultiMapEventBuilder;
import net.intelie.liverig.parser.ParseException;
import net.intelie.liverig.witsml.WITSMLResult;
import net.intelie.liverig.witsml.objects.CurrencyValue;
import net.intelie.liverig.witsml.objects.MeasureValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collections;
import java.util.List;
import java.util.Map;

public interface Query {
    String type();
    String options();
    String query();
    Object parse(WITSMLResult witsmlResult) throws ParseException;

    abstract class AbstractParser implements MultiMapEventBuilder.EventOutput {
        @Override
        @SuppressWarnings("unchecked")
        public void event(Map data) {
            Object object = data.get("liverig__object");
            event(object instanceof Map ? (Map) object : data, data);
        }

        protected abstract void event(Map object, Map data);

        @Nullable
        static String getString(@NotNull Map map, @NotNull String key) {
            Object value = map.get(key);
            return value instanceof String ? (String) value : null;
        }

        @Nullable
        static Double getDouble(@NotNull Map map, @NotNull String key) {
            Object value = stringToDouble(map.get(key));
            return value instanceof Double ? (Double) value : value instanceof Number ? ((Number) value).doubleValue() : null;
        }

        @Nullable
        static Integer getInteger(@NotNull Map map, @NotNull String key) {
            Object value = stringToInteger(map.get(key));
            return value instanceof Integer ? (Integer) value : value instanceof Number ? ((Number) value).intValue() : null;
        }

        @Nullable
        private static Object stringToInteger(@Nullable Object value) {
            try {
                return value instanceof String ? Integer.valueOf((String) value) : value;
            } catch (NumberFormatException e) {
                return value;
            }
        }

        @Nullable
        private static Object stringToDouble(@Nullable Object value) {
            try {
                return value instanceof String ? Double.valueOf((String) value) : value;
            } catch (NumberFormatException e) {
                return value;
            }
        }


        @NotNull
        static List getListOrEmpty(@NotNull Map map, @NotNull String key) {
            Object value = map.get(key);
            return value instanceof List ? (List) value : Collections.emptyList();
        }

        @NotNull
        static Map getMapOrValue(@NotNull Map map, @NotNull String key) {
            Object value = map.get(key);
            return value instanceof Map ? (Map) value : value != null ? Collections.singletonMap("value", value) : Collections.emptyMap();
        }

        @Nullable
        static String getStringOrValue(@NotNull Map map, @NotNull String key) {
            return getString(getMapOrValue(map,key),"value");
        }

        @Nullable
        static MeasureValue getMeasureValue(@NotNull Map map, @NotNull String key) {
            Object value = map.get(key);
            if (!(value instanceof Map) || value == null) return null;
            Map mapValue = (Map) value;
            return new MeasureValue(getString(mapValue, "uom"), getString(mapValue, "datum"), getDouble(mapValue, "value"));
        }

        @Nullable
        static CurrencyValue getCurrencyValue(@NotNull Map map, @NotNull String key) {
            Object value = map.get(key);
            if (!(value instanceof Map) || value == null) return null;
            Map mapValue = (Map) value;
            return new CurrencyValue(getString(mapValue, "currency"), getDouble(mapValue, "value"));
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy