diff --git a/app/server/appsmith-git/src/main/java/com/appsmith/git/constants/CommonConstants.java b/app/server/appsmith-git/src/main/java/com/appsmith/git/constants/CommonConstants.java index 6f5c953baf..d754266811 100644 --- a/app/server/appsmith-git/src/main/java/com/appsmith/git/constants/CommonConstants.java +++ b/app/server/appsmith-git/src/main/java/com/appsmith/git/constants/CommonConstants.java @@ -2,11 +2,13 @@ package com.appsmith.git.constants; public class CommonConstants { // This field will be useful when we migrate fields within JSON files (currently this will be useful for Git feature) - public static Integer fileFormatVersion = 2; + public static Integer fileFormatVersion = 3; public static String FILE_FORMAT_VERSION = "fileFormatVersion"; public static final String CANVAS = "canvas"; public static final String APPLICATION = "application"; public static final String THEME = "theme"; public static final String METADATA = "metadata"; public static final String JSON_EXTENSION = ".json"; + public static final String JS_EXTENSION = ".js"; + public static final String JS_BODY = "body"; } diff --git a/app/server/appsmith-git/src/main/java/com/appsmith/git/helpers/FileUtilsImpl.java b/app/server/appsmith-git/src/main/java/com/appsmith/git/helpers/FileUtilsImpl.java index 482209d31b..8cff88ef86 100644 --- a/app/server/appsmith-git/src/main/java/com/appsmith/git/helpers/FileUtilsImpl.java +++ b/app/server/appsmith-git/src/main/java/com/appsmith/git/helpers/FileUtilsImpl.java @@ -84,45 +84,67 @@ public class FileUtilsImpl implements FileInterface { private final Scheduler scheduler = Schedulers.boundedElastic(); /** - Application will be stored in the following structure: + Application will be stored in the following structure: - For v1: - repo_name - application.json - metadata.json - datasource - datasource1Name.json - datasource2Name.json - queries (Only requirement here is the filename should be unique) - action1_page1 - action2_page2 - jsobjects (Only requirement here is the filename should be unique) - jsobject1_page1 - jsobject2_page2 - pages - page1 - page2 + For v1: + repo_name + application.json + metadata.json + datasource + datasource1Name.json + datasource2Name.json + queries (Only requirement here is the filename should be unique) + action1_page1 + action2_page2 + jsobjects (Only requirement here is the filename should be unique) + jsobject1_page1 + jsobject2_page2 + pages + page1 + page2 - For v2: - repo_name - application.json - metadata.json - theme - publishedTheme.json - editModeTheme.json - pages - page1 - canvas.json - queries - Query1.json - Query2.json - jsobjects - JSObject1.json - page2 - page3 - datasources - datasource1.json - datasource2.json + For v2: + repo_name + application.json + metadata.json + theme + publishedTheme.json + editModeTheme.json + pages + page1 + canvas.json + queries + Query1.json + Query2.json + jsobjects + JSObject1.json + page2 + page3 + datasources + datasource1.json + datasource2.json + + For v3: + repo_name + application.json + metadata.json + theme + publishedTheme.json + editModeTheme.json + pages + page1 + canvas.json + queries + Query1.json + jsobjects + JSObject1 + JSObject1.js + Metadata.json + page2 + page3 + datasources + datasource1.json + datasource2.json */ @@ -167,15 +189,15 @@ public class FileUtilsImpl implements FileInterface { deleteDirectory(baseRepo.resolve(ACTION_COLLECTION_DIRECTORY)); // Save application - saveFile(applicationGitReference.getApplication(), baseRepo.resolve(CommonConstants.APPLICATION + CommonConstants.JSON_EXTENSION), gson); + saveResource(applicationGitReference.getApplication(), baseRepo.resolve(CommonConstants.APPLICATION + CommonConstants.JSON_EXTENSION), gson); // Save application metadata JsonObject metadata = gson.fromJson(gson.toJson(applicationGitReference.getMetadata()), JsonObject.class); metadata.addProperty(CommonConstants.FILE_FORMAT_VERSION, CommonConstants.fileFormatVersion); - saveFile(metadata, baseRepo.resolve(CommonConstants.METADATA + CommonConstants.JSON_EXTENSION), gson); + saveResource(metadata, baseRepo.resolve(CommonConstants.METADATA + CommonConstants.JSON_EXTENSION), gson); // Save application theme - saveFile(applicationGitReference.getTheme(), baseRepo.resolve(CommonConstants.THEME + CommonConstants.JSON_EXTENSION), gson); + saveResource(applicationGitReference.getTheme(), baseRepo.resolve(CommonConstants.THEME + CommonConstants.JSON_EXTENSION), gson); // Save pages Path pageDirectory = baseRepo.resolve(PAGE_DIRECTORY); @@ -187,7 +209,7 @@ public class FileUtilsImpl implements FileInterface { Path pageSpecificDirectory = pageDirectory.resolve(pageName); Boolean isResourceUpdated = updatedResources.get(PAGE_LIST).contains(pageName); if(Boolean.TRUE.equals(isResourceUpdated)) { - saveFile(pageResource.getValue(), pageSpecificDirectory.resolve(CommonConstants.CANVAS + CommonConstants.JSON_EXTENSION), gson); + saveResource(pageResource.getValue(), pageSpecificDirectory.resolve(CommonConstants.CANVAS + CommonConstants.JSON_EXTENSION), gson); } validPages.add(pageName); } @@ -206,7 +228,7 @@ public class FileUtilsImpl implements FileInterface { Path jsLibSpecificFile = jsLibDirectory.resolve(fileNameWithExtension); if (isResourceUpdated) { - saveFile(jsLibEntry.getValue(), jsLibSpecificFile, gson); + saveResource(jsLibEntry.getValue(), jsLibSpecificFile, gson); } validJsLibs.add(fileNameWithExtension); }); @@ -239,7 +261,7 @@ public class FileUtilsImpl implements FileInterface { } validActionsMap.get(pageName).add(queryName + CommonConstants.JSON_EXTENSION); if(Boolean.TRUE.equals(isResourceUpdated)) { - saveFile( + saveResource( resource.getValue(), pageSpecificDirectory.resolve(ACTION_DIRECTORY).resolve(queryName + CommonConstants.JSON_EXTENSION), gson @@ -257,37 +279,42 @@ public class FileUtilsImpl implements FileInterface { // Save JSObjects for (Map.Entry resource : applicationGitReference.getActionCollections().entrySet()) { // JSObjectName_pageName => nomenclature for the keys - // TODO - // JSObjectName => for app level JSObjects, this is not implemented yet + // TODO JSObjectName => for app level JSObjects, this is not implemented yet String[] names = resource.getKey().split(NAME_SEPARATOR); if (names.length > 1 && StringUtils.hasLength(names[1])) { final String actionCollectionName = names[0]; final String pageName = names[1]; Path pageSpecificDirectory = pageDirectory.resolve(pageName); + Path actionCollectionSpecificDirectory = pageSpecificDirectory.resolve(ACTION_COLLECTION_DIRECTORY); if(!validActionCollectionsMap.containsKey(pageName)) { validActionCollectionsMap.put(pageName, new HashSet<>()); } - validActionCollectionsMap.get(pageName).add(actionCollectionName + CommonConstants.JSON_EXTENSION); + validActionCollectionsMap.get(pageName).add(actionCollectionName); Boolean isResourceUpdated = updatedResources.get(ACTION_COLLECTION_LIST).contains(resource.getKey()); if(Boolean.TRUE.equals(isResourceUpdated)) { - saveFile( + saveActionCollection( resource.getValue(), - pageSpecificDirectory.resolve(ACTION_COLLECTION_DIRECTORY).resolve(actionCollectionName + CommonConstants.JSON_EXTENSION), + applicationGitReference.getActionCollectionBody().get(resource.getKey()), + actionCollectionName, + actionCollectionSpecificDirectory.resolve(actionCollectionName), gson ); + // Delete the resource from the old file structure v2 + deleteFile(actionCollectionSpecificDirectory.resolve(actionCollectionName + CommonConstants.JSON_EXTENSION)); } } } + // Verify if the old files are deleted validActionCollectionsMap.forEach((pageName, validActionCollectionNames) -> { Path pageSpecificDirectory = pageDirectory.resolve(pageName); - scanAndDeleteFileForDeletedResources(validActionCollectionNames, pageSpecificDirectory.resolve(ACTION_COLLECTION_DIRECTORY)); + scanAndDeleteDirectoryForDeletedResources(validActionCollectionNames, pageSpecificDirectory.resolve(ACTION_COLLECTION_DIRECTORY)); }); // Save datasources ref for (Map.Entry resource : applicationGitReference.getDatasources().entrySet()) { - saveFile(resource.getValue(), baseRepo.resolve(DATASOURCE_DIRECTORY).resolve(resource.getKey() + CommonConstants.JSON_EXTENSION), gson); + saveResource(resource.getValue(), baseRepo.resolve(DATASOURCE_DIRECTORY).resolve(resource.getKey() + CommonConstants.JSON_EXTENSION), gson); validFileNames.add(resource.getKey() + CommonConstants.JSON_EXTENSION); } // Scan datasource directory and delete any unwanted files if present @@ -307,19 +334,57 @@ public class FileUtilsImpl implements FileInterface { * @param gson * @return if the file operation is successful */ - private boolean saveFile(Object sourceEntity, Path path, Gson gson) { + private boolean saveResource(Object sourceEntity, Path path, Gson gson) { try { Files.createDirectories(path.getParent()); - try (BufferedWriter fileWriter = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { - gson.toJson(sourceEntity, fileWriter); - return true; - } + return writeToFile(sourceEntity, path, gson); } catch (IOException e) { log.debug(e.getMessage()); } return false; } + /** + * This method is used to write actionCollection specific resource to file system. We write the data in two steps + * 1. Actual js code + * 2. Metadata of the actionCollection + * @param sourceEntity the metadata of the action collection + * @param body actual js code written by the user + * @param resourceName name of the action collection + * @param path file path where the resource will be stored + * @param gson + * @return if the file operation is successful + */ + private boolean saveActionCollection(Object sourceEntity, String body, String resourceName, Path path, Gson gson) { + try { + Files.createDirectories(path); + // Write the js Object body to .js file to make conflict handling easier + Path bodyPath = path.resolve(resourceName + CommonConstants.JS_EXTENSION); + writeStringToFile(body, bodyPath); + + // Write metadata for the jsObject + Path metadataPath = path.resolve(CommonConstants.METADATA + CommonConstants.JSON_EXTENSION); + return writeToFile(sourceEntity, metadataPath, gson); + } catch (IOException e) { + log.debug(e.getMessage()); + } + return false; + } + + private boolean writeStringToFile(String data, Path path) throws IOException { + try (BufferedWriter fileWriter = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { + fileWriter.write(data); + return true; + } + } + + private boolean writeToFile(Object sourceEntity, Path path, Gson gson) throws IOException { + try (BufferedWriter fileWriter = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { + gson.toJson(sourceEntity, fileWriter); + return true; + } + } + /** * This method will delete the JSON resource available in local git directory on subsequent commit made after the * deletion of respective resource from DB @@ -417,8 +482,8 @@ public class FileUtilsImpl implements FileInterface { // Instance creator is required while de-serialising using Gson as key instance can't be invoked with // no-args constructor Gson gson = new GsonBuilder() - .registerTypeAdapter(DatasourceStructure.Key.class, new DatasourceStructure.KeyInstanceCreator()) - .create(); + .registerTypeAdapter(DatasourceStructure.Key.class, new DatasourceStructure.KeyInstanceCreator()) + .create(); ApplicationGitReference applicationGitReference = fetchApplicationReference(baseRepoPath, gson); processStopwatch.stopAndLogTimeInMillis(); @@ -522,6 +587,42 @@ public class FileUtilsImpl implements FileInterface { return resource; } + /** + * This method will read the content of the file as a plain text and does not apply the gson to json transformation + * @param filePath file path for files on which read operation will be performed + * @return content of the file in the path + */ + private String readFileAsString(Path filePath) { + String data = ""; + try { + data = FileUtils.readFileToString(filePath.toFile(), "UTF-8"); + } catch (IOException e) { + log.error(" Error while reading the file from git repo {0} ", e.getMessage()); + } + return data; + } + + /** + * This method is to read the content for action and actionCollection or any nested resources which has the new structure - v3 + * Where the user queries and the metadata is split into to different files + * @param directoryPath file path for files on which read operation will be performed + * @return resources stored in the directory + */ + private Map readActionCollection(Path directoryPath, Gson gson, String keySuffix, Map actionCollectionBodyMap) { + Map resource = new HashMap<>(); + File directory = directoryPath.toFile(); + if (directory.isDirectory()) { + for (File dirFile : Objects.requireNonNull(directory.listFiles())) { + String resourceName = dirFile.getName(); + String body = readFileAsString(directoryPath.resolve(resourceName).resolve( resourceName + CommonConstants.JS_EXTENSION)); + Object file = readFile(directoryPath.resolve(resourceName).resolve( CommonConstants.METADATA + CommonConstants.JSON_EXTENSION), gson); + actionCollectionBodyMap.put(resourceName + keySuffix, body); + resource.put(resourceName + keySuffix, file); + } + } + return resource; + } + private ApplicationGitReference fetchApplicationReference(Path baseRepoPath, Gson gson) { ApplicationGitReference applicationGitReference = new ApplicationGitReference(); // Extract application metadata from the json @@ -549,26 +650,8 @@ public class FileUtilsImpl implements FileInterface { break; case 2: - // Extract pages and nested actions and actionCollections - File directory = pageDirectory.toFile(); - Map pageMap = new HashMap<>(); - Map actionMap = new HashMap<>(); - Map actionCollectionMap = new HashMap<>(); - // TODO same approach should be followed for modules(app level actions, actionCollections, widgets etc) - if (directory.isDirectory()) { - // Loop through all the directories and nested directories inside the pages directory to extract - // pages, actions and actionCollections from the JSON files - for (File page : Objects.requireNonNull(directory.listFiles())) { - pageMap.put(page.getName(), readFile(page.toPath().resolve(CommonConstants.CANVAS + CommonConstants.JSON_EXTENSION), gson)); - actionMap.putAll(readFiles(page.toPath().resolve(ACTION_DIRECTORY), gson, page.getName())); - actionCollectionMap.putAll(readFiles(page.toPath().resolve(ACTION_COLLECTION_DIRECTORY), gson, page.getName())); - } - } - applicationGitReference.setActions(actionMap); - applicationGitReference.setActionCollections(actionCollectionMap); - applicationGitReference.setPages(pageMap); - // Extract datasources - applicationGitReference.setDatasources(readFiles(baseRepoPath.resolve(DATASOURCE_DIRECTORY), gson, "")); + case 3: + updateGitApplicationReference(baseRepoPath, gson, applicationGitReference, pageDirectory, fileFormatVersion); break; default: @@ -582,6 +665,36 @@ public class FileUtilsImpl implements FileInterface { return applicationGitReference; } + private void updateGitApplicationReference(Path baseRepoPath, Gson gson, ApplicationGitReference applicationGitReference, Path pageDirectory, int fileFormatVersion) { + // Extract pages and nested actions and actionCollections + File directory = pageDirectory.toFile(); + Map pageMap = new HashMap<>(); + Map actionMap = new HashMap<>(); + Map actionBodyMap = new HashMap<>(); + Map actionCollectionMap = new HashMap<>(); + Map actionCollectionBodyMap = new HashMap<>(); + // TODO same approach should be followed for modules(app level actions, actionCollections, widgets etc) + if (directory.isDirectory()) { + // Loop through all the directories and nested directories inside the pages directory to extract + // pages, actions and actionCollections from the JSON files + for (File page : Objects.requireNonNull(directory.listFiles())) { + pageMap.put(page.getName(), readFile(page.toPath().resolve(CommonConstants.CANVAS + CommonConstants.JSON_EXTENSION), gson)); + actionMap.putAll(readFiles(page.toPath().resolve(ACTION_DIRECTORY), gson, page.getName())); + if (fileFormatVersion == 3) { + actionCollectionMap.putAll(readActionCollection(page.toPath().resolve(ACTION_COLLECTION_DIRECTORY), gson, page.getName(), actionCollectionBodyMap)); + } else { + actionCollectionMap.putAll(readFiles(page.toPath().resolve(ACTION_COLLECTION_DIRECTORY), gson, page.getName())); + } + } + } + applicationGitReference.setActions(actionMap); + applicationGitReference.setActionCollections(actionCollectionMap); + applicationGitReference.setActionCollectionBody(actionCollectionBodyMap); + applicationGitReference.setPages(pageMap); + // Extract datasources + applicationGitReference.setDatasources(readFiles(baseRepoPath.resolve(DATASOURCE_DIRECTORY), gson, "")); + } + private Integer getFileFormatVersion(Object metadata) { if (metadata == null) { return 1; diff --git a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ApplicationGitReference.java b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ApplicationGitReference.java index 405a7bcb05..91ee23ddde 100644 --- a/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ApplicationGitReference.java +++ b/app/server/appsmith-interfaces/src/main/java/com/appsmith/external/models/ApplicationGitReference.java @@ -19,6 +19,7 @@ public class ApplicationGitReference { Object theme; Map actions; Map actionCollections; + Map actionCollectionBody; Map pages; Map datasources; Map jsLibraries; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/ApplicationTemplateControllerCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/ApplicationTemplateControllerCE.java index 9e9ad013e9..1fb74765da 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/ApplicationTemplateControllerCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/ApplicationTemplateControllerCE.java @@ -1,7 +1,6 @@ package com.appsmith.server.controllers.ce; import com.appsmith.server.constants.FieldName; -import com.appsmith.server.domains.Application; import com.appsmith.server.dtos.ApplicationImportDTO; import com.appsmith.server.dtos.ApplicationTemplate; import com.appsmith.server.dtos.ResponseDTO; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/GitControllerCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/GitControllerCE.java index a658cb2742..910cc3938b 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/GitControllerCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/controllers/ce/GitControllerCE.java @@ -36,8 +36,6 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import reactor.core.publisher.Mono; -import java.util.ArrayList; -import java.util.EnumSet; import java.util.List; import java.util.Map; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ActionCollection.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ActionCollection.java index ebc2f76141..532cfdcb39 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ActionCollection.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ActionCollection.java @@ -1,7 +1,7 @@ package com.appsmith.server.domains; -import com.appsmith.external.models.BaseDomain; import com.appsmith.server.dtos.ActionCollectionDTO; +import com.appsmith.external.models.BaseDomain; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java index 093979d5f9..4975fa2ddf 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ActionCollectionDTO.java @@ -1,13 +1,13 @@ package com.appsmith.server.dtos; +import com.appsmith.server.constants.FieldName; +import com.appsmith.server.exceptions.AppsmithError; +import com.appsmith.external.exceptions.ErrorDTO; import com.appsmith.external.models.ActionDTO; import com.appsmith.external.models.DefaultResources; import com.appsmith.external.models.JSValue; -import com.appsmith.server.constants.FieldName; -import com.appsmith.server.domains.ActionCollection; import com.appsmith.external.models.PluginType; -import com.appsmith.server.exceptions.AppsmithError; -import com.appsmith.external.exceptions.ErrorDTO; +import com.appsmith.server.domains.ActionCollection; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/GitFileUtils.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/GitFileUtils.java index 1cf7666884..5b942faa88 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/GitFileUtils.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/GitFileUtils.java @@ -194,6 +194,7 @@ public class GitFileUtils { // Insert JSOObjects and also assign the keys which later will be used for saving the resource in actual filepath // JSObjectName_pageName => nomenclature for the keys + Map resourceMapBody = new HashMap<>(); applicationJson .getActionCollectionList() .stream() @@ -207,9 +208,13 @@ public class GitFileUtils { : actionCollection.getPublishedCollection().getName() + NAME_SEPARATOR + actionCollection.getPublishedCollection().getPageId(); removeUnwantedFieldFromActionCollection(actionCollection); + String body = actionCollection.getUnpublishedCollection().getBody() != null ? actionCollection.getUnpublishedCollection().getBody() : ""; + actionCollection.getUnpublishedCollection().setBody(null); + resourceMapBody.put(prefix, body); resourceMap.put(prefix, actionCollection); }); applicationReference.setActionCollections(new HashMap<>(resourceMap)); + applicationReference.setActionCollectionBody(new HashMap<>(resourceMapBody)); applicationReference.setUpdatedResources(updatedResources); resourceMap.clear(); @@ -401,10 +406,17 @@ public class GitFileUtils { if (CollectionUtils.isNullOrEmpty(applicationReference.getActionCollections())) { applicationJson.setActionCollectionList(new ArrayList<>()); } else { + Map actionCollectionBody = applicationReference.getActionCollectionBody(); List actionCollections = getApplicationResource(applicationReference.getActionCollections(), ActionCollection.class); // Remove null values if present org.apache.commons.collections.CollectionUtils.filter(actionCollections, PredicateUtils.notNullPredicate()); actionCollections.forEach(actionCollection -> { + // Set the js object body to the unpublished collection + // Since file version v3 we are splitting the js object code and metadata separately + String keyName = actionCollection.getUnpublishedCollection().getName() + actionCollection.getUnpublishedCollection().getPageId(); + if (actionCollectionBody!= null && actionCollectionBody.containsKey(keyName)) { + actionCollection.getUnpublishedCollection().setBody(actionCollectionBody.get(keyName)); + } // As we are publishing the app and then committing to git we expect the published and unpublished // actionCollectionDTO will be same, so we create a deep copy for the published version for // actionCollection from unpublishedActionCollectionDTO diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CommentServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CommentServiceCEImpl.java index 57586b7593..3703a9a596 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CommentServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CommentServiceCEImpl.java @@ -59,9 +59,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import static com.appsmith.server.acl.AclPermission.MANAGE_PAGES; import static com.appsmith.server.acl.AclPermission.READ_COMMENTS; -import static com.appsmith.server.acl.AclPermission.READ_PAGES; import static com.appsmith.server.acl.AclPermission.READ_THREADS; import static com.appsmith.server.constants.CommentConstants.APPSMITH_BOT_NAME; import static com.appsmith.server.constants.CommentConstants.APPSMITH_BOT_USERNAME; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/GoogleRecaptchaServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/GoogleRecaptchaServiceCEImpl.java index da5828f498..437f0d715c 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/GoogleRecaptchaServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/GoogleRecaptchaServiceCEImpl.java @@ -3,11 +3,9 @@ package com.appsmith.server.services.ce; import com.appsmith.server.configurations.GoogleRecaptchaConfig; import com.appsmith.server.exceptions.AppsmithError; import com.appsmith.server.exceptions.AppsmithException; -import com.appsmith.server.services.CaptchaService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/LayoutServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/LayoutServiceCEImpl.java index 3732463d34..090143714e 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/LayoutServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/LayoutServiceCEImpl.java @@ -1,6 +1,5 @@ package com.appsmith.server.services.ce; -import com.appsmith.server.acl.AclPermission; import com.appsmith.server.constants.FieldName; import com.appsmith.server.domains.Layout; import com.appsmith.server.dtos.PageDTO; @@ -18,9 +17,6 @@ import reactor.core.publisher.Mono; import java.util.ArrayList; import java.util.List; -import static com.appsmith.server.acl.AclPermission.MANAGE_PAGES; -import static com.appsmith.server.acl.AclPermission.READ_PAGES; - @Slf4j public class LayoutServiceCEImpl implements LayoutServiceCE { diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/MarketplaceServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/MarketplaceServiceCEImpl.java index 2f5981ffbd..4e57d722ce 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/MarketplaceServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/MarketplaceServiceCEImpl.java @@ -6,12 +6,10 @@ import com.appsmith.server.configurations.CloudServicesConfig; import com.appsmith.server.dtos.ProviderPaginatedDTO; import com.appsmith.server.exceptions.AppsmithError; import com.appsmith.server.exceptions.AppsmithException; -import com.appsmith.server.services.MarketplaceService; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.util.StringUtils; diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/GitServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/GitServiceTest.java index 9b872d8cc6..2eac5191b9 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/GitServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/GitServiceTest.java @@ -10,9 +10,9 @@ import com.appsmith.external.models.Datasource; import com.appsmith.external.models.DatasourceConfiguration; import com.appsmith.external.models.DefaultResources; import com.appsmith.external.models.JSValue; -import com.appsmith.external.models.PluginType; import com.appsmith.server.constants.FieldName; import com.appsmith.server.domains.ActionCollection; +import com.appsmith.external.models.PluginType; import com.appsmith.server.domains.Application; import com.appsmith.server.domains.ApplicationPage; import com.appsmith.server.domains.GitApplicationMetadata;