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.features
10 
11 import org.geotools.api.feature.`type`.AttributeDescriptor
12 import org.geotools.api.feature.simple.{SimpleFeature, SimpleFeatureType}
13 import org.geotools.factory.CommonFactoryFinder
14 import org.geotools.feature.AbstractFeatureFactoryImpl
15 import org.geotools.feature.simple.SimpleFeatureBuilder
16 import org.geotools.util.factory.Hints
17 
18 class ScalaSimpleFeatureFactory extends AbstractFeatureFactoryImpl {
19 
20   override def createSimpleFeature(attrs: Array[AnyRef], sft: SimpleFeatureType, id: String): ScalaSimpleFeature = {
21     val sf = new ScalaSimpleFeature(sft, id)
22     sf.setAttributes(attrs)
23     sf
24   }
25 
26   override def createSimpleFeautre(attrs: Array[AnyRef], descriptor: AttributeDescriptor, id: String): ScalaSimpleFeature =
27     createSimpleFeature(attrs, descriptor.asInstanceOf[SimpleFeatureType], id)
28 
29 }
30 
31 object ScalaSimpleFeatureFactory {
32 
33   private val hints = new Hints(Hints.FEATURE_FACTORY, classOf[ScalaSimpleFeatureFactory])
34   private val featureFactory = CommonFactoryFinder.getFeatureFactory(hints)
35 
36   def buildFeature(sft: SimpleFeatureType, attrs: Seq[AnyRef], id: String): SimpleFeature = {
37     val builder = featureBuilder(sft)
38     builder.addAll(attrs: _*)
39     builder.buildFeature(id)
40   }
41 
42   def copyFeature(sft: SimpleFeatureType, feature: SimpleFeature, id: String): SimpleFeature = {
43     val builder = featureBuilder(sft)
44     builder.init(feature)
45     builder.buildFeature(id)
46   }
47 
48   def featureBuilder(sft: SimpleFeatureType): SimpleFeatureBuilder =
49     new SimpleFeatureBuilder(sft, featureFactory)
50 }
Line Stmt Id Pos Tree Symbol Tests Code
21 398 1043 - 1074 Apply org.locationtech.geomesa.features.ScalaSimpleFeature.<init> new ScalaSimpleFeature(sft, id, features.this.ScalaSimpleFeature.<init>$default$3, features.this.ScalaSimpleFeature.<init>$default$4)
22 399 1079 - 1102 Apply org.locationtech.geomesa.features.AbstractSimpleFeature.AbstractMutableSimpleFeature.setAttributes sf.setAttributes(attrs)
27 400 1270 - 1312 TypeApply scala.Any.asInstanceOf descriptor.asInstanceOf[org.geotools.api.feature.simple.SimpleFeatureType]
27 401 1243 - 1317 Apply org.locationtech.geomesa.features.ScalaSimpleFeatureFactory.createSimpleFeature ScalaSimpleFeatureFactory.this.createSimpleFeature(attrs, descriptor.asInstanceOf[org.geotools.api.feature.simple.SimpleFeatureType], id)
33 402 1390 - 1411 Select org.geotools.util.factory.Hints.FEATURE_FACTORY org.geotools.util.factory.Hints.FEATURE_FACTORY
33 403 1413 - 1447 Literal <nosymbol> classOf[org.locationtech.geomesa.features.ScalaSimpleFeatureFactory]
33 404 1380 - 1448 Apply org.geotools.util.factory.Hints.<init> new org.geotools.util.factory.Hints(org.geotools.util.factory.Hints.FEATURE_FACTORY, classOf[org.locationtech.geomesa.features.ScalaSimpleFeatureFactory])
34 405 1518 - 1523 Select org.locationtech.geomesa.features.ScalaSimpleFeatureFactory.hints ScalaSimpleFeatureFactory.this.hints
34 406 1480 - 1524 Apply org.geotools.factory.CommonFactoryFinder.getFeatureFactory org.geotools.factory.CommonFactoryFinder.getFeatureFactory(ScalaSimpleFeatureFactory.this.hints)
37 407 1638 - 1657 Apply org.locationtech.geomesa.features.ScalaSimpleFeatureFactory.featureBuilder ScalaSimpleFeatureFactory.this.featureBuilder(sft)
38 408 1662 - 1687 Apply org.geotools.feature.simple.SimpleFeatureBuilder.addAll builder.addAll((attrs: _*))
39 409 1692 - 1716 Apply org.geotools.feature.simple.SimpleFeatureBuilder.buildFeature builder.buildFeature(id)
43 410 1837 - 1856 Apply org.locationtech.geomesa.features.ScalaSimpleFeatureFactory.featureBuilder ScalaSimpleFeatureFactory.this.featureBuilder(sft)
44 411 1861 - 1882 Apply org.geotools.feature.simple.SimpleFeatureBuilder.init builder.init(feature)
45 412 1887 - 1911 Apply org.geotools.feature.simple.SimpleFeatureBuilder.buildFeature builder.buildFeature(id)
49 413 2020 - 2034 Select org.locationtech.geomesa.features.ScalaSimpleFeatureFactory.featureFactory ScalaSimpleFeatureFactory.this.featureFactory
49 414 1990 - 2035 Apply org.geotools.feature.simple.SimpleFeatureBuilder.<init> new org.geotools.feature.simple.SimpleFeatureBuilder(sft, ScalaSimpleFeatureFactory.this.featureFactory)