From 49480bc0aa9541c3362ed58771bed6a00f773141 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Mon, 13 Nov 2023 21:38:07 +0100 Subject: [PATCH] [DEV] start add hooks --- .classpath | 1 - README.md | 16 ++ pom.xml | 40 ++++ .../kar/archidata/GlobalConfiguration.java | 14 +- src/org/kar/archidata/UpdateJwtPublicKey.java | 13 +- src/org/kar/archidata/UserDB.java | 21 +- .../archidata/annotation/AnnotationTools.java | 12 +- .../annotation/CreationTimestamp.java | 2 +- .../kar/archidata/annotation/DataComment.java | 4 +- .../kar/archidata/annotation/DataDefault.java | 4 +- .../kar/archidata/annotation/DataDeleted.java | 2 +- .../archidata/annotation/DataIfNotExists.java | 2 +- .../kar/archidata/annotation/DataNotRead.java | 2 +- .../archidata/annotation/UpdateTimestamp.java | 2 +- src/org/kar/archidata/api/DataResource.java | 68 +++---- src/org/kar/archidata/api/FrontGeneric.java | 12 +- src/org/kar/archidata/api/MediaStreamer.java | 4 +- .../kar/archidata/backup/BackupEngine.java | 20 +- .../archidata/catcher/ExceptionCatcher.java | 12 +- .../catcher/FailExceptionCatcher.java | 14 +- .../catcher/InputExceptionCatcher.java | 12 +- .../archidata/catcher/RestErrorResponse.java | 14 +- .../catcher/SystemExceptionCatcher.java | 12 +- .../kar/archidata/dataAccess/CountInOut.java | 2 +- .../kar/archidata/dataAccess/DataAccess.java | 104 ++++------ .../archidata/dataAccess/DataAccessAddOn.java | 32 +-- .../kar/archidata/dataAccess/DataFactory.java | 39 ++-- src/org/kar/archidata/dataAccess/Foreign.java | 4 +- .../archidata/dataAccess/QueryOptions.java | 18 +- src/org/kar/archidata/dataAccess/QueryOr.java | 6 +- .../dataAccess/addOn/AddOnDataJson.java | 18 +- .../dataAccess/addOn/AddOnManyToMany.java | 43 ++-- .../dataAccess/addOn/AddOnManyToOne.java | 6 +- .../dataAccess/addOn/AddOnOneToMany.java | 18 +- .../AddOnSQLTableExternalForeinKeyAsList.java | 28 ++- .../dataAccess/addOn/model/LinkTable.java | 4 +- src/org/kar/archidata/db/DBConfig.java | 43 ++-- src/org/kar/archidata/db/DBEntry.java | 22 +- .../archidata/exception/FailException.java | 10 +- .../archidata/exception/InputException.java | 8 +- .../exception/NotFoundException.java | 4 +- .../exception/RESTErrorResponseExeption.java | 15 +- .../archidata/exception/SystemException.java | 8 +- .../exception/UnAuthorizedException.java | 4 +- .../filter/AuthenticationFilter.java | 28 ++- src/org/kar/archidata/filter/CORSFilter.java | 10 +- .../kar/archidata/filter/GenericContext.java | 8 +- .../archidata/filter/MySecurityContext.java | 30 +-- .../kar/archidata/filter/OptionFilter.java | 2 +- .../archidata/migration/MigrationEngine.java | 62 +++--- .../migration/MigrationException.java | 4 +- .../migration/MigrationInterface.java | 30 +-- .../archidata/migration/MigrationSqlStep.java | 26 ++- src/org/kar/archidata/model/Data.java | 2 +- src/org/kar/archidata/model/GetToken.java | 4 +- src/org/kar/archidata/model/Migration.java | 2 +- src/org/kar/archidata/model/Token.java | 16 +- src/org/kar/archidata/model/User.java | 10 +- src/org/kar/archidata/model/UserByToken.java | 26 +-- .../archidata/util/ConfigBaseVariable.java | 8 +- src/org/kar/archidata/util/DataTools.java | 189 ++++++++---------- src/org/kar/archidata/util/JWTWrapper.java | 55 ++--- src/org/kar/archidata/util/PublicKey.java | 6 +- src/org/kar/archidata/util/RESTApi.java | 162 +++++++-------- test/src/test/kar/archidata/TestJson.java | 16 +- .../test/kar/archidata/TestManyToMany.java | 33 ++- .../src/test/kar/archidata/TestManyToOne.java | 8 +- .../src/test/kar/archidata/TestOneToMany.java | 4 +- .../test/kar/archidata/TestSimpleTable.java | 36 ++-- .../archidata/TestSimpleTableSoftDelete.java | 36 ++-- .../src/test/kar/archidata/TestTypeEnum1.java | 12 +- .../src/test/kar/archidata/TestTypeEnum2.java | 20 +- test/src/test/kar/archidata/TestTypes.java | 92 ++++----- .../kar/archidata/model/Enum2ForTest.java | 4 +- .../kar/archidata/model/SerializeAsJson.java | 4 +- .../test/kar/archidata/model/SimpleTable.java | 2 +- .../archidata/model/TypeManyToManyRemote.java | 2 +- .../archidata/model/TypeManyToManyRoot.java | 2 +- .../model/TypeManyToManyRootExpand.java | 2 +- .../archidata/model/TypeManyToOneRemote.java | 4 +- .../archidata/model/TypeManyToOneRoot.java | 4 +- .../model/TypeManyToOneRootExpand.java | 2 +- .../test/kar/archidata/model/TypesEnum1.java | 2 +- tools/configure_precommit.bash | 9 + tools/pre-commit | 27 +++ 85 files changed, 851 insertions(+), 889 deletions(-) create mode 100755 tools/configure_precommit.bash create mode 100755 tools/pre-commit diff --git a/.classpath b/.classpath index 7cc9ec0..c10152e 100644 --- a/.classpath +++ b/.classpath @@ -27,7 +27,6 @@ - diff --git a/README.md b/README.md index d7c94e6..5932d54 100644 --- a/README.md +++ b/README.md @@ -14,12 +14,28 @@ mvn clean compile assembly:single generic interface for all KAR web application + +Somes tools: +============ + +Auto-update dependency: +----------------------- + auto-update to the last version dependency: ```bash mvn versions:use-latest-versions ``` +Format the code +--------------- + +Simply run the cmd-line: + +```bash +mvn formatter:format +``` + Add Gitea in the dependency for the registry: ============================================= diff --git a/pom.xml b/pom.xml index ab71c6b..7459521 100644 --- a/pom.xml +++ b/pom.xml @@ -223,6 +223,46 @@ true + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.1.0 + + CheckStyle.xml + true + true + true + true + + + + net.revelc.code.formatter + formatter-maven-plugin + 2.12.2 + + UTF-8 + LF + Formatter.xml + + src/ + test/src + + + **/*.java + + + module-info.java + + + + + + validate + + + + diff --git a/src/org/kar/archidata/GlobalConfiguration.java b/src/org/kar/archidata/GlobalConfiguration.java index 44024cc..3a52983 100644 --- a/src/org/kar/archidata/GlobalConfiguration.java +++ b/src/org/kar/archidata/GlobalConfiguration.java @@ -6,14 +6,8 @@ import org.kar.archidata.util.ConfigBaseVariable; public class GlobalConfiguration { public static DBConfig dbConfig = null; - static { - dbConfig = new DBConfig(ConfigBaseVariable.getDBType(), - ConfigBaseVariable.getDBHost(), - Integer.parseInt(ConfigBaseVariable.getDBPort()), - ConfigBaseVariable.getDBLogin(), - ConfigBaseVariable.getDBPassword(), - ConfigBaseVariable.getDBName(), - ConfigBaseVariable.getDBKeepConnected()); - } + static { + dbConfig = new DBConfig(ConfigBaseVariable.getDBType(), ConfigBaseVariable.getDBHost(), Integer.parseInt(ConfigBaseVariable.getDBPort()), ConfigBaseVariable.getDBLogin(), + ConfigBaseVariable.getDBPassword(), ConfigBaseVariable.getDBName(), ConfigBaseVariable.getDBKeepConnected()); + } } - \ No newline at end of file diff --git a/src/org/kar/archidata/UpdateJwtPublicKey.java b/src/org/kar/archidata/UpdateJwtPublicKey.java index d77dee3..bd93ee1 100644 --- a/src/org/kar/archidata/UpdateJwtPublicKey.java +++ b/src/org/kar/archidata/UpdateJwtPublicKey.java @@ -5,18 +5,19 @@ import org.kar.archidata.util.JWTWrapper; public class UpdateJwtPublicKey extends Thread { boolean kill = false; - + + @Override public void run() { if (ConfigBaseVariable.getSSOAddress() == null) { System.out.println("SSO INTERFACE is not provided ==> work alone."); // No SO provided, kill the thread. return; } - while (this.kill == false) { + while (!this.kill) { // need to upgrade when server call us... try { JWTWrapper.initLocalTokenRemote(ConfigBaseVariable.getSSOAddress(), "archidata"); - } catch (Exception e1) { + } catch (final Exception e1) { e1.printStackTrace(); System.out.println("Can not retreive the basic tocken"); return; @@ -24,13 +25,13 @@ public class UpdateJwtPublicKey extends Thread { try { // update every 5 minutes the master token Thread.sleep(1000 * 60 * 5, 0); - } catch (InterruptedException e) { + } catch (final InterruptedException e) { e.printStackTrace(); } } } - + public void kill() { this.kill = true; } -} \ No newline at end of file +} diff --git a/src/org/kar/archidata/UserDB.java b/src/org/kar/archidata/UserDB.java index 92c1468..47ab52e 100755 --- a/src/org/kar/archidata/UserDB.java +++ b/src/org/kar/archidata/UserDB.java @@ -11,13 +11,13 @@ import org.kar.archidata.model.User; public class UserDB { public UserDB() {} - - public static User getUsers(long userId) throws Exception { + + public static User getUsers(final long userId) throws Exception { return DataAccess.get(User.class, userId); } - - public static User getUserOrCreate(long userId, String userLogin) throws Exception { - User user = getUsers(userId); + + public static User getUserOrCreate(final long userId, final String userLogin) throws Exception { + final User user = getUsers(userId); if (user != null) { return user; } @@ -25,19 +25,18 @@ public class UserDB { return getUsers(userId); } - private static void createUsersInfoFromOAuth(long userId, String login) throws IOException { - DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); - String query = "INSERT INTO `user` (`id`, `login`, `lastConnection`, `admin`, `blocked`, `removed`) VALUE (?,?,now(3),'0','0','0')"; + private static void createUsersInfoFromOAuth(final long userId, final String login) throws IOException { + final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); + final String query = "INSERT INTO `user` (`id`, `login`, `lastConnection`, `admin`, `blocked`, `removed`) VALUE (?,?,now(3),'0','0','0')"; try { - PreparedStatement ps = entry.connection.prepareStatement(query); + final PreparedStatement ps = entry.connection.prepareStatement(query); ps.setLong(1, userId); ps.setString(2, login); ps.executeUpdate(); - } catch (SQLException throwables) { + } catch (final SQLException throwables) { throwables.printStackTrace(); } finally { entry.close(); } } - } diff --git a/src/org/kar/archidata/annotation/AnnotationTools.java b/src/org/kar/archidata/annotation/AnnotationTools.java index d711a17..f757db3 100644 --- a/src/org/kar/archidata/annotation/AnnotationTools.java +++ b/src/org/kar/archidata/annotation/AnnotationTools.java @@ -29,7 +29,7 @@ public class AnnotationTools { } return AnnotationTools.getTableName(clazz); } - + public static String getTableName(final Class element) throws Exception { final Annotation[] annotation = element.getDeclaredAnnotationsByType(Table.class); if (annotation.length == 0) { @@ -153,11 +153,11 @@ public class AnnotationTools { public static boolean isDeletedField(final Field element) throws Exception { return element.getDeclaredAnnotationsByType(DataDeleted.class).length != 0; } - + public static boolean isCreatedAtField(final Field element) throws Exception { return element.getDeclaredAnnotationsByType(CreationTimestamp.class).length != 0; } - + public static boolean isUpdateAtField(final Field element) throws Exception { return element.getDeclaredAnnotationsByType(UpdateTimestamp.class).length != 0; } @@ -220,15 +220,15 @@ public class AnnotationTools { } return null; } - + public static List getFieldsNames(final Class clazz) throws Exception { return getFieldsNamesFilter(clazz, false); } - + public static List getAllFieldsNames(final Class clazz) throws Exception { return getFieldsNamesFilter(clazz, true); } - + private static List getFieldsNamesFilter(final Class clazz, final boolean full) throws Exception { final List out = new ArrayList<>(); for (final Field field : clazz.getFields()) { diff --git a/src/org/kar/archidata/annotation/CreationTimestamp.java b/src/org/kar/archidata/annotation/CreationTimestamp.java index ac04d4f..d8cda81 100644 --- a/src/org/kar/archidata/annotation/CreationTimestamp.java +++ b/src/org/kar/archidata/annotation/CreationTimestamp.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface CreationTimestamp { - + } diff --git a/src/org/kar/archidata/annotation/DataComment.java b/src/org/kar/archidata/annotation/DataComment.java index 218f914..1df85a6 100644 --- a/src/org/kar/archidata/annotation/DataComment.java +++ b/src/org/kar/archidata/annotation/DataComment.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; @Target({ ElementType.TYPE, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface DataComment { - + String value(); - + } diff --git a/src/org/kar/archidata/annotation/DataDefault.java b/src/org/kar/archidata/annotation/DataDefault.java index 178049d..3073a9e 100644 --- a/src/org/kar/archidata/annotation/DataDefault.java +++ b/src/org/kar/archidata/annotation/DataDefault.java @@ -8,7 +8,7 @@ import java.lang.annotation.Target; @Target({ ElementType.TYPE, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface DataDefault { - + String value(); - + } diff --git a/src/org/kar/archidata/annotation/DataDeleted.java b/src/org/kar/archidata/annotation/DataDeleted.java index 9d12175..bacde04 100644 --- a/src/org/kar/archidata/annotation/DataDeleted.java +++ b/src/org/kar/archidata/annotation/DataDeleted.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface DataDeleted { - + } diff --git a/src/org/kar/archidata/annotation/DataIfNotExists.java b/src/org/kar/archidata/annotation/DataIfNotExists.java index 7cb6ac6..6095b58 100644 --- a/src/org/kar/archidata/annotation/DataIfNotExists.java +++ b/src/org/kar/archidata/annotation/DataIfNotExists.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface DataIfNotExists { - + } diff --git a/src/org/kar/archidata/annotation/DataNotRead.java b/src/org/kar/archidata/annotation/DataNotRead.java index e70dbc7..9b27b81 100644 --- a/src/org/kar/archidata/annotation/DataNotRead.java +++ b/src/org/kar/archidata/annotation/DataNotRead.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface DataNotRead { - + } diff --git a/src/org/kar/archidata/annotation/UpdateTimestamp.java b/src/org/kar/archidata/annotation/UpdateTimestamp.java index ec980a5..92d9b25 100644 --- a/src/org/kar/archidata/annotation/UpdateTimestamp.java +++ b/src/org/kar/archidata/annotation/UpdateTimestamp.java @@ -8,5 +8,5 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface UpdateTimestamp { - + } diff --git a/src/org/kar/archidata/api/DataResource.java b/src/org/kar/archidata/api/DataResource.java index ba6f228..3e124f4 100644 --- a/src/org/kar/archidata/api/DataResource.java +++ b/src/org/kar/archidata/api/DataResource.java @@ -57,14 +57,12 @@ public class DataResource { private static final Logger LOGGER = LoggerFactory.getLogger(MediaType.class); private final static int CHUNK_SIZE = 1024 * 1024; // 1MB chunks private final static int CHUNK_SIZE_IN = 50 * 1024 * 1024; // 1MB chunks - /** - * Upload some datas - */ + /** Upload some datas */ private static long tmpFolderId = 1; private static void createFolder(final String path) throws IOException { if (!Files.exists(java.nio.file.Path.of(path))) { - //Log.print("Create folder: " + path); + // Log.print("Create folder: " + path); Files.createDirectories(java.nio.file.Path.of(path)); } } @@ -114,20 +112,20 @@ public class DataResource { } return null; } - + public static Data createNewData(final long tmpUID, final String originalFileName, final String sha512) throws IOException { // determine mime type: Data injectedData = new Data(); String mimeType = ""; final String extension = originalFileName.substring(originalFileName.lastIndexOf('.') + 1); mimeType = switch (extension.toLowerCase()) { - case "jpg", "jpeg" -> "image/jpeg"; - case "png" -> "image/png"; - case "webp" -> "image/webp"; - case "mka" -> "audio/x-matroska"; - case "mkv" -> "video/x-matroska"; - case "webm" -> "video/webm"; - default -> throw new IOException("Can not find the mime type of data input: '" + extension + "'"); + case "jpg", "jpeg" -> "image/jpeg"; + case "png" -> "image/png"; + case "webp" -> "image/webp"; + case "mka" -> "audio/x-matroska"; + case "mkv" -> "video/x-matroska"; + case "webm" -> "video/webm"; + default -> throw new IOException("Can not find the mime type of data input: '" + extension + "'"); }; injectedData.mimeType = mimeType; injectedData.sha512 = sha512; @@ -176,7 +174,7 @@ public class DataResource { outpuStream = new FileOutputStream(new File(serverLocation)); while ((read = uploadedInputStream.read(bytes)) != -1) { - //logger.info("write {}", read); + // logger.info("write {}", read); md.update(bytes, 0, read); outpuStream.write(bytes, 0, read); } @@ -226,7 +224,7 @@ public class DataResource { LOGGER.info("==================================================="); LOGGER.info("== DATA uploadFile {}", (gc == null ? "null" : gc.userByToken)); LOGGER.info("==================================================="); - //public NodeSmall uploadFile(final FormDataMultiPart form) { + // public NodeSmall uploadFile(final FormDataMultiPart form) { LOGGER.info("Upload file: "); final String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId++; try { @@ -236,7 +234,7 @@ public class DataResource { } saveFile(fileInputStream, filePath); return Response.ok("Data uploaded successfully !!").build(); - //return null; + // return null; } @GET @@ -247,9 +245,9 @@ public class DataResource { public Response retriveDataId(@Context final SecurityContext sc, @QueryParam(HttpHeaders.AUTHORIZATION) final String token, @HeaderParam("Range") final String range, @PathParam("id") final Long id) throws Exception { final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - //logger.info("==================================================="); + // logger.info("==================================================="); LOGGER.info("== DATA retriveDataId ? id={} user={}", id, (gc == null ? "null" : gc.userByToken)); - //logger.info("==================================================="); + // logger.info("==================================================="); final Data value = getSmall(id); if (value == null) { Response.status(404).entity("media NOT FOUND: " + id).type("text/plain").build(); @@ -262,13 +260,13 @@ public class DataResource { @RolesAllowed("USER") @PermitTokenInURI @Produces(MediaType.APPLICATION_OCTET_STREAM) - //@CacheMaxAge(time = 10, unit = TimeUnit.DAYS) + // @CacheMaxAge(time = 10, unit = TimeUnit.DAYS) public Response retriveDataThumbnailId(@Context final SecurityContext sc, @QueryParam(HttpHeaders.AUTHORIZATION) final String token, @HeaderParam("Range") final String range, @PathParam("id") final Long id) throws Exception { - //GenericContext gc = (GenericContext) sc.getUserPrincipal(); - //logger.info("==================================================="); - //logger.info("== DATA retriveDataThumbnailId ? {}", (gc==null?"null":gc.user)); - //logger.info("==================================================="); + // GenericContext gc = (GenericContext) sc.getUserPrincipal(); + // logger.info("==================================================="); + // logger.info("== DATA retriveDataThumbnailId ? {}", (gc==null?"null":gc.user)); + // logger.info("==================================================="); final Data value = getSmall(id); if (value == null) { return Response.status(404).entity("media NOT FOUND: " + id).type("text/plain").build(); @@ -279,7 +277,7 @@ public class DataResource { return Response.status(404).entity("{\"error\":\"media Does not exist: " + id + "\"}").type("application/json").build(); } if (value.mimeType.contentEquals("image/jpeg") || value.mimeType.contentEquals("image/png") - // || value.mimeType.contentEquals("image/webp") + // || value.mimeType.contentEquals("image/webp") ) { // reads input image final BufferedImage inputImage = ImageIO.read(inputFile); @@ -302,7 +300,7 @@ public class DataResource { return Response.status(500).entity("Internal Error: resize fail: " + e.getMessage()).type("text/plain").build(); } final byte[] imageData = baos.toByteArray(); - //Response.ok(new ByteArrayInputStream(imageData)).build(); + // Response.ok(new ByteArrayInputStream(imageData)).build(); final Response.ResponseBuilder out = Response.ok(imageData).header(HttpHeaders.CONTENT_LENGTH, imageData.length); out.type("image/jpeg"); // TODO: move this in a decorator !!! @@ -315,7 +313,7 @@ public class DataResource { return buildStream(filePathName, range, value.mimeType); } - //@Secured + // @Secured @GET @Path("{id}/{name}") @PermitTokenInURI @@ -324,9 +322,9 @@ public class DataResource { public Response retriveDataFull(@Context final SecurityContext sc, @QueryParam(HttpHeaders.AUTHORIZATION) final String token, @HeaderParam("Range") final String range, @PathParam("id") final Long id, @PathParam("name") final String name) throws Exception { final GenericContext gc = (GenericContext) sc.getUserPrincipal(); - //logger.info("==================================================="); + // logger.info("==================================================="); LOGGER.info("== DATA retriveDataFull ? id={} user={}", id, (gc == null ? "null" : gc.userByToken)); - //logger.info("==================================================="); + // logger.info("==================================================="); final Data value = getSmall(id); if (value == null) { Response.status(404).entity("media NOT FOUND: " + id).type("text/plain").build(); @@ -334,16 +332,14 @@ public class DataResource { return buildStream(ConfigBaseVariable.getMediaDataFolder() + File.separator + id + File.separator + "data", range, value.mimeType); } - /** - * Adapted from http://stackoverflow.com/questions/12768812/video-streaming-to-ipad-does-not-work-with-tapestry5/12829541#12829541 + /** Adapted from http://stackoverflow.com/questions/12768812/video-streaming-to-ipad-does-not-work-with-tapestry5/12829541#12829541 * * @param range range header * @return Streaming output - * @throws Exception IOException if an error occurs in streaming. - */ + * @throws Exception IOException if an error occurs in streaming. */ private Response buildStream(final String filename, final String range, final String mimeType) throws Exception { final File file = new File(filename); - //logger.info("request range : {}", range); + // logger.info("request range : {}", range); // range not requested : Firefox does not send range headers if (range == null) { final StreamingOutput output = new StreamingOutput() { @@ -356,7 +352,7 @@ public class DataResource { try { out.write(buf, 0, len); out.flush(); - //logger.info("---- wrote {} bytes file ----", len); + // logger.info("---- wrote {} bytes file ----", len); } catch (final IOException ex) { LOGGER.info("remote close connection"); break; @@ -378,8 +374,8 @@ public class DataResource { final String[] ranges = range.split("=")[1].split("-"); final long from = Long.parseLong(ranges[0]); - //logger.info("request range : {}", ranges.length); - //Chunk media if the range upper bound is unspecified. Chrome, Opera sends "bytes=0-" + // logger.info("request range : {}", ranges.length); + // Chunk media if the range upper bound is unspecified. Chrome, Opera sends "bytes=0-" long to = CHUNK_SIZE + from; if (ranges.length == 1) { to = file.length() - 1; @@ -387,7 +383,7 @@ public class DataResource { to = file.length() - 1; } final String responseRange = String.format("bytes %d-%d/%d", from, to, file.length()); - //logger.info("responseRange: {}", responseRange); + // logger.info("responseRange: {}", responseRange); final RandomAccessFile raf = new RandomAccessFile(file, "r"); raf.seek(from); diff --git a/src/org/kar/archidata/api/FrontGeneric.java b/src/org/kar/archidata/api/FrontGeneric.java index 3e32eb7..e32d3af 100644 --- a/src/org/kar/archidata/api/FrontGeneric.java +++ b/src/org/kar/archidata/api/FrontGeneric.java @@ -28,7 +28,7 @@ public class FrontGeneric { } return ""; } - + private Response retrive(final String fileName) throws Exception { String filePathName = this.baseFrontFolder + File.separator + fileName; final String extention = getExtension(filePathName); @@ -76,7 +76,7 @@ public class FrontGeneric { } final ResponseBuilder response = Response.ok(download); // use this if I want to download the file: - //response.header("Content-Disposition", "attachment; filename=" + fileName); + // response.header("Content-Disposition", "attachment; filename=" + fileName); final CacheControl cc = new CacheControl(); cc.setMaxAge(60); cc.setNoCache(false); @@ -88,8 +88,8 @@ public class FrontGeneric { @GET @PermitAll() - //@Produces(MediaType.APPLICATION_OCTET_STREAM) - //@CacheMaxAge(time = 1, unit = TimeUnit.DAYS) + // @Produces(MediaType.APPLICATION_OCTET_STREAM) + // @CacheMaxAge(time = 1, unit = TimeUnit.DAYS) public Response retrive0() throws Exception { return retrive("index.html"); } @@ -97,8 +97,8 @@ public class FrontGeneric { @GET @Path("{any: .*}") @PermitAll() - //@Produces(MediaType.APPLICATION_OCTET_STREAM) - //@CacheMaxAge(time = 10, unit = TimeUnit.DAYS) + // @Produces(MediaType.APPLICATION_OCTET_STREAM) + // @CacheMaxAge(time = 10, unit = TimeUnit.DAYS) public Response retrive1(@PathParam("any") final List segments) throws Exception { String filename = ""; for (final PathSegment elem : segments) { diff --git a/src/org/kar/archidata/api/MediaStreamer.java b/src/org/kar/archidata/api/MediaStreamer.java index ce67a4c..879fa45 100644 --- a/src/org/kar/archidata/api/MediaStreamer.java +++ b/src/org/kar/archidata/api/MediaStreamer.java @@ -19,14 +19,14 @@ public class MediaStreamer implements StreamingOutput { private final RandomAccessFile raf; public MediaStreamer(final long length, final RandomAccessFile raf) throws IOException { - //logger.info("request stream of {} data", length / 1024); + // logger.info("request stream of {} data", length / 1024); if (length < 0) { throw new IOException("Wrong size of the file to stream: " + length); } this.length = length; this.raf = raf; } - + @Override public void write(final OutputStream outputStream) { try { diff --git a/src/org/kar/archidata/backup/BackupEngine.java b/src/org/kar/archidata/backup/BackupEngine.java index 131ddbb..bc9f49f 100644 --- a/src/org/kar/archidata/backup/BackupEngine.java +++ b/src/org/kar/archidata/backup/BackupEngine.java @@ -4,26 +4,26 @@ import java.util.ArrayList; import java.util.List; public class BackupEngine { - + public enum StoreMode { JSON, SQL } - + private final String pathStore; private final StoreMode mode; - private List> classes = new ArrayList<>(); - - public BackupEngine(String pathToStoreDB, StoreMode mode) { + private final List> classes = new ArrayList<>(); + + public BackupEngine(final String pathToStoreDB, final StoreMode mode) { this.pathStore = pathToStoreDB; this.mode = mode; } - - public void addClass(Class clazz) { - classes.add(clazz); + + public void addClass(final Class clazz) { + this.classes.add(clazz); } - + public void store() { // TODO ... - + } } diff --git a/src/org/kar/archidata/catcher/ExceptionCatcher.java b/src/org/kar/archidata/catcher/ExceptionCatcher.java index b61671d..f1137d3 100644 --- a/src/org/kar/archidata/catcher/ExceptionCatcher.java +++ b/src/org/kar/archidata/catcher/ExceptionCatcher.java @@ -9,18 +9,18 @@ import jakarta.ws.rs.ext.ExceptionMapper; public class ExceptionCatcher implements ExceptionMapper { private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionCatcher.class); - + @Override - public Response toResponse(Exception exception) { + public Response toResponse(final Exception exception) { LOGGER.warn("Catch exception (not managed...):"); - RestErrorResponse ret = build(exception); + final RestErrorResponse ret = build(exception); LOGGER.error("Error UUID={}", ret.uuid); exception.printStackTrace(); return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(ret).type(MediaType.APPLICATION_JSON).build(); } - - private RestErrorResponse build(Exception exception) { + + private RestErrorResponse build(final Exception exception) { return new RestErrorResponse(Response.Status.INTERNAL_SERVER_ERROR, "Catch Unknown Exception", exception.getMessage()); } - + } diff --git a/src/org/kar/archidata/catcher/FailExceptionCatcher.java b/src/org/kar/archidata/catcher/FailExceptionCatcher.java index efa7b9e..b983301 100644 --- a/src/org/kar/archidata/catcher/FailExceptionCatcher.java +++ b/src/org/kar/archidata/catcher/FailExceptionCatcher.java @@ -10,18 +10,18 @@ import jakarta.ws.rs.ext.ExceptionMapper; public class FailExceptionCatcher implements ExceptionMapper { private static final Logger LOGGER = LoggerFactory.getLogger(FailExceptionCatcher.class); - + @Override - public Response toResponse(FailException exception) { - RestErrorResponse ret = build(exception); + public Response toResponse(final FailException exception) { + final RestErrorResponse ret = build(exception); LOGGER.error("Error UUID={}", ret.uuid); // Not display backtrace ==> this may be a normal case ... - //exception.printStackTrace(); + // exception.printStackTrace(); return Response.status(exception.status).entity(ret).type(MediaType.APPLICATION_JSON).build(); } - - private RestErrorResponse build(FailException exception) { + + private RestErrorResponse build(final FailException exception) { return new RestErrorResponse(exception.status, "Request Fail", exception.getMessage()); } - + } diff --git a/src/org/kar/archidata/catcher/InputExceptionCatcher.java b/src/org/kar/archidata/catcher/InputExceptionCatcher.java index 7029176..4fbefe4 100644 --- a/src/org/kar/archidata/catcher/InputExceptionCatcher.java +++ b/src/org/kar/archidata/catcher/InputExceptionCatcher.java @@ -10,17 +10,17 @@ import jakarta.ws.rs.ext.ExceptionMapper; public class InputExceptionCatcher implements ExceptionMapper { private static final Logger LOGGER = LoggerFactory.getLogger(InputExceptionCatcher.class); - + @Override - public Response toResponse(InputException exception) { - RestErrorResponse ret = build(exception); + public Response toResponse(final InputException exception) { + final RestErrorResponse ret = build(exception); LOGGER.error("Error UUID={}", ret.uuid); exception.printStackTrace(); return Response.status(exception.status).entity(ret).type(MediaType.APPLICATION_JSON).build(); } - - private RestErrorResponse build(InputException exception) { + + private RestErrorResponse build(final InputException exception) { return new RestErrorResponse(exception.status, "Error on input='" + exception.missingVariable + "'", exception.getMessage()); } - + } diff --git a/src/org/kar/archidata/catcher/RestErrorResponse.java b/src/org/kar/archidata/catcher/RestErrorResponse.java index 63a2a46..5d424a0 100644 --- a/src/org/kar/archidata/catcher/RestErrorResponse.java +++ b/src/org/kar/archidata/catcher/RestErrorResponse.java @@ -12,27 +12,27 @@ public class RestErrorResponse { public String message; final public int status; final public String statusMessage; - - public RestErrorResponse(Response.Status status, String time, String error, String message) { + + public RestErrorResponse(final Response.Status status, final String time, final String error, final String message) { this.time = time; this.error = error; this.message = message; this.status = status.getStatusCode(); this.statusMessage = status.getReasonPhrase(); } - - public RestErrorResponse(Response.Status status, String error, String message) { + + public RestErrorResponse(final Response.Status status, final String error, final String message) { this.time = Instant.now().toString(); this.error = error; this.message = message; this.status = status.getStatusCode(); this.statusMessage = status.getReasonPhrase(); } - - public RestErrorResponse(Response.Status status) { + + public RestErrorResponse(final Response.Status status) { this.time = Instant.now().toString(); this.status = status.getStatusCode(); this.statusMessage = status.getReasonPhrase(); } - + } diff --git a/src/org/kar/archidata/catcher/SystemExceptionCatcher.java b/src/org/kar/archidata/catcher/SystemExceptionCatcher.java index 1421683..82f1785 100644 --- a/src/org/kar/archidata/catcher/SystemExceptionCatcher.java +++ b/src/org/kar/archidata/catcher/SystemExceptionCatcher.java @@ -10,17 +10,17 @@ import jakarta.ws.rs.ext.ExceptionMapper; public class SystemExceptionCatcher implements ExceptionMapper { private static final Logger LOGGER = LoggerFactory.getLogger(SystemExceptionCatcher.class); - + @Override - public Response toResponse(SystemException exception) { - RestErrorResponse ret = build(exception); + public Response toResponse(final SystemException exception) { + final RestErrorResponse ret = build(exception); LOGGER.error("Error UUID={}", ret.uuid); exception.printStackTrace(); return Response.status(exception.status).entity(ret).type(MediaType.APPLICATION_JSON).build(); } - - private RestErrorResponse build(SystemException exception) { + + private RestErrorResponse build(final SystemException exception) { return new RestErrorResponse(exception.status, "System error", exception.getMessage()); } - + } diff --git a/src/org/kar/archidata/dataAccess/CountInOut.java b/src/org/kar/archidata/dataAccess/CountInOut.java index 37fb8a8..6ddd5e4 100644 --- a/src/org/kar/archidata/dataAccess/CountInOut.java +++ b/src/org/kar/archidata/dataAccess/CountInOut.java @@ -10,7 +10,7 @@ public class CountInOut { public CountInOut(final int i) { this.value = i; } - + public void inc() { this.value++; } diff --git a/src/org/kar/archidata/dataAccess/DataAccess.java b/src/org/kar/archidata/dataAccess/DataAccess.java index 6f48795..3b65368 100644 --- a/src/org/kar/archidata/dataAccess/DataAccess.java +++ b/src/org/kar/archidata/dataAccess/DataAccess.java @@ -84,10 +84,10 @@ public class DataAccess { // TODO : Maybe connect with a temporary not specified connection interface to a db ... final PreparedStatement ps = entry.connection.prepareStatement("show databases"); final ResultSet rs = ps.executeQuery(); - //LOGGER.info("List all tables: equals? '{}'", name); + // LOGGER.info("List all tables: equals? '{}'", name); while (rs.next()) { final String data = rs.getString(1); - //LOGGER.info(" - '{}'", data); + // LOGGER.info(" - '{}'", data); if (name.equals(data)) { return true; } @@ -132,7 +132,7 @@ public class DataAccess { WHERE type = 'table' AND name = ?; """; - // PreparedStatement ps = entry.connection.prepareStatement("show tables"); + // PreparedStatement ps = entry.connection.prepareStatement("show tables"); final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); final PreparedStatement ps = entry.connection.prepareStatement(request); ps.setString(1, name); @@ -144,10 +144,10 @@ public class DataAccess { // TODO : Maybe connect with a temporary not specified connection interface to a db ... final PreparedStatement ps = entry.connection.prepareStatement("show tables"); final ResultSet rs = ps.executeQuery(); - //LOGGER.info("List all tables: equals? '{}'", name); + // LOGGER.info("List all tables: equals? '{}'", name); while (rs.next()) { final String data = rs.getString(1); - //LOGGER.info(" - '{}'", data); + // LOGGER.info(" - '{}'", data); if (name.equals(data)) { return true; } @@ -162,13 +162,11 @@ public class DataAccess { throw new InternalServerErrorException("Can Not manage the DB-access"); } - /** - * extract a list of "-" separated element from a SQL input data. + /** extract a list of "-" separated element from a SQL input data. * @param rs Result Set of the BDD * @param iii Id in the result set - * @return The list of Long value - * @throws SQLException if an error is generated in the sql request. - */ + * @return The list of Long value + * @throws SQLException if an error is generated in the sql request. */ public static List getListOfIds(final ResultSet rs, final int iii, final String separator) throws SQLException { final String trackString = rs.getString(iii); if (rs.wasNull()) { @@ -279,7 +277,7 @@ public class DataAccess { } iii.inc(); } - + // TODO: maybe wrap this if the use of sqlite ==> maybe some problems came with sqlite ... protected static void setValueFromDb(final Class type, final Object data, final CountInOut count, final Field field, final ResultSet rs, final CountInOut countNotNull) throws Exception { if (type == Long.class) { @@ -287,14 +285,14 @@ public class DataAccess { if (rs.wasNull()) { field.set(data, null); } else { - //logger.debug(" ==> {}", tmp); + // logger.debug(" ==> {}", tmp); field.set(data, tmp); countNotNull.inc(); } } else if (type == long.class) { final Long tmp = rs.getLong(count.value); if (rs.wasNull()) { - //field.set(data, null); + // field.set(data, null); } else { field.setLong(data, tmp); countNotNull.inc(); @@ -310,7 +308,7 @@ public class DataAccess { } else if (type == int.class) { final Integer tmp = rs.getInt(count.value); if (rs.wasNull()) { - //field.set(data, null); + // field.set(data, null); } else { field.setInt(data, tmp); countNotNull.inc(); @@ -326,7 +324,7 @@ public class DataAccess { } else if (type == float.class) { final Float tmp = rs.getFloat(count.value); if (rs.wasNull()) { - //field.set(data, null); + // field.set(data, null); } else { field.setFloat(data, tmp); countNotNull.inc(); @@ -342,7 +340,7 @@ public class DataAccess { } else if (type == double.class) { final Double tmp = rs.getDouble(count.value); if (rs.wasNull()) { - //field.set(data, null); + // field.set(data, null); } else { field.setDouble(data, tmp); countNotNull.inc(); @@ -358,7 +356,7 @@ public class DataAccess { } else if (type == boolean.class) { final Boolean tmp = rs.getBoolean(count.value); if (rs.wasNull()) { - //field.set(data, null); + // field.set(data, null); } else { field.setBoolean(data, tmp); countNotNull.inc(); @@ -448,7 +446,7 @@ public class DataAccess { } return null; } - + public static List insertMultiple(final List data, final QueryOptions options) throws Exception { final List out = new ArrayList<>(); for (final T elem : data) { @@ -461,15 +459,15 @@ public class DataAccess { public static T insert(final T data) throws Exception { return insert(data, null); } - + public static T insert(final T data, final QueryOptions options) throws Exception { final Class clazz = data.getClass(); - + DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); // real add in the BDD: try { final String tableName = AnnotationTools.getTableName(clazz, options); - //boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; + // boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; final StringBuilder query = new StringBuilder(); query.append("INSERT INTO `"); query.append(tableName); @@ -594,7 +592,7 @@ public class DataAccess { LOGGER.error("Can not manage the primary filed !!!"); } } - //ps.execute(); + // ps.execute(); } catch (final SQLException ex) { ex.printStackTrace(); } finally { @@ -627,17 +625,15 @@ public class DataAccess { return new QueryCondition(AnnotationTools.getFieldName(idField), "=", idKey); } - /** - * Update an object with the inserted json data + /** Update an object with the inserted json data * * @param Type of the object to insert * @param Master key on the object manage with @Id * @param clazz Class reference of the insertion model * @param id Key to insert data - * @param jsonData Json data (partial) values to update + * @param jsonData Json data (partial) values to update * @return the number of object updated - * @throws Exception - */ + * @throws Exception */ public static int updateWithJson(final Class clazz, final ID_TYPE id, final String jsonData) throws Exception { return updateWhereWithJson(clazz, getTableIdCondition(clazz, id), jsonData); } @@ -661,29 +657,26 @@ public class DataAccess { public static int updateWhere(final T data, final QueryItem condition) throws Exception { return updateWhere(data, condition, null, null); } - - /** - * - * @param + + /** @param * @param data * @param id * @param filterValue * @return the affected rows. - * @throws Exception - */ + * @throws Exception */ public static int update(final T data, final ID_TYPE id, final List filterValue) throws Exception { return updateWhere(data, getTableIdCondition(data.getClass(), id), null, filterValue); } public static int updateWhere(final T data, final QueryItem condition, final QueryOptions options, final List filterValue) throws Exception { final Class clazz = data.getClass(); - //public static NodeSmall createNode(String typeInNode, String name, String description, Long parentId) { + // public static NodeSmall createNode(String typeInNode, String name, String description, Long parentId) { DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); // real add in the BDD: try { final String tableName = AnnotationTools.getTableName(clazz, options); - //boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; + // boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(SQLIfNotExists.class).length != 0; final StringBuilder query = new StringBuilder(); query.append("UPDATE `"); query.append(tableName); @@ -761,7 +754,7 @@ public class DataAccess { } } whereInjectValue(ps, condition, iii); - + return ps.executeUpdate(); } catch (final SQLException ex) { ex.printStackTrace(); @@ -830,7 +823,7 @@ public class DataAccess { } query.append(" WHERE ("); condition.generateQuerry(query, tableName); - + query.append(") "); if (exclude_deleted && deletedFieldName != null) { query.append("AND "); @@ -896,7 +889,7 @@ public class DataAccess { final boolean readAllfields = QueryOptions.readAllFields(options); final String tableName = AnnotationTools.getTableName(clazz, options); boolean firstField = true; - + for (final Field elem : clazz.getFields()) { // static field is only for internal global declaration ==> remove it .. if (java.lang.reflect.Modifier.isStatic(elem.getModifiers())) { @@ -1015,7 +1008,7 @@ public class DataAccess { } return data; } - + // TODO : detect the @Id public static T get(final Class clazz, final ID_TYPE id) throws Exception { return get(clazz, id, null); @@ -1068,7 +1061,7 @@ public class DataAccess { final String tableName = AnnotationTools.getTableName(clazz, options); final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); // find the deleted field - + DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); final StringBuilder query = new StringBuilder(); query.append("DELETE FROM `"); @@ -1101,12 +1094,7 @@ public class DataAccess { public static int deleteSoftWhere(final Class clazz, final QueryItem condition, final QueryOptions options) throws Exception { final String tableName = AnnotationTools.getTableName(clazz, options); final String deletedFieldName = AnnotationTools.getDeletedFieldName(clazz); - /* - String updateFieldName = null; - if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { - updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); - } - */ + /* String updateFieldName = null; if ("sqlite".equalsIgnoreCase(ConfigBaseVariable.getDBType())) { updateFieldName = AnnotationTools.getUpdatedFieldName(clazz); } */ // find the deleted field DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); @@ -1116,15 +1104,8 @@ public class DataAccess { query.append("` SET `"); query.append(deletedFieldName); query.append("`=true "); - /* - * The trigger work well, but the timestamp is store @ seconds... - if (updateFieldName != null) { - // done only in SQLite (the trigger does not work... - query.append(", `"); - query.append(updateFieldName); - query.append("`=DATE()"); - } - */ + /* The trigger work well, but the timestamp is store @ seconds... if (updateFieldName != null) { // done only in SQLite (the trigger does not work... query.append(", `"); + * query.append(updateFieldName); query.append("`=DATE()"); } */ whereAppendQuery(query, tableName, condition, null, deletedFieldName); try { LOGGER.debug("APPLY UPDATE: {}", query.toString()); @@ -1137,11 +1118,11 @@ public class DataAccess { entry = null; } } - + public static int unsetDelete(final Class clazz, final ID_TYPE id) throws Exception { return unsetDeleteWhere(clazz, getTableIdCondition(clazz, id), null); } - + public static int unsetDelete(final Class clazz, final ID_TYPE id, final QueryOptions options) throws Exception { return unsetDeleteWhere(clazz, getTableIdCondition(clazz, id), options); } @@ -1159,12 +1140,7 @@ public class DataAccess { query.append("` SET `"); query.append(deletedFieldName); query.append("`=false "); - /* - * is is needed only for SQLite ??? - query.append("`modify_date`="); - query.append(getDBNow()); - query.append(", "); - */ + /* is is needed only for SQLite ??? query.append("`modify_date`="); query.append(getDBNow()); query.append(", "); */ // need to disable the deleted false because the model must be unselected to be updated. options.put(QueryOptions.SQL_DELETED_DISABLE, true); whereAppendQuery(query, tableName, condition, options, deletedFieldName); @@ -1178,5 +1154,5 @@ public class DataAccess { entry = null; } } - + } \ No newline at end of file diff --git a/src/org/kar/archidata/dataAccess/DataAccessAddOn.java b/src/org/kar/archidata/dataAccess/DataAccessAddOn.java index 1619a5d..903cfa3 100644 --- a/src/org/kar/archidata/dataAccess/DataAccessAddOn.java +++ b/src/org/kar/archidata/dataAccess/DataAccessAddOn.java @@ -9,39 +9,31 @@ import java.util.List; import jakarta.validation.constraints.NotNull; public interface DataAccessAddOn { - /** - * Get the Class of the declaration annotation - * @return The annotation class - */ + /** Get the Class of the declaration annotation + * @return The annotation class */ Class getAnnotationClass(); - /** - * Get the SQL type that is needed to declare for the specific Field Type. + /** Get the SQL type that is needed to declare for the specific Field Type. * @param elem Field to declare. - * @return SQL type to create. - */ + * @return SQL type to create. */ String getSQLFieldType(Field elem) throws Exception; - /** - * Check if the field is manage by the local add-on + /** Check if the field is manage by the local add-on * @param elem Field to inspect. - * @return True of the field is manage by the current Add-on. - */ + * @return True of the field is manage by the current Add-on. */ boolean isCompatibleField(Field elem); - /** - * Insert data in the specific field (the field must be in the current db, otherwiise it does not work at all. + /** Insert data in the specific field (the field must be in the current db, otherwiise it does not work at all. * @param ps DB statement interface. * @param data The date to inject. * @param iii The index of injection * @return the new index of injection in case of multiple value management - * @throws SQLException - */ + * @throws SQLException */ void insertData(PreparedStatement ps, final Field field, Object data, CountInOut iii) throws Exception, SQLException, IllegalArgumentException, IllegalAccessException; // Element can insert in the single request boolean canInsert(final Field field); - + // Element can be retrieve with the specific mode boolean canRetrieve(final Field field); @@ -52,8 +44,7 @@ public interface DataAccessAddOn { void fillFromQuerry(ResultSet rs, Field field, Object data, CountInOut count, QueryOptions options, final List lazyCall) throws Exception, SQLException, IllegalArgumentException, IllegalAccessException; - /** - * Create associated table of the specific element. + /** Create associated table of the specific element. * @param tableName * @param elem * @param mainTableBuilder @@ -61,8 +52,7 @@ public interface DataAccessAddOn { * @param createIfNotExist * @param createDrop * @param fieldId - * @throws Exception - */ + * @throws Exception */ void createTables(String tableName, Field field, StringBuilder mainTableBuilder, List preActionList, List postActionList, boolean createIfNotExist, boolean createDrop, int fieldId) throws Exception; diff --git a/src/org/kar/archidata/dataAccess/DataFactory.java b/src/org/kar/archidata/dataAccess/DataFactory.java index 0c52eaf..3339b04 100644 --- a/src/org/kar/archidata/dataAccess/DataFactory.java +++ b/src/org/kar/archidata/dataAccess/DataFactory.java @@ -126,21 +126,21 @@ public class DataFactory { } throw new DataAccessException("Imcompatible type of element in object for: " + type.getCanonicalName()); } - + public static void createTablesSpecificType(final String tableName, final Field elem, final StringBuilder mainTableBuilder, final List preOtherTables, final List postOtherTables, final boolean createIfNotExist, final boolean createDrop, final int fieldId, final Class classModel) throws Exception { final String name = AnnotationTools.getFieldName(elem); final Integer limitSize = AnnotationTools.getLimitSize(elem); final boolean notNull = AnnotationTools.getNotNull(elem); - + final boolean primaryKey = AnnotationTools.isPrimaryKey(elem); final GenerationType strategy = AnnotationTools.getStrategy(elem); - + final boolean createTime = elem.getDeclaredAnnotationsByType(CreationTimestamp.class).length != 0; final boolean updateTime = elem.getDeclaredAnnotationsByType(UpdateTimestamp.class).length != 0; final String comment = AnnotationTools.getComment(elem); final String defaultValue = AnnotationTools.getDefault(elem); - + if (fieldId == 0) { mainTableBuilder.append("\n\t\t`"); } else { @@ -183,12 +183,7 @@ public class DataFactory { mainTableBuilder.append("(3)"); } else { // TODO: add trigger: - /* - CREATE TRIGGER your_table_trig AFTER UPDATE ON your_table - BEGIN - update your_table SET updated_on = datetime('now') WHERE user_id = NEW.user_id; - END; - */ + /* CREATE TRIGGER your_table_trig AFTER UPDATE ON your_table BEGIN update your_table SET updated_on = datetime('now') WHERE user_id = NEW.user_id; END; */ final StringBuilder triggerBuilder = new StringBuilder(); triggerBuilder.append("CREATE TRIGGER "); triggerBuilder.append(tableName); @@ -200,10 +195,10 @@ public class DataFactory { triggerBuilder.append(name); triggerBuilder.append(" = datetime('now') WHERE id = NEW.id; \n"); triggerBuilder.append("END;"); - + postOtherTables.add(triggerBuilder.toString()); } - + mainTableBuilder.append(" "); } } else { @@ -238,11 +233,11 @@ public class DataFactory { mainTableBuilder.append("DEFAULT "); mainTableBuilder.append(defaultValue); mainTableBuilder.append(" "); - + } if (primaryKey && "sqlite".equals(ConfigBaseVariable.getDBType())) { mainTableBuilder.append("PRIMARY KEY "); - + } if (strategy == GenerationType.IDENTITY) { if (!"sqlite".equals(ConfigBaseVariable.getDBType())) { @@ -253,14 +248,14 @@ public class DataFactory { } else if (strategy != null) { throw new DataAccessException("Can not generate a stategy different of IDENTITY"); } - + if (comment != null && !"sqlite".equals(ConfigBaseVariable.getDBType())) { mainTableBuilder.append("COMMENT '"); mainTableBuilder.append(comment.replace('\'', '\'')); mainTableBuilder.append("' "); } } - + private static boolean isFieldFromSuperClass(final Class model, final String filedName) { final Class superClass = model.getSuperclass(); if (superClass == null) { @@ -280,14 +275,14 @@ public class DataFactory { } return false; } - + public static List createTable(final Class clazz) throws Exception { return createTable(clazz, null); } - + public static List createTable(final Class clazz, final QueryOptions options) throws Exception { final String tableName = AnnotationTools.getTableName(clazz, options); - + boolean createDrop = false; if (options != null) { final Object data = options.get(QueryOptions.CREATE_DROP_TABLE); @@ -297,7 +292,7 @@ public class DataFactory { LOGGER.error("'{}' ==> has not a Boolean value: {}", QueryOptions.CREATE_DROP_TABLE, data); } } - + final boolean createIfNotExist = clazz.getDeclaredAnnotationsByType(DataIfNotExists.class).length != 0; final List preActionList = new ArrayList<>(); final List postActionList = new ArrayList<>(); @@ -317,7 +312,7 @@ public class DataFactory { int fieldId = 0; LOGGER.debug("===> TABLE `{}`", tableName); final List primaryKeys = new ArrayList<>(); - + for (final Field elem : clazz.getFields()) { // DEtect the primary key (support only one primary key right now... if (AnnotationTools.isPrimaryKey(elem)) { @@ -398,5 +393,5 @@ public class DataFactory { preActionList.addAll(postActionList); return preActionList; } - + } \ No newline at end of file diff --git a/src/org/kar/archidata/dataAccess/Foreign.java b/src/org/kar/archidata/dataAccess/Foreign.java index 4d3cfb2..ed99cf3 100644 --- a/src/org/kar/archidata/dataAccess/Foreign.java +++ b/src/org/kar/archidata/dataAccess/Foreign.java @@ -5,12 +5,12 @@ package org.kar.archidata.dataAccess; public class Foreign { public final Long id; public final T data; - + public Foreign(final Long id) { this.id = id; this.data = null; } - + public Foreign(final T data) { this.id = null; this.data = data; diff --git a/src/org/kar/archidata/dataAccess/QueryOptions.java b/src/org/kar/archidata/dataAccess/QueryOptions.java index a871f06..6b51569 100644 --- a/src/org/kar/archidata/dataAccess/QueryOptions.java +++ b/src/org/kar/archidata/dataAccess/QueryOptions.java @@ -12,32 +12,32 @@ public class QueryOptions { public static final String SQL_DELETED_DISABLE = "SQLDeleted_disable"; public static final String OVERRIDE_TABLE_NAME = "SQL_OVERRIDE_TABLE_NAME"; public static final String CREATE_DROP_TABLE = "CREATE_DROP_TABLE"; - + private final Map options = new HashMap<>(); - + public QueryOptions() { - + } - + public QueryOptions(final String key, final Object value) { this.options.put(key, value); } - + public QueryOptions(final String key, final Object value, final String key2, final Object value2) { this.options.put(key, value); this.options.put(key2, value2); } - + public QueryOptions(final String key, final Object value, final String key2, final Object value2, final String key3, final Object value3) { this.options.put(key, value); this.options.put(key2, value2); this.options.put(key3, value3); } - + public void put(final String key, final Object value) { this.options.put(key, value); } - + public Object get(final String value) { return this.options.get(value); } @@ -53,5 +53,5 @@ public class QueryOptions { } return false; } - + } diff --git a/src/org/kar/archidata/dataAccess/QueryOr.java b/src/org/kar/archidata/dataAccess/QueryOr.java index 43c827f..334fbda 100644 --- a/src/org/kar/archidata/dataAccess/QueryOr.java +++ b/src/org/kar/archidata/dataAccess/QueryOr.java @@ -5,11 +5,11 @@ import java.util.List; public class QueryOr implements QueryItem { protected final List childs; - + public QueryOr(final List childs) { this.childs = childs; } - + @Override public void generateQuerry(final StringBuilder querry, final String tableName) { if (this.childs.size() >= 1) { @@ -28,7 +28,7 @@ public class QueryOr implements QueryItem { querry.append(")"); } } - + @Override public void injectQuerry(final PreparedStatement ps, final CountInOut iii) throws Exception { for (final QueryItem elem : this.childs) { diff --git a/src/org/kar/archidata/dataAccess/addOn/AddOnDataJson.java b/src/org/kar/archidata/dataAccess/addOn/AddOnDataJson.java index 5c44a90..5be3d68 100644 --- a/src/org/kar/archidata/dataAccess/addOn/AddOnDataJson.java +++ b/src/org/kar/archidata/dataAccess/addOn/AddOnDataJson.java @@ -23,24 +23,24 @@ import jakarta.validation.constraints.NotNull; public class AddOnDataJson implements DataAccessAddOn { static final Logger LOGGER = LoggerFactory.getLogger(AddOnDataJson.class); - + @Override public Class getAnnotationClass() { return DataJson.class; } - + @Override public String getSQLFieldType(final Field elem) throws Exception { final String fieldName = AnnotationTools.getFieldName(elem); return DataFactory.convertTypeInSQL(String.class, fieldName); } - + @Override public boolean isCompatibleField(final Field elem) { final DataJson decorators = elem.getDeclaredAnnotation(DataJson.class); return decorators != null; } - + @Override public void insertData(final PreparedStatement ps, final Field field, final Object rootObject, final CountInOut iii) throws Exception { final Object data = field.get(rootObject); @@ -52,17 +52,17 @@ public class AddOnDataJson implements DataAccessAddOn { ps.setString(iii.value, dataString); iii.inc(); } - + @Override public boolean canInsert(final Field field) { return true; } - + @Override public boolean canRetrieve(final Field field) { return true; } - + @Override public void generateQuerry(@NotNull final String tableName, @NotNull final Field field, @NotNull final StringBuilder querrySelect, @NotNull final StringBuilder querry, @NotNull final String name, @NotNull final CountInOut elemCount, final QueryOptions options) throws Exception { @@ -73,7 +73,7 @@ public class AddOnDataJson implements DataAccessAddOn { elemCount.inc(); return; } - + @Override public void fillFromQuerry(final ResultSet rs, final Field field, final Object data, final CountInOut count, final QueryOptions options, final List lazyCall) throws Exception { final String jsonData = rs.getString(count.value); @@ -84,7 +84,7 @@ public class AddOnDataJson implements DataAccessAddOn { field.set(data, dataParsed); } } - + @Override public void createTables(final String tableName, final Field field, final StringBuilder mainTableBuilder, final List preActionList, final List postActionList, final boolean createIfNotExist, final boolean createDrop, final int fieldId) throws Exception { diff --git a/src/org/kar/archidata/dataAccess/addOn/AddOnManyToMany.java b/src/org/kar/archidata/dataAccess/addOn/AddOnManyToMany.java index 922d1e5..8277c71 100644 --- a/src/org/kar/archidata/dataAccess/addOn/AddOnManyToMany.java +++ b/src/org/kar/archidata/dataAccess/addOn/AddOnManyToMany.java @@ -32,43 +32,43 @@ import jakarta.validation.constraints.NotNull; public class AddOnManyToMany implements DataAccessAddOn { static final Logger LOGGER = LoggerFactory.getLogger(AddOnManyToMany.class); static final String SEPARATOR = "-"; - + @Override public Class getAnnotationClass() { return ManyToMany.class; } - + @Override public String getSQLFieldType(final Field elem) { return null; } - + @Override public boolean isCompatibleField(final Field elem) { final ManyToMany decorators = elem.getDeclaredAnnotation(ManyToMany.class); return decorators != null; } - + @Override public void insertData(final PreparedStatement ps, final Field field, final Object rootObject, final CountInOut iii) throws SQLException, IllegalArgumentException, IllegalAccessException { - + } - + @Override public boolean canInsert(final Field field) { return false; } - + @Override public boolean canRetrieve(final Field field) { return true; } - + public static String generateLinkTableNameField(final String tableName, final Field field) throws Exception { final String name = AnnotationTools.getFieldName(field); return generateLinkTableName(tableName, name); } - + public static String generateLinkTableName(final String tableName, final String name) { String localName = name; if (name.endsWith("s")) { @@ -76,7 +76,7 @@ public class AddOnManyToMany implements DataAccessAddOn { } return tableName + "_link_" + localName; } - + public void generateConcatQuerry(@NotNull final String tableName, @NotNull final Field field, @NotNull final StringBuilder querrySelect, @NotNull final StringBuilder querry, @NotNull final String name, @NotNull final CountInOut elemCount, final QueryOptions options) { @@ -112,16 +112,11 @@ public class AddOnManyToMany implements DataAccessAddOn { querrySelect.append(") AS "); querrySelect.append(name); querrySelect.append(" "); - /* - " (SELECT GROUP_CONCAT(tmp.data_id SEPARATOR '-')" + - " FROM cover_link_node tmp" + - " WHERE tmp.deleted = false" + - " AND node.id = tmp.node_id" + - " GROUP BY tmp.node_id) AS covers" + - */ + /* " (SELECT GROUP_CONCAT(tmp.data_id SEPARATOR '-')" + " FROM cover_link_node tmp" + " WHERE tmp.deleted = false" + + * " AND node.id = tmp.node_id" + " GROUP BY tmp.node_id) AS covers" + */ elemCount.inc(); } - + @Override public void generateQuerry(@NotNull final String tableName, @NotNull final Field field, @NotNull final StringBuilder querrySelect, @NotNull final StringBuilder querry, @NotNull final String name, @NotNull final CountInOut elemCount, final QueryOptions options) throws Exception { @@ -144,7 +139,7 @@ public class AddOnManyToMany implements DataAccessAddOn { } } } - + @Override public void fillFromQuerry(final ResultSet rs, final Field field, final Object data, final CountInOut count, final QueryOptions options, final List lazyCall) throws Exception { if (field.getType() != List.class) { @@ -165,7 +160,7 @@ public class AddOnManyToMany implements DataAccessAddOn { throw new DataAccessException("EAGER is not supported for list of element..."); } else { final List idList = DataAccess.getListOfIds(rs, count.value, SEPARATOR); - //field.set(data, idList); + // field.set(data, idList); count.inc(); if (idList != null && idList.size() > 0) { final String idField = AnnotationTools.getFieldName(AnnotationTools.getIdField(objectClass)); @@ -187,16 +182,16 @@ public class AddOnManyToMany implements DataAccessAddOn { } } } - + public static void addLink(final Class clazz, final long localKey, final String column, final long remoteKey) throws Exception { final String tableName = AnnotationTools.getTableName(clazz); final String linkTableName = generateLinkTableName(tableName, column); final LinkTable insertElement = new LinkTable(localKey, remoteKey); final QueryOptions options = new QueryOptions(QueryOptions.OVERRIDE_TABLE_NAME, linkTableName); DataAccess.insert(insertElement, options); - + } - + public static int removeLink(final Class clazz, final long localKey, final String column, final long remoteKey) throws Exception { final String tableName = AnnotationTools.getTableName(clazz); final String linkTableName = generateLinkTableName(tableName, column); @@ -204,7 +199,7 @@ public class AddOnManyToMany implements DataAccessAddOn { final QueryAnd condition = new QueryAnd(new QueryCondition("object1Id", "=", localKey), new QueryCondition("object2Id", "=", remoteKey)); return DataAccess.deleteWhere(LinkTable.class, condition, options); } - + @Override public void createTables(final String tableName, final Field field, final StringBuilder mainTableBuilder, final List preActionList, final List postActionList, final boolean createIfNotExist, final boolean createDrop, final int fieldId) throws Exception { diff --git a/src/org/kar/archidata/dataAccess/addOn/AddOnManyToOne.java b/src/org/kar/archidata/dataAccess/addOn/AddOnManyToOne.java index d5c3550..28c77ed 100644 --- a/src/org/kar/archidata/dataAccess/addOn/AddOnManyToOne.java +++ b/src/org/kar/archidata/dataAccess/addOn/AddOnManyToOne.java @@ -132,11 +132,7 @@ public class AddOnManyToOne implements DataAccessAddOn { } } - /* - SELECT k.id, r.id - FROM `right` k - LEFT OUTER JOIN `rightDescription` r ON k.rightDescriptionId=r.id - */ + /* SELECT k.id, r.id FROM `right` k LEFT OUTER JOIN `rightDescription` r ON k.rightDescriptionId=r.id */ } @Override diff --git a/src/org/kar/archidata/dataAccess/addOn/AddOnOneToMany.java b/src/org/kar/archidata/dataAccess/addOn/AddOnOneToMany.java index 892aee5..77d70ac 100644 --- a/src/org/kar/archidata/dataAccess/addOn/AddOnOneToMany.java +++ b/src/org/kar/archidata/dataAccess/addOn/AddOnOneToMany.java @@ -24,23 +24,19 @@ import jakarta.validation.constraints.NotNull; public class AddOnOneToMany implements DataAccessAddOn { static final Logger LOGGER = LoggerFactory.getLogger(AddOnManyToMany.class); - /** - * Convert the list if external id in a string '-' separated + /** Convert the list if external id in a string '-' separated * @param ids List of value (null are removed) - * @return '-' string separated - */ + * @return '-' string separated */ protected static String getStringOfIds(final List ids) { final List tmp = new ArrayList<>(ids); return tmp.stream().map(String::valueOf).collect(Collectors.joining("-")); } - /** - * extract a list of "-" separated element from a SQL input data. + /** extract a list of "-" separated element from a SQL input data. * @param rs Result Set of the BDD * @param iii Id in the result set - * @return The list of Long value - * @throws SQLException if an error is generated in the sql request. - */ + * @return The list of Long value + * @throws SQLException if an error is generated in the sql request. */ protected static List getListOfIds(final ResultSet rs, final int iii) throws SQLException { final String trackString = rs.getString(iii); if (rs.wasNull()) { @@ -95,7 +91,7 @@ public class AddOnOneToMany implements DataAccessAddOn { public boolean canInsert(final Field field) { return false; } - + @Override public boolean canRetrieve(final Field field) { return false; @@ -117,7 +113,7 @@ public class AddOnOneToMany implements DataAccessAddOn { final Long foreignKey = rs.getLong(count.value); count.inc(); if (!rs.wasNull()) { - + field.set(data, foreignKey); } } diff --git a/src/org/kar/archidata/dataAccess/addOn/AddOnSQLTableExternalForeinKeyAsList.java b/src/org/kar/archidata/dataAccess/addOn/AddOnSQLTableExternalForeinKeyAsList.java index 86d9039..cfaef9a 100644 --- a/src/org/kar/archidata/dataAccess/addOn/AddOnSQLTableExternalForeinKeyAsList.java +++ b/src/org/kar/archidata/dataAccess/addOn/AddOnSQLTableExternalForeinKeyAsList.java @@ -25,22 +25,20 @@ import jakarta.validation.constraints.NotNull; public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { static final Logger LOGGER = LoggerFactory.getLogger(AddOnManyToMany.class); static final String SEPARATOR = "-"; - - /** - * Convert the list if external id in a string '-' separated + + /** Convert the list if external id in a string '-' separated * @param ids List of value (null are removed) - * @return '-' string separated - */ + * @return '-' string separated */ protected static String getStringOfIds(final List ids) { final List tmp = new ArrayList<>(ids); return tmp.stream().map(String::valueOf).collect(Collectors.joining(SEPARATOR)); } - + @Override public Class getAnnotationClass() { return SQLTableExternalForeinKeyAsList.class; } - + @Override public String getSQLFieldType(final Field field) throws Exception { final String fieldName = AnnotationTools.getFieldName(field); @@ -52,13 +50,13 @@ public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { } return null; } - + @Override public boolean isCompatibleField(final Field field) { final SQLTableExternalForeinKeyAsList decorators = field.getDeclaredAnnotation(SQLTableExternalForeinKeyAsList.class); return decorators != null; } - + @Override public void insertData(final PreparedStatement ps, final Field field, final Object rootObject, final CountInOut iii) throws SQLException, IllegalArgumentException, IllegalAccessException { final Object data = field.get(rootObject); @@ -71,17 +69,17 @@ public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { ps.setString(iii.value, dataTmp); } } - + @Override public boolean canInsert(final Field field) { return false; } - + @Override public boolean canRetrieve(final Field field) { return false; } - + @Override public void generateQuerry(@NotNull final String tableName, @NotNull final Field field, @NotNull final StringBuilder querrySelect, @NotNull final StringBuilder querry, @NotNull final String name, @NotNull final CountInOut elemCount, final QueryOptions options) { @@ -91,7 +89,7 @@ public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { querrySelect.append("."); querrySelect.append(name); } - + @Override public void fillFromQuerry(final ResultSet rs, final Field field, final Object data, final CountInOut count, final QueryOptions options, final List lazyCall) throws SQLException, IllegalArgumentException, IllegalAccessException { @@ -99,12 +97,12 @@ public class AddOnSQLTableExternalForeinKeyAsList implements DataAccessAddOn { field.set(data, idList); count.inc(); } - + @Override public void createTables(final String tableName, final Field field, final StringBuilder mainTableBuilder, final List preActionList, final List postActionList, final boolean createIfNotExist, final boolean createDrop, final int fieldId) throws Exception { // TODO Auto-generated method stub - + DataFactory.createTablesSpecificType(tableName, field, mainTableBuilder, preActionList, postActionList, createIfNotExist, createDrop, fieldId, String.class); } } diff --git a/src/org/kar/archidata/dataAccess/addOn/model/LinkTable.java b/src/org/kar/archidata/dataAccess/addOn/model/LinkTable.java index 828fe60..5257cd2 100644 --- a/src/org/kar/archidata/dataAccess/addOn/model/LinkTable.java +++ b/src/org/kar/archidata/dataAccess/addOn/model/LinkTable.java @@ -9,12 +9,12 @@ public class LinkTable extends GenericDataSoftDelete { public LinkTable() { // nothing to do... } - + public LinkTable(final long object1Id, final long object2Id) { this.object1Id = object1Id; this.object2Id = object2Id; } - + @DataComment("Object reference 1") @Column(nullable = false) public Long object1Id; diff --git a/src/org/kar/archidata/db/DBConfig.java b/src/org/kar/archidata/db/DBConfig.java index a43167e..fa8ad52 100644 --- a/src/org/kar/archidata/db/DBConfig.java +++ b/src/org/kar/archidata/db/DBConfig.java @@ -13,8 +13,8 @@ public class DBConfig { private final String password; private final String dbName; private final boolean keepConnected; - - public DBConfig(String type, String hostname, Integer port, String login, String password, String dbName, boolean keepConnected) { + + public DBConfig(final String type, final String hostname, final Integer port, final String login, final String password, final String dbName, final boolean keepConnected) { if (type == null) { this.type = "mysql"; } else { @@ -35,43 +35,44 @@ public class DBConfig { this.dbName = dbName; this.keepConnected = keepConnected; } - + @Override public String toString() { - return "DBConfig{type='" + type + '\'' + ", hostname='" + hostname + '\'' + ", port=" + port + ", login='" + login + '\'' + ", password='" + password + '\'' + ", dbName='" + dbName + "' }"; + return "DBConfig{type='" + this.type + '\'' + ", hostname='" + this.hostname + '\'' + ", port=" + this.port + ", login='" + this.login + '\'' + ", password='" + this.password + '\'' + + ", dbName='" + this.dbName + "' }"; } - + public String getHostname() { - return hostname; + return this.hostname; } - + public int getPort() { - return port; + return this.port; } - + public String getLogin() { - return login; + return this.login; } - + public String getPassword() { - return password; + return this.password; } - + public String getDbName() { - return dbName; + return this.dbName; } - + public boolean getKeepConnected() { - return keepConnected; + return this.keepConnected; } - + public String getUrl() { return getUrl(false); } - - public String getUrl(boolean isRoot) { - if (type.equals("sqlite")) { - if (isRoot == true) { + + public String getUrl(final boolean isRoot) { + if (this.type.equals("sqlite")) { + if (isRoot) { LOGGER.error("Can not manage root connection on SQLite..."); } if (this.hostname.equals("memory")) { diff --git a/src/org/kar/archidata/db/DBEntry.java b/src/org/kar/archidata/db/DBEntry.java index 878bfb2..af7fe00 100644 --- a/src/org/kar/archidata/db/DBEntry.java +++ b/src/org/kar/archidata/db/DBEntry.java @@ -16,7 +16,7 @@ public class DBEntry implements Closeable { public DBConfig config; public Connection connection; private static List stored = new ArrayList<>(); - + private DBEntry(final DBConfig config, final boolean root) throws IOException { this.config = config; if (root) { @@ -25,11 +25,11 @@ public class DBEntry implements Closeable { connect(); } } - + public static DBEntry createInterface(final DBConfig config) throws IOException { return createInterface(config, false); } - + public static DBEntry createInterface(final DBConfig config, final boolean root) throws IOException { if (config.getKeepConnected()) { for (final DBEntry elem : stored) { @@ -47,25 +47,25 @@ public class DBEntry implements Closeable { return new DBEntry(config, root); } } - + public void connectRoot() throws IOException { try { this.connection = DriverManager.getConnection(this.config.getUrl(true), this.config.getLogin(), this.config.getPassword()); } catch (final SQLException ex) { throw new IOException("Connection db fail: " + ex.getMessage()); } - + } - + public void connect() throws IOException { try { this.connection = DriverManager.getConnection(this.config.getUrl(), this.config.getLogin(), this.config.getPassword()); } catch (final SQLException ex) { throw new IOException("Connection db fail: " + ex.getMessage()); } - + } - + @Override public void close() throws IOException { if (this.config.getKeepConnected()) { @@ -73,16 +73,16 @@ public class DBEntry implements Closeable { } closeForce(); } - + public void closeForce() throws IOException { try { - //connection.commit(); + // connection.commit(); this.connection.close(); } catch (final SQLException ex) { throw new IOException("Dis-connection db fail: " + ex.getMessage()); } } - + public static void closeAllForceMode() throws IOException { for (final DBEntry entry : stored) { entry.closeForce(); diff --git a/src/org/kar/archidata/exception/FailException.java b/src/org/kar/archidata/exception/FailException.java index 7b58416..deaf86a 100644 --- a/src/org/kar/archidata/exception/FailException.java +++ b/src/org/kar/archidata/exception/FailException.java @@ -5,15 +5,15 @@ import jakarta.ws.rs.core.Response; public class FailException extends Exception { private static final long serialVersionUID = 1L; public final Response.Status status; - - public FailException(Response.Status status, String message) { + + public FailException(final Response.Status status, final String message) { super(message); this.status = status; } - - public FailException(String message) { + + public FailException(final String message) { super(message); this.status = Response.Status.BAD_REQUEST; - + } } diff --git a/src/org/kar/archidata/exception/InputException.java b/src/org/kar/archidata/exception/InputException.java index 1a3a610..94768b5 100644 --- a/src/org/kar/archidata/exception/InputException.java +++ b/src/org/kar/archidata/exception/InputException.java @@ -6,14 +6,14 @@ public class InputException extends Exception { private static final long serialVersionUID = 1L; public final String missingVariable; public final Response.Status status; - - public InputException(Response.Status status, String variable, String message) { + + public InputException(final Response.Status status, final String variable, final String message) { super(message); this.missingVariable = variable; this.status = status; } - - public InputException(String variable, String message) { + + public InputException(final String variable, final String message) { super(message); this.missingVariable = variable; this.status = Response.Status.NOT_ACCEPTABLE; diff --git a/src/org/kar/archidata/exception/NotFoundException.java b/src/org/kar/archidata/exception/NotFoundException.java index d2e5fdb..c2fb400 100644 --- a/src/org/kar/archidata/exception/NotFoundException.java +++ b/src/org/kar/archidata/exception/NotFoundException.java @@ -4,8 +4,8 @@ import jakarta.ws.rs.core.Response; public class NotFoundException extends FailException { private static final long serialVersionUID = 1L; - - public NotFoundException(String message) { + + public NotFoundException(final String message) { super(Response.Status.NOT_FOUND, message); } } diff --git a/src/org/kar/archidata/exception/RESTErrorResponseExeption.java b/src/org/kar/archidata/exception/RESTErrorResponseExeption.java index fb52729..03b0717 100644 --- a/src/org/kar/archidata/exception/RESTErrorResponseExeption.java +++ b/src/org/kar/archidata/exception/RESTErrorResponseExeption.java @@ -9,9 +9,8 @@ public class RESTErrorResponseExeption extends Exception { public String message; public int status; public String statusMessage; - + public RESTErrorResponseExeption() { - super(); this.uuid = null; this.time = null; this.error = null; @@ -19,9 +18,8 @@ public class RESTErrorResponseExeption extends Exception { this.status = 0; this.statusMessage = null; } - - public RESTErrorResponseExeption(UUID uuid, String time, String error, String message, int status, String statusMessage) { - super(); + + public RESTErrorResponseExeption(final UUID uuid, final String time, final String error, final String message, final int status, final String statusMessage) { this.uuid = uuid; this.time = time; this.error = error; @@ -29,10 +27,11 @@ public class RESTErrorResponseExeption extends Exception { this.status = status; this.statusMessage = statusMessage; } - + @Override public String toString() { - return "RESTErrorResponseExeption [uuid=" + uuid + ", time=" + time + ", error=" + error + ", message=" + message + ", status=" + status + ", statusMessage=" + statusMessage + "]"; + return "RESTErrorResponseExeption [uuid=" + this.uuid + ", time=" + this.time + ", error=" + this.error + ", message=" + this.message + ", status=" + this.status + ", statusMessage=" + + this.statusMessage + "]"; } - + } diff --git a/src/org/kar/archidata/exception/SystemException.java b/src/org/kar/archidata/exception/SystemException.java index 70e91bb..22d49e9 100644 --- a/src/org/kar/archidata/exception/SystemException.java +++ b/src/org/kar/archidata/exception/SystemException.java @@ -5,13 +5,13 @@ import jakarta.ws.rs.core.Response; public class SystemException extends Exception { private static final long serialVersionUID = 1L; public final Response.Status status; - - public SystemException(Response.Status status, String message) { + + public SystemException(final Response.Status status, final String message) { super(message); this.status = status; } - - public SystemException(String message) { + + public SystemException(final String message) { super(message); this.status = Response.Status.INTERNAL_SERVER_ERROR; } diff --git a/src/org/kar/archidata/exception/UnAuthorizedException.java b/src/org/kar/archidata/exception/UnAuthorizedException.java index 54085b9..afcb4c8 100644 --- a/src/org/kar/archidata/exception/UnAuthorizedException.java +++ b/src/org/kar/archidata/exception/UnAuthorizedException.java @@ -4,8 +4,8 @@ import jakarta.ws.rs.core.Response; public class UnAuthorizedException extends FailException { private static final long serialVersionUID = 1L; - - public UnAuthorizedException(String message) { + + public UnAuthorizedException(final String message) { super(Response.Status.UNAUTHORIZED, message); } } diff --git a/src/org/kar/archidata/filter/AuthenticationFilter.java b/src/org/kar/archidata/filter/AuthenticationFilter.java index 4f782f1..29227b2 100644 --- a/src/org/kar/archidata/filter/AuthenticationFilter.java +++ b/src/org/kar/archidata/filter/AuthenticationFilter.java @@ -49,15 +49,11 @@ public class AuthenticationFilter implements ContainerRequestFilter { public AuthenticationFilter(final String applicationName) { this.applicationName = applicationName; } - + @Override public void filter(final ContainerRequestContext requestContext) throws IOException { - /* - logger.debug("-----------------------------------------------------"); - logger.debug("---- Check if have authorization ----"); - logger.debug("-----------------------------------------------------"); - logger.debug(" for:{}", requestContext.getUriInfo().getPath()); - */ + /* logger.debug("-----------------------------------------------------"); logger.debug("---- Check if have authorization ----"); + * logger.debug("-----------------------------------------------------"); logger.debug(" for:{}", requestContext.getUriInfo().getPath()); */ final Method method = this.resourceInfo.getResourceMethod(); // Access denied for all if (method.isAnnotationPresent(DenyAll.class)) { @@ -66,9 +62,9 @@ public class AuthenticationFilter implements ContainerRequestFilter { return; } - //Access allowed for all + // Access allowed for all if (method.isAnnotationPresent(PermitAll.class)) { - //logger.debug(" ==> permit all " + requestContext.getUriInfo().getPath()); + // logger.debug(" ==> permit all " + requestContext.getUriInfo().getPath()); // no control ... return; } @@ -81,7 +77,7 @@ public class AuthenticationFilter implements ContainerRequestFilter { // Get the Authorization header from the request String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION); - //logger.debug("authorizationHeader: {}", authorizationHeader); + // logger.debug("authorizationHeader: {}", authorizationHeader); if (authorizationHeader == null && method.isAnnotationPresent(PermitTokenInURI.class)) { final MultivaluedMap quaryparam = requestContext.getUriInfo().getQueryParameters(); for (final Entry> item : quaryparam.entrySet()) { @@ -106,7 +102,7 @@ public class AuthenticationFilter implements ContainerRequestFilter { if (isJwtToken) { // Extract the token from the Authorization header (Remove "Yota ") final String token = authorizationHeader.substring(AUTHENTICATION_SCHEME.length()).trim(); - //logger.debug("token: {}", token); + // logger.debug("token: {}", token); try { userByToken = validateJwtToken(token); } catch (final Exception e) { @@ -122,7 +118,7 @@ public class AuthenticationFilter implements ContainerRequestFilter { } else { // Extract the token from the Authorization header (Remove "Zota ") final String token = authorizationHeader.substring(AUTHENTICATION_TOKEN_SCHEME.length()).trim(); - //logger.debug("token: {}", token); + // logger.debug("token: {}", token); try { userByToken = validateToken(token); } catch (final Exception e) { @@ -151,7 +147,7 @@ public class AuthenticationFilter implements ContainerRequestFilter { break; } } - //Is user valid? + // Is user valid? if (!haveRight) { this.logger.error("REJECTED not enought right : {} require: {}", requestContext.getUriInfo().getPath(), roles); requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity("Not enought RIGHT !!!").build()); @@ -193,7 +189,7 @@ public class AuthenticationFilter implements ContainerRequestFilter { // must be override to be good implementation protected UserByToken validateJwtToken(final String authorization) throws Exception { - //logger.debug(" validate token : " + authorization); + // logger.debug(" validate token : " + authorization); final JWTClaimsSet ret = JWTWrapper.validateToken(authorization, "KarAuth", null); // check the token is valid !!! (signed and coherent issuer... if (ret == null) { @@ -216,8 +212,8 @@ public class AuthenticationFilter implements ContainerRequestFilter { this.logger.error("Connect with no right for this application='{}' full Right='{}'", this.applicationName, rights); } } - //logger.debug("request user: '{}' right: '{}' row='{}'", userUID, user.right, rowRight); + // logger.debug("request user: '{}' right: '{}' row='{}'", userUID, user.right, rowRight); return user; - //return UserDB.getUserOrCreate(id, (String)ret.getClaim("login") ); + // return UserDB.getUserOrCreate(id, (String)ret.getClaim("login") ); } } diff --git a/src/org/kar/archidata/filter/CORSFilter.java b/src/org/kar/archidata/filter/CORSFilter.java index 6675bc9..c197dcb 100644 --- a/src/org/kar/archidata/filter/CORSFilter.java +++ b/src/org/kar/archidata/filter/CORSFilter.java @@ -9,14 +9,14 @@ import jakarta.ws.rs.ext.Provider; @Provider public class CORSFilter implements ContainerResponseFilter { - + @Override - public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException { - //System.err.println("filter cors ..." + request.toString()); - + public void filter(final ContainerRequestContext request, final ContainerResponseContext response) throws IOException { + // System.err.println("filter cors ..." + request.toString()); + response.getHeaders().add("Access-Control-Allow-Origin", "*"); response.getHeaders().add("Access-Control-Allow-Headers", "*"); - // "Origin, content-type, Content-type, Accept, authorization, mime-type, filename"); + // "Origin, content-type, Content-type, Accept, authorization, mime-type, filename"); response.getHeaders().add("Access-Control-Allow-Credentials", "true"); response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); } diff --git a/src/org/kar/archidata/filter/GenericContext.java b/src/org/kar/archidata/filter/GenericContext.java index 4fbaa2e..4938741 100644 --- a/src/org/kar/archidata/filter/GenericContext.java +++ b/src/org/kar/archidata/filter/GenericContext.java @@ -5,13 +5,13 @@ import java.security.Principal; import org.kar.archidata.model.UserByToken; public class GenericContext implements Principal { - + public UserByToken userByToken; - - public GenericContext(UserByToken userByToken) { + + public GenericContext(final UserByToken userByToken) { this.userByToken = userByToken; } - + @Override public String getName() { if (this.userByToken == null) { diff --git a/src/org/kar/archidata/filter/MySecurityContext.java b/src/org/kar/archidata/filter/MySecurityContext.java index a66453c..b1b9614 100644 --- a/src/org/kar/archidata/filter/MySecurityContext.java +++ b/src/org/kar/archidata/filter/MySecurityContext.java @@ -8,42 +8,42 @@ import jakarta.ws.rs.core.SecurityContext; // https://simplapi.wordpress.com/2015/09/19/jersey-jax-rs-securitycontext-in-action/ class MySecurityContext implements SecurityContext { - + private final GenericContext contextPrincipale; private final String sheme; - - public MySecurityContext(UserByToken userByToken, String sheme) { + + public MySecurityContext(final UserByToken userByToken, final String sheme) { this.contextPrincipale = new GenericContext(userByToken); this.sheme = sheme; } - + @Override public Principal getUserPrincipal() { - return contextPrincipale; + return this.contextPrincipale; } - + @Override - public boolean isUserInRole(String role) { - if (contextPrincipale.userByToken != null) { - Object value = this.contextPrincipale.userByToken.right.get(role); - if (value instanceof Boolean ret) { + public boolean isUserInRole(final String role) { + if (this.contextPrincipale.userByToken != null) { + final Object value = this.contextPrincipale.userByToken.right.get(role); + if (value instanceof final Boolean ret) { return ret; } } return false; } - + @Override public boolean isSecure() { - return sheme.equalsIgnoreCase("https"); + return this.sheme.equalsIgnoreCase("https"); } - + @Override public String getAuthenticationScheme() { - if (contextPrincipale.userByToken != null) { + if (this.contextPrincipale.userByToken != null) { return "Zota"; } return null; } - + } \ No newline at end of file diff --git a/src/org/kar/archidata/filter/OptionFilter.java b/src/org/kar/archidata/filter/OptionFilter.java index cff309a..5a9991c 100644 --- a/src/org/kar/archidata/filter/OptionFilter.java +++ b/src/org/kar/archidata/filter/OptionFilter.java @@ -12,7 +12,7 @@ import jakarta.ws.rs.ext.Provider; @PreMatching public class OptionFilter implements ContainerRequestFilter { @Override - public void filter(ContainerRequestContext requestContext) throws IOException { + public void filter(final ContainerRequestContext requestContext) throws IOException { if (requestContext.getMethod().contentEquals("OPTIONS")) { requestContext.abortWith(Response.status(Response.Status.NO_CONTENT).build()); } diff --git a/src/org/kar/archidata/migration/MigrationEngine.java b/src/org/kar/archidata/migration/MigrationEngine.java index 0c60b81..29861da 100644 --- a/src/org/kar/archidata/migration/MigrationEngine.java +++ b/src/org/kar/archidata/migration/MigrationEngine.java @@ -16,49 +16,39 @@ import org.slf4j.LoggerFactory; public class MigrationEngine { final static Logger LOGGER = LoggerFactory.getLogger(MigrationEngine.class); - + // List of order migrations private final List datas; // initialization of the migration if the DB is not present... private MigrationInterface init; - - /** - * Migration engine constructor (empty). - */ + + /** Migration engine constructor (empty). */ public MigrationEngine() { this(new ArrayList<>(), null); } - - /** - * Migration engine constructor (specific mode). + + /** Migration engine constructor (specific mode). * @param datas All the migration ordered. - * @param init Initialization migration model. - */ + * @param init Initialization migration model. */ public MigrationEngine(final List datas, final MigrationInterface init) { this.datas = datas; this.init = init; } - - /** - * Add a Migration in the list - * @param migration Migration to add. - */ + + /** Add a Migration in the list + * @param migration Migration to add. */ public void add(final MigrationInterface migration) { this.datas.add(migration); } - - /** - * Set first initialization class - * @param migration migration class for first init. - */ + + /** Set first initialization class + * @param migration migration class for first init. */ public void setInit(final MigrationInterface migration) { this.init = migration; } - - /** - * Get the current version/migration name - * @return Model represent the last migration. If null then no migration has been done. - */ + + /** Get the current version/migration name + * @return Model represent the last migration. If null then no migration has been done. */ public Migration getCurrentVersion() { if (!DataAccess.isTableExist("KAR_migration")) { return null; @@ -84,16 +74,14 @@ public class MigrationEngine { } return null; } - - /** - * Process the automatic migration of the system + + /** Process the automatic migration of the system * @param config SQL connection for the migration * @throws InterruptedException user interrupt the migration - * @throws IOException Error if access on the DB - */ + * @throws IOException Error if access on the DB */ public void migrate(final DBConfig config) throws InterruptedException, IOException { LOGGER.info("Execute migration ... [BEGIN]"); - + // STEP 1: Check the DB exist: LOGGER.info("Verify existance of '{}'", config.getDbName()); boolean exist = DataAccess.isDBExist(config.getDbName()); @@ -140,7 +128,7 @@ public class MigrationEngine { final Migration currentVersion = getCurrentVersion(); List toApply = new ArrayList<>(); if (currentVersion == null) { - //This is a first migration + // This is a first migration LOGGER.info("First installation of the system ==> Create the DB"); if (this.init == null) { toApply = this.datas; @@ -197,7 +185,7 @@ public class MigrationEngine { } LOGGER.info("Execute migration ... [ END ]"); } - + public void migrateSingle(final DBEntry entry, final MigrationInterface elem, final int id, final int count) { LOGGER.info("---------------------------------------------------------"); LOGGER.info("-- Migrate: [{}/{}] {} [BEGIN]", id, count, elem.getName()); @@ -216,7 +204,7 @@ public class MigrationEngine { // TODO Auto-generated catch block e.printStackTrace(); } - + if (elem.applyMigration(entry, log, migrationResult)) { migrationResult.terminated = true; try { @@ -245,7 +233,7 @@ public class MigrationEngine { } LOGGER.info("Migrate: [{}/{}] {} [ END ]", id, count, elem.getName()); } - + public void revertTo(final DBEntry entry, final String migrationName) { final Migration currentVersion = getCurrentVersion(); final List toApply = new ArrayList<>(); @@ -268,10 +256,10 @@ public class MigrationEngine { revertSingle(entry, elem, id, count); } } - + public void revertSingle(final DBEntry entry, final MigrationInterface elem, final int id, final int count) { LOGGER.info("Revert migration: {} [BEGIN]", elem.getName()); - + LOGGER.info("Revert migration: {} [ END ]", elem.getName()); } } diff --git a/src/org/kar/archidata/migration/MigrationException.java b/src/org/kar/archidata/migration/MigrationException.java index 55c24a3..c1f140d 100644 --- a/src/org/kar/archidata/migration/MigrationException.java +++ b/src/org/kar/archidata/migration/MigrationException.java @@ -1,7 +1,7 @@ package org.kar.archidata.migration; public class MigrationException extends Exception { - + private static final long serialVersionUID = 20230502L; - + } diff --git a/src/org/kar/archidata/migration/MigrationInterface.java b/src/org/kar/archidata/migration/MigrationInterface.java index c76a0f5..697f8e3 100644 --- a/src/org/kar/archidata/migration/MigrationInterface.java +++ b/src/org/kar/archidata/migration/MigrationInterface.java @@ -4,32 +4,24 @@ import org.kar.archidata.db.DBEntry; import org.kar.archidata.migration.model.Migration; public interface MigrationInterface { - /** - * Get Name of the migration - * @return Migration name - */ + /** Get Name of the migration + * @return Migration name */ String getName(); - - /** - * Migrate the system to a new version. + + /** Migrate the system to a new version. * @param entry DB interface for the migration. * @param log Stored data in the BDD for the migration progression. * @param migration Migration post data on each step... - * @return true if migration is finished. - */ + * @return true if migration is finished. */ boolean applyMigration(DBEntry entry, StringBuilder log, Migration model); - - /** - * Remove a migration the system to the previous version. + + /** Remove a migration the system to the previous version. * @param entry DB interface for the migration. * @param log Stored data in the BDD for the migration progression. - * @return true if migration is finished. - */ + * @return true if migration is finished. */ boolean revertMigration(DBEntry entry, StringBuilder log); - - /** - * Get the number of step in the migration process. - * @return count of SQL access. - */ + + /** Get the number of step in the migration process. + * @return count of SQL access. */ int getNumberOfStep(); } diff --git a/src/org/kar/archidata/migration/MigrationSqlStep.java b/src/org/kar/archidata/migration/MigrationSqlStep.java index 6e57fa3..d0a5c05 100644 --- a/src/org/kar/archidata/migration/MigrationSqlStep.java +++ b/src/org/kar/archidata/migration/MigrationSqlStep.java @@ -13,13 +13,11 @@ import org.kar.archidata.util.ConfigBaseVariable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -record Action( - String action, - List filterDB) { +record Action(String action, List filterDB) { public Action(final String action) { this(action, List.of()); } - + public Action(final String action, final String filterDB) { this(action, List.of(filterDB)); } @@ -28,26 +26,26 @@ record Action( public class MigrationSqlStep implements MigrationInterface { final static Logger LOGGER = LoggerFactory.getLogger(MigrationSqlStep.class); private final List actions = new ArrayList<>(); - + @Override public String getName() { return getClass().getCanonicalName(); } - + public void display() { for (int iii = 0; iii < this.actions.size(); iii++) { final Action action = this.actions.get(iii); LOGGER.info(" >>>> SQL ACTION : {}/{} ==> filter='{}'\n{}", iii, this.actions.size(), action.filterDB(), action.action()); } } - + @Override public boolean applyMigration(final DBEntry entry, final StringBuilder log, final Migration model) { for (int iii = 0; iii < this.actions.size(); iii++) { log.append("action [" + (iii + 1) + "/" + this.actions.size() + "]\n"); LOGGER.info(" >>>> SQL ACTION : {}/{}", iii + 1, this.actions.size()); final Action action = this.actions.get(iii); - + LOGGER.info("SQL request: ```{}``` on '{}' current={}", action.action(), action.filterDB(), ConfigBaseVariable.getDBType()); log.append("SQL: " + action.action() + " on " + action.filterDB() + "\n"); boolean isValid = true; @@ -98,30 +96,30 @@ public class MigrationSqlStep implements MigrationInterface { } return true; } - + @Override public boolean revertMigration(final DBEntry entry, final StringBuilder log) { return false; } - + public void addAction(final String action) { this.actions.add(new Action(action)); } - + public void addAction(final String action, final String filterdBType) { this.actions.add(new Action(action, filterdBType)); } - + public void addClass(final Class clazz) throws Exception { final List tmp = DataFactory.createTable(clazz); for (final String elem : tmp) { this.actions.add(new Action(elem)); } } - + @Override public int getNumberOfStep() { return this.actions.size(); } - + } diff --git a/src/org/kar/archidata/model/Data.java b/src/org/kar/archidata/model/Data.java index 10c4272..953e737 100644 --- a/src/org/kar/archidata/model/Data.java +++ b/src/org/kar/archidata/model/Data.java @@ -12,7 +12,7 @@ import jakarta.persistence.Table; @DataIfNotExists @JsonInclude(JsonInclude.Include.NON_NULL) public class Data extends GenericDataSoftDelete { - + @Column(length = 128, nullable = false) @DataComment("Sha512 of the data") public String sha512; diff --git a/src/org/kar/archidata/model/GetToken.java b/src/org/kar/archidata/model/GetToken.java index 5191d26..6e356b3 100644 --- a/src/org/kar/archidata/model/GetToken.java +++ b/src/org/kar/archidata/model/GetToken.java @@ -3,5 +3,5 @@ package org.kar.archidata.model; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) -public record GetToken( - String jwt) {} +public record GetToken(String jwt) { +} diff --git a/src/org/kar/archidata/model/Migration.java b/src/org/kar/archidata/model/Migration.java index d0724ea..23580e8 100644 --- a/src/org/kar/archidata/model/Migration.java +++ b/src/org/kar/archidata/model/Migration.java @@ -2,5 +2,5 @@ package org.kar.archidata.model; public class Migration extends GenericDataSoftDelete { public String migrationId; - + } diff --git a/src/org/kar/archidata/model/Token.java b/src/org/kar/archidata/model/Token.java index 28da800..926ed11 100644 --- a/src/org/kar/archidata/model/Token.java +++ b/src/org/kar/archidata/model/Token.java @@ -9,18 +9,18 @@ public class Token { public String token; public String createTime; public String endValidityTime; - + public Token() {} - - public Token(long id, long userId, String token, String createTime, String endValidityTime) { + + public Token(final long id, final long userId, final String token, final String createTime, final String endValidityTime) { this.id = id; this.userId = userId; this.token = token; this.createTime = createTime; this.endValidityTime = endValidityTime; } - - public Token(ResultSet rs) { + + public Token(final ResultSet rs) { int iii = 1; try { this.id = rs.getLong(iii++); @@ -28,13 +28,13 @@ public class Token { this.token = rs.getString(iii++); this.createTime = rs.getString(iii++); this.endValidityTime = rs.getString(iii++); - } catch (SQLException ex) { + } catch (final SQLException ex) { ex.printStackTrace(); } } - + @Override public String toString() { - return "Token{" + "id=" + id + ", userId=" + userId + ", token='" + token + '\'' + ", createTime=" + createTime + ", endValidityTime=" + endValidityTime + '}'; + return "Token{" + "id=" + this.id + ", userId=" + this.userId + ", token='" + this.token + '\'' + ", createTime=" + this.createTime + ", endValidityTime=" + this.endValidityTime + '}'; } } diff --git a/src/org/kar/archidata/model/User.java b/src/org/kar/archidata/model/User.java index dbe7b57..d4a3cbc 100644 --- a/src/org/kar/archidata/model/User.java +++ b/src/org/kar/archidata/model/User.java @@ -33,7 +33,7 @@ import jakarta.persistence.Table; public class User extends GenericDataSoftDelete { @Column(length = 128) public String login = null; - + public Timestamp lastConnection = null; @DataDefault("'0'") @Column(nullable = false) @@ -44,13 +44,13 @@ public class User extends GenericDataSoftDelete { @DataDefault("'0'") @Column(nullable = false) public boolean removed = false; - + @ManyToMany(fetch = FetchType.LAZY, targetEntity = Data.class) public List covers; - + @Override public String toString() { - return "User [login=" + login + ", last=" + lastConnection + ", admin=" + admin + "]"; + return "User [login=" + this.login + ", last=" + this.lastConnection + ", admin=" + this.admin + "]"; } - + } diff --git a/src/org/kar/archidata/model/UserByToken.java b/src/org/kar/archidata/model/UserByToken.java index bf274bb..d22c355 100644 --- a/src/org/kar/archidata/model/UserByToken.java +++ b/src/org/kar/archidata/model/UserByToken.java @@ -8,44 +8,44 @@ public class UserByToken { public static final int TYPE_APPLICATION = -2; // application internal management type: an application generic Id public Integer type = null; - + public Long id = null; public Long parentId = null; // FOr application, this is the id of the application, and of user token, this is the USERID public String name = null; // Right map public Map right = new HashMap<>(); - - public boolean hasRight(String key, Object value) { + + public boolean hasRight(final String key, final Object value) { if (!this.right.containsKey(key)) { return false; } - Object data = this.right.get(key); - if (data instanceof Boolean elem) { - if (value instanceof Boolean castVal) { + final Object data = this.right.get(key); + if (data instanceof final Boolean elem) { + if (value instanceof final Boolean castVal) { if (elem == castVal) { return true; } } return false; } - if (data instanceof String elem) { - if (value instanceof String castVal) { + if (data instanceof final String elem) { + if (value instanceof final String castVal) { if (elem.equals(castVal)) { return true; } } return false; } - if (data instanceof Long elem) { - if (value instanceof Long castVal) { + if (data instanceof final Long elem) { + if (value instanceof final Long castVal) { if (elem == castVal) { return true; } } return false; } - if (data instanceof Double elem) { - if (value instanceof Double castVal) { + if (data instanceof final Double elem) { + if (value instanceof final Double castVal) { if (elem == castVal) { return true; } @@ -54,5 +54,5 @@ public class UserByToken { } return false; } - + } diff --git a/src/org/kar/archidata/util/ConfigBaseVariable.java b/src/org/kar/archidata/util/ConfigBaseVariable.java index 92f693e..3d29992 100644 --- a/src/org/kar/archidata/util/ConfigBaseVariable.java +++ b/src/org/kar/archidata/util/ConfigBaseVariable.java @@ -31,11 +31,11 @@ public class ConfigBaseVariable { ssoToken = System.getenv("SSO_TOKEN"); testMode = System.getenv("TEST_MODE"); } - + static { clearAllValue(); } - + public static String getTmpDataFolder() { if (tmpDataFolder == null) { return "/application/data/tmp"; @@ -109,11 +109,11 @@ public class ConfigBaseVariable { public static String getSSOAddress() { return ssoAdress; } - + public static String ssoToken() { return ssoToken; } - + public static boolean getTestMode() { if (testMode == null) { return false; diff --git a/src/org/kar/archidata/util/DataTools.java b/src/org/kar/archidata/util/DataTools.java index 8970945..db751e9 100644 --- a/src/org/kar/archidata/util/DataTools.java +++ b/src/org/kar/archidata/util/DataTools.java @@ -14,9 +14,9 @@ import java.sql.SQLException; import java.util.List; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; +import org.kar.archidata.dataAccess.DataAccess; import org.kar.archidata.dataAccess.QueryAnd; import org.kar.archidata.dataAccess.QueryCondition; -import org.kar.archidata.dataAccess.DataAccess; import org.kar.archidata.dataAccess.addOn.AddOnManyToMany; import org.kar.archidata.model.Data; import org.slf4j.Logger; @@ -26,104 +26,88 @@ import jakarta.ws.rs.core.Response; public class DataTools { private final static Logger LOGGER = LoggerFactory.getLogger(DataTools.class); - + public final static int CHUNK_SIZE = 1024 * 1024; // 1MB chunks public final static int CHUNK_SIZE_IN = 50 * 1024 * 1024; // 1MB chunks - /** - * Upload some data - */ + /** Upload some data */ private static long tmpFolderId = 1; - - public static void createFolder(String path) throws IOException { + + public static void createFolder(final String path) throws IOException { if (!Files.exists(java.nio.file.Path.of(path))) { LOGGER.info("Create folder: " + path); Files.createDirectories(java.nio.file.Path.of(path)); } } - + public static long getTmpDataId() { return tmpFolderId++; } - - public static String getTmpFileInData(long tmpFolderId) { - String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId; + + public static String getTmpFileInData(final long tmpFolderId) { + final String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId; try { createFolder(ConfigBaseVariable.getTmpDataFolder() + File.separator); - } catch (IOException e) { + } catch (final IOException e) { e.printStackTrace(); } return filePath; } - + public static String getTmpFolder() { - String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId++; + final String filePath = ConfigBaseVariable.getTmpDataFolder() + File.separator + tmpFolderId++; try { createFolder(ConfigBaseVariable.getTmpDataFolder() + File.separator); - } catch (IOException e) { + } catch (final IOException e) { e.printStackTrace(); } return filePath; } - - public static String getFileData(long tmpFolderId) { - String filePath = ConfigBaseVariable.getMediaDataFolder() + File.separator + tmpFolderId + File.separator + "data"; + + public static String getFileData(final long tmpFolderId) { + final String filePath = ConfigBaseVariable.getMediaDataFolder() + File.separator + tmpFolderId + File.separator + "data"; try { createFolder(ConfigBaseVariable.getMediaDataFolder() + File.separator + tmpFolderId + File.separator); - } catch (IOException e) { + } catch (final IOException e) { e.printStackTrace(); } return filePath; } - - public static Data getWithSha512(String sha512) { + + public static Data getWithSha512(final String sha512) { try { return DataAccess.getWhere(Data.class, new QueryCondition("sha512", "=", sha512)); - } catch (Exception e) { + } catch (final Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } - - public static Data getWithId(long id) { + + public static Data getWithId(final long id) { try { return DataAccess.getWhere(Data.class, new QueryAnd(List.of(new QueryCondition("deleted", "=", false), new QueryCondition("id", "=", id)))); - } catch (Exception e) { + } catch (final Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } - - public static Data createNewData(long tmpUID, String originalFileName, String sha512) throws IOException, SQLException { + + public static Data createNewData(final long tmpUID, final String originalFileName, final String sha512) throws IOException, SQLException { // determine mime type: String mimeType = ""; - String extension = originalFileName.substring(originalFileName.lastIndexOf('.') + 1); - switch (extension.toLowerCase()) { - case "jpg": - case "jpeg": - mimeType = "image/jpeg"; - break; - case "png": - mimeType = "image/png"; - break; - case "webp": - mimeType = "image/webp"; - break; - case "mka": - mimeType = "audio/x-matroska"; - break; - case "mkv": - mimeType = "video/x-matroska"; - break; - case "webm": - mimeType = "video/webm"; - break; - default: - throw new IOException("Can not find the mime type of data input: '" + extension + "'"); - } - String tmpPath = getTmpFileInData(tmpUID); - long fileSize = Files.size(Paths.get(tmpPath)); + final String extension = originalFileName.substring(originalFileName.lastIndexOf('.') + 1); + mimeType = switch (extension.toLowerCase()) { + case "jpg", "jpeg" -> "image/jpeg"; + case "png" -> "image/png"; + case "webp" -> "image/webp"; + case "mka" -> "audio/x-matroska"; + case "mkv" -> "video/x-matroska"; + case "webm" -> "video/webm"; + default -> throw new IOException("Can not find the mime type of data input: '" + extension + "'"); + }; + final String tmpPath = getTmpFileInData(tmpUID); + final long fileSize = Files.size(Paths.get(tmpPath)); Data out = new Data(); ; try { @@ -131,62 +115,62 @@ public class DataTools { out.mimeType = mimeType; out.size = fileSize; out = DataAccess.insert(out); - } catch (SQLException ex) { + } catch (final SQLException ex) { ex.printStackTrace(); return null; - } catch (Exception e) { + } catch (final Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return null; } - - String mediaPath = getFileData(out.id); + + final String mediaPath = getFileData(out.id); LOGGER.info("src = {}", tmpPath); LOGGER.info("dst = {}", mediaPath); Files.move(Paths.get(tmpPath), Paths.get(mediaPath), StandardCopyOption.ATOMIC_MOVE); - + LOGGER.info("Move done"); // all is done the file is correctly installed... return out; } - - public static void undelete(Long id) { + + public static void undelete(final Long id) { try { DataAccess.unsetDelete(Data.class, id); - } catch (Exception e) { + } catch (final Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } - - public static String saveTemporaryFile(InputStream uploadedInputStream, long idData) { + + public static String saveTemporaryFile(final InputStream uploadedInputStream, final long idData) { return saveFile(uploadedInputStream, getTmpFileInData(idData)); } - - public static void removeTemporaryFile(long idData) { - String filepath = getTmpFileInData(idData); + + public static void removeTemporaryFile(final long idData) { + final String filepath = getTmpFileInData(idData); if (Files.exists(Paths.get(filepath))) { try { Files.delete(Paths.get(filepath)); - } catch (IOException e) { + } catch (final IOException e) { LOGGER.info("can not delete temporary file : {}", Paths.get(filepath)); e.printStackTrace(); } } } - + // save uploaded file to a defined location on the server - public static String saveFile(InputStream uploadedInputStream, String serverLocation) { + public static String saveFile(final InputStream uploadedInputStream, final String serverLocation) { String out = ""; try { OutputStream outpuStream = new FileOutputStream(new File(serverLocation)); int read = 0; - byte[] bytes = new byte[CHUNK_SIZE_IN]; - MessageDigest md = MessageDigest.getInstance("SHA-512"); - + final byte[] bytes = new byte[CHUNK_SIZE_IN]; + final MessageDigest md = MessageDigest.getInstance("SHA-512"); + outpuStream = new FileOutputStream(new File(serverLocation)); while ((read = uploadedInputStream.read(bytes)) != -1) { - //logger.debug("write {}", read); + // logger.debug("write {}", read); md.update(bytes, 0, read); outpuStream.write(bytes, 0, read); } @@ -194,41 +178,36 @@ public class DataTools { outpuStream.flush(); outpuStream.close(); // create the end of sha512 - byte[] sha512Digest = md.digest(); + final byte[] sha512Digest = md.digest(); // convert in hexadecimal out = bytesToHex(sha512Digest); uploadedInputStream.close(); - } catch (IOException ex) { + } catch (final IOException ex) { LOGGER.error("Can not write in temporary file ... "); ex.printStackTrace(); - } catch (NoSuchAlgorithmException ex) { + } catch (final NoSuchAlgorithmException ex) { LOGGER.error("Can not find sha512 algorithms"); ex.printStackTrace(); } return out; } - + // curl http://localhost:9993/api/users/3 - //@Secured - /* - @GET - @Path("{id}") - //@RolesAllowed("GUEST") - @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response retriveData(@HeaderParam("Range") String range, @PathParam("id") Long id) throws Exception { - return retriveDataFull(range, id, "no-name"); - } - */ - - public static String bytesToHex(byte[] bytes) { - StringBuilder sb = new StringBuilder(); - for (byte b : bytes) { + // @Secured + /* @GET + * @Path("{id}") //@RolesAllowed("GUEST") + * @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response retriveData(@HeaderParam("Range") String range, @PathParam("id") Long id) throws Exception { return retriveDataFull(range, id, + * "no-name"); } */ + + public static String bytesToHex(final byte[] bytes) { + final StringBuilder sb = new StringBuilder(); + for (final byte b : bytes) { sb.append(String.format("%02x", b)); } return sb.toString(); } - - public static String multipartCorrection(String data) { + + public static String multipartCorrection(final String data) { if (data == null) { return null; } @@ -240,40 +219,40 @@ public class DataTools { } return data; } - - public static Response uploadCover(Class clazz, Long id, String fileName, InputStream fileInputStream, FormDataContentDisposition fileMetaData) { + + public static Response uploadCover(final Class clazz, final Long id, String fileName, final InputStream fileInputStream, final FormDataContentDisposition fileMetaData) { try { // correct input string stream : fileName = multipartCorrection(fileName); - - //public NodeSmall uploadFile(final FormDataMultiPart form) { + + // public NodeSmall uploadFile(final FormDataMultiPart form) { LOGGER.info("Upload media file: {}", fileMetaData); LOGGER.info(" - id: {}", id); LOGGER.info(" - file_name: ", fileName); LOGGER.info(" - fileInputStream: {}", fileInputStream); LOGGER.info(" - fileMetaData: {}", fileMetaData); - T media = DataAccess.get(clazz, id); + final T media = DataAccess.get(clazz, id); if (media == null) { return Response.notModified("Media Id does not exist or removed...").build(); } - - long tmpUID = getTmpDataId(); - String sha512 = saveTemporaryFile(fileInputStream, tmpUID); + + final long tmpUID = getTmpDataId(); + final String sha512 = saveTemporaryFile(fileInputStream, tmpUID); Data data = getWithSha512(sha512); if (data == null) { LOGGER.info("Need to add the data in the BDD ... "); try { data = createNewData(tmpUID, fileName, sha512); - } catch (IOException ex) { + } catch (final IOException ex) { removeTemporaryFile(tmpUID); ex.printStackTrace(); return Response.notModified("can not create input media").build(); - } catch (SQLException ex) { + } catch (final SQLException ex) { ex.printStackTrace(); removeTemporaryFile(tmpUID); return Response.notModified("Error in SQL insertion ...").build(); } - } else if (data.deleted == true) { + } else if (data.deleted) { LOGGER.error("Data already exist but deleted"); undelete(data.id); data.deleted = false; @@ -284,7 +263,7 @@ public class DataTools { LOGGER.info("Find typeNode"); AddOnManyToMany.addLink(clazz, id, "cover", data.id); return Response.ok(DataAccess.get(clazz, id)).build(); - } catch (Exception ex) { + } catch (final Exception ex) { System.out.println("Cat ann unexpected error ... "); ex.printStackTrace(); } diff --git a/src/org/kar/archidata/util/JWTWrapper.java b/src/org/kar/archidata/util/JWTWrapper.java index 230fc92..11a9c0e 100644 --- a/src/org/kar/archidata/util/JWTWrapper.java +++ b/src/org/kar/archidata/util/JWTWrapper.java @@ -33,23 +33,16 @@ import com.nimbusds.jwt.SignedJWT; class TestSigner implements JWSSigner { public static String test_signature = "TEST_SIGNATURE_FOR_LOCAL_TEST_AND_TEST_E2E"; - - /** - * Signs the specified {@link JWSObject#getSigningInput input} of a - * {@link JWSObject JWS object}. + + /** Signs the specified {@link JWSObject#getSigningInput input} of a {@link JWSObject JWS object}. * - * @param header The JSON Web Signature (JWS) header. Must - * specify a supported JWS algorithm and must not - * be {@code null}. + * @param header The JSON Web Signature (JWS) header. Must specify a supported JWS algorithm and must not be {@code null}. * @param signingInput The input to sign. Must not be {@code null}. * * @return The resulting signature part (third part) of the JWS object. * - * @throws JOSEException If the JWS algorithm is not supported, if a - * critical header parameter is not supported or - * marked for deferral to the application, or if - * signing failed for some other internal reason. - */ + * @throws JOSEException If the JWS algorithm is not supported, if a critical header parameter is not supported or marked for deferral to the application, or if signing failed for some other + * internal reason. */ @Override public Base64URL sign(final JWSHeader header, final byte[] signingInput) throws JOSEException { return new Base64URL(test_signature); @@ -87,7 +80,7 @@ public class JWTWrapper { public static void initLocalTokenRemote(final String ssoUri, final String application) throws IOException, ParseException { // check Token: final URL obj = new URL(ssoUri + "public_key"); - //LOGGER.debug("Request token from: {}", obj); + // LOGGER.debug("Request token from: {}", obj); final HttpURLConnection con = (HttpURLConnection) obj.openConnection(); con.setRequestMethod("GET"); con.setRequestProperty("User-Agent", application); @@ -100,7 +93,7 @@ public class JWTWrapper { } final int responseCode = con.getResponseCode(); - //LOGGER.debug("GET Response Code :: {}", responseCode); + // LOGGER.debug("GET Response Code :: {}", responseCode); if (responseCode == HttpURLConnection.HTTP_OK) { // success final BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); @@ -111,7 +104,7 @@ public class JWTWrapper { } in.close(); // print result - //LOGGER.debug(response.toString()); + // LOGGER.debug(response.toString()); final ObjectMapper mapper = new ObjectMapper(); final PublicKey values = mapper.readValue(response.toString(), PublicKey.class); rsaPublicJWK = RSAKey.parse(values.key); @@ -169,25 +162,19 @@ public class JWTWrapper { return rsaPublicJWK.toRSAPublicKey(); } - /** - * Create a token with the provided elements + /** Create a token with the provided elements * @param userID UniqueId of the USER (global unique ID) * @param userLogin Login of the user (never change) * @param isuer The one who provide the Token * @param timeOutInMunites Expiration of the token. - * @return the encoded token - */ + * @return the encoded token */ public static String generateJWToken(final long userID, final String userLogin, final String isuer, final String application, final Map rights, final int timeOutInMunites) { if (rsaJWK == null) { LOGGER.warn("JWT private key is not present !!!"); return null; } - /* - LOGGER.debug(" ===> expire in : " + timeOutInMunites); - LOGGER.debug(" ===>" + new Date().getTime()); - LOGGER.debug(" ===>" + new Date(new Date().getTime())); - LOGGER.debug(" ===>" + new Date(new Date().getTime() - 60 * timeOutInMunites * 1000)); - */ + /* LOGGER.debug(" ===> expire in : " + timeOutInMunites); LOGGER.debug(" ===>" + new Date().getTime()); LOGGER.debug(" ===>" + new Date(new Date().getTime())); LOGGER.debug(" ===>" + new + * Date(new Date().getTime() - 60 * timeOutInMunites * 1000)); */ try { // Create RSA-signer with the private key final JWSSigner signer = new RSASSASigner(rsaJWK); @@ -206,7 +193,7 @@ public class JWTWrapper { } // Prepare JWT with claims set final JWTClaimsSet claimsSet = builder.build(); - final SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT)/*.keyID(rsaJWK.getKeyID())*/.build(), claimsSet); + final SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT)/* .keyID(rsaJWK.getKeyID()) */.build(), claimsSet); // Compute the RSA signature signedJWT.sign(signer); @@ -222,7 +209,7 @@ public class JWTWrapper { try { // On the consumer side, parse the JWS and verify its RSA signature final SignedJWT signedJWT = SignedJWT.parse(signedToken); - + if (rsaPublicJWK == null) { LOGGER.warn("JWT public key is not present !!!"); if (!ConfigBaseVariable.getTestMode()) { @@ -253,8 +240,8 @@ public class JWTWrapper { // TODO: verify the token is used for the correct application. } // the element must be validated outside ... - //LOGGER.debug("JWT token is verified 'alice' =?= '" + signedJWT.getJWTClaimsSet().getSubject() + "'"); - //LOGGER.debug("JWT token isuer 'https://c2id.com' =?= '" + signedJWT.getJWTClaimsSet().getIssuer() + "'"); + // LOGGER.debug("JWT token is verified 'alice' =?= '" + signedJWT.getJWTClaimsSet().getSubject() + "'"); + // LOGGER.debug("JWT token isuer 'https://c2id.com' =?= '" + signedJWT.getJWTClaimsSet().getIssuer() + "'"); return signedJWT.getJWTClaimsSet(); } catch (final JOSEException ex) { ex.printStackTrace(); @@ -271,10 +258,10 @@ public class JWTWrapper { } try { final int timeOutInMunites = 3600 * 24 * 31; - + final Date now = new Date(); final Date expiration = new Date(new Date().getTime() - 60 * timeOutInMunites * 1000 /* millisecond */); - + final JWTClaimsSet.Builder builder = new JWTClaimsSet.Builder().subject(Long.toString(userID)).claim("login", userLogin).claim("application", application).issuer(isuer).issueTime(now) .expirationTime(expiration); // Do not ask why we need a "-" here ... this have no meaning // add right if needed: @@ -283,11 +270,11 @@ public class JWTWrapper { } // Prepare JWT with claims set final JWTClaimsSet claimsSet = builder.build(); - final SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT)/*.keyID(rsaJWK.getKeyID())*/.build(), claimsSet); - + final SignedJWT signedJWT = new SignedJWT(new JWSHeader.Builder(JWSAlgorithm.RS256).type(JOSEObjectType.JWT)/* .keyID(rsaJWK.getKeyID()) */.build(), claimsSet); + // Compute the RSA signature signedJWT.sign(new TestSigner()); - + // serialize the output... return signedJWT.serialize(); } catch (final Exception ex) { diff --git a/src/org/kar/archidata/util/PublicKey.java b/src/org/kar/archidata/util/PublicKey.java index 440d3eb..6d66a21 100644 --- a/src/org/kar/archidata/util/PublicKey.java +++ b/src/org/kar/archidata/util/PublicKey.java @@ -2,8 +2,8 @@ package org.kar.archidata.util; public class PublicKey { public String key; - - public PublicKey(String key) { + + public PublicKey(final String key) { this.key = key; } -} \ No newline at end of file +} diff --git a/src/org/kar/archidata/util/RESTApi.java b/src/org/kar/archidata/util/RESTApi.java index f826fa5..e8b5e11 100644 --- a/src/org/kar/archidata/util/RESTApi.java +++ b/src/org/kar/archidata/util/RESTApi.java @@ -23,162 +23,162 @@ public class RESTApi { final static Logger LOGGER = LoggerFactory.getLogger(RESTApi.class); final String baseUrl; private String token = null; - - public RESTApi(String baseUrl) { + + public RESTApi(final String baseUrl) { this.baseUrl = baseUrl; } - - public void setToken(String token) { + + public void setToken(final String token) { this.token = token; } - - public List gets(Class clazz, String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); + + public List gets(final Class clazz, final String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } - HttpRequest request = requestBuilding.GET().build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.GET().build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } - List out = mapper.readValue(httpResponse.body(), new TypeReference>() {}); + final List out = mapper.readValue(httpResponse.body(), new TypeReference>() {}); return out; } - - public T get(Class clazz, String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); + + public T get(final Class clazz, final String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } - HttpRequest request = requestBuilding.GET().build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.GET().build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - //LOGGER.error("catch error from REST API: {}", httpResponse.body()); - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + // LOGGER.error("catch error from REST API: {}", httpResponse.body()); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw new RESTErrorResponseExeption(out.uuid, out.time, out.error, out.message, out.status, out.statusMessage); } - //LOGGER.error("status code: {}", httpResponse.statusCode()); - //LOGGER.error("data: {}", httpResponse.body()); + // LOGGER.error("status code: {}", httpResponse.statusCode()); + // LOGGER.error("data: {}", httpResponse.body()); if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } - - public T post(Class clazz, String urlOffset, U data) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); - String body = mapper.writeValueAsString(data); + + public T post(final Class clazz, final String urlOffset, final U data) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); + final String body = mapper.writeValueAsString(data); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } requestBuilding = requestBuilding.header("Content-Type", "application/json"); - HttpRequest request = requestBuilding.POST(BodyPublishers.ofString(body)).build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.POST(BodyPublishers.ofString(body)).build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { LOGGER.error("status code: {}", httpResponse.statusCode()); LOGGER.error("data: {}", httpResponse.body()); - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } - - public T postMap(Class clazz, String urlOffset, Map data) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); - String body = mapper.writeValueAsString(data); + + public T postMap(final Class clazz, final String urlOffset, final Map data) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); + final String body = mapper.writeValueAsString(data); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } requestBuilding = requestBuilding.header("Content-Type", "application/json"); - HttpRequest request = requestBuilding.POST(BodyPublishers.ofString(body)).build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.POST(BodyPublishers.ofString(body)).build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } - - public T put(Class clazz, String urlOffset, U data) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); - String body = mapper.writeValueAsString(data); + + public T put(final Class clazz, final String urlOffset, final U data) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); + final String body = mapper.writeValueAsString(data); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } requestBuilding = requestBuilding.header("Content-Type", "application/json"); - HttpRequest request = requestBuilding.PUT(BodyPublishers.ofString(body)).build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.PUT(BodyPublishers.ofString(body)).build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } - - public T putMap(Class clazz, String urlOffset, Map data) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); - String body = mapper.writeValueAsString(data); + + public T putMap(final Class clazz, final String urlOffset, final Map data) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); + final String body = mapper.writeValueAsString(data); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } requestBuilding = requestBuilding.header("Content-Type", "application/json"); - HttpRequest request = requestBuilding.PUT(BodyPublishers.ofString(body)).build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.PUT(BodyPublishers.ofString(body)).build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } - - public T delete(Class clazz, String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { - ObjectMapper mapper = new ObjectMapper(); - HttpClient client = HttpClient.newHttpClient(); + + public T delete(final Class clazz, final String urlOffset) throws RESTErrorResponseExeption, IOException, InterruptedException { + final ObjectMapper mapper = new ObjectMapper(); + final HttpClient client = HttpClient.newHttpClient(); Builder requestBuilding = HttpRequest.newBuilder().uri(URI.create(this.baseUrl + urlOffset)); - if (token != null) { - requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + token); + if (this.token != null) { + requestBuilding = requestBuilding.header(HttpHeaders.AUTHORIZATION, "Yota " + this.token); } - HttpRequest request = requestBuilding.DELETE().build(); - HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); + final HttpRequest request = requestBuilding.DELETE().build(); + final HttpResponse httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString()); if (httpResponse.statusCode() < 200 || httpResponse.statusCode() >= 300) { - RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); + final RESTErrorResponseExeption out = mapper.readValue(httpResponse.body(), RESTErrorResponseExeption.class); throw out; } if (clazz.equals(String.class)) { return (T) httpResponse.body(); } - T out = mapper.readValue(httpResponse.body(), clazz); + final T out = mapper.readValue(httpResponse.body(), clazz); return out; } } diff --git a/test/src/test/kar/archidata/TestJson.java b/test/src/test/kar/archidata/TestJson.java index e3e1ed3..a33a0cc 100644 --- a/test/src/test/kar/archidata/TestJson.java +++ b/test/src/test/kar/archidata/TestJson.java @@ -26,26 +26,26 @@ import test.kar.archidata.model.SimpleTable; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestJson { final static private Logger LOGGER = LoggerFactory.getLogger(TestJson.class); - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testTableInsertAndRetrieve() throws Exception { @@ -64,17 +64,17 @@ public class TestJson { test.data.data = "plopppopql"; final SerializeAsJson insertedData = DataAccess.insert(test); - + Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); Assertions.assertNotNull(insertedData.data); Assertions.assertNotNull(insertedData.data.data); Assertions.assertEquals(test.data.data, insertedData.data.data); - + // Try to retrieve all the data: final SerializeAsJson retrieve = DataAccess.get(SerializeAsJson.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertTrue(retrieve.id >= 0); @@ -82,5 +82,5 @@ public class TestJson { Assertions.assertNotNull(retrieve.data.data); Assertions.assertEquals(test.data.data, retrieve.data.data); } - + } diff --git a/test/src/test/kar/archidata/TestManyToMany.java b/test/src/test/kar/archidata/TestManyToMany.java index 60c7ad9..6046914 100644 --- a/test/src/test/kar/archidata/TestManyToMany.java +++ b/test/src/test/kar/archidata/TestManyToMany.java @@ -59,7 +59,7 @@ public class TestManyToMany { DataAccess.executeSimpleQuerry(elem, false); } } - + @Order(2) @Test public void testSimpleInsertAndRetieve() throws Exception { @@ -80,7 +80,7 @@ public class TestManyToMany { Assertions.assertNotNull(retrieve.otherData); Assertions.assertEquals(insertedData.otherData, retrieve.otherData); Assertions.assertNull(retrieve.remote); - + DataAccess.delete(TypeManyToManyRoot.class, insertedData.id); } @@ -92,7 +92,7 @@ public class TestManyToMany { remote.data = "remote1"; final TypeManyToManyRemote insertedRemote1 = DataAccess.insert(remote); Assertions.assertEquals(insertedRemote1.data, remote.data); - + remote = new TypeManyToManyRemote(); remote.data = "remote2"; final TypeManyToManyRemote insertedRemote2 = DataAccess.insert(remote); @@ -105,7 +105,7 @@ public class TestManyToMany { Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); Assertions.assertNull(insertedData.remote); - + // Try to retrieve all the data: TypeManyToManyRoot retrieve = DataAccess.get(TypeManyToManyRoot.class, insertedData.id); @@ -119,9 +119,9 @@ public class TestManyToMany { // Add remote elements AddOnManyToMany.addLink(TypeManyToManyRoot.class, retrieve.id, "remote", insertedRemote1.id); AddOnManyToMany.addLink(TypeManyToManyRoot.class, retrieve.id, "remote", insertedRemote2.id); - + retrieve = DataAccess.get(TypeManyToManyRoot.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -131,9 +131,9 @@ public class TestManyToMany { Assertions.assertEquals(retrieve.remote.size(), 2); Assertions.assertEquals(retrieve.remote.get(0), insertedRemote1.id); Assertions.assertEquals(retrieve.remote.get(1), insertedRemote2.id); - + final TypeManyToManyRootExpand retrieveExpand = DataAccess.get(TypeManyToManyRootExpand.class, insertedData.id); - + Assertions.assertNotNull(retrieveExpand); Assertions.assertNotNull(retrieveExpand.id); Assertions.assertEquals(insertedData.id, retrieveExpand.id); @@ -143,7 +143,7 @@ public class TestManyToMany { Assertions.assertEquals(retrieveExpand.remote.size(), 2); Assertions.assertEquals(retrieveExpand.remote.get(0).id, insertedRemote1.id); Assertions.assertEquals(retrieveExpand.remote.get(1).id, insertedRemote2.id); - + // Remove an element int count = AddOnManyToMany.removeLink(TypeManyToManyRoot.class, retrieve.id, "remote", insertedRemote1.id); Assertions.assertEquals(1, count); @@ -158,28 +158,23 @@ public class TestManyToMany { Assertions.assertNotNull(retrieve.remote); Assertions.assertEquals(retrieve.remote.size(), 1); Assertions.assertEquals(retrieve.remote.get(0), insertedRemote2.id); - + // Remove the second element count = AddOnManyToMany.removeLink(TypeManyToManyRoot.class, retrieve.id, "remote", insertedRemote2.id); Assertions.assertEquals(1, count); retrieve = DataAccess.get(TypeManyToManyRoot.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); Assertions.assertNotNull(retrieve.otherData); Assertions.assertEquals(insertedData.otherData, retrieve.otherData); Assertions.assertNull(retrieve.remote); - + DataAccess.delete(TypeManyToManyRoot.class, insertedData.id); } - /* - API TODO: - - Replace list (permet de les ordonnées) - - remove all links - - delete en cascade .... (compliqué...) - */ - + /* API TODO: - Replace list (permet de les ordonnées) - remove all links - delete en cascade .... (compliqué...) */ + } \ No newline at end of file diff --git a/test/src/test/kar/archidata/TestManyToOne.java b/test/src/test/kar/archidata/TestManyToOne.java index 96086b2..13a3dd9 100644 --- a/test/src/test/kar/archidata/TestManyToOne.java +++ b/test/src/test/kar/archidata/TestManyToOne.java @@ -58,7 +58,7 @@ public class TestManyToOne { DataAccess.executeSimpleQuerry(elem, false); } } - + @Order(2) @Test public void testAddAlements() throws Exception { @@ -71,7 +71,7 @@ public class TestManyToOne { remote.data = "remote2"; final TypeManyToOneRemote insertedRemote2 = DataAccess.insert(remote); Assertions.assertEquals(insertedRemote2.data, remote.data); - + final TypeManyToOneRoot test = new TypeManyToOneRoot(); test.otherData = "kjhlkjlkj"; test.remoteId = insertedRemote2.id; @@ -101,9 +101,9 @@ public class TestManyToOne { // remove values: final int count = DataAccess.delete(TypeManyToOneRemote.class, remote.id); Assertions.assertEquals(1, count); - + // check fail: - + retrieve = DataAccess.get(TypeManyToOneRoot.class, insertedData.id); Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); diff --git a/test/src/test/kar/archidata/TestOneToMany.java b/test/src/test/kar/archidata/TestOneToMany.java index 3fc458b..a50aef7 100644 --- a/test/src/test/kar/archidata/TestOneToMany.java +++ b/test/src/test/kar/archidata/TestOneToMany.java @@ -53,10 +53,10 @@ public class TestOneToMany { DataAccess.executeSimpleQuerry(elem, false); } } - + @Order(2) @Test public void testPlop() throws Exception { - + } } \ No newline at end of file diff --git a/test/src/test/kar/archidata/TestSimpleTable.java b/test/src/test/kar/archidata/TestSimpleTable.java index 0650752..ed29875 100644 --- a/test/src/test/kar/archidata/TestSimpleTable.java +++ b/test/src/test/kar/archidata/TestSimpleTable.java @@ -33,30 +33,30 @@ public class TestSimpleTable { private static final String DATA_INJECTED_2 = "dsqfsdfqsdfsqdf"; private static Long idOfTheObject = null; private static Timestamp startAction = null; - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Clear the static test: idOfTheObject = null; startAction = null; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testTableInsertAndRetrieve() throws Exception { @@ -69,14 +69,14 @@ public class TestSimpleTable { final SimpleTable test = new SimpleTable(); test.data = TestSimpleTable.DATA_INJECTED; final SimpleTable insertedData = DataAccess.insert(test); - + Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final SimpleTable retrieve = DataAccess.get(SimpleTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -85,13 +85,13 @@ public class TestSimpleTable { Assertions.assertNull(retrieve.updatedAt); TestSimpleTable.idOfTheObject = retrieve.id; } - + @Order(2) @Test public void testReadAllValuesUnreadable() throws Exception { // check the full values final SimpleTable retrieve = DataAccess.get(SimpleTable.class, TestSimpleTable.idOfTheObject, new QueryOptions(QueryOptions.SQL_NOT_READ_DISABLE, true)); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(TestSimpleTable.idOfTheObject, retrieve.id); @@ -104,7 +104,7 @@ public class TestSimpleTable { // Assertions.assertTrue(retrieve.updatedAt.after(this.startAction)); Assertions.assertEquals(retrieve.createdAt, retrieve.updatedAt); } - + @Order(3) @Test public void testUpdateData() throws Exception { @@ -113,7 +113,7 @@ public class TestSimpleTable { } else { Thread.sleep(Duration.ofMillis(15)); } - + // Delete the entry: final SimpleTable test = new SimpleTable(); test.data = TestSimpleTable.DATA_INJECTED_2; @@ -128,7 +128,7 @@ public class TestSimpleTable { LOGGER.info("created @ {} updated @ {}", retrieve.createdAt, retrieve.updatedAt); Assertions.assertTrue(retrieve.updatedAt.after(retrieve.createdAt)); } - + @Order(4) @Test public void testDeleteTheObject() throws Exception { @@ -137,17 +137,17 @@ public class TestSimpleTable { final SimpleTable retrieve = DataAccess.get(SimpleTable.class, TestSimpleTable.idOfTheObject); Assertions.assertNull(retrieve); } - + @Order(5) @Test public void testReadDeletedObject() throws Exception { - + // check if we set get deleted element final SimpleTable retrieve = DataAccess.get(SimpleTable.class, TestSimpleTable.idOfTheObject, new QueryOptions(QueryOptions.SQL_DELETED_DISABLE, true)); Assertions.assertNull(retrieve); - + } - + @Order(6) @Test public void testReadAllValuesUnreadableOfDeletedObject() throws Exception { @@ -155,6 +155,6 @@ public class TestSimpleTable { final SimpleTable retrieve = DataAccess.get(SimpleTable.class, TestSimpleTable.idOfTheObject, new QueryOptions(QueryOptions.SQL_DELETED_DISABLE, true, QueryOptions.SQL_NOT_READ_DISABLE, true)); Assertions.assertNull(retrieve); - + } } diff --git a/test/src/test/kar/archidata/TestSimpleTableSoftDelete.java b/test/src/test/kar/archidata/TestSimpleTableSoftDelete.java index 58c126c..37a0184 100644 --- a/test/src/test/kar/archidata/TestSimpleTableSoftDelete.java +++ b/test/src/test/kar/archidata/TestSimpleTableSoftDelete.java @@ -33,30 +33,30 @@ public class TestSimpleTableSoftDelete { private static final String DATA_INJECTED_2 = "qsdfqsdfqsdfsqdf"; private static Long idOfTheObject = null; private static Timestamp startAction = null; - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Clear the static test: idOfTheObject = null; startAction = null; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testTableInsertAndRetrieve() throws Exception { @@ -69,14 +69,14 @@ public class TestSimpleTableSoftDelete { final SimpleTableSoftDelete test = new SimpleTableSoftDelete(); test.data = TestSimpleTableSoftDelete.DATA_INJECTED; final SimpleTableSoftDelete insertedData = DataAccess.insert(test); - + Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final SimpleTableSoftDelete retrieve = DataAccess.get(SimpleTableSoftDelete.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -86,13 +86,13 @@ public class TestSimpleTableSoftDelete { Assertions.assertNull(retrieve.deleted); TestSimpleTableSoftDelete.idOfTheObject = retrieve.id; } - + @Order(2) @Test public void testReadAllValuesUnreadable() throws Exception { // check the full values final SimpleTableSoftDelete retrieve = DataAccess.get(SimpleTableSoftDelete.class, TestSimpleTableSoftDelete.idOfTheObject, new QueryOptions(QueryOptions.SQL_NOT_READ_DISABLE, true)); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(TestSimpleTableSoftDelete.idOfTheObject, retrieve.id); @@ -107,7 +107,7 @@ public class TestSimpleTableSoftDelete { Assertions.assertNotNull(retrieve.deleted); Assertions.assertEquals(false, retrieve.deleted); } - + @Order(3) @Test public void testUpdateData() throws Exception { @@ -116,7 +116,7 @@ public class TestSimpleTableSoftDelete { } else { Thread.sleep(Duration.ofMillis(15)); } - + // Delete the entry: final SimpleTableSoftDelete test = new SimpleTableSoftDelete(); test.data = TestSimpleTableSoftDelete.DATA_INJECTED_2; @@ -134,7 +134,7 @@ public class TestSimpleTableSoftDelete { Assertions.assertNotNull(retrieve.deleted); Assertions.assertEquals(false, retrieve.deleted); } - + @Order(4) @Test public void testSoftDeleteTheObject() throws Exception { @@ -148,11 +148,11 @@ public class TestSimpleTableSoftDelete { final SimpleTableSoftDelete retrieve = DataAccess.get(SimpleTableSoftDelete.class, TestSimpleTableSoftDelete.idOfTheObject); Assertions.assertNull(retrieve); } - + @Order(5) @Test public void testReadDeletedObject() throws Exception { - + // check if we set get deleted element final SimpleTableSoftDelete retrieve = DataAccess.get(SimpleTableSoftDelete.class, TestSimpleTableSoftDelete.idOfTheObject, new QueryOptions(QueryOptions.SQL_DELETED_DISABLE, true)); Assertions.assertNotNull(retrieve); @@ -162,9 +162,9 @@ public class TestSimpleTableSoftDelete { Assertions.assertNull(retrieve.createdAt); Assertions.assertNull(retrieve.updatedAt); Assertions.assertNull(retrieve.deleted); - + } - + @Order(6) @Test public void testReadAllValuesUnreadableOfDeletedObject() throws Exception { @@ -181,6 +181,6 @@ public class TestSimpleTableSoftDelete { Assertions.assertTrue(retrieve.updatedAt.after(retrieve.createdAt)); Assertions.assertNotNull(retrieve.deleted); Assertions.assertEquals(true, retrieve.deleted); - + } } diff --git a/test/src/test/kar/archidata/TestTypeEnum1.java b/test/src/test/kar/archidata/TestTypeEnum1.java index 2b574ca..0ed3fef 100644 --- a/test/src/test/kar/archidata/TestTypeEnum1.java +++ b/test/src/test/kar/archidata/TestTypeEnum1.java @@ -26,26 +26,26 @@ import test.kar.archidata.model.TypesEnum1; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestTypeEnum1 { final static private Logger LOGGER = LoggerFactory.getLogger(TestTypeEnum1.class); - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testCreateTable() throws Exception { @@ -66,10 +66,10 @@ public class TestTypeEnum1 { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesEnum1 retrieve = DataAccess.get(TypesEnum1.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); diff --git a/test/src/test/kar/archidata/TestTypeEnum2.java b/test/src/test/kar/archidata/TestTypeEnum2.java index f09ba99..f42a69d 100644 --- a/test/src/test/kar/archidata/TestTypeEnum2.java +++ b/test/src/test/kar/archidata/TestTypeEnum2.java @@ -26,26 +26,26 @@ import test.kar.archidata.model.TypesEnum2; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestTypeEnum2 { final static private Logger LOGGER = LoggerFactory.getLogger(TestTypeEnum2.class); - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testCreateTable() throws Exception { @@ -66,7 +66,7 @@ public class TestTypeEnum2 { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: TypesEnum2 retrieve = DataAccess.get(TypesEnum2.class, insertedData.id); Assertions.assertNotNull(retrieve); @@ -79,18 +79,18 @@ public class TestTypeEnum2 { retrieve.data = null; int ret = DataAccess.update(retrieve, retrieve.id); Assertions.assertEquals(1, ret); - + // get new data retrieve = DataAccess.get(TypesEnum2.class, insertedData.id); Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); Assertions.assertNull(retrieve.data); - + // Remove the data ret = DataAccess.delete(TypesEnum2.class, insertedData.id); Assertions.assertEquals(1, ret); - + // Get the removed data: retrieve = DataAccess.get(TypesEnum2.class, insertedData.id); Assertions.assertNull(retrieve); @@ -106,10 +106,10 @@ public class TestTypeEnum2 { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesEnum2 retrieve = DataAccess.get(TypesEnum2.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); diff --git a/test/src/test/kar/archidata/TestTypes.java b/test/src/test/kar/archidata/TestTypes.java index 84190c5..cc1f2c9 100644 --- a/test/src/test/kar/archidata/TestTypes.java +++ b/test/src/test/kar/archidata/TestTypes.java @@ -30,26 +30,26 @@ import test.kar.archidata.model.TypesTable; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class TestTypes { final static private Logger LOGGER = LoggerFactory.getLogger(TestTypes.class); - + @BeforeAll public static void configureWebServer() throws Exception { ConfigBaseVariable.dbType = "sqlite"; ConfigBaseVariable.dbHost = "memory"; // for test we need to connect all time the DB ConfigBaseVariable.dbKeepConnected = "true"; - + // Connect the dataBase... final DBEntry entry = DBEntry.createInterface(GlobalConfiguration.dbConfig); entry.connect(); } - + @AfterAll public static void removeDataBase() throws IOException { LOGGER.info("Remove the test db"); DBEntry.closeAllForceMode(); ConfigBaseVariable.clearAllValue(); } - + @Order(1) @Test public void testCreateTable() throws Exception { @@ -70,10 +70,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -82,7 +82,7 @@ public class TestTypes { DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(3) @Test public void testLong() throws Exception { @@ -93,10 +93,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -105,7 +105,7 @@ public class TestTypes { DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(4) @Test public void testfloat() throws Exception { @@ -116,10 +116,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -139,16 +139,16 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); Assertions.assertNotNull(retrieve.doubleData); Assertions.assertEquals(insertedData.doubleData, retrieve.doubleData); - + DataAccess.delete(TypesTable.class, insertedData.id); } @@ -162,10 +162,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -185,10 +185,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -208,10 +208,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -231,10 +231,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -243,7 +243,7 @@ public class TestTypes { DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(10) @Test public void testTimeStamp() throws Exception { @@ -255,22 +255,22 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); LOGGER.debug("Retreive Timestamp = {}", retrieve.timeStampData); Assertions.assertNotNull(retrieve.timeStampData); // Can not compare the exact timestamp due to aproximation and model of storing data : - //Assertions.assertEquals(insertedData.timeStampData, retrieve.timeStampData); + // Assertions.assertEquals(insertedData.timeStampData, retrieve.timeStampData); Assertions.assertEquals(insertedData.timeStampData.toInstant().toEpochMilli(), retrieve.timeStampData.toInstant().toEpochMilli()); DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(11) @Test public void testDate() throws Exception { @@ -282,10 +282,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -295,7 +295,7 @@ public class TestTypes { DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(12) @Test public void testLocalDate() throws Exception { @@ -307,10 +307,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -320,7 +320,7 @@ public class TestTypes { DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(13) @Test public void testLocalTime() throws Exception { @@ -332,10 +332,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -360,10 +360,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -382,7 +382,7 @@ public class TestTypes { // Get new data final TypesTable retrieve2 = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve2); Assertions.assertNotNull(retrieve2.id); Assertions.assertEquals(insertedData.id, retrieve2.id); @@ -401,7 +401,7 @@ public class TestTypes { // Get new data final TypesTable retrieve3 = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve3); Assertions.assertNotNull(retrieve3.id); Assertions.assertEquals(insertedData.id, retrieve3.id); @@ -411,10 +411,10 @@ public class TestTypes { // note: retreive2 Assertions.assertEquals(retrieve2.booleanData, retrieve3.booleanData); Assertions.assertNull(retrieve3.varcharData); - + DataAccess.delete(TypesTable.class, insertedData.id); } - + @Order(15) @Test public void testTextUpdateJson() throws Exception { @@ -427,10 +427,10 @@ public class TestTypes { Assertions.assertNotNull(insertedData); Assertions.assertNotNull(insertedData.id); Assertions.assertTrue(insertedData.id >= 0); - + // Try to retrieve all the data: final TypesTable retrieve = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve); Assertions.assertNotNull(retrieve.id); Assertions.assertEquals(insertedData.id, retrieve.id); @@ -453,7 +453,7 @@ public class TestTypes { // Get new data final TypesTable retrieve2 = DataAccess.get(TypesTable.class, insertedData.id); - + Assertions.assertNotNull(retrieve2); Assertions.assertNotNull(retrieve2.id); Assertions.assertEquals(insertedData.id, retrieve2.id); @@ -462,7 +462,7 @@ public class TestTypes { Assertions.assertNotNull(retrieve2.booleanData); Assertions.assertEquals(retrieve.booleanData, retrieve2.booleanData); Assertions.assertNull(retrieve2.varcharData); - + DataAccess.delete(TypesTable.class, insertedData.id); } diff --git a/test/src/test/kar/archidata/model/Enum2ForTest.java b/test/src/test/kar/archidata/model/Enum2ForTest.java index 8c4b6f2..03b05af 100644 --- a/test/src/test/kar/archidata/model/Enum2ForTest.java +++ b/test/src/test/kar/archidata/model/Enum2ForTest.java @@ -2,9 +2,9 @@ package test.kar.archidata.model; public enum Enum2ForTest { ENUM_VALUE_1(5), ENUM_VALUE_2(6), ENUM_VALUE_3(55), ENUM_VALUE_4(84241), ENUM_VALUE_5(54546); - + private final int value; - + private Enum2ForTest(final int value) { this.value = value; } diff --git a/test/src/test/kar/archidata/model/SerializeAsJson.java b/test/src/test/kar/archidata/model/SerializeAsJson.java index 389229f..ba5f8e9 100644 --- a/test/src/test/kar/archidata/model/SerializeAsJson.java +++ b/test/src/test/kar/archidata/model/SerializeAsJson.java @@ -4,8 +4,8 @@ import org.kar.archidata.annotation.DataJson; import org.kar.archidata.model.GenericData; public class SerializeAsJson extends GenericData { - + @DataJson public SimpleTable data; - + } \ No newline at end of file diff --git a/test/src/test/kar/archidata/model/SimpleTable.java b/test/src/test/kar/archidata/model/SimpleTable.java index 94d3783..2a9c642 100644 --- a/test/src/test/kar/archidata/model/SimpleTable.java +++ b/test/src/test/kar/archidata/model/SimpleTable.java @@ -4,5 +4,5 @@ import org.kar.archidata.model.GenericData; public class SimpleTable extends GenericData { public String data; - + } \ No newline at end of file diff --git a/test/src/test/kar/archidata/model/TypeManyToManyRemote.java b/test/src/test/kar/archidata/model/TypeManyToManyRemote.java index 8546c94..9b10ee0 100644 --- a/test/src/test/kar/archidata/model/TypeManyToManyRemote.java +++ b/test/src/test/kar/archidata/model/TypeManyToManyRemote.java @@ -10,6 +10,6 @@ public class TypeManyToManyRemote { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public String data; } \ No newline at end of file diff --git a/test/src/test/kar/archidata/model/TypeManyToManyRoot.java b/test/src/test/kar/archidata/model/TypeManyToManyRoot.java index 2d1a5bb..c2f07e9 100644 --- a/test/src/test/kar/archidata/model/TypeManyToManyRoot.java +++ b/test/src/test/kar/archidata/model/TypeManyToManyRoot.java @@ -16,7 +16,7 @@ public class TypeManyToManyRoot { public Long id = null; public String otherData; - + @ManyToMany(fetch = FetchType.LAZY, targetEntity = TypeManyToManyRemote.class) public List remote; } diff --git a/test/src/test/kar/archidata/model/TypeManyToManyRootExpand.java b/test/src/test/kar/archidata/model/TypeManyToManyRootExpand.java index 00f5db8..d3a1376 100644 --- a/test/src/test/kar/archidata/model/TypeManyToManyRootExpand.java +++ b/test/src/test/kar/archidata/model/TypeManyToManyRootExpand.java @@ -16,7 +16,7 @@ public class TypeManyToManyRootExpand { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public String otherData; @ManyToMany(fetch = FetchType.LAZY, targetEntity = TypeManyToManyRemote.class) diff --git a/test/src/test/kar/archidata/model/TypeManyToOneRemote.java b/test/src/test/kar/archidata/model/TypeManyToOneRemote.java index a933bb0..7491785 100644 --- a/test/src/test/kar/archidata/model/TypeManyToOneRemote.java +++ b/test/src/test/kar/archidata/model/TypeManyToOneRemote.java @@ -10,7 +10,7 @@ public class TypeManyToOneRemote { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public String data; - + } \ No newline at end of file diff --git a/test/src/test/kar/archidata/model/TypeManyToOneRoot.java b/test/src/test/kar/archidata/model/TypeManyToOneRoot.java index 1203cbc..d01cbd1 100644 --- a/test/src/test/kar/archidata/model/TypeManyToOneRoot.java +++ b/test/src/test/kar/archidata/model/TypeManyToOneRoot.java @@ -11,9 +11,9 @@ public class TypeManyToOneRoot { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public String otherData; - + @ManyToOne(targetEntity = TypeManyToOneRemote.class) @Column(nullable = false) public Long remoteId; diff --git a/test/src/test/kar/archidata/model/TypeManyToOneRootExpand.java b/test/src/test/kar/archidata/model/TypeManyToOneRootExpand.java index 12d42e6..8a1c20f 100644 --- a/test/src/test/kar/archidata/model/TypeManyToOneRootExpand.java +++ b/test/src/test/kar/archidata/model/TypeManyToOneRootExpand.java @@ -14,7 +14,7 @@ public class TypeManyToOneRootExpand { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public String otherData; @ManyToOne(fetch = FetchType.LAZY, targetEntity = TypeManyToOneRemote.class) diff --git a/test/src/test/kar/archidata/model/TypesEnum1.java b/test/src/test/kar/archidata/model/TypesEnum1.java index e50dcd3..50770cd 100644 --- a/test/src/test/kar/archidata/model/TypesEnum1.java +++ b/test/src/test/kar/archidata/model/TypesEnum1.java @@ -10,6 +10,6 @@ public class TypesEnum1 { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nullable = false, unique = true) public Long id = null; - + public Enum1ForTest data; } \ No newline at end of file diff --git a/tools/configure_precommit.bash b/tools/configure_precommit.bash new file mode 100755 index 0000000..599a32a --- /dev/null +++ b/tools/configure_precommit.bash @@ -0,0 +1,9 @@ +#!/bin/bash +set +e +ln -sf ../../tools/pre-commit-hook .git/hooks/pre-commit +if [[ 0 != $? ]]; then + echo "pre-commit hooks: [ERROR] Cannot configure" + exit 1 +else + echo "pre-commit hooks: [OK]" +fi diff --git a/tools/pre-commit b/tools/pre-commit new file mode 100755 index 0000000..fa9db81 --- /dev/null +++ b/tools/pre-commit @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# get bash colors and styles here: +# http://misc.flogisoft.com/bash/tip_colors_and_formatting +C_RESET='\e[0m' +C_RED='\e[31m' +C_GREEN='\e[32m' +C_YELLOW='\e[33m' + +function __run() #(step, name, cmd) +{ + local color output exitcode + + printf "${C_YELLOW}[%s]${C_RESET} %-20s" "$1" "$2" + output=$(eval "$3" 2>&1) + exitcode=$? + + if [[ 0 == $exitcode ]]; then + echo -e "${C_GREEN}OK!${C_RESET}" + else + echo -e "${C_RED}NOK! (${exitcode})${C_RESET}\n\n$output" + exit 1 + fi +} + +__run "1/1" "Check JAVA code format" "mvn formatter:verify" +