package org.fastcatsearch.http.action.management.collections;
import java.io.File;
import org.fastcatsearch.http.ActionAuthority;
import org.fastcatsearch.http.ActionAuthorityLevel;
import org.fastcatsearch.http.ActionMapping;
import org.fastcatsearch.http.action.ActionRequest;
import org.fastcatsearch.http.action.ActionResponse;
import org.fastcatsearch.http.action.AuthAction;
import org.fastcatsearch.ir.IRService;
import org.fastcatsearch.ir.config.CollectionContext;
import org.fastcatsearch.ir.settings.Schema;
import org.fastcatsearch.ir.settings.SchemaSetting;
import org.fastcatsearch.service.ServiceManager;
import org.fastcatsearch.settings.SettingFileNames;
import org.fastcatsearch.util.FilePaths;
import org.fastcatsearch.util.JAXBConfigs;
import org.fastcatsearch.util.ResponseWriter;
@ActionMapping(value = "/management/collections/schema/remove", authority = ActionAuthority.Collections, authorityLevel = ActionAuthorityLevel.WRITABLE)
public class RemoveCollectionSchemaAction extends AuthAction {
@Override
public void doAuthAction(ActionRequest request, ActionResponse response) throws Exception {
String collectionId = request.getParameter("collectionId");
String type = request.getParameter("type");
IRService irService = ServiceManager.getInstance().getService(IRService.class);
CollectionContext collectionContext = irService.collectionContext(collectionId);
FilePaths collectionFilePaths = collectionContext.collectionFilePaths();
File collectionDir = collectionFilePaths.file();
boolean isSuccess = true;
String errorMessage = null;
try {
if ("workSchema".equalsIgnoreCase(type)) {
collectionContext.setWorkSchemaSetting(null);
File workSchemaFile = new File(collectionDir, SettingFileNames.workSchema);
if (workSchemaFile.exists()) {
workSchemaFile.delete();
}
} else {
// 운영중인 schema는 null로 만들지 않고 비워준다.
SchemaSetting emptySchemaSetting = new SchemaSetting();
Schema newSchema = new Schema(emptySchemaSetting);
collectionContext.setSchema(newSchema);
File schemaFile = new File(collectionDir, SettingFileNames.schema);
JAXBConfigs.writeConfig(schemaFile, emptySchemaSetting, SchemaSetting.class);
}
} catch (Throwable e) {
isSuccess = false;
errorMessage = e.getMessage();
}
ResponseWriter responseWriter = getDefaultResponseWriter(response.getWriter());
responseWriter.object();
responseWriter.key("success").value(isSuccess);
if(errorMessage != null){
responseWriter.key("errorMessage").value(errorMessage);
}
responseWriter.endObject();
responseWriter.done();
}
}