ckan2zenodo-publisher-widget/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/converter/ItemToZenodoConverter.java

279 lines
9.3 KiB
Java

package org.gcube.portlets.widgets.ckan2zenodopublisher.server.converter;
import java.util.ArrayList;
import java.util.List;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Community;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Contributor;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Creator;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DateInterval;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.AccessRights;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.FileDeposition;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.RelatedIdentifier;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.RelatedIdentifier.Relation;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Subject;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
import org.gcube.portlets.widgets.ckan2zenodopublisher.server.CkanToZenodoUtil;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.SerializableEnum;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoCommunity;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoContributor;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoCreator;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoDateInterval;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoFile;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoMetadata;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoRelatedIdentifier;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoSubject;
/**
* The Class ItemToZenodoConverter.
*
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
*
* Dec 10, 2019
*/
public class ItemToZenodoConverter {
/**
* To zenodo item.
*
* @param zenodoDeposition the zenodo deposition
* @return the zenodo item
*/
public static ZenodoItem toZenodoItem(ZenodoDeposition zenodoDeposition) {
if(zenodoDeposition==null)
return null;
ZenodoItem zi = new ZenodoItem();
zi.setId(zenodoDeposition.getId());
zi.setDoi(zenodoDeposition.getDoi());
zi.setCreated(zenodoDeposition.getCreated());
if(zenodoDeposition.getFiles()!=null) {
List<ZenodoFile> listOfFiles = new ArrayList<ZenodoFile>(zenodoDeposition.getFiles().size());
for (FileDeposition fileDeposition : zenodoDeposition.getFiles()) {
listOfFiles.add(toZenodoFile(fileDeposition));
}
zi.setFiles(listOfFiles);
}
zi.setModified(zenodoDeposition.getModified());
zi.setOwner(zenodoDeposition.getOwner());
zi.setRecord_id(zenodoDeposition.getRecord_id());
zi.setRecord_url(zenodoDeposition.getRecord_url()!=null?zenodoDeposition.getRecord_url().toString():null);
zi.setState(zenodoDeposition.getState());
zi.setSubmitted(zenodoDeposition.getSubmitted());
zi.setTitle(zenodoDeposition.getTitle());
zi.setMetadata(toZenodoMetadata(zenodoDeposition.getMetadata()));
return zi;
}
/**
* To zenodo file.
*
* @param fileDeposition the file deposition
* @return the zenodo file
*/
public static ZenodoFile toZenodoFile(FileDeposition fileDeposition) {
if(fileDeposition==null)
return null;
ZenodoFile zf = new ZenodoFile();
zf.setId(fileDeposition.getId());
zf.setFilename(fileDeposition.getFilename());
zf.setFilesize(fileDeposition.getFilesize());
zf.setChecksum(fileDeposition.getChecksum());
return zf;
}
/**
* To zenodo metadata.
*
* @param depositionMetadata the deposition metadata
* @return the zenodo metadata
*/
public static ZenodoMetadata toZenodoMetadata(DepositionMetadata depositionMetadata){
if(depositionMetadata==null)
return null;
ZenodoMetadata zm = new ZenodoMetadata();
zm.setAccess_conditions(depositionMetadata.getAccess_conditions());
zm.setDescription(depositionMetadata.getDescription());
if(depositionMetadata.getAccess_right()!=null) {
AccessRights[] ar = { depositionMetadata.getAccess_right() };
SerializableEnum<String> sEnum = CkanToZenodoUtil.toSerializableEnum(ar, AccessRights.values());
zm.setAccess_right(sEnum);
}
zm.setCommunities(toZenodoCommunities(depositionMetadata.getCommunities()));
zm.setConference_acronym(depositionMetadata.getConference_acronym());
zm.setConference_dates(depositionMetadata.getConference_dates());
zm.setConference_place(depositionMetadata.getConference_place());
zm.setConference_session(depositionMetadata.getConference_session());
zm.setConference_session_part(depositionMetadata.getConference_session_part());
zm.setConference_title(depositionMetadata.getConference_title());
zm.setConference_url(depositionMetadata.getConference_url());
zm.setContributors(toZenodoContributors(depositionMetadata.getContributors()));
zm.setCreators(toZenodoCreators(depositionMetadata.getCreators()));
zm.setDates(toZenodDateIntervals(depositionMetadata.getDates()));
zm.setRelated_identifiers(toRelatedIdentifiers(depositionMetadata.getRelated_identifiers()));
zm.setSubjects(toZenodoSubjects(depositionMetadata.getSubjects()));
zm.setThesis_supervisors(toZenodoCreators(depositionMetadata.getThesis_supervisors()));
zm.setThesis_university(depositionMetadata.getThesis_university());
zm.setTitle(depositionMetadata.getTitle());
zm.setVersion(depositionMetadata.getVersion());
return zm;
}
/**
* To zenodo subjects.
*
* @param subjects the subjects
* @return the list
*/
private static List<ZenodoSubject> toZenodoSubjects(List<Subject> subjects) {
if(subjects==null)
return null;
List<ZenodoSubject> list = new ArrayList<ZenodoSubject>(subjects.size());
for (Subject sub : subjects) {
ZenodoSubject zs = new ZenodoSubject(sub.getTerm(), sub.getIdentifier(), sub.getScheme());
list.add(zs);
}
return list;
}
/**
* To related identifiers.
*
* @param related_identifiers the related identifiers
* @return the list
*/
private static List<ZenodoRelatedIdentifier> toRelatedIdentifiers(List<RelatedIdentifier> related_identifiers) {
if(related_identifiers==null)
return null;
List<ZenodoRelatedIdentifier> list = new ArrayList<ZenodoRelatedIdentifier>(related_identifiers.size());
for (RelatedIdentifier relatedIdentifier : related_identifiers) {
Relation[] rel = { relatedIdentifier.getRelation() };
SerializableEnum<String> sEnum = CkanToZenodoUtil.toSerializableEnum(rel, Relation.values());
ZenodoRelatedIdentifier zdi = new ZenodoRelatedIdentifier(relatedIdentifier.getIdentifier(), sEnum);
list.add(zdi);
}
return list;
}
/**
* To zenod date intervals.
*
* @param dateIntervals the date intervals
* @return the list
*/
private static List<ZenodoDateInterval> toZenodDateIntervals(List<DateInterval> dateIntervals) {
if(dateIntervals==null)
return null;
List<ZenodoDateInterval> list = new ArrayList<ZenodoDateInterval>(dateIntervals.size());
for (DateInterval dateInterval : dateIntervals) {
SerializableEnum<String> types = null;
if(dateInterval.getType()!=null) {
DateInterval.Type[] rel = { dateInterval.getType() };
types = CkanToZenodoUtil.toSerializableEnum(rel, DateInterval.Type.values());
}
list.add(new ZenodoDateInterval(dateInterval.getStart(), dateInterval.getEnd(), types, dateInterval.getDescription()));
}
return list;
}
/**
* To zenodo communities.
*
* @param communities the communities
* @return the list
*/
public static List<ZenodoCommunity> toZenodoCommunities(List<Community> communities) {
if(communities==null)
return null;
List<ZenodoCommunity> list = new ArrayList<ZenodoCommunity>(communities.size());
for (Community community : communities) {
list.add(new ZenodoCommunity(community.getIdentifier()));
}
return list;
}
/**
* To zenodo contributors.
*
* @param contributors the contributors
* @return the list
*/
public static List<ZenodoContributor> toZenodoContributors(List<Contributor> contributors) {
if(contributors==null)
return null;
List<ZenodoContributor> list = new ArrayList<ZenodoContributor>(contributors.size());
for (Contributor contr : contributors) {
ZenodoContributor zc = new ZenodoContributor();
zc.setAffiliation(contr.getAffiliation());
zc.setGnd(contr.getGnd());
zc.setName(contr.getName());
zc.setOrcid(contr.getOrcid());
SerializableEnum<String> types = null;
if(contr.getType()!=null) {
Contributor.Type[] rel = { contr.getType() };
types = CkanToZenodoUtil.toSerializableEnum(rel, Contributor.Type.values());
}
zc.setType(types);
list.add(zc);
}
return list;
}
/**
* To zenodo creators.
*
* @param creators the creators
* @return the list
*/
public static List<ZenodoCreator> toZenodoCreators(List<Creator> creators) {
if(creators==null)
return null;
List<ZenodoCreator> list = new ArrayList<ZenodoCreator>(creators.size());
for (Creator contr : creators) {
ZenodoContributor zc = new ZenodoContributor();
zc.setAffiliation(contr.getAffiliation());
zc.setGnd(contr.getGnd());
zc.setName(contr.getName());
zc.setOrcid(contr.getOrcid());
list.add(zc);
}
return list;
}
}