[
  {
    "path": ".gitignore",
    "content": "/target\n/.settings\n.classpath\n.project"
  },
  {
    "path": ".travis.yml",
    "content": "language: java\njdk:\n  - openjdk11\nservices:  \n  - mongodb\n  - redis\naddons:\n  apt:\n    sources:\n    - mongodb-3.4-precise\n    packages:\n    - mongodb-org-server  \n"
  },
  {
    "path": "README.md",
    "content": "# Spring Data Blog Series\r\n\r\nThis projects holds the Java source examples for my blog post series on the Spring Data project:\r\n\r\n* [GridFS Support in Spring Data MongoDB](http://blog.codecentric.de/en/2012/07/gridfs-support-in-spring-data-mongodb/)\r\n* [Part 6: Spring Data Redis](http://blog.codecentric.de/en/2012/04/spring-data-redis/)\r\n* [Part 5: Spring Data Neo4j](http://blog.codecentric.de/en/2012/02/spring-data-neo4j/)\r\n* [Part 4: Geospatial Queries with Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/)\r\n* [Part 3: Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb/)\r\n* [Part 2: Spring Data JPA](http://blog.codecentric.de/en/2012/01/spring-data-jpa/)\r\n* [Part 1: Spring Data Commons](http://blog.codecentric.de/en/2011/12/spring-data-commons/)\r\n\r\n## Build Status @ Travis CI ##\r\n[![Build Status](https://travis-ci.org/ttrelle/spring-data-examples.png?branch=master)](https://travis-ci.org/ttrelle/spring-data-examples)\r\n\r\n## Usage\r\n\r\nThe projects are using a Maven based build. To run the tests on the command line use\r\n\r\n\tmvn clean test\r\n   \r\nIf you want to use an IDE like Eclipse run\r\n\r\n\tmvn eclipse:eclipse\r\n   \r\nand set the Eclipse variable M2_REPO pointing to your local Maven repository. Or just import the project as an existing Maven project if you are using the m2 plugin.\r\n \r\n"
  },
  {
    "path": "mongodriver/.gitignore",
    "content": "/.settings/\n/target/\n"
  },
  {
    "path": "mongodriver/pom.xml",
    "content": "<?xml version=\"1.0\"?>\n<project\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\n\txmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n\t<modelVersion>4.0.0</modelVersion>\n\t<parent>\n\t\t<groupId>de.codecentric</groupId>\n\t\t<artifactId>springdata-examples</artifactId>\n\t\t<version>1.0.0</version>\n\t</parent>\n\t<artifactId>mongodriver</artifactId>\n\t<properties>\n\t\t<!-- see\n\t\thttps://docs.mongodb.com/manual/release-notes/4.0/?_ga=2.185922027.371293580.1535706960-1835450239.1502345082#drivers\n\t\t -->\n\t\t<mongo.driver.version>3.10.0</mongo.driver.version>\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.mongodb</groupId>\n\t\t\t<artifactId>mongo-java-driver</artifactId>\n\t\t\t<version>${mongo.driver.version}</version>\n\t\t</dependency>\n\t</dependencies>\n</project>\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/Connection.java",
    "content": "package de.codecentric;\n\nimport com.mongodb.MongoClientURI;\n\nabstract public class Connection {\n\n\tpublic static final MongoClientURI URI = new MongoClientURI(\n\t\t\t\"mongodb://mongo1:27001,mongo2:27002,mongo3:27003/test?replicatSet=dev0\"\n\t\t\t// \"mongodb://localhost:27001,localhost:27002,localhost:27003/test?replicatSet=dev0\"\n\t\t\t);\n\t\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/driverclient/OrderExample.java",
    "content": "package de.codecentric.driverclient;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.UnknownHostException;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.List;\n\nimport org.bson.Document;\nimport org.bson.conversions.Bson;\n\nimport com.mongodb.BasicDBObject;\nimport com.mongodb.MongoClient;\nimport com.mongodb.MongoException;\nimport com.mongodb.client.FindIterable;\nimport com.mongodb.client.MongoCollection;\nimport com.mongodb.client.MongoDatabase;\n\n/**\n * Simple MongoDB client based on the MongoDB Java driver API.\n */\npublic class OrderExample {\n\n\t/**\n\t * CLI call.\n\t * @param argv command line arguments\n\t * @throws MongoException \n\t * @throws UnknownHostException \n\t * @throws UnsupportedEncodingException \n\t */\n\tpublic static void main(String[] argv) throws UnknownHostException, MongoException, UnsupportedEncodingException {\n\t\tMongoClient mongo;\n\t\t\n\t\t// Default: localhost:27017\n\t\tmongo = new MongoClient();\n\t\t\n\t\tMongoDatabase db = mongo.getDatabase(\"test\");\n\t\tMongoCollection<Document> collection = db.getCollection(\"order\");\n\t\t\n\t\tinsert(collection);\n\t\tfind(mongo);\n\t}\n\t\n\tprivate static void insert(MongoCollection<Document> collection) {\n\t\tDocument order;\n\t\tList<Document> items = new ArrayList<Document>();\n\t\tDocument item;\n\t\t\n\t\t// order\n\t\torder = new Document();\n\t\torder.put(\"date\", new Date());\n\t\torder.put(\"custInfo\" , \"Tobias Trelle\");\n\t\torder.put(\"items\", items);\n\t\t// items\n\t\titem = new Document();\n\t\titem.put(\"quantity\", 1);\n\t\titem.put(\"price\", 47.11);\n\t\titem.put(\"desc\", \"Item #1\");\n\t\titems.add(item);\n\t\titem = new Document();\n\t\titem.put(\"quantity\", 2);\n\t\titem.put(\"price\", 42.0);\n\t\titem.put(\"desc\", \"Item #2\");\n\t\titems.add(item);\n\t\t\n\t\tcollection.insertOne(order);\n\t}\n\t\n\tprivate static void find(MongoClient mongo) {\n\t\tMongoDatabase db = mongo.getDatabase(\"test\");\n\t\tMongoCollection<Document> collection = db.getCollection(\"order\");\n\t\tBson query;\n\t\tFindIterable<Document> cursor;\n\t\t\n\t\tquery = new BasicDBObject(\"items.quantity\", 2);\n\t\tcursor = collection.find(query);\n\n\t\tfor(Document document: cursor ) {\n\t\t\tprintln(document);\n\t\t}\n\t}\n\t\n\tprivate static final void println(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\t\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/driverclient/ReplicaSetTimeout.java",
    "content": "package de.codecentric.driverclient;\n\nimport java.util.ArrayList;\nimport java.util.Arrays;\nimport java.util.Date;\nimport java.util.List;\nimport java.util.concurrent.TimeUnit;\n\nimport org.bson.Document;\n\nimport com.mongodb.MongoClient;\nimport com.mongodb.MongoException;\nimport com.mongodb.ServerAddress;\nimport com.mongodb.WriteConcern;\nimport com.mongodb.client.MongoCollection;\nimport com.mongodb.client.MongoDatabase;\nimport com.mongodb.client.model.BulkWriteOptions;\nimport com.mongodb.client.model.InsertOneModel;\nimport com.mongodb.client.model.WriteModel;\n\npublic class ReplicaSetTimeout {\n\n\tprivate static final WriteConcern WRITE_CONCERN = WriteConcern.ACKNOWLEDGED\n\t\t\t.withW(\"majority\")\n\t\t\t.withWTimeout(200, TimeUnit.MILLISECONDS)\n\t\t\t.withJournal(true)\n\t\t\t;\n\n\tprivate static final int BULK_SIZE = 10000;\n\t\n\tpublic static void main(String[] argv) {\n\t\tnew ReplicaSetTimeout().execute();\n\t}\n\n\tpublic void execute() {\n\t\tMongoClient mongo = null;\n\n\t\tmongo = new MongoClient(Arrays.asList( //\n\t\t\t\tnew ServerAddress(\"localhost\", 27001), //\n\t\t\t\tnew ServerAddress(\"localhost\", 27002), //\n\t\t\t\tnew ServerAddress(\"localhost\", 27003)));\n\n\t\ttry {\n\t\t\tMongoDatabase db = mongo.getDatabase(\"test\");\n\t\t\tMongoCollection<Document> collection = db.getCollection(\"foo\").withWriteConcern(WRITE_CONCERN);\n\t\t\tSystem.out.println(\"WriteConcern: \" + collection.getWriteConcern());\n\t\t\t\t\t\t\n\t\t\t// remove\n\t\t\tcollection.deleteMany(new Document());\n\t\t\t\n\t\t\t// bulk insert\n\t\t\tBulkWriteOptions opts = new BulkWriteOptions();\n\t\t\topts.ordered(true);\n\t\t\t\n\t\t\tlong time = System.currentTimeMillis();\n\t\t\tcollection.bulkWrite( createBulk(), opts );\n\t\t\ttime = System.currentTimeMillis() - time;\n\t\t\tSystem.out.println(\"*** runtime [ms]: \" + time);\n\t\t\t\n\t\t\t\n\t\t} catch (MongoException e) {\n\t\t\te.printStackTrace();\n\t\t} finally {\n\t\t\tif (mongo != null) {\n\t\t\t\tmongo.close();\n\t\t\t}\n\t\t}\n\t\t\n\t}\n\n\tprivate List<WriteModel<Document>> createBulk() {\n\t\tfinal List<WriteModel<Document>> ops = new ArrayList<WriteModel<Document>>();\n\t\tDocument payload;\n\t\t\n\t\tfor(int i=0; i<BULK_SIZE; i++) {\n\t\t\tpayload = new Document();\n\t\t\tpayload.put(\"i\", i);\n\t\t\tpayload.put(\"t\", new Date());\n\t\t\t\n\t\t\tops.add( new InsertOneModel<Document>(payload) );\n\t\t}\n\t\t\n\t\treturn ops;\n\t}\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/driverclient/SimpleMongoClient.java",
    "content": "package de.codecentric.driverclient;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.UnknownHostException;\nimport java.util.Date;\n\nimport org.bson.BSON;\nimport org.bson.Document;\nimport org.bson.conversions.Bson;\n\nimport com.mongodb.BasicDBObject;\nimport com.mongodb.DBObject;\nimport com.mongodb.MongoClient;\nimport com.mongodb.MongoException;\nimport com.mongodb.client.FindIterable;\nimport com.mongodb.client.MongoCollection;\nimport com.mongodb.client.MongoDatabase;\nimport com.mongodb.client.MongoIterable;\n\n/**\n * Simple MongoDB client based on the MongoDB Java driver API.\n */\npublic class SimpleMongoClient {\n\n\t/**\n\t * CLI call.\n\t * @param argv command line arguments\n\t * @throws MongoException \n\t * @throws UnknownHostException \n\t * @throws UnsupportedEncodingException \n\t */\n\tpublic static void main(String[] argv) throws UnknownHostException, MongoException, UnsupportedEncodingException {\n\t\tMongoClient mongo = null;\n\t\t\n\t\ttry {\n\t\t\t// Default: localhost:27017\n\t\t\tmongo = new MongoClient();\n\t\t\t\n\t\t\t// Sharding: mongos server\n\t\t\t// mongo = new MongoClient(\"mongos-1\", 4711);\n\t\t\t\n\t\t\t// Replica set\n//\t\t\tmongo = new MongoClient(\n//\t\ts\t\t\tnew MongoClientURI(\"mongodb://localhost:27001,localhost:27002,localhost:27003/replicaSet=demo-dev\")\n//\t\t\t\t\t);\n\t\t\t\n\t\t\t// use database \"test\"\n\t\t\tMongoDatabase db = mongo.getDatabase(\"test\");\n\t\t\t\n\t\t\t// get collection names\n\t\t\tMongoIterable<String> colls = db.listCollectionNames();\n\t\t\tfor (String s : colls) {\n\t\t\t    println(s);\n\t\t\t}\n\t\t\t\n\t\t\t// use collection \"foo\"\n\t\t\tMongoCollection<Document> collection = db.getCollection(\"foo\");\n\t\t\t\n\t\t\tinsert(collection);\n\t\t\tfind(collection);\n\t\t\t\n\t\t\t// remove(collection);\n\t\t\t// bsonize();\n\t\t\t} finally {\n\t\t\t\tif (mongo != null) {\n\t\t\t\t\tmongo.close();\n\t\t\t\t}\n\t\t\t}\n\t}\n\t\n\tprivate static void remove(MongoCollection<Document> collection) {\n\t\t// alle Dokuemente mit {i: 42}\n\t\tBson criteria = new BasicDBObject(\"i\", 42);\n\t\tcollection.deleteOne(criteria);\n\t\t\n\t\t// alle Dokumente\n\t\tcollection.deleteMany( new BasicDBObject() );\n\t\t\n\t\t// schneller:\n\t\tcollection.drop();\n\t}\n\t\n\t\n\tprivate static void insert(MongoCollection<Document> collection) {\n\t\t// Document speichern\n\t\tDocument doc = new Document();\n\t\tdoc.put(\"date\", new Date());\n\t\tdoc.put(\"i\", 42);\n\t\t\n\t\tcollection.insertOne(doc);\n\t}\n\t\n\tprivate static void find(MongoCollection<Document> collection) {\n\t\tFindIterable<Document> cursor;\n\t\t\n\t\t// alle Dokumente\n\t\tcursor = collection.find();\n\n\t\tfor ( Document document: cursor ) {\n\t\t\tprintln(document);\n\t\t}\n\t}\n\n\tprivate static void find(MongoCollection<Document> collection, Bson query) {\n\t\tFindIterable<Document> cursor;\n\t\t\n\t\t// alle Dokumente\n\t\tcursor = collection.find();\n\t\t\n\t\t// Dokumente mit {i: 42}\n\t\tcursor = collection.find( query ); \n\t\t\n\t\tfor ( Document document: cursor ) {\n\t\t\tprintln(document);\n\t\t}\n\t}\n\t\n\t\n\tprivate static void bsonize() throws UnsupportedEncodingException {\n\t\tfinal String key = \"hello\";\n\t\tfinal String value = \"MongoDB\";\n\t\t\n\t\tbsonize( new BasicDBObject(key, value) );\n\t\tprintln( toString(key.getBytes(\"UTF-8\")) );\n\t\tprintln( toString(value.getBytes(\"UTF-8\")) );\n\t}\n\n\t\n\tprivate static void bsonize(DBObject doc) {\n\t\tfinal byte[] buff = BSON.encode(doc);\n\t\t\n\t\tprintln( toString(buff) );\n\t}\n\t\n\tprivate static String toString(byte[] buff) {\n\t\tfinal StringBuilder sb = new StringBuilder();\n\t\t\n\t\tfor (int i = 0; i < buff.length; i++) {\n\t\t\tsb.append(\"\\\\x\");\n\t\t\t\n\t\t\tString hex = Integer.toHexString(buff[i]);\n\t\t\tif ( hex.length() < 2 ) {\n\t\t\t\tsb.append(\"0\");\n\t\t\t}\n\t\t\t\t\n\t\t\tsb.append(hex);\n\t\t\t;\n\t\t}\n\n\t\treturn sb.toString();\n\t}\n\t\n\tprivate static final void println(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\t\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/notifications/DocumentProducer.java",
    "content": "package de.codecentric.notifications;\n\nimport org.bson.Document;\n\nimport com.mongodb.MongoClient;\nimport com.mongodb.client.MongoCollection;\n\nimport de.codecentric.Connection;\n\npublic class DocumentProducer  {\n    \n\tpublic static void main(String[] args) throws Exception {\n\n\t\ttry (MongoClient client = new MongoClient(Connection.URI)) {\n    \t\tMongoCollection<Document> eventCollection = \n    \t\t\t\tclient.getDatabase(\"test\").getCollection(\"events\");   \t\t\n    \t\t\n    \t\tlong i = 0;\n    \t\twhile (true) {\n    \t\t\tDocument doc = new Document();\n    \t\t\tdoc.put(\"i\", i++);\n    \t\t\tdoc.put(\"even\", i % 2);\n    \t\t\teventCollection.insertOne(doc);\n    \t\t\t//System.out.println(\"inserted: \" + doc);\n    \t\t\tThread.sleep(2000L + (long)(1000*Math.random()));\n    \t\t}\n\t\t}\n    }\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/notifications/EventListener.java",
    "content": "package de.codecentric.notifications;\n\nimport static com.mongodb.client.model.Filters.and;\nimport static com.mongodb.client.model.Filters.eq;\nimport static com.mongodb.client.model.Filters.in;\nimport static java.util.Arrays.asList;\n\nimport org.bson.Document;\n\nimport com.mongodb.MongoClient;\nimport com.mongodb.client.ChangeStreamIterable;\nimport com.mongodb.client.MongoCollection;\nimport com.mongodb.client.model.Aggregates;\n\nimport de.codecentric.Connection;\n\npublic class EventListener  {\n\t\n    public static void main(String[] args) throws Exception {\n\t\ttry (MongoClient client = new MongoClient(Connection.URI)) {\n    \t\tMongoCollection<Document> eventCollection = \n    \t\t\t\tclient.getDatabase(\"test\").getCollection(\"events\");\n\t\n    \t\tChangeStreamIterable<Document> changes = eventCollection.watch(asList( \n    \t\t\t\tAggregates.match( and( asList( \n    \t\t\t\t\tin(\"operationType\", asList(\"insert\")),\n    \t\t\t\t\teq(\"fullDocument.even\", 1L)))\n    \t    )));\n    \t\t\n    \t\tchanges.iterator().forEachRemaining(\n    \t\t\t\tchange -> System.out.println(\"received: \" + change.getFullDocument())\n    \t\t);\n\t\t}\n    }\n}\n"
  },
  {
    "path": "mongodriver/src/main/java/de/codecentric/transaction/SimpleTransaction.java",
    "content": "package de.codecentric.transaction;\n\nimport java.io.UnsupportedEncodingException;\nimport java.net.UnknownHostException;\n\nimport org.bson.Document;\n\nimport com.mongodb.MongoClient;\nimport com.mongodb.MongoException;\nimport com.mongodb.client.ClientSession;\nimport com.mongodb.client.MongoCollection;\nimport com.mongodb.client.MongoDatabase;\n\nimport de.codecentric.Connection;\n\n/**\n * Simple transaction example.\n */\npublic class SimpleTransaction {\n\n\t/**\n\t * CLI call.\n\t * \n\t * @param argv\n\t *            command line arguments\n\t * @throws MongoException\n\t * @throws UnknownHostException\n\t * @throws UnsupportedEncodingException\n\t */\n\tpublic static void main(String[] argv) throws UnknownHostException, MongoException, UnsupportedEncodingException {\n\t\ttry (MongoClient client = new MongoClient(Connection.URI)) {\n\t\t\t// use database \"test\"\n\t\t\tMongoDatabase db = client.getDatabase(\"test\");\n\t\t\t// collection must be created beforehand *outside* the transaction!\n\t\t\tMongoCollection<Document> collection = db.getCollection(\"foo\");\n\n\t\t\ttry (ClientSession clientSession = client.startSession()) {\n\t\t\t\tclientSession.startTransaction();\n\t\t\t\tcollection.insertOne(clientSession, new Document(\"i\", 1));\n\t\t\t\tcollection.insertOne(clientSession, new Document(\"i\", 2));\n\t\t\t\tclientSession.commitTransaction();\n\t\t\t\tprintln(\"Transaction committed sucessfully.\");\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate static final void println(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\n}\n"
  },
  {
    "path": "pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<groupId>de.codecentric</groupId>\n\t<artifactId>springdata-examples</artifactId>\n\t<version>1.0.0</version>\n\t<packaging>pom</packaging>\n\n\t<name>Spring Data Examples</name>\n\n\t<modules>\n\t\t<module>springdata-mongodb</module>\n\t\t<module>springdata-redis</module>\n\t\t<module>springdata-neo4j</module>\n\t\t<module>springdata-jpa</module>\n\t\t<module>spring-boot-mongo</module>\n\t\t<module>mongodriver</module>\n\t</modules>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<java.version>1.8</java.version>\n\t\t<junit.version>4.12</junit.version>\t\t\n\t</properties>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.apache.maven.plugins</groupId>\n\t\t\t\t<artifactId>maven-compiler-plugin</artifactId>\n\t\t\t\t<version>3.5.1</version>\n\t\t\t\t<configuration>\n\t\t\t\t\t<source>${java.version}</source>\n\t\t\t\t\t<target>${java.version}</target>\n\t\t\t\t</configuration>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<organization>\n\t\t<name>codecentric AG</name>\n\t\t<url>http://www.codecentric.de</url>\n\t</organization>\n\n\t<developers>\n\t\t<developer>\n\t\t\t<name>Tobias Trelle</name>\n\t\t\t<email>tobias.trelle@codecentric.de</email>\n\t\t</developer>\n\t</developers>\n\n</project>\n"
  },
  {
    "path": "spring-boot-mongo/.gitignore",
    "content": "target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\nnbproject/private/\nbuild/\nnbbuild/\ndist/\nnbdist/\n.nb-gradle/\n/.mvn/\n"
  },
  {
    "path": "spring-boot-mongo/docker-compose.yml",
    "content": "version: '3'\n\nnetworks:\n  servicenet:\n    driver: bridge\n    \nservices:\n\n  boot-rest-mongo:\n    image: mongoboot/spring-boot-mongo\n    ports:\n      - \"8080:8080\"\n    networks:\n      - servicenet\n    depends_on:\n      - mongo\n    environment:\n      SPRING_DATA_MONGODB_URI: mongodb://mongo:27017/test\n\n  mongo:\n    image: mongo:3.4.10\n    ports: \n      - \"27017:27017\"\n    networks:\n      - servicenet\n    volumes:\n      - /data/db:/data/db\n"
  },
  {
    "path": "spring-boot-mongo/mvnw",
    "content": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven2 Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n           #\n           # Look for the Apple JDKs first to preserve the existing behaviour, and then look\n           # for the new JDKs provided by Oracle.\n           #\n           if [ -z \"$JAVA_HOME\" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then\n             #\n             # Apple JDKs\n             #\n             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home\n           fi\n\n           if [ -z \"$JAVA_HOME\" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then\n             #\n             # Apple JDKs\n             #\n             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home\n           fi\n\n           if [ -z \"$JAVA_HOME\" ] && [ -L \"/Library/Java/JavaVirtualMachines/CurrentJDK\" ] ; then\n             #\n             # Oracle JDKs\n             #\n             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home\n           fi\n\n           if [ -z \"$JAVA_HOME\" ] && [ -x \"/usr/libexec/java_home\" ]; then\n             #\n             # Apple JDKs\n             #\n             export JAVA_HOME=`/usr/libexec/java_home`\n           fi\n           ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Migwn, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\n  # TODO classpath?\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\nfi\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n  local basedir=$(pwd)\n  local wdir=$(pwd)\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    wdir=$(cd \"$wdir/..\"; pwd)\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# Provide a \"standardized\" way to retrieve the CLI args that will\n# work with both Windows and non-Windows executions.\nMAVEN_CMD_LINE_ARGS=\"$MAVEN_CONFIG $@\"\nexport MAVEN_CMD_LINE_ARGS\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} \"$@\"\n"
  },
  {
    "path": "spring-boot-mongo/mvnw.cmd",
    "content": "@REM ----------------------------------------------------------------------------\n@REM Licensed to the Apache Software Foundation (ASF) under one\n@REM or more contributor license agreements.  See the NOTICE file\n@REM distributed with this work for additional information\n@REM regarding copyright ownership.  The ASF licenses this file\n@REM to you under the Apache License, Version 2.0 (the\n@REM \"License\"); you may not use this file except in compliance\n@REM with the License.  You may obtain a copy of the License at\n@REM\n@REM    http://www.apache.org/licenses/LICENSE-2.0\n@REM\n@REM Unless required by applicable law or agreed to in writing,\n@REM software distributed under the License is distributed on an\n@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n@REM KIND, either express or implied.  See the License for the\n@REM specific language governing permissions and limitations\n@REM under the License.\n@REM ----------------------------------------------------------------------------\n\n@REM ----------------------------------------------------------------------------\n@REM Maven2 Start Up Batch script\n@REM\n@REM Required ENV vars:\n@REM JAVA_HOME - location of a JDK home dir\n@REM\n@REM Optional ENV vars\n@REM M2_HOME - location of maven2's installed home dir\n@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands\n@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending\n@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven\n@REM     e.g. to debug Maven itself, use\n@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n@REM ----------------------------------------------------------------------------\n\n@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'\n@echo off\n@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'\n@if \"%MAVEN_BATCH_ECHO%\" == \"on\"  echo %MAVEN_BATCH_ECHO%\n\n@REM set %HOME% to equivalent of $HOME\nif \"%HOME%\" == \"\" (set \"HOME=%HOMEDRIVE%%HOMEPATH%\")\n\n@REM Execute a user defined script before this one\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPre\n@REM check for pre script, once with legacy .bat ending and once with .cmd ending\nif exist \"%HOME%\\mavenrc_pre.bat\" call \"%HOME%\\mavenrc_pre.bat\"\nif exist \"%HOME%\\mavenrc_pre.cmd\" call \"%HOME%\\mavenrc_pre.cmd\"\n:skipRcPre\n\n@setlocal\n\nset ERROR_CODE=0\n\n@REM To isolate internal variables from possible post scripts, we use another setlocal\n@setlocal\n\n@REM ==== START VALIDATION ====\nif not \"%JAVA_HOME%\" == \"\" goto OkJHome\n\necho.\necho Error: JAVA_HOME not found in your environment. >&2\necho Please set the JAVA_HOME variable in your environment to match the >&2\necho location of your Java installation. >&2\necho.\ngoto error\n\n:OkJHome\nif exist \"%JAVA_HOME%\\bin\\java.exe\" goto init\n\necho.\necho Error: JAVA_HOME is set to an invalid directory. >&2\necho JAVA_HOME = \"%JAVA_HOME%\" >&2\necho Please set the JAVA_HOME variable in your environment to match the >&2\necho location of your Java installation. >&2\necho.\ngoto error\n\n@REM ==== END VALIDATION ====\n\n:init\n\nset MAVEN_CMD_LINE_ARGS=%*\n\n@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".\n@REM Fallback to current working directory if not found.\n\nset MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%\nIF NOT \"%MAVEN_PROJECTBASEDIR%\"==\"\" goto endDetectBaseDir\n\nset EXEC_DIR=%CD%\nset WDIR=%EXEC_DIR%\n:findBaseDir\nIF EXIST \"%WDIR%\"\\.mvn goto baseDirFound\ncd ..\nIF \"%WDIR%\"==\"%CD%\" goto baseDirNotFound\nset WDIR=%CD%\ngoto findBaseDir\n\n:baseDirFound\nset MAVEN_PROJECTBASEDIR=%WDIR%\ncd \"%EXEC_DIR%\"\ngoto endDetectBaseDir\n\n:baseDirNotFound\nset MAVEN_PROJECTBASEDIR=%EXEC_DIR%\ncd \"%EXEC_DIR%\"\n\n:endDetectBaseDir\n\nIF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig\n\n@setlocal EnableExtensions EnableDelayedExpansion\nfor /F \"usebackq delims=\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a\n@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%\n\n:endReadAdditionalConfig\n\nSET MAVEN_JAVA_EXE=\"%JAVA_HOME%\\bin\\java.exe\"\n\nset WRAPPER_JAR=\"\".\\.mvn\\wrapper\\maven-wrapper.jar\"\"\nset WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\n%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% \"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%\" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%\nif ERRORLEVEL 1 goto error\ngoto end\n\n:error\nset ERROR_CODE=1\n\n:end\n@endlocal & set ERROR_CODE=%ERROR_CODE%\n\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPost\n@REM check for post script, once with legacy .bat ending and once with .cmd ending\nif exist \"%HOME%\\mavenrc_post.bat\" call \"%HOME%\\mavenrc_post.bat\"\nif exist \"%HOME%\\mavenrc_post.cmd\" call \"%HOME%\\mavenrc_post.cmd\"\n:skipRcPost\n\n@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'\nif \"%MAVEN_BATCH_PAUSE%\" == \"on\" pause\n\nif \"%MAVEN_TERMINATE_CMD%\" == \"on\" exit %ERROR_CODE%\n\nexit /B %ERROR_CODE%"
  },
  {
    "path": "spring-boot-mongo/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>1.5.8.RELEASE</version>\n\t\t<relativePath/>\n\t</parent>\n\n\t<groupId>de.codecentric</groupId>\n\t<artifactId>spring-boot-mongo</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<packaging>jar</packaging>\n\t<name>SpringBoot MongoDB REST</name>\n\t<description>Demo project for Spring Boot MongoDB</description>\n\n\t<properties>\n\t\t<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n\t\t<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n\t\t<java.version>1.8</java.version>\n        <docker-maven-plugin.version>0.4.11</docker-maven-plugin.version>\t\t\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-mongodb</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-data-rest</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-actuator</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n\t<profiles>\n\t\t<profile>\n\t\t\t<id>docker</id>\n\t\t\t<build>\n\t\t\t\t<plugins>\n\t\t\t        <plugin>\n\t\t\t            <groupId>com.spotify</groupId>\n\t\t\t            <artifactId>docker-maven-plugin</artifactId>\n\t\t\t            <version>${docker-maven-plugin.version}</version>\t\n\t\t\t            <configuration>\n\t\t\t                <imageName>mongoboot/${project.artifactId}</imageName>\n\t\t\t                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>\n\t\t\t                <resources>\n\t\t\t                    <resource>\n\t\t\t                        <targetPath>/</targetPath>\n\t\t\t                        <directory>${project.build.directory}</directory>\n\t\t\t                        <include>${project.build.finalName}.jar</include>\n\t\t\t                    </resource>\n\t\t\t                </resources>\n\t\t\t            </configuration>\n\t\t\t            <executions>\n\t\t\t                <execution>\n\t\t\t                    <id>build-image</id>\n\t\t\t                    <phase>package</phase>\n\t\t\t                    <goals>\n\t\t\t                        <goal>build</goal>\n\t\t\t                    </goals>\n\t\t\t                </execution>\n\t\t\t            </executions>\n\t\t\t        </plugin>\t\n\t\t\t\t</plugins>\n\t\t\t</build>\n\t\t</profile>\n\t</profiles>\n\n</project>\n"
  },
  {
    "path": "spring-boot-mongo/src/main/docker/Dockerfile",
    "content": "FROM java:8\nVOLUME /tmp\nADD spring-boot-mongo*.jar mongorest.jar\nRUN sh -c 'touch /mongorest.jar'\nENV JAVA_OPTS=\"-Xmx256m -Xms128m\"\nENTRYPOINT [ \"sh\", \"-c\", \"java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /mongorest.jar\" ]"
  },
  {
    "path": "spring-boot-mongo/src/main/java/de/codecentric/mongoboot/Item.java",
    "content": "package de.codecentric.mongoboot;\n\nimport org.springframework.data.mongodb.core.mapping.Field;\n\npublic class Item {\n\n\tint quantity;\n\t\n\tdouble price;\n\t\n\t@Field(\"desc\")\n\tString description;\n\n\tpublic int getQuantity() {\n\t\treturn quantity;\n\t}\n\n\tpublic void setQuantity(int quantity) {\n\t\tthis.quantity = quantity;\n\t}\n\n\tpublic double getPrice() {\n\t\treturn price;\n\t}\n\n\tpublic void setPrice(double price) {\n\t\tthis.price = price;\n\t}\n\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\t\n\t\n\t\n}\n"
  },
  {
    "path": "spring-boot-mongo/src/main/java/de/codecentric/mongoboot/Order.java",
    "content": "package de.codecentric.mongoboot;\n\nimport java.util.Date;\nimport java.util.List;\n\nimport org.springframework.data.annotation.Id;\nimport org.springframework.data.mongodb.core.mapping.Field;\n\npublic class Order {\n\n\t@Id String id;\n\t\n\t@Field(\"custInfo\")\n\tString text;\n\t\n\t@Field(\"date\")\n\tDate ordered;\n\t\n\tList<Item> items;\n\n\tpublic String getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(String id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getText() {\n\t\treturn text;\n\t}\n\n\tpublic void setText(String text) {\n\t\tthis.text = text;\n\t}\n\n\tpublic Date getOrdered() {\n\t\treturn ordered;\n\t}\n\n\tpublic void setOrdered(Date ordered) {\n\t\tthis.ordered = ordered;\n\t}\n\n\tpublic List<Item> getItems() {\n\t\treturn items;\n\t}\n\n\tpublic void setItems(List<Item> items) {\n\t\tthis.items = items;\n\t}\n\t\n}\n"
  },
  {
    "path": "spring-boot-mongo/src/main/java/de/codecentric/mongoboot/OrderRepository.java",
    "content": "package de.codecentric.mongoboot;\n\nimport java.util.List;\n\nimport org.springframework.data.mongodb.repository.MongoRepository;\nimport org.springframework.data.repository.query.Param;\nimport org.springframework.data.rest.core.annotation.RepositoryRestResource;\n\n@RepositoryRestResource()\npublic interface OrderRepository extends MongoRepository<Order, String> {\n\n\tList<Order> findByText(@Param(\"name\") String name);\n\t\n}\n"
  },
  {
    "path": "spring-boot-mongo/src/main/java/de/codecentric/mongoboot/SpringBootMongoApplication.java",
    "content": "package de.codecentric.mongoboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class SpringBootMongoApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(SpringBootMongoApplication.class, args);\n\t}\n}\n"
  },
  {
    "path": "spring-boot-mongo/src/main/resources/application.properties",
    "content": "spring.data.rest.base-path=/rest\nmanagement.security.enabled=false"
  },
  {
    "path": "spring-boot-mongo/src/test/java/de/codecentric/mongoboot/SpringBootMongoApplicationTests.java",
    "content": "package de.codecentric.mongoboot;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.test.context.junit4.SpringRunner;\n\n@RunWith(SpringRunner.class)\n@SpringBootTest\npublic class SpringBootMongoApplicationTests {\n\n\t@Test\n\tpublic void contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "springdata-jpa/.gitignore",
    "content": "/target\n\r\n/.settings\n\r\n.classpath\r\n.project"
  },
  {
    "path": "springdata-jpa/README.md",
    "content": "# Spring Data Blog Series\r\n\r\nThis projects holds the Java source examples for my blog post series on the Spring Data project:\r\n\r\n* [GridFS Support in Spring Data MongoDB](http://blog.codecentric.de/en/2012/07/gridfs-support-in-spring-data-mongodb/)\r\n* [Part 6: Spring Data Redis](http://blog.codecentric.de/en/2012/04/spring-data-redis/)\r\n* [Part 5: Spring Data Neo4j](http://blog.codecentric.de/en/2012/02/spring-data-neo4j/)\r\n* [Part 4: Geospatial Queries with Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/)\r\n* [Part 3: Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb/)\r\n* [Part 2: Spring Data JPA](http://blog.codecentric.de/en/2012/01/spring-data-jpa/)\r\n* [Part 1: Spring Data Commons](http://blog.codecentric.de/en/2011/12/spring-data-commons/)\r\n\r\n## Usage\r\n\r\nThe projects are using a Maven based build. To run the tests on the command line use\r\n\r\n\tmvn clean test\r\n   \r\nIf you want to use an IDE like Eclipse run\r\n\r\n\tmvn eclipse:eclipse\r\n   \r\nand set the Eclipse variable M2_REPO pointing to your local Maven repository. Or just import the project as an existing Maven project if you are using the m2 plugin.\r\n \r\n"
  },
  {
    "path": "springdata-jpa/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>de.codecentric</groupId>\n\t\t<artifactId>springdata-examples</artifactId>\n\t\t<version>1.0.0</version>\n\t</parent>\n\n\t<artifactId>springdata-jpa-examples</artifactId>\n\t<packaging>jar</packaging>\n\t<name>Spring Data JPA Examples</name>\n\t<url>https://github.com/ttrelle/spring-data-examples/tree/master/springdata-jpa</url>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.data</groupId>\n\t\t\t<artifactId>spring-data-jpa</artifactId>\n\t\t\t<version>1.9.4.RELEASE</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.hibernate</groupId>\n\t\t\t<artifactId>hibernate-entitymanager</artifactId>\n\t\t\t<version>4.2.21.Final</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>joda-time</groupId>\n\t\t\t<artifactId>joda-time</artifactId>\n\t\t\t<version>2.0</version>\n\t\t</dependency>\n\n\t\t<!-- <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> \n\t\t\t<version>1.6.3</version> </dependency> -->\n\n\t\t<dependency>\n\t\t\t<groupId>cglib</groupId>\n\t\t\t<artifactId>cglib-nodep</artifactId>\n\t\t\t<version>2.2</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>junit</groupId>\n\t\t\t<artifactId>junit</artifactId>\n\t\t\t<version>${junit.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework</groupId>\n\t\t\t<artifactId>spring-test</artifactId>\n\t\t\t<version>4.1.9.RELEASE</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.hsqldb</groupId>\n\t\t\t<artifactId>hsqldb</artifactId>\n\t\t\t<version>1.8.0.10</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n</project>\n"
  },
  {
    "path": "springdata-jpa/src/main/java/jpa/domain/User.java",
    "content": "package jpa.domain;\n\nimport java.util.Date;\n\nimport javax.persistence.Entity;\nimport javax.persistence.Id;\nimport javax.persistence.NamedQueries;\nimport javax.persistence.NamedQuery;\n\n@Entity\n@NamedQueries( {\n\t@NamedQuery( name=\"User.findByUser5\", query = \"SELECT u FROM User u where u.fullName = 'User 5'\" ),\n\t@NamedQuery( name=\"User.classicQuery\", query = \"SELECT u FROM User u where u.fullName = :fullName\" )\n})\npublic class User {\n\n\t@Id private String id;\n\t\n\tprivate String fullName;\n\t\n\tprivate Date lastLogin;\n\n\tpublic User() {}\n\t\n\tpublic User(String id, String fullName) {\n\t\tthis.id = id;\n\t\tthis.fullName = fullName;\n\t\tthis.lastLogin = new Date();\n\t}\n\t\n\t\n\tpublic String getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(String id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic String getFullName() {\n\t\treturn fullName;\n\t}\n\n\tpublic void setFullName(String fullName) {\n\t\tthis.fullName = fullName;\n\t}\n\n\tpublic Date getLastLogin() {\n\t\treturn lastLogin;\n\t}\n\n\tpublic void setLastLogin(Date lastLogin) {\n\t\tthis.lastLogin = lastLogin;\n\t}\n\n\t@Override\n\tpublic int hashCode() {\n\t\tfinal int prime = 31;\n\t\tint result = 1;\n\t\tresult = prime * result + ((id == null) ? 0 : id.hashCode());\n\t\treturn result;\n\t}\n\n\t@Override\n\tpublic boolean equals(Object obj) {\n\t\tif (this == obj)\n\t\t\treturn true;\n\t\tif (obj == null)\n\t\t\treturn false;\n\t\tif (getClass() != obj.getClass())\n\t\t\treturn false;\n\t\tUser other = (User) obj;\n\t\tif (id == null) {\n\t\t\tif (other.id != null)\n\t\t\t\treturn false;\n\t\t} else if (!id.equals(other.id))\n\t\t\treturn false;\n\t\treturn true;\n\t}\n\t\n\t\n\t\n}\n"
  },
  {
    "path": "springdata-jpa/src/main/java/jpa/repo/ClassicUserRepository.java",
    "content": "package jpa.repo;\n\nimport java.util.List;\n\nimport javax.persistence.EntityManager;\nimport javax.persistence.PersistenceContext;\n\nimport jpa.domain.User;\n\nimport org.springframework.stereotype.Repository;\n\n@Repository\npublic class ClassicUserRepository {\n\n\t @PersistenceContext EntityManager em;\n\n\t public List<User> findByFullName(String fullName) {\n\t\t return getEntityManger()\n\t\t\t\t .createNamedQuery(\"User.classicQuery\", User.class)\n\t\t\t\t .setParameter(\"fullName\", fullName)\n\t\t\t\t .getResultList();\n\t }\n\t \n\t \n\t private EntityManager getEntityManger() {\n\t\t return em;\n\t }\n\t\n}\n"
  },
  {
    "path": "springdata-jpa/src/main/java/jpa/repo/UserRepository.java",
    "content": "package jpa.repo;\r\n\r\nimport java.util.List;\r\n\r\nimport jpa.domain.User;\r\n\r\nimport org.springframework.data.domain.Pageable;\r\nimport org.springframework.data.domain.Sort;\r\nimport org.springframework.data.jpa.repository.JpaRepository;\r\nimport org.springframework.data.jpa.repository.Query;\r\nimport org.springframework.data.repository.query.Param;\r\nimport org.springframework.transaction.annotation.Propagation;\r\nimport org.springframework.transaction.annotation.Transactional;\r\n\r\npublic interface UserRepository extends JpaRepository<User, String> {\r\n\r\n\tList<User> findByFullName(String fullName);\r\n\r\n\tList<User> findByFullName(String fullName, Sort sort);\r\n\r\n\tList<User> findByFullName(String fullName, Pageable paging);\r\n\t\r\n\tList<User> findByUser5();\r\n\r\n\tList<User> findByOrm();\r\n\t\r\n\t@Transactional(timeout = 2, propagation = Propagation.REQUIRED)\r\n\t@Query(\"SELECT u FROM User u WHERE u.fullName = 'User 3'\")\r\n\tList<User> findByGivenQuery();\r\n\t\r\n\tList<User> findByIdAndFullName(@Param(\"id\") String id, @Param(\"fullName\") String fullname);\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-jpa/src/main/resources/META-INF/orm.xml",
    "content": "<?xml version=\"1.0\"?>\r\n<entity-mappings \r\n\txmlns=\"http://java.sun.com/xml/ns/persistence/orm\" \r\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n\txsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd\" \r\n\tversion=\"1.0\">\r\n\t<entity class=\"jpa.domain.User\">\r\n\t\t<named-query name=\"User.findByOrm\">\r\n\t\t\t<query>\r\n\t\t\t\tSELECT u FROM User u WHERE u.fullName = 'User 2'\r\n\t\t\t</query>\r\n\t\t</named-query>\r\n\t</entity>\r\n</entity-mappings>"
  },
  {
    "path": "springdata-jpa/src/main/resources/META-INF/persistence.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<persistence version=\"2.0\" xmlns=\"http://java.sun.com/xml/ns/persistence\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\r\n    <persistence-unit name=\"pu1\">\r\n    \t<class>jpa.domain.User</class>\r\n    </persistence-unit>\r\n</persistence>"
  },
  {
    "path": "springdata-jpa/src/test/java/jpa/repo/JpaRepoTest.java",
    "content": "package jpa.repo;\r\n\r\nimport static org.hamcrest.CoreMatchers.is;\r\nimport static org.hamcrest.CoreMatchers.notNullValue;\r\nimport static org.junit.Assert.assertThat;\r\n\r\nimport java.util.List;\r\n\r\nimport jpa.domain.User;\r\n\r\nimport org.junit.Before;\r\nimport org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.data.domain.Page;\r\nimport org.springframework.data.domain.PageRequest;\r\nimport org.springframework.data.domain.Sort;\r\nimport org.springframework.test.context.ContextConfiguration;\r\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\r\n\r\n/**\r\n * Tests for Spring Data JPA.\r\n * \r\n * @author Tobias Trelle\r\n */\r\n@RunWith(SpringJUnit4ClassRunner.class)\r\n@ContextConfiguration\r\npublic class JpaRepoTest {\r\n\t\r\n\t @Autowired UserRepository repo;\r\n\r\n\t @Autowired ClassicUserRepository classicRepo;\r\n\t  \r\n\t @Before public void setUp() {\r\n\t\t for ( int i = 0; i < 6; i++ ) {\r\n\t\t\t repo.save( new User( String.format(\"user%02d\", i), \"User \" + i ) );\r\n\t\t }\r\n\t }\r\n\t \r\n\t @Test public void shouldUseClassicRepository() {\r\n\t\t List<User> users;\r\n\r\n\t\t // when\r\n\t\t users = classicRepo.findByFullName(\"User 1\");\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 1\");\r\n\t }\r\n\t \r\n\t @Test public void shouldPageUsers() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t Page<User> page = repo.findAll( new PageRequest(2, 2 ) );\r\n\t\t users = page.getContent();\r\n\t \r\n\t\t // then\r\n\t\t assertUserCount(users, 2);\r\n\t }\r\n\r\n\t @Test public void shouldFindByFullnameQuery() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findByFullName(\"User 5\");\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 5\");\r\n\t }\r\n\r\n\t @Test public void shouldFindByFullnameQueryWithSort() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findByFullName(\"User 5\", new Sort( new Sort.Order(Sort.Direction.DESC,\"fullName\")));\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 5\");\r\n\t }\r\n\t \r\n\t @Test public void shouldUseExistingNamedQuery() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findByUser5();\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 5\");\r\n\t }\r\n\t \r\n\t @Test public void shouldUseXmlNamedQuery() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findByOrm();\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 2\");\r\n\t }\t \r\n\r\n\t @Test public void shouldUseSpringDataQuery() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findByGivenQuery();\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserByFullName(users, \"User 3\");\r\n\t }\t \r\n\t \r\n\t @Test public void shouldIgnoreNullQueryParameters() {\r\n\t\t List<User> usersById, usersByFullName;\r\n\r\n\t\t // when\r\n\t\t usersById = repo.findByIdAndFullName(\"user01\", null);\r\n\t\t usersByFullName = repo.findByIdAndFullName(null, \"User 01\");\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserCount(usersById, 0);\r\n\t\t assertUserCount(usersByFullName, 0);\r\n\t }\r\n\t \r\n\t @Test public void shouldSortByTwoCriteria() {\r\n\t\t List<User> users;\r\n\t\t \r\n\t\t // when\r\n\t\t users = repo.findAll( new Sort(\r\n\t\t\t\t new Sort.Order(Sort.Direction.ASC, \"id\"),\r\n\t\t\t\t new Sort.Order(Sort.Direction.DESC, \"fullName\")\r\n\t\t\t\t )\r\n\t\t );\r\n\t\t \r\n\t\t // then\r\n\t\t assertUserCount(users, 6);\r\n\t }\r\n\t \r\n\t private static void assertUserByFullName(List<User> users, String fullName)  {\r\n\t\t assertUserCount(users, 1);\r\n\t\t assertThat( \"Mismatch full name\", users.get(0).getFullName(), is(fullName));\r\n\t }\r\n\r\n\t private static void assertUserCount(List<User> users, int expected) {\r\n\t\t assertThat( users, notNullValue() );\r\n\t\t assertThat( \"Mismatch user count\", users.size(), is(expected));\r\n\t }\r\n\t \r\n}\r\n"
  },
  {
    "path": "springdata-jpa/src/test/resources/jpa/repo/JpaRepoTest-context.xml",
    "content": "<?xml version=\"1.0\"?>\n<beans\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n\txmlns=\"http://www.springframework.org/schema/beans\"\n \txmlns:context=\"http://www.springframework.org/schema/context\"\n\txmlns:jpa=\"http://www.springframework.org/schema/data/jpa\"\n\txmlns:tx=\"http://www.springframework.org/schema/tx\"\n\txmlns:jdbc=\"http://www.springframework.org/schema/jdbc\"\n\txmlns:jee=\"http://www.springframework.org/schema/jee\"\t\n\txsi:schemaLocation=\"\n\t\thttp://www.springframework.org/schema/beans \n\t\thttp://www.springframework.org/schema/beans/spring-beans.xsd\n\t\thttp://www.springframework.org/schema/context \n\t\thttp://www.springframework.org/schema/context/spring-context.xsd\n        http://www.springframework.org/schema/tx \n        http://www.springframework.org/schema/tx/spring-tx.xsd\n        http://www.springframework.org/schema/jdbc \n        http://www.springframework.org/schema/jdbc/spring-jdbc.xsd\n        http://www.springframework.org/schema/data/jpa \n        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd\n        http://www.springframework.org/schema/jee \n        http://www.springframework.org/schema/jee/spring-jee.xsd\n        \">\n\n\t<jdbc:embedded-database id=\"dataSource\" type=\"HSQL\" />\n\n\t<!-- Scan for SD repos -->\n\t<jpa:repositories base-package=\"jpa.repo\" query-lookup-strategy=\"create-if-not-found\" />\n\n \t<!-- EM factory -->\n    <bean id=\"entityManagerFactory\"\n        class=\"org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean\">\n        <property name=\"dataSource\" ref=\"dataSource\" />\n        <property name=\"jpaVendorAdapter\">\n            <bean class=\"org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter\">\n                <property name=\"generateDdl\" value=\"true\" />\n            </bean>\n        </property>\n    </bean>\n \n    <context:component-scan base-package=\"jpa.repo\" />\n    \n    <context:annotation-config />\n\n\t<!--  TX Manager --> \n    <bean id=\"transactionManager\" class=\"org.springframework.orm.jpa.JpaTransactionManager\" />\n    <tx:annotation-driven />\n\t\n</beans>"
  },
  {
    "path": "springdata-mongodb/.gitignore",
    "content": "/target\n/.settings\n.classpath\n.project\n/maven-eclipse.xml\n/.externalToolBuilders/\n"
  },
  {
    "path": "springdata-mongodb/README.md",
    "content": "# Spring Data Blog Series\r\n\r\nThis projects holds the Java source examples for my blog post series on the Spring Data project:\r\n\r\n* [GridFS Support in Spring Data MongoDB](http://blog.codecentric.de/en/2012/07/gridfs-support-in-spring-data-mongodb/)\r\n* [Part 6: Spring Data Redis](http://blog.codecentric.de/en/2012/04/spring-data-redis/)\r\n* [Part 5: Spring Data Neo4j](http://blog.codecentric.de/en/2012/02/spring-data-neo4j/)\r\n* [Part 4: Geospatial Queries with Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/)\r\n* [Part 3: Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb/)\r\n* [Part 2: Spring Data JPA](http://blog.codecentric.de/en/2012/01/spring-data-jpa/)\r\n* [Part 1: Spring Data Commons](http://blog.codecentric.de/en/2011/12/spring-data-commons/)\r\n\r\n## Usage\r\n\r\nThe projects are using a Maven based build. To run the tests on the command line use\r\n\r\n\tmvn clean test\r\n   \r\nIf you want to use an IDE like Eclipse run\r\n\r\n\tmvn eclipse:eclipse\r\n   \r\nand set the Eclipse variable M2_REPO pointing to your local Maven repository. Or just import the project as an existing Maven project if you are using the m2 plugin.\r\n \r\n"
  },
  {
    "path": "springdata-mongodb/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>de.codecentric</groupId>\n\t\t<artifactId>springdata-examples</artifactId>\n\t\t<version>1.0.0</version>\n\t</parent>\n\n\t<artifactId>springdata-mongodb-examples</artifactId>\n\t<packaging>jar</packaging>\n\t<name>Spring Data MongoDB Examples</name>\n\t<url>https://github.com/ttrelle/spring-data-examples/tree/master/springdata-mongodb</url>\n\n\t<properties>\n\t\t<spring.data.mongodb.version>2.1.8.RELEASE</spring.data.mongodb.version>\n\t\t<mongo.driver.version>3.4.2</mongo.driver.version>\n\t\t<spring.version>4.2.9.RELEASE</spring.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<!--  \n\t\t<dependency>\n\t\t\t<groupId>org.mongodb</groupId>\n\t\t\t<artifactId>mongo-java-driver</artifactId>\n\t\t\t<version>${mongo.driver.version}</version>\n\t\t</dependency>\n\t\t-->\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.data</groupId>\n\t\t\t<artifactId>spring-data-mongodb</artifactId>\n\t\t\t<version>${spring.data.mongodb.version}</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>junit</groupId>\n\t\t\t<artifactId>junit</artifactId>\n\t\t\t<version>${junit.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework</groupId>\n\t\t\t<artifactId>spring-test</artifactId>\n\t\t\t<version>${spring.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<resources>\n\t\t\t<resource>\n\t\t\t\t<directory>src/misc/java</directory>\n\t\t\t\t<targetPath>test-classes</targetPath>\n\t\t\t</resource>\n\t\t\t<resource>\n\t\t\t\t<directory>src/misc/resources</directory>\n\t\t\t\t<targetPath>test-classes</targetPath>\n\t\t\t</resource>\n\t\t</resources>\n\t</build>\n\n\t<repositories>\n\t\t<repository>\n\t\t\t<id>spring-snapshot</id>\n\t\t\t<name>Spring Maven SNAPSHOT Repository</name>\n\t\t\t<url>http://repo.springsource.org/libs-snapshot</url>\n\t\t</repository>\n\t</repositories>\n</project>\n"
  },
  {
    "path": "springdata-mongodb/rs-dev0.yml",
    "content": "version: '3.4'\n\nservices:\n\n  # Primary\n  mongo1:\n    image: 'bitnami/mongodb:4.0.9'\n    container_name: 'rs-dev0-1'\n    environment:\n      - MONGODB_PORT_NUMBER=27001\n      - MONGODB_REPLICA_SET_NAME=dev0\n      - MONGODB_REPLICA_SET_MODE=primary\n      - MONGODB_ADVERTISED_HOSTNAME=mongo1\n    ports:\n      - \"27001:27001\"\n\n  # Secondary\n  mongo2:\n    image: 'bitnami/mongodb:4.0.9'\n    container_name: 'rs-dev0-2'\n    depends_on:\n      - mongo1\n    ports:\n      - \"27002:27002\"\n    environment:\n      - MONGODB_PORT_NUMBER=27002\n      - MONGODB_REPLICA_SET_NAME=dev0\n      - MONGODB_REPLICA_SET_MODE=secondary\n      - MONGODB_ADVERTISED_HOSTNAME=mongo2\n      - MONGODB_PRIMARY_HOST=mongo1\n      - MONGODB_PRIMARY_PORT_NUMBER=27001\n\n  # Arbiter\n  mongo3:\n    image: 'bitnami/mongodb:4.0.9'\n    container_name: 'rs-dev0-3'\n    depends_on:\n      - mongo1\n    ports:\n      - \"27003:27003\"\n    environment:\n      - MONGODB_PORT_NUMBER=27003      \n      - MONGODB_REPLICA_SET_NAME=dev0\n      - MONGODB_REPLICA_SET_MODE=arbiter\n      - MONGODB_ADVERTISED_HOSTNAME=mongo3\n      - MONGODB_PRIMARY_HOST=mongo1\n      - MONGODB_PRIMARY_PORT_NUMBER=27001\n\nvolumes:\n  mongodb_master_data:\n    driver: local"
  },
  {
    "path": "springdata-mongodb/single-node.yml",
    "content": "version: \"2\"\n\nservices:\n  mongodb:\n      image: mongo:4.0.9\n      container_name: \"mongodb\"\n      volumes:\n        - ./datasets:/datasets\n        - ./uebungen:/uebungen\n      ports:\n          - 27017:27017\n"
  },
  {
    "path": "springdata-mongodb/src/main/bat/masterslave.bat",
    "content": "start mongod --rest --port 8000 --dbpath /var/master --replSet cluster0\r\nstart mongod --rest --port 8001 --dbpath /var/slave1 --replSet cluster0\r\nstart mongod --rest --port 8002 --dbpath /var/slave2 --replSet cluster0"
  },
  {
    "path": "springdata-mongodb/src/main/bat/shard.bat",
    "content": "start mongod --shardsvr --rest --port 9000 --dbpath /var/shard1\r\nstart mongod --shardsvr --rest --port 9001 --dbpath /var/shard2\r\nstart mongod --configsvr --rest --port 9002 --dbpath /var/conf1\r\npause\r\nstart mongos --port 9003 --configdb tmp-pc:9002 --chunkSize 1\r\n\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/Adresse.java",
    "content": "package mongodb;\n\npublic class Adresse {\n\n}\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/PointOfInterest.java",
    "content": "package mongodb;\n\nimport org.springframework.data.geo.Point;\nimport org.springframework.data.mongodb.core.index.Indexed;\nimport org.springframework.data.mongodb.core.mapping.Document;\nimport org.springframework.data.mongodb.core.mapping.Field;\n\n@Document(collection = \"pois\")\npublic class PointOfInterest {\n\n\t@Indexed private String typ;\n\tprivate String tags;\n\t\n\t@Field(\"desc\") private String description;\n\tprivate Adresse adresse;\n\t\n\tprivate Point location;\n\t\n\tpublic String getTyp() {\n\t\treturn typ;\n\t}\n\t\n\tpublic void setTyp(String typ) {\n\t\tthis.typ = typ;\n\t}\n\t\n\tpublic String getTags() {\n\t\treturn tags;\n\t}\n\t\n\tpublic void setTags(String tags) {\n\t\tthis.tags = tags;\n\t}\n\t\n\tpublic String getDescription() {\n\t\treturn description;\n\t}\n\t\n\tpublic void setDescription(String description) {\n\t\tthis.description = description;\n\t}\n\t\n\tpublic Adresse getAdresse() {\n\t\treturn adresse;\n\t}\n\t\n\tpublic void setAdresse(Adresse adresse) {\n\t\tthis.adresse = adresse;\n\t}\n\t\n\tpublic Point getLocation() {\n\t\treturn location;\n\t}\n\t\n\tpublic void setLocation(Point location) {\n\t\tthis.location = location;\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/geo/Location.java",
    "content": "package mongodb.geo;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.mongodb.core.geo.GeoJsonPoint;\r\n\r\n/**\r\n * A named location, using GeoJSON API.\r\n * @author Tobias Trelle\r\n */\r\npublic class Location {\r\n\r\n\t@Id private String id;\r\n\t\r\n\tprivate GeoJsonPoint position;\r\n\t\r\n\tpublic Location() {}\r\n\t\r\n\tpublic Location(String id, double x, double y) {\r\n\t\tthis.id = id;\r\n\t\tthis.position = new GeoJsonPoint(x,y);\r\n\t}\r\n\t\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tpublic GeoJsonPoint getPosition() {\r\n\t\treturn position;\r\n\t}\r\n\r\n\tpublic void setPosition(GeoJsonPoint pos) {\r\n\t\tthis.position = pos;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic String toString() {\r\n\t\treturn String.format(\"%s(%1.3f, %1.3f)\", id, position.getX(), position.getY());\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int hashCode() {\r\n\t\tfinal int prime = 31;\r\n\t\tint result = 1;\r\n\t\tresult = prime * result + ((id == null) ? 0 : id.hashCode());\r\n\t\treturn result;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean equals(Object obj) {\r\n\t\tif (this == obj)\r\n\t\t\treturn true;\r\n\t\tif (obj == null)\r\n\t\t\treturn false;\r\n\t\tif (getClass() != obj.getClass())\r\n\t\t\treturn false;\r\n\t\tLocation other = (Location) obj;\r\n\t\tif (id == null) {\r\n\t\t\tif (other.id != null)\r\n\t\t\t\treturn false;\r\n\t\t} else if (!id.equals(other.id))\r\n\t\t\treturn false;\r\n\t\treturn true;\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/geo/LocationRepository.java",
    "content": "package mongodb.geo;\n\nimport java.util.List;\n\nimport org.springframework.data.geo.Box;\nimport org.springframework.data.geo.Circle;\nimport org.springframework.data.geo.Distance;\nimport org.springframework.data.geo.Point;\nimport org.springframework.data.mongodb.repository.MongoRepository;\n\n/**\n * Example of a repo using geospatial queries.\n * \n * @author Tobias Trelle\n */\npublic interface LocationRepository extends MongoRepository<Location, String> {\n\n\tList<Location> findByPositionWithin(Circle c);\n\n\tList<Location> findByPositionWithin(Box b);\n\n\tList<Location> findByPositionNear(Point p, Distance d);\n}\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/order/Item.java",
    "content": "package mongodb.order;\r\n\r\nimport org.springframework.data.mongodb.core.mapping.Field;\r\n\r\npublic class Item {\r\n\r\n\t private int quantity;\r\n\r\n\t private double price;\r\n\t \r\n\t @Field(\"desc\") private String description;\r\n\r\n\t public Item() {\r\n\t }\r\n\t \r\n\tpublic Item(int quantity, double price, String description) {\r\n\t\tsuper();\r\n\t\tthis.quantity = quantity;\r\n\t\tthis.price = price;\r\n\t\tthis.description = description;\r\n\t}\r\n\r\n\tpublic int getQuantity() {\r\n\t\treturn quantity;\r\n\t}\r\n\r\n\tpublic void setQuantity(int quantity) {\r\n\t\tthis.quantity = quantity;\r\n\t}\r\n\r\n\tpublic double getPrice() {\r\n\t\treturn price;\r\n\t}\r\n\r\n\tpublic void setPrice(double price) {\r\n\t\tthis.price = price;\r\n\t}\r\n\r\n\tpublic String getDescription() {\r\n\t\treturn description;\r\n\t}\r\n\r\n\tpublic void setDescription(String description) {\r\n\t\tthis.description = description;\r\n\t}\r\n\t \r\n\t \r\n\t \r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/order/Order.java",
    "content": "package mongodb.order;\r\n\r\nimport java.util.Date;\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.mongodb.core.mapping.Field;\r\n\r\npublic class Order {\r\n\r\n\t@Id private String id;\r\n\t\r\n\tprivate Date date;\r\n\t\r\n\t@Field(\"custInfo\") private String customerInfo;\r\n\t\r\n\tList<Item> items;\r\n\t\r\n\tpublic Order() {\r\n\t\tthis(null);\r\n\t}\r\n\r\n\tpublic Order(String customerInfo) {\r\n\t\tsuper();\r\n\t\tthis.customerInfo = customerInfo;\r\n\t}\r\n\r\n\tpublic Order(String id, String customerInfo) {\r\n\t\tthis(customerInfo);\r\n\t\tthis.id = id;\r\n\t}\r\n\t\r\n\t\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tpublic Date getDate() {\r\n\t\treturn date;\r\n\t}\r\n\r\n\tpublic void setDate(Date date) {\r\n\t\tthis.date = date;\r\n\t}\r\n\r\n\tpublic String getCustomerInfo() {\r\n\t\treturn customerInfo;\r\n\t}\r\n\r\n\tpublic void setCustomerInfo(String customerInfo) {\r\n\t\tthis.customerInfo = customerInfo;\r\n\t}\r\n\r\n\tpublic List<Item> getItems() {\r\n\t\treturn items;\r\n\t}\r\n\r\n\tpublic void setItems(List<Item> items) {\r\n\t\tthis.items = items;\r\n\t}\r\n\t\r\n\t\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/order/OrderBeforeSaveListener.java",
    "content": "package mongodb.order;\r\n\r\nimport java.util.Date;\r\n\r\nimport org.bson.Document;\r\nimport org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;\r\nimport org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;\r\n\r\nimport com.mongodb.DBObject;\r\n\r\n/**\r\n * Equivalent of a domain method annotated by <code>PrePersist</code>.\r\n * <p/>\r\n * This handler shows how to implement your custom UUID generation.\r\n * @author Tobias Trelle\r\n */\r\npublic class OrderBeforeSaveListener extends AbstractMongoEventListener<Order>  {\r\n\r\n\t@Override\r\n\tpublic void onBeforeSave(BeforeSaveEvent<Order> event) {\r\n\t\tOrder o = event.getSource();\r\n\t\tDocument d = event.getDocument();\r\n\t\t\r\n\t\tif ( o.getId() == null ) {\r\n\t\t\t// TODO use a better UUID generator in production\r\n\t\t\td.put(\"_id\",\"\" + Math.random() );\r\n\t\t}\r\n\t\t\r\n\t\tif ( o.getDate() == null ) {\r\n\t\t\td.put(\"date\", new Date());\r\n\t\t}\r\n\t}\r\n\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/order/OrderRepository.java",
    "content": "package mongodb.order;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.mongodb.repository.MongoRepository;\r\nimport org.springframework.data.mongodb.repository.Query;\r\n\r\npublic interface OrderRepository extends MongoRepository<Order, String> {\r\n\r\n\tList<Order> findByItemsQuantity(int quantity);\r\n\t\r\n\t@Query(\"{ \\\"items.quantity\\\": ?0 }\")\r\n\tList<Order> findWithQuery(int quantity);\r\n\t\r\n\t@Query( value = \"{ custInfo: ?0 }\", fields = \"{_id:0, items:1}\")\r\n\tList<Order> findOnlyItems(String name);\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/user/User.java",
    "content": "package mongodb.user;\r\n\r\nimport java.util.Date;\r\n\r\nimport org.springframework.data.annotation.Id;\r\nimport org.springframework.data.mongodb.core.index.Indexed;\r\nimport org.springframework.data.mongodb.core.mapping.Document;\r\n\r\n@Document\r\npublic class User {\r\n\r\n\t@Id \r\n\tprivate String id;\r\n\t\r\n\t@Indexed(unique=true)\r\n\tprivate String fullName;\r\n\t\r\n\tprivate Date lastLogin;\r\n\r\n\tpublic User() {}\r\n\t\r\n\tpublic User(String id, String fullName) {\r\n\t\tthis.id = id;\r\n\t\tthis.fullName = fullName;\r\n\t\tthis.lastLogin = new Date();\r\n\t}\r\n\t\r\n\t\r\n\tpublic String getId() {\r\n\t\treturn id;\r\n\t}\r\n\r\n\tpublic void setId(String id) {\r\n\t\tthis.id = id;\r\n\t}\r\n\r\n\tpublic String getFullName() {\r\n\t\treturn fullName;\r\n\t}\r\n\r\n\tpublic void setFullName(String fullName) {\r\n\t\tthis.fullName = fullName;\r\n\t}\r\n\r\n\tpublic Date getLastLogin() {\r\n\t\treturn lastLogin;\r\n\t}\r\n\r\n\tpublic void setLastLogin(Date lastLogin) {\r\n\t\tthis.lastLogin = lastLogin;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic int hashCode() {\r\n\t\tfinal int prime = 31;\r\n\t\tint result = 1;\r\n\t\tresult = prime * result + ((id == null) ? 0 : id.hashCode());\r\n\t\treturn result;\r\n\t}\r\n\r\n\t@Override\r\n\tpublic boolean equals(Object obj) {\r\n\t\tif (this == obj)\r\n\t\t\treturn true;\r\n\t\tif (obj == null)\r\n\t\t\treturn false;\r\n\t\tif (getClass() != obj.getClass())\r\n\t\t\treturn false;\r\n\t\tUser other = (User) obj;\r\n\t\tif (id == null) {\r\n\t\t\tif (other.id != null)\r\n\t\t\t\treturn false;\r\n\t\t} else if (!id.equals(other.id))\r\n\t\t\treturn false;\r\n\t\treturn true;\r\n\t}\r\n\t\r\n\t\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/main/java/mongodb/user/UserRepository.java",
    "content": "package mongodb.user;\r\n\r\nimport java.util.List;\r\n\r\nimport org.springframework.data.domain.Sort;\r\nimport org.springframework.data.mongodb.repository.MongoRepository;\r\nimport org.springframework.data.mongodb.repository.Query;\r\n\r\npublic interface UserRepository extends MongoRepository<User, String> {\r\n\r\n\t@Query(\"{ fullName: ?0 }\")\r\n\tList<User> findByTheUsersFullName(String fullName);\r\n\r\n\tList<User> findByFullNameLike(String fullName, Sort sort);\r\n}\r\n"
  },
  {
    "path": "springdata-mongodb/src/misc/java/mongodb/CappedCollectionManipulationTest.java",
    "content": "package mongodb;\n\nimport static org.hamcrest.core.Is.*;\nimport static org.junit.Assert.*;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.mongodb.core.CollectionOptions;\nimport org.springframework.data.mongodb.core.MongoOperations;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n/**\n * This test shows that deletes and updates to capped collections fail silently.\n * <p/>\n * To run this test, a local mongod instance is required using the standard port.\n * \n * @author Tobias Trelle\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration\npublic class CappedCollectionManipulationTest {\n\n\tprivate static final String COLLECTION_NAME = \"user\";\n\t\n\t @Autowired UserRepository repo;\n\t  \n\t @Autowired MongoOperations template;\n\t\n\t /** \n\t  * Create a capped collection.\n\t  * If you create an uncapped collections the tests go green.\n\t  */\n\t @Before\n\t public void setUp() {\n\t\t template.dropCollection(COLLECTION_NAME);\n\t\t \n\t\t // capped\n\t\t template.createCollection(COLLECTION_NAME, new CollectionOptions(1000,5,true));\n\t\t \n\t\t // uncapped\n\t\t //template.createCollection(COLLECTION_NAME);\n\t }\n\t \n\t @Test\n\t public void does_not_delete_from_capped_collection() {\n\t\t // given\n\t\t for ( int i = 0; i< 5; i++ ) {\n\t\t\t repo.save(new User(\"user\"+i, \"Herr User Nr. \" +i));\n\t\t }\n\t\t \n\t\t // when\n\t\t repo.delete(\"user0\");\n\t\t \n\t\t // then\n\t\t assertNull(\"User not deleted\", repo.findOne(\"user0\"));\n\t }\n\n\t @Test\n\t public void does_not_update_capped_collection() {\n\t\t // given\n\t\t for ( int i = 0; i< 5; i++ ) {\n\t\t\t repo.save(new User(\"user\"+i, \"Herr User Nr. \" +i));\n\t\t }\n\t\t \n\t\t // when\n\t\t User user;\n\t\t user = repo.findOne(\"user0\");\n\t\t user.setFullName( \"Something completely different\" );\n\t\t repo.save(user);\n\t\t user = repo.findOne(\"user0\");\n\t\t \n\t\t // then\n\t\t assertThat(\"Fullname mismatch\", \n\t\t\t\t user.getFullName(), is(\"Something completely different\") );\n\t }\n\t \n}\n"
  },
  {
    "path": "springdata-mongodb/src/misc/java/mongodb/MongoDBMassTest.java",
    "content": "package mongodb;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.mongodb.core.MongoTemplate;\nimport org.springframework.data.mongodb.core.geo.Box;\nimport org.springframework.data.mongodb.core.geo.Circle;\nimport org.springframework.data.mongodb.core.geo.Point;\nimport org.springframework.data.mongodb.core.index.GeospatialIndex;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n/**\n * Tests for Spring Data MongoDB - Geospatial queries.\n * \n * @author <a href=\"http://blog.codecentric.de/en/author/tobias-trelle\">Tobias\n *         Trelle</a>\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration\npublic class MongoDBMassTest {\n\n\tprivate static final int N_POINTS = 100000;\n\n\tprivate static final int N_QUERIES = 10000;\n\t\n\t/** Radius for circle search. */\n\tprivate static final double RADIUS = 0.1;\n\t\n\t/** Half the width of a box with the same area as a circle with r = {@link #RADIUS}. */\n\tprivate static final double HALF_BOX_WIDTH = RADIUS * Math.sqrt(Math.PI) / 2;\n\t\n\t@Autowired\n\tLocationRepository repo;\n\n\t@Autowired\n\tMongoTemplate template;\n\n\t@Before \n\tpublic void setUp() {\n\t\tfinal List<Location> locations = new ArrayList<Location>();\n\t\t\n\t\t // ensure geospatial index\n\t\t template.indexOps(Location.class).ensureIndex( new GeospatialIndex(\"position\") );\n\t\t \n\t\t // prepare data\n\t\t for ( int i = 0;  i < N_POINTS; i++ ) {\n\t\t\t locations.add( new Location(String.valueOf(i), rnd(), rnd()) );\n\t\t }\n\t\t out(\"Preparing data (\" + N_POINTS + \" locations) ...\");\n\t\t repo.save(locations);\n\t\t out(\"Done.\");\n\t}\n\t\n\t@Test\n\tpublic void shouldPerformRandomQueries() {\n\t\tlong time_circle = 0;\n\t\tlong time_box = 0;\n\t\tlong singleRun = 0;\n\t\tCircle c;\n\t\tBox b;\n\t\tlong n_circle = 0;\n\t\tlong n_box = 0;\n\t\tList<Location> result;\n\t\t\n\t\tout( \"Performing \" + N_QUERIES + \" queries ...\" );\n\t\tfor (int i = 0; i < N_QUERIES; i++) {\n\t\t\t\n\t\t\tdouble x = rnd(), y = rnd();\n\t\t\t\n\t\t\t// circle search\n\t\t\tc = new Circle( x, y, RADIUS);\n\t\t\t// box search\n\t\t\tb = new Box( new Point(x - HALF_BOX_WIDTH, y - HALF_BOX_WIDTH), new Point(x + HALF_BOX_WIDTH, y + HALF_BOX_WIDTH) );\n\t\t\t\n\t\t\t// perform circle query\n\t\t\tsingleRun = System.currentTimeMillis();\n\t\t\tresult = repo.findByPositionWithin(c);\n\t\t\tsingleRun = System.currentTimeMillis() - singleRun;\n\t\t\tn_circle += result.size();\n\t\t\ttime_circle += singleRun;\n\t\t\t\n\t\t\t// peform box search\n\t\t\tsingleRun = System.currentTimeMillis();\n\t\t\tresult = repo.findByPositionWithin(b);\n\t\t\tsingleRun = System.currentTimeMillis() - singleRun;\n\t\t\tn_box += result.size();\n\t\t\ttime_box += singleRun;\n\t\t\t\n\t\t}\n\t\tout( \"Done.\\n\" );\n\t\t\n\t\tout( \"Search by circle:\" );\n\t\tout( \"Overall time for \" + N_QUERIES + \" queries [ms]: \" + time_circle );\n\t\tout( \"Average time per query [ms]: \" + (double)time_circle / N_QUERIES );\n\t\tout( \"Average hits per query: \" + n_circle / N_QUERIES );\n\t\tout( \"\" );\n\t\tout( \"Search by box:\" );\n\t\tout( \"Overall time for \" + N_QUERIES + \" queries [ms]: \" + time_box );\n\t\tout( \"Average time per query [ms]: \" + (double)time_box / N_QUERIES );\n\t\tout( \"Average hits per query: \" + n_box / N_QUERIES );\n\t}\n\t\n\t@After\n\tpublic void tearDown() {\n\t\trepo.deleteAll();\n\t}\n\n\tprivate static double rnd() {\n\t\treturn 2 * Math.random() -1;\n\t}\n\t\n\tprivate static void out(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\n}\n"
  },
  {
    "path": "springdata-mongodb/src/misc/resources/CappedCollectionManipulationTest-context.xml",
    "content": "<?xml version=\"1.0\"?>\n<beans\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n\txmlns=\"http://www.springframework.org/schema/beans\"\n \txmlns:context=\"http://www.springframework.org/schema/context\"\n\txmlns:mongo=\"http://www.springframework.org/schema/data/mongo\"\n\txmlns:tx=\"http://www.springframework.org/schema/tx\"\n\n\txsi:schemaLocation=\"\n\t\thttp://www.springframework.org/schema/beans \n\t\thttp://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/data/mongo\n        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd        \n        \">\n\n<!-- Connection to MongoDB server -->\n<mongo:db-factory host=\"localhost\" port=\"27017\" dbname=\"test\" />\n<!-- MongoDB Template -->\n<bean id=\"mongoTemplate\" class=\"org.springframework.data.mongodb.core.MongoTemplate\">\n  <constructor-arg name=\"mongoDbFactory\" ref=\"mongoDbFactory\"/>\n</bean>\n\n<!-- Package w/ automagic repositories -->\n<mongo:repositories base-package=\"mongodb\" />\n\n\t\n</beans>"
  },
  {
    "path": "springdata-mongodb/src/misc/resources/MongoDBMassTest-context.xml",
    "content": "<?xml version=\"1.0\"?>\n<beans\n\txmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n\txmlns=\"http://www.springframework.org/schema/beans\"\n \txmlns:context=\"http://www.springframework.org/schema/context\"\n\txmlns:mongo=\"http://www.springframework.org/schema/data/mongo\"\n\txmlns:tx=\"http://www.springframework.org/schema/tx\"\n\n\txsi:schemaLocation=\"\n\t\thttp://www.springframework.org/schema/beans \n\t\thttp://www.springframework.org/schema/beans/spring-beans.xsd\n        http://www.springframework.org/schema/data/mongo\n        http://www.springframework.org/schema/data/mongo/spring-mongo.xsd        \n        \">\n\n<!-- Connection to MongoDB server -->\n<mongo:db-factory host=\"localhost\" port=\"27017\" dbname=\"perf\" />\n<!-- MongoDB Template -->\n<bean id=\"mongoTemplate\" class=\"org.springframework.data.mongodb.core.MongoTemplate\">\n  <constructor-arg name=\"mongoDbFactory\" ref=\"mongoDbFactory\"/>\n</bean>\n\n<!-- Package w/ automagic repositories -->\n<mongo:repositories base-package=\"mongodb\" />\n\n\t\n</beans>"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/config/LocalhostMongoConfiguration.java",
    "content": "package mongodb.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.mongodb.config.AbstractMongoConfiguration;\nimport org.springframework.data.mongodb.repository.config.EnableMongoRepositories;\n\nimport com.mongodb.Mongo;\nimport com.mongodb.MongoClient;\n\nimport mongodb.order.OrderBeforeSaveListener;\n\n/**\n * Test configuration using localhost:27017\n * @author Tobias Trelle\n */\n@Configuration\n@EnableMongoRepositories({\"mongodb.geo\", \"mongodb.order\", \"mongodb.user\"})\npublic class LocalhostMongoConfiguration extends AbstractMongoConfiguration {\n\t\n\t@Bean\n\tpublic OrderBeforeSaveListener beforeSaveListener() {\n\t\treturn new OrderBeforeSaveListener();\n\t}\n\n\t@Override\n\tprotected String getDatabaseName() {\n\t\treturn \"odm_springdata\";\n\t}\n\n\t@Override\n\tpublic MongoClient mongoClient() {\n\t\treturn new MongoClient();\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/config/LocalhostMongoGridFSConfiguration.java",
    "content": "package mongodb.config;\n\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.mongodb.gridfs.GridFsTemplate;\n\n/**\n * Test configuration for GridFS using localhost:27017\n * @author Tobias Trelle\n */\n@Configuration\npublic class LocalhostMongoGridFSConfiguration extends LocalhostMongoConfiguration {\n\n\t@Bean \n\tpublic GridFsTemplate gridTemplate() throws Exception {\n\t\treturn new GridFsTemplate( mongoDbFactory(), mappingMongoConverter() );\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/geo/LocationRepositoryTest.java",
    "content": "package mongodb.geo;\n\nimport static org.hamcrest.CoreMatchers.is;\nimport static org.hamcrest.CoreMatchers.notNullValue;\nimport static org.junit.Assert.assertThat;\n\nimport java.util.List;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.geo.Box;\nimport org.springframework.data.geo.Circle;\nimport org.springframework.data.geo.Distance;\nimport org.springframework.data.geo.Metrics;\nimport org.springframework.data.geo.Point;\nimport org.springframework.data.mongodb.core.MongoTemplate;\nimport org.springframework.data.mongodb.core.index.GeoSpatialIndexType;\nimport org.springframework.data.mongodb.core.index.GeospatialIndex;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport mongodb.config.LocalhostMongoConfiguration;\n\n/**\n * Tests for Spring Data MongoDB - Geospatial queries.\n * \n * @author <a href=\"http://blog.codecentric.de/en/author/tobias-trelle\">Tobias\n *         Trelle</a>\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes=LocalhostMongoConfiguration.class)\npublic class LocationRepositoryTest {\n\n\tprivate static final Point DUS = new Point( 6.810036, 51.224088 );\n\t\n\t@Autowired\n\tprivate MongoTemplate template;\n\t\n\t@Autowired\n\tLocationRepository repo;\n\n\t@Before public void setUp() {\n\t\ttemplate\n\t\t\t.indexOps(Location.class)\n\t\t\t.ensureIndex(new GeospatialIndex(\"position\").typed(GeoSpatialIndexType.GEO_2DSPHERE));\n\t\t\n\t\t // prepare data\n\t\t repo.save( new Location(\"A\", 0.001, -0.002) );\n\t\t repo.save( new Location(\"B\", 1, 1) );\n\t\t repo.save( new Location(\"C\", 0.5, 0.5) );\n\t\t repo.save( new Location(\"D\", -0.5, -0.5) );\n\t\t \n\t\t repo.save( new Location(\"Berlin\", 13.405838, 52.531261 ));\n\t\t repo.save( new Location(\"Cologne\", 6.921272, 50.960157 ));\n\t\t repo.save( new Location(\"Düsseldorf\", 6.810036, 51.224088 ) );\t\t \n\t }\n\n\t@Test public void shouldFindSelf() {\n\t\t// when\n\t\tList<Location> locations = repo.findByPositionNear(DUS , new Distance(1, Metrics.KILOMETERS) );\n\n\t\t// then\n\t\tassertLocations(locations, \"Düsseldorf\");\n\t}\n\t\n\t@Test public void shouldFindCologne() {\n\t\t// when\n\t\tList<Location> locations = repo.findByPositionNear(DUS , new Distance(70, Metrics.KILOMETERS) );\n\n\t\t// then\n\t\tassertLocations(locations, \"Düsseldorf\", \"Cologne\");\n\t}\n\n\t@Test public void shouldFindCologneAndBerlin() {\n\t\t// when\n\t\tList<Location> locations = repo.findByPositionNear(DUS , new Distance(350, Metrics.MILES) );\n\n\t\t// then\n\t\tassertLocations(locations, \"Düsseldorf\", \"Cologne\", \"Berlin\");\n\t}\n\t\n\t@Test public void shouldFindAll() {\n\t\t// when\n\t\tList<Location> locations = repo.findAll();\n\n\t\t// then\n\t\tassertLocations(locations, \"A\", \"B\", \"C\", \"D\", \"Berlin\", \"Cologne\", \"Düsseldorf\");\n\t}\n\n\t@Test public void shouldFindAroundOrigin() {\n\t\t// when\n\t\tList<Location> locations = repo.findByPositionWithin(new Circle(0, 0, 0.75));\n\n\t\t// then\n\t\tassertLocations(locations, \"A\", \"C\", \"D\");\n\t}\n\n\t@Test public void shouldFindWithinBox() {\n\t\t// when\n\t\tList<Location> locations = repo.findByPositionWithin(new Box(new Point(\n\t\t\t\t0.25, 0.25), new Point(1, 1)));\n\n\t\t// then\n\t\tassertLocations(locations, \"B\", \"C\");\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\t//repo.deleteAll();\n\t}\n\n\tprivate static void assertLocations(List<Location> locations, String... ids) {\n\t\tassertThat( locations, notNullValue() );\n\t\tout(\"-----------------------------\");\n\t\tfor (Location l : locations) {\n\t\t\tout(l);\n\t\t}\n\t\tassertThat(\"Mismatch location count\", ids.length, is(locations.size()));\n\t\tfor (String id : ids) {\n\t\t\tassertThat(\"Location \" + id + \" not found\",\n\t\t\t\t\tlocations.contains(new Location(id, 0, 0)), is(true));\n\t\t}\n\t}\n\n\tprivate static void out(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/order/OrderRepositoryTest.java",
    "content": "package mongodb.order;\n\nimport static org.hamcrest.CoreMatchers.is;\nimport static org.hamcrest.CoreMatchers.notNullValue;\nimport static org.hamcrest.CoreMatchers.nullValue;\nimport static org.junit.Assert.assertThat;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport mongodb.config.LocalhostMongoConfiguration;\nimport mongodb.order.Item;\nimport mongodb.order.Order;\nimport mongodb.order.OrderRepository;\n\n/**\n * Test cases for the {@link OrderRepository}.\n * \n * @author Tobias Trelle\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes=LocalhostMongoConfiguration.class)\npublic class OrderRepositoryTest {\n\n\t@Autowired OrderRepository repo;\t\n\t\n\t@Before public void setUp() {\n\t\trepo.deleteAll();\n\t}\n\t\n\t@Test public void shouldFindByItemsQuantity() {\n\t\t// given\n\t\tOrder order = new Order(\"Tobias Trelle, gold customer\");\n\t\tList<Item> items = new ArrayList<Item>();\n\t\titems.add( new Item(1, 47.11, \"Item #1\") );\n\t\titems.add( new Item(2, 42.0, \"Item #2\") );\n\t\torder.setItems(items);\n\t\trepo.save(order);\n\t\t\n\t\t// when\n\t\tList<Order> orders = repo.findByItemsQuantity(2);\n\t\t\n\t\t// then\n\t\tassertThat(orders, notNullValue());\n\t\tassertThat(orders.size(), is(1));\n\t}\n\n\t@Test public void shouldFindByAnnotatedQuery() {\n\t\t// given\n\t\tOrder order = new Order(\"Tobias Trelle, gold customer\");\n\t\tList<Item> items = new ArrayList<Item>();\n\t\titems.add( new Item(1, 47.11, \"Item #1\") );\n\t\titems.add( new Item(2, 42.0, \"Item #2\") );\n\t\torder.setItems(items);\n\t\trepo.save(order);\n\t\t\n\t\t// when\n\t\tList<Order> orders = repo.findWithQuery(2);\n\t\t\n\t\t// then\n\t\tassertThat(orders, notNullValue());\n\t\tassertThat(orders.size(), is(1));\n\t}\n\n\t@Test public void use_field_projection() {\n\t\t// given\n\t\tOrder order = new Order(\"Tobias Trelle, gold customer\");\n\t\tList<Item> items = new ArrayList<Item>();\n\t\titems.add( new Item(1, 47.11, \"Item #1\") );\n\t\titems.add( new Item(2, 42.0, \"Item #2\") );\n\t\torder.setItems(items);\n\t\trepo.save(order);\n\t\t\n\t\t// when\n\t\tList<Order> orders = repo.findOnlyItems(\"Tobias Trelle, gold customer\");\n\t\t\n\t\t// then\n\t\tassertThat(orders, notNullValue());\n\t\tassertThat(orders.size(), is(1));\n\t\torder = orders.get(0);\n\t\tassertThat(order.getId(), nullValue());\n\t\tassertThat(order.getCustomerInfo(), nullValue());\n\t\tassertThat(order.getDate(), nullValue());\n\t\t\n\t\titems = order.getItems();\n\t\tassertThat(items, notNullValue());\n\t\tassertThat(items.size(), is(2));\n\t\tItem item = items.get(0);\n\t\tassertThat( item.getDescription(), notNullValue());\n\t\tassertThat( item.getPrice(), notNullValue());\n\t\tassertThat( item.getQuantity(), notNullValue());\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/order/OrderSubListTest.java",
    "content": "package mongodb.order;\n\nimport static org.hamcrest.CoreMatchers.is;\nimport static org.hamcrest.CoreMatchers.notNullValue;\nimport static org.junit.Assert.assertThat;\nimport static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;\nimport static org.springframework.data.mongodb.core.aggregation.Aggregation.project;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.mongodb.core.MongoOperations;\nimport org.springframework.data.mongodb.core.aggregation.Aggregation;\nimport org.springframework.data.mongodb.core.aggregation.AggregationResults;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport mongodb.config.LocalhostMongoConfiguration;\nimport mongodb.order.Item;\nimport mongodb.order.Order;\nimport mongodb.order.OrderRepository;\n\n/**\n * Test cases for aggregations.\n * \n * @author Tobias Trelle\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes=LocalhostMongoConfiguration.class)\npublic class OrderSubListTest {\n\n\t@Autowired OrderRepository repo;\t\n\t\n\t@Autowired MongoOperations template;\n\t\n\t@Before public void setUp() {\n\t\trepo.deleteAll();\n\t}\n\t\n\t@Test public void projection_by_aggregation() {\n\t\t// given\n\t\tOrder order = new Order(\"Tobias Trelle, gold customer\");\n\t\tList<Item> items = new ArrayList<Item>();\n\t\titems.add( new Item(1, 47.11, \"Item #1\") );\n\t\titems.add( new Item(2, 42.0, \"Item #2\") );\n\t\torder.setItems(items);\n\t\trepo.save(order);\n\n\t\t// when\n\t\tAggregation agg =  newAggregation(\n\t\t\t\tproject(\"items\").andExclude(\"_id\")\n\t\t\t\t);\n\t\tAggregationResults<Order> result =  template.aggregate(agg, Order.class, Order.class);\n\t\t\n\t\t// then\n\t\tassertThat(result, notNullValue());\n\t\tList<Order> orders = result.getMappedResults();\n\t\tassertThat(orders, notNullValue());\n\t\tassertThat(orders.size(), is(1));\n\t\titems = orders.get(0).getItems();\n\t\tassertThat(items, notNullValue());\n\t\tassertThat(items.size(), is(2));\n\t}\n\n\t@Test public void projection_by_query() {\n\t\t// given\n\t\tOrder order = new Order(\"Tobias Trelle, gold customer\");\n\t\tList<Item> items = new ArrayList<Item>();\n\t\titems.add( new Item(1, 47.11, \"Item #1\") );\n\t\titems.add( new Item(2, 42.0, \"Item #2\") );\n\t\torder.setItems(items);\n\t\trepo.save(order);\n\n\t\t// when\n\t\tAggregation agg =  newAggregation(\n\t\t\t\tproject(\"items\").andExclude(\"_id\")\n\t\t\t\t);\n\t\tAggregationResults<Order> result =  template.aggregate(agg, Order.class, Order.class);\n\t\n\t\t// then\n\t\tassertThat(result, notNullValue());\n\t\tList<Order> orders = result.getMappedResults();\n\t\tassertThat(orders, notNullValue());\n\t\tassertThat(orders.size(), is(1));\n\t\titems = orders.get(0).getItems();\n\t\tassertThat(items, notNullValue());\n\t\tassertThat(items.size(), is(2));\n\t}\n\t\n}"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/user/IndexViolationTest.java",
    "content": "package mongodb.user;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.Sort.Direction;\nimport org.springframework.data.mongodb.core.MongoOperations;\nimport org.springframework.data.mongodb.core.index.Index;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport mongodb.config.LocalhostMongoConfiguration;\nimport mongodb.user.User;\nimport mongodb.user.UserRepository;\n\n/**\n * This test shows that violation on indexes are ignored.\n * <p/>\n * To run this test, a local mongod instance is required using the standard port.\n * \n * @author Tobias Trelle\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes=LocalhostMongoConfiguration.class)\npublic class IndexViolationTest {\n\n\tprivate static final String COLLECTION_NAME = \"user\";\n\t\n\t @Autowired UserRepository repo;\n\t  \n\t @Autowired MongoOperations template;\n\t\n\t /** \n\t  * Create a target collection.\n\t  */\n\t @Before\n\t public void setUp() {\n\t\t template.dropCollection(COLLECTION_NAME);\n\t\t template.createCollection(COLLECTION_NAME);\n\t\t template.indexOps(COLLECTION_NAME).ensureIndex(new Index().on(\"fullName\", Direction.ASC).unique());\n\t }\n\t \n\t @Test\n\t public void does_not_detect_index_violation_on_id() {\n\t\t // given\n\t\t repo.save( new User(\"0\", \"User 0\") ); // 1st param = _id field, 2nd = unique secondary index\n\t\t \n\t\t // when\n\t\t repo.save( new User(\"0\", \"User 1\") );\n\t\t \n\t\t // then\n\t }\n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/java/mongodb/user/UserRepositoryTest.java",
    "content": "package mongodb.user;\n\nimport static org.hamcrest.CoreMatchers.is;\nimport static org.hamcrest.CoreMatchers.notNullValue;\nimport static org.junit.Assert.assertThat;\n\nimport java.util.List;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.domain.Page;\nimport org.springframework.data.domain.PageRequest;\nimport org.springframework.data.mongodb.core.MongoTemplate;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\nimport mongodb.config.LocalhostMongoConfiguration;\nimport mongodb.user.User;\nimport mongodb.user.UserRepository;\n\n/**\n * Tests for Spring Data MongoDB.\n * \n * @author <a href=\"http://blog.codecentric.de/en/author/tobias-trelle\">Tobias Trelle</a>\n */\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes=LocalhostMongoConfiguration.class)\npublic class UserRepositoryTest {\n\t\n\t @Autowired UserRepository repo;\n\t  \n\t @Autowired MongoTemplate template;\n\t \n\t @Before public void setUp() {\n\t\t \n\t\t template.dropCollection(\"user\");\n\t\t template.createCollection(\"user\");\n\t\t \n\t\t repo.save(new User(\"root\", \"Superuser\"));\n\t\t for ( int i = 0; i < 6; i++ ) {\n\t\t\t repo.save( new User( String.format(\"user%02d\", i), \"User \" + i ) );\n\t\t }\n\t }\n\n\t @Test public void shouldFindByCustomerQuery() {\n\t\t List<User> users;\n\t\t \n\t\t // when\n\t\t users = repo.findByTheUsersFullName(\"User 0\");\n\t\t \n\t\t // then\n\t\t assertUserByFullName(users, \"User 0\");\n\t }\n\t \n\t \n\t @Test public void shouldFindByFullNameLike() {\n\t\t List<User> users;\n\t\t \n\t\t // when\n\t\t users = repo.findByFullNameLike(\"User\", null);\n\t\t \n\t\t // then\n\t\t assertUserCount(users, 6);\n\t }\n\t \n\t @Test public void shouldPageUsers() {\n\t\t List<User> users;\n\t\t \n\t\t // when\n\t\t Page<User> page = repo.findAll( new PageRequest(2, 2 ) );\n\t\t users = page.getContent();\n\t \n\t\t // then\n\t\t assertUserCount(users, 2);\n\t }\n\t \n\t @After public void tearDown() {\n\t\t repo.deleteAll();\n\t }\n\t \n\t private static void assertUserByFullName(List<User> users, String fullName)  {\n\t\t assertUserCount(users, 1);\n\t\t assertThat( \"Mismatch full name\", users.get(0).getFullName(), is(fullName));\n\t }\n\n\t private static void assertUserCount(List<User> users, int expected) {\n\t\t assertThat( users, notNullValue() );\n\t\t assertThat( \"Mismatch user count\", users.size(), is(expected));\n\t }\n\t \n}\n"
  },
  {
    "path": "springdata-mongodb/src/test/resources/dummy.txt",
    "content": "A file to be uploaded via GridFS ...."
  },
  {
    "path": "springdata-neo4j/.gitignore",
    "content": "/target\n\r\n/.settings\n\r\n.classpath\r\n.project"
  },
  {
    "path": "springdata-neo4j/README.md",
    "content": "# Spring Data Blog Series\r\n\r\nThis projects holds the Java source examples for my blog post series on the Spring Data project:\r\n\r\n* [GridFS Support in Spring Data MongoDB](http://blog.codecentric.de/en/2012/07/gridfs-support-in-spring-data-mongodb/)\r\n* [Part 6: Spring Data Redis](http://blog.codecentric.de/en/2012/04/spring-data-redis/)\r\n* [Part 5: Spring Data Neo4j](http://blog.codecentric.de/en/2012/02/spring-data-neo4j/)\r\n* [Part 4: Geospatial Queries with Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/)\r\n* [Part 3: Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb/)\r\n* [Part 2: Spring Data JPA](http://blog.codecentric.de/en/2012/01/spring-data-jpa/)\r\n* [Part 1: Spring Data Commons](http://blog.codecentric.de/en/2011/12/spring-data-commons/)\r\n\r\n## Usage\r\n\r\nThe projects are using a Maven based build. To run the tests on the command line use\r\n\r\n\tmvn clean test\r\n   \r\nIf you want to use an IDE like Eclipse run\r\n\r\n\tmvn eclipse:eclipse\r\n   \r\nand set the Eclipse variable M2_REPO pointing to your local Maven repository. Or just import the project as an existing Maven project if you are using the m2 plugin.\r\n \r\n"
  },
  {
    "path": "springdata-neo4j/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>de.codecentric</groupId>\n\t\t<artifactId>springdata-examples</artifactId>\n\t\t<version>1.0.0</version>\n\t</parent>\n\n\t<artifactId>springdata-neo4j-examples</artifactId>\n\t<packaging>jar</packaging>\n\t<name>Spring Data Neo4j Examples</name>\n\t<url>http://maven.apache.org</url>\n\n\t<properties>\n\t\t<neo4j.version>2.2.5</neo4j.version>\n\t</properties>\n\n\t<dependencies>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.data</groupId>\n\t\t\t<artifactId>spring-data-neo4j</artifactId>\n\t\t\t<version>4.0.0.RELEASE</version>\n\t\t</dependency>\n\n\t\t<!-- Test -->\n\t\t<dependency>\n\t\t\t<groupId>junit</groupId>\n\t\t\t<artifactId>junit</artifactId>\n\t\t\t<version>${junit.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.data</groupId>\n\t\t\t<artifactId>spring-data-neo4j</artifactId>\n\t\t\t<version>4.0.0.RELEASE</version>\n\t\t\t<type>test-jar</type>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.neo4j</groupId>\n\t\t\t<artifactId>neo4j-kernel</artifactId>\n\t\t\t<version>${neo4j.version}</version>\n\t\t\t<type>test-jar</type>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.neo4j.test</groupId>\n\t\t\t<artifactId>neo4j-harness</artifactId>\n\t\t\t<version>${neo4j.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.neo4j.app</groupId>\n\t\t\t<artifactId>neo4j-server</artifactId>\n\t\t\t<version>${neo4j.version}</version>\n\t\t\t<type>test-jar</type>\t\t\t\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.neo4j</groupId>\n\t\t\t<artifactId>neo4j-ogm</artifactId>\n\t\t\t<version>1.1.2</version>\n\t\t\t<type>test-jar</type>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>cglib</groupId>\n\t\t\t<artifactId>cglib</artifactId>\n\t\t\t<version>2.2.2</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>javax.validation</groupId>\n\t\t\t<artifactId>validation-api</artifactId>\n\t\t\t<version>1.1.0.Final</version>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework</groupId>\n\t\t\t<artifactId>spring-test</artifactId>\n\t\t\t<version>4.1.9.RELEASE</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\n\t</dependencies>\n\n</project>\n"
  },
  {
    "path": "springdata-neo4j/src/main/java/neo4j/domain/User.java",
    "content": "package neo4j.domain;\n\nimport java.util.Date;\nimport java.util.HashSet;\nimport java.util.Set;\n\nimport org.neo4j.ogm.annotation.GraphId;\nimport org.neo4j.ogm.annotation.Index;\nimport org.neo4j.ogm.annotation.NodeEntity;\nimport org.neo4j.ogm.annotation.Relationship;\n\n/** Simple user class. */\n@NodeEntity public class User {\n\n\t@GraphId Long id;\n\t\n\t@Index private String login;\n\t\n\tprivate String fullName;\n\t\n\tprivate Date lastLogin;\n\n    @Relationship(type = \"knows\")\n    Set<User> friends;\t\n\t\n\tpublic User() {}\n\t\n\tpublic User(String login, String fullName) {\n\t\tthis.login = login;\n\t\tthis.fullName = fullName;\n\t\tthis.lastLogin = new Date();\n\t\tthis.friends = new HashSet<User>();\n\t}\t\n\t\n\tpublic void knows(User user) {\n\t\tfriends.add(user);\n\t}\n\t\n\tpublic String getLogin() {\n\t\treturn login;\n\t}\n\n\tpublic void setLogin(String login) {\n\t\tthis.login = login;\n\t}\n\n\tpublic String getFullName() {\n\t\treturn fullName;\n\t}\n\n\tpublic void setFullName(String fullName) {\n\t\tthis.fullName = fullName;\n\t}\n\n\tpublic Date getLastLogin() {\n\t\treturn lastLogin;\n\t}\n\n\tpublic void setLastLogin(Date lastLogin) {\n\t\tthis.lastLogin = lastLogin;\n\t}\t\n\n\tpublic long getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(long id) {\n\t\tthis.id = id;\n\t}\n\n\tpublic Set<User> getFriends() {\n\t\treturn friends;\n\t}\n\n\tpublic void setFriends(Set<User> friends) {\n\t\tthis.friends = friends;\n\t}\n\n\tpublic void setId(Long id) {\n\t\tthis.id = id;\n\t}\n}\n"
  },
  {
    "path": "springdata-neo4j/src/main/java/neo4j/repo/UserRepository.java",
    "content": "package neo4j.repo;\n\nimport java.util.List;\n\nimport neo4j.domain.User;\n\nimport org.springframework.data.neo4j.annotation.Query;\nimport org.springframework.data.neo4j.repository.GraphRepository;\n\n/** Neo4j repository. */\npublic interface UserRepository extends GraphRepository<User> {\n\t\n\tUser findByLogin(String login);\n\t\n\t@Query(\"START root=node:User(login = 'root') MATCH root-[:knows]->friends RETURN friends\")\n\tList<User> findFriendsOfRoot();\n\t\n}\n"
  },
  {
    "path": "springdata-neo4j/src/test/java/neo4j/repo/Neo4jRepoTest.java",
    "content": "package neo4j.repo;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertNotNull;\n\nimport java.util.HashMap;\nimport java.util.List;\n\nimport neo4j.domain.User;\nimport neo4j.repo.UserRepository;\n\nimport org.junit.After;\nimport org.junit.Before;\nimport org.junit.Ignore;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.neo4j.ogm.session.result.Result;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.data.neo4j.template.Neo4jOperations;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration(classes = Neo4jTestConfig.class)\npublic class Neo4jRepoTest {\n\n\tprivate static final int USER_COUNT = 4;\n\n\t@Autowired\n\tNeo4jOperations template;\n\t\n\t@Autowired\n\tUserRepository repo;\n\n\tprivate long rootId;\n\n\t@Before\n\tpublic void setUp() {\n\t\t// create index User(login)\n\t\tResult result = template.query(\"CREATE INDEX ON :User(login)\", new HashMap<String, Object>() );\n\t\t\n\t\tUser root = new User(\"root\", \"Superuser\");\n\t\tUser[] user = new User[USER_COUNT];\n\n\t\tfor (int i = 0; i < user.length; i++) {\n\t\t\tuser[i] = new User(String.format(\"user%02d\", i), \"User\" + i);\n\t\t}\n\n\t\t// build graph\n\t\tfor (int i = 0; i < user.length; i++) {\n\t\t\troot.knows(user[i]);\n\t\t\tfor (int j = i; j < user.length; j++) {\n\t\t\t\tuser[i].knows(user[j]);\n\t\t\t}\n\t\t}\n\n\t\t// save nodes\n\t\tfor (int i = 0; i < user.length; i++) {\n\t\t\trepo.save(user[i]);\n\t\t}\n\t\trepo.save(root);\n\t\trootId = root.getId();\n\t\tout(\"Root id: \" + rootId);\n\n\t}\n\n\t@Test\n\tpublic void shouldFindAll() {\n\t\t// when\n\t\tlong n = repo.count();\n\n\t\t// then\n\t\tassertEquals(\"User count mismatch\", USER_COUNT + 1, n);\n\t}\n\n\t@Test\n\tpublic void shouldFindRootUserById() {\n\t\t// when\n\t\tUser root = repo.findOne(rootId);\n\n\t\t// then\n\t\tassertNotNull(\"Root user not found\", root);\n\t}\n\n\t@Test\n\tpublic void shouldFindRootUserByLogin() {\n\t\t// when\n\t\tUser root = repo.findByLogin(\"root\");\n\n\t\t// then\n\t\tassertNotNull(\"Root user not found\", root);\n\t}\n\n\t// TODO fixme\n\t// Caused by: org.neo4j.ogm.session.result.ResultProcessingException: \"errors\":[{\"code\":\"Neo.ClientError.Schema.NoSuchIndex\n\t// \",\"message\":\"Index `User` does not exist\"}]}\n\t@Test\n\t@Ignore\n\tpublic void shouldFindFriendsOfRoot() {\n\t\t// when\n\t\tList<User> users = repo.findFriendsOfRoot();\n\n\t\t// then\n\t\tassertNotNull(\"result is <null>\", users);\n\t\tassertEquals(\"mismatch @ friend count\", USER_COUNT, users.size());\n\t}\n\n\t@After\n\tpublic void tearDown() {\n\t\trepo.deleteAll();\n\t}\n\n\tprivate static void out(Object o) {\n\t\tSystem.out.println(o);\n\t}\n\n}\n"
  },
  {
    "path": "springdata-neo4j/src/test/java/neo4j/repo/Neo4jTestConfig.java",
    "content": "package neo4j.repo;\n\nimport org.neo4j.ogm.session.SessionFactory;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.data.neo4j.config.Neo4jConfiguration;\nimport org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories;\nimport org.springframework.data.neo4j.server.InProcessServer;\nimport org.springframework.data.neo4j.server.Neo4jServer;\nimport org.springframework.data.neo4j.template.Neo4jTemplate;\n\n@Configuration\n@EnableNeo4jRepositories(\"neo4j.repo\")\npublic class Neo4jTestConfig extends Neo4jConfiguration {\n\n\t@Override\n\tpublic Neo4jServer neo4jServer() {\n\t\treturn new InProcessServer();\n\t}\n\n\t@Override\n\tpublic SessionFactory getSessionFactory() {\n\t\treturn new SessionFactory(\"neo4j.domain\");\n\t}\n\n}\n"
  },
  {
    "path": "springdata-redis/.gitignore",
    "content": "/target\n\r\n/.settings\n\r\n.classpath\r\n.project"
  },
  {
    "path": "springdata-redis/README.md",
    "content": "# Spring Data Blog Series\r\n\r\nThis projects holds the Java source examples for my blog post series on the Spring Data project:\r\n\r\n* [GridFS Support in Spring Data MongoDB](http://blog.codecentric.de/en/2012/07/gridfs-support-in-spring-data-mongodb/)\r\n* [Part 6: Spring Data Redis](http://blog.codecentric.de/en/2012/04/spring-data-redis/)\r\n* [Part 5: Spring Data Neo4j](http://blog.codecentric.de/en/2012/02/spring-data-neo4j/)\r\n* [Part 4: Geospatial Queries with Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb-geospatial-queries/)\r\n* [Part 3: Spring Data MongoDB](http://blog.codecentric.de/en/2012/02/spring-data-mongodb/)\r\n* [Part 2: Spring Data JPA](http://blog.codecentric.de/en/2012/01/spring-data-jpa/)\r\n* [Part 1: Spring Data Commons](http://blog.codecentric.de/en/2011/12/spring-data-commons/)\r\n\r\n## Usage\r\n\r\nThe projects are using a Maven based build. To run the tests on the command line use\r\n\r\n\tmvn clean test\r\n   \r\nIf you want to use an IDE like Eclipse run\r\n\r\n\tmvn eclipse:eclipse\r\n   \r\nand set the Eclipse variable M2_REPO pointing to your local Maven repository. Or just import the project as an existing Maven project if you are using the m2 plugin.\r\n \r\n"
  },
  {
    "path": "springdata-redis/pom.xml",
    "content": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\n\t<parent>\n\t\t<groupId>de.codecentric</groupId>\n\t\t<artifactId>springdata-examples</artifactId>\n\t\t<version>1.0.0</version>\n\t</parent>\n\n\t<artifactId>springdata-redis-examples</artifactId>\n\t<packaging>jar</packaging>\n\t<name>Spring Data Redis Examples</name>\n\t<url>https://github.com/ttrelle/spring-data-examples/tree/master/springdata-redis</url>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.data</groupId>\n\t\t\t<artifactId>spring-data-redis</artifactId>\n\t\t\t<version>1.6.4.RELEASE</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.slf4j</groupId>\n\t\t\t<artifactId>slf4j-simple</artifactId>\n\t\t\t<version>1.7.13</version>\n\t\t</dependency>\n\t\n\t\t<!-- Test -->\n\t\t<dependency>\n\t\t\t<groupId>junit</groupId>\n\t\t\t<artifactId>junit</artifactId>\n\t\t\t<version>${junit.version}</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework</groupId>\n\t\t\t<artifactId>spring-test</artifactId>\n\t\t\t<version>4.1.9.RELEASE</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>redis.clients</groupId>\n\t\t\t<artifactId>jedis</artifactId>\n\t\t\t<version>2.7.3</version>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.apache.commons</groupId>\n\t\t\t<artifactId>commons-pool2</artifactId>\n\t\t\t<version>2.2</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.codehaus.jackson</groupId>\n\t\t\t<artifactId>jackson-mapper-asl</artifactId>\n\t\t\t<version>1.8.8</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\t\t\n\t\t<dependency>\n\t\t\t<groupId>com.fasterxml.jackson.core</groupId>\n\t\t\t<artifactId>jackson-core</artifactId>\n\t\t\t<version>2.6.4</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>com.fasterxml.jackson.core</groupId>\n\t\t\t<artifactId>jackson-databind</artifactId>\n\t\t\t<version>2.6.4</version>\n\t\t\t<scope>test</scope>\n\t\t</dependency>\n\t</dependencies>\n\n</project>\n"
  },
  {
    "path": "springdata-redis/src/main/java/redis/StringStringRepository.java",
    "content": "package redis;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.data.redis.core.RedisTemplate;\r\n\r\n/**\r\n * Simple repository to store key/value pairs of type String/String.\r\n * @author tobias.trelle\r\n */\r\npublic class StringStringRepository {\r\n\t\r\n\t@Autowired\r\n\tprivate RedisTemplate<String, String> template;\t\r\n\t\r\n\tpublic void add(String key, String value) {\r\n\t\ttemplate.opsForValue().set(key, value);\r\n\t}\r\n\t\r\n\tpublic String getValue(String key) {\r\n\t\treturn template.opsForValue().get(key);\r\n\t}\r\n\t\r\n\tpublic void delete(String key) {\r\n\t\ttemplate.opsForValue().getOperations().delete(key);\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-redis/src/main/java/redis/User.java",
    "content": "package redis;\r\n\r\nimport java.util.Date;\r\n\r\n/** Simple user class. */\r\npublic class User {\r\n\t\r\n\tprivate String login;\r\n\t\r\n\tprivate String fullName;\r\n\t\r\n\tprivate Date lastLogin;\r\n\r\n\tpublic User() {}\r\n\t\r\n\tpublic User(String login, String fullName) {\r\n\t\tthis.login = login;\r\n\t\tthis.fullName = fullName;\r\n\t\tthis.lastLogin = new Date();\r\n\t}\r\n\r\n\tpublic String getLogin() {\r\n\t\treturn login;\r\n\t}\r\n\r\n\tpublic void setLogin(String login) {\r\n\t\tthis.login = login;\r\n\t}\r\n\r\n\tpublic String getFullName() {\r\n\t\treturn fullName;\r\n\t}\r\n\r\n\tpublic void setFullName(String fullName) {\r\n\t\tthis.fullName = fullName;\r\n\t}\r\n\r\n\tpublic Date getLastLogin() {\r\n\t\treturn lastLogin;\r\n\t}\r\n\r\n\tpublic void setLastLogin(Date lastLogin) {\r\n\t\tthis.lastLogin = lastLogin;\r\n\t}\t\t\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-redis/src/main/java/redis/UserRepository.java",
    "content": "package redis;\r\n\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.data.redis.core.RedisTemplate;\r\n\r\n/**\r\n * Repository for key/value pairs of type String/User.\r\n * @author tobias.trelle\r\n */\r\npublic class UserRepository {\r\n\r\n\t@Autowired\r\n\tprivate RedisTemplate<String, User> template;\t\r\n\t\r\n\tpublic void add(User user) {\r\n\t\ttemplate.opsForValue().set(user.getLogin(), user);\r\n\t}\r\n\t\r\n\tpublic User get(String key) {\r\n\t\treturn template.opsForValue().get(key);\r\n\t}\r\n\t\r\n}\r\n"
  },
  {
    "path": "springdata-redis/src/test/java/redis/StringStringRepositoryTest.java",
    "content": "package redis;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertNotNull;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration\npublic class StringStringRepositoryTest {\n\t\n\t@Autowired StringStringRepository repo;\n\t\n\t@Before\n\tpublic void setUp() {\n\t\trepo.add(\"foo\", \"bar\");\n\t}\n\n\t@Test\n\tpublic void shouldFindValue() {\n\t\tString value = repo.getValue(\"foo\");\n\t\t\n\t\tassertNotNull(\"Value is <null>\", value);\n\t\tassertEquals( \"Value mismatch\" , \"bar\", value);\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-redis/src/test/java/redis/UserRepositoryTest.java",
    "content": "package redis;\n\nimport static org.junit.Assert.assertEquals;\nimport static org.junit.Assert.assertNotNull;\n\nimport org.junit.Before;\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.test.context.ContextConfiguration;\nimport org.springframework.test.context.junit4.SpringJUnit4ClassRunner;\n\n@RunWith(SpringJUnit4ClassRunner.class)\n@ContextConfiguration\npublic class UserRepositoryTest {\n\t\n\t@Autowired UserRepository repo;\n\t\n\t@Before\n\tpublic void setUp() {\n\t\trepo.add( new User(\"root\", \"Superuser\") );\n\t}\n\n\t@Test\n\tpublic void shouldFindValue() {\n\t\tUser user = repo.get(\"root\");\n\t\t\n\t\tassertNotNull(\"Value is <null>\", user);\n\t\tassertEquals( \"login mismatch\" , \"root\", user.getLogin());\n\t\tassertEquals( \"login mismatch\" , \"Superuser\", user.getFullName());\n\t}\n\t\n}\n"
  },
  {
    "path": "springdata-redis/src/test/resources/redis/StringStringRepositoryTest-context.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n  xmlns:p=\"http://www.springframework.org/schema/p\"\r\n  xmlns:redis=\"http://www.springframework.org/schema/redis\"\r\n  xsi:schemaLocation=\"\r\n        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\r\n        http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd\r\n        \">\r\n    \r\n<!-- Jedis Connection -->    \r\n<bean id=\"jedisConnectionFactory\" class=\"org.springframework.data.redis.connection.jedis.JedisConnectionFactory\"\r\n   p:host-name=\"localhost\" p:port=\"6379\" />\r\n  \r\n<!-- Redis Template -->\r\n<bean id=\"redisTemplate\" class=\"org.springframework.data.redis.core.RedisTemplate\">\r\n\t<property name=\"connectionFactory\" ref=\"jedisConnectionFactory\" />\r\n</bean>\r\n\r\n<bean class=\"redis.StringStringRepository\"/>\r\n\r\n</beans>"
  },
  {
    "path": "springdata-redis/src/test/resources/redis/UserRepositoryTest-context.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\r\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n  xmlns:p=\"http://www.springframework.org/schema/p\"\r\n  xmlns:redis=\"http://www.springframework.org/schema/redis\"\r\n  xsi:schemaLocation=\"\r\n        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\r\n        http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis.xsd\r\n        \">\r\n    \r\n<!-- Jedis Connection -->    \r\n<bean id=\"jedisConnectionFactory\" class=\"org.springframework.data.redis.connection.jedis.JedisConnectionFactory\"\r\n   p:host-name=\"localhost\" p:port=\"6379\" />\r\n  \r\n<!-- Redis Template -->\r\n<bean id=\"redisTemplate\" class=\"org.springframework.data.redis.core.RedisTemplate\">\r\n\t<property name=\"connectionFactory\" ref=\"jedisConnectionFactory\" />\r\n\t<property name=\"valueSerializer\">\r\n\t\t<bean id=\"redisJsonSerializer\" class=\"org.springframework.data.redis.serializer.JacksonJsonRedisSerializer\">\r\n\t\t\t<constructor-arg type=\"java.lang.Class\" value=\"redis.User\"/>\r\n\t\t</bean>   \r\n\t</property>\r\n</bean>\r\n\r\n<bean class=\"redis.UserRepository\"/>\r\n\r\n</beans>"
  }
]