120 lines
3.9 KiB
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();
|
|
// }
|
|
|
|
|
|
|
|
|
|
}
|