[DBE-22433] Migrate to Kotlin UUID parsing in pasting to cell

Merge-request: IJ-MR-164801
Merged-by: Anvar Ramazanov <anvar.ramazanov@jetbrains.com>

GitOrigin-RevId: c020e55188186d57797cd91f181236d4e5fb2728
This commit is contained in:
Anvar Ramazanov
2025-06-10 10:03:39 +00:00
committed by intellij-monorepo-bot
parent 3d41059a17
commit 41fceba2c7
4 changed files with 51 additions and 19 deletions

View File

@@ -35,6 +35,8 @@ action.Console.TableResult.PasteFormat.detect=Detect
action.Console.TableResult.PasteFormat.single.value=Single Value
group.Console.TableResult.PasteFormat.text=Paste Format
group.Console.TableResult.PasteFormat.change.paste.format=Change Paste Format
group.Console.TableResult.PasteError.title=Error While Pasting
group.Console.TableResult.PasteError.multiple.text={0} errors occurred while pasting data
group.Console.TableResult.AutoRefresh.text=Auto-Refresh
action.Console.TableResult.ChangeCellEditorFileEncoding.text=Change Encoding\u2026
action.Console.TableResult.DeleteRows.text=Delete Selected Rows

View File

@@ -10,6 +10,7 @@ import com.intellij.database.run.ui.grid.editors.FormatsCache;
import com.intellij.database.run.ui.grid.editors.Formatter;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.Function;
import kotlin.uuid.Uuid;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -555,12 +556,7 @@ public abstract class DataConverter<V, T> {
@Override
protected @Nullable String reverseNotNull(@NotNull String value) {
try {
return UUID.fromString(value).toString();
}
catch (Exception ignore) {
}
return UUID.randomUUID().toString();
return Uuid.Companion.parse(value).toString();
}
@Override
@@ -577,13 +573,8 @@ public abstract class DataConverter<V, T> {
@Override
protected @Nullable UUID reverseNotNull(@NotNull String value) {
try {
return UUID.fromString(value);
}
catch (Exception ignore) {
}
return UUID.randomUUID();
}
return UuidConverters.toJavaUuid(Uuid.Companion.parse(value));
}
@Override
protected @Nullable String notNull(@NotNull UUID value) {

View File

@@ -0,0 +1,11 @@
package com.intellij.database.data.types
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
import kotlin.uuid.toJavaUuid
object UuidConverters {
@JvmStatic
@OptIn(ExperimentalUuidApi::class)
fun toJavaUuid(uuid: Uuid): java.util.UUID = uuid.toJavaUuid()
}

View File

@@ -26,6 +26,7 @@ import org.jetbrains.annotations.Nullable;
import java.awt.datatransfer.DataFlavor;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import static com.intellij.database.csv.ui.CsvRecordFormatForm.DELIMITERS;
import static com.intellij.database.datagrid.GridUtil.addRows;
@@ -78,21 +79,48 @@ public class GridPasteProvider implements PasteProvider {
int colOffset = minCol - data.getFirstColumnIdx();
int count = myGrid.getDataModel(DATA_WITH_MUTATIONS).getRowCount();
addRows(myGrid, Math.max(0, maxRow - count + 1));
List<Exception> conversionExceptions = new ArrayList<>();
List<CellMutation.Builder> conversions = JBIterable.from(data.getConversions())
.map(conversion -> conversion
.copy()
.secondGrid(myGrid)
.offset(rowOffset, colOffset)
.build())
.filter(Objects::nonNull)
.filter(DataTypeConversion::isValid)
.map(c -> GridHelper.get(myGrid).isMixedTypeColumns(myGrid) ? c.build() : c.convert(BaseConversionGraph.get(myGrid)))
.map(c -> {
try {
return GridHelper.get(myGrid).isMixedTypeColumns(myGrid)
? c.build()
: c.convert(BaseConversionGraph.get(myGrid));
} catch (Exception e) {
conversionExceptions.add(e);
return null;
}
})
.filter(Objects::nonNull)
.toList();
myGrid.getDataSupport().finishBuildingAndApply(conversions);
if (pasteType != null) {
Notification notification = createNotification(pasteType, csvFormat);
if (notification != null) {
notification.addAction(new ChoosePasteFormatAction(DataGridBundle.message("group.Console.TableResult.PasteFormat.change.paste.format")))
.notify(myGrid.getProject());
if (!conversionExceptions.isEmpty()) {
String error = conversionExceptions.size() == 1
? conversionExceptions.get(0).getMessage()
: DataGridBundle.message("group.Console.TableResult.PasteError.multiple.text", conversionExceptions.size());
Notification errorNotification = DataGridNotifications.PASTE_GROUP
.createNotification(DataGridBundle.message("group.Console.TableResult.PasteError.title"),
error,
NotificationType.ERROR);
errorNotification.notify(myGrid.getProject());
} else {
if (pasteType != null) {
Notification notification = createNotification(pasteType, csvFormat);
if (notification != null) {
notification.addAction(
new ChoosePasteFormatAction(DataGridBundle.message("group.Console.TableResult.PasteFormat.change.paste.format")))
.notify(myGrid.getProject());
}
}
}
}