ckan2zenodo-library/src/main/java/org/gcube/data/publishing/ckan2zenodo/Ckan2ZenodoImpl.java

120 lines
3.9 KiB
Java

package org.gcube.data.publishing.ckan2zenodo;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import org.gcube.data.publishing.ckan2zenodo.clients.FileUploaderManager;
import org.gcube.data.publishing.ckan2zenodo.clients.GCat;
import org.gcube.data.publishing.ckan2zenodo.clients.Zenodo;
import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor;
import org.gcube.data.publishing.ckan2zenodo.model.CkanRelatedIdentifier;
import org.gcube.data.publishing.ckan2zenodo.model.CkanResource;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ConfigurationException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.GcatException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.InvalidItemException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.TransformationException;
import org.gcube.data.publishing.ckan2zenodo.model.faults.ZenodoException;
import org.gcube.data.publishing.ckan2zenodo.model.zenodo.ZenodoDeposition;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Ckan2ZenodoImpl implements Ckan2Zenodo{
@Override
public CkanItemDescriptor read(String itemName) throws GcatException {
try{
return GCat.getByID(itemName);
}catch(Throwable e) {
log.warn("Unable to load "+itemName+" from gCat",e);
throw new GcatException("Unable to load item from gCat");
}
}
@Override
public ZenodoDeposition translate(CkanItemDescriptor desc) throws InvalidItemException, ZenodoException, ConfigurationException, TransformationException {
ZenodoDeposition toUpdate=null;
CkanRelatedIdentifier doi=desc.getZenodoDoi();
if(doi!=null) {
Zenodo z=Zenodo.get();
toUpdate=z.readDeposition(doi.getZenodoId());
}
Translator tr=new TransformerManager().getByProfile(desc.getProfile());
return tr.transform(desc, toUpdate);
}
@Override
public ZenodoDeposition updatedMetadata(ZenodoDeposition toUpdate) throws ZenodoException, ConfigurationException {
if(toUpdate.getSubmitted())
Zenodo.get().unlockPublished(toUpdate.getId());
return Zenodo.get().updateMetadata(toUpdate);
}
@Override
public List<CkanResource> filterResources(CkanItemDescriptor desc) throws ConfigurationException, TransformationException {
Translator tr=new TransformerManager().getByProfile(desc.getProfile());
return tr.filterResources(desc);
}
@Override
public Future<ZenodoDeposition> uploadFiles(Set<CkanResource> toUpload, ZenodoDeposition deposition) throws ZenodoException, ConfigurationException {
final Zenodo z=Zenodo.get();
if(deposition.getSubmitted())
Zenodo.get().unlockPublished(deposition.getId());
Callable<ZenodoDeposition> call=new Callable<ZenodoDeposition>() {
@Override
public ZenodoDeposition call() throws Exception {
ZenodoDeposition dep=deposition;
for(CkanResource r:toUpload) {
try {
dep.getFiles().add(z.uploadFile(dep, r.getName(), r.getUrl()));
}catch(Throwable t) {
throw new Exception("Unable to upload "+r.getName()+".",t);
}
}
return z.readDeposition(dep.getId());
}
};
return FileUploaderManager.submitForDeposition(call);
}
@Override
public ZenodoDeposition publish(ZenodoDeposition dep, CkanItemDescriptor toUpdate) throws ZenodoException, ConfigurationException {
if(dep.getSubmitted())
Zenodo.get().unlockPublished(dep.getId());
return Zenodo.get().publish(dep);
}
// public static void preview(String itemName) throws MalformedURLException {
// // looking for gcat..
// GCat gCat=new GCat();
// // looking for item
// CkanItemDescriptor desc=gCat.getByID(itemName);
//
// //transforming
//// ZenodoDeposition deposition=TransformerManager.transform(desc);
//
// // publishing / update to zenodo
// Zenodo z=new Zenodo(getZenodoToken());
//
//
// }
//
// private static final ZenodoCredentials getZenodoToken() {
// throw new RuntimeException();
// }
}