Mercurial > hg > AnnotationManagerN4J
comparison src/main/java/de/mpiwg/itgroup/annotations/restlet/AnnotatorResourceImpl.java @ 16:794077e6288c
CLOSED - # 252: Tags for Annotations
https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/ticket/252
| author | casties |
|---|---|
| date | Tue, 04 Sep 2012 20:02:59 +0200 |
| parents | 58357a4b86de |
| children | aafa3884b2c4 |
comparison
equal
deleted
inserted
replaced
| 15:58357a4b86de | 16:794077e6288c |
|---|---|
| 7 import java.security.InvalidKeyException; | 7 import java.security.InvalidKeyException; |
| 8 import java.security.SignatureException; | 8 import java.security.SignatureException; |
| 9 import java.text.SimpleDateFormat; | 9 import java.text.SimpleDateFormat; |
| 10 import java.util.ArrayList; | 10 import java.util.ArrayList; |
| 11 import java.util.Calendar; | 11 import java.util.Calendar; |
| 12 import java.util.HashSet; | |
| 12 import java.util.List; | 13 import java.util.List; |
| 14 import java.util.Set; | |
| 13 import java.util.regex.Matcher; | 15 import java.util.regex.Matcher; |
| 14 import java.util.regex.Pattern; | 16 import java.util.regex.Pattern; |
| 15 | 17 |
| 16 import javax.servlet.ServletContext; | 18 import javax.servlet.ServletContext; |
| 17 | 19 |
| 187 JSONObject jo = new JSONObject(); | 189 JSONObject jo = new JSONObject(); |
| 188 try { | 190 try { |
| 189 jo.put("text", annot.getBodyText()); | 191 jo.put("text", annot.getBodyText()); |
| 190 jo.put("uri", annot.getTargetBaseUri()); | 192 jo.put("uri", annot.getTargetBaseUri()); |
| 191 | 193 |
| 194 /* | |
| 195 * user | |
| 196 */ | |
| 192 if (makeUserObject) { | 197 if (makeUserObject) { |
| 193 // create user object | 198 // create user object |
| 194 JSONObject userObject = new JSONObject(); | 199 JSONObject userObject = new JSONObject(); |
| 195 Actor creator = annot.getCreator(); | 200 Actor creator = annot.getCreator(); |
| 196 // save creator as uri | 201 // save creator as uri |
| 211 } else { | 216 } else { |
| 212 // save user as string | 217 // save user as string |
| 213 jo.put("user", annot.getCreatorUri()); | 218 jo.put("user", annot.getCreatorUri()); |
| 214 } | 219 } |
| 215 | 220 |
| 221 /* | |
| 222 * ranges | |
| 223 */ | |
| 216 if (annot.getTargetFragment() != null) { | 224 if (annot.getTargetFragment() != null) { |
| 217 // we only look at the first xpointer | 225 // we only look at the first xpointer |
| 218 List<String> fragments = new ArrayList<String>(); | 226 List<String> fragments = new ArrayList<String>(); |
| 219 fragments.add(annot.getTargetFragment()); | 227 fragments.add(annot.getTargetFragment()); |
| 220 FragmentTypes xt = annot.getFragmentType(); | 228 FragmentTypes xt = annot.getFragmentType(); |
| 223 } else if (xt == FragmentTypes.AREA) { | 231 } else if (xt == FragmentTypes.AREA) { |
| 224 jo.put("areas", transformToAreas(fragments)); | 232 jo.put("areas", transformToAreas(fragments)); |
| 225 } | 233 } |
| 226 } | 234 } |
| 227 | 235 |
| 228 // permissions | 236 /* |
| 237 * permissions | |
| 238 */ | |
| 229 JSONObject perms = new JSONObject(); | 239 JSONObject perms = new JSONObject(); |
| 230 jo.put("permissions", perms); | 240 jo.put("permissions", perms); |
| 231 // admin | 241 // admin |
| 232 JSONArray adminPerms = new JSONArray(); | 242 JSONArray adminPerms = new JSONArray(); |
| 233 perms.put("admin", adminPerms); | 243 perms.put("admin", adminPerms); |
| 264 Actor readPerm = annot.getReadPermission(); | 274 Actor readPerm = annot.getReadPermission(); |
| 265 if (readPerm != null) { | 275 if (readPerm != null) { |
| 266 readPerms.put(readPerm.getIdString()); | 276 readPerms.put(readPerm.getIdString()); |
| 267 } | 277 } |
| 268 | 278 |
| 279 /* | |
| 280 * tags | |
| 281 */ | |
| 282 Set<String> tagset = annot.getTags(); | |
| 283 if (tagset != null) { | |
| 284 JSONArray tags = new JSONArray(); | |
| 285 jo.put("tags", tags); | |
| 286 for (String tag : tagset) { | |
| 287 tags.put(tag); | |
| 288 } | |
| 289 } | |
| 290 | |
| 291 /* | |
| 292 * id | |
| 293 */ | |
| 269 // encode Annotation URL (=id) in base64 | 294 // encode Annotation URL (=id) in base64 |
| 270 String annotUrl = annot.getUri(); | 295 String annotUrl = annot.getUri(); |
| 271 String annotId = encodeJsonId(annotUrl); | 296 String annotId = encodeJsonId(annotUrl); |
| 272 jo.put("id", annotId); | 297 jo.put("id", annotId); |
| 273 return jo; | 298 return jo; |
| 410 * @throws JSONException | 435 * @throws JSONException |
| 411 * @throws UnsupportedEncodingException | 436 * @throws UnsupportedEncodingException |
| 412 */ | 437 */ |
| 413 public Annotation updateAnnotation(Annotation annot, JSONObject jo, Representation entity) throws JSONException, | 438 public Annotation updateAnnotation(Annotation annot, JSONObject jo, Representation entity) throws JSONException, |
| 414 UnsupportedEncodingException { | 439 UnsupportedEncodingException { |
| 415 // target uri | 440 /* |
| 441 * target uri | |
| 442 */ | |
| 416 if (jo.has("uri")) { | 443 if (jo.has("uri")) { |
| 417 annot.setTargetBaseUri(jo.getString("uri")); | 444 annot.setTargetBaseUri(jo.getString("uri")); |
| 418 } | 445 } |
| 419 // annotation text | 446 /* |
| 447 * annotation text | |
| 448 */ | |
| 420 if (jo.has("text")) { | 449 if (jo.has("text")) { |
| 421 annot.setBodyText(jo.getString("text")); | 450 annot.setBodyText(jo.getString("text")); |
| 422 } | 451 } |
| 423 // check authentication | 452 /* |
| 453 * check authentication | |
| 454 */ | |
| 424 String authUser = checkAuthToken(entity); | 455 String authUser = checkAuthToken(entity); |
| 425 if (authUser == null) { | 456 if (authUser == null) { |
| 426 /* | 457 /* |
| 427 * // try http auth User httpUser = getHttpAuthUser(entity); if | 458 * // try http auth User httpUser = getHttpAuthUser(entity); if |
| 428 * (httpUser == null) { | 459 * (httpUser == null) { |
| 431 return null; | 462 return null; |
| 432 /* | 463 /* |
| 433 * } authUser = httpUser.getIdentifier(); | 464 * } authUser = httpUser.getIdentifier(); |
| 434 */ | 465 */ |
| 435 } | 466 } |
| 436 // get or create creator object | 467 /* |
| 468 * get or create creator object | |
| 469 */ | |
| 437 Actor creator = annot.getCreator(); | 470 Actor creator = annot.getCreator(); |
| 438 if (creator == null) { | 471 if (creator == null) { |
| 439 creator = new Person(); | 472 creator = new Person(); |
| 440 annot.setCreator(creator); | 473 annot.setCreator(creator); |
| 441 } | 474 } |
| 480 } | 513 } |
| 481 // TODO: should we overwrite the creator? | 514 // TODO: should we overwrite the creator? |
| 482 if (creator.getUri() == null) { | 515 if (creator.getUri() == null) { |
| 483 creator.setUri(userUri); | 516 creator.setUri(userUri); |
| 484 } | 517 } |
| 485 | 518 /* |
| 519 * creation date | |
| 520 */ | |
| 486 if (annot.getCreated() == null) { | 521 if (annot.getCreated() == null) { |
| 487 // set creation date | 522 // set creation date |
| 488 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); | 523 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); |
| 489 String ct = format.format(Calendar.getInstance().getTime()); | 524 String ct = format.format(Calendar.getInstance().getTime()); |
| 490 annot.setCreated(ct); | 525 annot.setCreated(ct); |
| 491 } | 526 } |
| 492 | 527 |
| 493 // create xpointer from the first range/area | 528 /* |
| 529 * create xpointer from the first range/area | |
| 530 */ | |
| 494 if (jo.has("ranges")) { | 531 if (jo.has("ranges")) { |
| 495 JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0); | 532 JSONObject ranges = jo.getJSONArray("ranges").getJSONObject(0); |
| 496 annot.setFragmentType(FragmentTypes.XPOINTER); | 533 annot.setFragmentType(FragmentTypes.XPOINTER); |
| 497 String fragment = parseRange(ranges); | 534 String fragment = parseRange(ranges); |
| 498 annot.setTargetFragment(fragment); | 535 annot.setTargetFragment(fragment); |
| 502 annot.setFragmentType(FragmentTypes.AREA); | 539 annot.setFragmentType(FragmentTypes.AREA); |
| 503 String fragment = parseArea(area); | 540 String fragment = parseArea(area); |
| 504 annot.setTargetFragment(fragment); | 541 annot.setTargetFragment(fragment); |
| 505 } | 542 } |
| 506 | 543 |
| 507 // permissions | 544 /* |
| 545 * permissions | |
| 546 */ | |
| 508 if (jo.has("permissions")) { | 547 if (jo.has("permissions")) { |
| 509 JSONObject permissions = jo.getJSONObject("permissions"); | 548 JSONObject permissions = jo.getJSONObject("permissions"); |
| 510 if (permissions.has("admin")) { | 549 if (permissions.has("admin")) { |
| 511 JSONArray perms = permissions.getJSONArray("admin"); | 550 JSONArray perms = permissions.getJSONArray("admin"); |
| 512 Actor actor = getActorFromPermissions(perms); | 551 Actor actor = getActorFromPermissions(perms); |
| 527 Actor actor = getActorFromPermissions(perms); | 566 Actor actor = getActorFromPermissions(perms); |
| 528 annot.setReadPermission(actor); | 567 annot.setReadPermission(actor); |
| 529 } | 568 } |
| 530 } | 569 } |
| 531 | 570 |
| 571 /* | |
| 572 * tags | |
| 573 */ | |
| 574 if (jo.has("tags")) { | |
| 575 HashSet<String> tagset = new HashSet<String>(); | |
| 576 JSONArray tags = jo.getJSONArray("tags"); | |
| 577 for (int i = 0; i < tags.length(); ++i) { | |
| 578 tagset.add(tags.getString(i)); | |
| 579 } | |
| 580 annot.setTags(tagset); | |
| 581 } | |
| 582 | |
| 583 | |
| 532 return annot; | 584 return annot; |
| 533 } | 585 } |
| 534 | 586 |
| 535 @SuppressWarnings("unused") // i in for loop | 587 @SuppressWarnings("unused") // i in for loop |
| 536 protected Actor getActorFromPermissions(JSONArray perms) throws JSONException { | 588 protected Actor getActorFromPermissions(JSONArray perms) throws JSONException { |
