release version 1.12.0

This commit is contained in:
2026-02-18 23:32:39 +03:00
parent 24ce86f470
commit 5d0e27b3e2
2858 changed files with 18366 additions and 113588 deletions

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>ru.entaxy.platform.integration</groupId>
<artifactId>applications</artifactId>
<version>1.11.0</version>
<version>1.12.0</version>
</parent>
<groupId>ru.entaxy.platform.integration.applications</groupId>
<artifactId>application-management</artifactId>

View File

@@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* application-management
* ==========
* Copyright (C) 2020 - 2025 EmDev LLC
* Copyright (C) 2020 - 2026 EmDev LLC
* ==========
* You may not use this file except in accordance with the License Terms of the Copyright
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property

View File

@@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* application-management
* ==========
* Copyright (C) 2020 - 2025 EmDev LLC
* Copyright (C) 2020 - 2026 EmDev LLC
* ==========
* You may not use this file except in accordance with the License Terms of the Copyright
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
@@ -122,7 +122,15 @@ public interface ProjectsMBean {
) throws Exception;
@Operation(desc = "Remove items from the project")
Map<String, List<String>> removeItems(
void removeItems(
@Parameter(name = "storage", desc = "Name of the storage") String storage,
@Parameter(name = "projectName", desc = "Name of the project") String projectName,
@Parameter(name = "projectVersion", desc = "Version of the project") String projectVersion,
@Parameter(name = "itemIds", desc = "Ids of the items") List<String> itemIds
) throws Exception;
@Operation(desc = "Gets objects that are required to remove the items")
List<Map<String, List<Map<String, String>>>> getRequiredForRemoval(
@Parameter(name = "storage", desc = "Name of the storage") String storage,
@Parameter(name = "projectName", desc = "Name of the project") String projectName,
@Parameter(name = "projectVersion", desc = "Version of the project") String projectVersion,

View File

@@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* application-management
* ==========
* Copyright (C) 2020 - 2025 EmDev LLC
* Copyright (C) 2020 - 2026 EmDev LLC
* ==========
* You may not use this file except in accordance with the License Terms of the Copyright
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property

View File

@@ -2,7 +2,7 @@
* ~~~~~~licensing~~~~~~
* application-management
* ==========
* Copyright (C) 2020 - 2025 EmDev LLC
* Copyright (C) 2020 - 2026 EmDev LLC
* ==========
* You may not use this file except in accordance with the License Terms of the Copyright
* Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
@@ -28,12 +28,7 @@ package ru.entaxy.platform.integration.applications.management.impl;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import javax.management.DynamicMBean;
@@ -54,6 +49,7 @@ import ru.entaxy.esb.resources.EntaxyResourceService;
import ru.entaxy.platform.base.objects.EntaxyObject;
import ru.entaxy.platform.base.support.CommonUtils;
import ru.entaxy.platform.base.support.JSONUtils;
import ru.entaxy.platform.config.runtime.ObjectConfig;
import ru.entaxy.platform.core.artifact.service.ArtifactService;
import ru.entaxy.platform.integration.applications.ApplicationManager;
import ru.entaxy.platform.integration.applications.ApplicationProjectItem;
@@ -63,6 +59,7 @@ import ru.entaxy.platform.integration.applications.EntaxyApplicationProjectVersi
import ru.entaxy.platform.integration.applications.descriptor.ApplicationRequirement;
import ru.entaxy.platform.integration.applications.impl.ServiceHelper;
import ru.entaxy.platform.integration.applications.impl.project.ApplicationProjectItemImpl;
import ru.entaxy.platform.integration.applications.impl.project.item.ObjectItemImpl;
import ru.entaxy.platform.integration.applications.item.project.EntaxyObjectItem;
import ru.entaxy.platform.integration.applications.management.ProjectsMBean;
import ru.entaxy.platform.objects.runtime.EntaxyRuntimeObject;
@@ -303,65 +300,79 @@ public class ProjectsMBeanImpl extends AnnotatedMBean<ProjectsMBean> implements
}
@Override
public Map<String, List<String>> removeItems(String storage, String projectName, String projectVersion, List<String> itemIds)
public void removeItems(String storage, String projectName, String projectVersion, List<String> itemIds)
throws Exception {
EntaxyApplicationProjectVersion version = getProjectVersion(storage, projectName, projectVersion);
List<ApplicationProjectItem> items = version.getItems().stream()
List<ApplicationProjectItem> itemsToRemove = version.getItems().stream()
.filter(item -> itemIds.contains(item.getId())).collect(Collectors.toList());
List<ApplicationProjectItem> itemsToRemove = new ArrayList<>();
Map<ApplicationProjectItem, List<ApplicationProjectItem>> itemsImpossibleToRemove = new HashMap<>();
for (ApplicationProjectItem item : items) {
List<ApplicationProjectItem> requiredBy = item.getRequiredBy();
if (requiredBy.isEmpty()) {
itemsToRemove.add(item);
} else {
List<ApplicationProjectItem> requiredLeft = requiredBy.stream()
.filter(requiredByItem -> !itemIds.contains(requiredByItem.getId()))
.collect(Collectors.toList());
if (requiredLeft.isEmpty()) {
itemsToRemove.add(item);
} else {
itemsImpossibleToRemove.put(item, requiredLeft);
}
}
}
List<String> itemIdsToRemove = itemsToRemove.stream()
.map(itemToRemove -> itemToRemove.getId()).collect(Collectors.toList());
do {
for (ApplicationProjectItem itemToRemove : itemsToRemove) {
version.removeItem(itemToRemove);
}
itemsToRemove = version.getItems().stream()
.filter(item -> itemIdsToRemove.contains(item.getId())).collect(Collectors.toList());
.filter(item -> itemIds.contains(item.getId())).collect(Collectors.toList());
} while (itemsToRemove.size() > 0);
if (itemsImpossibleToRemove.size() > 0) {
Map<String, List<String>> result = new HashMap<>();
for (ApplicationProjectItem itemToRemove : itemsImpossibleToRemove.keySet()) {
if (itemIds.contains(itemToRemove.getId())) {
version.removeItem(itemToRemove);
}
result.put(getIdOrDisplayName(itemToRemove),
itemsImpossibleToRemove.get(itemToRemove).stream()
.map(item -> getIdOrDisplayName(item)).collect(Collectors.toList()));
}
return result;
}
return new HashMap<>();
}
private String getIdOrDisplayName(ApplicationProjectItem item) {
String displayName = "";
if (EntaxyApplication.ITEM_TYPE.OBJECT.equals(item.getType())) {
displayName = ((EntaxyObjectItem) item).getObject().getDisplayName();
@Override
public List<Map<String, List<Map<String, String>>>> getRequiredForRemoval(String storage,
String projectName,
String projectVersion,
List<String> itemIds) throws Exception {
EntaxyApplicationProjectVersion version = getProjectVersion(storage, projectName, projectVersion);
return getRequiredForRemovalRecursive(version, itemIds);
}
private List<Map<String, List<Map<String, String>>>> getRequiredForRemovalRecursive(
EntaxyApplicationProjectVersion version, List<String> itemIds) throws Exception {
List<ApplicationProjectItem> items = version.getItems().stream()
.filter(item -> itemIds.contains(item.getId())).collect(Collectors.toList());
List<Map<String, List<Map<String, String>>>> requiredForRemoval = new ArrayList<>();
Set<String> extraIdsToRemoval = new HashSet<>();
for (ApplicationProjectItem item : items) {
List<EntaxyRuntimeObject> requiredForRemovalUnfiltered = item.getRequiredBy().stream()
.map(requiredByItem -> ((ObjectItemImpl) requiredByItem).getObject())
.collect(Collectors.toList());
if (item instanceof ObjectItemImpl) {
requiredForRemovalUnfiltered.addAll(((ObjectItemImpl) item).getObject().getColocatedObjects());
}
if (!requiredForRemovalUnfiltered.isEmpty()) {
List<EntaxyRuntimeObject> requiredForRemovalFiltered = requiredForRemovalUnfiltered.stream()
.distinct()
.filter(collocatedObject -> !itemIds.contains(collocatedObject.getObjectFullId()))
.collect(Collectors.toList());
extraIdsToRemoval.addAll(requiredForRemovalFiltered.stream()
.map(requiredForRemovalObject -> requiredForRemovalObject.getObjectFullId())
.collect(Collectors.toSet()));
if (!requiredForRemovalFiltered.isEmpty()) {
Map<String, List<Map<String, String>>> element = new HashMap<>();
element.put(item.getId(), requiredForRemovalFiltered.stream()
.map(requiredForRemovalObject -> objectIntoMap(requiredForRemovalObject))
.collect(Collectors.toList()));
requiredForRemoval.add(element);
}
}
}
return CommonUtils.isValid(displayName) ? displayName : item.getId();
if (extraIdsToRemoval.size() > 0) {
List<String> itemIdsToRemovalWithExtra = new ArrayList<>(itemIds);
itemIdsToRemovalWithExtra.addAll(extraIdsToRemoval.stream().collect(Collectors.toList()));
List<Map<String, List<Map<String, String>>>> requiredForRemovalExtra =
getRequiredForRemovalRecursive(version, itemIdsToRemovalWithExtra);
requiredForRemoval.addAll(requiredForRemovalExtra);
}
return requiredForRemoval;
}
@Override