This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository coselmar. See http://git.codelutin.com/coselmar.git commit f4d6b4112f25986a0a89bcc75c3a3d6a026964e7 Author: Yannick Martel <martel@©odelutin.com> Date: Thu Jan 7 10:47:13 2016 +0100 refs-40 #7867 revue pour avoir des objets {url, name} pour les liens plutot que juste des urls en String --- .../V1_2_0_1__7867_add_list_links_in_projects.sql | 14 ++++++-- .../src/main/xmi/coselmar-model.zargo | Bin 10461 -> 10967 bytes .../java/fr/ifremer/coselmar/beans/LinkBean.java | 39 +++++++++++++++++++++ .../fr/ifremer/coselmar/beans/QuestionBean.java | 13 +++++-- .../coselmar/converter/BeanEntityConverter.java | 27 +++++++++----- .../coselmar/services/v1/QuestionsWebService.java | 37 +++++++++++++++++++ coselmar-ui/src/main/webapp/i18n/en.js | 1 + coselmar-ui/src/main/webapp/i18n/fr.js | 1 + 8 files changed, 117 insertions(+), 15 deletions(-) diff --git a/coselmar-persistence/src/main/resources/db/migration/V1_2_0_1__7867_add_list_links_in_projects.sql b/coselmar-persistence/src/main/resources/db/migration/V1_2_0_1__7867_add_list_links_in_projects.sql index 272840e..e4c4b7c 100644 --- a/coselmar-persistence/src/main/resources/db/migration/V1_2_0_1__7867_add_list_links_in_projects.sql +++ b/coselmar-persistence/src/main/resources/db/migration/V1_2_0_1__7867_add_list_links_in_projects.sql @@ -20,7 +20,15 @@ -- #L% --- -CREATE TABLE question_links( - OWNER VARCHAR(255) NOT NULL REFERENCES QUESTION(TOPIAID), - LINKS VARCHAR(255) +CREATE TABLE link ( + topiaId character varying(255) PRIMARY KEY, + topiaVersion bigint NOT NULL, + topiaCreateDate timestamp without time zone NOT NULL, + url VARCHAR(255), + name VARCHAR(255) +); + +CREATE TABLE links_question( + question VARCHAR(255) NOT NULL REFERENCES QUESTION(TOPIAID), + links VARCHAR(255) NOT NULL REFERENCES LINK(TOPIAID) ); \ No newline at end of file diff --git a/coselmar-persistence/src/main/xmi/coselmar-model.zargo b/coselmar-persistence/src/main/xmi/coselmar-model.zargo index 2f02026..38acbde 100644 Binary files a/coselmar-persistence/src/main/xmi/coselmar-model.zargo and b/coselmar-persistence/src/main/xmi/coselmar-model.zargo differ diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/LinkBean.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/LinkBean.java new file mode 100644 index 0000000..a6075e7 --- /dev/null +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/LinkBean.java @@ -0,0 +1,39 @@ +package fr.ifremer.coselmar.beans; + +import java.io.Serializable; + +/** + * @author ymartel (martel@codelutin.com) + */ +public class LinkBean implements Serializable { + + protected String id; + + protected String name; + + protected String url; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } +} diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/QuestionBean.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/QuestionBean.java index 368ca55..037d51b 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/QuestionBean.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/beans/QuestionBean.java @@ -82,7 +82,7 @@ public class QuestionBean implements Serializable { protected Set<DocumentBean> closingDocuments; - protected Set<String> links; + protected Set<LinkBean> links; public String getId() { @@ -309,11 +309,18 @@ public class QuestionBean implements Serializable { this.closingDocuments.add(closingDocument); } - public Set<String> getLinks() { + public Set<LinkBean> getLinks() { return links; } - public void setLinks(Set<String> links) { + public void setLinks(Set<LinkBean> links) { this.links = links; } + + public void addLink(LinkBean linkBean) { + if (this.links == null) { + this.links = new HashSet<>(); + } + this.links.add(linkBean); + } } //Question diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java index ce70bca..0f31eaa 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/converter/BeanEntityConverter.java @@ -33,6 +33,7 @@ import java.util.Set; import com.google.common.collect.Sets; import com.google.common.primitives.Booleans; import fr.ifremer.coselmar.beans.DocumentBean; +import fr.ifremer.coselmar.beans.LinkBean; import fr.ifremer.coselmar.beans.QuestionBean; import fr.ifremer.coselmar.beans.UserBean; import fr.ifremer.coselmar.persistence.entity.CoselmarUser; @@ -41,6 +42,7 @@ import fr.ifremer.coselmar.persistence.entity.CoselmarUserImpl; import fr.ifremer.coselmar.persistence.entity.CoselmarUserRole; import fr.ifremer.coselmar.persistence.entity.Document; import fr.ifremer.coselmar.persistence.entity.DocumentImpl; +import fr.ifremer.coselmar.persistence.entity.Link; import fr.ifremer.coselmar.persistence.entity.Privacy; import fr.ifremer.coselmar.persistence.entity.Question; import fr.ifremer.coselmar.persistence.entity.QuestionImpl; @@ -224,9 +226,15 @@ public class BeanEntityConverter { result.setRestricted(question.isUnavailable()); - Collection<String> links = question.getLinks(); + Collection<Link> links = question.getLinks(); if (links != null && !links.isEmpty()) { - result.setLinks(Sets.newHashSet(links)); + for (Link link : links) { + LinkBean linkBean = new LinkBean(); + linkBean.setId(idFactory.getRandomPart(link.getTopiaId())); + linkBean.setName(link.getName()); + linkBean.setUrl(link.getUrl()); + result.addLink(linkBean); + } } return result; @@ -274,9 +282,15 @@ public class BeanEntityConverter { result.setRestricted(question.isUnavailable()); - Collection<String> links = question.getLinks(); + Collection<Link> links = question.getLinks(); if (links != null && !links.isEmpty()) { - result.setLinks(Sets.newHashSet(links)); + for (Link link : links) { + LinkBean linkBean = new LinkBean(); + linkBean.setId(idFactory.getRandomPart(link.getTopiaId())); + linkBean.setName(link.getName()); + linkBean.setUrl(link.getUrl()); + result.addLink(linkBean); + } } return result; @@ -389,11 +403,6 @@ public class BeanEntityConverter { question.setUnavailable(BooleanUtils.toBoolean(questionBean.getIsRestricted())); - Set<String> links = questionBean.getLinks(); - if (links != null && !links.isEmpty()) { - question.setLinks(Sets.newHashSet(links)); - } - return question; } diff --git a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/QuestionsWebService.java b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/QuestionsWebService.java index d264076..8305152 100644 --- a/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/QuestionsWebService.java +++ b/coselmar-rest/src/main/java/fr/ifremer/coselmar/services/v1/QuestionsWebService.java @@ -37,6 +37,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Collections2; import com.google.common.collect.Lists; import fr.ifremer.coselmar.beans.DocumentBean; +import fr.ifremer.coselmar.beans.LinkBean; import fr.ifremer.coselmar.beans.QuestionBean; import fr.ifremer.coselmar.beans.QuestionExportModel; import fr.ifremer.coselmar.beans.QuestionSearchBean; @@ -49,6 +50,8 @@ import fr.ifremer.coselmar.persistence.entity.CoselmarUser; import fr.ifremer.coselmar.persistence.entity.CoselmarUserGroup; import fr.ifremer.coselmar.persistence.entity.CoselmarUserRole; import fr.ifremer.coselmar.persistence.entity.Document; +import fr.ifremer.coselmar.persistence.entity.Link; +import fr.ifremer.coselmar.persistence.entity.LinkImpl; import fr.ifremer.coselmar.persistence.entity.Privacy; import fr.ifremer.coselmar.persistence.entity.Question; import fr.ifremer.coselmar.persistence.entity.Status; @@ -217,6 +220,23 @@ public class QuestionsWebService extends CoselmarWebServiceSupport { questionEntity.addAllRelatedDocuments(documents); } + // Links + Set<LinkBean> links = question.getLinks(); + if (links != null && !links.isEmpty()) { + for (LinkBean link : links) { + Link linkEntity = null; + String linkId = link.getId(); + if (StringUtils.isNotBlank(linkId)) { + linkEntity = getPersistenceContext().getLinkDao().forTopiaIdEquals(getFullIdFromShort(Link.class, linkId)).findFirstOrNull(); + } + if (linkEntity == null) { + linkEntity = new LinkImpl(); + } + linkEntity.setName(link.getName()); + linkEntity.setUrl(link.getUrl()); + } + } + commit(); QuestionBean result = BeanEntityConverter.toBean(getPersistenceContext().getTopiaIdFactory(), questionEntity); @@ -759,6 +779,23 @@ public class QuestionsWebService extends CoselmarWebServiceSupport { questionEntity.addAllClosingDocuments(closingDocuments); } + // Links + Set<LinkBean> links = question.getLinks(); + if (links != null && !links.isEmpty()) { + for (LinkBean link : links) { + Link linkEntity = null; + String linkId = link.getId(); + if (StringUtils.isNotBlank(linkId)) { + linkEntity = getPersistenceContext().getLinkDao().forTopiaIdEquals(getFullIdFromShort(Link.class, linkId)).findFirstOrNull(); + } + if (linkEntity == null) { + linkEntity = new LinkImpl(); + } + linkEntity.setName(link.getName()); + linkEntity.setUrl(link.getUrl()); + } + } + commit(); QuestionBean result = BeanEntityConverter.toBean(getPersistenceContext().getTopiaIdFactory(), questionEntity); diff --git a/coselmar-ui/src/main/webapp/i18n/en.js b/coselmar-ui/src/main/webapp/i18n/en.js index cde94dd..e94e64e 100644 --- a/coselmar-ui/src/main/webapp/i18n/en.js +++ b/coselmar-ui/src/main/webapp/i18n/en.js @@ -158,6 +158,7 @@ var translateEN = { "question.metadata.parentsPhrase" : "Produced or inspired by", "question.metadata.childrenPhrase" : "Has produced or inspired", "question.metadata.participants" : "Participants", +"question.metadata.links" : "To get more", "question.metadata.submitBefore" : "Submit before", "question.metadata.submitAfter" : "Submit after", diff --git a/coselmar-ui/src/main/webapp/i18n/fr.js b/coselmar-ui/src/main/webapp/i18n/fr.js index 8a344c6..d242934 100644 --- a/coselmar-ui/src/main/webapp/i18n/fr.js +++ b/coselmar-ui/src/main/webapp/i18n/fr.js @@ -158,6 +158,7 @@ var translateFR = { "question.metadata.parentsPhrase" : "Provoqué ou inspiré par", "question.metadata.childrenPhrase" : "A provoqué ou inspiré", "question.metadata.participants" : "Participants", +"question.metadata.links" : "Pour aller plus loin", "question.metadata.submitBefore" : "Soumis avant le", "question.metadata.submitAfter" : "Soumis après le", -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.