package org.fastcatsearch.job.management;
import java.io.File;
import java.io.IOException;
import org.fastcatsearch.common.io.Streamable;
import org.fastcatsearch.exception.FastcatSearchException;
import org.fastcatsearch.ir.IRService;
import org.fastcatsearch.ir.config.CollectionContext;
import org.fastcatsearch.ir.config.CollectionIndexStatus;
import org.fastcatsearch.ir.io.DataInput;
import org.fastcatsearch.ir.io.DataOutput;
import org.fastcatsearch.ir.search.CollectionHandler;
import org.fastcatsearch.job.Job;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.settings.SettingFileNames;
import org.fastcatsearch.util.FilePaths;
import org.fastcatsearch.util.JAXBConfigs;
public class RestoreCollectionToPreviousJob extends Job implements Streamable {
private static final long serialVersionUID = -255187322044455962L;
private String collectionId;
private String sequenceString;
public RestoreCollectionToPreviousJob(){
}
public RestoreCollectionToPreviousJob(String collectionId, String sequenceString){
this.collectionId = collectionId;
this.sequenceString = sequenceString;
}
@Override
public JobResult doRun() throws FastcatSearchException {
boolean isSuccess = false;
try {
IRService irService = ServiceManager.getInstance().getService(IRService.class);
CollectionContext collectionContext = irService.collectionContext(collectionId);
int sequence = collectionContext.getPreviousDataSequence();
if (sequenceString != null) {
try{
sequence = Integer.parseInt(sequenceString);
}catch(Exception ignore){
}
}
collectionContext.indexStatus().setSequence(sequence);
FilePaths collectionFilePaths = collectionContext.collectionFilePaths();
File collectionDir = collectionFilePaths.file();
JAXBConfigs.writeConfig(new File(collectionDir, SettingFileNames.indexStatus), collectionContext.indexStatus(), CollectionIndexStatus.class);
CollectionHandler collectionHandler = irService.loadCollectionHandler(collectionId);
isSuccess = (collectionHandler != null && collectionHandler.isLoaded());
} catch (Exception e) {
logger.error("", e);
return new JobResult(false);
}
return new JobResult(isSuccess);
}
@Override
public void readFrom(DataInput input) throws IOException {
collectionId = input.readString();
sequenceString = input.readString();
}
@Override
public void writeTo(DataOutput output) throws IOException {
output.writeString(collectionId);
output.writeString(sequenceString);
}
}