From 64a23811137a478dc6dc8c150649a0edc01c74c0 Mon Sep 17 00:00:00 2001 From: Hubert FONGARNAND Date: Thu, 30 Jun 2016 16:06:50 +0200 Subject: [PATCH] 0024545: Evolutions des web services Implement status parameters for all concept list related soapwebservices --- ginco-admin/pom.xml.releaseBackup | 278 ------------------ ginco-api/pom.xml.releaseBackup | 70 ----- .../dao/IAssociativeRelationshipDAO.java | 10 + .../mcc/ginco/dao/IThesaurusConceptDAO.java | 19 +- .../ConceptHierarchicalRelationsEnum.java | 0 ...nceptHierarchicalRelationshipRoleEnum.java | 0 .../fr/mcc/ginco/enums/ConceptStatusEnum.java | 0 .../fr/mcc/ginco/enums/ReportTypeEnum.java | 0 .../fr/mcc/ginco/enums/TermStatusEnum.java | 0 .../enums/ThesaurusVersionStatusEnum.java | 0 .../IAssociativeRelationshipService.java | 10 + .../services/IThesaurusConceptService.java | 17 ++ ginco-impl/pom.xml.releaseBackup | 182 ------------ .../hibernate/AssociativeRelationshipDAO.java | 14 +- .../dao/hibernate/ThesaurusConceptDAO.java | 43 ++- .../exports/skos/SKOSConceptExporter.java | 53 +++- .../SKOSHierarchicalRelationshipExporter.java | 11 +- .../AssociativeRelationshipServiceImpl.java | 6 + .../services/ThesaurusConceptServiceImpl.java | 18 +- .../daos/AssociativeRelationshipDAOTest.java | 10 + .../dao/associativerelationship_init.xml | 2 +- .../soap/ISOAPThesaurusConceptService.java | 15 +- .../soap/SOAPThesaurusConceptServiceImpl.java | 29 +- 23 files changed, 209 insertions(+), 578 deletions(-) delete mode 100644 ginco-admin/pom.xml.releaseBackup delete mode 100644 ginco-api/pom.xml.releaseBackup rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationsEnum.java (100%) rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationshipRoleEnum.java (100%) rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/ConceptStatusEnum.java (100%) rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/ReportTypeEnum.java (100%) rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/TermStatusEnum.java (100%) rename {ginco-commons => ginco-api}/src/main/java/fr/mcc/ginco/enums/ThesaurusVersionStatusEnum.java (100%) delete mode 100644 ginco-impl/pom.xml.releaseBackup diff --git a/ginco-admin/pom.xml.releaseBackup b/ginco-admin/pom.xml.releaseBackup deleted file mode 100644 index 57d6cd465..000000000 --- a/ginco-admin/pom.xml.releaseBackup +++ /dev/null @@ -1,278 +0,0 @@ - - 4.0.0 - - ginco - fr.smile.mcc.ginco - 2.0.6-SNAPSHOT - .. - - ginco-admin - ginco-admin - war - - ginco-admin - - - - fr.smile.mcc.ginco - ginco-api - - - commons-collections - commons-collections - - - ch.qos.logback - logback-classic - - - fr.smile.mcc.ginco - ginco-impl - - - org.springframework - spring-web - - - org.apache.cxf - cxf-bundle-jaxrs - - - javax.inject - javax.inject - - - org.codehaus.jackson - jackson-jaxrs - - - org.mockito - mockito-all - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - javax.servlet - servlet-api - - - junit-addons - junit-addons - test - - - org.apache.commons - commons-lang3 - - - org.hibernate - hibernate-envers - - - org.springframework.security - spring-security-core - - - org.springframework.security - spring-security-config - - - org.springframework.security - spring-security-web - - - org.springframework.security - spring-security-ldap - - - org.owasp - csrfguard - - - - - - src/main/resources - true - - **/*.properties - **/*.xml - - - - src/main/webapp - true - - **/*.jsp - - - - ${finalName} - - - pl.project13.maven - git-commit-id-plugin - 2.1.4 - - - - revision - - - - - git - ${project.basedir}/../.git - src/main/resources/git.properties - - true - - - - - org.apache.maven.plugins - maven-war-plugin - 2.3 - - - - true - src/main/webapp - - **/*.jsp - - - - - *.js,app/**/*.js - - - - com.googlecode.jslint4java - jslint4java-maven-plugin - 2.0.3 - - - Ext - true - true - true - true - - - ${basedir}/src/main/webapp/app/ - - - - - net.alchim31.maven - yuicompressor-maven-plugin - 1.2 - - - compressyui - process-resources - - compress - - - - - - **/extjs*/**/*.js - **/extjs*/**/*.css - **/WEB-INF/*.js - - true - - - - com.github.github - site-maven-plugin - - Creating github report site ${project.name} - ${project.version} - ${project.artifactId} - - - - - - - - maven-compiler-plugin - 3.0 - - ${java.version} - ${java.version} - - - - org.codehaus.cargo - cargo-maven2-plugin - 1.2.3 - - - tomcat6x - remote - 60000 - - - runtime - - - ${cargo.remote.uri} - ${cargo.tomcat.manager.login} - ${cargo.tomcat.manager.password} - - - - - ${project.build.directory}/${finalName}.war - war - - - - - - - - org.eclipse.m2e - lifecycle-mapping - 1.0.0 - - - - - - - net.alchim31.maven - - - yuicompressor-maven-plugin - - - [1.2,) - - - compress - - - - - - - - - - - - - - diff --git a/ginco-api/pom.xml.releaseBackup b/ginco-api/pom.xml.releaseBackup deleted file mode 100644 index a300f1d5d..000000000 --- a/ginco-api/pom.xml.releaseBackup +++ /dev/null @@ -1,70 +0,0 @@ - - 4.0.0 - - ginco - fr.smile.mcc.ginco - 2.0.6-SNAPSHOT - .. - - ginco-api - jar - ginco-api - - ginco-api - - - - org.apache.maven.plugins - maven-javadoc-plugin - - org.umlgraph.doclet.UmlGraphDoc - - org.umlgraph - umlgraph - 5.6 - - -horizontal -attributes -enumconstants -enumerations -operations -types -visibility -inferrel -inferdep -hide java.* -inferrel -collpackages java.util.* - public - - - - org.apache.maven.plugins - maven-deploy-plugin - - ${deploy.plugin.skip} - - - - - - - - com.github.github - site-maven-plugin - - Creating github report site ${project.name} - ${project.version} - ${project.artifactId} - - - - - - - - org.codehaus.jackson - jackson-core-asl - - - org.aspectj - aspectjrt - - - org.hibernate - hibernate-envers - - - org.apache.solr - solr-solrj - - - diff --git a/ginco-api/src/main/java/fr/mcc/ginco/dao/IAssociativeRelationshipDAO.java b/ginco-api/src/main/java/fr/mcc/ginco/dao/IAssociativeRelationshipDAO.java index c3e6516bd..987219a64 100644 --- a/ginco-api/src/main/java/fr/mcc/ginco/dao/IAssociativeRelationshipDAO.java +++ b/ginco-api/src/main/java/fr/mcc/ginco/dao/IAssociativeRelationshipDAO.java @@ -36,6 +36,7 @@ import fr.mcc.ginco.beans.AssociativeRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; +import fr.mcc.ginco.enums.ConceptStatusEnum; import java.util.List; @@ -43,6 +44,15 @@ * Data Access Object for thesaurus_concept */ public interface IAssociativeRelationshipDAO extends IGenericDAO { + + /** + * Gets the list of asssociated concepts + * @param concept + * @param status + * @return + */ + List getAssociatedConcepts(ThesaurusConcept concept, ConceptStatusEnum status); + /** * Gets the list of asssociated concepts * @param concept diff --git a/ginco-api/src/main/java/fr/mcc/ginco/dao/IThesaurusConceptDAO.java b/ginco-api/src/main/java/fr/mcc/ginco/dao/IThesaurusConceptDAO.java index 877948d8e..5818a8f95 100644 --- a/ginco-api/src/main/java/fr/mcc/ginco/dao/IThesaurusConceptDAO.java +++ b/ginco-api/src/main/java/fr/mcc/ginco/dao/IThesaurusConceptDAO.java @@ -38,6 +38,7 @@ import fr.mcc.ginco.beans.Thesaurus; import fr.mcc.ginco.beans.ThesaurusConcept; +import fr.mcc.ginco.enums.ConceptStatusEnum; /** * Data Access Object for thesaurus_concept @@ -71,7 +72,15 @@ public interface IThesaurusConceptDAO extends IGenericDAO getTopTermThesaurusConcept(Thesaurus thesaurus, int maxResults,String like); - + /** + * Gets the list of ThesaurusConcept which are top term given + * a thesaurusID + * @param thesaurus object Thesaurus + * @return + */ + List getTopTermThesaurusConcept(Thesaurus thesaurus, int maxResults,String like, ConceptStatusEnum status); + + /** * Gets the number of orphan concepts for a given thesaurus * @param thesaurus @@ -95,6 +104,14 @@ public interface IThesaurusConceptDAO extends IGenericDAO getRootConcepts(String thesaurusId, Boolean searchOrphans); + + + /** + * Get limited list of paginated children concepts by id of parent Concept. + * @param conceptId + * @return list of children or all root concepts if conceptId is null. + */ + List getChildrenConcepts(String conceptId, int maxResults,String like, ConceptStatusEnum status); /** * Get limited list of paginated children concepts by id of parent Concept. diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationsEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationsEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationsEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationsEnum.java diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationshipRoleEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationshipRoleEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationshipRoleEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptHierarchicalRelationshipRoleEnum.java diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptStatusEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptStatusEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/ConceptStatusEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/ConceptStatusEnum.java diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/ReportTypeEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/ReportTypeEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/ReportTypeEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/ReportTypeEnum.java diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/TermStatusEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/TermStatusEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/TermStatusEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/TermStatusEnum.java diff --git a/ginco-commons/src/main/java/fr/mcc/ginco/enums/ThesaurusVersionStatusEnum.java b/ginco-api/src/main/java/fr/mcc/ginco/enums/ThesaurusVersionStatusEnum.java similarity index 100% rename from ginco-commons/src/main/java/fr/mcc/ginco/enums/ThesaurusVersionStatusEnum.java rename to ginco-api/src/main/java/fr/mcc/ginco/enums/ThesaurusVersionStatusEnum.java diff --git a/ginco-api/src/main/java/fr/mcc/ginco/services/IAssociativeRelationshipService.java b/ginco-api/src/main/java/fr/mcc/ginco/services/IAssociativeRelationshipService.java index 0747c564e..0f62fbccc 100644 --- a/ginco-api/src/main/java/fr/mcc/ginco/services/IAssociativeRelationshipService.java +++ b/ginco-api/src/main/java/fr/mcc/ginco/services/IAssociativeRelationshipService.java @@ -36,6 +36,7 @@ import fr.mcc.ginco.beans.AssociativeRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; +import fr.mcc.ginco.enums.ConceptStatusEnum; import java.util.List; @@ -46,6 +47,15 @@ * @see fr.mcc.ginco.beans */ public interface IAssociativeRelationshipService { + + /** + * Returns list of string of all associated concepts to given concept. + * + * @param concept + * @return + */ + List getAssociatedConceptsId(ThesaurusConcept concept, ConceptStatusEnum status); + /** * Returns list of string of all associated concepts to given concept. * diff --git a/ginco-api/src/main/java/fr/mcc/ginco/services/IThesaurusConceptService.java b/ginco-api/src/main/java/fr/mcc/ginco/services/IThesaurusConceptService.java index cd6024016..97240a49e 100644 --- a/ginco-api/src/main/java/fr/mcc/ginco/services/IThesaurusConceptService.java +++ b/ginco-api/src/main/java/fr/mcc/ginco/services/IThesaurusConceptService.java @@ -42,6 +42,7 @@ import fr.mcc.ginco.beans.ConceptHierarchicalRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.beans.ThesaurusTerm; +import fr.mcc.ginco.enums.ConceptStatusEnum; /** * Service used to work with {@link ThesaurusConcept} objects, contains basic @@ -137,6 +138,14 @@ ThesaurusConcept updateThesaurusConcept(ThesaurusConcept object, * @return */ List getTopTermThesaurusConcepts(String thesaurusId); + + /** + * Get the ThesaurusConcepts which are top term in a given thesaurus + * + * @param thesaurusId + * @return + */ + List getTopTermThesaurusConcepts(String thesaurusId, ConceptStatusEnum status, int maxResults); /** * Get the ThesaurusConcepts which are top term in a given thesaurus @@ -178,6 +187,14 @@ ThesaurusConcept updateThesaurusConcept(ThesaurusConcept object, * @return list of objects. */ List getChildrenByConceptId(String conceptId, int maxResults,String like); + + /** + * Search children of concept with given id (orphan or not). + * + * @param conceptId id of concept. + * @return list of objects. + */ + List getChildrenByConceptId(String conceptId, int maxResults,String like, ConceptStatusEnum status); /** diff --git a/ginco-impl/pom.xml.releaseBackup b/ginco-impl/pom.xml.releaseBackup deleted file mode 100644 index a9f8bd9d8..000000000 --- a/ginco-impl/pom.xml.releaseBackup +++ /dev/null @@ -1,182 +0,0 @@ - - 4.0.0 - - ginco - fr.smile.mcc.ginco - 2.0.6-SNAPSHOT - .. - - ginco-impl - jar - ginco-impl - - - - src/main/resources/services - META-INF/services - - - src/main/resources - - service - - - - ginco-impl - - - - org.apache.maven.plugins - maven-antrun-plugin - 1.7 - - - - - - - - - - org.apache.ant - ant-jsch - 1.8.4 - - - - - org.apache.maven.plugins - maven-deploy-plugin - - ${deploy.plugin.skip} - - - - - com.github.github - site-maven-plugin - - Creating github report site ${project.name} - ${project.version} - ${project.artifactId} - - - - - - - - - fr.smile.mcc.ginco - ginco-api - - - fr.smile.mcc.ginco - ginco-commons - - - org.springframework - spring-context - - - org.springframework - spring-aop - - - javax.inject - javax.inject - - - org.springframework - spring-test - - - org.springframework - spring-orm - - - org.springframework.security - spring-security-core - - - org.apache.cxf - cxf-common-utilities - - - org.springframework - spring-web - - - org.hibernate - hibernate-core - - - junit - junit - - - org.dbunit - dbunit - - - hsqldb - hsqldb - - - org.apache.tomcat - dbcp - - - com.h2database - h2 - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - postgresql - postgresql - - - org.aspectj - aspectjrt - - - org.aspectj - aspectjweaver - - - org.mockito - mockito-all - - - junit-addons - junit-addons - - - org.apache.commons - commons-lang3 - - - commons-collections - commons-collections - - - javax.servlet - servlet-api - - - org.apache.jena - apache-jena-libs - pom - - - org.apache.solr - solr-solrj - - - \ No newline at end of file diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/AssociativeRelationshipDAO.java b/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/AssociativeRelationshipDAO.java index 469390326..9538002da 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/AssociativeRelationshipDAO.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/AssociativeRelationshipDAO.java @@ -37,6 +37,8 @@ import fr.mcc.ginco.beans.AssociativeRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.dao.IAssociativeRelationshipDAO; +import fr.mcc.ginco.enums.ConceptStatusEnum; + import org.hibernate.Criteria; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; @@ -60,8 +62,7 @@ public AssociativeRelationshipDAO() { } @Override - public List getAssociatedConcepts(ThesaurusConcept concept) { - + public List getAssociatedConcepts(ThesaurusConcept concept, ConceptStatusEnum status) { DetachedCriteria d1 = DetachedCriteria.forClass(AssociativeRelationship.class, "ar1"); d1.setProjection(Projections.projectionList().add(Projections.property("ar1.identifier.concept2"))); d1.add(Restrictions.eq("identifier.concept1", concept.getIdentifier())); @@ -75,9 +76,18 @@ public List getAssociatedConcepts(ThesaurusConcept concept) { Subqueries.propertyIn("tc.identifier", d1), Subqueries.propertyIn("tc.identifier", d2))) .setProjection(Projections.property("tc.identifier")); + if (status!=null) { + criteria.add(Restrictions.eq("tc.status", + status.getStatus())); + } return criteria.list(); } + + @Override + public List getAssociatedConcepts(ThesaurusConcept concept) { + return getAssociatedConcepts(concept, null); + } @Override diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/ThesaurusConceptDAO.java b/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/ThesaurusConceptDAO.java index 38459f2b4..d90ccfb20 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/ThesaurusConceptDAO.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/dao/hibernate/ThesaurusConceptDAO.java @@ -57,7 +57,6 @@ import fr.mcc.ginco.dao.IThesaurusConceptDAO; import fr.mcc.ginco.enums.ConceptStatusEnum; import fr.mcc.ginco.exceptions.BusinessException; -import fr.mcc.ginco.services.IThesaurusConceptService; /** * Implementation of the data access object to the thesaurus_term database table @@ -86,7 +85,7 @@ public ThesaurusConceptDAO() { @Override public List getOrphansThesaurusConcept( Thesaurus thesaurus, int maxResults) { - return getListByThesaurusAndTopConcept(thesaurus, false, maxResults,null); + return getListByThesaurusAndTopConcept(thesaurus, false, maxResults,null,null); } /* @@ -110,7 +109,14 @@ public long getOrphansThesaurusConceptCount(Thesaurus thesaurus) { @Override public List getTopTermThesaurusConcept( Thesaurus thesaurus, int maxResults,String like) { - return getListByThesaurusAndTopConcept(thesaurus, true, maxResults,like); + return getTopTermThesaurusConcept(thesaurus, maxResults, like, null); + } + + @Override + public List getTopTermThesaurusConcept(Thesaurus thesaurus, int maxResults, String like, + ConceptStatusEnum status) { + // TODO Auto-generated method stub + return getListByThesaurusAndTopConcept(thesaurus, true, maxResults,like, status); } /* @@ -128,7 +134,7 @@ public long getTopTermThesaurusConceptCount(Thesaurus thesaurus) { @Override public List getRootConcepts(String thesaurusId, Boolean searchOrphans) { - return getConcepts(null, thesaurusId, searchOrphans, 0,null); + return getConcepts(null, thesaurusId, searchOrphans, 0,null,null); } @Override @@ -142,13 +148,18 @@ public List getIdentifiersOfConceptsWithChildren(String thesaurusId) { return (List) query.list(); } + @Override + public List getChildrenConcepts(String conceptId, int maxResults,String like, ConceptStatusEnum status) { + return getConcepts(conceptId, null, null, maxResults,like, status); + } + @Override public List getChildrenConcepts(String conceptId, int maxResults,String like) { - return getConcepts(conceptId, null, null, maxResults,like); + return getConcepts(conceptId, null, null, maxResults,like, null); } private List getConcepts(String conceptId, String thesaurusId, - Boolean searchOrphans, int maxResults,String like) { + Boolean searchOrphans, int maxResults,String like, ConceptStatusEnum status) { Criteria criteria = getCurrentSession().createCriteria(ThesaurusConcept.class, "tc"); @@ -179,6 +190,7 @@ private List getConcepts(String conceptId, String thesaurusId, } selectOrphans(criteria, searchOrphans); + selectStatus(criteria, status); if (maxResults > 0) criteria.setMaxResults(maxResults); return criteria.list(); @@ -357,8 +369,14 @@ private void onlyValidatedConcepts(Criteria criteria, } if (onlyValidatedConcepts) { + selectStatus(criteria , ConceptStatusEnum.VALIDATED); + } + } + + private void selectStatus (Criteria criteria, ConceptStatusEnum status) { + if (status != null) { criteria.add(Restrictions.eq("status", - ConceptStatusEnum.VALIDATED.getStatus())); + status.getStatus())); } } @@ -382,13 +400,13 @@ private void matchLanguage(Criteria criteria,String thesaurusId) { } private List getListByThesaurusAndTopConcept( - Thesaurus thesaurus, boolean topConcept, int maxResults,String like) { + Thesaurus thesaurus, boolean topConcept, int maxResults,String like, ConceptStatusEnum status) { if (thesaurus == null) { throw new BusinessException("Object thesaurus can't be null !", "empty-thesaurus"); } - Criteria crit = getCriteriaByThesaurusAndTopConcept(thesaurus,topConcept,like); + Criteria crit = getCriteriaByThesaurusAndTopConcept(thesaurus,topConcept,like, status); if (maxResults > 0) { crit.setMaxResults(maxResults); } @@ -403,12 +421,12 @@ private long getListByThesaurusAndTopConceptCount(Thesaurus thesaurus, "empty-thesaurus"); } Criteria crit = getCriteriaByThesaurusAndTopConcept(thesaurus, - topConcept,null).setProjection(Projections.rowCount()); + topConcept,null,null).setProjection(Projections.rowCount()); return (Long) crit.list().get(0); } private Criteria getCriteriaByThesaurusAndTopConcept(Thesaurus thesaurus, - boolean topConcept,String like) { + boolean topConcept,String like, ConceptStatusEnum status) { Criteria criteria = getCurrentSession().createCriteria(ThesaurusConcept.class, "tc"); if(null != like){ @@ -429,6 +447,7 @@ private Criteria getCriteriaByThesaurusAndTopConcept(Thesaurus thesaurus, selectThesaurus(criteria, thesaurus.getIdentifier()); selectOrphans(criteria, !topConcept); selectNoParents(criteria); + selectStatus(criteria, status); return criteria; } @@ -569,4 +588,6 @@ public List getConceptsAlignedToMyThes(String idThesaurus, int return (List) criteria.list(); } + + } \ No newline at end of file diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSConceptExporter.java b/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSConceptExporter.java index 3ed0e9e01..fbb1535e3 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSConceptExporter.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSConceptExporter.java @@ -40,6 +40,9 @@ import javax.inject.Named; import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.jena.atlas.logging.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.hp.hpl.jena.ontology.DatatypeProperty; @@ -49,6 +52,7 @@ import com.hp.hpl.jena.rdf.model.Resource; import com.hp.hpl.jena.vocabulary.DCTerms; +import fr.mcc.ginco.audit.tracking.GincoRevListener; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.beans.ThesaurusTerm; import fr.mcc.ginco.services.IThesaurusConceptService; @@ -62,6 +66,8 @@ */ @Component("skosConceptExporter") public class SKOSConceptExporter { + + private Logger logger = LoggerFactory.getLogger(SKOSConceptExporter.class); @Inject @Named("thesaurusConceptService") @@ -103,6 +109,36 @@ public class SKOSConceptExporter { */ public Model exportConceptSKOS(ThesaurusConcept concept, ThesaurusConcept parent, Model model, OntModel ontModel) { + + exportConceptSKOSWoRelations(concept, parent, model, ontModel); + exportConceptSKOSRelations(concept, parent, model, ontModel); + + + return model; + } + + private void exportConceptSKOSRelations(ThesaurusConcept concept, + ThesaurusConcept parent, Model model, OntModel ontModel) { + skosAssociativeRelationshipExporter.exportAssociativeRelationships( + concept, model); + + skosHierarchicalRelationshipExporter.exportHierarchicalRelationships( + model, parent, concept); + + skosAlignmentExporter.exportAlignments(concept.getIdentifier(), model); + if (thesaurusConceptService.hasChildren(concept.getIdentifier())) { + for (ThesaurusConcept child : thesaurusConceptService + .getChildrenByConceptId(concept.getIdentifier(),null)) { + + exportConceptSKOSRelations(child, concept, model, ontModel); + + } + } + } + + private void exportConceptSKOSWoRelations(ThesaurusConcept concept, + ThesaurusConcept parent, Model model, OntModel ontModel) { + logger.info("Exporting concept WoRelations: "+concept.getIdentifier()); Resource conceptResource = model.createResource( concept.getIdentifier(), SKOS.CONCEPT); @@ -120,27 +156,20 @@ public Model exportConceptSKOS(ThesaurusConcept concept, skosNotesExporter.exportNotes(model, prefTerms, concept); - skosAssociativeRelationshipExporter.exportAssociativeRelationships( - concept, model); + + + skosCustomConceptAttributeExporter.exportCustomConceptAttributes( + concept, model, conceptResource, ontModel); if (thesaurusConceptService.hasChildren(concept.getIdentifier())) { for (ThesaurusConcept child : thesaurusConceptService .getChildrenByConceptId(concept.getIdentifier(),null)) { - exportConceptSKOS(child, concept, model, ontModel); + exportConceptSKOSWoRelations(child, concept, model, ontModel); } } - skosHierarchicalRelationshipExporter.exportHierarchicalRelationships( - model, parent, concept); - - skosAlignmentExporter.exportAlignments(concept.getIdentifier(), model); - - skosCustomConceptAttributeExporter.exportCustomConceptAttributes( - concept, model, conceptResource, ontModel); - - return model; } /** diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSHierarchicalRelationshipExporter.java b/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSHierarchicalRelationshipExporter.java index 667d59df1..97b1034f5 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSHierarchicalRelationshipExporter.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/exports/skos/SKOSHierarchicalRelationshipExporter.java @@ -37,6 +37,8 @@ import javax.inject.Inject; import javax.inject.Named; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.hp.hpl.jena.rdf.model.Model; @@ -57,7 +59,9 @@ */ @Component("skosHierarchicalRelationshipExporter") public class SKOSHierarchicalRelationshipExporter { - + + private Logger logger = LoggerFactory.getLogger(SKOSHierarchicalRelationshipExporter.class); + @Inject @Named("conceptHierarchicalRelationshipService") private IConceptHierarchicalRelationshipService conceptHierarchicalRelationshipService; @@ -65,7 +69,6 @@ public class SKOSHierarchicalRelationshipExporter { public Model exportHierarchicalRelationships(Model model, ThesaurusConcept parentConcept, ThesaurusConcept childConcept) { Resource childRes = model.createResource(childConcept.getIdentifier()); - if (parentConcept != null) { Resource parentRes = model.createResource(parentConcept .getIdentifier()); @@ -93,9 +96,10 @@ public Model exportHierarchicalRelationships(Model model, return model; } - private Model buildHierarchicalRelationship(Model defaultModel, + private void buildHierarchicalRelationship(Model defaultModel, Resource sourceConcept, Resource relatedConcept, Property skosRelation, String skosLabel) { + logger.info("Relation "+skosRelation.toString()+" "+relatedConcept.getURI()+" "+sourceConcept.getURI()); defaultModel.add(sourceConcept, skosRelation, relatedConcept); if (!skosLabel.isEmpty()) { Property gincoRelProperty = defaultModel.createProperty(GINCO @@ -104,6 +108,5 @@ private Model buildHierarchicalRelationship(Model defaultModel, defaultModel.add(sourceConcept, gincoRelProperty, relatedConcept); } - return defaultModel; } } \ No newline at end of file diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/services/AssociativeRelationshipServiceImpl.java b/ginco-impl/src/main/java/fr/mcc/ginco/services/AssociativeRelationshipServiceImpl.java index 7e5c561f5..d85082ab2 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/services/AssociativeRelationshipServiceImpl.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/services/AssociativeRelationshipServiceImpl.java @@ -37,6 +37,7 @@ import fr.mcc.ginco.beans.AssociativeRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.dao.IAssociativeRelationshipDAO; +import fr.mcc.ginco.enums.ConceptStatusEnum; import fr.mcc.ginco.exceptions.BusinessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -55,6 +56,11 @@ public class AssociativeRelationshipServiceImpl implements IAssociativeRelations public AssociativeRelationship getAssociativeRelationshipById(String id1, String id2) { return associativeRelationshipDAO.getAssociativeRelationship(id1, id2); } + + @Override + public List getAssociatedConceptsId(ThesaurusConcept concept, ConceptStatusEnum status) { + return associativeRelationshipDAO.getAssociatedConcepts(concept, status); + } @Override public List getAssociatedConceptsId(ThesaurusConcept concept) { diff --git a/ginco-impl/src/main/java/fr/mcc/ginco/services/ThesaurusConceptServiceImpl.java b/ginco-impl/src/main/java/fr/mcc/ginco/services/ThesaurusConceptServiceImpl.java index 370f8701f..74fc87ffc 100644 --- a/ginco-impl/src/main/java/fr/mcc/ginco/services/ThesaurusConceptServiceImpl.java +++ b/ginco-impl/src/main/java/fr/mcc/ginco/services/ThesaurusConceptServiceImpl.java @@ -202,14 +202,19 @@ public long getOrphanThesaurusConceptsCount(String thesaurusId) { */ @Override public List getTopTermThesaurusConcepts(String thesaurusId, int maxResults) { - Thesaurus thesaurus = checkThesaurusId(thesaurusId); - return thesaurusConceptDAO.getTopTermThesaurusConcept(thesaurus, maxResults,null); + return getTopTermThesaurusConcepts(thesaurusId, null, maxResults); } @Override public List getTopTermThesaurusConcepts(String thesaurusId) { return getTopTermThesaurusConcepts(thesaurusId, 0); } + + @Override + public List getTopTermThesaurusConcepts(String thesaurusId, ConceptStatusEnum status, int maxResults) { + Thesaurus thesaurus = checkThesaurusId(thesaurusId); + return thesaurusConceptDAO.getTopTermThesaurusConcept(thesaurus, maxResults,null, status); + } @Override public long getTopTermThesaurusConceptsCount(String thesaurusId) { @@ -217,9 +222,14 @@ public long getTopTermThesaurusConceptsCount(String thesaurusId) { return thesaurusConceptDAO.getTopTermThesaurusConceptCount(thesaurus); } + @Override + public List getChildrenByConceptId(String conceptId, int maxResults,String like, ConceptStatusEnum status) { + return thesaurusConceptDAO.getChildrenConcepts(conceptId, maxResults,like,status); + } + @Override public List getChildrenByConceptId(String conceptId, int maxResults,String like) { - return thesaurusConceptDAO.getChildrenConcepts(conceptId, maxResults,like); + return getChildrenByConceptId(conceptId, maxResults,like,null); } @Override @@ -742,4 +752,6 @@ private List getRecursiveParentByConceptId( } return arrayOfParent; } + + } diff --git a/ginco-impl/src/test/java/fr/mcc/ginco/tests/daos/AssociativeRelationshipDAOTest.java b/ginco-impl/src/test/java/fr/mcc/ginco/tests/daos/AssociativeRelationshipDAOTest.java index ade1caaef..c6b6b8bd9 100644 --- a/ginco-impl/src/test/java/fr/mcc/ginco/tests/daos/AssociativeRelationshipDAOTest.java +++ b/ginco-impl/src/test/java/fr/mcc/ginco/tests/daos/AssociativeRelationshipDAOTest.java @@ -45,6 +45,7 @@ import fr.mcc.ginco.beans.AssociativeRelationship; import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.dao.hibernate.AssociativeRelationshipDAO; +import fr.mcc.ginco.enums.ConceptStatusEnum; import fr.mcc.ginco.tests.BaseDAOTest; public class AssociativeRelationshipDAOTest extends BaseDAOTest { @@ -68,6 +69,15 @@ public void testGetDefaultAssociativeRelationshipRole() { ListAssert.assertContains(associatedConcepts, "http://www.culturecommunication.gouv.fr/co6"); } + + @Test + public void testGetDefaultAssociativeRelationshipRoleStatus() { + ThesaurusConcept concept1 = new ThesaurusConcept(); + concept1.setIdentifier("http://www.culturecommunication.gouv.fr/co1"); + List associatedConcepts = associativeRelationshipDAO.getAssociatedConcepts(concept1, ConceptStatusEnum.DEPRECATED); + Assert.assertEquals(1, associatedConcepts.size()); + ListAssert.assertContains(associatedConcepts, "http://www.culturecommunication.gouv.fr/co2"); + } @Test public void testGetRelationshipRole() { diff --git a/ginco-impl/src/test/resources/dao/associativerelationship_init.xml b/ginco-impl/src/test/resources/dao/associativerelationship_init.xml index d686ef5d6..e9efcc1f8 100644 --- a/ginco-impl/src/test/resources/dao/associativerelationship_init.xml +++ b/ginco-impl/src/test/resources/dao/associativerelationship_init.xml @@ -29,7 +29,7 @@ http://www.culturecommunication.gouv.fr/co2 2013-02-04 15:29:59.66325 2013-02-04 15:29:59.66325 - 0 + 3 test true http://www.culturecommunication.gouv.fr/th1 diff --git a/ginco-webservices/src/main/java/fr/mcc/ginco/soap/ISOAPThesaurusConceptService.java b/ginco-webservices/src/main/java/fr/mcc/ginco/soap/ISOAPThesaurusConceptService.java index 7145a6f50..60d58ddea 100644 --- a/ginco-webservices/src/main/java/fr/mcc/ginco/soap/ISOAPThesaurusConceptService.java +++ b/ginco-webservices/src/main/java/fr/mcc/ginco/soap/ISOAPThesaurusConceptService.java @@ -40,6 +40,7 @@ import javax.jws.WebService; import fr.mcc.ginco.data.ReducedThesaurusTerm; +import fr.mcc.ginco.enums.ConceptStatusEnum; /** * This class exposes all SOAP services related to concept objects @@ -92,15 +93,15 @@ int getConceptsHierarchicalRelations(@WebParam(name = "firstConceptId") String f * @param conceptId identifier of a concept * @return list of objects */ - List getChildrenByConceptId(@WebParam(name = "conceptId") String conceptId); - + List getChildrenByConceptId(@WebParam(name = "conceptId") String conceptId, @WebParam(name="status") ConceptStatusEnum status); + /** * Returns root concepts for given concept * * @param conceptId identifier of a concept * @return list of root concepts */ - List getRootConcepts(@WebParam(name = "conceptId") String conceptId); + List getRootConcepts(@WebParam(name = "conceptId") String conceptId, @WebParam(name="status") ConceptStatusEnum status); /** * Returns parent concepts for given concept @@ -108,7 +109,7 @@ int getConceptsHierarchicalRelations(@WebParam(name = "firstConceptId") String f * @param conceptId identifier of a concept * @return list of parent concepts */ - List getParentConcepts(@WebParam(name = "conceptId") String conceptId); + List getParentConcepts(@WebParam(name = "conceptId") String conceptId, @WebParam(name="status") ConceptStatusEnum status); /** * Returns associative concepts for given concept @@ -116,14 +117,16 @@ int getConceptsHierarchicalRelations(@WebParam(name = "firstConceptId") String f * @param conceptId identifier of a concept * @return list of associative concepts */ - List getAssociativeConcepts(@WebParam(name = "conceptId") String conceptId); + List getAssociativeConcepts(@WebParam(name = "conceptId") String conceptId, @WebParam(name="status") ConceptStatusEnum status); + /** * Returns top concepts for a thesaurus * * @param thesaurusId identifier of a thesaurus + * @param status of concepts * @return list of top concepts */ - List getTopConceptsByThesaurusId(@WebParam(name = "thesaurusId") String thesaurusId); + List getTopConceptsByThesaurusId(@WebParam(name = "thesaurusId") String thesaurusId, @WebParam(name="status") ConceptStatusEnum status); } diff --git a/ginco-webservices/src/main/java/fr/mcc/ginco/soap/SOAPThesaurusConceptServiceImpl.java b/ginco-webservices/src/main/java/fr/mcc/ginco/soap/SOAPThesaurusConceptServiceImpl.java index 68d26059a..a9f3a04af 100644 --- a/ginco-webservices/src/main/java/fr/mcc/ginco/soap/SOAPThesaurusConceptServiceImpl.java +++ b/ginco-webservices/src/main/java/fr/mcc/ginco/soap/SOAPThesaurusConceptServiceImpl.java @@ -39,6 +39,7 @@ import fr.mcc.ginco.beans.ThesaurusConcept; import fr.mcc.ginco.beans.ThesaurusTerm; import fr.mcc.ginco.data.ReducedThesaurusTerm; +import fr.mcc.ginco.enums.ConceptStatusEnum; import fr.mcc.ginco.exceptions.BusinessException; import fr.mcc.ginco.services.IAssociativeRelationshipService; import fr.mcc.ginco.services.IConceptHierarchicalRelationshipServiceUtil; @@ -134,12 +135,12 @@ public int getStatusByConceptId(String conceptId) { } @Override - public List getChildrenByConceptId(String conceptId) { + public List getChildrenByConceptId(String conceptId, ConceptStatusEnum status) { if (StringUtils.isNotEmpty(conceptId)) { List results = new ArrayList(); ThesaurusConcept thesaurusConcept = thesaurusConceptService.getThesaurusConceptById(conceptId); if (thesaurusConcept != null) { - List thesaurusConceptList = thesaurusConceptService.getChildrenByConceptId(conceptId,null); + List thesaurusConceptList = thesaurusConceptService.getChildrenByConceptId(conceptId,0 ,null, status); for (ThesaurusConcept conceptChild : thesaurusConceptList) { results.add(conceptChild.getIdentifier()); } @@ -153,13 +154,18 @@ public List getChildrenByConceptId(String conceptId) { } @Override - public List getRootConcepts(String conceptId) { + public List getRootConcepts(String conceptId, ConceptStatusEnum status) { if (StringUtils.isNotEmpty(conceptId)) { ThesaurusConcept thesaurusConcept = thesaurusConceptService.getThesaurusConceptById(conceptId); if (thesaurusConcept != null) { List results = new ArrayList(); List thesaurusConceptList = conceptHierarchicalRelationshipServiceUtil.getRootConcepts(thesaurusConcept); for (ThesaurusConcept conceptChild : thesaurusConceptList) { + if (status != null) { + if (conceptChild.getStatus().intValue()==status.getStatus()) { + results.add(conceptChild.getIdentifier()); + } + } else results.add(conceptChild.getIdentifier()); } return results; @@ -172,13 +178,19 @@ public List getRootConcepts(String conceptId) { } @Override - public List getParentConcepts(String conceptId) { + public List getParentConcepts(String conceptId, ConceptStatusEnum status) { if (StringUtils.isNotEmpty(conceptId)) { ThesaurusConcept thesaurusConcept = thesaurusConceptService.getThesaurusConceptById(conceptId); if (thesaurusConcept != null) { List results = new ArrayList(); Set parentConceptList = thesaurusConcept.getParentConcepts(); for (ThesaurusConcept parentConcept : parentConceptList) { + if (status != null) + { + if (parentConcept.getStatus().intValue()==status.getStatus()) { + results.add(parentConcept.getIdentifier()); + } + } else results.add(parentConcept.getIdentifier()); } return results; @@ -191,11 +203,11 @@ public List getParentConcepts(String conceptId) { } @Override - public List getAssociativeConcepts(String conceptId) { + public List getAssociativeConcepts(String conceptId, ConceptStatusEnum status) { if (StringUtils.isNotEmpty(conceptId)) { ThesaurusConcept thesaurusConcept = thesaurusConceptService.getThesaurusConceptById(conceptId); if (thesaurusConcept != null) { - return associativeRelationshipService.getAssociatedConceptsId(thesaurusConcept); + return associativeRelationshipService.getAssociatedConceptsId(thesaurusConcept, status); } else { throw new BusinessException("Concept with identifier " + conceptId + " does not exist", "concept-does-not-exist"); } @@ -204,12 +216,13 @@ public List getAssociativeConcepts(String conceptId) { } } - public List getTopConceptsByThesaurusId(String thesaurusId) { + @Override + public List getTopConceptsByThesaurusId(String thesaurusId, ConceptStatusEnum status) { if (StringUtils.isNotEmpty(thesaurusId)) { Thesaurus thesaurus = thesaurusService.getThesaurusById(thesaurusId); if (thesaurus != null) { List results = new ArrayList(); - List topConceptList = thesaurusConceptService.getTopTermThesaurusConcepts(thesaurusId); + List topConceptList = thesaurusConceptService.getTopTermThesaurusConcepts(thesaurusId, status, 0); for (ThesaurusConcept topConcept : topConceptList) { results.add(topConcept.getIdentifier()); }