1 /***********************************************************************
2  * Copyright (c) 2013-2024 Commonwealth Computer Research, 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  * http://www.opensource.org/licenses/apache2.0.php.
7  ***********************************************************************/
8 
9 package org.locationtech.geomesa.utils.geotools.converters
10 
11 import org.geotools.util.factory.Hints
12 import org.geotools.util.{Converter, ConverterFactory}
13 
14 class ScalaCollectionsConverterFactory extends ConverterFactory {
15 
16   def createConverter(source: Class[_], target: Class[_], hints: Hints): Converter = {
17     if (classOf[java.util.List[_]].isAssignableFrom(target)) {
18        if (classOf[scala.collection.Seq[_]].isAssignableFrom(source)) {
19          return ScalaCollectionsConverterFactory.SeqToJava
20        }
21     } else if (classOf[java.util.List[_]].isAssignableFrom(source)) {
22       if (classOf[scala.collection.immutable.Seq[_]].isAssignableFrom(target)) {
23         return ScalaCollectionsConverterFactory.JavaToImmutableSeq
24       } else if (classOf[scala.collection.mutable.Seq[_]].isAssignableFrom(target)) {
25         return ScalaCollectionsConverterFactory.JavaToMutableSeq
26       }
27     } else if (classOf[java.util.Map[_, _]].isAssignableFrom(target)) {
28       if (classOf[scala.collection.Map[_, _]].isAssignableFrom(source)) {
29         return ScalaCollectionsConverterFactory.MapToJava
30       }
31     } else if (classOf[java.util.Map[_, _]].isAssignableFrom(source)) {
32       if (classOf[scala.collection.immutable.Map[_, _]].isAssignableFrom(target)) {
33         return ScalaCollectionsConverterFactory.JavaToImmutableMap
34       } else if (classOf[scala.collection.mutable.Map[_, _]].isAssignableFrom(target)) {
35         return ScalaCollectionsConverterFactory.JavaToMutableMap
36       }
37     }
38     null
39   }
40 }
41 
42 object ScalaCollectionsConverterFactory {
43 
44   import scala.collection.JavaConverters._
45 
46   object SeqToJava extends Converter {
47     override def convert[T](source: Any, target: Class[T]): T =
48       source.asInstanceOf[scala.collection.Seq[_]].asJava.asInstanceOf[T]
49   }
50 
51   object JavaToImmutableSeq extends Converter {
52     override def convert[T](source: Any, target: Class[T]): T =
53       source.asInstanceOf[java.util.List[_]].asScala.toSeq.asInstanceOf[T]
54   }
55 
56   object JavaToMutableSeq extends Converter {
57     override def convert[T](source: Any, target: Class[T]): T =
58       source.asInstanceOf[java.util.List[_]].asScala.asInstanceOf[T]
59   }
60 
61   object MapToJava extends Converter {
62     override def convert[T](source: Any, target: Class[T]): T =
63       source.asInstanceOf[scala.collection.Map[_, _]].asJava.asInstanceOf[T]
64   }
65 
66   object JavaToImmutableMap extends Converter {
67     override def convert[T](source: Any, target: Class[T]): T =
68       source.asInstanceOf[java.util.Map[_, _]].asScala.toMap.asInstanceOf[T]
69   }
70 
71   object JavaToMutableMap extends Converter {
72     override def convert[T](source: Any, target: Class[T]): T =
73       source.asInstanceOf[java.util.Map[_, _]].asScala.asInstanceOf[T]
74   }
75 }
Line Stmt Id Pos Tree Symbol Tests Code
17 6715 782 - 833 Apply java.lang.Class.isAssignableFrom classOf[java.util.List].isAssignableFrom(target)
18 6716 848 - 905 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.Seq].isAssignableFrom(source)
18 6719 844 - 844 Literal <nosymbol> ()
18 6720 844 - 844 Block <nosymbol> ()
18 6721 844 - 976 If <nosymbol> if (classOf[scala.collection.Seq].isAssignableFrom(source)) return ScalaCollectionsConverterFactory.SeqToJava else ()
19 6717 925 - 967 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.SeqToJava ScalaCollectionsConverterFactory.SeqToJava
19 6718 918 - 967 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.SeqToJava
21 6722 992 - 1043 Apply java.lang.Class.isAssignableFrom classOf[java.util.List].isAssignableFrom(source)
21 6755 988 - 1956 If <nosymbol> if (classOf[java.util.List].isAssignableFrom(source)) if (classOf[scala.collection.immutable.Seq].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableSeq else if (classOf[scala.collection.mutable.Seq].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableSeq else () else if (classOf[java.util.Map].isAssignableFrom(target)) if (classOf[scala.collection.Map].isAssignableFrom(source)) return ScalaCollectionsConverterFactory.MapToJava else () else if (classOf[java.util.Map].isAssignableFrom(source)) if (classOf[scala.collection.immutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableMap else if (classOf[scala.collection.mutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableMap else () else ()
22 6723 1057 - 1124 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.immutable.Seq].isAssignableFrom(target)
22 6732 1053 - 1353 If <nosymbol> if (classOf[scala.collection.immutable.Seq].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableSeq else if (classOf[scala.collection.mutable.Seq].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableSeq else ()
23 6724 1143 - 1194 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.JavaToImmutableSeq ScalaCollectionsConverterFactory.JavaToImmutableSeq
23 6725 1136 - 1194 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.JavaToImmutableSeq
24 6726 1212 - 1277 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.mutable.Seq].isAssignableFrom(target)
24 6729 1208 - 1208 Literal <nosymbol> ()
24 6730 1208 - 1208 Block <nosymbol> ()
24 6731 1208 - 1353 If <nosymbol> if (classOf[scala.collection.mutable.Seq].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableSeq else ()
25 6727 1296 - 1345 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.JavaToMutableSeq ScalaCollectionsConverterFactory.JavaToMutableSeq
25 6728 1289 - 1345 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.JavaToMutableSeq
27 6733 1369 - 1422 Apply java.lang.Class.isAssignableFrom classOf[java.util.Map].isAssignableFrom(target)
27 6754 1365 - 1956 If <nosymbol> if (classOf[java.util.Map].isAssignableFrom(target)) if (classOf[scala.collection.Map].isAssignableFrom(source)) return ScalaCollectionsConverterFactory.MapToJava else () else if (classOf[java.util.Map].isAssignableFrom(source)) if (classOf[scala.collection.immutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableMap else if (classOf[scala.collection.mutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableMap else () else ()
28 6734 1436 - 1496 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.Map].isAssignableFrom(source)
28 6737 1432 - 1432 Literal <nosymbol> ()
28 6738 1432 - 1432 Block <nosymbol> ()
28 6739 1432 - 1565 If <nosymbol> if (classOf[scala.collection.Map].isAssignableFrom(source)) return ScalaCollectionsConverterFactory.MapToJava else ()
29 6735 1515 - 1557 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.MapToJava ScalaCollectionsConverterFactory.MapToJava
29 6736 1508 - 1557 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.MapToJava
31 6740 1581 - 1634 Apply java.lang.Class.isAssignableFrom classOf[java.util.Map].isAssignableFrom(source)
31 6751 1577 - 1577 Literal <nosymbol> ()
31 6752 1577 - 1577 Block <nosymbol> ()
31 6753 1577 - 1956 If <nosymbol> if (classOf[java.util.Map].isAssignableFrom(source)) if (classOf[scala.collection.immutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableMap else if (classOf[scala.collection.mutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableMap else () else ()
32 6741 1648 - 1718 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.immutable.Map].isAssignableFrom(target)
32 6750 1644 - 1950 If <nosymbol> if (classOf[scala.collection.immutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToImmutableMap else if (classOf[scala.collection.mutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableMap else ()
33 6742 1737 - 1788 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.JavaToImmutableMap ScalaCollectionsConverterFactory.JavaToImmutableMap
33 6743 1730 - 1788 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.JavaToImmutableMap
34 6744 1806 - 1874 Apply java.lang.Class.isAssignableFrom classOf[scala.collection.mutable.Map].isAssignableFrom(target)
34 6747 1802 - 1802 Literal <nosymbol> ()
34 6748 1802 - 1802 Block <nosymbol> ()
34 6749 1802 - 1950 If <nosymbol> if (classOf[scala.collection.mutable.Map].isAssignableFrom(target)) return ScalaCollectionsConverterFactory.JavaToMutableMap else ()
35 6745 1893 - 1942 Select org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.JavaToMutableMap ScalaCollectionsConverterFactory.JavaToMutableMap
35 6746 1886 - 1942 Return org.locationtech.geomesa.utils.geotools.converters.ScalaCollectionsConverterFactory.createConverter return ScalaCollectionsConverterFactory.JavaToMutableMap
38 6756 1961 - 1965 Literal <nosymbol> null
48 6757 2169 - 2213 TypeApply scala.Any.asInstanceOf source.asInstanceOf[Seq[_]]
48 6758 2169 - 2236 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.seqAsJavaListConverter[_$18](source.asInstanceOf[Seq[_]]).asJava.asInstanceOf[T]
53 6759 2360 - 2398 TypeApply scala.Any.asInstanceOf source.asInstanceOf[java.util.List[_]]
53 6760 2360 - 2428 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.asScalaBufferConverter[_$19](source.asInstanceOf[java.util.List[_]]).asScala.toSeq.asInstanceOf[T]
58 6761 2550 - 2588 TypeApply scala.Any.asInstanceOf source.asInstanceOf[java.util.List[_]]
58 6762 2550 - 2612 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.asScalaBufferConverter[_$20](source.asInstanceOf[java.util.List[_]]).asScala.asInstanceOf[T]
63 6763 2727 - 2774 TypeApply scala.Any.asInstanceOf source.asInstanceOf[scala.collection.Map[_, _]]
63 6764 2727 - 2797 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.mapAsJavaMapConverter[_$21, _$22](source.asInstanceOf[scala.collection.Map[_, _]]).asJava.asInstanceOf[T]
68 6765 2921 - 2961 TypeApply scala.Any.asInstanceOf source.asInstanceOf[java.util.Map[_, _]]
68 6766 2970 - 2970 TypeApply scala.Predef.$conforms scala.Predef.$conforms[(_$23, _$24)]
68 6767 2921 - 2991 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.mapAsScalaMapConverter[_$23, _$24](source.asInstanceOf[java.util.Map[_, _]]).asScala.toMap[_$23, _$24](scala.Predef.$conforms[(_$23, _$24)]).asInstanceOf[T]
73 6768 3113 - 3153 TypeApply scala.Any.asInstanceOf source.asInstanceOf[java.util.Map[_, _]]
73 6769 3113 - 3177 TypeApply scala.Any.asInstanceOf scala.collection.JavaConverters.mapAsScalaMapConverter[_$25, _$26](source.asInstanceOf[java.util.Map[_, _]]).asScala.asInstanceOf[T]