| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 1 | package de.ids_mannheim.korap.resources; |
| 2 | |
| 3 | import com.fasterxml.jackson.annotation.JsonIgnore; |
| Michael Hanl | cedf721 | 2016-05-28 10:43:09 +0200 | [diff] [blame] | 4 | import com.fasterxml.jackson.databind.JsonNode; |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 5 | |
| 6 | import de.ids_mannheim.korap.exceptions.KustvaktException; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 7 | import de.ids_mannheim.korap.utils.JsonUtils; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 8 | import de.ids_mannheim.korap.utils.TimeUtils; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 9 | import lombok.AccessLevel; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 10 | import lombok.Getter; |
| 11 | import lombok.Setter; |
| 12 | import org.joda.time.DateTime; |
| 13 | |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 14 | import java.io.IOException; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 15 | import java.util.HashMap; |
| 16 | import java.util.Map; |
| 17 | |
| 18 | /** |
| 19 | * Created by hanl on 5/21/14. |
| 20 | */ |
| 21 | @Getter |
| 22 | @Setter |
| 23 | public abstract class KustvaktResource { |
| 24 | |
| 25 | @JsonIgnore |
| 26 | private Integer id; |
| 27 | private String persistentID; |
| 28 | private String name; |
| 29 | private String description; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 30 | // todo: manage creator over policies! |
| Michael Hanl | c444602 | 2016-02-12 18:03:17 +0100 | [diff] [blame] | 31 | |
| 32 | // @JsonIgnore |
| 33 | // @Deprecated |
| 34 | // private Integer owner; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 35 | protected long created; |
| 36 | @Deprecated |
| 37 | private boolean managed; |
| 38 | @Deprecated |
| 39 | private boolean shared; |
| 40 | private String path; |
| 41 | // parents persistentid |
| 42 | private String parentID; |
| 43 | |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 44 | @Getter(AccessLevel.PROTECTED) |
| 45 | private Map<String, Object> fields; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 46 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 47 | |
| 48 | public KustvaktResource () { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 49 | this.created = TimeUtils.getNow().getMillis(); |
| 50 | this.id = -1; |
| 51 | this.parentID = null; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 52 | this.fields = new HashMap<>(); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 53 | } |
| 54 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 55 | |
| 56 | public KustvaktResource (Integer id) { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 57 | this.created = TimeUtils.getNow().getMillis(); |
| 58 | this.id = id; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 59 | this.parentID = null; |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 60 | this.fields = new HashMap<>(); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 61 | } |
| 62 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 63 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 64 | // todo: move creator to builder instance for policies |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 65 | public KustvaktResource (String persistentID) { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 66 | this(); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 67 | this.persistentID = persistentID; |
| 68 | } |
| 69 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 70 | |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 71 | // public void setData(int type, Object data) { |
| 72 | // this.data = new Object[2]; |
| 73 | // this.data[0] = type; |
| 74 | // this.data[1] = data; |
| 75 | // } |
| 76 | |
| 77 | // public int getDataType() { |
| 78 | // return this.data != null ? (int) this.data[0] : -1; |
| 79 | // } |
| 80 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 81 | public void addField (String key, Object value) { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 82 | this.fields.put(key, value); |
| 83 | } |
| 84 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 85 | |
| 86 | public void setFields (Map<String, Object> fields) { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 87 | this.fields = fields; |
| 88 | } |
| 89 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 90 | |
| 91 | public void setFields (String fields) { |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 92 | Map s = null; |
| 93 | try { |
| 94 | s = JsonUtils.convertToClass(fields, Map.class); |
| 95 | } |
| 96 | catch (KustvaktException e) { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 97 | throw new RuntimeException( |
| 98 | "Fields could not be read for resource '" + persistentID |
| 99 | + "'!"); |
| margaretha | 894a7d7 | 2017-11-08 19:24:20 +0100 | [diff] [blame] | 100 | } |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 101 | this.fields = s; |
| 102 | } |
| 103 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 104 | |
| 105 | public Object getField (String key) { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 106 | return this.fields.get(key); |
| 107 | } |
| 108 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 109 | |
| Michael Hanl | cedf721 | 2016-05-28 10:43:09 +0200 | [diff] [blame] | 110 | public JsonNode getData () { |
| 111 | return JsonUtils.valueToTree(this.fields); |
| 112 | } |
| 113 | |
| Michael Hanl | 33829ec | 2016-05-28 17:03:38 +0200 | [diff] [blame] | 114 | |
| margaretha | d479666 | 2017-11-09 16:11:40 +0100 | [diff] [blame] | 115 | public String getStringData () throws KustvaktException { |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 116 | return JsonUtils.toJSON(this.fields); |
| 117 | } |
| 118 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 119 | |
| 120 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 121 | public boolean equals (Object other) { |
| 122 | return other instanceof KustvaktResource |
| 123 | && this.id.equals(((KustvaktResource) other).getId()); |
| 124 | } |
| 125 | |
| 126 | |
| 127 | @Override |
| 128 | public int hashCode () { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 129 | int result = id.hashCode(); |
| 130 | return result; |
| 131 | } |
| 132 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 133 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 134 | /** |
| 135 | * Merges another resource with this resource instance |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 136 | * Every implementation of KorAPResource should override this |
| 137 | * method! |
| 138 | * |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 139 | * @param other |
| 140 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 141 | public void merge (KustvaktResource other) { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 142 | if (other == null) |
| 143 | return; |
| 144 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 145 | this.setId(this.getId() == null || this.getId() == -1 ? other.getId() |
| 146 | : other.getId()); |
| 147 | this.setPersistentID(this.getPersistentID() == null ? other |
| 148 | .getPersistentID() : this.getPersistentID()); |
| 149 | this.setName(this.getName() == null || this.getName().isEmpty() ? other |
| 150 | .getName() : this.getName()); |
| 151 | this.setDescription(this.getDescription() == null |
| 152 | || this.getDescription().isEmpty() ? other.getDescription() |
| 153 | : this.getDescription()); |
| 154 | this.setCreated(this.getCreated() < other.getCreated() ? this |
| 155 | .getCreated() : other.getCreated()); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 156 | this.setPath(this.getPath() == null ? other.getPath() : this.getPath()); |
| Michael Hanl | c444602 | 2016-02-12 18:03:17 +0100 | [diff] [blame] | 157 | // this.setOwner( |
| 158 | // this.getOwner() == null ? other.getOwner() : this.getOwner()); |
| 159 | // this.setManaged( |
| 160 | // !this.isManaged() ? other.isManaged() : this.isManaged()); |
| 161 | // this.setShared(!this.isShared() ? other.isShared() : this.isShared()); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 162 | } |
| 163 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 164 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 165 | /** |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 166 | * Checks this instance for null parameter and replaces them with |
| 167 | * default values. |
| 168 | * Every implementation of KorAPResource should override this |
| 169 | * method! |
| 170 | * |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 171 | * @return |
| 172 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 173 | public void checkNull () { |
| 174 | setCreated(this.getCreated() == 0L ? TimeUtils.getNow().getMillis() |
| 175 | : this.getCreated()); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 176 | setName(this.getName() == null ? "" : this.getName()); |
| 177 | } |
| 178 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 179 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 180 | /** |
| 181 | * this method is used to return field information about the class |
| 182 | * All subclasses should override this method |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 183 | * |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 184 | * @return |
| 185 | */ |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 186 | public Map toMap () { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 187 | Map m = new HashMap(); |
| 188 | m.put("id", persistentID); |
| 189 | m.put("name", name); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 190 | //todo: fix! |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 191 | // m.put("path", path); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 192 | m.put("description", description); |
| 193 | m.put("created", TimeUtils.format(new DateTime(created))); |
| Michael Hanl | cedf721 | 2016-05-28 10:43:09 +0200 | [diff] [blame] | 194 | m.put("data", this.fields); |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 195 | // deprecated |
| Michael Hanl | cedf721 | 2016-05-28 10:43:09 +0200 | [diff] [blame] | 196 | // todo: |
| Michael Hanl | 9b84eff | 2016-01-27 17:11:11 +0100 | [diff] [blame] | 197 | // m.put("managed", managed); |
| 198 | // m.put("shared", shared); |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 199 | return m; |
| 200 | } |
| 201 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 202 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 203 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 204 | public String toString () { |
| 205 | return "Resource{" + "id='" + id + '\'' + "persistentID='" |
| 206 | + persistentID + '\'' + ", name='" + name + '\'' + ", created=" |
| 207 | + created + ", path=" + path + '}'; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 208 | } |
| 209 | |
| Michael Hanl | 1939065 | 2016-01-16 11:01:24 +0100 | [diff] [blame] | 210 | //fixme: make private in respective areas |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 211 | @Getter |
| 212 | public static class Container { |
| 213 | private final Class type; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 214 | private final String persistentID; |
| 215 | private final boolean set; |
| 216 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 217 | |
| 218 | public Container (String persistentID, Class type) { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 219 | this.type = type; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 220 | this.set = true; |
| 221 | this.persistentID = persistentID; |
| 222 | } |
| 223 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 224 | |
| 225 | public Container (Class type) { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 226 | this.type = type; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 227 | this.set = true; |
| 228 | this.persistentID = null; |
| 229 | } |
| 230 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 231 | |
| 232 | public Container () { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 233 | this.set = false; |
| 234 | this.type = null; |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 235 | this.persistentID = null; |
| 236 | } |
| 237 | |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 238 | |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 239 | @Override |
| Michael Hanl | 8abaf9e | 2016-05-23 16:46:35 +0200 | [diff] [blame] | 240 | public String toString () { |
| Michael Hanl | 0b21998 | 2015-09-19 21:33:14 +0200 | [diff] [blame] | 241 | return persistentID + "@" + type.getSimpleName(); |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | } |