mirror of
https://github.com/dalbodeule/snap-admin.git
synced 2025-06-09 05:48:20 +00:00
Refactor DbAdmin names to SnapAdmin
This commit is contained in:
parent
6eb572f72c
commit
83541b49da
@ -59,13 +59,13 @@ import tech.ailef.snapadmin.external.dbmapping.fields.EnumFieldType;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.fields.StringFieldType;
|
import tech.ailef.snapadmin.external.dbmapping.fields.StringFieldType;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.TextFieldType;
|
import tech.ailef.snapadmin.external.dbmapping.fields.TextFieldType;
|
||||||
import tech.ailef.snapadmin.external.dto.MappingError;
|
import tech.ailef.snapadmin.external.dto.MappingError;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminNotFoundException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminNotFoundException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.UnsupportedFieldTypeException;
|
import tech.ailef.snapadmin.external.exceptions.UnsupportedFieldTypeException;
|
||||||
import tech.ailef.snapadmin.external.misc.Utils;
|
import tech.ailef.snapadmin.external.misc.Utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main DbAdmin class responsible for the initialization phase. This class scans
|
* The main SnapAdmin class is responsible for the initialization phase. This class scans
|
||||||
* the user provided package containing the {@code Entity} definitions and tries to map each
|
* the user provided package containing the {@code Entity} definitions and tries to map each
|
||||||
* entity to a {@link DbObjectSchema} instance.
|
* entity to a {@link DbObjectSchema} instance.
|
||||||
*
|
*
|
||||||
@ -90,7 +90,7 @@ public class SnapAdmin {
|
|||||||
private static final String VERSION = "0.1.9";
|
private static final String VERSION = "0.1.9";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the DbAdmin instance by scanning the `@Entity` beans and loading
|
* Builds the SnapAdmin instance by scanning the `@Entity` beans and loading
|
||||||
* the schemas.
|
* the schemas.
|
||||||
* @param entityManager the entity manager
|
* @param entityManager the entity manager
|
||||||
* @param properties the configuration properties
|
* @param properties the configuration properties
|
||||||
@ -152,11 +152,11 @@ public class SnapAdmin {
|
|||||||
* Finds a schema by its full class name
|
* Finds a schema by its full class name
|
||||||
* @param className qualified class name
|
* @param className qualified class name
|
||||||
* @return the schema with this class name
|
* @return the schema with this class name
|
||||||
* @throws DbAdminException if corresponding schema not found
|
* @throws SnapAdminException if corresponding schema not found
|
||||||
*/
|
*/
|
||||||
public DbObjectSchema findSchemaByClassName(String className) {
|
public DbObjectSchema findSchemaByClassName(String className) {
|
||||||
return schemas.stream().filter(s -> s.getClassName().equals(className)).findFirst().orElseThrow(() -> {
|
return schemas.stream().filter(s -> s.getClassName().equals(className)).findFirst().orElseThrow(() -> {
|
||||||
return new DbAdminNotFoundException("Schema " + className + " not found.");
|
return new SnapAdminNotFoundException("Schema " + className + " not found.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,11 +164,11 @@ public class SnapAdmin {
|
|||||||
* Finds a schema by its table name
|
* Finds a schema by its table name
|
||||||
* @param tableName the table name on the database
|
* @param tableName the table name on the database
|
||||||
* @return the schema with this table name
|
* @return the schema with this table name
|
||||||
* @throws DbAdminException if corresponding schema not found
|
* @throws SnapAdminException if corresponding schema not found
|
||||||
*/
|
*/
|
||||||
public DbObjectSchema findSchemaByTableName(String tableName) {
|
public DbObjectSchema findSchemaByTableName(String tableName) {
|
||||||
return schemas.stream().filter(s -> s.getTableName().equals(tableName)).findFirst().orElseThrow(() -> {
|
return schemas.stream().filter(s -> s.getTableName().equals(tableName)).findFirst().orElseThrow(() -> {
|
||||||
return new DbAdminException("Schema " + tableName + " not found.");
|
return new SnapAdminException("Schema " + tableName + " not found.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ public class SnapAdmin {
|
|||||||
* Finds a schema by its class object
|
* Finds a schema by its class object
|
||||||
* @param klass the `@Entity` class you want to find the schema for
|
* @param klass the `@Entity` class you want to find the schema for
|
||||||
* @return the schema for the `@Entity` class
|
* @return the schema for the `@Entity` class
|
||||||
* @throws DbAdminException if corresponding schema not found
|
* @throws SnapAdminException if corresponding schema not found
|
||||||
*/
|
*/
|
||||||
public DbObjectSchema findSchemaByClass(Class<?> klass) {
|
public DbObjectSchema findSchemaByClass(Class<?> klass) {
|
||||||
return findSchemaByClassName(klass.getName());
|
return findSchemaByClassName(klass.getName());
|
||||||
@ -310,7 +310,7 @@ public class SnapAdmin {
|
|||||||
// If failure, we try to map a relationship on this field later
|
// If failure, we try to map a relationship on this field later
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (DbAdminException e) {
|
} catch (SnapAdminException e) {
|
||||||
// If failure, we try to map a relationship on this field later
|
// If failure, we try to map a relationship on this field later
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,12 +392,12 @@ public class SnapAdmin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (linkType == null)
|
if (linkType == null)
|
||||||
throw new DbAdminException("Unable to find @Id field in Entity class " + entityClass);
|
throw new SnapAdminException("Unable to find @Id field in Entity class " + entityClass);
|
||||||
|
|
||||||
return DbFieldType.fromClass(linkType).getConstructor().newInstance();
|
return DbFieldType.fromClass(linkType).getConstructor().newInstance();
|
||||||
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
|
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
|
||||||
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
| InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ import org.springframework.transaction.PlatformTransactionManager;
|
|||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
import org.springframework.transaction.support.TransactionTemplate;
|
import org.springframework.transaction.support.TransactionTemplate;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.internal.InternalDbAdminConfiguration;
|
import tech.ailef.snapadmin.internal.InternalSnapAdminConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The configuration class for "internal" data source. This is not the
|
* The configuration class for "internal" data source. This is not the
|
||||||
@ -55,7 +55,7 @@ import tech.ailef.snapadmin.internal.InternalDbAdminConfiguration;
|
|||||||
basePackages = { "tech.ailef.snapadmin.internal.repository" }
|
basePackages = { "tech.ailef.snapadmin.internal.repository" }
|
||||||
)
|
)
|
||||||
@EnableTransactionManagement
|
@EnableTransactionManagement
|
||||||
@Import(InternalDbAdminConfiguration.class)
|
@Import(InternalSnapAdminConfiguration.class)
|
||||||
public class SnapAdminAutoConfiguration {
|
public class SnapAdminAutoConfiguration {
|
||||||
@Autowired
|
@Autowired
|
||||||
private SnapAdminProperties props;
|
private SnapAdminProperties props;
|
||||||
|
@ -30,7 +30,7 @@ import org.springframework.context.ApplicationListener;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs at startup to determine if SnapAdmin is protected with authentication.
|
* Runs at startup to determine if SnapAdmin is protected with authentication.
|
||||||
@ -70,7 +70,7 @@ public class StartupAuthCheckRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -64,8 +64,8 @@ import tech.ailef.snapadmin.external.dbmapping.query.DbQueryResult;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.query.DbQueryResultRow;
|
import tech.ailef.snapadmin.external.dbmapping.query.DbQueryResultRow;
|
||||||
import tech.ailef.snapadmin.external.dto.DataExportFormat;
|
import tech.ailef.snapadmin.external.dto.DataExportFormat;
|
||||||
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminNotFoundException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminNotFoundException;
|
||||||
import tech.ailef.snapadmin.external.misc.Utils;
|
import tech.ailef.snapadmin.external.misc.Utils;
|
||||||
import tech.ailef.snapadmin.internal.model.ConsoleQuery;
|
import tech.ailef.snapadmin.internal.model.ConsoleQuery;
|
||||||
import tech.ailef.snapadmin.internal.repository.ConsoleQueryRepository;
|
import tech.ailef.snapadmin.internal.repository.ConsoleQueryRepository;
|
||||||
@ -90,13 +90,13 @@ public class DataExportController {
|
|||||||
@GetMapping("/console/export/{queryId}")
|
@GetMapping("/console/export/{queryId}")
|
||||||
public ResponseEntity<byte[]> export(@PathVariable String queryId, @RequestParam String format,
|
public ResponseEntity<byte[]> export(@PathVariable String queryId, @RequestParam String format,
|
||||||
@RequestParam MultiValueMap<String, String> otherParams) {
|
@RequestParam MultiValueMap<String, String> otherParams) {
|
||||||
ConsoleQuery query = queryRepository.findById(queryId).orElseThrow(() -> new DbAdminNotFoundException("Query not found: " + queryId));
|
ConsoleQuery query = queryRepository.findById(queryId).orElseThrow(() -> new SnapAdminNotFoundException("Query not found: " + queryId));
|
||||||
|
|
||||||
DataExportFormat exportFormat = null;
|
DataExportFormat exportFormat = null;
|
||||||
try {
|
try {
|
||||||
exportFormat = DataExportFormat.valueOf(format.toUpperCase());
|
exportFormat = DataExportFormat.valueOf(format.toUpperCase());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new DbAdminException("Unsupported export format: " + format);
|
throw new SnapAdminException("Unsupported export format: " + format);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> fieldsToInclude = otherParams.getOrDefault("fields[]", new ArrayList<>());
|
List<String> fieldsToInclude = otherParams.getOrDefault("fields[]", new ArrayList<>());
|
||||||
@ -120,7 +120,7 @@ public class DataExportController {
|
|||||||
"attachment; filename=\"export_" + query.getTitle().replaceAll("[^a-zA-Z0-9.-]", "_") + ".jsonl\"")
|
"attachment; filename=\"export_" + query.getTitle().replaceAll("[^a-zA-Z0-9.-]", "_") + ".jsonl\"")
|
||||||
.body(toJsonlQuery(results, fieldsToInclude).getBytes());
|
.body(toJsonlQuery(results, fieldsToInclude).getBytes());
|
||||||
default:
|
default:
|
||||||
throw new DbAdminException("Invalid DataExportFormat");
|
throw new SnapAdminException("Invalid DataExportFormat");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ public class DataExportController {
|
|||||||
DbObjectSchema schema = dbAdmin.findSchemaByClassName(className);
|
DbObjectSchema schema = dbAdmin.findSchemaByClassName(className);
|
||||||
|
|
||||||
if (!schema.isExportEnabled()) {
|
if (!schema.isExportEnabled()) {
|
||||||
throw new DbAdminException("Export is not enabled for this table: " + schema.getTableName());
|
throw new SnapAdminException("Export is not enabled for this table: " + schema.getTableName());
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> fieldsToInclude = otherParams.getOrDefault("fields[]", new ArrayList<>());
|
List<String> fieldsToInclude = otherParams.getOrDefault("fields[]", new ArrayList<>());
|
||||||
@ -143,7 +143,7 @@ public class DataExportController {
|
|||||||
try {
|
try {
|
||||||
exportFormat = DataExportFormat.valueOf(format.toUpperCase());
|
exportFormat = DataExportFormat.valueOf(format.toUpperCase());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
throw new DbAdminException("Unsupported export format: " + format);
|
throw new SnapAdminException("Unsupported export format: " + format);
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<QueryFilter> queryFilters = Utils.computeFilters(schema, otherParams);
|
Set<QueryFilter> queryFilters = Utils.computeFilters(schema, otherParams);
|
||||||
@ -168,7 +168,7 @@ public class DataExportController {
|
|||||||
.body(toJsonl(results, fieldsToInclude, raw).getBytes());
|
.body(toJsonl(results, fieldsToInclude, raw).getBytes());
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new DbAdminException("Invalid DataExportFormat");
|
throw new SnapAdminException("Invalid DataExportFormat");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ public class DataExportController {
|
|||||||
fos.close();
|
fos.close();
|
||||||
workbook.close();
|
workbook.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException("Error during serialization for XLSX workbook", e);
|
throw new SnapAdminException("Error during serialization for XLSX workbook", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -252,7 +252,7 @@ public class DataExportController {
|
|||||||
fos.close();
|
fos.close();
|
||||||
workbook.close();
|
workbook.close();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException("Error during serialization for XLSX workbook", e);
|
throw new SnapAdminException("Error during serialization for XLSX workbook", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -279,7 +279,7 @@ public class DataExportController {
|
|||||||
String json = mapper.writeValueAsString(map);
|
String json = mapper.writeValueAsString(map);
|
||||||
sb.append(json);
|
sb.append(json);
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
@ -300,7 +300,7 @@ public class DataExportController {
|
|||||||
String json = mapper.writeValueAsString(map);
|
String json = mapper.writeValueAsString(map);
|
||||||
sb.append(json);
|
sb.append(json);
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append("\n");
|
sb.append("\n");
|
||||||
@ -328,7 +328,7 @@ public class DataExportController {
|
|||||||
|
|
||||||
return sw.toString();
|
return sw.toString();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException("Error during creation of CSV file", e);
|
throw new SnapAdminException("Error during creation of CSV file", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -350,7 +350,7 @@ public class DataExportController {
|
|||||||
|
|
||||||
return sw.toString();
|
return sw.toString();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException("Error during creation of CSV file", e);
|
throw new SnapAdminException("Error during creation of CSV file", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ import tech.ailef.snapadmin.external.dbmapping.SnapAdminRepository;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.DbFieldValue;
|
import tech.ailef.snapadmin.external.dbmapping.DbFieldValue;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.DbObject;
|
import tech.ailef.snapadmin.external.dbmapping.DbObject;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.DbObjectSchema;
|
import tech.ailef.snapadmin.external.dbmapping.DbObjectSchema;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller to serve file or images (`@DisplayImage`)
|
* Controller to serve file or images (`@DisplayImage`)
|
||||||
@ -109,7 +109,7 @@ public class FileDownloadController {
|
|||||||
DbFieldValue dbFieldValue;
|
DbFieldValue dbFieldValue;
|
||||||
try {
|
try {
|
||||||
dbFieldValue = dbObject.get(fieldName);
|
dbFieldValue = dbObject.get(fieldName);
|
||||||
} catch (DbAdminException e) {
|
} catch (SnapAdminException e) {
|
||||||
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Field not found", e);
|
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Field not found", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ import jakarta.servlet.http.HttpServletRequest;
|
|||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import tech.ailef.snapadmin.external.SnapAdmin;
|
import tech.ailef.snapadmin.external.SnapAdmin;
|
||||||
import tech.ailef.snapadmin.external.SnapAdminProperties;
|
import tech.ailef.snapadmin.external.SnapAdminProperties;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminNotFoundException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminNotFoundException;
|
||||||
import tech.ailef.snapadmin.internal.UserConfiguration;
|
import tech.ailef.snapadmin.internal.UserConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,7 +51,7 @@ public class GlobalController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SnapAdmin dbAdmin;
|
private SnapAdmin dbAdmin;
|
||||||
|
|
||||||
@ExceptionHandler(DbAdminException.class)
|
@ExceptionHandler(SnapAdminException.class)
|
||||||
public String handleException(Exception e, Model model, HttpServletResponse response) {
|
public String handleException(Exception e, Model model, HttpServletResponse response) {
|
||||||
model.addAttribute("status", "");
|
model.addAttribute("status", "");
|
||||||
model.addAttribute("error", "Error");
|
model.addAttribute("error", "Error");
|
||||||
@ -63,7 +63,7 @@ public class GlobalController {
|
|||||||
return "other/error";
|
return "other/error";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ExceptionHandler(DbAdminNotFoundException.class)
|
@ExceptionHandler(SnapAdminNotFoundException.class)
|
||||||
public String handleNotFound(Exception e, Model model, HttpServletResponse response) {
|
public String handleNotFound(Exception e, Model model, HttpServletResponse response) {
|
||||||
model.addAttribute("status", "404");
|
model.addAttribute("status", "404");
|
||||||
model.addAttribute("error", "Error");
|
model.addAttribute("error", "Error");
|
||||||
|
@ -68,8 +68,8 @@ import tech.ailef.snapadmin.external.dto.PaginatedResult;
|
|||||||
import tech.ailef.snapadmin.external.dto.PaginationInfo;
|
import tech.ailef.snapadmin.external.dto.PaginationInfo;
|
||||||
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
||||||
import tech.ailef.snapadmin.external.dto.ValidationErrorsContainer;
|
import tech.ailef.snapadmin.external.dto.ValidationErrorsContainer;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminNotFoundException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminNotFoundException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.InvalidPageException;
|
import tech.ailef.snapadmin.external.exceptions.InvalidPageException;
|
||||||
import tech.ailef.snapadmin.external.misc.Utils;
|
import tech.ailef.snapadmin.external.misc.Utils;
|
||||||
import tech.ailef.snapadmin.internal.model.ConsoleQuery;
|
import tech.ailef.snapadmin.internal.model.ConsoleQuery;
|
||||||
@ -81,12 +81,12 @@ import tech.ailef.snapadmin.internal.service.UserActionService;
|
|||||||
import tech.ailef.snapadmin.internal.service.UserSettingsService;
|
import tech.ailef.snapadmin.internal.service.UserSettingsService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main DbAdmin controller that register most of the routes of the web interface.
|
* The main SnapAdmin controller that register most of the routes of the web interface.
|
||||||
*/
|
*/
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping(value= {"/${snapadmin.baseUrl}", "/${snapadmin.baseUrl}/"})
|
@RequestMapping(value= {"/${snapadmin.baseUrl}", "/${snapadmin.baseUrl}/"})
|
||||||
public class DefaultSnapAdminController {
|
public class SnapAdminController {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(DefaultSnapAdminController.class);
|
private static final Logger logger = LoggerFactory.getLogger(SnapAdminController.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private SnapAdminProperties properties;
|
private SnapAdminProperties properties;
|
||||||
@ -229,7 +229,7 @@ public class DefaultSnapAdminController {
|
|||||||
|
|
||||||
} catch (InvalidPageException e) {
|
} catch (InvalidPageException e) {
|
||||||
return "redirect:/" + properties.getBaseUrl() + "/model/" + className;
|
return "redirect:/" + properties.getBaseUrl() + "/model/" + className;
|
||||||
} catch (DbAdminException e) {
|
} catch (SnapAdminException e) {
|
||||||
model.addAttribute("error", e.getMessage());
|
model.addAttribute("error", e.getMessage());
|
||||||
model.addAttribute("errorTitle", "Invalid request");
|
model.addAttribute("errorTitle", "Invalid request");
|
||||||
model.addAttribute("schema", schema);
|
model.addAttribute("schema", schema);
|
||||||
@ -272,7 +272,7 @@ public class DefaultSnapAdminController {
|
|||||||
Object pkValue = schema.getPrimaryKey().getType().parseValue(id);
|
Object pkValue = schema.getPrimaryKey().getType().parseValue(id);
|
||||||
|
|
||||||
DbObject object = repository.findById(schema, pkValue).orElseThrow(() -> {
|
DbObject object = repository.findById(schema, pkValue).orElseThrow(() -> {
|
||||||
return new DbAdminNotFoundException(
|
return new SnapAdminNotFoundException(
|
||||||
schema.getJavaClass().getSimpleName() + " with ID " + id + " not found."
|
schema.getJavaClass().getSimpleName() + " with ID " + id + " not found."
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@ -318,7 +318,7 @@ public class DefaultSnapAdminController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
DbObject object = repository.findById(schema, pkValue).orElseThrow(() -> {
|
DbObject object = repository.findById(schema, pkValue).orElseThrow(() -> {
|
||||||
return new DbAdminNotFoundException(
|
return new SnapAdminNotFoundException(
|
||||||
"Object " + className + " with id " + id + " not found"
|
"Object " + className + " with id " + id + " not found"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@ -500,7 +500,7 @@ public class DefaultSnapAdminController {
|
|||||||
attr.addFlashAttribute("error", "See below for details");
|
attr.addFlashAttribute("error", "See below for details");
|
||||||
attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e));
|
attr.addFlashAttribute("validationErrors", new ValidationErrorsContainer(e));
|
||||||
attr.addFlashAttribute("params", params);
|
attr.addFlashAttribute("params", params);
|
||||||
} catch (DbAdminException e) {
|
} catch (SnapAdminException e) {
|
||||||
Throwable cause = e.getCause() != null ? e.getCause() : e;
|
Throwable cause = e.getCause() != null ? e.getCause() : e;
|
||||||
logger.error(Arrays.toString(cause.getStackTrace()));
|
logger.error(Arrays.toString(cause.getStackTrace()));
|
||||||
attr.addFlashAttribute("errorTitle", "Error");
|
attr.addFlashAttribute("errorTitle", "Error");
|
||||||
@ -557,7 +557,7 @@ public class DefaultSnapAdminController {
|
|||||||
@GetMapping("/console/new")
|
@GetMapping("/console/new")
|
||||||
public String consoleNew(Model model) {
|
public String consoleNew(Model model) {
|
||||||
if (!properties.isSqlConsoleEnabled()) {
|
if (!properties.isSqlConsoleEnabled()) {
|
||||||
throw new DbAdminException("SQL console not enabled");
|
throw new SnapAdminException("SQL console not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleQuery q = new ConsoleQuery();
|
ConsoleQuery q = new ConsoleQuery();
|
||||||
@ -568,7 +568,7 @@ public class DefaultSnapAdminController {
|
|||||||
@GetMapping("/console")
|
@GetMapping("/console")
|
||||||
public String console() {
|
public String console() {
|
||||||
if (!properties.isSqlConsoleEnabled()) {
|
if (!properties.isSqlConsoleEnabled()) {
|
||||||
throw new DbAdminException("SQL console not enabled");
|
throw new SnapAdminException("SQL console not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ConsoleQuery> tabs = consoleQueryRepository.findAll();
|
List<ConsoleQuery> tabs = consoleQueryRepository.findAll();
|
||||||
@ -585,7 +585,7 @@ public class DefaultSnapAdminController {
|
|||||||
@PostMapping("/console/delete/{queryId}")
|
@PostMapping("/console/delete/{queryId}")
|
||||||
public String consoleDelete(@PathVariable String queryId, Model model) {
|
public String consoleDelete(@PathVariable String queryId, Model model) {
|
||||||
if (!properties.isSqlConsoleEnabled()) {
|
if (!properties.isSqlConsoleEnabled()) {
|
||||||
throw new DbAdminException("SQL console not enabled");
|
throw new SnapAdminException("SQL console not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
consoleQueryRepository.deleteById(queryId);
|
consoleQueryRepository.deleteById(queryId);
|
||||||
@ -604,11 +604,11 @@ public class DefaultSnapAdminController {
|
|||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|
||||||
if (!properties.isSqlConsoleEnabled()) {
|
if (!properties.isSqlConsoleEnabled()) {
|
||||||
throw new DbAdminException("SQL console not enabled");
|
throw new SnapAdminException("SQL console not enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
ConsoleQuery activeQuery = consoleQueryRepository.findById(queryId).orElseThrow(() -> {
|
ConsoleQuery activeQuery = consoleQueryRepository.findById(queryId).orElseThrow(() -> {
|
||||||
return new DbAdminNotFoundException("Query with ID " + queryId + " not found.");
|
return new SnapAdminNotFoundException("Query with ID " + queryId + " not found.");
|
||||||
});
|
});
|
||||||
|
|
||||||
if (query != null && !query.isBlank()) {
|
if (query != null && !query.isBlank()) {
|
@ -45,7 +45,7 @@ import tech.ailef.snapadmin.external.dbmapping.fields.StringFieldType;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.fields.TextFieldType;
|
import tech.ailef.snapadmin.external.dbmapping.fields.TextFieldType;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
public class CustomJpaRepository extends SimpleJpaRepository {
|
public class CustomJpaRepository extends SimpleJpaRepository {
|
||||||
@ -140,7 +140,7 @@ public class CustomJpaRepository extends SimpleJpaRepository {
|
|||||||
else value = file.getBytes();
|
else value = file.getBytes();
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ public class CustomJpaRepository extends SimpleJpaRepository {
|
|||||||
try {
|
try {
|
||||||
value = dbField.getType().parseValue(v);
|
value = dbField.getType().parseValue(v);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new DbAdminException("Invalid value `" + v + "` specified for field `" + dbField.getName() + "`");
|
throw new SnapAdminException("Invalid value `" + v + "` specified for field `" + dbField.getName() + "`");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ import jakarta.persistence.OneToOne;
|
|||||||
import tech.ailef.snapadmin.external.annotations.DisplayName;
|
import tech.ailef.snapadmin.external.annotations.DisplayName;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.BooleanFieldType;
|
import tech.ailef.snapadmin.external.dbmapping.fields.BooleanFieldType;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper for all objects retrieved from the database.
|
* Wrapper for all objects retrieved from the database.
|
||||||
@ -54,7 +54,7 @@ public class DbObject {
|
|||||||
|
|
||||||
public DbObject(Object instance, DbObjectSchema schema) {
|
public DbObject(Object instance, DbObjectSchema schema) {
|
||||||
if (instance == null)
|
if (instance == null)
|
||||||
throw new DbAdminException("Trying to build object with instance == null");
|
throw new SnapAdminException("Trying to build object with instance == null");
|
||||||
|
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
this.schema = schema;
|
this.schema = schema;
|
||||||
@ -94,7 +94,7 @@ public class DbObject {
|
|||||||
DbObject linkedDbObject = new DbObject(linkedObject, field.getConnectedSchema());
|
DbObject linkedDbObject = new DbObject(linkedObject, field.getConnectedSchema());
|
||||||
return linkedDbObject;
|
return linkedDbObject;
|
||||||
} else {
|
} else {
|
||||||
throw new DbAdminException("Cannot traverse field " + field.getName() + " in class " + schema.getClassName());
|
throw new SnapAdminException("Cannot traverse field " + field.getName() + " in class " + schema.getClassName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ public class DbObject {
|
|||||||
return linkedObjects.stream().map(o -> new DbObject(o, field.getConnectedSchema()))
|
return linkedObjects.stream().map(o -> new DbObject(o, field.getConnectedSchema()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
} else {
|
} else {
|
||||||
throw new DbAdminException("Cannot traverse field " + field.getName() + " in class " + schema.getClassName());
|
throw new SnapAdminException("Cannot traverse field " + field.getName() + " in class " + schema.getClassName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,14 +120,14 @@ public class DbObject {
|
|||||||
Method getter = findGetter(name);
|
Method getter = findGetter(name);
|
||||||
|
|
||||||
if (getter == null)
|
if (getter == null)
|
||||||
throw new DbAdminException("Unable to find getter method for field `"
|
throw new SnapAdminException("Unable to find getter method for field `"
|
||||||
+ name + "` in class " + instance.getClass());
|
+ name + "` in class " + instance.getClass());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Object result = getter.invoke(instance);
|
Object result = getter.invoke(instance);
|
||||||
return new DbFieldValue(result, schema.getFieldByJavaName(name));
|
return new DbFieldValue(result, schema.getFieldByJavaName(name));
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,14 +136,14 @@ public class DbObject {
|
|||||||
Method getter = findGetter(primaryKeyField.getJavaName());
|
Method getter = findGetter(primaryKeyField.getJavaName());
|
||||||
|
|
||||||
if (getter == null)
|
if (getter == null)
|
||||||
throw new DbAdminException("Unable to find getter method for field `"
|
throw new SnapAdminException("Unable to find getter method for field `"
|
||||||
+ primaryKeyField.getJavaName() + "` in class " + instance.getClass());
|
+ primaryKeyField.getJavaName() + "` in class " + instance.getClass());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Object result = getter.invoke(instance);
|
Object result = getter.invoke(instance);
|
||||||
return result;
|
return result;
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,7 +161,7 @@ public class DbObject {
|
|||||||
if (displayName == null) return null;
|
if (displayName == null) return null;
|
||||||
else return displayName.toString();
|
else return displayName.toString();
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return getPrimaryKeyValue().toString();
|
return getPrimaryKeyValue().toString();
|
||||||
@ -180,12 +180,12 @@ public class DbObject {
|
|||||||
Method method = schema.getComputedColumn(column);
|
Method method = schema.getComputedColumn(column);
|
||||||
|
|
||||||
if (method == null)
|
if (method == null)
|
||||||
throw new DbAdminException("Unable to find mapped method for @ComputedColumn " + column);
|
throw new SnapAdminException("Unable to find mapped method for @ComputedColumn " + column);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return method.invoke(instance);
|
return method.invoke(instance);
|
||||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||||
throw new DbAdminException("Error while calling @ComputedColumn " + column
|
throw new SnapAdminException("Error while calling @ComputedColumn " + column
|
||||||
+ " on class " + schema.getClassName());
|
+ " on class " + schema.getClassName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,14 +197,14 @@ public class DbObject {
|
|||||||
Optional<?> obj = linkedSchema.getJpaRepository().findById(primaryKeyValue);
|
Optional<?> obj = linkedSchema.getJpaRepository().findById(primaryKeyValue);
|
||||||
|
|
||||||
if (!obj.isPresent()) {
|
if (!obj.isPresent()) {
|
||||||
throw new DbAdminException("Invalid value " + primaryKeyValue + " for " + fieldName
|
throw new SnapAdminException("Invalid value " + primaryKeyValue + " for " + fieldName
|
||||||
+ ": item does not exist.");
|
+ ": item does not exist.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Method setter = findSetter(field.getJavaName());
|
Method setter = findSetter(field.getJavaName());
|
||||||
|
|
||||||
if (setter == null) {
|
if (setter == null) {
|
||||||
throw new DbAdminException("Unable to find setter method for " + fieldName + " in " + schema.getClassName());
|
throw new SnapAdminException("Unable to find setter method for " + fieldName + " in " + schema.getClassName());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -217,7 +217,7 @@ public class DbObject {
|
|||||||
Method setter = findSetter(fieldName);
|
Method setter = findSetter(fieldName);
|
||||||
|
|
||||||
if (setter == null) {
|
if (setter == null) {
|
||||||
throw new DbAdminException("Unable to find setter method for " + fieldName + " in " + schema.getClassName());
|
throw new SnapAdminException("Unable to find setter method for " + fieldName + " in " + schema.getClassName());
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -48,7 +48,7 @@ import tech.ailef.snapadmin.external.annotations.DisableExport;
|
|||||||
import tech.ailef.snapadmin.external.annotations.HiddenColumn;
|
import tech.ailef.snapadmin.external.annotations.HiddenColumn;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
||||||
import tech.ailef.snapadmin.external.dto.MappingError;
|
import tech.ailef.snapadmin.external.dto.MappingError;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.misc.Utils;
|
import tech.ailef.snapadmin.external.misc.Utils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,7 +75,7 @@ public class DbObjectSchema {
|
|||||||
*/
|
*/
|
||||||
private CustomJpaRepository jpaRepository;
|
private CustomJpaRepository jpaRepository;
|
||||||
|
|
||||||
private SnapAdmin dbAdmin;
|
private SnapAdmin snapAdmin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The corresponding `@Entity` class that this schema describes
|
* The corresponding `@Entity` class that this schema describes
|
||||||
@ -95,10 +95,10 @@ public class DbObjectSchema {
|
|||||||
* Determines the table name from the `@Table` annotation and also
|
* Determines the table name from the `@Table` annotation and also
|
||||||
* which methods are `@ComputedColumn`s
|
* which methods are `@ComputedColumn`s
|
||||||
* @param klass the `@Entity` class
|
* @param klass the `@Entity` class
|
||||||
* @param dbAdmin the DbAdmin instance
|
* @param snapAdmin the SnapAdmin instance
|
||||||
*/
|
*/
|
||||||
public DbObjectSchema(Class<?> klass, SnapAdmin dbAdmin) {
|
public DbObjectSchema(Class<?> klass, SnapAdmin snapAdmin) {
|
||||||
this.dbAdmin = dbAdmin;
|
this.snapAdmin = snapAdmin;
|
||||||
this.entityClass = klass;
|
this.entityClass = klass;
|
||||||
|
|
||||||
Table tableAnnotation = klass.getAnnotation(Table.class);
|
Table tableAnnotation = klass.getAnnotation(Table.class);
|
||||||
@ -116,7 +116,7 @@ public class DbObjectSchema {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
for (Method m : methods) {
|
for (Method m : methods) {
|
||||||
if (m.getParameterCount() > 0)
|
if (m.getParameterCount() > 0)
|
||||||
throw new DbAdminException("@ComputedColumn can only be applied on no-args methods");
|
throw new SnapAdminException("@ComputedColumn can only be applied on no-args methods");
|
||||||
|
|
||||||
String name = m.getAnnotation(ComputedColumn.class).name();
|
String name = m.getAnnotation(ComputedColumn.class).name();
|
||||||
if (name.isBlank())
|
if (name.isBlank())
|
||||||
@ -131,11 +131,11 @@ public class DbObjectSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the DbAdmin instance
|
* Returns the SnapAdmin instance
|
||||||
* @return the DbAdmin instance
|
* @return the SnapAdmin instance
|
||||||
*/
|
*/
|
||||||
public SnapAdmin getDbAdmin() {
|
public SnapAdmin getSnapAdmin() {
|
||||||
return dbAdmin;
|
return snapAdmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -191,7 +191,7 @@ public class DbObjectSchema {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a field to this schema. This is used by the DbAdmin instance
|
* Adds a field to this schema. This is used by the SnapAdmin instance
|
||||||
* during initialization and it's not supposed to be called afterwards
|
* during initialization and it's not supposed to be called afterwards
|
||||||
* @param f the DbField to add
|
* @param f the DbField to add
|
||||||
*/
|
*/
|
||||||
@ -417,7 +417,7 @@ public class DbObjectSchema {
|
|||||||
return dbObject;
|
return dbObject;
|
||||||
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
|
||||||
| NoSuchMethodException | SecurityException e) {
|
| NoSuchMethodException | SecurityException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ import tech.ailef.snapadmin.external.dto.FacetedSearchRequest;
|
|||||||
import tech.ailef.snapadmin.external.dto.PaginatedResult;
|
import tech.ailef.snapadmin.external.dto.PaginatedResult;
|
||||||
import tech.ailef.snapadmin.external.dto.PaginationInfo;
|
import tech.ailef.snapadmin.external.dto.PaginationInfo;
|
||||||
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.InvalidPageException;
|
import tech.ailef.snapadmin.external.exceptions.InvalidPageException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,7 +206,7 @@ public class SnapAdminRepository {
|
|||||||
Optional<DbObject> optional = findById(schema, id);
|
Optional<DbObject> optional = findById(schema, id);
|
||||||
|
|
||||||
DbObject dbObject = optional.orElseThrow(() -> {
|
DbObject dbObject = optional.orElseThrow(() -> {
|
||||||
return new DbAdminException("Unable to retrieve newly inserted item");
|
return new SnapAdminException("Unable to retrieve newly inserted item");
|
||||||
});
|
});
|
||||||
|
|
||||||
for (String mParam : params.keySet()) {
|
for (String mParam : params.keySet()) {
|
||||||
|
@ -24,7 +24,7 @@ import java.util.List;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class ByteArrayFieldType extends DbFieldType {
|
public class ByteArrayFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -38,7 +38,7 @@ public class ByteArrayFieldType extends DbFieldType {
|
|||||||
try {
|
try {
|
||||||
return ((MultipartFile)value).getBytes();
|
return ((MultipartFile)value).getBytes();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,6 +49,6 @@ public class ByteArrayFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException("Binary fields are not comparable");
|
throw new SnapAdminException("Binary fields are not comparable");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ package tech.ailef.snapadmin.external.dbmapping.fields;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class ByteFieldType extends DbFieldType {
|
public class ByteFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -42,6 +42,6 @@ public class ByteFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException("Binary fields are not comparable");
|
throw new SnapAdminException("Binary fields are not comparable");
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -21,7 +21,7 @@ package tech.ailef.snapadmin.external.dbmapping.fields;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class ComputedFieldType extends DbFieldType {
|
public class ComputedFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -41,6 +41,6 @@ public class ComputedFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException();
|
throw new SnapAdminException();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -24,7 +24,7 @@ import java.time.format.DateTimeParseException;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class DateFieldType extends DbFieldType {
|
public class DateFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -39,7 +39,7 @@ public class DateFieldType extends DbFieldType {
|
|||||||
LocalDate localDate = LocalDate.parse(value.toString());
|
LocalDate localDate = LocalDate.parse(value.toString());
|
||||||
return Date.valueOf(localDate);
|
return Date.valueOf(localDate);
|
||||||
} catch (DateTimeParseException e) {
|
} catch (DateTimeParseException e) {
|
||||||
throw new DbAdminException("Invalid date " + value, e);
|
throw new SnapAdminException("Invalid date " + value, e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ public class DbField {
|
|||||||
|
|
||||||
public DbObjectSchema getConnectedSchema() {
|
public DbObjectSchema getConnectedSchema() {
|
||||||
if (connectedType == null) return null;
|
if (connectedType == null) return null;
|
||||||
return schema.getDbAdmin().findSchemaByClass(connectedType);
|
return schema.getSnapAdmin().findSchemaByClass(connectedType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSchema(DbObjectSchema schema) {
|
public void setSchema(DbObjectSchema schema) {
|
||||||
|
@ -26,7 +26,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import jakarta.persistence.EnumType;
|
import jakarta.persistence.EnumType;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class EnumFieldType extends DbFieldType {
|
public class EnumFieldType extends DbFieldType {
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ public class EnumFieldType extends DbFieldType {
|
|||||||
return Arrays.stream(invoke).collect(Collectors.toList());
|
return Arrays.stream(invoke).collect(Collectors.toList());
|
||||||
} catch (NoSuchMethodException | SecurityException | InvocationTargetException
|
} catch (NoSuchMethodException | SecurityException | InvocationTargetException
|
||||||
| IllegalAccessException | IllegalArgumentException e) {
|
| IllegalAccessException | IllegalArgumentException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,11 +65,11 @@ public class EnumFieldType extends DbFieldType {
|
|||||||
return valueOf.invoke(null, value.toString());
|
return valueOf.invoke(null, value.toString());
|
||||||
} catch (InvocationTargetException e) {
|
} catch (InvocationTargetException e) {
|
||||||
if (e.getCause() instanceof IllegalArgumentException)
|
if (e.getCause() instanceof IllegalArgumentException)
|
||||||
throw new DbAdminException("Invalid value " + value + " for enum type " + getJavaClass().getSimpleName());
|
throw new SnapAdminException("Invalid value " + value + " for enum type " + getJavaClass().getSimpleName());
|
||||||
else
|
else
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
} catch (NoSuchMethodException | SecurityException | IllegalAccessException e) {
|
} catch (NoSuchMethodException | SecurityException | IllegalAccessException e) {
|
||||||
throw new DbAdminException(e);
|
throw new SnapAdminException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import jakarta.persistence.ManyToMany;
|
import jakarta.persistence.ManyToMany;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class ManyToManyFieldType extends DbFieldType {
|
public class ManyToManyFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -52,6 +52,6 @@ public class ManyToManyFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException();
|
throw new SnapAdminException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import jakarta.persistence.OneToMany;
|
import jakarta.persistence.OneToMany;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class OneToManyFieldType extends DbFieldType {
|
public class OneToManyFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -52,6 +52,6 @@ public class OneToManyFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException();
|
throw new SnapAdminException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import jakarta.persistence.OneToOne;
|
import jakarta.persistence.OneToOne;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class OneToOneFieldType extends DbFieldType {
|
public class OneToOneFieldType extends DbFieldType {
|
||||||
@Override
|
@Override
|
||||||
@ -52,6 +52,6 @@ public class OneToOneFieldType extends DbFieldType {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<CompareOperator> getCompareOperators() {
|
public List<CompareOperator> getCompareOperators() {
|
||||||
throw new DbAdminException();
|
throw new SnapAdminException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ import tech.ailef.snapadmin.external.SnapAdmin;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.DbObjectSchema;
|
import tech.ailef.snapadmin.external.dbmapping.DbObjectSchema;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbFieldType;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbFieldType;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.external.exceptions.UnsupportedFieldTypeException;
|
import tech.ailef.snapadmin.external.exceptions.UnsupportedFieldTypeException;
|
||||||
|
|
||||||
public class DbQueryOutputField {
|
public class DbQueryOutputField {
|
||||||
@ -47,7 +47,7 @@ public class DbQueryOutputField {
|
|||||||
DbObjectSchema schema = dbAdmin.findSchemaByTableName(table);
|
DbObjectSchema schema = dbAdmin.findSchemaByTableName(table);
|
||||||
DbField dbField = schema.getFieldByName(name);
|
DbField dbField = schema.getFieldByName(name);
|
||||||
this.dbField = dbField;
|
this.dbField = dbField;
|
||||||
} catch (DbAdminException e) {
|
} catch (SnapAdminException e) {
|
||||||
// We were unable to map this result column to a table, this happens
|
// We were unable to map this result column to a table, this happens
|
||||||
// for example with COUNT(*) results and similar. We ignore this
|
// for example with COUNT(*) results and similar. We ignore this
|
||||||
// as the dbField will be null and handled as such in the rest of the code
|
// as the dbField will be null and handled as such in the rest of the code
|
||||||
|
@ -24,7 +24,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
public class DbQueryResultRow {
|
public class DbQueryResultRow {
|
||||||
private Map<DbQueryOutputField, Object> values;
|
private Map<DbQueryOutputField, Object> values;
|
||||||
@ -60,7 +60,7 @@ public class DbQueryResultRow {
|
|||||||
DbQueryOutputField key =
|
DbQueryOutputField key =
|
||||||
values.keySet().stream().filter(f -> f.getName().equals(field)).findFirst().orElse(null);
|
values.keySet().stream().filter(f -> f.getName().equals(field)).findFirst().orElse(null);
|
||||||
if (key == null) {
|
if (key == null) {
|
||||||
throw new DbAdminException("Field " + field + " not found");
|
throw new SnapAdminException("Field " + field + " not found");
|
||||||
}
|
}
|
||||||
return get(key);
|
return get(key);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ package tech.ailef.snapadmin.external.dto;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A single filter in a FacetedSearchRequest. This describes a
|
* A single filter in a FacetedSearchRequest. This describes a
|
||||||
@ -37,7 +37,7 @@ public class QueryFilter {
|
|||||||
|
|
||||||
public QueryFilter(DbField field, CompareOperator op, String value) {
|
public QueryFilter(DbField field, CompareOperator op, String value) {
|
||||||
if (field == null)
|
if (field == null)
|
||||||
throw new DbAdminException("Trying to build QueryFilter with null `field`");
|
throw new SnapAdminException("Trying to build QueryFilter with null `field`");
|
||||||
this.field = field;
|
this.field = field;
|
||||||
this.op = op;
|
this.op = op;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
|
@ -25,7 +25,7 @@ package tech.ailef.snapadmin.external.exceptions;
|
|||||||
* than the maximum available page). Used internally to redirect the
|
* than the maximum available page). Used internally to redirect the
|
||||||
* user to a default page.
|
* user to a default page.
|
||||||
*/
|
*/
|
||||||
public class InvalidPageException extends DbAdminException {
|
public class InvalidPageException extends SnapAdminException {
|
||||||
private static final long serialVersionUID = -8891734807568233099L;
|
private static final long serialVersionUID = -8891734807568233099L;
|
||||||
|
|
||||||
public InvalidPageException() {
|
public InvalidPageException() {
|
||||||
|
@ -23,21 +23,21 @@ package tech.ailef.snapadmin.external.exceptions;
|
|||||||
* Generic top-level exception for everything thrown by us
|
* Generic top-level exception for everything thrown by us
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class DbAdminException extends RuntimeException {
|
public class SnapAdminException extends RuntimeException {
|
||||||
private static final long serialVersionUID = 8120227031645804467L;
|
private static final long serialVersionUID = 8120227031645804467L;
|
||||||
|
|
||||||
public DbAdminException() {
|
public SnapAdminException() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbAdminException(String msg, Throwable e) {
|
public SnapAdminException(String msg, Throwable e) {
|
||||||
super(msg, e);
|
super(msg, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbAdminException(Throwable e) {
|
public SnapAdminException(Throwable e) {
|
||||||
super(e);
|
super(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DbAdminException(String msg) {
|
public SnapAdminException(String msg) {
|
||||||
super(msg);
|
super(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -23,10 +23,10 @@ package tech.ailef.snapadmin.external.exceptions;
|
|||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
public class DbAdminNotFoundException extends ResponseStatusException {
|
public class SnapAdminNotFoundException extends ResponseStatusException {
|
||||||
private static final long serialVersionUID = 4090093290330473479L;
|
private static final long serialVersionUID = 4090093290330473479L;
|
||||||
|
|
||||||
public DbAdminNotFoundException(String message) {
|
public SnapAdminNotFoundException(String message) {
|
||||||
super(HttpStatus.NOT_FOUND, message);
|
super(HttpStatus.NOT_FOUND, message);
|
||||||
}
|
}
|
||||||
|
|
@ -22,7 +22,7 @@ package tech.ailef.snapadmin.external.exceptions;
|
|||||||
* Thrown when a field of an `@Entity` class has a type that is not
|
* Thrown when a field of an `@Entity` class has a type that is not
|
||||||
* supported.
|
* supported.
|
||||||
*/
|
*/
|
||||||
public class UnsupportedFieldTypeException extends DbAdminException {
|
public class UnsupportedFieldTypeException extends SnapAdminException {
|
||||||
private static final long serialVersionUID = -8891734807568233099L;
|
private static final long serialVersionUID = -8891734807568233099L;
|
||||||
|
|
||||||
public UnsupportedFieldTypeException() {
|
public UnsupportedFieldTypeException() {
|
||||||
|
@ -30,7 +30,7 @@ import tech.ailef.snapadmin.external.dbmapping.DbObjectSchema;
|
|||||||
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
import tech.ailef.snapadmin.external.dbmapping.fields.DbField;
|
||||||
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
import tech.ailef.snapadmin.external.dto.CompareOperator;
|
||||||
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
import tech.ailef.snapadmin.external.dto.QueryFilter;
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collection of utility functions used across the project
|
* Collection of utility functions used across the project
|
||||||
@ -93,7 +93,7 @@ public interface Utils {
|
|||||||
|
|
||||||
if (ops.size() != fields.size() || fields.size() != values.size()
|
if (ops.size() != fields.size() || fields.size() != values.size()
|
||||||
|| ops.size() != values.size()) {
|
|| ops.size() != values.size()) {
|
||||||
throw new DbAdminException("Filtering parameters must have the same size");
|
throw new SnapAdminException("Filtering parameters must have the same size");
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<QueryFilter> filters = new HashSet<>();
|
Set<QueryFilter> filters = new HashSet<>();
|
||||||
|
@ -30,6 +30,6 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
@ConditionalOnProperty(name = "snapadmin.enabled", matchIfMissing = true)
|
@ConditionalOnProperty(name = "snapadmin.enabled", matchIfMissing = true)
|
||||||
@ComponentScan
|
@ComponentScan
|
||||||
@Configuration
|
@Configuration
|
||||||
public class InternalDbAdminConfiguration {
|
public class InternalSnapAdminConfiguration {
|
||||||
|
|
||||||
}
|
}
|
@ -26,7 +26,7 @@ import java.util.Optional;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import tech.ailef.snapadmin.external.exceptions.DbAdminException;
|
import tech.ailef.snapadmin.external.exceptions.SnapAdminException;
|
||||||
import tech.ailef.snapadmin.internal.model.UserSetting;
|
import tech.ailef.snapadmin.internal.model.UserSetting;
|
||||||
import tech.ailef.snapadmin.internal.repository.UserSettingsRepository;
|
import tech.ailef.snapadmin.internal.repository.UserSettingsRepository;
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ public class UserConfiguration {
|
|||||||
String settingDefaultValue = defaultValues().get(settingName);
|
String settingDefaultValue = defaultValues().get(settingName);
|
||||||
|
|
||||||
if (settingDefaultValue == null)
|
if (settingDefaultValue == null)
|
||||||
throw new DbAdminException("Trying to access setting `" + settingName + "` but it has no default value");
|
throw new SnapAdminException("Trying to access setting `" + settingName + "` but it has no default value");
|
||||||
|
|
||||||
return settingDefaultValue;
|
return settingDefaultValue;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
* Boot Database Admin in order to save information.
|
* Boot Database Admin in order to save information.
|
||||||
*
|
*
|
||||||
* Due to the way Spring Boot component scanning works, it is needed to create this package and the
|
* Due to the way Spring Boot component scanning works, it is needed to create this package and the
|
||||||
* respective {@link tech.ailef.snapadmin.internal.InternalDbAdminConfiguration} in order to
|
* respective {@link tech.ailef.snapadmin.internal.InternalSnapAdminConfiguration} in order to
|
||||||
* have the component scanning only pick the correct entities/repositories.
|
* have the component scanning only pick the correct entities/repositories.
|
||||||
*/
|
*/
|
||||||
package tech.ailef.snapadmin.internal;
|
package tech.ailef.snapadmin.internal;
|
||||||
|
@ -23,7 +23,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
|
||||||
@SpringBootTest
|
@SpringBootTest
|
||||||
class SpringBootDbAdminApplicationTests {
|
class SpringBootSNapAdminApplicationTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void contextLoads() {
|
void contextLoads() {
|
Loading…
x
Reference in New Issue
Block a user