communityAPIExtention #10
|
@ -20,9 +20,7 @@ public interface ISClient {
|
|||
|
||||
Map<String, Context> getContextMap(final List<String> type) throws IOException;
|
||||
|
||||
void updateContextParam(String id, String name, String value);
|
||||
|
||||
void updateContextParamNoEscape(String id, String name, String value);
|
||||
void updateContextParam(String id, String name, String value, boolean toEscape);
|
||||
|
||||
void updateContextAttribute(String id, String name, String value);
|
||||
|
||||
|
|
|
@ -105,28 +105,38 @@ public class ISClientImpl implements ISClient {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = {
|
||||
"context-cache", "context-cache-funder"
|
||||
}, allEntries = true)
|
||||
public void updateContextParam(final String id, final String name, final String value) {
|
||||
try {
|
||||
_quickSeachProfile(getXQuery(id, name, value));
|
||||
} catch (final ISLookUpException e) {
|
||||
throw new DsmRuntimeException(String.format("unable update context param [id: %s, name: %s, value: %s]", id, name, value), e);
|
||||
public void updateContextParam(final String id, final String name, final String value, boolean toEscape) {
|
||||
if(getSize(id, name) > 0){
|
||||
try {
|
||||
_quickSeachProfile(getXQuery(id, name, value, toEscape));
|
||||
} catch (final ISLookUpException e) {
|
||||
throw new DsmRuntimeException(String.format("unable to update context param [id: %s, name: %s, value: %s]", id, name, value), e);
|
||||
}
|
||||
}
|
||||
else{
|
||||
try {
|
||||
_quickSeachProfile(getInsertXQuery(id, name, value,toEscape));
|
||||
} catch (final ISLookUpException e) {
|
||||
throw new DsmRuntimeException(String.format("unable to insert context param [id: %s, name: %s, value: %s]", id, name, value), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = {
|
||||
"context-cache", "context-cache-funder"
|
||||
}, allEntries = true)
|
||||
public void updateContextParamNoEscape(final String id, final String name, final String value) {
|
||||
private int getSize(String id, String name) {
|
||||
int size = 0;
|
||||
try {
|
||||
_quickSeachProfile(getXQueryNoEscape(id, name, value));
|
||||
} catch (final ISLookUpException e) {
|
||||
throw new DsmRuntimeException(String.format("unable update context param [id: %s, name: %s, value: %s]", id, name, value), e);
|
||||
size = _quickSeachProfile(String.format("for $x in collection('/db/DRIVER/ContextDSResources/ContextDSResourceType') where $x//context[@id='%s']/param[@name='%s'] return $x", id, name)).size();
|
||||
} catch (ISLookUpException e) {
|
||||
throw new DsmRuntimeException("unable to execute search query", e);
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -212,26 +222,45 @@ public class ISClientImpl implements ISClient {
|
|||
|
||||
/// HELPERS
|
||||
|
||||
private String getXQuery(final String id, final String name, final String value) {
|
||||
final Escaper esc = XmlEscapers.xmlContentEscaper();
|
||||
|
||||
private String getInsertXQuery(final String id, final String paramName, final String paramValue, final boolean toEscape) {
|
||||
String value;
|
||||
if(toEscape)
|
||||
value = escape(XmlEscapers.xmlContentEscaper(), paramValue);
|
||||
else
|
||||
value = paramValue;
|
||||
if (StringUtils.isNotBlank(value)) {
|
||||
return String.format("update insert <param name='%s'>%s</param> into collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']", paramName, value, id);
|
||||
} else {
|
||||
return String.format("update insert <param name='%s'/> into collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']", paramName, id);
|
||||
}
|
||||
}
|
||||
|
||||
private String getXQuery(final String id, final String name, final String paramValue, final boolean toEscape) {
|
||||
String value = paramValue;
|
||||
if (toEscape)
|
||||
value = escape(XmlEscapers.xmlContentEscaper(), paramValue);
|
||||
|
||||
if (StringUtils.isNotBlank(value)) {
|
||||
return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'>%s</param>", id, name, name, escape(esc, value));
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'>%s</param>", id, name, name, value);
|
||||
} else {
|
||||
return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'/>", id, name, name);
|
||||
}
|
||||
}
|
||||
|
||||
private String getXQueryNoEscape(final String id, final String name, final String value) {
|
||||
if (StringUtils.isNotBlank(value)) {
|
||||
return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'>%s</param>", id, name, name, value);
|
||||
} else {
|
||||
return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
"/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'/>", id, name, name);
|
||||
}
|
||||
}
|
||||
// private String getXQueryNoEscape(final String id, final String name, final String value) {
|
||||
// if (StringUtils.isNotBlank(value)) {
|
||||
// return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
// "/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'>%s</param>", id, name, name, value);
|
||||
// } else {
|
||||
// return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" +
|
||||
// "/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with <param name='%s'/>", id, name, name);
|
||||
// }
|
||||
// }
|
||||
|
||||
private String getConceptXQuery(final String id, final String name, final String value) {
|
||||
final Escaper esc = XmlEscapers.xmlContentEscaper();
|
||||
|
|
|
@ -223,6 +223,44 @@ public class CommunityApiController {
|
|||
communityApiCore.removeCommunityContentProvider(id, contentproviderId);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/community/{id}/contentprovidersList", produces = {
|
||||
"application/json"
|
||||
}, method = RequestMethod.POST)
|
||||
@Operation(summary = "associate a list of content providers to the community",
|
||||
description = "associate a list of content providers to the community", tags = {
|
||||
C_PJ, W
|
||||
})
|
||||
@ApiResponses(value = {
|
||||
@ApiResponse(responseCode = "200", description = "OK"),
|
||||
@ApiResponse(responseCode = "404", description = "not found"),
|
||||
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||
})
|
||||
public List<CommunityContentprovider> addCommunityContentProvidersList(
|
||||
@PathVariable final String id,
|
||||
@RequestBody final List<CommunityContentprovider> contentprovidersList) throws CommunityException, CommunityNotFoundException {
|
||||
|
||||
return communityApiCore.addCommunityContentProvidersList(id, contentprovidersList);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/community/{id}/projectList", produces = {
|
||||
"application/json"
|
||||
}, method = RequestMethod.DELETE)
|
||||
@Operation(summary = "remove a list of content providers from the community",
|
||||
description = "remove a list of content providers from the community", tags = {
|
||||
C_PJ, W
|
||||
})
|
||||
@ApiResponses(value = {
|
||||
@ApiResponse(responseCode = "200", description = "OK"),
|
||||
@ApiResponse(responseCode = "404", description = "not found"),
|
||||
@ApiResponse(responseCode = "500", description = "unexpected error")
|
||||
})
|
||||
public void deleteCommunityContentProvidersList(
|
||||
@PathVariable final String id,
|
||||
@RequestBody final List<Integer> contentProviderIdList) throws CommunityException, CommunityNotFoundException {
|
||||
|
||||
communityApiCore.removeCommunityContentProviderList(id, contentProviderIdList);
|
||||
}
|
||||
|
||||
// ADDING CODE FOR COMMUNITY ORGANIZATIONS
|
||||
|
||||
@RequestMapping(value = "/community/{id}/organizations", produces = {
|
||||
|
|
|
@ -47,6 +47,13 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
|
||||
}
|
||||
|
||||
private void removeAdvancedConstraint(String id) throws CommunityNotFoundException, CommunityException {
|
||||
cc.getCommunity(id);
|
||||
isClient.updateContextParam(id, CPROFILE_ADVANCED_CONSTRAINT, "", false);
|
||||
cc.removeAdvancedConstraint(id);
|
||||
|
||||
}
|
||||
|
||||
public void setCommunity(final String id, final CommunityWritableProperties details) throws CommunityException, CommunityNotFoundException {
|
||||
|
||||
cc.getCommunity(id); // ensure the community exists.
|
||||
|
@ -56,39 +63,39 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
|
||||
}
|
||||
if (details.getName() != null) {
|
||||
isClient.updateContextParam(id, CSUMMARY_NAME, details.getName());
|
||||
isClient.updateContextParam(id, CSUMMARY_NAME, details.getName(), true);
|
||||
|
||||
}
|
||||
if (details.getDescription() != null) {
|
||||
isClient.updateContextParam(id, CSUMMARY_DESCRIPTION, details.getDescription());
|
||||
isClient.updateContextParam(id, CSUMMARY_DESCRIPTION, details.getDescription(), true);
|
||||
|
||||
}
|
||||
if (details.getLogoUrl() != null) {
|
||||
isClient.updateContextParam(id, CSUMMARY_LOGOURL, details.getLogoUrl());
|
||||
isClient.updateContextParam(id, CSUMMARY_LOGOURL, details.getLogoUrl(), true);
|
||||
|
||||
}
|
||||
if (details.getStatus() != null) {
|
||||
isClient.updateContextParam(id, CSUMMARY_STATUS, details.getStatus().name());
|
||||
isClient.updateContextParam(id, CSUMMARY_STATUS, details.getStatus().name(), true);
|
||||
|
||||
}
|
||||
if (details.getSubjects() != null) {
|
||||
isClient.updateContextParam(id, CPROFILE_SUBJECT, Joiner.on(CSV_DELIMITER).join(details.getSubjects()));
|
||||
isClient.updateContextParam(id, CPROFILE_SUBJECT, Joiner.on(CSV_DELIMITER).join(details.getSubjects()), true);
|
||||
|
||||
}
|
||||
if (details.getFos() != null) {
|
||||
isClient.updateContextParam(id, CPROFILE_FOS, Joiner.on(CSV_DELIMITER).join(details.getFos()));
|
||||
isClient.updateContextParam(id, CPROFILE_FOS, Joiner.on(CSV_DELIMITER).join(details.getFos()), true);
|
||||
|
||||
}
|
||||
if (details.getSdg() != null) {
|
||||
isClient.updateContextParam(id, CPROFILE_SDG, Joiner.on(CSV_DELIMITER).join(details.getSdg()));
|
||||
isClient.updateContextParam(id, CPROFILE_SDG, Joiner.on(CSV_DELIMITER).join(details.getSdg()), true);
|
||||
|
||||
}
|
||||
if (details.getAdvancedConstraint() != null) {
|
||||
isClient.updateContextParamNoEscape(id, CPROFILE_ADVANCED_CONSTRAINT, "<![CDATA[" + new Gson().toJson(details.getAdvancedConstraint()) + "]]>");
|
||||
isClient.updateContextParam(id, CPROFILE_ADVANCED_CONSTRAINT, "<![CDATA[" + new Gson().toJson(details.getAdvancedConstraint()) + "]]>", false);
|
||||
|
||||
}
|
||||
if (details.getMainZenodoCommunity() != null) {
|
||||
isClient.updateContextParam(id, CSUMMARY_ZENODOC, details.getMainZenodoCommunity());
|
||||
isClient.updateContextParam(id, CSUMMARY_ZENODOC, details.getMainZenodoCommunity(), true);
|
||||
}
|
||||
|
||||
cc.updateCommunity(id, details);
|
||||
|
@ -190,6 +197,10 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
log.info("content provider to add " + cp.toString());
|
||||
if (!StringUtils.equalsIgnoreCase(id, cp.getCommunityId())) { throw new CommunityException("parameters 'id' and cp.communityId must be coherent"); }
|
||||
|
||||
return updateContentprovider(id, cp);
|
||||
}
|
||||
|
||||
private CommunityContentprovider updateContentprovider(String id, CommunityContentprovider cp) throws CommunityException, CommunityNotFoundException {
|
||||
final TreeMap<Integer, CommunityContentprovider> cps = getCommunityContentproviderMap(id);
|
||||
final String concept_id = cp.getId();
|
||||
if (concept_id != null && cps.keySet().contains(Integer.valueOf(concept_id))) {
|
||||
|
@ -225,6 +236,30 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
cc.removeFromCategory(id, CONTENTPROVIDERS_ID_SUFFIX, String.valueOf(contentproviderId));
|
||||
}
|
||||
|
||||
public List<CommunityContentprovider> addCommunityContentProvidersList(String id, List<CommunityContentprovider> contentprovidersList) throws CommunityException, CommunityNotFoundException {
|
||||
if(contentprovidersList == null || contentprovidersList.size() == 0){
|
||||
throw new CommunityException("parameter 'contentprovidersList' must be present and should contain at least one content provider");
|
||||
}
|
||||
if (!StringUtils.equalsIgnoreCase(id, contentprovidersList.get(0).getCommunityId())) {
|
||||
throw new CommunityException("parameters 'id' and contentprovider.communityId must be coherent");
|
||||
}
|
||||
|
||||
List<CommunityContentprovider> contentproviders = new ArrayList();
|
||||
|
||||
for(CommunityContentprovider contentProvider : contentprovidersList){
|
||||
contentproviders.add(updateContentprovider(id, contentProvider));
|
||||
}
|
||||
|
||||
|
||||
return contentproviders;
|
||||
}
|
||||
|
||||
public void removeCommunityContentProviderList(final String id, final List<Integer> contentProviderIdList) throws CommunityException, CommunityNotFoundException {
|
||||
for(Integer contentProviderId: contentProviderIdList){
|
||||
removeCommunityContentProvider(id, contentProviderId);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeCommunityOrganization(final String id, final Integer organizationId) throws CommunityException, CommunityNotFoundException {
|
||||
final Map<Integer, CommunityOrganization> organizations = getCommunityOrganizationMap(id);
|
||||
if (!organizations.containsKey(organizationId)) {
|
||||
|
@ -278,7 +313,10 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
|
||||
final CommunityDetails cd = new CommunityDetails();
|
||||
|
||||
final Set<String> current = Sets.newHashSet(cc.getCommunity(id).getFos());
|
||||
final Set<String> current = Sets.newHashSet();
|
||||
if(Optional.ofNullable(cc.getCommunity(id).getFos()).isPresent()){
|
||||
current.addAll(cc.getCommunity(id).getFos());
|
||||
}
|
||||
|
||||
current.addAll(foss);
|
||||
|
||||
|
@ -307,8 +345,10 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
public CommunityDetails addCommunitySDG(final String id, final List<String> sdgs) throws CommunityException, CommunityNotFoundException {
|
||||
|
||||
final CommunityDetails cd = new CommunityDetails();
|
||||
|
||||
final Set<String> current = Sets.newHashSet(cc.getCommunity(id).getSdg());
|
||||
final Set<String> current = Sets.newHashSet();
|
||||
if(Optional.ofNullable(cc.getCommunity(id).getSdg()).isPresent()){
|
||||
current.addAll(cc.getCommunity(id).getSdg());
|
||||
}
|
||||
|
||||
current.addAll(sdgs);
|
||||
|
||||
|
@ -345,17 +385,15 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
return cd;
|
||||
}
|
||||
|
||||
public CommunityDetails removeCommunityAdvancedConstraint(final String id) throws CommunityException, CommunityNotFoundException {
|
||||
public CommunityDetails removeCommunityAdvancedConstraint(final String id) throws CommunityNotFoundException, CommunityException {
|
||||
|
||||
final CommunityDetails cd = new CommunityDetails();
|
||||
SelectionCriteria sl = new SelectionCriteria();
|
||||
cd.setAdvancedConstraint(sl);
|
||||
removeAdvancedConstraint(id);
|
||||
|
||||
setCommunity(id, CommunityWritableProperties.fromDetails(cd));
|
||||
|
||||
return cd;
|
||||
return new CommunityDetails();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@CacheEvict(value = "community-cache", allEntries = true)
|
||||
public void removeCommunityZenodoCommunity(final String id, final Integer zenodoCommId) throws CommunityException, CommunityNotFoundException {
|
||||
|
||||
|
@ -463,4 +501,5 @@ public class CommunityApiCore {// implements CommunityClient{
|
|||
return organization;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -168,6 +168,13 @@ public class CommunityCommon {
|
|||
|
||||
}
|
||||
|
||||
public void removeAdvancedConstraint(String id) throws CommunityException {
|
||||
final Context context = getContextMap().get(id);
|
||||
context.getParams()
|
||||
.replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param()
|
||||
.setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(null)));
|
||||
}
|
||||
|
||||
public void updateCommunity(String id, CommunityWritableProperties community) throws CommunityException {
|
||||
final Context context = getContextMap().get(id);
|
||||
|
||||
|
@ -202,21 +209,35 @@ public class CommunityCommon {
|
|||
.join(community.getSubjects()))));
|
||||
}
|
||||
if(community.getFos() != null){
|
||||
if (context.getParams().containsKey(CPROFILE_FOS))
|
||||
context.getParams()
|
||||
.replace(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS)
|
||||
.setValue(Joiner.on(CSV_DELIMITER)
|
||||
.join(community.getFos()))));
|
||||
else
|
||||
context.getParams().put(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS)
|
||||
.setValue(Joiner.on(CSV_DELIMITER)
|
||||
.join(community.getFos()))));
|
||||
}
|
||||
if(community.getSdg() != null){
|
||||
if(context.getParams().containsKey(CPROFILE_SDG))
|
||||
context.getParams()
|
||||
.replace(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG)
|
||||
.setValue(Joiner.on(CSV_DELIMITER)
|
||||
.join(community.getSdg()))));
|
||||
else
|
||||
context.getParams().put(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG)
|
||||
.setValue(Joiner.on(CSV_DELIMITER)
|
||||
.join(community.getSdg()))));
|
||||
}
|
||||
if (community.getAdvancedConstraint() != null) {
|
||||
if(context.getParams().containsKey(CPROFILE_ADVANCED_CONSTRAINT))
|
||||
context.getParams()
|
||||
.replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param()
|
||||
.setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(new Gson().toJson(community.getAdvancedConstraint()))));
|
||||
else
|
||||
context.getParams().put(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param()
|
||||
.setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(new Gson().toJson(community.getAdvancedConstraint()))));
|
||||
}
|
||||
if(community.getMainZenodoCommunity() != null){
|
||||
context.getParams()
|
||||
|
|
Loading…
Reference in New Issue