package eu.europeana.cloud.dlf.ingestion.tool;
import eu.europeana.cloud.client.uis.rest.CloudException;
import eu.europeana.cloud.client.uis.rest.UISClient;
import eu.europeana.cloud.common.model.CloudId;
import eu.europeana.cloud.mcs.driver.DataSetServiceClient;
import eu.europeana.cloud.mcs.driver.FileServiceClient;
import eu.europeana.cloud.mcs.driver.RecordServiceClient;
import eu.europeana.cloud.mcs.driver.SearchServiceClient;
import eu.europeana.cloud.service.mcs.exception.DataSetAlreadyExistsException;
import eu.europeana.cloud.service.mcs.exception.MCSException;
import eu.europeana.cloud.service.mcs.exception.ProviderNotExistsException;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class DLFMigrator {
String uisUrl = "";
String mcsUrl = "";
String providerId = "providerId";
private final UISClient uisClient;
private final RecordServiceClient representationClient;
private final FileServiceClient filesClient;
private final DataSetServiceClient dataSetClient;
private final SearchServiceClient searchClient;
public DLFMigrator() {
uisClient = new UISClient(uisUrl);
representationClient = new RecordServiceClient(mcsUrl);
filesClient = new FileServiceClient(mcsUrl);
dataSetClient = new DataSetServiceClient(mcsUrl);
searchClient = new SearchServiceClient();
}
public void migrate() {
try {
//create or get provider
uisClient.createProvider(providerId, null);
List<File> filesList = new ArrayList<>();
for (File f : filesList) {
migrateRecord(f);
}
} catch (CloudException ex) {
}
}
/**
*
* @param f
* folder containing various record representations. Name of the folder is record local id.
*/
private void migrateRecord(File f)
throws CloudException {
//read fbcId (localId)
String localId = "";
CloudId cloudId = uisClient.createCloudId(providerId, localId);
//get list of files
//for all files in dir
//migrateFile(String cloudId, String schema, String version, String mediaType)
createDataSet();
}
private void migrateFile(String cloudId, String schema, String version, String mediaType)
throws MCSException, IOException {
representationClient.copyRepresentation(cloudId, schema, version);
//add file to representation
InputStream data = null;
filesClient.uploadFile(cloudId, schema, version, data, mediaType);
//persist representation
representationClient.persistRepresentation(cloudId, schema, version);
}
private void createDataSet() {
try {
dataSetClient.createDataSet("dataSetId", providerId, "description");
//for all created files
dataSetClient.assignRepresentationToDataSet("dataSetId", "providerId", "cloudId", "schemaId", "versionId");
} catch (DataSetAlreadyExistsException ex) {
} catch (ProviderNotExistsException ex) {
} catch (MCSException ex) {
}
}
public void searchImportedRecords() {
//searchClient.search(new SearchParams());
}
}