98 lines
3.1 KiB
Java
98 lines
3.1 KiB
Java
package org.gcube.usecases.ws.thredds;
|
|
|
|
import java.util.concurrent.Semaphore;
|
|
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
|
import org.gcube.usecases.ws.thredds.engine.impl.ProcessDescriptor;
|
|
import org.gcube.usecases.ws.thredds.engine.impl.ProcessStatus;
|
|
import org.gcube.usecases.ws.thredds.faults.WorkspaceLockedException;
|
|
import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException;
|
|
import org.gcube.usecases.ws.thredds.model.SyncOperationCallBack;
|
|
import org.gcube.usecases.ws.thredds.model.SynchFolderConfiguration;
|
|
|
|
public class WorkspaceSynchronizationTest {
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
|
|
// GET ENGINE : SINGLETON INSTANCE
|
|
final SyncEngine engine=SyncEngine.get();
|
|
engine.setRequestLogger("requests.txt");
|
|
|
|
//TEST INFO...
|
|
TestCommons.setScope();
|
|
System.out.println(ScopeProvider.instance.get());
|
|
FolderContainer folder=TestCommons.getTestFolder();
|
|
|
|
// FOLDER CONFIGURATION BEAN
|
|
SynchFolderConfiguration config=TestCommons.getSynchConfig();
|
|
// SynchFolderConfiguration config=null;
|
|
|
|
|
|
// try {
|
|
// //try to clean it up, first..
|
|
// System.out.println("Cleaning it up..");
|
|
// engine.unsetSynchronizedFolder(folder.getId(), false);
|
|
// }catch(WorkspaceNotSynchedException e) {
|
|
// // it was already cleared
|
|
// }catch(WorkspaceLockedException e) {
|
|
// engine.forceUnlock(folder.getId());
|
|
// engine.unsetSynchronizedFolder(folder.getId(), false);
|
|
// }
|
|
|
|
String folderId=folder.getId();
|
|
// String folderId="15db7b0e-c215-41b7-b384-a1deda250b65";
|
|
|
|
|
|
try {
|
|
// WHEN OPENING A FOLDER, INVOKE CHECK TO UPDATE SYNCH STATUS
|
|
engine.check(folderId, false);
|
|
}catch(WorkspaceNotSynchedException e) {
|
|
System.out.println("Folder not synched, configurin it..");
|
|
engine.setSynchronizedFolder(config, folderId);
|
|
engine.check(folderId, false);
|
|
}catch(WorkspaceLockedException e) {
|
|
System.out.println("Workspace locked, going to force unlock.."); // MAINLY FOR TEST PURPOSES, OR WHEN SOMETHIGN GOES WRONG.. USE CAUTIOUSLY
|
|
engine.forceUnlock(folderId);
|
|
engine.check(folderId, false);
|
|
}
|
|
|
|
|
|
|
|
|
|
// INVOKE SYNCHRONIZATION ON FOLDER
|
|
ProcessDescriptor descriptor=engine.doSync(folderId);
|
|
|
|
System.out.println("Obtained descriptor : "+descriptor);
|
|
|
|
Semaphore sem=new Semaphore(0);
|
|
|
|
// REGISTER CALLBACK TO MONITOR PROGRESS
|
|
engine.registerCallBack(folderId, new SyncOperationCallBack() {
|
|
|
|
@Override
|
|
public void onStep(ProcessStatus status, ProcessDescriptor descriptor) {
|
|
System.out.println("ON STEP : "+status+" "+descriptor);
|
|
System.out.println("ENGINE STATUS : "+engine.getStatus());
|
|
System.out.println("LOG : \n"+ status.getLogBuilder().toString());
|
|
if(status.getStatus().equals(ProcessStatus.Status.COMPLETED)) sem.release();
|
|
}
|
|
});
|
|
|
|
System.out.println("Waiting for process.. ");
|
|
try {
|
|
sem.acquire();
|
|
} catch (InterruptedException e) {
|
|
|
|
}
|
|
|
|
engine.check(folderId, true);
|
|
|
|
|
|
// INVOKE WHEN PORTAL SHUTS DOWN TO FREE RESOURCES AND STOP SYNC PROCESSES
|
|
engine.shutDown();
|
|
|
|
}
|
|
|
|
}
|