package eu.dnetlib.openaire.community.db.utils; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import eu.dnetlib.openaire.community.db.model.DbCommunity; import eu.dnetlib.openaire.community.db.model.DbDatasource; import eu.dnetlib.openaire.community.db.model.DbProject; import eu.dnetlib.openaire.community.db.model.DbSubCommunity; import eu.dnetlib.openaire.community.db.model.DbSupportOrg; import eu.dnetlib.openaire.exporter.model.community.CommunityContentprovider; import eu.dnetlib.openaire.exporter.model.community.CommunityDetails; import eu.dnetlib.openaire.exporter.model.community.CommunityOrganization; import eu.dnetlib.openaire.exporter.model.community.CommunityProject; import eu.dnetlib.openaire.exporter.model.community.CommunitySummary; import eu.dnetlib.openaire.exporter.model.community.CommunityWritableProperties; import eu.dnetlib.openaire.exporter.model.community.SubCommunity; public class CommunityMappingUtils { public final static String PIPE_SEPARATOR = "||"; public static CommunitySummary toCommunitySummary(final DbCommunity c) { final CommunitySummary summary = new CommunitySummary(); populateSummary(summary, c); return summary; } public static DbCommunity toCommunity(final CommunityDetails details) { final DbCommunity c = new DbCommunity(); c.setId(details.getId()); c.setName(details.getName()); c.setShortName(details.getShortName()); c.setDescription(details.getDescription()); c.setStatus(details.getStatus()); c.setLogoUrl(details.getLogoUrl()); c.setMembership(details.getMembership()); c.setType(details.getType()); c.setClaim(details.getClaim()); c.setSubjects(toStringArray(details.getSubjects())); c.setFos(toStringArray(details.getFos())); c.setSdg(toStringArray(details.getSdg())); c.setAdvancedConstraints(details.getAdvancedConstraints()); c.setRemoveConstraints(details.getRemoveConstraints()); c.setMainZenodoCommunity(details.getZenodoCommunity()); c.setOtherZenodoCommunities(toStringArray(details.getOtherZenodoCommunities())); c.setCreationDate(ObjectUtils.firstNonNull(details.getCreationDate(), LocalDateTime.now())); c.setLastUpdateDate(LocalDateTime.now()); return c; } public static void populateCommunity(final DbCommunity c, final CommunityWritableProperties details) { if (StringUtils.isNotBlank(details.getName())) { c.setName(details.getName()); } if (StringUtils.isNotBlank(details.getShortName())) { c.setShortName(details.getShortName()); } if (StringUtils.isNotBlank(details.getDescription())) { c.setDescription(details.getDescription()); } if (details.getStatus() != null) { c.setStatus(details.getStatus()); } if (details.getMembership() != null) { c.setMembership(details.getMembership()); } if (details.getType() != null) { c.setType(details.getType()); } if (details.getClaim() != null) { c.setClaim(details.getClaim()); } if (StringUtils.isNotBlank(details.getLogoUrl())) { c.setLogoUrl(details.getLogoUrl()); } if (details.getFos() != null) { c.setFos(toStringArray(details.getFos())); } if (details.getSdg() != null) { c.setSdg(toStringArray(details.getSdg())); } if (details.getSubjects() != null) { c.setSubjects(toStringArray(details.getSubjects())); } if (details.getAdvancedConstraints() != null) { c.setAdvancedConstraints(details.getAdvancedConstraints()); } if (details.getRemoveConstraints() != null) { c.setRemoveConstraints(details.getRemoveConstraints()); } if (StringUtils.isNotBlank(details.getMainZenodoCommunity())) { c.setMainZenodoCommunity(details.getMainZenodoCommunity()); } if (details.getOtherZenodoCommunities() != null) { c.setOtherZenodoCommunities(toStringArray(details.getOtherZenodoCommunities())); } c.setLastUpdateDate(LocalDateTime.now()); } public static CommunityDetails CommunityDetails(final DbCommunity c) { final CommunityDetails details = new CommunityDetails(); populateSummary(details, c); details.setAdvancedConstraints(c.getAdvancedConstraints()); details.setRemoveConstraints(c.getRemoveConstraints()); details.setFos(Arrays.asList(c.getFos())); details.setSdg(Arrays.asList(c.getSdg())); details.setSubjects(Arrays.asList(c.getSubjects())); details.setClaim(c.getClaim()); details.setMembership(c.getMembership()); details.setOtherZenodoCommunities(Arrays.asList(c.getOtherZenodoCommunities())); return details; } private static void populateSummary(final CommunitySummary summary, final DbCommunity c) { summary.setId(c.getId()); summary.setShortName(c.getShortName()); summary.setName(c.getName()); summary.setLastUpdateDate(c.getLastUpdateDate()); summary.setCreationDate(c.getCreationDate()); summary.setQueryId(c.getId() + PIPE_SEPARATOR + c.getShortName()); summary.setType(c.getType()); summary.setDescription(c.getDescription()); summary.setLogoUrl(c.getLogoUrl()); summary.setStatus(c.getStatus()); summary.setZenodoCommunity(c.getMainZenodoCommunity()); } public static CommunityProject toCommunityProject(final DbProject dbEntry) { final CommunityProject cp = new CommunityProject(); cp.setCommunityId(dbEntry.getCommunity()); cp.setOpenaireId(dbEntry.getProjectId()); cp.setName(dbEntry.getProjectName()); cp.setAcronym(dbEntry.getProjectAcronym()); cp.setFunder(dbEntry.getProjectFunder()); cp.setGrantId(dbEntry.getProjectCode()); return cp; } public static DbProject toDbProject(final String id, final CommunityProject project) { final DbProject p = new DbProject(); p.setCommunity(id); p.setProjectId(project.getOpenaireId()); p.setProjectName(project.getName()); p.setProjectAcronym(project.getAcronym()); p.setProjectCode(project.getGrantId()); p.setProjectFunder(project.getFunder()); return p; } public static CommunityContentprovider toCommunityContentprovider(final DbDatasource dbEntry) { final CommunityContentprovider ccp = new CommunityContentprovider(); ccp.setCommunityId(dbEntry.getCommunity()); ccp.setOpenaireId(dbEntry.getDsId()); ccp.setName(dbEntry.getDsName()); ccp.setOfficialname(dbEntry.getDsOfficialName()); ccp.setSelectioncriteria(dbEntry.getConstraints()); return ccp; } public static DbDatasource toDbDatasource(final String id, final CommunityContentprovider provider) { final DbDatasource ds = new DbDatasource(); ds.setCommunity(id); ds.setDsId(provider.getOpenaireId()); ds.setDsName(provider.getName()); ds.setDsOfficialName(provider.getOfficialname()); ds.setConstraints(provider.getSelectioncriteria()); return ds; } public static CommunityOrganization toCommunityOrganization(final DbSupportOrg dbEntry) { final CommunityOrganization co = new CommunityOrganization(); co.setCommunityId(dbEntry.getCommunity()); co.setName(dbEntry.getOrgName()); co.setWebsite_url(dbEntry.getOrgUrl()); co.setLogo_url(dbEntry.getOrgLogoUrl()); return co; } public static DbSupportOrg toDbSupportOrg(final String id, final CommunityOrganization org) { final DbSupportOrg dbo = new DbSupportOrg(); dbo.setCommunity(id); dbo.setOrgName(org.getName()); dbo.setOrgUrl(org.getWebsite_url()); dbo.setOrgLogoUrl(org.getLogo_url()); return dbo; } public static DbSubCommunity toDbSubCommunity(final SubCommunity sub) { final DbSubCommunity dbsc = new DbSubCommunity(); dbsc.setCommunity(sub.getCommunityId()); dbsc.setId(sub.getSubCommunityId()); dbsc.setCategory(sub.getCategory()); dbsc.setLabel(sub.getLabel()); dbsc.setParams(sub.getParams()); dbsc.setParent(sub.getParent()); dbsc.setClaim(sub.isClaim()); return dbsc; } public static SubCommunity toSubCommunity(final DbSubCommunity sub) { final SubCommunity sc = new SubCommunity(); sc.setSubCommunityId(sub.getId()); sc.setCategory(sub.getCategory()); sc.setCommunityId(sub.getCommunity()); sc.setLabel(sub.getLabel()); sc.setParams(sub.getParams()); sc.setParent(sub.getParent()); sc.setClaim(sub.isClaim()); return sc; } private static String[] toStringArray(final List list) { return list.toArray(new String[list.size()]); } }