From bcc370216066a6948f5e0cd86204f0d08e2ac9f5 Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Thu, 21 Jan 2016 22:43:13 +0100
Subject: [PATCH] fixed importing twice

fixed problem when importing into an existing database
added generic information to model
---
 ma-impl.sublime-workspace                     | 55 ++++++++++++++++---
 .../rest/serializer/GenericDeserializer.java  |  2 +-
 .../rest/serializer/GenericSerializer.java    |  2 +-
 .../java/de/vipra/util/model/Article.java     |  4 +-
 .../java/de/vipra/util/model/FileModel.java   |  2 +-
 .../main/java/de/vipra/util/model/Model.java  |  8 ++-
 .../main/java/de/vipra/util/model/Topic.java  |  4 +-
 .../java/de/vipra/util/model/TopicFull.java   |  4 +-
 .../java/de/vipra/util/model/TopicRef.java    |  2 +-
 .../main/java/de/vipra/util/model/Word.java   |  4 +-
 .../vipra/util/service/DatabaseService.java   |  4 +-
 .../java/de/vipra/util/service/Service.java   |  2 +-
 12 files changed, 73 insertions(+), 20 deletions(-)

diff --git a/ma-impl.sublime-workspace b/ma-impl.sublime-workspace
index c8f2f55d..4b3b0a70 100644
--- a/ma-impl.sublime-workspace
+++ b/ma-impl.sublime-workspace
@@ -275,6 +275,14 @@
 	},
 	"buffers":
 	[
+		{
+			"file": "vipra-ui/app/routes/words/show.js",
+			"settings":
+			{
+				"buffer_size": 178,
+				"line_ending": "Unix"
+			}
+		}
 	],
 	"build_system": "",
 	"build_system_choices":
