new_model_for_communities #15
|
@ -10,6 +10,7 @@ public class ExporterConstants {
|
||||||
public final static String C_PJ = "Community projects";
|
public final static String C_PJ = "Community projects";
|
||||||
public final static String C_ZC = "Community Zenodo Communities";
|
public final static String C_ZC = "Community Zenodo Communities";
|
||||||
public final static String C_O = "Community Organizations";
|
public final static String C_O = "Community Organizations";
|
||||||
|
public final static String C_SUB = "Subcommunities";
|
||||||
|
|
||||||
public final static String DS = "Datasource";
|
public final static String DS = "Datasource";
|
||||||
public final static String API = "Interface";
|
public final static String API = "Interface";
|
||||||
|
|
|
@ -4,6 +4,7 @@ import static eu.dnetlib.openaire.common.ExporterConstants.C;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.C_CP;
|
import static eu.dnetlib.openaire.common.ExporterConstants.C_CP;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.C_O;
|
import static eu.dnetlib.openaire.common.ExporterConstants.C_O;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.C_PJ;
|
import static eu.dnetlib.openaire.common.ExporterConstants.C_PJ;
|
||||||
|
import static eu.dnetlib.openaire.common.ExporterConstants.C_SUB;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.C_ZC;
|
import static eu.dnetlib.openaire.common.ExporterConstants.C_ZC;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.R;
|
import static eu.dnetlib.openaire.common.ExporterConstants.R;
|
||||||
import static eu.dnetlib.openaire.common.ExporterConstants.W;
|
import static eu.dnetlib.openaire.common.ExporterConstants.W;
|
||||||
|
@ -11,6 +12,7 @@ import static eu.dnetlib.openaire.common.ExporterConstants.W;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
|
@ -33,6 +35,7 @@ import eu.dnetlib.openaire.exporter.model.community.CommunityOrganization;
|
||||||
import eu.dnetlib.openaire.exporter.model.community.CommunityProject;
|
import eu.dnetlib.openaire.exporter.model.community.CommunityProject;
|
||||||
import eu.dnetlib.openaire.exporter.model.community.CommunitySummary;
|
import eu.dnetlib.openaire.exporter.model.community.CommunitySummary;
|
||||||
import eu.dnetlib.openaire.exporter.model.community.CommunityWritableProperties;
|
import eu.dnetlib.openaire.exporter.model.community.CommunityWritableProperties;
|
||||||
|
import eu.dnetlib.openaire.exporter.model.community.SubCommunity;
|
||||||
import eu.dnetlib.openaire.exporter.model.community.selectioncriteria.SelectionCriteria;
|
import eu.dnetlib.openaire.exporter.model.community.selectioncriteria.SelectionCriteria;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||||
|
@ -937,4 +940,126 @@ public class CommunityApiController extends AbstractExporterController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// APIs to manage the sub communities
|
||||||
|
|
||||||
|
@RequestMapping(value = "/community/{id}/subcommunities", produces = {
|
||||||
|
"application/json"
|
||||||
|
}, method = RequestMethod.GET)
|
||||||
|
@Operation(summary = "get the list of subcommunities for a given community", description = "get the list of subcommunities for a given community", tags = {
|
||||||
|
C_SUB, R
|
||||||
|
})
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "not found"),
|
||||||
|
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||||
|
})
|
||||||
|
public List<SubCommunity> getSubCommunities(@PathVariable final String id, @RequestParam(required = false, defaultValue = "false") final boolean all)
|
||||||
|
throws CommunityException {
|
||||||
|
try {
|
||||||
|
return communityService.getSubCommunities(id)
|
||||||
|
.stream()
|
||||||
|
.filter(sc -> all || sc.isBrowsable())
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
} catch (final ResourceNotFoundException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (final Throwable e) {
|
||||||
|
throw new CommunityException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/community/{id}/subcommunities", produces = {
|
||||||
|
"application/json"
|
||||||
|
}, method = RequestMethod.POST)
|
||||||
|
@Operation(summary = "associate a subcommunity to the community", description = "associate a subcommunity to the community", tags = {
|
||||||
|
C_SUB, W
|
||||||
|
})
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "not found"),
|
||||||
|
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||||
|
})
|
||||||
|
public SubCommunity addSubCommunity(
|
||||||
|
@PathVariable final String id,
|
||||||
|
@RequestBody final SubCommunity subcommunity) throws CommunityException {
|
||||||
|
try {
|
||||||
|
communityService.addSubCommunities(id, subcommunity);
|
||||||
|
return subcommunity;
|
||||||
|
} catch (final ResourceNotFoundException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (final Throwable e) {
|
||||||
|
throw new CommunityException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/community/{id}/subcommunitiesList", produces = {
|
||||||
|
"application/json"
|
||||||
|
}, method = RequestMethod.POST)
|
||||||
|
@Operation(summary = "associate a list of subcommunities to the community", description = "associate a list of subcommunities to the community", tags = {
|
||||||
|
C_SUB, W
|
||||||
|
})
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "not found"),
|
||||||
|
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||||
|
})
|
||||||
|
public SubCommunity[] addSubCommunityList(
|
||||||
|
@PathVariable final String id,
|
||||||
|
@RequestBody final SubCommunity[] subcommunities) throws CommunityException {
|
||||||
|
|
||||||
|
try {
|
||||||
|
communityService.addSubCommunities(id, subcommunities);
|
||||||
|
return subcommunities;
|
||||||
|
} catch (final ResourceNotFoundException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (final Throwable e) {
|
||||||
|
throw new CommunityException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/community/{id}/subcommunities", produces = {
|
||||||
|
"application/json"
|
||||||
|
}, method = RequestMethod.DELETE)
|
||||||
|
@Operation(summary = "remove the association between a subcommunity and the community", description = "remove the association between a subcommunity and the community", tags = {
|
||||||
|
C_SUB, W
|
||||||
|
})
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "not found"),
|
||||||
|
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||||
|
})
|
||||||
|
public void removeSubCommunity(
|
||||||
|
@PathVariable final String id,
|
||||||
|
@RequestParam final String subCommunityId) throws CommunityException {
|
||||||
|
try {
|
||||||
|
communityService.removeSubCommunities(id, subCommunityId);
|
||||||
|
} catch (final ResourceNotFoundException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (final Throwable e) {
|
||||||
|
throw new CommunityException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@RequestMapping(value = "/community/{id}/subcommunitiesList", produces = {
|
||||||
|
"application/json"
|
||||||
|
}, method = RequestMethod.DELETE)
|
||||||
|
@Operation(summary = "remove a list of associations between some subcommunities and the community", description = "remove a list of associations between some subcommunities and the community", tags = {
|
||||||
|
C_SUB, W
|
||||||
|
})
|
||||||
|
@ApiResponses(value = {
|
||||||
|
@ApiResponse(responseCode = "200", description = "OK"),
|
||||||
|
@ApiResponse(responseCode = "404", description = "not found"),
|
||||||
|
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||||
|
})
|
||||||
|
public void removeSubcommunities(
|
||||||
|
@PathVariable final String id,
|
||||||
|
@RequestBody final String[] subCommunityIdList) throws CommunityException {
|
||||||
|
try {
|
||||||
|
communityService.removeSubCommunities(id, subCommunityIdList);
|
||||||
|
} catch (final ResourceNotFoundException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (final Throwable e) {
|
||||||
|
throw new CommunityException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,8 +259,8 @@ public class CommunityService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void removeSubCommunity(final String id, final String subCommunityId) {
|
public void removeSubCommunities(final String id, final String... subCommunityIds) {
|
||||||
dbSubCommunityRepository.deleteById(subCommunityId);
|
dbSubCommunityRepository.deleteAllById(Arrays.asList(subCommunityIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@ -272,9 +272,9 @@ public class CommunityService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public void addSubCommunities(final SubCommunity... subs) {
|
public void addSubCommunities(final String id, final SubCommunity... subs) {
|
||||||
final List<DbSubCommunity> list = Arrays.stream(subs)
|
final List<DbSubCommunity> list = Arrays.stream(subs)
|
||||||
.map(CommunityMappingUtils::toDbSubCommunity)
|
.map(s -> CommunityMappingUtils.toDbSubCommunity(id, s))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
dbSubCommunityRepository.saveAll(list);
|
dbSubCommunityRepository.saveAll(list);
|
||||||
|
|
|
@ -216,7 +216,7 @@ public class CommunityImporterService {
|
||||||
service.addCommunityProjects(context.getId(), projects.toArray(new CommunityProject[projects.size()]));
|
service.addCommunityProjects(context.getId(), projects.toArray(new CommunityProject[projects.size()]));
|
||||||
service.addCommunityContentProviders(context.getId(), datasources.toArray(new CommunityContentprovider[datasources.size()]));
|
service.addCommunityContentProviders(context.getId(), datasources.toArray(new CommunityContentprovider[datasources.size()]));
|
||||||
service.addCommunityOrganizations(context.getId(), orgs.toArray(new CommunityOrganization[orgs.size()]));
|
service.addCommunityOrganizations(context.getId(), orgs.toArray(new CommunityOrganization[orgs.size()]));
|
||||||
service.addSubCommunities(subs.toArray(new SubCommunity[subs.size()]));
|
service.addSubCommunities(context.getId(), subs.toArray(new SubCommunity[subs.size()]));
|
||||||
} catch (
|
} catch (
|
||||||
|
|
||||||
final Exception e) {
|
final Exception e) {
|
||||||
|
|
|
@ -214,9 +214,9 @@ public class CommunityMappingUtils {
|
||||||
return dbo;
|
return dbo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DbSubCommunity toDbSubCommunity(final SubCommunity sub) {
|
public static DbSubCommunity toDbSubCommunity(final String id, final SubCommunity sub) {
|
||||||
final DbSubCommunity dbsc = new DbSubCommunity();
|
final DbSubCommunity dbsc = new DbSubCommunity();
|
||||||
dbsc.setCommunity(sub.getCommunityId());
|
dbsc.setCommunity(id);
|
||||||
dbsc.setId(sub.getSubCommunityId());
|
dbsc.setId(sub.getSubCommunityId());
|
||||||
dbsc.setCategory(sub.getCategory());
|
dbsc.setCategory(sub.getCategory());
|
||||||
dbsc.setLabel(sub.getLabel());
|
dbsc.setLabel(sub.getLabel());
|
||||||
|
|
|
@ -35,6 +35,7 @@ CREATE TABLE community_projects (
|
||||||
project_name text NOT NULL,
|
project_name text NOT NULL,
|
||||||
project_acronym text,
|
project_acronym text,
|
||||||
project_funder text NOT NULL,
|
project_funder text NOT NULL,
|
||||||
|
available_since date NOT NULL default now(),
|
||||||
PRIMARY KEY (community, project_id)
|
PRIMARY KEY (community, project_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ class CommunityImporterServiceTest {
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityProjects(Mockito.anyString(), projectsCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityProjects(Mockito.anyString(), projectsCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityContentProviders(Mockito.anyString(), datasourcesCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityContentProviders(Mockito.anyString(), datasourcesCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizations(Mockito.anyString(), orgsCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizations(Mockito.anyString(), orgsCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addSubCommunities(subCommunitiesCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addSubCommunities(Mockito.anyString(), subCommunitiesCapture.capture());
|
||||||
|
|
||||||
final CommunityDetails details = detailsCapture.getValue();
|
final CommunityDetails details = detailsCapture.getValue();
|
||||||
assertEquals("egi", details.getId());
|
assertEquals("egi", details.getId());
|
||||||
|
@ -134,7 +134,7 @@ class CommunityImporterServiceTest {
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityProjects(Mockito.anyString(), projectsCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityProjects(Mockito.anyString(), projectsCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityContentProviders(Mockito.anyString(), datasourcesCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityContentProviders(Mockito.anyString(), datasourcesCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizations(Mockito.anyString(), orgsCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizations(Mockito.anyString(), orgsCapture.capture());
|
||||||
Mockito.verify(service, Mockito.times(1)).addSubCommunities(subCommunitiesCapture.capture());
|
Mockito.verify(service, Mockito.times(1)).addSubCommunities(Mockito.anyString(), subCommunitiesCapture.capture());
|
||||||
|
|
||||||
final CommunityDetails details = detailsCapture.getValue();
|
final CommunityDetails details = detailsCapture.getValue();
|
||||||
assertEquals("fet-fp7", details.getId());
|
assertEquals("fet-fp7", details.getId());
|
||||||
|
|
Loading…
Reference in New Issue