comparison src/main/java/de/mpiwg/itgroup/ismi/entry/beans/AbstractISMIBean.java @ 1:2e911857a759

(none)
author jurzua
date Wed, 29 Oct 2014 14:00:28 +0000
parents
children 4ec8d4cfad26
comparison
equal deleted inserted replaced
0:74df02964906 1:2e911857a759
1 package de.mpiwg.itgroup.ismi.entry.beans;
2
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.HashSet;
7 import java.util.List;
8 import java.util.Map;
9
10 import javax.faces.context.FacesContext;
11 import javax.faces.event.ActionEvent;
12 import javax.faces.event.ValueChangeEvent;
13 import javax.faces.model.SelectItem;
14
15 import org.apache.commons.lang.StringUtils;
16 import org.apache.log4j.Logger;
17 import org.mpi.openmind.cache.WrapperService;
18 import org.mpi.openmind.repository.bo.Attribute;
19 import org.mpi.openmind.repository.bo.Entity;
20 import org.mpi.openmind.repository.bo.Node;
21 import org.mpi.openmind.repository.bo.Relation;
22 import org.mpi.openmind.security.SecurityService;
23 import org.mpi.openmind.security.bo.User;
24 import org.mpiwg.itgroup.escidoc.bo.ESciDocItem;
25 import org.mpiwg.itgroup.escidoc.bo.Publication;
26 import org.mpiwg.itgroup.escidoc.utils.ESciDocItemDataTable;
27 import org.mpiwg.itgroup.escidoc.utils.SelectedESciDocItems;
28
29 import de.mpiwg.itgroup.ismi.auxObjects.ListenerObject;
30 import de.mpiwg.itgroup.ismi.entry.dataBeans.SimpleSearchCache;
31 import de.mpiwg.itgroup.ismi.util.guiComponents.Reference;
32 import de.mpiwg.itgroup.ismi.util.guiComponents.ReferenceTable;
33 import de.mpiwg.itgroup.ismi.util.guiComponents.StatusChecker;
34 import de.mpiwg.itgroup.ismi.util.guiComponents.StatusImage;
35 import de.mpiwg.itgroup.ismi.utils.SelectableObject;
36
37 /**
38 *
39 * @author jurzua
40 */
41 public class AbstractISMIBean extends AbstractBean implements Serializable{
42
43 private static final long serialVersionUID = 9193140306343947209L;
44
45 private static Logger logger = Logger.getLogger(AbstractISMIBean.class);
46
47 public static String WITNESS = "WITNESS";
48 public static String TEXT = "TEXT";
49 public static String PERSON = "PERSON";
50 public static String COLLECTION = "COLLECTION";
51 public static String CODEX = "CODEX";
52 public static String REPOSITORY = "REPOSITORY";
53 public static String ALIAS = "ALIAS";
54 public static String PLACE = "PLACE";
55 public static String SUBJECT = "SUBJECT";
56 public static String REFERENCE = "REFERENCE";
57 public static String ROLE = "ROLE";
58 public static String DIGITALIZATION = "DIGITALIZATION";
59 public static String FLORUIT_DATE = "FLORUIT_DATE";
60
61 public static String is_digitalization_of = "is_digitalization_of";
62 public static String is_part_of = "is_part_of";
63 public static String is_in = "is_in";
64 public static String has_subject = "has_subject";
65 public static String misattributed_to = "misattributed_to";
66 public static String lived_in = "lived_in";
67 public static String owned_by = "owned_by";
68 public static String has_role = "has_role";
69 public static String was_student_of = "was_student_of";
70 public static String is_alias_name_of = "is_alias_name_of";
71 public static String is_prime_alias_name_of = "is_prime_alias_name_of";
72 public static String is_alias_title_of = "is_alias_title_of";
73 public static String is_prime_alias_title_of = "is_prime_alias_title_of";
74 public static String alias = "alias";
75 public static String has_floruit_date = "has_floruit_date";
76
77 public static String rel_was_created_by = "was_created_by";
78 public static String rel_was_copied_by = "was_copied_by";
79 public static String is_exemplar_of = "is_exemplar_of";
80 public static String is_possible_exemplar_of = "is_possible_exemplar_of";
81 public static String rel_had_patron = "had_patron";
82 public static String rel_has_title_written_as = "has_title_written_as";
83 public static String rel_has_author_written_as = "has_author_written_as";
84 public static String rel_is_reference_of = "is_reference_of";
85
86 public static String rel_was_studied_by = "was_studied_by";
87
88 public static String PAGE_EDITOR = "entry_edit_entity";
89 public static String PAGE_SIMPLE_SEARCH = "simple_search";
90 public static String PAGE_MERGE = "general_merge";
91
92 //some attributes names
93 public static String name = "name";
94 public static String name_translit = "name_translit";
95 public static String full_title_translit = "full_title_translit";
96
97 public static int MAX_SUGGEST = 25;
98
99 protected boolean selectedSaveAsNew = false;
100
101 private HashSet<StatusChecker> statusChecker = new HashSet<StatusChecker>();
102 private boolean warning = false;
103 private String warningMessage = "";
104 private boolean displayWarning = false;
105
106 //private PanelPopup popup = new PanelPopup();
107 //private String popupText = "";
108
109 private String currentId;
110 private String currentIdMsg;
111
112 // used in the new version
113 private Boolean create_error = false;
114 private String selectedWitnessID = "0";
115 private boolean showWitness;
116 private boolean showTitle = false;
117
118 private Map<String, String> attributes = new HashMap<String, String>();
119 protected String defObjectClass = null;
120
121 protected String displayUrl;
122
123 protected Entity entity;
124
125 protected long start;
126
127 public String save(){
128 logger.info("*************** START Saving "+ this.defObjectClass + " [ID=" + entity.getId() +", user"+ getUserName() +"] *********************");
129 this.start = System.currentTimeMillis();
130 return null;
131 }
132
133 protected void saveEnd(){
134 logger.info("*************** END Saving "+ this.defObjectClass + " [ID=" + entity.getId() +", user"+ getUserName() +"] *********************\n");
135 }
136
137 public Entity getEntity() {
138 if (this.entity == null) {
139 this.entity = new Entity();
140 this.entity.setObjectClass(defObjectClass);
141 this.entity.setLightweight(false);
142 this.loadAttributes(this.entity);
143 }
144 return entity;
145 }
146
147 protected void printSuccessSavingEntity(){
148 this.addGeneralMsg("The entity was successfully saved!");
149 this.addGeneralMsg("Its ID is " + this.entity.getId());
150 }
151
152 public void setEntity(Entity entity) {
153 this.entity = entity;
154 }
155
156 public String getSaveButtonLabel(){
157 if(entity.isPersistent())
158 return "Save";
159 return "Create";
160 }
161
162 public boolean isRenderSaveButton(){
163 //#{(CurrentText.entity.id == null and Session.canCreate) || (CurrentText.entity.id != null and Session.canEdit)}
164 if((!entity.isPersistent() && getSessionBean().isCanCreate()) ||
165 entity.isPersistent() && getSessionBean().isCanEdit())
166 return true;
167 return false;
168 }
169
170 public String clearAction(){
171 System.out.println("clearAction");
172 this.entity = new Entity(Node.TYPE_ABOX, this.defObjectClass, false);
173 this.setEntity(this.entity);
174 return PAGE_EDITOR;
175 }
176
177 public String actionReloadEntity(){
178 Long id = null;
179 try{
180 id = new Long(this.getCurrentId());
181 }catch (Exception e) {}
182
183 if(id != null){
184 Entity tmp = getWrapper().getEntityById(id);
185 if(tmp != null && tmp.getObjectClass().equals(this.defObjectClass)){
186 this.setEntity(tmp);
187 }else{
188 this.setCurrentIdMsg("Entity no found!");
189 }
190 }else{
191 this.setCurrentIdMsg("ID is not valid!");
192 }
193 return PAGE_EDITOR;
194 }
195
196 public String getDisplayUrl() {
197 return displayUrl;
198 }
199
200 public void setDisplayUrl(String displayUrl) {
201 this.displayUrl = displayUrl;
202 }
203
204 public static String generateDisplayUrl(Entity author, Entity title, Entity witness, String rootUrl){
205 //example: ?personId=414996&textId=36650&witnessId=66802#witnesses
206 StringBuilder sb = new StringBuilder();
207 if(author != null && author.isPersistent()){
208 sb.append(rootUrl + "/search/displayAuthor.xhtml?");
209 sb.append("personId=" + author.getId());
210 if(title != null && title.isPersistent()){
211 sb.append("&textId=" + title.getId());
212 if(witness != null && witness.isPersistent()){
213 sb.append("&witness=" + witness.getId());
214 sb.append("#witnesses");
215 }else{
216 sb.append("#titles");
217 }
218 }
219 }else if(title != null && title.isPersistent()){
220 sb.append(rootUrl + "/search/displayTitle.xhtml?");
221 sb.append("&textId=" + title.getId());
222 if(witness != null && witness.isPersistent()){
223 sb.append("&witness=" + witness.getId());
224 sb.append("#witnesses");
225 }else{
226 sb.append("#titles");
227 }
228
229 }
230 return sb.toString();
231 }
232
233 //********************************
234 //**** PUBLICATIONS END NOTE *****
235 //********************************
236
237 private ReferenceTable endNoteRefTable = new ReferenceTable();
238
239 protected void loadEndNoteRefs(){
240 this.endNoteRefTable.loadRefs(getEntRefs());
241 }
242
243 public ReferenceTable getEndNoteRefTable() {
244 return endNoteRefTable;
245 }
246
247 public void setEndNoteRefTable(ReferenceTable endNoteRefTable) {
248 this.endNoteRefTable = endNoteRefTable;
249 }
250
251 private List<Entity> getEntRefs(){
252 List<Entity> rs = new ArrayList<Entity>();
253 for (Relation rel : this.entity.getTargetRelations()) {
254 if (rel.getOwnValue().equals(rel_is_reference_of)) {
255 rs.add(getWrapper().getEntityByIdWithContent(rel.getSourceId()));
256 }
257 }
258 return rs;
259 }
260
261 //********************************
262 //**** PUBLICATIONS ESciDOC ******
263 //********************************
264
265 private ESciDocItemDataTable refDataTable = new ESciDocItemDataTable(this);
266 protected SelectedESciDocItems selectedItems = new SelectedESciDocItems();
267
268 public ESciDocItemDataTable getRefDataTable() {
269 return refDataTable;
270 }
271
272 public void setRefDataTable(ESciDocItemDataTable refDataTable) {
273 this.refDataTable = refDataTable;
274 }
275
276 public void listenerRemoveReference(ActionEvent event){
277 List<String> pubIdList = new ArrayList<String>();
278 for(String pubId : this.selectedItems.getMap().keySet()){
279 if(this.selectedItems.getMap().get(pubId)){
280 pubIdList.add(pubId);
281 }
282 }
283 for(String pubId : pubIdList){
284 this.selectedItems.removeById(pubId);
285 }
286 }
287
288 public void loadReferences(Entity currentEntity){
289 this.loadReferences(currentEntity, new ArrayList<String>());
290 }
291
292 public void loadReferences(Entity currentEntity, List<String> idsNoFound){
293 this.selectedItems.setList(new ArrayList<ESciDocItem>());
294 boolean escidocRespondOK = true;
295 try{
296
297 for (Relation rel : currentEntity.getTargetRelations()) {
298 if (rel.getOwnValue().equals(rel_is_reference_of)) {
299 Entity source = getWrapper().getEntityByIdWithContent(rel.getSourceId());
300 ESciDocItem item = getAppBean().getRefCache().getItem(source.getOwnValue());
301 if(item == null){
302 item = new ESciDocItem(source.getOwnValue());
303 item.setErrorLoading(ESciDocItem.ESCIDOC_ERROR_ID_NO_FOUND);
304 idsNoFound.add(source.getOwnValue());
305 }
306
307 /*Publication pub = ESciDocHandler.getPublicationById(source.getOwnValue());
308 if(pub == null){
309 pub = new Publication(source.getOwnValue());
310 pub.setErrorLoading(Publication.ESCIDOC_ERROR_ID_NO_FOUND);
311 idsNoFound.add(source.getOwnValue());
312 }
313 */
314 Attribute att = source.getAttributeByName("additional_information");
315 if(att != null){
316 item.getPublication().setAdditionalInformation(att.getOwnValue());
317 }
318 item.getPublication().setEntity(source);
319 this.selectedItems.addESciDocItem(item);
320 }
321 }
322 }catch (Exception e) {
323 escidocRespondOK = false;
324 }
325 this.reportEscidocError(escidocRespondOK, idsNoFound);
326 }
327
328
329
330 protected void reportEscidocError(boolean escidocRespondOK, List<String> idsNoFound){
331 if(!escidocRespondOK){
332 addGeneralMsg("The references could not be loaded. The server did not respond.");
333 addGeneralMsg("Exception connecting to http://escidoc.mpiwg-berlin.mpg.de:8080 ");
334 }
335
336 if(!idsNoFound.isEmpty()){
337 addGeneralMsg("The following references were not found in Pubman server:");
338 StringBuilder sb = new StringBuilder();
339 int count = 0;
340 for(String id : idsNoFound){
341 if(count > 0){
342 sb.append(", ");
343 }
344 sb.append(id);
345 }
346 addGeneralMsg(sb.toString());
347 }
348
349 }
350
351 protected void prepareEndNoteRefs2Save() throws Exception{
352 //REFERENCE -> is_reference_of -> WITNESS
353 this.entity.removeAllTargetRelationsByName(rel_is_reference_of);
354 for(SelectableObject<Reference> so : this.endNoteRefTable.list){
355 Reference ref = so.getObj();
356
357 Entity entRef = ref.getEnt();
358 getWrapper().saveAssertion(entRef, getUserName());
359 //entity can be no persistent, therefore the assignment of the relation should be done after the save
360 entRef.addSourceRelation(rel_is_reference_of, entity);
361 //new Relation(entRef, entity, rel_is_reference_of);
362 }
363 }
364
365 protected Entity prepareESciDocRefs2Save(Entity currentEntity) throws Exception{
366 //REFERENCE -> is_reference_of -> WITNESS
367 currentEntity.removeAllTargetRelationsByName(rel_is_reference_of);
368 for(ESciDocItem item : this.selectedItems.getList()){
369 Publication pub = item.getPublication();
370 if(pub.getEntity() == null){
371 Entity pubEntity = new Entity(Node.TYPE_ABOX, REFERENCE, false);
372 pubEntity.setOwnValue(pub.getObjid());
373 pubEntity.addAttribute(new Attribute("id", "escidoc-objid", pub.getObjid()));
374 if(StringUtils.isNotEmpty(pub.getAdditionalInformation())){
375 pubEntity.addAttribute(new Attribute("additional_information", "text", pub.getAdditionalInformation()));
376 }
377 pubEntity = getWrapper().saveEntity(pubEntity, getUserName());
378 pub.setEntity(pubEntity);
379 }else{
380 if(pub.getEntity().getAttributeByName("additional_information") != null){
381 pub.getEntity().getAttributeByName("additional_information").setOwnValue(pub.getAdditionalInformation());
382 }else{
383 pub.getEntity().addAttribute(new Attribute("additional_information", "text", pub.getAdditionalInformation()));
384 }
385 pub.setEntity(getWrapper().saveEntity(pub.getEntity(), getUserName()));
386 }
387 Relation rel = new Relation(pub.getEntity(), currentEntity, rel_is_reference_of);
388 }
389 return currentEntity;
390 }
391
392 public static de.mpiwg.itgroup.ismi.util.guiComponents.Calendar updateCalendar(Attribute att){
393 de.mpiwg.itgroup.ismi.util.guiComponents.Calendar calendar = null;
394 if(att != null && StringUtils.isNotEmpty(att.getOwnValue())){
395 calendar = new de.mpiwg.itgroup.ismi.util.guiComponents.Calendar(att.getOwnValue());
396 }else{
397 calendar = new de.mpiwg.itgroup.ismi.util.guiComponents.Calendar();
398 }
399 return calendar;
400 }
401
402 protected void loadAttributes(Entity entity) {
403 attributes = new HashMap<String, String>();
404 if (entity != null) {
405 for (Attribute defAtt : getWrapper().getDefAttributes(this.defObjectClass)) {
406 Attribute originalAtt = entity.getAttributeByName(defAtt
407 .getOwnValue());
408 String attValue = (originalAtt != null) ? originalAtt
409 .getOwnValue() : "";
410 attributes.put(defAtt.getOwnValue(), attValue);
411 }
412 } else {
413 for (Attribute defAtt : getWrapper().getDefAttributes(this.defObjectClass)) {
414 attributes.put(defAtt.getOwnValue(), "");
415 }
416 }
417 }
418
419 public void reset(){
420 this.setSelectedSaveAsNew(false);
421 this.setCurrentId("");
422 this.setCurrentIdMsg("");
423 this.setAttributes(new HashMap<String, String>());
424 this.selectedItems = new SelectedESciDocItems();
425 this.displayUrl = null;
426 this.endNoteRefTable = new ReferenceTable();
427 }
428
429 public boolean isSelectedSaveAsNew() {
430 return selectedSaveAsNew;
431 }
432
433 public void setSelectedSaveAsNew(boolean selectedSaveAsNew) {
434 this.selectedSaveAsNew = selectedSaveAsNew;
435 }
436
437 /**
438 * <p>
439 * "Entity -> CurrentEntity"
440 * </p>
441 * <p>
442 * This method updates the attributes of the given entity with the
443 * attributes of the attributes Map<String, String>.
444 * </p>
445 *
446 * @return the input's entity with updated attributes.
447 */
448 public Entity updateEntityAttributes(Entity entity) {
449 if (entity == null) {
450 entity = new Entity(Node.TYPE_ABOX, false);
451 //entity.setObjectClass(getDefinition().getOwnValue());
452 entity.setObjectClass(this.defObjectClass);
453 }
454 //for (Attribute defAtt : getDefinition(entity).getAttributes()) {
455 for (Attribute defAtt : getWrapper().getDefAttributes(this.defObjectClass)) {
456 Attribute att = entity.getAttributeByName(defAtt.getOwnValue());
457 if (StringUtils.isNotEmpty(this.attributes
458 .get(defAtt.getOwnValue()))) {
459 if (att == null) {
460 att = new Attribute(defAtt);
461 entity.addAttribute(att);
462 }
463 att.setOwnValue(this.attributes.get(defAtt.getOwnValue()));
464 att.setObjectClass(defAtt.getOwnValue());
465 } else if (att != null) {
466 // the attribute must be deleted.
467 entity.getAttributes().remove(att);
468 }
469 }
470 return entity;
471 }
472
473 protected List<SelectItem> updateSuggestedPersonByRole(String searchWord, String objClass, String attName, String role){
474 List<Attribute> attList = getWrapper().getAttributesByDefByAttName(objClass, attName, searchWord.toString(), -1);
475
476 List<SelectItem> suggestedItems = new ArrayList<SelectItem>();
477 if (attList == null)
478 return suggestedItems;
479
480 int count = 0;
481 for (Attribute att : attList) {
482 if(getCache().roleContainsPersonId(role, att.getSourceId())){
483 SelectItem item = new SelectItem(att, att.getOwnValue() + " [" + att.getSourceId() + "]","description: " + att);
484 suggestedItems.add(item);
485 count++;
486 if(count == MAX_SUGGEST)
487 break;
488 }
489 }
490 return suggestedItems;
491 }
492
493 protected List<SelectItem> updateSuggestedItems(ValueChangeEvent event,
494 String objClass, String attName) {
495 return updateSuggestedItems((String) event.getNewValue(), objClass,
496 attName);
497 }
498
499 protected List<SelectItem> updateSuggestedItems(String searchWord,
500 String objClass, String attName) {
501
502 List<Attribute> attList = getWrapper().getAttributesByDefByAttName(objClass, attName, searchWord.toString(), MAX_SUGGEST);
503
504 List<SelectItem> suggestedItems = new ArrayList<SelectItem>();
505 if (attList == null)
506 return suggestedItems;
507
508 for (Attribute att : attList) {
509 SelectItem item = new SelectItem(att, att.getOwnValue() + " [" + att.getSourceId() + "]",
510 "description: " + att);
511 suggestedItems.add(item);
512 }
513 return suggestedItems;
514 }
515
516 protected SimpleSearchCache getCache(){
517 return getAppBean().getSimpleSearchCache();
518 }
519
520 protected List<SelectItem> updateSuggestedItems(String objClass,
521 String firstName, String firstValue, String secondName,
522 String secondValue) {
523
524 List<Attribute> attList =
525 getWrapper().
526 searchAttribute(firstName, firstValue, secondName, secondValue, objClass, MAX_SUGGEST);
527
528 List<SelectItem> suggestedItems = new ArrayList<SelectItem>();
529 if (attList == null)
530 return suggestedItems;
531
532 for (Attribute att : attList) {
533 SelectItem item = new SelectItem(att, att.getOwnValue() + " [" + att.getSourceId() + "]");
534 suggestedItems.add(item);
535 }
536 return suggestedItems;
537 }
538
539 public Map<String, String> getAttributes() {
540 return attributes;
541 }
542
543 public void setAttributes(Map<String, String> attributes) {
544 this.attributes = attributes;
545 }
546
547 /**
548 * <p>
549 * This method plays the role of a small cache to get quickly the
550 * definitions.
551 * </p>
552 * TODO this method must be implemented into a bean in session context and
553 * research by every beans.
554 *
555 * @param assertion
556 * @return
557 */
558 public Entity getLWDefinition(Entity assertion) {
559 return getWrapper().getDefinition(assertion.getObjectClass());
560 }
561
562 public Entity getLWDefinition(String objClass) {
563 return getWrapper().getDefinition(objClass);
564 }
565
566 /**
567 * <p>
568 * Returns the target's entity of a relation. The returned target is no
569 * light weight.
570 * <p>
571 *
572 * @param rel
573 * @param target
574 * @return
575 */
576 protected Entity getTargetRelation(Relation rel) {
577 Entity target = rel.getTarget();
578 if (target == null) {
579 target = getWrapper().getEntityById(rel.getTargetId());
580 rel.setTarget(target);
581 } else if (target.isLightweight()) {
582 target = getWrapper().getEntityContent(target);
583 }
584 return target;
585 }
586
587 protected Attribute getTargetAttribute(Entity target, String name) {
588 Attribute att = getWrapper().getAttributeByName(target.getId(), name);
589
590 if (att == null) {
591 att = new Attribute();
592 att.setOwnValue(target.getOwnValue());
593 }
594 return att;
595 }
596
597 protected WrapperService getWrapper() {
598 return getAppBean().getWrapper();
599 }
600
601 /**
602 * <p>
603 * Return the <code>FacesContext</code> instance for the current request.
604 */
605 protected FacesContext context() {
606 return (FacesContext.getCurrentInstance());
607 }
608
609 public void setCreate_error(Boolean create_error) {
610 this.create_error = create_error;
611 }
612
613 public Boolean getCreate_error() {
614 return create_error;
615 }
616
617 /**
618 * Eine Liste <code>toBeRestricted</code> wird so eingeschraenkt, dass nur
619 * noch die jenigen uebrig bleiben, die �ber die Relation
620 * <code>relation</code> mit einem der Elemente aus
621 * <code>contraintIds</code> verbunden sind.
622 *
623 * @param toBeRestricted
624 * @param constraintIds
625 * @param relation
626 * @param mode
627 * @return
628 */
629 protected List<SelectItem> restrictList(List<SelectItem> toBeRestricted,
630 List<String> constraintIds, String relation, String mode) {
631
632 List<SelectItem> newList = new ArrayList<SelectItem>();
633
634 for (SelectItem s : toBeRestricted) {
635 Entity ent = getWrapper().getEntityById(
636 Long.valueOf((String) s.getValue()));
637 if (s.getValue().equals("0")) {
638 newList.add(s);
639 continue;
640 }
641
642 List<Relation> rels;
643 if (mode.equals("target")) {
644 rels = ent.getTargetRelations();
645 } else if (mode.equals("source")) {
646 rels = ent.getSourceRelations();
647 } else {
648 System.err.println("restrict List - mode not defined:" + mode);
649 return null;
650 }
651
652 for (Relation r : rels) {
653 if (r.getObjectClass().equals(relation)) {
654 Long id;
655 if (mode.equals("target")) {
656 id = r.getSource().getId();
657 } else if (mode.equals("source")) {
658 id = r.getTarget().getId();
659 } else {
660 System.err.println("restrict List - mode not defined:"
661 + mode);
662 return null;
663 }
664 if (constraintIds.contains(String.valueOf(id))) {
665 newList.add(s);
666 }
667 }
668 }
669 }
670
671 return newList;
672 }
673
674 public String getSelectedWitnessID() {
675 return selectedWitnessID;
676 }
677
678 public void setShowWitness(boolean showWitness) {
679 this.showWitness = showWitness;
680 }
681
682 public boolean isShowWitness() {
683 return showWitness;
684 }
685
686 public void setShowTitle(boolean showTitle) {
687 this.showTitle = showTitle;
688 }
689
690 public boolean isShowTitle() {
691 return showTitle;
692 }
693 /*
694 public PanelPopup getPopup() {
695 return popup;
696 }
697
698 public void setPopup(PanelPopup popup) {
699 this.popup = popup;
700 }
701
702 public String getPopupText() {
703 return popupText;
704 }
705
706 public void setPopupText(String popupText) {
707 this.popupText = popupText;
708 }*/
709
710
711 public String getUserName(){
712 User user = getSessionUser();
713 if(user == null)
714 return "";
715 else
716 return user.getEmail();
717 }
718
719 public User getSessionUser() {
720 SessionBean bean = getSessionBean();
721 if(bean != null){
722 return bean.getUser();
723 }else{
724 return null;
725 }
726 }
727
728 public void fillList(List<SelectItem> list, String[] array) {
729 list.add(new SelectItem(""));
730 for (int i = 0; i < array.length; i++) {
731 list.add(new SelectItem(array[i]));
732 }
733
734 }
735
736 public boolean isWarning() {
737 return warning;
738 }
739
740 public void setWarning(boolean warning) {
741 this.warning = warning;
742 }
743
744 public void setWarningMessage(String warningMessage) {
745 this.warningMessage = warningMessage;
746 }
747
748 public String getWarningMessage() {
749 return warningMessage;
750 }
751
752 public void setDisplayWarning(boolean displayWarning) {
753 this.displayWarning = displayWarning;
754 }
755
756 public boolean isDisplayWarning() {
757 return displayWarning;
758 }
759
760 public void registerChecker(StatusChecker sc) {
761 statusChecker.add(sc);
762 }
763
764 public void registerChecker(ListenerObject lo, String message) {
765 registerChecker(lo.statusImage, message);
766
767 }
768
769 public void registerChecker(StatusChecker sc, String message) {
770 sc.setMessage(message);
771 statusChecker.add(sc);
772 }
773
774 class CheckResults {
775 List<String> errors = new ArrayList<String>();
776 List<String> warnings = new ArrayList<String>();
777 public boolean hasErrors = false;
778 public boolean hasWarnings = false;
779
780 }
781
782 public CheckResults getCheckResults() {
783 CheckResults cr = new CheckResults();
784
785 for (StatusChecker sc : statusChecker) {
786 if (sc.getStatus().equals("false")) {
787 cr.hasErrors = true;
788 cr.errors.add(sc.getMessage());
789 } else if (sc.getStatus().equals("unset")) {
790 cr.hasWarnings = true;
791 cr.warnings.add(sc.getMessage());
792 }
793 }
794 return cr;
795 }
796
797 protected ListenerObject changeValue(String ownvalue, ListenerObject lo, String suggestType, String suggestAttributeName,
798 List<SelectItem> restrictedItems) {
799 if (restrictedItems != null) {
800 lo.suggestedItems = restrictedItems;}
801
802 if (ownvalue == null || ownvalue.equals(""))
803 lo.statusImage.setStatus("unset");
804 else
805 lo.statusImage.setStatus("false");
806 lo.entity = null;
807 // setze erst mal den Eigenwert auf das eingebene.
808 Attribute at = new Attribute();
809 at.setOwnValue(ownvalue);
810 lo.attribute = at;
811 Entity element = null;
812 if (lo.suggestedItems != null) // schaue in der liste der vorgebenen Ereignisse nach.
813 for (SelectItem item : lo.suggestedItems) {
814 if (item.getLabel().equals(ownvalue)) {
815 if (Attribute.class.isInstance(item.getValue())){ // entweder es ist schon ein attribute
816 lo.attribute = (Attribute) item.getValue();
817 element = getWrapper().getEntityById(
818 lo.attribute.getSourceId());
819 }else{ //oder ein paar wert / id// = (Attribute) item.getValue();
820 element = getWrapper().getEntityById(Long.valueOf((String) item.getValue()));
821 lo.setEntityAndAttribute(element, suggestAttributeName);
822 }
823 if (element != null) {
824 if(element.isLightweight()){
825 element = getWrapper().getEntityByIdWithContent(element.getId());
826 }
827 lo.entity = element;
828 lo.statusImage.setStatus("ok");
829 }
830 break;
831 }
832
833 } else {
834 //juc *** List<Entity> ents = getWrapper().getLightweightConceptsByAttribute(null, suggestType, suggestAttributeName, ownvalue, 1, false);
835 List<Entity> ents = getWrapper().getEntitiesByAtt(suggestType, suggestAttributeName, ownvalue, 1, false);
836 if (ents.size()==1){
837 lo.setEntityAndAttribute(ents.get(0),suggestAttributeName);
838 lo.statusImage.setStatus("ok");
839 }
840
841 }
842 return lo;
843
844 }
845
846
847
848 protected ListenerObject changeValuePersonByRole(ValueChangeEvent event, ListenerObject lo, String role){
849 if (event.getNewValue() == null) {
850 return lo;
851 }else if(StringUtils.isEmpty(event.getNewValue().toString()) && (event.getOldValue() == null || StringUtils.isEmpty(event.getOldValue().toString()))){
852 //if the old and new value are empty, then return
853 return lo;
854 }
855 if (event.getNewValue().equals(event.getOldValue())) {
856 return lo;
857 }
858
859 String ownValue = (String) event.getNewValue();
860
861 if(StringUtils.isEmpty(ownValue))
862 lo.statusImage.setStatus("unset");
863 else
864 lo.statusImage.setStatus("false");
865
866 lo.entity = null;
867 // setze erst mal den Eigenwert auf das eingebene.
868 Attribute at = new Attribute();
869 at.setOwnValue(ownValue);
870 lo.attribute = at;
871 for (SelectItem item : lo.suggestedItems) {
872 if (StringUtils.isNotEmpty(item.getLabel()) &&
873 item.getLabel().equals(ownValue)) {
874 //System.out.println("item.getValue()= " + item.getValue());
875 lo.attribute = (Attribute) item.getValue();
876 Entity element = getWrapper().getEntityById(
877 lo.attribute.getSourceId());
878
879 if (element != null) {
880 if(element.isLightweight()){
881 element = getWrapper().getEntityByIdWithContent(element.getId());
882 }
883 lo.entity = element;
884 lo.statusImage.setStatus(StatusImage.STATUS_OK);
885 }
886 break;
887 }
888
889 }
890
891 //juc lo.suggestedItems = updateSuggestedPersonByRole(ownValue, PERSON, "name", role);
892 lo.suggestedItems = updateSuggestedPersonByRole(ownValue, PERSON, "name_translit", role);
893
894
895 return lo;
896 }
897
898 protected ListenerObject changeValue(String ownvalue, ListenerObject lo,
899 String suggestType, String suggestAttributeName) {
900
901 return changeValue(ownvalue, lo, suggestType, suggestAttributeName,
902 null);
903 }
904
905 protected ListenerObject changeListener(ValueChangeEvent event,
906 ListenerObject lo, String suggestType, String suggestAttributeName,
907 String restrictingAttributeName, String restrictingAttributeValue) {
908 try {
909 if (event.getNewValue() == null) {
910 return lo;
911 }else if(StringUtils.isEmpty(event.getNewValue().toString()) && (event.getOldValue() == null || StringUtils.isEmpty(event.getOldValue().toString()))){
912 //if the old and new value are empty, then return
913 return lo;
914 }
915 if (event.getNewValue().equals(event.getOldValue())) {
916 return lo;
917 }
918
919 String ownvalue = (String) event.getNewValue();
920
921 if(StringUtils.isEmpty(ownvalue))
922 lo.statusImage.setStatus(StatusImage.STATUS_UNSET);
923 else
924 lo.statusImage.setStatus(StatusImage.STATUS_FALSE);
925
926 lo.entity = null;
927 // setze erst mal den Eigenwert auf das eingebene.
928 Attribute at = new Attribute();
929 at.setOwnValue(ownvalue);
930 lo.attribute = at;
931 for (SelectItem item : lo.suggestedItems) {
932 if (StringUtils.isNotEmpty(item.getLabel()) &&
933 item.getLabel().equals(ownvalue)) {
934 //System.out.println("item.getValue()= " + item.getValue());
935 lo.attribute = (Attribute) item.getValue();
936 Entity element = getWrapper().getEntityById(
937 lo.attribute.getSourceId());
938
939 if (element != null) {
940 if(element.isLightweight()){
941 element = getWrapper().getEntityByIdWithContent(element.getId());
942 }
943 lo.entity = element;
944 lo.statusImage.setStatus(StatusImage.STATUS_OK);
945 }
946 break;
947 }
948
949 }
950
951 if (restrictingAttributeName == null) {
952 lo.suggestedItems = this.updateSuggestedItems(event,
953 suggestType, suggestAttributeName);
954 } else {
955 lo.suggestedItems = this.updateSuggestedItems(suggestType,
956 suggestAttributeName, event.getNewValue().toString(),
957 restrictingAttributeName, restrictingAttributeValue);
958 }
959
960 } catch (Exception e) {
961 e.printStackTrace();
962 }
963 return lo;
964 }
965
966 protected void generateSecundaryOW(Entity entity, String user) throws Exception{
967 List<Entity> nodeList = new ArrayList<Entity>();
968
969 long start = System.currentTimeMillis();
970 if(entity.getObjectClass().equals(PLACE)){
971 this.generateOW4City(entity, nodeList, user);
972 long medium = System.currentTimeMillis();
973 System.out.println("nodeList.size(): " + nodeList.size() + " time: " + (medium - start));
974 getWrapper().saveEntityListAsNodeWithoutContent(nodeList, user);
975 System.out.println("Save time: " + (System.currentTimeMillis() - medium));
976 }else if(entity.getObjectClass().equals(REPOSITORY)){
977 this.generateOW4Repository(entity, nodeList, new HashMap<String, String>(), user);
978 long medium = System.currentTimeMillis();
979 System.out.println("nodeList.size(): " + nodeList.size() + " time: " + (medium - start));
980 getWrapper().saveEntityListAsNodeWithoutContent(nodeList, user);
981 System.out.println("Save time: " + (System.currentTimeMillis() - medium));
982 }else if(entity.getObjectClass().equals(COLLECTION)){
983 this.generateOW4Collection(entity, nodeList, new HashMap<String, String>(), user);
984 long medium = System.currentTimeMillis();
985 System.out.println("nodeList.size(): " + nodeList.size() + " time: " + (medium - start));
986 getWrapper().saveEntityListAsNodeWithoutContent(nodeList, user);
987 System.out.println("Save time: " + (System.currentTimeMillis() - medium));
988 }else if(entity.getObjectClass().equals(CODEX)){
989 this.generateOW4Codex(entity, nodeList, new HashMap<String, String>(), user);
990 long medium = System.currentTimeMillis();
991 System.out.println("nodeList.size(): " + nodeList.size() + " time: " + (medium - start));
992 getWrapper().saveEntityListAsNodeWithoutContent(nodeList, user);
993 System.out.println("Save time: " + (System.currentTimeMillis() - medium));
994 }else if(entity.getObjectClass().equals(TEXT)){
995 generateOW4Text(entity, user);
996 long medium = System.currentTimeMillis();
997 System.out.println("Saving witnessList time: " + (medium - start));
998 }
999 //TODO PERSON and TEXT
1000 }
1001
1002 private void generateOW4City(Entity city, List<Entity> nodeList, String user){
1003 Map<String, String> map = new HashMap<String, String>();
1004 map.put(PLACE, city.getOwnValue());
1005
1006 List<Entity> repoList = getWrapper().getSourcesForTargetRelation(city, is_in, REPOSITORY, -1);
1007 for(Entity repo : repoList){
1008 this.generateOW4Repository(repo, nodeList, map, user);
1009 }
1010 }
1011
1012 private void generateOW4Repository(Entity repository, List<Entity> nodeList, Map<String, String> map, String user){
1013 if(map.size() == 0){
1014 List<Entity> placeList = getWrapper().getTargetsForSourceRelation(repository, is_in, PLACE, 1);
1015 map.put(PLACE, ((placeList.size() > 0) ? placeList.get(0).getOwnValue() : ""));
1016 }
1017
1018 map.put(REPOSITORY, repository.getOwnValue());
1019 List<Entity> collectionList = getWrapper().getSourcesForTargetRelation(repository, is_part_of, COLLECTION, -1);
1020 for(Entity collection : collectionList){
1021 this.generateOW4Collection(collection, nodeList, map, user);
1022 }
1023 }
1024
1025 private void generateOW4Collection(Entity collection, List<Entity> nodeList, Map<String, String> map, String user){
1026 if(map.size() == 0){
1027 List<Entity> repoList = getWrapper().getTargetsForSourceRelation(collection, is_part_of, REPOSITORY, 1);
1028 map.put(REPOSITORY, (repoList.size() > 0) ? repoList.get(0).getOwnValue() : "");
1029 if(repoList.size() > 0){
1030 Entity repository = repoList.get(0);
1031 List<Entity> placeList = getWrapper().getTargetsForSourceRelation(repository, is_in, PLACE, 1);
1032 map.put(PLACE, (placeList.size() > 0) ? placeList.get(0).getOwnValue() : "");
1033 }else{
1034 map.put(REPOSITORY, "");
1035 map.put(PLACE, "");
1036 }
1037 }
1038
1039 map.put(COLLECTION, collection.getOwnValue());
1040 List<Entity> list = getWrapper().getSourcesForTargetRelation(collection, is_part_of, CODEX, -1);
1041 for(Entity codex : list){
1042 //update ow codex
1043 Attribute att = getWrapper().getAttributeByName(codex.getId(), "identifier");
1044 if(att != null){
1045 codex.setOwnValue(collection.getOwnValue() + "_" + att.getOwnValue());
1046 nodeList.add(codex);
1047 }
1048 this.generateOW4Codex(codex, nodeList, map, user);
1049 }
1050 }
1051
1052 private void generateOW4Codex(Entity codex, List<Entity> nodeList, Map<String, String> map, String user){
1053 if(map.size() == 0){
1054 List<Entity> collList = getWrapper().getTargetsForSourceRelation(codex, is_part_of, COLLECTION, 1);
1055 map.put(COLLECTION, (collList.size() > 0 ) ? collList.get(0).getOwnValue() : "");
1056 if(collList.size() > 0){
1057 Entity collection = collList.get(0);
1058 List<Entity> repoList = getWrapper().getTargetsForSourceRelation(collection, is_part_of, REPOSITORY, 1);
1059 map.put(REPOSITORY, (repoList.size() > 0) ? repoList.get(0).getOwnValue() : "");
1060 if(repoList.size() > 0){
1061 Entity repository = repoList.get(0);
1062 List<Entity> placeList = getWrapper().getTargetsForSourceRelation(repository, is_in, PLACE, 1);
1063 map.put(PLACE, (placeList.size() > 0) ? placeList.get(0).getOwnValue() : "");
1064 }else{
1065 map.put(PLACE, "");
1066 }
1067 }else{
1068 map.put(COLLECTION, "");
1069 map.put(REPOSITORY, "");
1070 map.put(PLACE, "");
1071 }
1072 }
1073 List<Entity> list = getWrapper().getSourcesForTargetRelation(codex, is_part_of, WITNESS, -1);
1074 String placeText = (StringUtils.isNotEmpty(map.get(PLACE))) ? "_" + map.get(PLACE) : "";
1075 String repoText = (StringUtils.isNotEmpty(map.get(REPOSITORY))) ? "_" + map.get(REPOSITORY) : "";
1076 String codexText = (codex != null) ? "_" + codex.getOwnValue() : "";
1077
1078 for(Entity witness : list){
1079 List<Entity> textList = getWrapper().getTargetsForSourceRelation(witness, "is_exemplar_of", TEXT, -1);
1080 String textName = (textList.size() > 0) ? textList.get(0).getOwnValue() : "";
1081 witness.setOwnValue(textName + placeText + repoText + codexText);
1082 nodeList.add(witness);
1083 }
1084 }
1085
1086 private void generateOW4Text(Entity text, String user) throws Exception{
1087 List<Entity> witnessList = getWrapper().getSourcesForTargetRelation(text, "is_exemplar_of", WITNESS, -1);
1088 List<Entity> listToSave = new ArrayList<Entity>();
1089 for(Entity witness : witnessList){
1090 List<Entity> list = getWrapper().getTargetsForSourceRelation(witness, "is_part_of", "CODEX", 1);
1091 if(list.size() > 0){
1092 Entity codex = list.get(0);
1093 list = getWrapper().getTargetsForSourceRelation(codex, "is_part_of", "COLLECTION", 1);
1094 if(list.size() > 0){
1095 Entity collection = list.get(0);
1096 list = getWrapper().getTargetsForSourceRelation(collection, "is_part_of", "REPOSITORY", 1);
1097 if(list.size() > 0){
1098 Entity repository = list.get(0);
1099 list = getWrapper().getTargetsForSourceRelation(repository, "is_in", "PLACE", 1);
1100 if(list.size() > 0){
1101 Entity city = list.get(0);
1102 witness.setOwnValue(text.getOwnValue() + "_" + city.getOwnValue() + "_" + repository.getOwnValue() + "_" + codex.getOwnValue());
1103 listToSave.add(witness);
1104 }
1105 }
1106 }
1107 }
1108 getWrapper().saveEntityListAsNodeWithoutContent(listToSave, user);
1109 }
1110 }
1111
1112 protected SecurityService getSecurityService() {
1113 return getAppBean().getSecurityService();
1114 }
1115
1116 protected ListenerObject changeListener(ValueChangeEvent event,
1117 ListenerObject lo, String suggestType, String suggestAttributeName) {
1118
1119 return changeListener(event, lo, suggestType, suggestAttributeName,
1120 null, null);
1121 }
1122
1123 public String getCurrentId() {
1124 return currentId;
1125 }
1126
1127 public void setCurrentId(String currentId) {
1128 this.currentId = currentId;
1129 }
1130
1131 public String getCurrentIdMsg() {
1132 return currentIdMsg;
1133 }
1134
1135 public void setCurrentIdMsg(String currentIdMsg) {
1136 this.currentIdMsg = currentIdMsg;
1137 }
1138
1139 public SelectedESciDocItems getSelectedItems() {
1140 return selectedItems;
1141 }
1142
1143 public void setSelectedItems(SelectedESciDocItems selectedItems) {
1144 this.selectedItems = selectedItems;
1145 }
1146
1147 public String getDefObjectClass() {
1148 return defObjectClass;
1149 }
1150
1151 public void setDefObjectClass(String defObjectClass) {
1152 this.defObjectClass = defObjectClass;
1153 }
1154 }