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

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

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

import com.google.common.base.Strings;
import net.intelie.liverig.parser.ParseException;
import net.intelie.liverig.util.Escapes;
import net.intelie.liverig.witsml.WITSMLResult;
import net.intelie.liverig.witsml.objects.*;

import java.util.*;

public interface LogQuery extends RawDataQuery {
    LogData parse(WITSMLResult witsmlResult) throws ParseException;

    class Parser extends AbstractParser {
        private final LogData result;

        public Parser(LogData result) {
            this.result = result;
        }

        static AbstractLogHeader getHeader(Map object) {
            LogHeader header = new LogHeader();

            header.setUidWell(getString(object, "uidWell"));
            header.setUidWellbore(getString(object, "uidWellbore"));
            header.setUid(getString(object, "uid"));
            header.setNameWell(getString(object, "nameWell"));
            header.setNameWellbore(getString(object, "nameWellbore"));
            header.setName(getString(object, "name"));

            header.setDataRowCount(getInteger(object, "dataRowCount"));
            header.setIndexType(getString(object, "indexType"));

            LogIndex index = new LogIndex();
            index.setStartIndex(getDouble(getMapOrValue(object, "startIndex"), "value"));
            index.setStartIndexUom(getString(getMapOrValue(object, "startIndex"), "uom"));
            index.setEndIndex(getDouble(getMapOrValue(object, "endIndex"), "value"));
            index.setEndIndexUom(getString(getMapOrValue(object, "endIndex"), "uom"));
            index.setStepIncrement(getDouble(getMapOrValue(object, "stepIncrement"), "value"));
            index.setStepIncrementUom(getString(getMapOrValue(object, "stepIncrement"), "uom"));
            header.setIndex(index);

            LogDateTimeIndex dateTimeIndex = new LogDateTimeIndex();
            dateTimeIndex.setStepIncrement(getDouble(getMapOrValue(object, "stepIncrement"), "value"));
            dateTimeIndex.setStepIncrementUom(getString(getMapOrValue(object, "stepIncrement"), "uom"));
            dateTimeIndex.setStartDateTimeIndex(getString(object, "startDateTimeIndex"));
            dateTimeIndex.setEndDateTimeIndex(getString(object, "endDateTimeIndex"));
            header.setDateTimeIndex(dateTimeIndex);

            header.setIndexCurve(getString(getMapOrValue(object, "indexCurve"), "value"));
            header.setNullValue(getString(object, "nullValue"));

            List list = getListOrEmpty(object, "logCurveInfos");
            List> logCurveInfo = new ArrayList<>(list.size());
            for (Object entry : list)
                if (entry instanceof Map)
                    logCurveInfo.add((Map) entry);
            header.setLogCurveInfos(logCurveInfo);

            return header;
        }

        @Override
        protected void event(Map object, Map data) {
            if (!"log".equals(object.get("object")))
                return;

            LogHeader header = (LogHeader) result.getHeader();
            if (header == null) {
                header = (LogHeader) getHeader(object);
                result.setHeader(header);
            } else {
                if (!Objects.equals(header.getUidWell(), getString(object, "uidWell")))
                    return;
                if (!Objects.equals(header.getUidWellbore(), getString(object, "uidWellbore")))
                    return;
                if (!Objects.equals(header.getUid(), getString(object, "uid")))
                    return;
            }

            List> logData = result.getData();
            if (logData != null) {
                List mnemonics = new ArrayList<>(header.getLogCurveInfos().size());
                for (Map curve : header.getLogCurveInfos()) {
                    String mnemonic = getStringOrValue(curve, "mnemonic");
                    if (!Strings.isNullOrEmpty(mnemonic))
                        mnemonics.add(mnemonic);
                }

                Map map = new LinkedHashMap<>(mnemonics.size());
                for (String mnemonic : mnemonics)
                    map.put(mnemonic, getMapOrValue(data, Escapes.safeIdentifier(mnemonic)).get("value"));
                logData.add(map);
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy