1 /***********************************************************************
2  * Copyright (c) 2013-2025 General Atomics Integrated Intelligence, Inc.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Apache License, Version 2.0
5  * which accompanies this distribution and is available at
6  * https://www.apache.org/licenses/LICENSE-2.0
7  ***********************************************************************/
8 
9 package org.locationtech.geomesa.convert.text
10 
11 import com.typesafe.config.Config
12 import org.apache.commons.csv.CSVFormat
13 import org.apache.commons.io.IOUtils
14 import org.geotools.api.feature.simple.SimpleFeatureType
15 import org.locationtech.geomesa.convert.EvaluationContext
16 import org.locationtech.geomesa.convert.Modes.{ErrorMode, ParseMode}
17 import org.locationtech.geomesa.convert.text.DelimitedTextConverter._
18 import org.locationtech.geomesa.convert.text.DelimitedTextConverterFactory.{DelimitedTextConfigConvert, DelimitedTextOptionsConvert}
19 import org.locationtech.geomesa.convert2
20 import org.locationtech.geomesa.convert2.AbstractConverter.BasicField
21 import org.locationtech.geomesa.convert2.AbstractConverterFactory.{BasicFieldConvert, ConverterConfigConvert, ConverterOptionsConvert, PrimitiveConvert}
22 import org.locationtech.geomesa.convert2.TypeInference.{FunctionTransform, PathWithValues, TypeWithPath}
23 import org.locationtech.geomesa.convert2.transforms.Expression
24 import org.locationtech.geomesa.convert2.transforms.Expression.{LiteralNull, TryExpression}
25 import org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator
26 import org.locationtech.geomesa.convert2.{AbstractConverterFactory, TypeInference}
27 import org.locationtech.geomesa.utils.geotools.{ObjectType, SimpleFeatureTypes}
28 import org.locationtech.geomesa.utils.io.WithClose
29 import org.locationtech.geomesa.utils.text.TextTools
30 import pureconfig.error.ConfigReaderFailures
31 import pureconfig.{ConfigObjectCursor, ConfigReader}
32 
33 import java.io.{InputStream, StringReader}
34 import java.nio.charset.{Charset, StandardCharsets}
35 import scala.util.{Failure, Try}
36 
37 class DelimitedTextConverterFactory
38     extends AbstractConverterFactory[DelimitedTextConverter, DelimitedTextConfig, BasicField, DelimitedTextOptions](
39       DelimitedTextConverterFactory.TypeToProcess, DelimitedTextConfigConvert, BasicFieldConvert, DelimitedTextOptionsConvert) {
40 
41   import scala.collection.JavaConverters._
42 
43   override def infer(
44       is: InputStream,
45       sft: Option[SimpleFeatureType],
46       path: Option[String]): Option[(SimpleFeatureType, Config)] =
47     infer(is, sft, path.map(EvaluationContext.inputFileParam).getOrElse(Map.empty)).toOption
48 
49   override def infer(
50       is: InputStream,
51       sft: Option[SimpleFeatureType],
52       hints: Map[String, AnyRef]): Try[(SimpleFeatureType, Config)] = {
53     val tryLines = Try {
54       val sampleSize = AbstractConverterFactory.inferSampleSize
55       IOUtils.lineIterator(is, StandardCharsets.UTF_8.displayName).asScala.take(sampleSize).toSeq
56     }
57     tryLines.flatMap { lines =>
58       // if only a single line, assume that it isn't actually delimited text
59       if (lines.lengthCompare(2) < 0) { Failure(new RuntimeException("Not enough lines in input data")) } else {
60         val attempts = Iterator.single(magic(lines, sft)) ++
61             DelimitedTextConverter.inferences.iterator.map(infer(_, lines, sft))
62         convert2.multiTry(attempts, new RuntimeException("Could not parse input as delimited text"))
63       }
64     }
65   }
66 
67   private def infer(
68       format: CSVFormat,
69       lines: Seq[String],
70       sft: Option[SimpleFeatureType]): Try[(SimpleFeatureType, Config)] = {
71     // : Seq[List[String]]
72     val rows = lines.flatMap { line =>
73       if (TextTools.isWhitespace(line)) { None } else {
74         Try(format.parse(new StringReader(line)).iterator().next.iterator.asScala.toList).toOption
75       }
76     }
77     val counts = rows.map(_.length).distinct
78     // try to verify that we actually have a delimited file
79     // ensure that some lines parsed, that there were at most 3 different col counts, and that there were at least 2 cols
80     if (counts.isEmpty || counts.lengthCompare(3) > 0 || counts.max < 2) {
81       val f = if (format == Formats.Tabs) { "tsv" } else if (format == Formats.Quoted) { "quoted csv" }  else { "csv" }
82       return Failure(new RuntimeException(s"Not a valid delimited text file using format: $f"))
83     }
84     Try {
85       val names = sft match {
86         case Some(s) =>
87           s.getAttributeDescriptors.asScala.map(_.getLocalName)
88 
89         case None =>
90           val values = rows.head.map(v => PathWithValues("", Seq(v)))
91           if (TypeInference.infer(values, Left("")).types.forall(_.inferredType.typed == ObjectType.STRING)) {
92             // assume the first row is headers
93             rows.head
94           } else {
95             Seq.empty
96           }
97       }
98       val nameIter = names.iterator
99       val pathsAndValues = Seq.tabulate(counts.max) { col =>
100         val values = rows.drop(1).map(vals => if (vals.lengthCompare(col) > 0) { vals(col) } else { null })
101         PathWithValues(if (nameIter.hasNext) { nameIter.next } else { "" }, values)
102       }
103       val inferred =
104         TypeInference.infer(pathsAndValues,
105           sft.toRight(s"inferred-${if (format == Formats.Tabs) { "tsv" } else { "csv" }}"))
106       val converterConfig = DelimitedTextConfig(typeToProcess, None, formats.find(_._2 == format).get._1,
107         Some(Expression("md5(string2bytes($0))")), Map.empty, Map.empty)
108 
109       val fields = {
110         var i = 0 // 0 is the whole record
111         inferred.types.map { case TypeWithPath(_, inferredType) =>
112           i += 1
113           BasicField(inferredType.name, Some(Expression(inferredType.transform(i))))
114         }
115       }
116 
117       val options = DelimitedTextOptions(None, CharNotSpecified, CharNotSpecified, None,
118         SimpleFeatureValidator.default, Seq.empty, ParseMode.Default, ErrorMode(), StandardCharsets.UTF_8)
119 
120       val config = configConvert.to(converterConfig)
121           .withFallback(fieldConvert.to(fields.toSeq))
122           .withFallback(optsConvert.to(options))
123           .toConfig
124 
125       (inferred.sft, config)
126     }
127   }
128 
129   private def magic(lines: Seq[String], sft: Option[SimpleFeatureType]): Try[(SimpleFeatureType, Config)] = {
130     if (!lines.head.startsWith("id,")) { Failure(new RuntimeException("Not a geomesa delimited export")) } else {
131       Try {
132         val spec = WithClose(Formats.QuotedMinimal.parse(new StringReader(lines.head.drop(3)))) { result =>
133           result.iterator().next.asScala.mkString(",")
134         }
135         val schema = SimpleFeatureTypes.createType("", spec)
136 
137         val converterConfig =
138           DelimitedTextConfig(typeToProcess, None, formats.find(_._2 == Formats.QuotedMinimal).get._1,
139             Some(Expression("$1")), Map.empty, Map.empty)
140 
141         var i = 1 // 0 is the whole record, 1 is the id
142         val fields = schema.getAttributeDescriptors.asScala.map { d =>
143           val bindings = ObjectType.selectType(d)
144           val transform = bindings.head match {
145             case ObjectType.STRING   => TypeInference.IdentityTransform
146             case ObjectType.INT      => TypeInference.CastToInt
147             case ObjectType.LONG     => TypeInference.CastToLong
148             case ObjectType.FLOAT    => TypeInference.CastToFloat
149             case ObjectType.DOUBLE   => TypeInference.CastToDouble
150             case ObjectType.BOOLEAN  => TypeInference.CastToBoolean
151             case ObjectType.DATE     => FunctionTransform("datetime(", ")")
152             case ObjectType.UUID     => TypeInference.IdentityTransform
153             case ObjectType.LIST     => FunctionTransform(s"parseList('${bindings(1)}',", ")")
154             case ObjectType.MAP      => FunctionTransform(s"parseMap('${bindings(1)}->${bindings(2)}',", ")")
155             case ObjectType.BYTES    => TypeInference.IdentityTransform
156             case ObjectType.GEOMETRY =>
157               bindings.drop(1).headOption.getOrElse(ObjectType.GEOMETRY) match {
158                 case ObjectType.POINT               => FunctionTransform("point(", ")")
159                 case ObjectType.LINESTRING          => FunctionTransform("linestring(", ")")
160                 case ObjectType.POLYGON             => FunctionTransform("polygon(", ")")
161                 case ObjectType.MULTIPOINT          => FunctionTransform("multipoint(", ")")
162                 case ObjectType.MULTILINESTRING     => FunctionTransform("multilinestring(", ")")
163                 case ObjectType.MULTIPOLYGON        => FunctionTransform("multipolygon(", ")")
164                 case ObjectType.GEOMETRY_COLLECTION => FunctionTransform("geometrycollection(", ")")
165                 case _                              => FunctionTransform("geometry(", ")")
166               }
167 
168             case _ => throw new IllegalStateException(s"Unexpected binding: $bindings")
169           }
170           i += 1
171           BasicField(d.getLocalName, Some(TryExpression(Expression(transform.apply(i)), LiteralNull)))
172         }
173 
174         val options = DelimitedTextOptions(Some(1), CharNotSpecified, CharNotSpecified, None,
175           SimpleFeatureValidator.default, Seq.empty, ParseMode.Default, ErrorMode(), StandardCharsets.UTF_8)
176 
177         val config = configConvert.to(converterConfig)
178             .withFallback(fieldConvert.to(fields.toSeq))
179             .withFallback(optsConvert.to(options))
180             .toConfig
181 
182         (sft.getOrElse(schema), config)
183       }
184     }
185   }
186 }
187 
188 object DelimitedTextConverterFactory {
189 
190   val TypeToProcess = "delimited-text"
191 
192   object DelimitedTextConfigConvert extends ConverterConfigConvert[DelimitedTextConfig] {
193 
194     override protected def decodeConfig(
195         cur: ConfigObjectCursor,
196         `type`: String,
197         idField: Option[Expression],
198         caches: Map[String, Config],
199         userData: Map[String, Expression]): Either[ConfigReaderFailures, DelimitedTextConfig] = {
200       for {
201         name   <- converterName(cur).right
202         format <- cur.atKey("format").right.flatMap(_.asString).right
203       } yield {
204         DelimitedTextConfig(`type`, name, format, idField, caches, userData)
205       }
206     }
207 
208     override protected def encodeConfig(
209         config: DelimitedTextConfig,
210         base: java.util.Map[String, AnyRef]): Unit = {
211       base.put("format", config.format)
212     }
213   }
214 
215   object DelimitedTextOptionsConvert extends ConverterOptionsConvert[DelimitedTextOptions] {
216     override protected def decodeOptions(
217         cur: ConfigObjectCursor,
218         validators: Seq[String],
219         reporters: Seq[Config],
220         parseMode: ParseMode,
221         errorMode: ErrorMode,
222         encoding: Charset): Either[ConfigReaderFailures, DelimitedTextOptions] = {
223       def option[T](key: String, reader: ConfigReader[T]): Either[ConfigReaderFailures, Option[T]] = {
224         val value = cur.atKeyOrUndefined(key)
225         if (value.isUndefined) { Right(None) } else { reader.from(value).right.map(Option.apply) }
226       }
227 
228       def optionalChar(key: String): Either[ConfigReaderFailures, OptionalChar] = {
229         val value = cur.atKeyOrUndefined(key)
230         if (value.isUndefined) { Right(CharNotSpecified) } else {
231           PrimitiveConvert.charConfigReader.from(value) match {
232             case Right(c) => Right(CharEnabled(c))
233             case Left(failures) =>
234               if (PrimitiveConvert.stringConfigReader.from(value).right.exists(_.isEmpty)) {
235                 Right(CharDisabled)
236               } else {
237                 Left(failures)
238               }
239           }
240         }
241       }
242 
243       for {
244         skipLines <- option("skip-lines", PrimitiveConvert.intConfigReader).right
245         quote     <- optionalChar("quote").right
246         escape    <- optionalChar("escape").right
247         delimiter <- option("delimiter", PrimitiveConvert.charConfigReader).right
248       } yield {
249         DelimitedTextOptions(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)
250       }
251     }
252 
253     override protected def encodeOptions(options: DelimitedTextOptions, base: java.util.Map[String, AnyRef]): Unit = {
254       options.skipLines.foreach(o => base.put("skip-lines", Int.box(o)))
255       options.quote.foreach(o => base.put("quote", Char.box(o)))
256       options.escape.foreach(o => base.put("escape", Char.box(o)))
257       options.delimiter.foreach(o => base.put("delimiter", Char.box(o)))
258     }
259   }
260 }
Line Stmt Id Pos Tree Symbol Tests Code
47 206 2612 - 2644 Apply org.locationtech.geomesa.convert.EvaluationContext.inputFileParam org.locationtech.geomesa.convert.EvaluationContext.inputFileParam(file)
47 207 2656 - 2665 TypeApply scala.collection.immutable.Map.empty scala.Predef.Map.empty[String, Nothing]
47 208 2603 - 2666 Apply scala.Option.getOrElse path.map[Map[String,AnyRef]]({ ((file: String) => org.locationtech.geomesa.convert.EvaluationContext.inputFileParam(file)) }).getOrElse[Map[String,AnyRef]](scala.Predef.Map.empty[String, Nothing])
47 209 2588 - 2676 Select scala.util.Try.toOption DelimitedTextConverterFactory.this.infer(is, sft, path.map[Map[String,AnyRef]]({ ((file: String) => org.locationtech.geomesa.convert.EvaluationContext.inputFileParam(file)) }).getOrElse[Map[String,AnyRef]](scala.Predef.Map.empty[String, Nothing])).toOption
53 214 2852 - 3025 Apply scala.util.Try.apply scala.util.Try.apply[Seq[String]]({ val sampleSize: Int = org.locationtech.geomesa.convert2.AbstractConverterFactory.inferSampleSize; scala.collection.JavaConverters.asScalaIteratorConverter[String](org.apache.commons.io.IOUtils.lineIterator(is, java.nio.charset.StandardCharsets.UTF_8.displayName())).asScala.take(sampleSize).toSeq })
54 210 2881 - 2921 Select org.locationtech.geomesa.convert2.AbstractConverterFactory.inferSampleSize org.locationtech.geomesa.convert2.AbstractConverterFactory.inferSampleSize
55 211 2953 - 2987 Apply java.nio.charset.Charset.displayName java.nio.charset.StandardCharsets.UTF_8.displayName()
55 212 2928 - 2988 Apply org.apache.commons.io.IOUtils.lineIterator org.apache.commons.io.IOUtils.lineIterator(is, java.nio.charset.StandardCharsets.UTF_8.displayName())
55 213 2928 - 3019 Select scala.collection.TraversableOnce.toSeq scala.collection.JavaConverters.asScalaIteratorConverter[String](org.apache.commons.io.IOUtils.lineIterator(is, java.nio.charset.StandardCharsets.UTF_8.displayName())).asScala.take(sampleSize).toSeq
57 226 3030 - 3504 Apply scala.util.Try.flatMap tryLines.flatMap[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)](((lines: Seq[String]) => if (lines.lengthCompare(2).<(0)) scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException("Not enough lines in input data")) else { val attempts: Iterator[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]] = scala.`package`.Iterator.single[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverterFactory.this.magic(lines, sft)).++[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverter.inferences.iterator.map[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](((x$1: org.apache.commons.csv.CSVFormat) => DelimitedTextConverterFactory.this.infer(x$1, lines, sft)))); org.locationtech.geomesa.convert2.`package`.multiTry[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)](attempts, new scala.`package`.RuntimeException("Could not parse input as delimited text")) }))
59 215 3145 - 3171 Apply scala.Int.< lines.lengthCompare(2).<(0)
59 216 3183 - 3237 Apply java.lang.RuntimeException.<init> new scala.`package`.RuntimeException("Not enough lines in input data")
59 217 3175 - 3238 Apply scala.util.Failure.apply scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException("Not enough lines in input data"))
59 218 3175 - 3238 Block scala.util.Failure.apply scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException("Not enough lines in input data"))
59 225 3246 - 3498 Block <nosymbol> { val attempts: Iterator[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]] = scala.`package`.Iterator.single[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverterFactory.this.magic(lines, sft)).++[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverter.inferences.iterator.map[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](((x$1: org.apache.commons.csv.CSVFormat) => DelimitedTextConverterFactory.this.infer(x$1, lines, sft)))); org.locationtech.geomesa.convert2.`package`.multiTry[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)](attempts, new scala.`package`.RuntimeException("Could not parse input as delimited text")) }
60 219 3287 - 3304 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverterFactory.magic DelimitedTextConverterFactory.this.magic(lines, sft)
60 222 3271 - 3389 Apply scala.collection.Iterator.++ scala.`package`.Iterator.single[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverterFactory.this.magic(lines, sft)).++[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](DelimitedTextConverter.inferences.iterator.map[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](((x$1: org.apache.commons.csv.CSVFormat) => DelimitedTextConverterFactory.this.infer(x$1, lines, sft))))
61 220 3368 - 3388 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverterFactory.infer DelimitedTextConverterFactory.this.infer(x$1, lines, sft)
61 221 3321 - 3389 Apply scala.collection.Iterator.map DelimitedTextConverter.inferences.iterator.map[scala.util.Try[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]](((x$1: org.apache.commons.csv.CSVFormat) => DelimitedTextConverterFactory.this.infer(x$1, lines, sft)))
62 223 3426 - 3489 Apply java.lang.RuntimeException.<init> new scala.`package`.RuntimeException("Could not parse input as delimited text")
62 224 3398 - 3490 Apply org.locationtech.geomesa.convert2.multiTry org.locationtech.geomesa.convert2.`package`.multiTry[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)](attempts, new scala.`package`.RuntimeException("Could not parse input as delimited text"))
72 236 3714 - 3714 TypeApply scala.collection.Seq.canBuildFrom collection.this.Seq.canBuildFrom[List[String]]
72 237 3700 - 3892 ApplyToImplicitArgs scala.collection.TraversableLike.flatMap lines.flatMap[List[String], Seq[List[String]]](((line: String) => if (org.locationtech.geomesa.utils.text.TextTools.isWhitespace(line)) scala.this.Option.option2Iterable[Nothing](scala.None) else scala.this.Option.option2Iterable[List[String]](scala.util.Try.apply[List[String]](scala.collection.JavaConverters.asScalaIteratorConverter[String](format.parse(new java.io.StringReader(line)).iterator().next().iterator()).asScala.toList).toOption)))(collection.this.Seq.canBuildFrom[List[String]])
73 227 3734 - 3762 Apply org.locationtech.geomesa.utils.text.TextTools.isWhitespace org.locationtech.geomesa.utils.text.TextTools.isWhitespace(line)
73 228 3766 - 3770 Select scala.None scala.None
73 229 3766 - 3770 ApplyImplicitView scala.Option.option2Iterable scala.this.Option.option2Iterable[Nothing](scala.None)
73 230 3766 - 3770 Block scala.Option.option2Iterable scala.this.Option.option2Iterable[Nothing](scala.None)
74 231 3792 - 3853 Apply org.apache.commons.csv.CSVRecord.iterator format.parse(new java.io.StringReader(line)).iterator().next().iterator()
74 232 3792 - 3868 Select scala.collection.TraversableOnce.toList scala.collection.JavaConverters.asScalaIteratorConverter[String](format.parse(new java.io.StringReader(line)).iterator().next().iterator()).asScala.toList
74 233 3788 - 3878 Select scala.util.Try.toOption scala.util.Try.apply[List[String]](scala.collection.JavaConverters.asScalaIteratorConverter[String](format.parse(new java.io.StringReader(line)).iterator().next().iterator()).asScala.toList).toOption
74 234 3788 - 3878 ApplyImplicitView scala.Option.option2Iterable scala.this.Option.option2Iterable[List[String]](scala.util.Try.apply[List[String]](scala.collection.JavaConverters.asScalaIteratorConverter[String](format.parse(new java.io.StringReader(line)).iterator().next().iterator()).asScala.toList).toOption)
74 235 3788 - 3878 Block scala.Option.option2Iterable scala.this.Option.option2Iterable[List[String]](scala.util.Try.apply[List[String]](scala.collection.JavaConverters.asScalaIteratorConverter[String](format.parse(new java.io.StringReader(line)).iterator().next().iterator()).asScala.toList).toOption)
77 238 3919 - 3927 Select scala.collection.LinearSeqOptimized.length x$2.length
77 239 3918 - 3918 TypeApply scala.collection.Seq.canBuildFrom collection.this.Seq.canBuildFrom[Int]
77 240 3910 - 3937 Select scala.collection.SeqLike.distinct rows.map[Int, Seq[Int]](((x$2: List[String]) => x$2.length))(collection.this.Seq.canBuildFrom[Int]).distinct
80 241 4146 - 4173 Apply scala.Int.> counts.lengthCompare(3).>(0)
80 242 4177 - 4191 Apply scala.Int.< counts.max[Int](math.this.Ordering.Int).<(2)
80 243 4128 - 4191 Apply scala.Boolean.|| counts.isEmpty.||(counts.lengthCompare(3).>(0)).||(counts.max[Int](math.this.Ordering.Int).<(2))
80 258 4193 - 4416 Block <nosymbol> { val f: String = if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)) "tsv" else if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Quoted)) "quoted csv" else "csv"; return scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException(scala.StringContext.apply("Not a valid delimited text file using format: ", "").s(f))) }
80 259 4124 - 4124 Literal <nosymbol> ()
80 260 4124 - 4124 Block <nosymbol> ()
81 244 4223 - 4235 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs
81 245 4213 - 4235 Apply java.lang.Object.== format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)
81 246 4239 - 4244 Literal <nosymbol> "tsv"
81 247 4239 - 4244 Block <nosymbol> "tsv"
81 248 4266 - 4280 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Quoted org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Quoted
81 249 4256 - 4280 Apply java.lang.Object.== format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Quoted)
81 250 4284 - 4296 Literal <nosymbol> "quoted csv"
81 251 4284 - 4296 Block <nosymbol> "quoted csv"
81 252 4307 - 4312 Literal <nosymbol> "csv"
81 253 4307 - 4312 Block <nosymbol> "csv"
81 254 4252 - 4314 If <nosymbol> if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Quoted)) "quoted csv" else "csv"
82 255 4357 - 4408 Apply scala.StringContext.s scala.StringContext.apply("Not a valid delimited text file using format: ", "").s(f)
82 256 4336 - 4409 Apply java.lang.RuntimeException.<init> new scala.`package`.RuntimeException(scala.StringContext.apply("Not a valid delimited text file using format: ", "").s(f))
82 257 4328 - 4410 Apply scala.util.Failure.apply scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException(scala.StringContext.apply("Not a valid delimited text file using format: ", "").s(f)))
84 341 4421 - 6173 Apply scala.util.Try.apply scala.util.Try.apply[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]({ val names: Seq[String] = sft match { case (value: org.geotools.api.feature.simple.SimpleFeatureType)Some[org.geotools.api.feature.simple.SimpleFeatureType]((s @ _)) => scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](s.getAttributeDescriptors()).asScala.map[String, scala.collection.mutable.Buffer[String]](((x$3: org.geotools.api.feature.type.AttributeDescriptor) => x$3.getLocalName()))(mutable.this.Buffer.canBuildFrom[String]) case scala.None => { val values: List[org.locationtech.geomesa.convert2.TypeInference.PathWithValues] = rows.head.map[org.locationtech.geomesa.convert2.TypeInference.PathWithValues, List[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]](((v: String) => org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply("", scala.collection.Seq.apply[String](v))))(immutable.this.List.canBuildFrom[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]); if (org.locationtech.geomesa.convert2.TypeInference.infer(values, scala.`package`.Left.apply[String, Nothing](""), org.locationtech.geomesa.convert2.TypeInference.infer$default$3, org.locationtech.geomesa.convert2.TypeInference.infer$default$4).types.forall(((x$4: org.locationtech.geomesa.convert2.TypeInference.TypeWithPath) => x$4.inferredType.typed.==(org.locationtech.geomesa.utils.geotools.ObjectType.STRING)))) rows.head else scala.collection.Seq.empty[Nothing] } }; val nameIter: Iterator[String] = names.iterator; val pathsAndValues: Seq[org.locationtech.geomesa.convert2.TypeInference.PathWithValues] = scala.collection.Seq.tabulate[org.locationtech.geomesa.convert2.TypeInference.PathWithValues](counts.max[Int](math.this.Ordering.Int))(((col: Int) => { val values: Seq[String] = rows.drop(1).map[String, Seq[String]](((vals: List[String]) => if (vals.lengthCompare(col).>(0)) vals.apply(col) else null))(collection.this.Seq.canBuildFrom[String]); org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply(if (nameIter.hasNext) nameIter.next() else "", values) })); val inferred: org.locationtech.geomesa.convert2.TypeInference.InferredTypesWithPaths = org.locationtech.geomesa.convert2.TypeInference.infer(pathsAndValues, sft.toRight[String](scala.StringContext.apply("inferred-", "").s(if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)) "tsv" else "csv")), org.locationtech.geomesa.convert2.TypeInference.infer$default$3, org.locationtech.geomesa.convert2.TypeInference.infer$default$4); val converterConfig: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(DelimitedTextConverterFactory.this.typeToProcess, scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$5: (String, org.apache.commons.csv.CSVFormat)) => x$5._2.==(format))).get._1, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("md5(string2bytes($0))")), scala.Predef.Map.empty[String, Nothing], scala.Predef.Map.empty[String, Nothing]); val fields: Seq[org.locationtech.geomesa.convert2.AbstractConverter.BasicField] = { var i: Int = 0; inferred.types.map[org.locationtech.geomesa.convert2.AbstractConverter.BasicField, Seq[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]](((x0$1: org.locationtech.geomesa.convert2.TypeInference.TypeWithPath) => x0$1 match { case (path: String, inferredType: org.locationtech.geomesa.convert2.TypeInference.InferredType)org.locationtech.geomesa.convert2.TypeInference.TypeWithPath(_, (inferredType @ _)) => { i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(inferredType.name, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i)))) } }))(collection.this.Seq.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]) }; val options: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, scala.None, org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default, scala.collection.Seq.empty[Nothing], org.locationtech.geomesa.convert.Modes.ParseMode.Default, org.locationtech.geomesa.convert.Modes.ErrorMode.apply(), java.nio.charset.StandardCharsets.UTF_8); val config: com.typesafe.config.Config = DelimitedTextConverterFactory.this.configConvert.to(converterConfig).withFallback(DelimitedTextConverterFactory.this.fieldConvert.to(fields.toSeq)).withFallback(DelimitedTextConverterFactory.this.optsConvert.to(options)).toConfig(); scala.Tuple2.apply[org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config](inferred.sft, config) })
87 261 4491 - 4516 Apply org.geotools.api.feature.simple.SimpleFeatureType.getAttributeDescriptors s.getAttributeDescriptors()
87 262 4529 - 4543 Apply org.geotools.api.feature.type.AttributeDescriptor.getLocalName x$3.getLocalName()
87 263 4528 - 4528 TypeApply scala.collection.mutable.Buffer.canBuildFrom mutable.this.Buffer.canBuildFrom[String]
87 264 4491 - 4544 ApplyToImplicitArgs scala.collection.TraversableLike.map scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](s.getAttributeDescriptors()).asScala.map[String, scala.collection.mutable.Buffer[String]](((x$3: org.geotools.api.feature.type.AttributeDescriptor) => x$3.getLocalName()))(mutable.this.Buffer.canBuildFrom[String])
87 265 4491 - 4544 Block scala.collection.TraversableLike.map scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](s.getAttributeDescriptors()).asScala.map[String, scala.collection.mutable.Buffer[String]](((x$3: org.geotools.api.feature.type.AttributeDescriptor) => x$3.getLocalName()))(mutable.this.Buffer.canBuildFrom[String])
89 279 4564 - 4869 Block <nosymbol> { val values: List[org.locationtech.geomesa.convert2.TypeInference.PathWithValues] = rows.head.map[org.locationtech.geomesa.convert2.TypeInference.PathWithValues, List[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]](((v: String) => org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply("", scala.collection.Seq.apply[String](v))))(immutable.this.List.canBuildFrom[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]); if (org.locationtech.geomesa.convert2.TypeInference.infer(values, scala.`package`.Left.apply[String, Nothing](""), org.locationtech.geomesa.convert2.TypeInference.infer$default$3, org.locationtech.geomesa.convert2.TypeInference.infer$default$4).types.forall(((x$4: org.locationtech.geomesa.convert2.TypeInference.TypeWithPath) => x$4.inferredType.typed.==(org.locationtech.geomesa.utils.geotools.ObjectType.STRING)))) rows.head else scala.collection.Seq.empty[Nothing] }
90 266 4624 - 4626 Literal <nosymbol> ""
90 267 4628 - 4634 Apply scala.collection.generic.GenericCompanion.apply scala.collection.Seq.apply[String](v)
90 268 4609 - 4635 Apply org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply("", scala.collection.Seq.apply[String](v))
90 269 4603 - 4603 TypeApply scala.collection.immutable.List.canBuildFrom immutable.this.List.canBuildFrom[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]
90 270 4590 - 4636 ApplyToImplicitArgs scala.collection.immutable.List.map rows.head.map[org.locationtech.geomesa.convert2.TypeInference.PathWithValues, List[org.locationtech.geomesa.convert2.TypeInference.PathWithValues]](((v: String) => org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply("", scala.collection.Seq.apply[String](v))))(immutable.this.List.canBuildFrom[org.locationtech.geomesa.convert2.TypeInference.PathWithValues])
91 271 4679 - 4687 Apply scala.util.Left.apply scala.`package`.Left.apply[String, Nothing]("")
91 272 4726 - 4743 Select org.locationtech.geomesa.utils.geotools.ObjectType.STRING org.locationtech.geomesa.utils.geotools.ObjectType.STRING
91 273 4702 - 4743 Apply java.lang.Object.== x$4.inferredType.typed.==(org.locationtech.geomesa.utils.geotools.ObjectType.STRING)
91 274 4651 - 4744 Apply scala.collection.IterableLike.forall org.locationtech.geomesa.convert2.TypeInference.infer(values, scala.`package`.Left.apply[String, Nothing](""), org.locationtech.geomesa.convert2.TypeInference.infer$default$3, org.locationtech.geomesa.convert2.TypeInference.infer$default$4).types.forall(((x$4: org.locationtech.geomesa.convert2.TypeInference.TypeWithPath) => x$4.inferredType.typed.==(org.locationtech.geomesa.utils.geotools.ObjectType.STRING)))
93 275 4807 - 4816 Select scala.collection.IterableLike.head rows.head
93 276 4807 - 4816 Block scala.collection.IterableLike.head rows.head
95 277 4848 - 4857 TypeApply scala.collection.generic.GenericCompanion.empty scala.collection.Seq.empty[Nothing]
95 278 4848 - 4857 Block scala.collection.generic.GenericCompanion.empty scala.collection.Seq.empty[Nothing]
98 280 4899 - 4913 Select scala.collection.IterableLike.iterator names.iterator
99 281 4961 - 4961 Select scala.math.Ordering.Int math.this.Ordering.Int
99 282 4954 - 4964 ApplyToImplicitArgs scala.collection.TraversableOnce.max counts.max[Int](math.this.Ordering.Int)
99 297 4941 - 5174 Apply scala.collection.generic.GenTraversableFactory.tabulate scala.collection.Seq.tabulate[org.locationtech.geomesa.convert2.TypeInference.PathWithValues](counts.max[Int](math.this.Ordering.Int))(((col: Int) => { val values: Seq[String] = rows.drop(1).map[String, Seq[String]](((vals: List[String]) => if (vals.lengthCompare(col).>(0)) vals.apply(col) else null))(collection.this.Seq.canBuildFrom[String]); org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply(if (nameIter.hasNext) nameIter.next() else "", values) }))
100 283 5006 - 5007 Literal <nosymbol> 1
100 284 5025 - 5052 Apply scala.Int.> vals.lengthCompare(col).>(0)
100 285 5056 - 5065 Apply scala.collection.LinearSeqOptimized.apply vals.apply(col)
100 286 5056 - 5065 Block scala.collection.LinearSeqOptimized.apply vals.apply(col)
100 287 5075 - 5079 Literal <nosymbol> null
100 288 5075 - 5079 Block <nosymbol> null
100 289 5012 - 5012 TypeApply scala.collection.Seq.canBuildFrom collection.this.Seq.canBuildFrom[String]
100 290 4996 - 5082 ApplyToImplicitArgs scala.collection.TraversableLike.map rows.drop(1).map[String, Seq[String]](((vals: List[String]) => if (vals.lengthCompare(col).>(0)) vals.apply(col) else null))(collection.this.Seq.canBuildFrom[String])
101 291 5110 - 5126 Select scala.collection.Iterator.hasNext nameIter.hasNext
101 292 5130 - 5143 Apply scala.collection.Iterator.next nameIter.next()
101 293 5130 - 5143 Block scala.collection.Iterator.next nameIter.next()
101 294 5153 - 5155 Literal <nosymbol> ""
101 295 5153 - 5155 Block <nosymbol> ""
101 296 5091 - 5166 Apply org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply org.locationtech.geomesa.convert2.TypeInference.PathWithValues.apply(if (nameIter.hasNext) nameIter.next() else "", values)
104 308 5204 - 5331 Apply org.locationtech.geomesa.convert2.TypeInference.infer org.locationtech.geomesa.convert2.TypeInference.infer(pathsAndValues, sft.toRight[String](scala.StringContext.apply("inferred-", "").s(if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)) "tsv" else "csv")), org.locationtech.geomesa.convert2.TypeInference.infer$default$3, org.locationtech.geomesa.convert2.TypeInference.infer$default$4)
105 298 5264 - 5274 Literal <nosymbol> "inferred-"
105 299 5328 - 5329 Literal <nosymbol> ""
105 300 5289 - 5301 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs
105 301 5279 - 5301 Apply java.lang.Object.== format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)
105 302 5305 - 5310 Literal <nosymbol> "tsv"
105 303 5305 - 5310 Block <nosymbol> "tsv"
105 304 5320 - 5325 Literal <nosymbol> "csv"
105 305 5320 - 5325 Block <nosymbol> "csv"
105 306 5262 - 5329 Apply scala.StringContext.s scala.StringContext.apply("inferred-", "").s(if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)) "tsv" else "csv")
105 307 5250 - 5330 Apply scala.Option.toRight sft.toRight[String](scala.StringContext.apply("inferred-", "").s(if (format.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.Tabs)) "tsv" else "csv"))
106 309 5380 - 5393 Select org.locationtech.geomesa.convert2.AbstractConverterFactory.typeToProcess DelimitedTextConverterFactory.this.typeToProcess
106 310 5395 - 5399 Select scala.None scala.None
106 311 5414 - 5428 Apply java.lang.Object.== x$5._2.==(format)
106 312 5401 - 5436 Select scala.Tuple2._1 org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$5: (String, org.apache.commons.csv.CSVFormat)) => x$5._2.==(format))).get._1
106 317 5360 - 5510 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(DelimitedTextConverterFactory.this.typeToProcess, scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$5: (String, org.apache.commons.csv.CSVFormat)) => x$5._2.==(format))).get._1, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("md5(string2bytes($0))")), scala.Predef.Map.empty[String, Nothing], scala.Predef.Map.empty[String, Nothing])
107 313 5451 - 5486 Apply org.locationtech.geomesa.convert2.transforms.Expression.apply org.locationtech.geomesa.convert2.transforms.Expression.apply("md5(string2bytes($0))")
107 314 5446 - 5487 Apply scala.Some.apply scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("md5(string2bytes($0))"))
107 315 5489 - 5498 TypeApply scala.collection.immutable.Map.empty scala.Predef.Map.empty[String, Nothing]
107 316 5500 - 5509 TypeApply scala.collection.immutable.Map.empty scala.Predef.Map.empty[String, Nothing]
110 318 5549 - 5550 Literal <nosymbol> 0
111 325 5640 - 5744 Block <nosymbol> { i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(inferredType.name, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i)))) }
111 326 5603 - 5603 TypeApply scala.collection.Seq.canBuildFrom collection.this.Seq.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]
111 327 5584 - 5754 ApplyToImplicitArgs scala.collection.TraversableLike.map inferred.types.map[org.locationtech.geomesa.convert2.AbstractConverter.BasicField, Seq[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]](((x0$1: org.locationtech.geomesa.convert2.TypeInference.TypeWithPath) => x0$1 match { case (path: String, inferredType: org.locationtech.geomesa.convert2.TypeInference.InferredType)org.locationtech.geomesa.convert2.TypeInference.TypeWithPath(_, (inferredType @ _)) => { i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(inferredType.name, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i)))) } }))(collection.this.Seq.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField])
112 319 5653 - 5659 Apply scala.Int.+ i.+(1)
113 320 5681 - 5698 Select org.locationtech.geomesa.convert2.TypeInference.InferredType.name inferredType.name
113 321 5716 - 5741 Apply org.locationtech.geomesa.convert2.TypeInference.InferredTransform.apply inferredType.transform.apply(i)
113 322 5705 - 5742 Apply org.locationtech.geomesa.convert2.transforms.Expression.apply org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i))
113 323 5700 - 5743 Apply scala.Some.apply scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i)))
113 324 5670 - 5744 Apply org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(inferredType.name, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply(inferredType.transform.apply(i))))
117 328 5805 - 5809 Select scala.None scala.None
117 329 5811 - 5827 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified
117 330 5829 - 5845 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified
117 331 5847 - 5851 Select scala.None scala.None
117 337 5784 - 5959 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, scala.None, org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default, scala.collection.Seq.empty[Nothing], org.locationtech.geomesa.convert.Modes.ParseMode.Default, org.locationtech.geomesa.convert.Modes.ErrorMode.apply(), java.nio.charset.StandardCharsets.UTF_8)
118 332 5861 - 5891 Select org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default
118 333 5893 - 5902 TypeApply scala.collection.generic.GenericCompanion.empty scala.collection.Seq.empty[Nothing]
118 334 5904 - 5921 Select org.locationtech.geomesa.convert.Modes.ParseMode.Default org.locationtech.geomesa.convert.Modes.ParseMode.Default
118 335 5923 - 5934 Apply org.locationtech.geomesa.convert.Modes.apply org.locationtech.geomesa.convert.Modes.ErrorMode.apply()
118 336 5936 - 5958 Select java.nio.charset.StandardCharsets.UTF_8 java.nio.charset.StandardCharsets.UTF_8
123 338 5980 - 6137 Apply com.typesafe.config.ConfigObject.toConfig DelimitedTextConverterFactory.this.configConvert.to(converterConfig).withFallback(DelimitedTextConverterFactory.this.fieldConvert.to(fields.toSeq)).withFallback(DelimitedTextConverterFactory.this.optsConvert.to(options)).toConfig()
125 339 6146 - 6158 Select org.locationtech.geomesa.convert2.TypeInference.InferredTypesWithPaths.sft inferred.sft
125 340 6145 - 6167 Apply scala.Tuple2.apply scala.Tuple2.apply[org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config](inferred.sft, config)
130 342 6320 - 6325 Literal <nosymbol> "id,"
130 343 6297 - 6326 Select scala.Boolean.unary_! lines.head.startsWith("id,").unary_!
130 344 6338 - 6392 Apply java.lang.RuntimeException.<init> new scala.`package`.RuntimeException("Not a geomesa delimited export")
130 345 6330 - 6393 Apply scala.util.Failure.apply scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException("Not a geomesa delimited export"))
130 346 6330 - 6393 Block scala.util.Failure.apply scala.util.Failure.apply[Nothing](new scala.`package`.RuntimeException("Not a geomesa delimited export"))
131 447 6409 - 9449 Apply scala.util.Try.apply scala.util.Try.apply[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]({ val spec: String = org.locationtech.geomesa.utils.io.`package`.WithClose.apply[org.apache.commons.csv.CSVParser, String](org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal.parse(new java.io.StringReader(scala.Predef.augmentString(lines.head).drop(3))))(((result: org.apache.commons.csv.CSVParser) => scala.collection.JavaConverters.iterableAsScalaIterableConverter[String](result.iterator().next()).asScala.mkString(",")))(io.this.IsCloseable.closeableIsCloseable); val schema: org.geotools.api.feature.simple.SimpleFeatureType = org.locationtech.geomesa.utils.geotools.SimpleFeatureTypes.createType("", spec); val converterConfig: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(DelimitedTextConverterFactory.this.typeToProcess, scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$6: (String, org.apache.commons.csv.CSVFormat)) => x$6._2.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal))).get._1, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("$1")), scala.Predef.Map.empty[String, Nothing], scala.Predef.Map.empty[String, Nothing]); var i: Int = 1; val fields: scala.collection.mutable.Buffer[org.locationtech.geomesa.convert2.AbstractConverter.BasicField] = scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](schema.getAttributeDescriptors()).asScala.map[org.locationtech.geomesa.convert2.AbstractConverter.BasicField, scala.collection.mutable.Buffer[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]](((d: org.geotools.api.feature.type.AttributeDescriptor) => { val bindings: Seq[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType] = org.locationtech.geomesa.utils.geotools.ObjectType.selectType(d); val transform: Product with Serializable with org.locationtech.geomesa.convert2.TypeInference.InferredTransform = bindings.head match { case org.locationtech.geomesa.utils.geotools.ObjectType.STRING => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.INT => org.locationtech.geomesa.convert2.TypeInference.CastToInt case org.locationtech.geomesa.utils.geotools.ObjectType.LONG => org.locationtech.geomesa.convert2.TypeInference.CastToLong case org.locationtech.geomesa.utils.geotools.ObjectType.FLOAT => org.locationtech.geomesa.convert2.TypeInference.CastToFloat case org.locationtech.geomesa.utils.geotools.ObjectType.DOUBLE => org.locationtech.geomesa.convert2.TypeInference.CastToDouble case org.locationtech.geomesa.utils.geotools.ObjectType.BOOLEAN => org.locationtech.geomesa.convert2.TypeInference.CastToBoolean case org.locationtech.geomesa.utils.geotools.ObjectType.DATE => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("datetime(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.UUID => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.LIST => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MAP => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.BYTES => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY => bindings.drop(1).headOption.getOrElse[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType](org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY) match { case org.locationtech.geomesa.utils.geotools.ObjectType.POINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.LINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.POLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTILINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY_COLLECTION => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")") case _ => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")") } case _ => throw new java.lang.IllegalStateException(scala.StringContext.apply("Unexpected binding: ", "").s(bindings)) }; i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(d.getLocalName(), scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression.TryExpression](org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull))) }))(mutable.this.Buffer.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]); val options: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(scala.Some.apply[Int](1), org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, scala.None, org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default, scala.collection.Seq.empty[Nothing], org.locationtech.geomesa.convert.Modes.ParseMode.Default, org.locationtech.geomesa.convert.Modes.ErrorMode.apply(), java.nio.charset.StandardCharsets.UTF_8); val config: com.typesafe.config.Config = DelimitedTextConverterFactory.this.configConvert.to(converterConfig).withFallback(DelimitedTextConverterFactory.this.fieldConvert.to(fields.toSeq)).withFallback(DelimitedTextConverterFactory.this.optsConvert.to(options)).toConfig(); scala.Tuple2.apply[org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config](sft.getOrElse[org.geotools.api.feature.simple.SimpleFeatureType](schema), config) })
131 448 6409 - 9449 Block scala.util.Try.apply scala.util.Try.apply[(org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config)]({ val spec: String = org.locationtech.geomesa.utils.io.`package`.WithClose.apply[org.apache.commons.csv.CSVParser, String](org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal.parse(new java.io.StringReader(scala.Predef.augmentString(lines.head).drop(3))))(((result: org.apache.commons.csv.CSVParser) => scala.collection.JavaConverters.iterableAsScalaIterableConverter[String](result.iterator().next()).asScala.mkString(",")))(io.this.IsCloseable.closeableIsCloseable); val schema: org.geotools.api.feature.simple.SimpleFeatureType = org.locationtech.geomesa.utils.geotools.SimpleFeatureTypes.createType("", spec); val converterConfig: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(DelimitedTextConverterFactory.this.typeToProcess, scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$6: (String, org.apache.commons.csv.CSVFormat)) => x$6._2.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal))).get._1, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("$1")), scala.Predef.Map.empty[String, Nothing], scala.Predef.Map.empty[String, Nothing]); var i: Int = 1; val fields: scala.collection.mutable.Buffer[org.locationtech.geomesa.convert2.AbstractConverter.BasicField] = scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](schema.getAttributeDescriptors()).asScala.map[org.locationtech.geomesa.convert2.AbstractConverter.BasicField, scala.collection.mutable.Buffer[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]](((d: org.geotools.api.feature.type.AttributeDescriptor) => { val bindings: Seq[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType] = org.locationtech.geomesa.utils.geotools.ObjectType.selectType(d); val transform: Product with Serializable with org.locationtech.geomesa.convert2.TypeInference.InferredTransform = bindings.head match { case org.locationtech.geomesa.utils.geotools.ObjectType.STRING => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.INT => org.locationtech.geomesa.convert2.TypeInference.CastToInt case org.locationtech.geomesa.utils.geotools.ObjectType.LONG => org.locationtech.geomesa.convert2.TypeInference.CastToLong case org.locationtech.geomesa.utils.geotools.ObjectType.FLOAT => org.locationtech.geomesa.convert2.TypeInference.CastToFloat case org.locationtech.geomesa.utils.geotools.ObjectType.DOUBLE => org.locationtech.geomesa.convert2.TypeInference.CastToDouble case org.locationtech.geomesa.utils.geotools.ObjectType.BOOLEAN => org.locationtech.geomesa.convert2.TypeInference.CastToBoolean case org.locationtech.geomesa.utils.geotools.ObjectType.DATE => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("datetime(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.UUID => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.LIST => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MAP => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.BYTES => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY => bindings.drop(1).headOption.getOrElse[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType](org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY) match { case org.locationtech.geomesa.utils.geotools.ObjectType.POINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.LINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.POLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTILINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY_COLLECTION => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")") case _ => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")") } case _ => throw new java.lang.IllegalStateException(scala.StringContext.apply("Unexpected binding: ", "").s(bindings)) }; i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(d.getLocalName(), scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression.TryExpression](org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull))) }))(mutable.this.Buffer.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]); val options: org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions = org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(scala.Some.apply[Int](1), org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, scala.None, org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default, scala.collection.Seq.empty[Nothing], org.locationtech.geomesa.convert.Modes.ParseMode.Default, org.locationtech.geomesa.convert.Modes.ErrorMode.apply(), java.nio.charset.StandardCharsets.UTF_8); val config: com.typesafe.config.Config = DelimitedTextConverterFactory.this.configConvert.to(converterConfig).withFallback(DelimitedTextConverterFactory.this.fieldConvert.to(fields.toSeq)).withFallback(DelimitedTextConverterFactory.this.optsConvert.to(options)).toConfig(); scala.Tuple2.apply[org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config](sft.getOrElse[org.geotools.api.feature.simple.SimpleFeatureType](schema), config) })
132 347 6489 - 6507 Apply scala.collection.IndexedSeqOptimized.drop scala.Predef.augmentString(lines.head).drop(3)
132 348 6472 - 6508 Apply java.io.StringReader.<init> new java.io.StringReader(scala.Predef.augmentString(lines.head).drop(3))
132 349 6444 - 6509 Apply org.apache.commons.csv.CSVFormat.parse org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal.parse(new java.io.StringReader(scala.Predef.augmentString(lines.head).drop(3)))
132 351 6511 - 6511 Select org.locationtech.geomesa.utils.io.IsCloseableImplicits.closeableIsCloseable io.this.IsCloseable.closeableIsCloseable
132 352 6434 - 6587 ApplyToImplicitArgs org.locationtech.geomesa.utils.io.WithClose.apply org.locationtech.geomesa.utils.io.`package`.WithClose.apply[org.apache.commons.csv.CSVParser, String](org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal.parse(new java.io.StringReader(scala.Predef.augmentString(lines.head).drop(3))))(((result: org.apache.commons.csv.CSVParser) => scala.collection.JavaConverters.iterableAsScalaIterableConverter[String](result.iterator().next()).asScala.mkString(",")))(io.this.IsCloseable.closeableIsCloseable)
133 350 6533 - 6577 Apply scala.collection.TraversableOnce.mkString scala.collection.JavaConverters.iterableAsScalaIterableConverter[String](result.iterator().next()).asScala.mkString(",")
135 353 6609 - 6648 Apply org.locationtech.geomesa.utils.geotools.SimpleFeatureTypes.createType org.locationtech.geomesa.utils.geotools.SimpleFeatureTypes.createType("", spec)
138 354 6710 - 6723 Select org.locationtech.geomesa.convert2.AbstractConverterFactory.typeToProcess DelimitedTextConverterFactory.this.typeToProcess
138 355 6725 - 6729 Select scala.None scala.None
138 356 6752 - 6773 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal
138 357 6744 - 6773 Apply java.lang.Object.== x$6._2.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal)
138 358 6731 - 6781 Select scala.Tuple2._1 org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$6: (String, org.apache.commons.csv.CSVFormat)) => x$6._2.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal))).get._1
138 363 6690 - 6840 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(DelimitedTextConverterFactory.this.typeToProcess, scala.None, org.locationtech.geomesa.convert.text.DelimitedTextConverter.formats.find(((x$6: (String, org.apache.commons.csv.CSVFormat)) => x$6._2.==(org.locationtech.geomesa.convert.text.DelimitedTextConverter.Formats.QuotedMinimal))).get._1, scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("$1")), scala.Predef.Map.empty[String, Nothing], scala.Predef.Map.empty[String, Nothing])
139 359 6800 - 6816 Apply org.locationtech.geomesa.convert2.transforms.Expression.apply org.locationtech.geomesa.convert2.transforms.Expression.apply("$1")
139 360 6795 - 6817 Apply scala.Some.apply scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression](org.locationtech.geomesa.convert2.transforms.Expression.apply("$1"))
139 361 6819 - 6828 TypeApply scala.collection.immutable.Map.empty scala.Predef.Map.empty[String, Nothing]
139 362 6830 - 6839 TypeApply scala.collection.immutable.Map.empty scala.Predef.Map.empty[String, Nothing]
141 364 6858 - 6859 Literal <nosymbol> 1
142 365 6919 - 6949 Apply org.geotools.api.feature.simple.SimpleFeatureType.getAttributeDescriptors schema.getAttributeDescriptors()
142 432 6962 - 6962 TypeApply scala.collection.mutable.Buffer.canBuildFrom mutable.this.Buffer.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]
142 433 6919 - 9010 ApplyToImplicitArgs scala.collection.TraversableLike.map scala.collection.JavaConverters.asScalaBufferConverter[org.geotools.api.feature.type.AttributeDescriptor](schema.getAttributeDescriptors()).asScala.map[org.locationtech.geomesa.convert2.AbstractConverter.BasicField, scala.collection.mutable.Buffer[org.locationtech.geomesa.convert2.AbstractConverter.BasicField]](((d: org.geotools.api.feature.type.AttributeDescriptor) => { val bindings: Seq[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType] = org.locationtech.geomesa.utils.geotools.ObjectType.selectType(d); val transform: Product with Serializable with org.locationtech.geomesa.convert2.TypeInference.InferredTransform = bindings.head match { case org.locationtech.geomesa.utils.geotools.ObjectType.STRING => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.INT => org.locationtech.geomesa.convert2.TypeInference.CastToInt case org.locationtech.geomesa.utils.geotools.ObjectType.LONG => org.locationtech.geomesa.convert2.TypeInference.CastToLong case org.locationtech.geomesa.utils.geotools.ObjectType.FLOAT => org.locationtech.geomesa.convert2.TypeInference.CastToFloat case org.locationtech.geomesa.utils.geotools.ObjectType.DOUBLE => org.locationtech.geomesa.convert2.TypeInference.CastToDouble case org.locationtech.geomesa.utils.geotools.ObjectType.BOOLEAN => org.locationtech.geomesa.convert2.TypeInference.CastToBoolean case org.locationtech.geomesa.utils.geotools.ObjectType.DATE => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("datetime(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.UUID => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.LIST => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MAP => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2)), ")") case org.locationtech.geomesa.utils.geotools.ObjectType.BYTES => org.locationtech.geomesa.convert2.TypeInference.IdentityTransform case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY => bindings.drop(1).headOption.getOrElse[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType](org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY) match { case org.locationtech.geomesa.utils.geotools.ObjectType.POINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.LINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.POLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTILINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY_COLLECTION => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")") case _ => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")") } case _ => throw new java.lang.IllegalStateException(scala.StringContext.apply("Unexpected binding: ", "").s(bindings)) }; i = i.+(1); org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(d.getLocalName(), scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression.TryExpression](org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull))) }))(mutable.this.Buffer.canBuildFrom[org.locationtech.geomesa.convert2.AbstractConverter.BasicField])
143 366 6994 - 7018 Apply org.locationtech.geomesa.utils.geotools.ObjectType.selectType org.locationtech.geomesa.utils.geotools.ObjectType.selectType(d)
144 367 7045 - 7058 Select scala.collection.IterableLike.head bindings.head
145 368 7107 - 7138 Select org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
145 369 7107 - 7138 Block org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
146 370 7179 - 7202 Select org.locationtech.geomesa.convert2.TypeInference.CastToInt org.locationtech.geomesa.convert2.TypeInference.CastToInt
146 371 7179 - 7202 Block org.locationtech.geomesa.convert2.TypeInference.CastToInt org.locationtech.geomesa.convert2.TypeInference.CastToInt
147 372 7243 - 7267 Select org.locationtech.geomesa.convert2.TypeInference.CastToLong org.locationtech.geomesa.convert2.TypeInference.CastToLong
147 373 7243 - 7267 Block org.locationtech.geomesa.convert2.TypeInference.CastToLong org.locationtech.geomesa.convert2.TypeInference.CastToLong
148 374 7308 - 7333 Select org.locationtech.geomesa.convert2.TypeInference.CastToFloat org.locationtech.geomesa.convert2.TypeInference.CastToFloat
148 375 7308 - 7333 Block org.locationtech.geomesa.convert2.TypeInference.CastToFloat org.locationtech.geomesa.convert2.TypeInference.CastToFloat
149 376 7374 - 7400 Select org.locationtech.geomesa.convert2.TypeInference.CastToDouble org.locationtech.geomesa.convert2.TypeInference.CastToDouble
149 377 7374 - 7400 Block org.locationtech.geomesa.convert2.TypeInference.CastToDouble org.locationtech.geomesa.convert2.TypeInference.CastToDouble
150 378 7441 - 7468 Select org.locationtech.geomesa.convert2.TypeInference.CastToBoolean org.locationtech.geomesa.convert2.TypeInference.CastToBoolean
150 379 7441 - 7468 Block org.locationtech.geomesa.convert2.TypeInference.CastToBoolean org.locationtech.geomesa.convert2.TypeInference.CastToBoolean
151 380 7509 - 7544 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("datetime(", ")")
151 381 7509 - 7544 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("datetime(", ")")
152 382 7585 - 7616 Select org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
152 383 7585 - 7616 Block org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
153 384 7677 - 7689 Literal <nosymbol> "parseList(\'"
153 385 7702 - 7705 Literal <nosymbol> "\',"
153 386 7690 - 7701 Apply scala.collection.SeqLike.apply bindings.apply(1)
153 387 7675 - 7705 Apply scala.StringContext.s scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1))
153 388 7707 - 7710 Literal <nosymbol> ")"
153 389 7657 - 7711 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1)), ")")
153 390 7657 - 7711 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseList(\'", "\',").s(bindings.apply(1)), ")")
154 391 7772 - 7783 Literal <nosymbol> "parseMap(\'"
154 392 7796 - 7799 Literal <nosymbol> "->"
154 393 7812 - 7815 Literal <nosymbol> "\',"
154 394 7784 - 7795 Apply scala.collection.SeqLike.apply bindings.apply(1)
154 395 7800 - 7811 Apply scala.collection.SeqLike.apply bindings.apply(2)
154 396 7770 - 7815 Apply scala.StringContext.s scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2))
154 397 7817 - 7820 Literal <nosymbol> ")"
154 398 7752 - 7821 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2)), ")")
154 399 7752 - 7821 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply(scala.StringContext.apply("parseMap(\'", "->", "\',").s(bindings.apply(1), bindings.apply(2)), ")")
155 400 7862 - 7893 Select org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
155 401 7862 - 7893 Block org.locationtech.geomesa.convert2.TypeInference.IdentityTransform org.locationtech.geomesa.convert2.TypeInference.IdentityTransform
157 402 7962 - 7963 Literal <nosymbol> 1
157 403 7986 - 8005 Select org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY
157 404 7948 - 8006 Apply scala.Option.getOrElse bindings.drop(1).headOption.getOrElse[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType](org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY)
157 421 7948 - 8779 Match <nosymbol> bindings.drop(1).headOption.getOrElse[org.locationtech.geomesa.utils.geotools.ObjectType.ObjectType](org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY) match { case org.locationtech.geomesa.utils.geotools.ObjectType.POINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.LINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.POLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOINT => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTILINESTRING => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.MULTIPOLYGON => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")") case org.locationtech.geomesa.utils.geotools.ObjectType.GEOMETRY_COLLECTION => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")") case _ => org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")") }
158 405 8070 - 8102 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")")
158 406 8070 - 8102 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("point(", ")")
159 407 8158 - 8195 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")")
159 408 8158 - 8195 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("linestring(", ")")
160 409 8251 - 8285 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")")
160 410 8251 - 8285 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("polygon(", ")")
161 411 8341 - 8378 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")")
161 412 8341 - 8378 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipoint(", ")")
162 413 8434 - 8476 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")")
162 414 8434 - 8476 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multilinestring(", ")")
163 415 8532 - 8571 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")")
163 416 8532 - 8571 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("multipolygon(", ")")
164 417 8627 - 8672 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")")
164 418 8627 - 8672 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometrycollection(", ")")
165 419 8728 - 8763 Apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")")
165 420 8728 - 8763 Block org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply org.locationtech.geomesa.convert2.TypeInference.FunctionTransform.apply("geometry(", ")")
168 422 8803 - 8868 Throw <nosymbol> throw new java.lang.IllegalStateException(scala.StringContext.apply("Unexpected binding: ", "").s(bindings))
168 423 8803 - 8868 Block <nosymbol> throw new java.lang.IllegalStateException(scala.StringContext.apply("Unexpected binding: ", "").s(bindings))
170 424 8891 - 8897 Apply scala.Int.+ i.+(1)
171 425 8919 - 8933 Apply org.geotools.api.feature.type.AttributeDescriptor.getLocalName d.getLocalName()
171 426 8965 - 8983 Apply org.locationtech.geomesa.convert2.TypeInference.InferredTransform.apply transform.apply(i)
171 427 8954 - 8984 Apply org.locationtech.geomesa.convert2.transforms.Expression.apply org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i))
171 428 8986 - 8997 Select org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull
171 429 8940 - 8998 Apply org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull)
171 430 8935 - 8999 Apply scala.Some.apply scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression.TryExpression](org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull))
171 431 8908 - 9000 Apply org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply org.locationtech.geomesa.convert2.AbstractConverter.BasicField.apply(d.getLocalName(), scala.Some.apply[org.locationtech.geomesa.convert2.transforms.Expression.TryExpression](org.locationtech.geomesa.convert2.transforms.Expression.TryExpression.apply(org.locationtech.geomesa.convert2.transforms.Expression.apply(transform.apply(i)), org.locationtech.geomesa.convert2.transforms.Expression.LiteralNull)))
174 434 9055 - 9062 Apply scala.Some.apply scala.Some.apply[Int](1)
174 435 9064 - 9080 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified
174 436 9082 - 9098 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified
174 437 9100 - 9104 Select scala.None scala.None
174 443 9034 - 9214 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(scala.Some.apply[Int](1), org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified, scala.None, org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default, scala.collection.Seq.empty[Nothing], org.locationtech.geomesa.convert.Modes.ParseMode.Default, org.locationtech.geomesa.convert.Modes.ErrorMode.apply(), java.nio.charset.StandardCharsets.UTF_8)
175 438 9116 - 9146 Select org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default org.locationtech.geomesa.convert2.validators.SimpleFeatureValidator.default
175 439 9148 - 9157 TypeApply scala.collection.generic.GenericCompanion.empty scala.collection.Seq.empty[Nothing]
175 440 9159 - 9176 Select org.locationtech.geomesa.convert.Modes.ParseMode.Default org.locationtech.geomesa.convert.Modes.ParseMode.Default
175 441 9178 - 9189 Apply org.locationtech.geomesa.convert.Modes.apply org.locationtech.geomesa.convert.Modes.ErrorMode.apply()
175 442 9191 - 9213 Select java.nio.charset.StandardCharsets.UTF_8 java.nio.charset.StandardCharsets.UTF_8
180 444 9237 - 9400 Apply com.typesafe.config.ConfigObject.toConfig DelimitedTextConverterFactory.this.configConvert.to(converterConfig).withFallback(DelimitedTextConverterFactory.this.fieldConvert.to(fields.toSeq)).withFallback(DelimitedTextConverterFactory.this.optsConvert.to(options)).toConfig()
182 445 9411 - 9432 Apply scala.Option.getOrElse sft.getOrElse[org.geotools.api.feature.simple.SimpleFeatureType](schema)
182 446 9410 - 9441 Apply scala.Tuple2.apply scala.Tuple2.apply[org.geotools.api.feature.simple.SimpleFeatureType, com.typesafe.config.Config](sft.getOrElse[org.geotools.api.feature.simple.SimpleFeatureType](schema), config)
190 449 9525 - 9541 Literal <nosymbol> "delimited-text"
201 454 9910 - 10121 Apply scala.util.Either.RightProjection.flatMap DelimitedTextConfigConvert.this.converterName(cur).right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig](((name: Option[String]) => cur.atKey("format").right.flatMap[pureconfig.error.ConfigReaderFailures, String](((x$7: pureconfig.ConfigCursor) => x$7.asString)).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig](((format: String) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(``type``, name, format, idField, caches, userData)))))
202 450 9987 - 9995 Literal <nosymbol> "format"
202 451 10011 - 10021 Select pureconfig.ConfigCursor.asString x$7.asString
202 453 9967 - 10121 Apply scala.util.Either.RightProjection.map cur.atKey("format").right.flatMap[pureconfig.error.ConfigReaderFailures, String](((x$7: pureconfig.ConfigCursor) => x$7.asString)).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig](((format: String) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(``type``, name, format, idField, caches, userData)))
204 452 10053 - 10121 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.apply(``type``, name, format, idField, caches, userData)
211 455 10285 - 10293 Literal <nosymbol> "format"
211 456 10295 - 10308 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextConfig.format config.format
211 457 10276 - 10309 Apply java.util.Map.put base.put("format", config.format)
211 458 10284 - 10284 Literal <nosymbol> ()
224 459 10820 - 10845 Apply pureconfig.ConfigObjectCursor.atKeyOrUndefined cur.atKeyOrUndefined(key)
225 460 10858 - 10875 Select pureconfig.ConfigCursor.isUndefined value.isUndefined
225 461 10885 - 10889 Select scala.None scala.None
225 462 10879 - 10890 Apply scala.util.Right.apply scala.`package`.Right.apply[Nothing, None.type](scala.None)
225 463 10879 - 10890 Block scala.util.Right.apply scala.`package`.Right.apply[Nothing, None.type](scala.None)
225 464 10929 - 10941 Apply scala.Option.apply scala.Option.apply[T](x)
225 465 10900 - 10942 Apply scala.util.Either.RightProjection.map reader.from(value).right.map[Option[T]]({ ((x: T) => scala.Option.apply[T](x)) })
225 466 10900 - 10942 Block scala.util.Either.RightProjection.map reader.from(value).right.map[Option[T]]({ ((x: T) => scala.Option.apply[T](x)) })
229 467 11058 - 11083 Apply pureconfig.ConfigObjectCursor.atKeyOrUndefined cur.atKeyOrUndefined(key)
230 468 11096 - 11113 Select pureconfig.ConfigCursor.isUndefined value.isUndefined
230 469 11123 - 11139 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified
230 470 11117 - 11140 Apply scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified)
230 471 11117 - 11140 Block scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharNotSpecified)
231 472 11160 - 11205 Apply pureconfig.ConfigReader.from org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader.from(value)
231 484 11160 - 11510 Match <nosymbol> org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader.from(value) match { case (value: Char)scala.util.Right[pureconfig.error.ConfigReaderFailures,Char]((c @ _)) => scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled.apply(c)) case (value: pureconfig.error.ConfigReaderFailures)scala.util.Left[pureconfig.error.ConfigReaderFailures,Char]((failures @ _)) => if (org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.stringConfigReader.from(value).right.exists(((x$8: String) => x$8.isEmpty()))) scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled) else scala.`package`.Left.apply[pureconfig.error.ConfigReaderFailures, Nothing](failures) }
232 473 11249 - 11263 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled.apply(c)
232 474 11243 - 11264 Apply scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled.apply(c))
232 475 11243 - 11264 Block scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharEnabled.apply(c))
234 476 11379 - 11388 Apply java.lang.String.isEmpty x$8.isEmpty()
234 477 11318 - 11389 Apply scala.util.Either.RightProjection.exists org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.stringConfigReader.from(value).right.exists(((x$8: String) => x$8.isEmpty()))
234 483 11314 - 11498 If <nosymbol> if (org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.stringConfigReader.from(value).right.exists(((x$8: String) => x$8.isEmpty()))) scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled) else scala.`package`.Left.apply[pureconfig.error.ConfigReaderFailures, Nothing](failures)
235 478 11415 - 11427 Select org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled
235 479 11409 - 11428 Apply scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled)
235 480 11409 - 11428 Block scala.util.Right.apply scala.`package`.Right.apply[Nothing, org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled.type](org.locationtech.geomesa.convert.text.DelimitedTextConverter.CharDisabled)
237 481 11468 - 11482 Apply scala.util.Left.apply scala.`package`.Left.apply[pureconfig.error.ConfigReaderFailures, Nothing](failures)
237 482 11468 - 11482 Block scala.util.Left.apply scala.`package`.Left.apply[pureconfig.error.ConfigReaderFailures, Nothing](failures)
244 485 11570 - 11582 Literal <nosymbol> "skip-lines"
244 486 11584 - 11616 Select pureconfig.PrimitiveReaders.intConfigReader org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.intConfigReader
244 495 11536 - 11941 Apply scala.util.Either.RightProjection.flatMap option[Int]("skip-lines", org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.intConfigReader).right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((skipLines: Option[Int]) => optionalChar("quote").right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((quote: org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar) => optionalChar("escape").right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((escape: org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar) => option[Char]("delimiter", org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((delimiter: Option[Char]) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)))))))))
245 487 11658 - 11665 Literal <nosymbol> "quote"
245 494 11632 - 11941 Apply scala.util.Either.RightProjection.flatMap optionalChar("quote").right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((quote: org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar) => optionalChar("escape").right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((escape: org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar) => option[Char]("delimiter", org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((delimiter: Option[Char]) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)))))))
246 488 11707 - 11715 Literal <nosymbol> "escape"
246 493 11681 - 11941 Apply scala.util.Either.RightProjection.flatMap optionalChar("escape").right.flatMap[pureconfig.error.ConfigReaderFailures, org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((escape: org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar) => option[Char]("delimiter", org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((delimiter: Option[Char]) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)))))
247 489 11751 - 11762 Literal <nosymbol> "delimiter"
247 490 11764 - 11797 Select pureconfig.PrimitiveReaders.charConfigReader org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader
247 492 11731 - 11941 Apply scala.util.Either.RightProjection.map option[Char]("delimiter", org.locationtech.geomesa.convert2.AbstractConverterFactory.PrimitiveConvert.charConfigReader).right.map[org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions](((delimiter: Option[Char]) => org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)))
249 491 11829 - 11941 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.DelimitedTextOptions.apply(skipLines, quote, escape, delimiter, validators, reporters, parseMode, errorMode, encoding)
254 496 12122 - 12134 Literal <nosymbol> "skip-lines"
254 497 12136 - 12146 Apply scala.Int.box scala.Int.box(o)
254 498 12113 - 12147 Apply java.util.Map.put base.put("skip-lines", scala.Int.box(o))
254 499 12082 - 12148 Apply scala.Option.foreach options.skipLines.foreach[AnyRef](((o: Int) => base.put("skip-lines", scala.Int.box(o))))
255 500 12191 - 12198 Literal <nosymbol> "quote"
255 501 12209 - 12210 ApplyImplicitView scala.Predef.Character2char scala.Predef.Character2char(o)
255 502 12200 - 12211 Apply scala.Char.box scala.Char.box(scala.Predef.Character2char(o))
255 503 12182 - 12212 Apply java.util.Map.put base.put("quote", scala.Char.box(scala.Predef.Character2char(o)))
255 504 12155 - 12213 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar.foreach options.quote.foreach[AnyRef](((o: Character) => base.put("quote", scala.Char.box(scala.Predef.Character2char(o)))))
256 505 12257 - 12265 Literal <nosymbol> "escape"
256 506 12276 - 12277 ApplyImplicitView scala.Predef.Character2char scala.Predef.Character2char(o)
256 507 12267 - 12278 Apply scala.Char.box scala.Char.box(scala.Predef.Character2char(o))
256 508 12248 - 12279 Apply java.util.Map.put base.put("escape", scala.Char.box(scala.Predef.Character2char(o)))
256 509 12220 - 12280 Apply org.locationtech.geomesa.convert.text.DelimitedTextConverter.OptionalChar.foreach options.escape.foreach[AnyRef](((o: Character) => base.put("escape", scala.Char.box(scala.Predef.Character2char(o)))))
257 510 12327 - 12338 Literal <nosymbol> "delimiter"
257 511 12340 - 12351 Apply scala.Char.box scala.Char.box(o)
257 512 12318 - 12352 Apply java.util.Map.put base.put("delimiter", scala.Char.box(o))
257 513 12287 - 12353 Apply scala.Option.foreach options.delimiter.foreach[AnyRef](((o: Char) => base.put("delimiter", scala.Char.box(o))))