annotate src/main/java/de/mpiwg/itgroup/ismi/entry/beans/CurrentCollectionBean.java @ 134:25bfcc9d757c

effort to re-use more relations when saving entities. new replaceMultipleSourceRelations() and changes to use it. changes for renamed replaceUniqueSourceRelation().
author casties
date Fri, 24 Feb 2017 20:25:33 +0100
parents eee2e0ca4032
children 502ae5b1a07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
jurzua
parents:
diff changeset
1 package de.mpiwg.itgroup.ismi.entry.beans;
jurzua
parents:
diff changeset
2
jurzua
parents:
diff changeset
3 import java.io.Serializable;
jurzua
parents:
diff changeset
4
jurzua
parents:
diff changeset
5 import org.apache.commons.lang.StringUtils;
jurzua
parents:
diff changeset
6 import org.apache.log4j.Logger;
jurzua
parents:
diff changeset
7 import org.mpi.openmind.repository.bo.Attribute;
jurzua
parents:
diff changeset
8 import org.mpi.openmind.repository.bo.Entity;
jurzua
parents:
diff changeset
9 import org.mpi.openmind.repository.bo.Node;
125
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
10 import org.mpi.openmind.repository.services.utils.EditIntent;
1
jurzua
parents:
diff changeset
11
jurzua
parents:
diff changeset
12 public class CurrentCollectionBean extends CodexEditorTemplate implements
jurzua
parents:
diff changeset
13 Serializable {
jurzua
parents:
diff changeset
14 private static final long serialVersionUID = 5723693904746973203L;
jurzua
parents:
diff changeset
15
jurzua
parents:
diff changeset
16 public static int MAX_PLACES = 100;
jurzua
parents:
diff changeset
17 public static int MAX_REPOSITORIES = 100;
jurzua
parents:
diff changeset
18 private static Logger logger = Logger
jurzua
parents:
diff changeset
19 .getLogger(CurrentCollectionBean.class);
jurzua
parents:
diff changeset
20
jurzua
parents:
diff changeset
21 protected Boolean restrictCities = true;
jurzua
parents:
diff changeset
22 private Boolean restrictRepositories = true;
jurzua
parents:
diff changeset
23
125
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
24 /** intent to edit all attributes and relations in the form */
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
25 public static EditIntent editCollectionIntent = new EditIntent(
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
26 AbstractISMIBean.COLLECTION,
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
27 // attributes
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
28 new String[]{"name"},
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
29 // source relations
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
30 new String[]{"is_part_of"},
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
31 // target relations
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
32 new String[]{"is_reference_of"});
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
33
1
jurzua
parents:
diff changeset
34
jurzua
parents:
diff changeset
35 @Override
jurzua
parents:
diff changeset
36 public void reset() {
jurzua
parents:
diff changeset
37 super.reset();
jurzua
parents:
diff changeset
38 this.entity = new Entity(Node.TYPE_ABOX, COLLECTION, false);
jurzua
parents:
diff changeset
39
jurzua
parents:
diff changeset
40 this.restrictCities = true;
jurzua
parents:
diff changeset
41 this.restrictRepositories = true;
jurzua
parents:
diff changeset
42
jurzua
parents:
diff changeset
43 this.entity = new Entity(Node.TYPE_ABOX, COLLECTION, false);
jurzua
parents:
diff changeset
44 }
jurzua
parents:
diff changeset
45
jurzua
parents:
diff changeset
46 public CurrentCollectionBean() {
jurzua
parents:
diff changeset
47 this.reset();
jurzua
parents:
diff changeset
48 // setDefinition(getDefinition("COLLECTION"));
jurzua
parents:
diff changeset
49 setDefObjectClass(COLLECTION);
jurzua
parents:
diff changeset
50 registerChecker(getCityLo(), "City is not valid!");
jurzua
parents:
diff changeset
51 registerChecker(getCountryLo(), "Country is not valid!");
jurzua
parents:
diff changeset
52 registerChecker(getRepositoryLo(), "Repository is not valid!");
jurzua
parents:
diff changeset
53 }
jurzua
parents:
diff changeset
54
jurzua
parents:
diff changeset
55 public Boolean getRestrictCities() {
jurzua
parents:
diff changeset
56 return restrictCities;
jurzua
parents:
diff changeset
57 }
jurzua
parents:
diff changeset
58
jurzua
parents:
diff changeset
59 public void setRestrictCities(Boolean restrictCities) {
jurzua
parents:
diff changeset
60 this.restrictCities = restrictCities;
jurzua
parents:
diff changeset
61 }
jurzua
parents:
diff changeset
62
jurzua
parents:
diff changeset
63 public Boolean getRestrictRepositories() {
jurzua
parents:
diff changeset
64 return restrictRepositories;
jurzua
parents:
diff changeset
65 }
jurzua
parents:
diff changeset
66
jurzua
parents:
diff changeset
67 public void setRestrictRepositories(Boolean restrictRepositories) {
jurzua
parents:
diff changeset
68 this.restrictRepositories = restrictRepositories;
jurzua
parents:
diff changeset
69 }
jurzua
parents:
diff changeset
70
jurzua
parents:
diff changeset
71 public void setEntity(Entity collection) {
jurzua
parents:
diff changeset
72 this.reset();
jurzua
parents:
diff changeset
73 this.entity = collection;
jurzua
parents:
diff changeset
74
jurzua
parents:
diff changeset
75 if (this.entity != null && this.entity.isPersistent()) {
jurzua
parents:
diff changeset
76 if (this.entity.isLightweight()) {
jurzua
parents:
diff changeset
77 this.entity = getWrapper().getEntityContent(this.entity);
jurzua
parents:
diff changeset
78 }
jurzua
parents:
diff changeset
79
jurzua
parents:
diff changeset
80 this.loadAttributes(this.entity);
jurzua
parents:
diff changeset
81
jurzua
parents:
diff changeset
82 for (Entity target : getWrapper().getTargetsForSourceRelation(
jurzua
parents:
diff changeset
83 collection, "is_part_of", REPOSITORY, 1)) {
jurzua
parents:
diff changeset
84 setRepository(target);
jurzua
parents:
diff changeset
85 }
jurzua
parents:
diff changeset
86
jurzua
parents:
diff changeset
87 // this.loadReferences(this.entity);
jurzua
parents:
diff changeset
88 this.loadEndNoteRefs();
jurzua
parents:
diff changeset
89
jurzua
parents:
diff changeset
90 this.setCurrentId(this.entity.getId().toString());
jurzua
parents:
diff changeset
91 this.checkConsistencyFromCountryToCodex();
jurzua
parents:
diff changeset
92 }
jurzua
parents:
diff changeset
93 }
jurzua
parents:
diff changeset
94
jurzua
parents:
diff changeset
95 public String saveAsNewEntity() {
jurzua
parents:
diff changeset
96 this.setSelectedSaveAsNew(true);
jurzua
parents:
diff changeset
97 return save();
jurzua
parents:
diff changeset
98 }
jurzua
parents:
diff changeset
99
jurzua
parents:
diff changeset
100 @Override
jurzua
parents:
diff changeset
101 public String save() {
jurzua
parents:
diff changeset
102 super.save();
jurzua
parents:
diff changeset
103 try {
jurzua
parents:
diff changeset
104
jurzua
parents:
diff changeset
105 CheckResults cr = getCheckResults();
jurzua
parents:
diff changeset
106 if (cr.hasErrors) {
jurzua
parents:
diff changeset
107 getSessionBean().setErrorMessages(cr);
jurzua
parents:
diff changeset
108 getSessionBean().setDisplayError(true);
jurzua
parents:
diff changeset
109 this.setSelectedSaveAsNew(false);
jurzua
parents:
diff changeset
110 return "";
jurzua
parents:
diff changeset
111 }
jurzua
parents:
diff changeset
112
jurzua
parents:
diff changeset
113 this.entity = this.updateEntityAttributes(this.entity);
jurzua
parents:
diff changeset
114 // checking is the identifier is unique for the selected collecion
jurzua
parents:
diff changeset
115 Attribute attName = this.entity.getAttributeByName("name");
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
116 String collectionName = (attName == null) ? null : attName.getValue();
1
jurzua
parents:
diff changeset
117 if (StringUtils.isNotEmpty(collectionName)) {
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
118 if (!checkUnityCollection(collectionName, (isSelectedSaveAsNew()) ? null : this.entity.getId(),
1
jurzua
parents:
diff changeset
119 this.getRepositoryLo().entity)) {
jurzua
parents:
diff changeset
120 this.renderUnityCheckerDialog();
jurzua
parents:
diff changeset
121 this.setSelectedSaveAsNew(false);
jurzua
parents:
diff changeset
122 return "";
jurzua
parents:
diff changeset
123 }
jurzua
parents:
diff changeset
124 } else {
jurzua
parents:
diff changeset
125 this.addErrorMsg("Ths entity has not been saved, because its name was empty.");
jurzua
parents:
diff changeset
126 this.addErrorMsg("You must enter a name.");
jurzua
parents:
diff changeset
127 return "";
jurzua
parents:
diff changeset
128 }
jurzua
parents:
diff changeset
129
jurzua
parents:
diff changeset
130 if (!isCollectionConsistentBeforeSave()) {
jurzua
parents:
diff changeset
131 return "";
jurzua
parents:
diff changeset
132 }
jurzua
parents:
diff changeset
133
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
134 if (this.getRepositoryLo().entity != null && this.getRepositoryLo().entity.isLightweight()) {
1
jurzua
parents:
diff changeset
135 this.getRepositoryLo().entity = getWrapper()
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
136 .getEntityByIdWithContent(this.getRepositoryLo().entity.getId());
1
jurzua
parents:
diff changeset
137 }
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
138 this.entity.replaceUniqueSourceRelation(this.getRepositoryLo().entity, REPOSITORY, is_part_of);
1
jurzua
parents:
diff changeset
139
jurzua
parents:
diff changeset
140 // REFERENCE -> is_reference_of -> THIS
jurzua
parents:
diff changeset
141 this.prepareEndNoteRefs2Save();
jurzua
parents:
diff changeset
142
jurzua
parents:
diff changeset
143 if (isSelectedSaveAsNew()) {
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
144 // this.entity.removeAllTargetRelations(is_part_of, CODEX);
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
145 // this.entity = getWrapper().saveEntityAsNew(this.entity,
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
146 // getSessionUser().getEmail());
1
jurzua
parents:
diff changeset
147 } else {
125
eee2e0ca4032 updated entry beans to use EditIntents.
casties
parents: 124
diff changeset
148 this.entity = getWrapper().saveEntity(this.entity, getSessionUser().getEmail(), editCollectionIntent);
1
jurzua
parents:
diff changeset
149 }
jurzua
parents:
diff changeset
150
91
d172201d24ad more comments and refactorings.
casties
parents: 1
diff changeset
151 this.updateRelatedOW(this.entity, getSessionUser().getEmail());
1
jurzua
parents:
diff changeset
152 this.setCurrentId(this.entity.getId().toString());
jurzua
parents:
diff changeset
153
134
25bfcc9d757c effort to re-use more relations when saving entities.
casties
parents: 125
diff changeset
154 logger.info("Entity saved - Time = " + (System.currentTimeMillis() - start) + ", " + entity);
1
jurzua
parents:
diff changeset
155 this.printSuccessSavingEntity();
jurzua
parents:
diff changeset
156
jurzua
parents:
diff changeset
157 this.setSelectedSaveAsNew(false);
jurzua
parents:
diff changeset
158
jurzua
parents:
diff changeset
159 } catch (Exception e) {
jurzua
parents:
diff changeset
160 logger.error(e.getMessage(), e);
jurzua
parents:
diff changeset
161 e.printStackTrace();
jurzua
parents:
diff changeset
162 this.printInternalError(e);
jurzua
parents:
diff changeset
163 }
jurzua
parents:
diff changeset
164 saveEnd();
jurzua
parents:
diff changeset
165
jurzua
parents:
diff changeset
166 return PAGE_EDITOR;
jurzua
parents:
diff changeset
167 }
jurzua
parents:
diff changeset
168
jurzua
parents:
diff changeset
169 /**
jurzua
parents:
diff changeset
170 * <p>
jurzua
parents:
diff changeset
171 * This method saves the collection without the loading of its contain when
jurzua
parents:
diff changeset
172 * it is not necessary. LW means that the collection keeps light weight or
jurzua
parents:
diff changeset
173 * without attributes and relation.
jurzua
parents:
diff changeset
174 * </p>
jurzua
parents:
diff changeset
175 * <p>
jurzua
parents:
diff changeset
176 * It is normally used by classes (like: CurrentCodex, CurrentWitness) which
jurzua
parents:
diff changeset
177 * inherit of this class.
jurzua
parents:
diff changeset
178 * </p>
jurzua
parents:
diff changeset
179 *
jurzua
parents:
diff changeset
180 * @param collection
jurzua
parents:
diff changeset
181 */
jurzua
parents:
diff changeset
182 public void setLWCollection(Entity collection) {
jurzua
parents:
diff changeset
183 this.entity = collection;
jurzua
parents:
diff changeset
184 }
jurzua
parents:
diff changeset
185 }