/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.importer.rest;
import org.geoserver.importer.ImportContext;
import org.geoserver.importer.ImportTask;
import org.geoserver.importer.Importer;
import org.geoserver.importer.transform.ImportTransform;
import org.geoserver.rest.RestBaseController;
import org.geoserver.rest.RestException;
import org.springframework.http.HttpStatus;
public class ImportBaseController extends RestBaseController {
protected Importer importer;
protected ImportBaseController(Importer importer) {
this.importer = importer;
}
protected ImportContext context(Long imp) {
return context(imp, false);
}
protected ImportContext context(Long imp, boolean optional) {
return (ImportContext) context(imp, optional, false);
}
Object context(Long imp, boolean optional, boolean allowAll) {
if (imp == null) {
if (allowAll) {
return importer.getAllContexts();
}
if (optional) {
return null;
}
throw new RestException("No import specified", HttpStatus.BAD_REQUEST);
} else {
ImportContext context = null;
context = importer.getContext(imp);
if (context == null && !optional) {
throw new RestException("No such import: " + imp.toString(), HttpStatus.NOT_FOUND);
}
return context;
}
}
protected ImportTask task(Long imp, Integer taskNumber) {
return task(imp, taskNumber, false);
}
protected ImportTask task(Long imp, Integer taskNumber, boolean optional) {
return (ImportTask) task(imp, taskNumber, optional, false);
}
protected Object task(Long imp, Integer taskNumber, boolean optional, boolean allowAll) {
ImportContext context = context(imp);
ImportTask task = null;
//handle null taskNumber
if (taskNumber == null) {
if (!optional && !allowAll) {
throw new RestException("No task specified", HttpStatus.NOT_FOUND);
}
} else {
task = context.task(taskNumber);
}
//handle no task found
if (task == null) {
if (allowAll) {
return context.getTasks();
}
if (!optional) {
throw new RestException(
"No such task: " + taskNumber + " for import: " + context.getId(),
HttpStatus.NOT_FOUND);
}
}
return task;
}
ImportTransform transform(Long importId, Integer taskId, Integer transformId) {
return transform(importId, taskId, transformId, false);
}
ImportTransform transform(Long importId, Integer taskId, Integer transformId, boolean optional) {
ImportTask task = task(importId, taskId);
ImportTransform tx = null;
if (transformId != null) {
try {
tx = (ImportTransform) task.getTransform().getTransforms().get(transformId);
} catch (NumberFormatException e) {
} catch (IndexOutOfBoundsException e) {
}
}
if (tx == null && !optional) {
throw new RestException("No such transform", HttpStatus.NOT_FOUND);
}
return tx;
}
protected int expand(int def, String ex) {
if (ex == null) {
return def;
}
try {
return "self".equalsIgnoreCase(ex) ? 1
: "all".equalsIgnoreCase(ex) ? Integer.MAX_VALUE
: "none".equalsIgnoreCase(ex) ? 0 : Integer.parseInt(ex);
} catch (NumberFormatException e) {
return def;
}
}
}