├── project ├── build.properties ├── assembly.sbt └── plugins.sbt ├── version.sbt ├── stix-files └── testfull.zip ├── .idea ├── vcs.xml ├── scala_compiler.xml ├── libraries │ ├── sbt__org_ow2_asm_asm_5_2_jar.xml │ ├── sbt__org_neo4j_neo4j_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_io_3_3_9_jar.xml │ ├── sbt__org_ow2_asm_asm_tree_5_2_jar.xml │ ├── sbt__org_ow2_asm_asm_util_5_2_jar.xml │ ├── sbt__joda_time_joda_time_2_10_1_jar.xml │ ├── sbt__net_sf_opencsv_opencsv_2_3_jar.xml │ ├── sbt__org_neo4j_neo4j_csv_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_jmx_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_ssl_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_udc_3_3_9_jar.xml │ ├── sbt__org_slf4j_slf4j_api_1_7_26_jar.xml │ ├── sbt__org_slf4j_slf4j_nop_1_7_26_jar.xml │ ├── sbt__org_neo4j_neo4j_dbms_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_index_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_common_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_kernel_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_unsafe_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_values_3_3_9_jar.xml │ ├── sbt__org_ow2_asm_asm_analysis_5_2_jar.xml │ ├── sbt__io_netty_netty_all_4_1_21_Final_jar.xml │ ├── sbt__org_neo4j_neo4j_codegen_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_logging_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_resource_3_3_9_jar.xml │ ├── sbt__org_apache_lucene_lucene_core_5_5_0_jar.xml │ ├── sbt__org_neo4j_neo4j_graph_algo_3_3_9_jar.xml │ ├── sbt__org_apache_commons_commons_text_1_1_jar.xml │ ├── sbt__org_neo4j_neo4j_collections_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_graphdb_api_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_import_tool_3_3_9_jar.xml │ ├── sbt__org_parboiled_parboiled_core_1_1_7_jar.xml │ ├── sbt__org_scala_lang_scala_reflect_2_12_8_jar.xml │ ├── sbt__org_apache_commons_commons_lang3_3_5_jar.xml │ ├── sbt__org_bouncycastle_bcpkix_jdk15on_1_60_jar.xml │ ├── sbt__org_bouncycastle_bcprov_jdk15on_1_60_jar.xml │ ├── sbt__org_neo4j_neo4j_command_line_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_lucene_index_3_3_9_jar.xml │ ├── sbt__org_apache_lucene_lucene_codecs_5_5_0_jar.xml │ ├── sbt__com_typesafe_play_play_json_2_12_2_7_3_jar.xml │ ├── sbt__org_neo4j_neo4j_configuration_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_ir_3_2_3_2_13_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_ir_3_3_3_3_9_jar.xml │ ├── sbt__org_typelevel_macro_compat_2_12_1_1_1_jar.xml │ ├── sbt__org_neo4j_neo4j_graph_matching_3_1_6_jar.xml │ ├── sbt__org_neo4j_neo4j_lucene_upgrade_3_3_9_jar.xml │ ├── sbt__com_github_ben_manes_caffeine_caffeine_2_3_3_jar.xml │ ├── sbt__com_github_workingDog_scalastix_2_12_1_0_jar.xml │ ├── sbt__org_apache_commons_commons_compress_1_12_jar.xml │ ├── sbt__org_neo4j_neo4j_consistency_check_3_3_9_jar.xml │ ├── sbt__org_parboiled_parboiled_scala_2_11_1_1_7_jar.xml │ ├── sbt__com_fasterxml_jackson_core_jackson_core_2_9_8_jar.xml │ ├── sbt__org_apache_lucene_lucene_queryparser_5_5_0_jar.xml │ ├── sbt__com_typesafe_play_play_functional_2_12_2_7_3_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_compiler_3_1_3_1_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_compiler_3_3_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_frontend_3_1_3_1_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_frontend_3_3_3_3_9_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_compiler_2_3_2_3_12_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_compiler_3_2_3_2_13_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_frontend_2_3_2_3_12_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_frontend_3_2_3_2_13_jar.xml │ ├── sbt__org_neo4j_neo4j_primitive_collections_3_3_9_jar.xml │ ├── sbt__com_fasterxml_jackson_core_jackson_databind_2_9_8_jar.xml │ ├── sbt__org_apache_lucene_lucene_backward_codecs_5_5_0_jar.xml │ ├── sbt__org_apache_lucene_lucene_analyzers_common_5_5_0_jar.xml │ ├── sbt__com_typesafe_scala_logging_scala_logging_2_12_3_9_2_jar.xml │ ├── sbt__org_neo4j_neo4j_cypher_logical_plans_3_3_3_3_9_jar.xml │ ├── sbt__com_fasterxml_jackson_core_jackson_annotations_2_9_8_jar.xml │ ├── sbt__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_8_jar.xml │ ├── sbt__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_8_jar.xml │ ├── sbt__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2_jar.xml │ ├── sbt__com_github_workingDog_stixtoneolib_2_12_0_5_SNAPSHOT_jar.xml │ └── sbt__org_scala_lang_scala_library_2_12_8_jar.xml ├── modules.xml └── modules │ ├── stixtoneodb.iml │ └── stixtoneodb-build.iml ├── sonatype.sbt ├── logback.xml ├── changes.md ├── how-2-convert.md ├── src └── main │ └── scala │ └── com │ └── kodekutters │ └── StixToNeoDB.scala └── README.md /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version = 1.3.13 -------------------------------------------------------------------------------- /version.sbt: -------------------------------------------------------------------------------- 1 | version in ThisBuild := "6.0" 2 | -------------------------------------------------------------------------------- /project/assembly.sbt: -------------------------------------------------------------------------------- 1 | addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.15.0") -------------------------------------------------------------------------------- /stix-files/testfull.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/workingDog/StixToNeoDB/HEAD/stix-files/testfull.zip -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/scala_compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | import sbt.Resolver 2 | 3 | resolvers += Resolver.sonatypeRepo("public") 4 | 5 | resolvers += Resolver.sonatypeRepo("snapshots") 6 | 7 | resolvers += Resolver.sonatypeRepo("releases") 8 | 9 | addSbtPlugin("com.github.gseitz" % "sbt-release" % "1.0.11") 10 | 11 | addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.1.1") 12 | 13 | addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "2.5") -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_ow2_asm_asm_5_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_io_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_ow2_asm_asm_tree_5_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_ow2_asm_asm_util_5_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__joda_time_joda_time_2_10_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__net_sf_opencsv_opencsv_2_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_csv_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_jmx_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_ssl_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_udc_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_slf4j_slf4j_api_1_7_26_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_slf4j_slf4j_nop_1_7_26_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_dbms_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_index_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_common_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_kernel_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_unsafe_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_values_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_ow2_asm_asm_analysis_5_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__io_netty_netty_all_4_1_21_Final_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_codegen_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_logging_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_resource_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_lucene_lucene_core_5_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_graph_algo_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_commons_commons_text_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_collections_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_graphdb_api_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_import_tool_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_parboiled_parboiled_core_1_1_7_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_scala_lang_scala_reflect_2_12_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_commons_commons_lang3_3_5_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_bouncycastle_bcpkix_jdk15on_1_60_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_bouncycastle_bcprov_jdk15on_1_60_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_command_line_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_lucene_index_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_lucene_lucene_codecs_5_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_typesafe_play_play_json_2_12_2_7_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_configuration_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_ir_3_2_3_2_13_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_ir_3_3_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_typelevel_macro_compat_2_12_1_1_1_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_graph_matching_3_1_6_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_lucene_upgrade_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_github_ben_manes_caffeine_caffeine_2_3_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_github_workingDog_scalastix_2_12_1_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_commons_commons_compress_1_12_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_consistency_check_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_parboiled_parboiled_scala_2_11_1_1_7_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_fasterxml_jackson_core_jackson_core_2_9_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_lucene_lucene_queryparser_5_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_typesafe_play_play_functional_2_12_2_7_3_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_compiler_3_1_3_1_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_compiler_3_3_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_frontend_3_1_3_1_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_frontend_3_3_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_compiler_2_3_2_3_12_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_compiler_3_2_3_2_13_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_frontend_2_3_2_3_12_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_frontend_3_2_3_2_13_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_primitive_collections_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_fasterxml_jackson_core_jackson_databind_2_9_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_lucene_lucene_backward_codecs_5_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_apache_lucene_lucene_analyzers_common_5_5_0_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_typesafe_scala_logging_scala_logging_2_12_3_9_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_neo4j_neo4j_cypher_logical_plans_3_3_3_3_9_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_fasterxml_jackson_core_jackson_annotations_2_9_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_googlecode_concurrentlinkedhashmap_concurrentlinkedhashmap_lru_1_4_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__com_github_workingDog_stixtoneolib_2_12_0_5_SNAPSHOT_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /sonatype.sbt: -------------------------------------------------------------------------------- 1 | 2 | pomExtra := { 3 | 4 | https://github.com/workingDog/StixToNeoDB 5 | scm:git:git@github.com:workingDog/StixToNeoDB.git 6 | 7 | 8 | 9 | workingDog 10 | Ringo Wathelet 11 | https://github.com/workingDog 12 | 13 | 14 | } 15 | 16 | pomIncludeRepository := { _ => false } 17 | 18 | publishMavenStyle := true 19 | 20 | publishArtifact in Test := false 21 | 22 | publishTo := Some( 23 | if (isSnapshot.value) 24 | Opts.resolver.sonatypeSnapshots 25 | else 26 | Opts.resolver.sonatypeStaging 27 | ) 28 | 29 | sonatypeProfileName := "com.github.workingDog" 30 | releasePublishArtifactsAction := PgpKeys.publishSigned.value 31 | releaseTagName := (version in ThisBuild).value 32 | 33 | credentials += Credentials(Path.userHome / ".ivy2" / ".my-credentials") 34 | 35 | -------------------------------------------------------------------------------- /logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 5 | 6 | 7 | 8 | 9 | 10 | application.log 11 | 12 | %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n 13 | 14 | false 15 | 16 | 17 | 18 | 19 | %coloredLevel %logger{15} - %message%n%xException{10} 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /.idea/libraries/sbt__org_scala_lang_scala_library_2_12_8_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /changes.md: -------------------------------------------------------------------------------- 1 | Change Log 2 | ========== 3 | 4 | ### changes in "7.0-SNAPSHOT" 5 | 6 | 7 | ### changes in "6.0" 8 | 9 | * update to scala 2.13.3 10 | * update to "stixtoneolib-0.6" which uses "scalastix-1.1" all using scala 2.13.3 11 | 12 | ### changes in 5.0 13 | 14 | * update to "stixtoneolib-0.5" which uses "scalastix-1.0" 15 | 16 | ---> no longer providing a ready to use jar file. 17 | Use "sbt assembly" to generate a self contained jar file "stixtoneo-5.0.jar". 18 | 19 | ### changes in 4.0 20 | 21 | * update scala, sbt and stixtoneolib 22 | 23 | ### changes in 3.0 24 | 25 | * update stixtoneolib to 0.3 version 26 | 27 | ### changes in 2.0 28 | 29 | * use stixtoneolib-0.2 library for processing 30 | * change the usage options with: 31 | *** -f for file of json format, catering for both text and zip files 32 | *** -x for the large files, catering for both text and zip files 33 | 34 | ### changes in 1.0 35 | 36 | * remove all circe dependencies 37 | * add Play json dependency 38 | * replace all circe code with Play json code 39 | * added counting the nodes 40 | * added custom properties 41 | * added the missing hashes of ExternalReference 42 | * remove description from ObservablesMaker 43 | * added custom (for custom properties x_...) to ObservablesMaker 44 | * update to scalastix-0.7, for STIX-2.0 specs 45 | * due to STIX-2.0 specs, 46 | ** modify object_refs as optional for Report 47 | ** comment out the lang and confidence parameters. 48 | 49 | * updated scala, sbt, plugins -------------------------------------------------------------------------------- /how-2-convert.md: -------------------------------------------------------------------------------- 1 | ## To convert Stix-2.0 objects to graphML, Cypher statements, CSV and binary. 2 | 3 | Download [neo4j-3.2.1](https://neo4j.com/download/other-releases/) from the zip or tar file, 4 | not the exe or dmg. 5 | 6 | Untar/unzip it into a directory of your choice, let say, "myneo4j" 7 | 8 | Setup the tools required for exporting to other formats, go to [neo4j-shell-tools](https://github.com/jexp/neo4j-shell-tools) 9 | and download the "neo4j-shell-tools_3.0.1.zip" file. 10 | 11 | Unzip neo4j-shell-tools.zip and copy the 4 jar files into your "myneo4j/lib" directory. 12 | 13 | Setup your path variables, 14 | 15 | e.g. macOS 16 | 17 | export NEO4J_HOME=/Users/yourname/myneo4j/neo4j-community-3.2.1 18 | export PATH=$PATH:$NEO4J_HOME/bin:$NEO4J_HOME/lib 19 | 20 | This makes the [neo4j-shell-tools](https://github.com/jexp/neo4j-shell-tools) available. 21 | 22 | Now generate a neo4j graph database from your Stix objects file using [StixToNeoDB](https://github.com/workingDog/StixToNeoDB) 23 | 24 | java -jar stixtoneodb-6.0.jar --json stix_file.json stixdb 25 | 26 | This will produce a neo4j database in the "stixdb" directory. 27 | 28 | After that, in a terminal type: 29 | 30 | neo4j-shell -path /path_to.../stixdb 31 | 32 | Then for example exporting to graphML format, type at the shell prompt: 33 | 34 | $ export-graphml -o out.graphml 35 | 36 | This will give you all your data in graphML format, you can then open "out.graphml" using Gephi. 37 | 38 | Other [export commands](https://github.com/jexp/neo4j-shell-tools#export) are available, 39 | 40 | To export your data as Cypher statements, use the Cypher Export command. 41 | To export your data as CSV, use the Cypher Import command with the -o file option which will output the results of your queries into a CSV file. 42 | To export your data as GraphML, use the GraphML Export command. 43 | To export your data as a binary file, use the Export Binary command. 44 | -------------------------------------------------------------------------------- /src/main/scala/com/kodekutters/StixToNeoDB.scala: -------------------------------------------------------------------------------- 1 | package com.kodekutters 2 | 3 | import com.kodekutters.neo4j.Neo4jFileLoader 4 | import java.io.File 5 | 6 | import com.typesafe.scalalogging.Logger 7 | import org.slf4j.helpers.NOPLogger 8 | 9 | import scala.language.implicitConversions 10 | import scala.language.postfixOps 11 | 12 | /** 13 | * loads a file containing STIX-2 objects (in json format), or 14 | * a zip file of such, into a Neo4j graph database 15 | * 16 | * @author R. Wathelet June 2017, revised December 2017 17 | * 18 | */ 19 | object StixToNeoDB { 20 | 21 | val usage = 22 | """Usage: 23 | java -jar stixtoneodb-6.0.jar -f hostAddress stix_file db_dir 24 | or 25 | java -jar stixtoneodb-6.0.jar -x hostAddress stix_file db_dir""".stripMargin 26 | 27 | /** 28 | * loads a file containing STIX-2 objects, or 29 | * a zip file containing one or more such entry files, 30 | * into a neo4j graph database 31 | */ 32 | def main(args: Array[String]) { 33 | if (args.length < 3) 34 | println(usage) 35 | else { 36 | // to log the progress, comment this line if you don't want any logging at all 37 | implicit val logger = Logger("StixToNeoDB") 38 | // the Neo4j hostname 39 | val hostAddress = args(1).trim 40 | // the input file 41 | val infile = new File(args(2)) 42 | // the Neo4j db directory 43 | val dbDir = if (args.length == 4) args(3).trim else "" 44 | // if nothing default is to create a new db in 45 | // the current directory with name stixdb 46 | val dbFile = if (dbDir.isEmpty) new java.io.File(".").getCanonicalPath + "/stixdb" else dbDir 47 | // Neo4jLoader and Neo4jFileLoader can take an implicit logger, default NOPLogger 48 | val neoLoader = new Neo4jFileLoader(dbFile, hostAddress) 49 | args(0) match { 50 | case "-f" => 51 | if (infile.getName.endsWith(".zip")) neoLoader.loadBundleZipFile(infile) 52 | else neoLoader.loadBundleFile(infile) 53 | case "-x" => 54 | if (infile.getName.endsWith(".zip")) neoLoader.loadLargeZipTextFile(infile) 55 | else neoLoader.loadLargeTextFile(infile) 56 | case x => println("unknown option: " + x + "\n" + usage) 57 | } 58 | } 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Loads STIX-2 to a Neo4j graph database 2 | 3 | This command prompt application **StixToNeoDB**, loads [STIX-2](https://oasis-open.github.io/cti-documentation/) 4 | objects and relations from json and zip files into a [Neo4j](https://neo4j.com/) graph database. 5 | 6 | The [OASIS](https://www.oasis-open.org/) open standard Structured Threat Information Expression [STIX-2](https://oasis-open.github.io/cti-documentation/) 7 | is a language for expressing cyber threat and observable information. 8 | 9 | [Neo4j](https://neo4j.com/) "is a highly scalable native graph database that leverages data 10 | relationships as first-class entities, helping enterprises build intelligent applications 11 | to meet today’s evolving data challenges." 12 | In essence, a graph database and processing engine that is used here for storing Stix objects 13 | and their relationships. 14 | 15 | **StixToNeoDB** converts files of [STIX-2](https://oasis-open.github.io/cti-documentation/) 16 | domain objects (SDO) and relationships (SRO) to [Neo4j](https://neo4j.com/) nodes and relations 17 | using the [Java Neo4j API](https://neo4j.com/docs/java-reference/current/javadocs/). 18 | This allows for creating a new database or for adding new nodes and relations to 19 | an existing Neo4j graph database. The file types include files containing 20 | STIX-2 bundles in JSON format and zip files. 21 | 22 | ### Tools 23 | 24 | Once the Stix objects are in a Neo4j graph database you can use the built-in tools to visualise and 25 | analyse the data. Other tools such as the [Tinkerpop](http://tinkerpop.apache.org/) framework and [Spark GraphX](https://spark.apache.org/graphx/) 26 | can easily link to the neo4j data for very large data sets processing. 27 | You can also use these [export tools](https://github.com/jexp/neo4j-shell-tools) to export the data into GraphML, Cypher statements, CSV and binary formats. See also 28 | [how-2-convert](how-2-convert.md) for some explanations on how to convert Stix objects into those formats. 29 | 30 | ### Installation and usage 31 | 32 | Ensure you have Java 11 installed and the latest [SBT](http://www.scala-sbt.org/) on your system. 33 | Clone or download the **StixToNeoDB** files from this repository. 34 | 35 | ### Usage 36 | 37 | #### Preferred method using SBT 38 | 39 | In the StixToNeoDB directory type: 40 | 41 | sbt "run -f localhost:7687 stix_file db_dir" 42 | 43 | This will compile and run **StixToNeoDB** with the given parameters. 44 | See below for the parameters description. 45 | 46 | #### Making a large java **jar** file 47 | 48 | If you really need a single java file to run **StixToNeoDB**, then first 49 | compile from source code and assemble the application and all its dependencies 50 | into a single fat **jar** file. Use [SBT](http://www.scala-sbt.org/) and type: 51 | 52 | sbt assembly 53 | 54 | This will produce *stixtoneodb-6.0.jar* in the *./target/scala-2.13* directory 55 | that you can use to load Stix objects into a Neo4j. 56 | 57 | To load your Stix objects data into a Neo4j graph database, type at the prompt where 58 | you have put the *stixtoneodb-6.0.jar*: 59 | 60 | java -jar stixtoneodb-6.0.jar -f hostAddress stix_file db_dir 61 | or 62 | java -jar stixtoneodb-6.0.jar -x hostAddress stix_file db_dir 63 | 64 | #### Parameters 65 | 66 | **hostAddress** is of the form **localhost:7687** and specifies the address 67 | of the local database service to listen to. 68 | 69 | With the option **-f** the input file *stix_file* must be a file containing the Stix objects data that you want to convert, 70 | and *db_dir* is the location path to the Neo4j database directory. 71 | The input file can be a text file containing a single bundle in json format or a zip file containing one or more 72 | bundle files (.zip). Only *.json* and *.stix* files in the zip file are processed. 73 | 74 | If *db_dir* is absent, the default output directory will be in the current directory with the name *stixdb*. 75 | If the database already exists, the data will be added to it, otherwise a new neo4j database will be created. 76 | An existing database must not be "opened" by another process during processing. 77 | 78 | The **-x** option is for the **experimental** processing of large file one line at a time. 79 | The input file must contain a Stix object on one line 80 | ending with a new line. Similarly, if the input file is a zip file, each zip file entry must 81 | contain Stix objects on one line ending with a new line. 82 | 83 | Note that **StixToNeoDB** will try to "skip" errors in the objects and relations of the input file, 84 | e.g. references to non-existent objects. The log of the processing can be found in *application.log* 85 | in the *logs* directory. 86 | 87 | To view the data in Neo4j, launch the Neo4j Community Edition server, 88 | then open a browser on *http://localhost:7474*, select your *db_dir* as the database to view. 89 | 90 | ### Dependencies and requirements 91 | 92 | Requires Java 11 or greater. 93 | 94 | Depends on [StixToNeoLib](https://github.com/workingDog/StixToNeoLib) which depends on 95 | [ScalaStix](https://github.com/workingDog/scalastix), and 96 | the associated [Neo4j Community 3.3.9](https://mvnrepository.com/artifact/org.neo4j/neo4j) jar file. 97 | 98 | Since **StixToNeoDB** relies on the **neo4j-3.3.9** jar file, use 99 | Neo4j Community (3.5.19) server with the **dbms.allow_upgrade=true** in 100 | the **neo4j.conf** to process the results. 101 | 102 | ### References 103 | 104 | 1) [Neo4j](https://neo4j.com/) 105 | 106 | 2) [Java Neo4j API](https://neo4j.com/docs/java-reference/current/javadocs/) 107 | 108 | 3) [ScalaStix](https://github.com/workingDog/scalastix) 109 | 110 | 4) [StixToNeoLib](https://github.com/workingDog/StixToNeoLib) 111 | 112 | 5) [STIX-2](https://oasis-open.github.io/cti-documentation/) 113 | 114 | 115 | ### Status 116 | 117 | work in progress 118 | 119 | -------------------------------------------------------------------------------- /.idea/modules/stixtoneodb.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /.idea/modules/stixtoneodb-build.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 152 | --------------------------------------------------------------------------------