@@ -459,29 +467,32 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/articles",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/topics/show",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/show",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words",
-		"/home/eike/repos/master/ma-impl/vm/data"
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words"
 	],
 	"file_history":
 	[
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/show.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/word.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/index.js",
+		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/index.hbs",
+		"/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components/items-list.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/components/items-list.hbs",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/show/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/words.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/index.hbs",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/router.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/routes/words/index.js",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/word.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/topic.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/models/article.js",
 		"/home/eike/repos/master/ma-impl/vm/data/test-10.json",
@@ -489,7 +500,6 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/articles/show.hbs",
 		"/home/eike/.local/share/vipra/jgibb/jgibb.twords",
 		"/home/eike/.local/share/vipra/jgibb/jgibb.tassign",
-		"/home/eike/repos/master/ma-impl/vipra-ui/app/templates/topics/index.hbs",
 		"/home/eike/Downloads/FRITZ.Box 7490 113.06.30_17.01.16_2147.export",
 		"/home/eike/repos/master/ma-impl/vm/data/test-1.json",
 		"/home/eike/repos/master/ma-impl/vm/data/test-2.json",
@@ -525,7 +535,6 @@
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topic-numi.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topicname.js",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/helpers/topic-name.js",
-		"/home/eike/.config/sublime-text-3/Packages/User/Preferences.sublime-settings",
 		"/home/eike/.config/sublime-text-3/Packages/Default/Preferences.sublime-settings",
 		"/home/eike/repos/master/ma-impl/vipra-ui/app/components/dynamic-high-charts.js",
 		"/home/eike/repos/master/ma-impl/vipra-cmd.sh",
@@ -921,8 +930,38 @@
 	"groups":
 	[
 		{
+			"selected": 0,
 			"sheets":
 			[
+				{
+					"buffer": 0,
+					"file": "vipra-ui/app/routes/words/show.js",
+					"semi_transient": false,
+					"settings":
+					{
+						"buffer_size": 178,
+						"regions":
+						{
+						},
+						"selection":
+						[
+							[
+								178,
+								178
+							]
+						],
+						"settings":
+						{
+							"open_with_edit": true,
+							"syntax": "Packages/JavaScriptNext - ES6 Syntax/JavaScriptNext.tmLanguage"
+						},
+						"translation.x": 0.0,
+						"translation.y": 0.0,
+						"zoom_level": 1.0
+					},
+					"stack_index": 0,
+					"type": "text"
+				}
 			]
 		}
 	],
diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
index 5945e5cf..9566837f 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericDeserializer.java
@@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer;
 import de.vipra.util.an.JsonWrap;
 import de.vipra.util.model.Model;
 
-public class GenericDeserializer<T extends Model> extends JsonDeserializer<T> {
+public class GenericDeserializer<T extends Model<?>> extends JsonDeserializer<T> {
 
 	private final Class<T> clazz;
 	private final Set<String> nestingPrefixes = new HashSet<>();
diff --git a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
index 7d76f86e..fe7cc73c 100644
--- a/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
+++ b/vipra-rest/src/main/java/de/vipra/rest/serializer/GenericSerializer.java
@@ -22,7 +22,7 @@ import de.vipra.util.an.JsonType;
 import de.vipra.util.an.JsonWrap;
 import de.vipra.util.model.Model;
 
-public class GenericSerializer<T extends Model> extends JsonSerializer<T> {
+public class GenericSerializer<T extends Model<?>> extends JsonSerializer<T> {
 
 	private final String typeName;
 	private final List<Entry<String, Field>> allFields;
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Article.java b/vipra-util/src/main/java/de/vipra/util/model/Article.java
index 4122d623..131a99a2 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Article.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Article.java
@@ -28,7 +28,7 @@ import de.vipra.util.an.QueryIgnore;
 @JsonType("article")
 @Entity(value = "articles", noClassnameStored = true)
 @Indexes({ @Index("title"), @Index("date") })
-public class Article extends FileModel implements Serializable {
+public class Article extends FileModel<ObjectId> implements Serializable {
 
 	@Id
 	private ObjectId id;
@@ -62,10 +62,12 @@ public class Article extends FileModel implements Serializable {
 	@JsonWrap("attributes")
 	private Date modified;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/FileModel.java b/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
index 09742a02..de0ade9e 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/FileModel.java
@@ -8,7 +8,7 @@ import org.apache.commons.io.FileUtils;
 import de.vipra.util.Constants;
 
 @SuppressWarnings("serial")
-public abstract class FileModel implements Model {
+public abstract class FileModel<IdType> implements Model<IdType> {
 
 	public void writeToFile(File file) throws IOException {
 		FileUtils.writeStringToFile(file, toFileString(), Constants.FB_ENCODING, false);
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Model.java b/vipra-util/src/main/java/de/vipra/util/model/Model.java
index 0d133d54..eba05fd5 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Model.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Model.java
@@ -2,4 +2,10 @@ package de.vipra.util.model;
 
 import java.io.Serializable;
 
-public interface Model extends Serializable {}
\ No newline at end of file
+public interface Model<IdType> extends Serializable {
+
+	IdType getId();
+
+	void setId(IdType id);
+
+}
\ No newline at end of file
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Topic.java b/vipra-util/src/main/java/de/vipra/util/model/Topic.java
index 0ac387d9..07568128 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Topic.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Topic.java
@@ -15,16 +15,18 @@ import de.vipra.util.an.JsonType;
 @JsonType("topic")
 @Entity(value = "topics", noClassnameStored = true)
 @Indexes(@Index("name"))
-public class Topic implements Model, Serializable {
+public class Topic implements Model<ObjectId>, Serializable {
 
 	@Id
 	private ObjectId id;
 	private String name;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
index 412232b7..8797b6b6 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/TopicFull.java
@@ -21,7 +21,7 @@ import de.vipra.util.an.QueryIgnore;
 @SuppressWarnings("serial")
 @JsonType("topic")
 @Entity(value = "topics", noClassnameStored = true)
-public class TopicFull implements Model, Serializable {
+public class TopicFull implements Model<ObjectId>, Serializable {
 
 	@Id
 	private ObjectId id;
@@ -43,10 +43,12 @@ public class TopicFull implements Model, Serializable {
 	@JsonWrap("attributes")
 	private Date modified;
 
+	@Override
 	public ObjectId getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(ObjectId id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
index ef00fc43..7d84a4d6 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/TopicRef.java
@@ -12,7 +12,7 @@ public class TopicRef implements Comparable<TopicRef>, Serializable {
 
 	@Transient
 	private String topicId;
-	@Reference
+	@Reference(ignoreMissing = true)
 	private Topic topic;
 	private int count;
 
diff --git a/vipra-util/src/main/java/de/vipra/util/model/Word.java b/vipra-util/src/main/java/de/vipra/util/model/Word.java
index 62ee93d0..e32e4e9c 100644
--- a/vipra-util/src/main/java/de/vipra/util/model/Word.java
+++ b/vipra-util/src/main/java/de/vipra/util/model/Word.java
@@ -15,7 +15,7 @@ import de.vipra.util.an.JsonType;
 @SuppressWarnings("serial")
 @JsonType("word")
 @Entity(value = "words", noClassnameStored = true)
-public class Word implements Model, Serializable {
+public class Word implements Model<String>, Serializable {
 
 	/**
 	 * This is the id. It is used by the frontend, which expects an 'id' field.
@@ -47,10 +47,12 @@ public class Word implements Model, Serializable {
 		this.word = word;
 	}
 
+	@Override
 	public String getId() {
 		return id;
 	}
 
+	@Override
 	public void setId(String id) {
 		this.id = id;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
index 9a1d4e05..324e978c 100644
--- a/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
+++ b/vipra-util/src/main/java/de/vipra/util/service/DatabaseService.java
@@ -18,7 +18,7 @@ import de.vipra.util.ex.ConfigException;
 import de.vipra.util.ex.DatabaseException;
 import de.vipra.util.model.Model;
 
-public class DatabaseService<T extends Model, U> implements Service<T, U, DatabaseException> {
+public class DatabaseService<T extends Model<?>, U> implements Service<T, U, DatabaseException> {
 
 	private final Datastore datastore;
 	private final Class<T> clazz;
@@ -110,7 +110,7 @@ public class DatabaseService<T extends Model, U> implements Service<T, U, Databa
 		return datastore.getCount(clazz);
 	}
 
-	public static <T extends Model, U> DatabaseService<T, U> getDatabaseService(Config config, Class<T> clazz)
+	public static <T extends Model<?>, U> DatabaseService<T, U> getDatabaseService(Config config, Class<T> clazz)
 			throws ConfigException {
 		Mongo mongo = Mongo.getInstance(config);
 		return new DatabaseService<T, U>(mongo, clazz);
diff --git a/vipra-util/src/main/java/de/vipra/util/service/Service.java b/vipra-util/src/main/java/de/vipra/util/service/Service.java
index 4fb210eb..b38d35af 100644
--- a/vipra-util/src/main/java/de/vipra/util/service/Service.java
+++ b/vipra-util/src/main/java/de/vipra/util/service/Service.java
@@ -4,7 +4,7 @@ import java.util.List;
 
 import de.vipra.util.model.Model;
 
-public interface Service<Type extends Model, IdType, E extends Exception> {
+public interface Service<Type extends Model<?>, IdType, E extends Exception> {
 
 	Type getSingle(IdType id, String... fields) throws E;
 
-- 
GitLab