This is an automated email from the ASF dual-hosted git repository.

tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new 161befa1c99 [kie-issues#1878] Make it possible to import Data Types 
from Java classes on the new DMN Editor (#3031)
161befa1c99 is described below

commit 161befa1c99e242123033efb071902d7ded97a8f
Author: Adarsh vk <[email protected]>
AuthorDate: Tue Apr 15 20:23:31 2025 +0530

    [kie-issues#1878] Make it possible to import Data Types from Java classes 
on the new DMN Editor (#3031)
---
 packages/dmn-editor-envelope/package.json          |   1 +
 .../dmn-editor-envelope/src/DmnEditorFactory.tsx   |  28 ++-
 packages/dmn-editor-envelope/src/DmnEditorRoot.tsx |  14 ++
 .../src/vscode/VsCodeNewDmnEditorFactory.tsx       |  44 ++++
 .../src/vscode/index.ts}                           |  11 +-
 packages/dmn-editor/package.json                   |   1 +
 packages/dmn-editor/src/DmnEditor.tsx              |   9 +
 packages/dmn-editor/src/dataTypes/DataTypes.tsx    |  82 +++++--
 .../src/dataTypes/DataTypesEmptyState.tsx          |  17 +-
 .../dmn-editor/src/dataTypes/ImportJavaClasses.tsx | 179 ++++++++++++++
 .../src/dataTypes/useImportJavaClasses.ts          | 272 +++++++++++++++++++++
 .../src/settings/DmnEditorSettingsContext.tsx      |  15 +-
 .../src/webview/NewDmnEditorEnvelopeApp.ts         |   4 +-
 .../ImportJavaClasses/ImportJavaClasses.tsx        |  85 +++++--
 .../ImportJavaClasses/ImportJavaClassesWizard.tsx  | 192 +++++++++------
 .../__snapshots__/ImportJavaClasses.test.tsx.snap  |  20 +-
 pnpm-lock.yaml                                     |   6 +
 repo/graph.dot                                     |   3 +-
 repo/graph.json                                    |  57 +++--
 19 files changed, 873 insertions(+), 167 deletions(-)

diff --git a/packages/dmn-editor-envelope/package.json 
b/packages/dmn-editor-envelope/package.json
index c321f00872c..39df1553aa3 100644
--- a/packages/dmn-editor-envelope/package.json
+++ b/packages/dmn-editor-envelope/package.json
@@ -28,6 +28,7 @@
     "@kie-tools-core/keyboard-shortcuts": "workspace:*",
     "@kie-tools-core/notifications": "workspace:*",
     "@kie-tools-core/react-hooks": "workspace:*",
+    "@kie-tools-core/vscode-java-code-completion": "workspace:*",
     "@kie-tools-core/workspace": "workspace:*",
     "@kie-tools/boxed-expression-component": "workspace:*",
     "@kie-tools/dmn-editor": "workspace:*",
diff --git a/packages/dmn-editor-envelope/src/DmnEditorFactory.tsx 
b/packages/dmn-editor-envelope/src/DmnEditorFactory.tsx
index 3b024375cf2..61e00ddb636 100644
--- a/packages/dmn-editor-envelope/src/DmnEditorFactory.tsx
+++ b/packages/dmn-editor-envelope/src/DmnEditorFactory.tsx
@@ -18,6 +18,7 @@
  */
 
 import * as React from "react";
+import { useCallback, useMemo } from "react";
 import {
   Editor,
   EditorFactory,
@@ -26,12 +27,13 @@ import {
   KogitoEditorChannelApi,
   EditorTheme,
   DEFAULT_WORKSPACE_ROOT_ABSOLUTE_POSIX_PATH,
+  ChannelType,
   KogitoEditorEnvelopeApi,
 } from "@kie-tools-core/editor/dist/api";
 import { Notification } from "@kie-tools-core/notifications/dist/api";
-import { DmnEditorRoot } from "./DmnEditorRoot";
 import { ResourceContent, ResourcesList, WorkspaceEdit } from 
"@kie-tools-core/workspace/dist/api";
-import { useCallback } from "react";
+import { DmnEditorRoot, JavaCodeCompletionExposedInteropApi } from 
"./DmnEditorRoot";
+import { VsCodeNewDmnEditorEnvelopeContext } from 
"./vscode/VsCodeNewDmnEditorFactory";
 
 export class DmnEditorFactory implements EditorFactory<Editor, 
KogitoEditorEnvelopeApi, KogitoEditorChannelApi> {
   public createEditor(
@@ -98,6 +100,7 @@ export class DmnEditorInterface implements Editor {
           this.initArgs.workspaceRootAbsolutePosixPath ?? 
DEFAULT_WORKSPACE_ROOT_ABSOLUTE_POSIX_PATH
         }
         isReadOnly={this.initArgs.isReadOnly}
+        channelType={this.initArgs?.channel}
       />
     );
   }
@@ -109,12 +112,14 @@ export function DmnEditorRootWrapper({
   exposing,
   workspaceRootAbsolutePosixPath,
   isReadOnly,
+  channelType,
   onOpenedBoxedExpressionEditorNodeChange,
 }: {
   envelopeContext?: KogitoEditorEnvelopeContextType<KogitoEditorEnvelopeApi, 
KogitoEditorChannelApi>;
   exposing: (s: DmnEditorRoot) => void;
   workspaceRootAbsolutePosixPath: string;
   isReadOnly: boolean;
+  channelType?: ChannelType;
   onOpenedBoxedExpressionEditorNodeChange?: (newOpenedNodeId: string | 
undefined) => void;
 }) {
   const onNewEdit = useCallback(
@@ -149,6 +154,23 @@ export function DmnEditorRootWrapper({
     [envelopeContext]
   );
 
+  const isImportDataTypesFromJavaClassesSupported = useMemo(
+    (): boolean => channelType === ChannelType.VSCODE_DESKTOP || channelType 
=== ChannelType.VSCODE_WEB,
+    [channelType]
+  );
+
+  const javaCodeCompletionService = useMemo((): 
JavaCodeCompletionExposedInteropApi | undefined => {
+    if (isImportDataTypesFromJavaClassesSupported) {
+      const { channelApi } = envelopeContext as 
VsCodeNewDmnEditorEnvelopeContext;
+      return {
+        getFields: (fqcn: string, query: string = "") =>
+          channelApi?.requests?.kogitoJavaCodeCompletion__getAccessors(fqcn, 
query),
+        getClasses: (query: string) => 
channelApi?.requests?.kogitoJavaCodeCompletion__getClasses(query),
+        isLanguageServerAvailable: () => 
channelApi?.requests?.kogitoJavaCodeCompletion__isLanguageServerAvailable(),
+      };
+    }
+  }, [envelopeContext, isImportDataTypesFromJavaClassesSupported]);
+
   return (
     <DmnEditorRoot
       exposing={exposing}
@@ -162,6 +184,8 @@ export function DmnEditorRootWrapper({
       workspaceRootAbsolutePosixPath={workspaceRootAbsolutePosixPath}
       keyboardShortcutsService={envelopeContext?.services.keyboardShortcuts}
       isReadOnly={isReadOnly}
+      
isImportDataTypesFromJavaClassesSupported={isImportDataTypesFromJavaClassesSupported}
+      javaCodeCompletionService={javaCodeCompletionService}
     />
   );
 }
diff --git a/packages/dmn-editor-envelope/src/DmnEditorRoot.tsx 
b/packages/dmn-editor-envelope/src/DmnEditorRoot.tsx
index e7f24569353..d73cb4abc80 100644
--- a/packages/dmn-editor-envelope/src/DmnEditorRoot.tsx
+++ b/packages/dmn-editor-envelope/src/DmnEditorRoot.tsx
@@ -39,6 +39,10 @@ import { KeyboardShortcutsService } from 
"@kie-tools-core/keyboard-shortcuts/dis
 import { Flex } from "@patternfly/react-core/dist/js/layouts/Flex";
 import { EmptyState, EmptyStateBody, EmptyStateIcon } from 
"@patternfly/react-core/dist/js/components/EmptyState";
 import { Title } from "@patternfly/react-core/dist/js/components/Title";
+import {
+  JavaCodeCompletionAccessor,
+  JavaCodeCompletionClass,
+} from "@kie-tools-core/vscode-java-code-completion/dist/api";
 
 export const EXTERNAL_MODELS_SEARCH_GLOB_PATTERN = "**/*.{dmn,pmml}";
 export const TARGET_DIRECTORY = "target/classes/";
@@ -52,6 +56,12 @@ export const EMPTY_DMN = () => `<?xml version="1.0" 
encoding="UTF-8"?>
   name="DMN${generateUuid()}">
 </definitions>`;
 
+export interface JavaCodeCompletionExposedInteropApi {
+  getFields(fqcn: string): Promise<JavaCodeCompletionAccessor[]>;
+  getClasses(query: string): Promise<JavaCodeCompletionClass[]>;
+  isLanguageServerAvailable(): Promise<boolean>;
+}
+
 export type DmnEditorRootProps = {
   exposing: (s: DmnEditorRoot) => void;
   onNewEdit: (edit: WorkspaceEdit) => void;
@@ -62,6 +72,8 @@ export type DmnEditorRootProps = {
   workspaceRootAbsolutePosixPath: string;
   keyboardShortcutsService: KeyboardShortcutsService | undefined;
   isReadOnly: boolean;
+  isImportDataTypesFromJavaClassesSupported?: boolean;
+  javaCodeCompletionService?: JavaCodeCompletionExposedInteropApi;
 };
 
 export type DmnEditorRootState = {
@@ -492,6 +504,8 @@ export class DmnEditorRoot extends 
React.Component<DmnEditorRootProps, DmnEditor
               externalContextDescription={""}
               issueTrackerHref={""}
               isReadOnly={this.state.isReadOnly}
+              
isImportDataTypesFromJavaClassesSupported={this.props?.isImportDataTypesFromJavaClassesSupported}
+              javaCodeCompletionService={this.props?.javaCodeCompletionService}
               onModelChange={this.onModelChange}
               
onOpenedBoxedExpressionEditorNodeChange={this.props.onOpenedBoxedExpressionEditorNodeChange}
               
onRequestExternalModelsAvailableToInclude={this.onRequestExternalModelsAvailableToInclude}
diff --git 
a/packages/dmn-editor-envelope/src/vscode/VsCodeNewDmnEditorFactory.tsx 
b/packages/dmn-editor-envelope/src/vscode/VsCodeNewDmnEditorFactory.tsx
new file mode 100644
index 00000000000..c2ac5808b94
--- /dev/null
+++ b/packages/dmn-editor-envelope/src/vscode/VsCodeNewDmnEditorFactory.tsx
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import {
+  Editor,
+  EditorFactory,
+  EditorInitArgs,
+  KogitoEditorChannelApi,
+  KogitoEditorEnvelopeApi,
+  KogitoEditorEnvelopeContextType,
+} from "@kie-tools-core/editor/dist/api";
+import { JavaCodeCompletionChannelApi } from 
"@kie-tools-core/vscode-java-code-completion/dist/api";
+import { DmnEditorInterface } from "../DmnEditorFactory";
+
+export interface VsCodeNewDmnEditorChannelApi extends KogitoEditorChannelApi, 
JavaCodeCompletionChannelApi {}
+
+export type VsCodeNewDmnEditorEnvelopeContext = 
KogitoEditorEnvelopeContextType<
+  KogitoEditorEnvelopeApi,
+  VsCodeNewDmnEditorChannelApi
+>;
+
+export class VsCodeNewDmnEditorFactory
+  implements EditorFactory<Editor, KogitoEditorEnvelopeApi, 
VsCodeNewDmnEditorChannelApi>
+{
+  public createEditor(envelopeContext: VsCodeNewDmnEditorEnvelopeContext, 
initArgs: EditorInitArgs): Promise<Editor> {
+    return Promise.resolve(new DmnEditorInterface(envelopeContext, initArgs));
+  }
+}
diff --git 
a/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts 
b/packages/dmn-editor-envelope/src/vscode/index.ts
similarity index 69%
copy from packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts
copy to packages/dmn-editor-envelope/src/vscode/index.ts
index 6394450ee70..7410d3d41f8 100644
--- a/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts
+++ b/packages/dmn-editor-envelope/src/vscode/index.ts
@@ -17,13 +17,4 @@
  * under the License.
  */
 
-import * as EditorEnvelope from "@kie-tools-core/editor/dist/envelope";
-import { DmnEditorFactory } from 
"@kie-tools/dmn-editor-envelope/dist/DmnEditorFactory";
-
-declare const acquireVsCodeApi: any;
-
-EditorEnvelope.init({
-  container: document.getElementById("envelope-app")!,
-  bus: acquireVsCodeApi(),
-  editorFactory: new DmnEditorFactory(),
-});
+export * from "./VsCodeNewDmnEditorFactory";
diff --git a/packages/dmn-editor/package.json b/packages/dmn-editor/package.json
index 7afdbd9cd02..9d557b1b750 100644
--- a/packages/dmn-editor/package.json
+++ b/packages/dmn-editor/package.json
@@ -50,6 +50,7 @@
     "@kie-tools/dmn-marshaller": "workspace:*",
     "@kie-tools/feel-input-component": "workspace:*",
     "@kie-tools/i18n-common-dictionary": "workspace:*",
+    "@kie-tools/import-java-classes-component": "workspace:*",
     "@kie-tools/pmml-editor-marshaller": "workspace:*",
     "@kie-tools/xml-parser-ts": "workspace:*",
     "@patternfly/react-core": "^4.276.6",
diff --git a/packages/dmn-editor/src/DmnEditor.tsx 
b/packages/dmn-editor/src/DmnEditor.tsx
index 711b6bc69e5..0161f7e9d56 100644
--- a/packages/dmn-editor/src/DmnEditor.tsx
+++ b/packages/dmn-editor/src/DmnEditor.tsx
@@ -59,6 +59,7 @@ import "@kie-tools/dmn-marshaller/dist/kie-extensions"; // 
This is here because
 import "./DmnEditor.css"; // Leave it for last, as this overrides some of the 
PF and RF styles.
 import { Commands, CommandsContextProvider, useCommands } from 
"./commands/CommandsContextProvider";
 import { DmnEditorSettingsContextProvider } from 
"./settings/DmnEditorSettingsContext";
+import { JavaCodeCompletionService } from 
"@kie-tools/import-java-classes-component/dist/components/ImportJavaClasses/services";
 
 const ON_MODEL_CHANGE_DEBOUNCE_TIME_IN_MS = 500;
 
@@ -172,6 +173,14 @@ export type DmnEditorProps = {
    * but no changes can be made and the model itself is unaltered.
    */
   isReadOnly?: boolean;
+  /**
+   * Boolean flag to check whether the "Import DataTypes From JavaClasses" 
feature is available.
+   */
+  isImportDataTypesFromJavaClassesSupported?: boolean;
+  /**
+   * This object defines all the API methods which ImportJavaClasses component 
can use to dialog with the Code Completion Extension
+   */
+  javaCodeCompletionService?: JavaCodeCompletionService;
   /**
    * When users want to jump to another file, this method is called, allowing 
the controller of this component decide what to do.
    * Links are only rendered if this is provided. Otherwise, paths will be 
rendered as text.
diff --git a/packages/dmn-editor/src/dataTypes/DataTypes.tsx 
b/packages/dmn-editor/src/dataTypes/DataTypes.tsx
index 57551a6b931..4bb2bd9377b 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypes.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypes.tsx
@@ -50,6 +50,10 @@ import {
 import { PasteIcon } from "@patternfly/react-icons/dist/js/icons/paste-icon";
 import { InputGroup } from 
"@patternfly/react-core/dist/js/components/InputGroup";
 import { SearchInput } from 
"@patternfly/react-core/dist/js/components/SearchInput";
+import {
+  ImportJavaClassesWizard,
+  ImportJavaClassesI18nDictionariesProvider,
+} from "@kie-tools/import-java-classes-component";
 import {
   DMN_EDITOR_DATA_TYPES_CLIPBOARD_MIME_TYPE,
   DmnEditorDataTypesClipboard,
@@ -58,6 +62,8 @@ import {
 import { addTopLevelItemDefinition as _addTopLevelItemDefinition } from 
"../mutations/addTopLevelItemDefinition";
 import { useExternalModels } from 
"../includedModels/DmnEditorDependenciesContext";
 import { useSettings } from "../settings/DmnEditorSettingsContext";
+import { ImportJavaClassesDropdownItem, ImportJavaClassNameConflictsModal } 
from "./ImportJavaClasses";
+import { useImportJavaClasses } from "./useImportJavaClasses";
 
 export type DataType = {
   itemDefinition: Normalized<DMN15__tItemDefinition>;
@@ -93,7 +99,7 @@ export function DataTypes() {
   const thisDmnsNamespace = useDmnEditorStore((s) => 
s.dmn.model.definitions["@_namespace"]);
   const dmnEditorStoreApi = useDmnEditorStoreApi();
   const activeItemDefinitionId = useDmnEditorStore((s) => 
s.dataTypesEditor.activeItemDefinitionId);
-  const settings = useSettings();
+  const { isReadOnly, isImportDataTypesFromJavaClassesSupported, 
javaCodeCompletionService } = useSettings();
 
   const [filter, setFilter] = useState("");
   const { externalModelsByNamespace } = useExternalModels();
@@ -105,6 +111,13 @@ export function DataTypes() {
   );
   const dataTypesTree = useDmnEditorStore((s) => 
s.computed(s).getDataTypes(externalModelsByNamespace).dataTypesTree);
 
+  const [isOpenImportJavaClassesWizard, setOpenImportJavaClassesWizard] = 
useState(false);
+  const { conflictsClasses, handleConflictAction, handleImportJavaClasses, 
isConflictsOccured } =
+    useImportJavaClasses();
+  const handleImportJavaClassButtonClick = useCallback(() => {
+    setOpenImportJavaClassesWizard((prevState) => !prevState);
+  }, []);
+
   const activeDataType = useMemo(() => {
     return activeItemDefinitionId ? 
allDataTypesById.get(activeItemDefinitionId) : undefined;
   }, [activeItemDefinitionId, allDataTypesById]);
@@ -148,7 +161,7 @@ export function DataTypes() {
   );
 
   const pasteTopLevelItemDefinition = useCallback(() => {
-    if (settings.isReadOnly) {
+    if (isReadOnly) {
       return;
     }
     navigator.clipboard.readText().then((text) => {
@@ -169,13 +182,42 @@ export function DataTypes() {
         addTopLevelItemDefinition(itemDefinition);
       }
     });
-  }, [addTopLevelItemDefinition, settings.isReadOnly]);
+  }, [addTopLevelItemDefinition, isReadOnly]);
 
   const [isAddDataTypeDropdownOpen, setAddDataTypeDropdownOpen] = 
useState(false);
 
   // Using this object because DropdownToggleAction's props doesn't accept a 
'title'.
   const extraPropsForDropdownToggleAction = { title: "New Data Type" };
 
+  const addDataTypesDropdownItems = useMemo(() => {
+    const dropdownItems = [
+      <DropdownItem
+        key={"paste"}
+        onClick={() => pasteTopLevelItemDefinition()}
+        style={{ minWidth: "240px" }}
+        icon={<PasteIcon />}
+      >
+        Paste
+      </DropdownItem>,
+    ];
+    if (isImportDataTypesFromJavaClassesSupported && 
javaCodeCompletionService) {
+      dropdownItems.unshift(
+        <ImportJavaClassesI18nDictionariesProvider key={"import-java-classes"}>
+          <ImportJavaClassesDropdownItem
+            javaCodeCompletionService={javaCodeCompletionService}
+            onClick={handleImportJavaClassButtonClick}
+          />
+        </ImportJavaClassesI18nDictionariesProvider>
+      );
+    }
+    return dropdownItems;
+  }, [
+    isImportDataTypesFromJavaClassesSupported,
+    javaCodeCompletionService,
+    handleImportJavaClassButtonClick,
+    pasteTopLevelItemDefinition,
+  ]);
+
   return (
     <>
       {(dataTypesTree.length <= 0 && (
@@ -206,7 +248,7 @@ export function DataTypes() {
                       onClear={() => setFilter("")}
                     />
 
-                    {!settings.isReadOnly && (
+                    {!isReadOnly && (
                       <Dropdown
                         onSelect={() => setAddDataTypeDropdownOpen(false)}
                         menuAppendTo={document.body}
@@ -229,16 +271,7 @@ export function DataTypes() {
                         }
                         position={DropdownPosition.right}
                         isOpen={isAddDataTypeDropdownOpen}
-                        dropdownItems={[
-                          <DropdownItem
-                            key={"paste"}
-                            onClick={() => pasteTopLevelItemDefinition()}
-                            style={{ minWidth: "240px" }}
-                            icon={<PasteIcon />}
-                          >
-                            Paste
-                          </DropdownItem>,
-                        ]}
+                        dropdownItems={addDataTypesDropdownItems}
                       />
                     )}
                   </InputGroup>
@@ -269,7 +302,7 @@ export function DataTypes() {
                         {(namespace === thisDmnsNamespace && (
                           <DataTypeName
                             relativeToNamespace={thisDmnsNamespace}
-                            isReadOnly={settings.isReadOnly || namespace !== 
thisDmnsNamespace}
+                            isReadOnly={isReadOnly || namespace !== 
thisDmnsNamespace}
                             itemDefinition={itemDefinition}
                             isActive={isActive}
                             editMode={"double-click"}
@@ -305,12 +338,29 @@ export function DataTypes() {
             <DrawerContentBody>
               {activeDataType && (
                 <DataTypePanel
-                  isReadOnly={settings.isReadOnly || activeDataType.namespace 
!== thisDmnsNamespace}
+                  isReadOnly={isReadOnly || activeDataType.namespace !== 
thisDmnsNamespace}
                   dataType={activeDataType}
                   allDataTypesById={allDataTypesById}
                   editItemDefinition={editItemDefinition}
                 />
               )}
+              {isOpenImportJavaClassesWizard && javaCodeCompletionService && (
+                <ImportJavaClassesI18nDictionariesProvider>
+                  <ImportJavaClassesWizard
+                    javaCodeCompletionService={javaCodeCompletionService}
+                    isOpen={isOpenImportJavaClassesWizard}
+                    onSave={handleImportJavaClasses}
+                    onClose={handleImportJavaClassButtonClick}
+                  />
+                </ImportJavaClassesI18nDictionariesProvider>
+              )}
+              {isConflictsOccured && conflictsClasses?.length > 0 && (
+                <ImportJavaClassNameConflictsModal
+                  isOpen={isConflictsOccured}
+                  handleConfirm={handleConflictAction}
+                  confliectedJavaClasses={conflictsClasses}
+                />
+              )}
             </DrawerContentBody>
           </DrawerContent>
         </Drawer>
diff --git a/packages/dmn-editor/src/dataTypes/DataTypesEmptyState.tsx 
b/packages/dmn-editor/src/dataTypes/DataTypesEmptyState.tsx
index ce8da83ea4e..3e71841dc0f 100644
--- a/packages/dmn-editor/src/dataTypes/DataTypesEmptyState.tsx
+++ b/packages/dmn-editor/src/dataTypes/DataTypesEmptyState.tsx
@@ -31,9 +31,10 @@ import { Title } from 
"@patternfly/react-core/dist/js/components/Title";
 import { CubesIcon } from "@patternfly/react-icons/dist/js/icons/cubes-icon";
 import { PasteIcon } from "@patternfly/react-icons/dist/js/icons/paste-icon";
 import { useSettings } from "../settings/DmnEditorSettingsContext";
+import { ImportJavaClassesWrapper } from "./ImportJavaClasses";
 
 export function DataTypesEmptyState({ onAdd, onPaste }: { onAdd: () => void; 
onPaste: () => void }) {
-  const settings = useSettings();
+  const { isReadOnly, isImportDataTypesFromJavaClassesSupported, 
javaCodeCompletionService } = useSettings();
 
   return (
     <Flex justifyContent={{ default: "justifyContentCenter" }} style={{ 
marginTop: "100px" }}>
@@ -46,7 +47,7 @@ export function DataTypesEmptyState({ onAdd, onPaste }: { 
onAdd: () => void; onP
           {`Data types are referenced in the input and output values for 
decision tables. Custom data types allow you to reference more complex data 
types, beyond the simple "default" types.`}
         </EmptyStateBody>
         <br />
-        {!settings.isReadOnly && (
+        {!isReadOnly && (
           <>
             <EmptyStatePrimary>
               <Button variant={ButtonVariant.primary} onClick={onAdd}>
@@ -54,9 +55,17 @@ export function DataTypesEmptyState({ onAdd, onPaste }: { 
onAdd: () => void; onP
               </Button>
             </EmptyStatePrimary>
             <br />
-            <br />
+            {isImportDataTypesFromJavaClassesSupported && 
javaCodeCompletionService && (
+              <>
+                or
+                <br />
+                <br />
+                <ImportJavaClassesWrapper 
javaCodeCompletionService={javaCodeCompletionService} />
+                <br />
+                <br />
+              </>
+            )}
             or
-            <br />
             <EmptyStateSecondaryActions>
               <Button variant={ButtonVariant.link} onClick={onPaste} 
icon={<PasteIcon />}>
                 Paste data type
diff --git a/packages/dmn-editor/src/dataTypes/ImportJavaClasses.tsx 
b/packages/dmn-editor/src/dataTypes/ImportJavaClasses.tsx
new file mode 100644
index 00000000000..897b620bbc5
--- /dev/null
+++ b/packages/dmn-editor/src/dataTypes/ImportJavaClasses.tsx
@@ -0,0 +1,179 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as React from "react";
+import { useCallback, useState } from "react";
+import { DropdownItem } from 
"@patternfly/react-core/dist/js/components/Dropdown";
+import { Spinner } from "@patternfly/react-core/dist/esm/components/Spinner";
+import PlusIcon from "@patternfly/react-icons/dist/js/icons/plus-icon";
+import { Tooltip } from "@patternfly/react-core/dist/js/components/Tooltip";
+import { Modal, ModalVariant } from 
"@patternfly/react-core/dist/js/components/Modal";
+import { Button } from "@patternfly/react-core/dist/js/components/Button";
+import { TextContent, Text, TextVariants } from 
"@patternfly/react-core/dist/js/components/Text";
+import {
+  ImportJavaClasses,
+  JavaClass,
+  JavaCodeCompletionService,
+  useImportJavaClassesWizardI18n,
+  useLanguageServerAvailable,
+} from "@kie-tools/import-java-classes-component";
+import { addTopLevelItemDefinition as _addTopLevelItemDefinition } from 
"../mutations/addTopLevelItemDefinition";
+import { JavaClassConflictOptions, useImportJavaClasses } from 
"./useImportJavaClasses";
+import { Radio } from "@patternfly/react-core/dist/esm/components/Radio";
+
+const ImportJavaClassesWrapper = ({
+  javaCodeCompletionService,
+}: {
+  javaCodeCompletionService: JavaCodeCompletionService;
+}) => {
+  const { handleConflictAction, handleImportJavaClasses, conflictsClasses, 
isConflictsOccured } =
+    useImportJavaClasses();
+  return (
+    <>
+      <ImportJavaClasses
+        loadJavaClassesInDataTypeEditor={handleImportJavaClasses}
+        javaCodeCompletionService={javaCodeCompletionService}
+      />
+      {isConflictsOccured && conflictsClasses?.length > 0 && (
+        <ImportJavaClassNameConflictsModal
+          isOpen={isConflictsOccured}
+          handleConfirm={handleConflictAction}
+          confliectedJavaClasses={conflictsClasses}
+        />
+      )}
+    </>
+  );
+};
+
+const ImportJavaClassesDropdownItem = ({
+  javaCodeCompletionService,
+  ...props
+}: React.ComponentProps<typeof DropdownItem> & { javaCodeCompletionService: 
JavaCodeCompletionService }) => {
+  const { i18n } = useImportJavaClassesWizardI18n();
+  const { isLanguageServerLoading, isLanguageServerDisabled, 
isLanguageServerError } =
+    useLanguageServerAvailable(javaCodeCompletionService);
+  const defineTooltipMessage = React.useCallback(() => {
+    if (isLanguageServerDisabled) {
+      return i18n.modalButton.disabledMessage;
+    } else if (isLanguageServerError) {
+      return i18n.modalButton.errorMessage;
+    }
+    return undefined;
+  }, [
+    isLanguageServerDisabled,
+    isLanguageServerError,
+    i18n.modalButton.disabledMessage,
+    i18n.modalButton.errorMessage,
+  ]);
+  return (
+    <>
+      {defineTooltipMessage() ? (
+        <Tooltip content={defineTooltipMessage()}>
+          <DropdownItem
+            style={{ minWidth: "240px" }}
+            icon={isLanguageServerLoading ? <Spinner size="md" /> : <PlusIcon 
/>}
+            isDisabled={isLanguageServerDisabled || isLanguageServerLoading}
+            {...props}
+          >
+            {i18n.modalButton.text}
+          </DropdownItem>
+        </Tooltip>
+      ) : (
+        <DropdownItem
+          style={{ minWidth: "240px" }}
+          icon={isLanguageServerLoading ? <Spinner size="md" /> : <PlusIcon />}
+          isDisabled={isLanguageServerDisabled || isLanguageServerLoading}
+          {...props}
+        >
+          {i18n.modalButton.text}
+        </DropdownItem>
+      )}
+    </>
+  );
+};
+
+const ImportJavaClassNameConflictsModal = ({
+  isOpen,
+  handleConfirm,
+  confliectedJavaClasses,
+}: {
+  isOpen: boolean;
+  handleConfirm: (options: JavaClassConflictOptions) => void;
+  confliectedJavaClasses: JavaClass[];
+}) => {
+  const [action, setAction] = 
useState<JavaClassConflictOptions>(JavaClassConflictOptions.REPLACE);
+  const handleActionButtonClick = useCallback(() => handleConfirm?.(action), 
[handleConfirm, action]);
+  const handleRadioBtnClick = useCallback((_, e) => 
setAction?.(e?.target?.name), []);
+  const classNames = confliectedJavaClasses?.map((javaClass) => 
javaClass?.name);
+  return (
+    <Modal
+      title="Duplicate DMN Data Type Detected"
+      titleIconVariant="warning"
+      aria-describedby="modal-import-java-classes-conflict-description"
+      showClose={false}
+      isOpen={isOpen}
+      variant={ModalVariant.small}
+      position="top"
+      actions={[
+        <Button key="import-java-classes-conflict-btn" variant="primary" 
onClick={handleActionButtonClick}>
+          Import
+        </Button>,
+      ]}
+    >
+      <TextContent>
+        {classNames?.length === 1 ? (
+          <Text component={TextVariants.p}>
+            An existing DMN type named <b>{classNames?.join()}</b> has been 
detected. This type is currently in use
+            within the system. How would you like to proceed?
+          </Text>
+        ) : (
+          <Text component={TextVariants.p}>
+            Multiple DMN types have been detected in the list. The following 
DMN types are currently in use within the
+            system <b>{classNames?.join()}</b>. How would you like to proceed?
+          </Text>
+        )}
+        <Text
+          component={TextVariants.blockquote}
+          style={{ background: "none", display: "flex", flexDirection: 
"column", gap: "1rem" }}
+        >
+          <Radio
+            isChecked={action === JavaClassConflictOptions.REPLACE}
+            id={`radio-${JavaClassConflictOptions.REPLACE}`}
+            label={JavaClassConflictOptions.REPLACE}
+            name={JavaClassConflictOptions.REPLACE}
+            onChange={handleRadioBtnClick}
+            description="This option will replace the existing DMN type with 
the new one."
+            isLabelWrapped={true}
+          />
+          <Radio
+            isChecked={action === JavaClassConflictOptions.KEEP_BOTH}
+            id={`radio-${JavaClassConflictOptions.KEEP_BOTH}`}
+            label={JavaClassConflictOptions.KEEP_BOTH}
+            name={JavaClassConflictOptions.KEEP_BOTH}
+            onChange={handleRadioBtnClick}
+            description="This option will preserve the existing DMN type and 
create a new one with a unique name."
+            isLabelWrapped={true}
+          />
+        </Text>
+      </TextContent>
+    </Modal>
+  );
+};
+
+export { ImportJavaClassesWrapper, ImportJavaClassesDropdownItem, 
ImportJavaClassNameConflictsModal };
diff --git a/packages/dmn-editor/src/dataTypes/useImportJavaClasses.ts 
b/packages/dmn-editor/src/dataTypes/useImportJavaClasses.ts
new file mode 100644
index 00000000000..4200586a4d1
--- /dev/null
+++ b/packages/dmn-editor/src/dataTypes/useImportJavaClasses.ts
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { useCallback, useMemo, useState } from "react";
+import { JavaClass } from "@kie-tools/import-java-classes-component";
+import { useExternalModels } from 
"../includedModels/DmnEditorDependenciesContext";
+import { useDmnEditorStore, useDmnEditorStoreApi } from 
"../store/StoreContext";
+import { findDataTypeById, getNewItemDefinition } from "./DataTypeSpec";
+import { EditItemDefinition } from "./DataTypes";
+
+const NAME_SEPARATOR: string = "-";
+
+export enum JavaClassConflictOptions {
+  REPLACE = "Replace",
+  KEEP_BOTH = "Keep Both",
+}
+
+const useImportJavaClasses = () => {
+  const [isConflictsOccured, setIsConflictsOccured] = useState<boolean>(false);
+  const [conflictsClasses, setConflictsClasses] = useState<JavaClass[]>([]);
+
+  const dmnEditorStoreApi = useDmnEditorStoreApi();
+  const { externalModelsByNamespace } = useExternalModels();
+  const allDataTypesById = useDmnEditorStore(
+    (s) => 
s.computed(s).getDataTypes(externalModelsByNamespace).allDataTypesById
+  );
+  const dataTypesTree = useDmnEditorStore((s) => 
s.computed(s).getDataTypes(externalModelsByNamespace).dataTypesTree);
+
+  const dataTypeNames = useMemo(() => {
+    const dataTypeNames = new Set<string>();
+    for (let i = 0, len = dataTypesTree?.length; i < len; i++) {
+      dataTypeNames.add(dataTypesTree?.[i]?.feelName || 
dataTypesTree?.[i]?.itemDefinition?.["@_name"]);
+    }
+    return dataTypeNames;
+  }, [dataTypesTree]);
+
+  const buildName = useCallback(
+    (nameCandidate: string, namesCount: Map<string, number>, nameSeparator: 
string = NAME_SEPARATOR): string => {
+      if (namesCount.has(nameCandidate)) {
+        const occurrences = namesCount.get(nameCandidate)!;
+        namesCount.set(nameCandidate, occurrences + 1);
+        return nameCandidate + nameSeparator + occurrences;
+      }
+      namesCount.set(nameCandidate, 1);
+      return nameCandidate;
+    },
+    []
+  );
+
+  const updatePropertiesReferences = useCallback(
+    (javaClasses: JavaClass[], javaClassNameToDMNTypeNameMap: Map<string, 
string>): JavaClass[] => {
+      return javaClasses.map((javaClass) => {
+        const namesCount: Map<string, number> = new Map();
+        const updatedFields = (javaClass ?? [])?.fields?.map((field) => {
+          const newFieldName = buildName(field?.name, namesCount);
+          if (javaClassNameToDMNTypeNameMap.has(field.type)) {
+            const renamedFieldType = 
javaClassNameToDMNTypeNameMap.get(field.type)!;
+            return { ...field, name: newFieldName, dmnTypeRef: 
renamedFieldType };
+          }
+          return { ...field, name: newFieldName };
+        });
+        return { ...javaClass, fields: updatedFields } as JavaClass;
+      });
+    },
+    [buildName]
+  );
+
+  const editItemDefinition = useCallback<EditItemDefinition>(
+    (id, consumer) => {
+      dmnEditorStoreApi.setState((state) => {
+        const { itemDefinition, items, index } = findDataTypeById({
+          definitions: state.dmn.model.definitions,
+          itemDefinitionId: id,
+          allDataTypesById,
+        });
+
+        state.dmn.model.definitions.itemDefinition ??= [];
+        consumer(itemDefinition, items, index, 
state.dmn.model.definitions.itemDefinition, state);
+      });
+    },
+    [allDataTypesById, dmnEditorStoreApi]
+  );
+
+  const renameJavaClassToDMNName = useCallback(
+    (javaClasses: JavaClass[]): JavaClass[] => {
+      const namesCount: Map<string, number> = new Map();
+      const javaClassNameToDMNTypeNameMap: Map<string, string> = new Map();
+
+      // Map the javaClasses to new renamed classes
+      const renamedJavaClasses = javaClasses.map((javaClass: JavaClass) => {
+        const nameCandidate = 
javaClass.name.substring(javaClass.name.lastIndexOf(".") + 1);
+        const newName = buildName(nameCandidate, namesCount);
+        javaClassNameToDMNTypeNameMap.set(javaClass.name, newName);
+        return { ...javaClass, name: newName } as JavaClass;
+      });
+
+      // Return the updated Java classes with renamed types
+      return updatePropertiesReferences(renamedJavaClasses, 
javaClassNameToDMNTypeNameMap);
+    },
+    [updatePropertiesReferences, buildName]
+  );
+
+  const generateUniqueDmnTypeNames = useCallback(
+    (javaClasses: JavaClass[], nameSeparator: string = NAME_SEPARATOR): 
JavaClass[] => {
+      const namesCount: Map<string, number> = new Map();
+      const javaClassNameToDMNTypeNameMap: Map<string, string> = new Map();
+
+      // Map the javaClasses to new renamed classes
+      const renamedJavaClasses = javaClasses.map((javaClass: JavaClass) => {
+        let newName = javaClass.name;
+
+        // Check if the name already exists in dataTypeNames
+        if (dataTypeNames.has(newName)) {
+          // Initialize counter for this name if it doesn't exist yet
+          if (!namesCount.has(newName)) {
+            namesCount.set(newName, 0);
+          }
+
+          // Increment counter and append it to name until we find a unique one
+          let counter = namesCount.get(newName)!;
+          do {
+            counter++;
+            newName = javaClass.name + nameSeparator + counter;
+          } while (dataTypeNames.has(newName));
+
+          // Update the counter for this base name
+          namesCount.set(javaClass.name, counter);
+        } else {
+          // If it's a new name, add it to our tracking
+          namesCount.set(javaClass.name, 0);
+        }
+
+        // Store the mapping from original class name to new DMN name
+        javaClassNameToDMNTypeNameMap.set(javaClass.name, newName);
+        return { ...javaClass, name: newName } as JavaClass;
+      });
+
+      // Return the updated Java classes with renamed types and references
+      return updatePropertiesReferences(renamedJavaClasses, 
javaClassNameToDMNTypeNameMap);
+    },
+    [updatePropertiesReferences, dataTypeNames]
+  );
+
+  const overwriteExistingDMNTypes = useCallback(
+    (javaClasses: JavaClass[]) => {
+      for (let i = 0, len = javaClasses?.length; i < len; i++) {
+        const className = javaClasses?.[i]?.name;
+        if (dataTypeNames?.has(className)) {
+          const dataType = dataTypesTree?.find(
+            (type) => type?.feelName === className || 
type?.itemDefinition?.["@_name"] === className
+          );
+          if (dataType && dataType?.itemDefinition?.["@_id"]) {
+            const itemComponents = javaClasses?.[i]?.fields?.map((field) =>
+              getNewItemDefinition({ "@_name": field?.name, typeRef: { 
__$$text: field?.dmnTypeRef } })
+            );
+            if (itemComponents && itemComponents?.length > 0) {
+              editItemDefinition(dataType.itemDefinition!["@_id"], 
(itemDefinition) => {
+                itemDefinition.itemComponent = itemComponents;
+              });
+            }
+          }
+        }
+      }
+    },
+    [dataTypeNames, dataTypesTree, editItemDefinition]
+  );
+
+  const checkNameConflicts = useCallback(
+    (javaClasses: JavaClass[]) => {
+      const updatedJavaClasses = renameJavaClassToDMNName(javaClasses);
+
+      // Pre-allocate arrays to avoid resizing
+      const conflicts: JavaClass[] = [];
+      const nonConflicts: JavaClass[] = [];
+
+      // Use a traditional for loop for better performance
+      for (let i = 0, len = updatedJavaClasses?.length; i < len; i++) {
+        const javaClass = updatedJavaClasses?.[i];
+        const fullClassName = javaClass.name;
+        if (dataTypeNames.has(fullClassName)) conflicts.push(javaClass);
+        else nonConflicts.push(javaClass);
+      }
+
+      return {
+        conflicts,
+        nonConflicts,
+      };
+    },
+    [renameJavaClassToDMNName, dataTypeNames]
+  );
+
+  const mapJavaClassesToDMNItemDefinitions = useCallback(
+    (javaClasses: JavaClass[]): ReturnType<typeof getNewItemDefinition>[] => {
+      return javaClasses?.map((javaClass: JavaClass) => {
+        const itemsComponents = javaClass?.fields?.map((field) =>
+          getNewItemDefinition({ "@_name": field?.name, typeRef: { __$$text: 
field?.dmnTypeRef } })
+        );
+        return getNewItemDefinition({ "@_name": javaClass?.name, typeRef: 
undefined, itemComponent: itemsComponents });
+      });
+    },
+    []
+  );
+
+  const importJavaClassesInDataTypeEditor = useCallback(
+    (javaClasses: JavaClass[]) => {
+      if (javaClasses?.length === 0) return;
+      const itemDefinitions = mapJavaClassesToDMNItemDefinitions(javaClasses);
+      dmnEditorStoreApi.setState((state) => {
+        state.dmn.model.definitions.itemDefinition ??= [];
+        
state.dmn.model.definitions.itemDefinition?.unshift(...itemDefinitions);
+        // Keep the last selected if any. Default to first on list.
+        state.dataTypesEditor.activeItemDefinitionId = 
itemDefinitions?.[0]?.["@_id"];
+        state.focus.consumableId = itemDefinitions?.[0]?.["@_id"];
+      });
+    },
+    [dmnEditorStoreApi, mapJavaClassesToDMNItemDefinitions]
+  );
+
+  const handleImportJavaClasses = useCallback(
+    (javaClass: JavaClass[]) => {
+      const { conflicts, nonConflicts } = checkNameConflicts(javaClass);
+      if (nonConflicts?.length !== 0) {
+        importJavaClassesInDataTypeEditor(nonConflicts);
+      }
+      if (conflicts?.length !== 0) {
+        setIsConflictsOccured(true);
+        setConflictsClasses(conflicts);
+      }
+    },
+    [checkNameConflicts, importJavaClassesInDataTypeEditor]
+  );
+
+  const handleConflictAction = useCallback(
+    (action: JavaClassConflictOptions) => {
+      if (conflictsClasses?.length === 0) return;
+      if (action === JavaClassConflictOptions.KEEP_BOTH) {
+        const updatedJavaClasses = 
generateUniqueDmnTypeNames(conflictsClasses);
+        importJavaClassesInDataTypeEditor(updatedJavaClasses);
+      } else if (action === JavaClassConflictOptions.REPLACE) {
+        overwriteExistingDMNTypes(conflictsClasses);
+      }
+      setIsConflictsOccured(false);
+      setConflictsClasses([]);
+    },
+    [conflictsClasses, generateUniqueDmnTypeNames, 
importJavaClassesInDataTypeEditor, overwriteExistingDMNTypes]
+  );
+
+  return {
+    handleImportJavaClasses,
+    handleConflictAction,
+    conflictsClasses,
+    isConflictsOccured,
+  };
+};
+
+export { useImportJavaClasses };
diff --git a/packages/dmn-editor/src/settings/DmnEditorSettingsContext.tsx 
b/packages/dmn-editor/src/settings/DmnEditorSettingsContext.tsx
index 6e2c6ce5a4d..2a44250be16 100644
--- a/packages/dmn-editor/src/settings/DmnEditorSettingsContext.tsx
+++ b/packages/dmn-editor/src/settings/DmnEditorSettingsContext.tsx
@@ -19,9 +19,12 @@
 
 import * as React from "react";
 import { useContext, useMemo } from "react";
+import { JavaCodeCompletionService } from 
"@kie-tools/import-java-classes-component/dist/components/ImportJavaClasses/services";
 
 export interface DmnEditorSettingsContextType {
   isReadOnly: boolean;
+  isImportDataTypesFromJavaClassesSupported?: boolean;
+  javaCodeCompletionService?: JavaCodeCompletionService;
 }
 
 const DmnEditorSettingsContext = 
React.createContext<DmnEditorSettingsContextType>({} as any);
@@ -30,14 +33,22 @@ export function useSettings() {
   return useContext(DmnEditorSettingsContext);
 }
 
-export function DmnEditorSettingsContextProvider(_props: 
React.PropsWithChildren<{ isReadOnly?: boolean }>) {
+export function DmnEditorSettingsContextProvider(
+  _props: React.PropsWithChildren<{
+    isReadOnly?: boolean;
+    isImportDataTypesFromJavaClassesSupported?: boolean;
+    javaCodeCompletionService?: JavaCodeCompletionService;
+  }>
+) {
   const { children, ...props } = _props;
 
   const value = useMemo<DmnEditorSettingsContextType>(
     () => ({
       isReadOnly: props.isReadOnly ?? false,
+      isImportDataTypesFromJavaClassesSupported: 
props?.isImportDataTypesFromJavaClassesSupported ?? false,
+      javaCodeCompletionService: props?.javaCodeCompletionService,
     }),
-    [props.isReadOnly]
+    [props.isReadOnly, props?.isImportDataTypesFromJavaClassesSupported, 
props?.javaCodeCompletionService]
   );
 
   return <DmnEditorSettingsContext.Provider 
value={value}>{children}</DmnEditorSettingsContext.Provider>;
diff --git 
a/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts 
b/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts
index 6394450ee70..223c6d580a3 100644
--- a/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts
+++ b/packages/dmn-vscode-extension/src/webview/NewDmnEditorEnvelopeApp.ts
@@ -18,12 +18,12 @@
  */
 
 import * as EditorEnvelope from "@kie-tools-core/editor/dist/envelope";
-import { DmnEditorFactory } from 
"@kie-tools/dmn-editor-envelope/dist/DmnEditorFactory";
+import { VsCodeNewDmnEditorFactory } from 
"@kie-tools/dmn-editor-envelope/dist/vscode";
 
 declare const acquireVsCodeApi: any;
 
 EditorEnvelope.init({
   container: document.getElementById("envelope-app")!,
   bus: acquireVsCodeApi(),
-  editorFactory: new DmnEditorFactory(),
+  editorFactory: new VsCodeNewDmnEditorFactory(),
 });
diff --git 
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClasses.tsx
 
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClasses.tsx
index ef41539f212..d9222eb83f7 100644
--- 
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClasses.tsx
+++ 
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClasses.tsx
@@ -18,34 +18,91 @@
  */
 
 import * as React from "react";
+import { useCallback, useState } from "react";
 import {
   importJavaClassesWizardI18nDictionaries,
   ImportJavaClassesWizardI18nContext,
   importJavaClassesWizardI18nDefaults,
+  useImportJavaClassesWizardI18n,
 } from "../../i18n";
 import { I18nDictionariesProvider } from 
"@kie-tools-core/i18n/dist/react-components";
-import { ImportJavaClassesWizard } from "./ImportJavaClassesWizard";
 import { GWTLayerService, JavaCodeCompletionService } from "./services";
+import { JavaClass } from "./model";
 
-export interface ImportJavaClassesProps {
-  /** Service class which contains all API method to dialog with GWT layer */
-  gwtLayerService: GWTLayerService;
+import {
+  ImportJavaClassesButton,
+  ImportJavaClassesWizard,
+  useLanguageServerAvailable,
+} from "./ImportJavaClassesWizard";
+
+interface ImportJavaClassesProps {
+  /** Service class which contains all API method to dialog with GWT layer 
(can be removed when Stunner editor support is discontinued ) */
+  gwtLayerService?: GWTLayerService;
   /** Service class which contains all API methods to dialog with Java Code 
Completion Extension*/
   javaCodeCompletionService: JavaCodeCompletionService;
+  /** Callback function used to load Java classes into the data type editor.*/
+  loadJavaClassesInDataTypeEditor?: (javaClasses: JavaClass[]) => void;
 }
 
-export const ImportJavaClasses = ({ gwtLayerService, javaCodeCompletionService 
}: ImportJavaClassesProps) => {
+const ImportJavaClassesI18nDictionariesProvider = (
+  props: Omit<
+    React.ComponentProps<typeof I18nDictionariesProvider>,
+    "defaults" | "dictionaries" | "initialLocale" | "ctx"
+  >
+) => (
+  <I18nDictionariesProvider
+    defaults={importJavaClassesWizardI18nDefaults}
+    dictionaries={importJavaClassesWizardI18nDictionaries}
+    initialLocale={navigator.language}
+    ctx={ImportJavaClassesWizardI18nContext}
+    {...props}
+  />
+);
+
+const ImportJavaClasses = ({
+  javaCodeCompletionService,
+  gwtLayerService,
+  loadJavaClassesInDataTypeEditor,
+}: ImportJavaClassesProps) => {
+  const [isOpenImportJavaClassesWizard, setOpenImportJavaClassesWizard] = 
useState(false);
+  const handleButtonClick = useCallback(() => 
setOpenImportJavaClassesWizard((prevState) => !prevState), []);
+  const handleWizardSave = useCallback(
+    (javaClasses) => {
+      /* If the GWT layer service is available, it uses the 
`importJavaClassesInDataTypeEditor` method.
+       * Otherwise, it calls the `loadJavaClassesInDataTypeEditor` callback 
with the provided Java classes.
+       */
+      if (gwtLayerService) {
+        gwtLayerService?.importJavaClassesInDataTypeEditor?.(javaClasses);
+      } else {
+        loadJavaClassesInDataTypeEditor?.(javaClasses);
+      }
+    },
+    [gwtLayerService, loadJavaClassesInDataTypeEditor]
+  );
   return (
-    <I18nDictionariesProvider
-      defaults={importJavaClassesWizardI18nDefaults}
-      dictionaries={importJavaClassesWizardI18nDictionaries}
-      initialLocale={navigator.language}
-      ctx={ImportJavaClassesWizardI18nContext}
-    >
-      <ImportJavaClassesWizard
-        gwtLayerService={gwtLayerService}
+    <ImportJavaClassesI18nDictionariesProvider>
+      <ImportJavaClassesButton
+        handleButtonClick={handleButtonClick}
         javaCodeCompletionService={javaCodeCompletionService}
       />
-    </I18nDictionariesProvider>
+      {isOpenImportJavaClassesWizard && (
+        <ImportJavaClassesWizard
+          javaCodeCompletionService={javaCodeCompletionService}
+          isOpen={isOpenImportJavaClassesWizard}
+          onSave={handleWizardSave}
+          onClose={handleButtonClick}
+        />
+      )}
+    </ImportJavaClassesI18nDictionariesProvider>
   );
 };
+
+export {
+  ImportJavaClassesProps,
+  ImportJavaClassesI18nDictionariesProvider,
+  ImportJavaClasses,
+  ImportJavaClassesButton,
+  ImportJavaClassesWizard,
+  useLanguageServerAvailable,
+  useImportJavaClassesWizardI18n,
+};
diff --git 
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizard.tsx
 
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizard.tsx
index d4f33a29759..bc82ae05228 100644
--- 
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizard.tsx
+++ 
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizard.tsx
@@ -18,71 +18,132 @@
  */
 
 import * as React from "react";
+import { useCallback, useEffect, useMemo, useState } from "react";
+import { Button } from "@patternfly/react-core/dist/js/components/Button";
+import { Modal, ModalVariant } from 
"@patternfly/react-core/dist/js/components/Modal";
+import { Tooltip } from "@patternfly/react-core/dist/js/components/Tooltip";
+import { Wizard } from "@patternfly/react-core/dist/js/components/Wizard";
 import { useImportJavaClassesWizardI18n } from "../../i18n";
 import { ImportJavaClassesWizardFirstStep } from 
"./ImportJavaClassesWizardFirstStep";
 import { ImportJavaClassesWizardSecondStep } from 
"./ImportJavaClassesWizardSecondStep";
 import { ImportJavaClassesWizardThirdStep } from 
"./ImportJavaClassesWizardThirdStep";
-import { useCallback, useEffect, useState } from "react";
 import { JavaClass } from "./model/JavaClass";
 import { JavaField } from "./model/JavaField";
 import { DMNSimpleType } from "./model/DMNSimpleType";
 import { getJavaClassSimpleName } from "./model/JavaClassUtils";
-import { GWTLayerService, JavaCodeCompletionService } from "./services";
-import { Button } from "@patternfly/react-core/dist/js/components/Button";
-import { Modal, ModalVariant } from 
"@patternfly/react-core/dist/js/components/Modal";
-import { Tooltip } from "@patternfly/react-core/dist/js/components/Tooltip";
-import { Wizard } from "@patternfly/react-core/dist/js/components/Wizard";
+import { JavaCodeCompletionService } from "./services";
 
-export interface ImportJavaClassesWizardProps {
-  /** Service class which contains all API methods to dialog with GWT layer */
-  gwtLayerService: GWTLayerService;
-  /** Service class which contains all API methods to dialog with Java Code 
Completion Extension*/
+export type LanguageServerStatus = "disable" | "enable" | "loading" | "error";
+
+export type ImportJavaClassesWizardProps = Pick<React.ComponentProps<typeof 
Modal>, "isOpen" | "onClose"> & {
+  onSave: (javaClass: JavaClass[]) => void;
   javaCodeCompletionService: JavaCodeCompletionService;
-}
+};
 
-export const ImportJavaClassesWizard = ({
-  gwtLayerService,
-  javaCodeCompletionService,
-}: ImportJavaClassesWizardProps) => {
-  type ButtonStatus = "disable" | "enable" | "loading" | "error";
-  const { i18n } = useImportJavaClassesWizardI18n();
-  const [javaClasses, setJavaClasses] = useState<JavaClass[]>([]);
-  const [isOpen, setOpen] = useState(false);
-  const [buttonStatus, setButtonStatus] = useState<ButtonStatus>("loading");
+export interface ImportJavaClassesButtonProps {
+  javaCodeCompletionService: JavaCodeCompletionService;
+  handleButtonClick: () => void;
+}
 
+export const useLanguageServerAvailable = (
+  javaCodeCompletionService: JavaCodeCompletionService
+): {
+  languageServerStatus: LanguageServerStatus;
+  isLanguageServerDisabled: boolean;
+  isLanguageServerLoading: boolean;
+  isLanguageServerError: boolean;
+} => {
+  const [languageServerStatus, setLanguageServerStatus] = 
useState<LanguageServerStatus>("loading");
   useEffect(() => {
     try {
       javaCodeCompletionService
         .isLanguageServerAvailable()
         .then((available: boolean) => {
-          setButtonStatus(available ? "enable" : "disable");
+          setLanguageServerStatus(available ? "enable" : "disable");
         })
         .catch((reason) => {
-          setButtonStatus("error");
+          setLanguageServerStatus("error");
           console.error(reason);
         });
     } catch (error) {
-      setButtonStatus("error");
+      setLanguageServerStatus("error");
       console.error(error);
     }
   }, [javaCodeCompletionService]);
+  const isLanguageServerDisabled = useMemo(() => {
+    return "enable" !== languageServerStatus;
+  }, [languageServerStatus]);
 
-  const isButtonDisabled = useCallback(() => {
-    return "enable" !== buttonStatus;
-  }, [buttonStatus]);
+  const isLanguageServerLoading = useMemo(() => {
+    return "loading" == languageServerStatus;
+  }, [languageServerStatus]);
 
-  const isButtonLoading = useCallback(() => {
-    return "loading" == buttonStatus;
-  }, [buttonStatus]);
+  const isLanguageServerError = useMemo(() => {
+    return "error" == languageServerStatus;
+  }, [languageServerStatus]);
+
+  return { languageServerStatus, isLanguageServerDisabled, 
isLanguageServerLoading, isLanguageServerError };
+};
+
+export const ImportJavaClassesButton = ({
+  javaCodeCompletionService,
+  handleButtonClick,
+}: ImportJavaClassesButtonProps) => {
+  const { i18n } = useImportJavaClassesWizardI18n();
+  const { isLanguageServerDisabled, isLanguageServerLoading, 
isLanguageServerError } =
+    useLanguageServerAvailable(javaCodeCompletionService);
 
   const defineTooltipMessage = useCallback(() => {
-    if ("disable" === buttonStatus) {
+    if (isLanguageServerDisabled) {
       return i18n.modalButton.disabledMessage;
-    } else if ("error" === buttonStatus) {
+    } else if (isLanguageServerError) {
       return i18n.modalButton.errorMessage;
     }
     return undefined;
-  }, [buttonStatus, i18n.modalButton.disabledMessage, 
i18n.modalButton.errorMessage]);
+  }, [
+    isLanguageServerDisabled,
+    isLanguageServerError,
+    i18n.modalButton.disabledMessage,
+    i18n.modalButton.errorMessage,
+  ]);
+
+  return (
+    <>
+      {defineTooltipMessage() ? (
+        <Tooltip content={defineTooltipMessage()}>
+          <Button
+            data-testid={"modal-wizard-button"}
+            isAriaDisabled={isLanguageServerDisabled}
+            isLoading={isLanguageServerLoading}
+            onClick={handleButtonClick}
+            variant={"secondary"}
+          >
+            {i18n.modalButton.text}
+          </Button>
+        </Tooltip>
+      ) : (
+        <Button
+          data-testid={"modal-wizard-button"}
+          isAriaDisabled={isLanguageServerDisabled}
+          isLoading={isLanguageServerLoading}
+          onClick={handleButtonClick}
+          variant={"secondary"}
+        >
+          {i18n.modalButton.text}
+        </Button>
+      )}
+    </>
+  );
+};
+
+export const ImportJavaClassesWizard = ({
+  javaCodeCompletionService,
+  isOpen,
+  onClose,
+  onSave,
+}: ImportJavaClassesWizardProps) => {
+  const { i18n } = useImportJavaClassesWizardI18n();
+  const [javaClasses, setJavaClasses] = useState<JavaClass[]>([]);
 
   const updateJavaFieldsReferences = useCallback(
     (updatedJavaClasses: JavaClass[], previousJavaClasses: JavaClass[]) => {
@@ -145,17 +206,15 @@ export const ImportJavaClassesWizard = ({
     return javaClasses.length > 0 && javaClasses.every((javaClass) => 
javaClass.fieldsLoaded);
   }, [javaClasses]);
 
-  const handleButtonClick = useCallback(() => setOpen((prevState) => 
!prevState), []);
-
   const handleWizardClose = useCallback(() => {
-    handleButtonClick();
     setJavaClasses([]);
-  }, [handleButtonClick]);
+    onClose?.();
+  }, [onClose]);
 
   const handleWizardSave = useCallback(() => {
+    onSave?.(javaClasses);
     handleWizardClose();
-    gwtLayerService.importJavaClassesInDataTypeEditor(javaClasses);
-  }, [javaClasses, handleWizardClose, gwtLayerService]);
+  }, [javaClasses, handleWizardClose, onSave]);
 
   const steps = [
     {
@@ -194,47 +253,20 @@ export const ImportJavaClassesWizard = ({
   ];
 
   return (
-    <>
-      {defineTooltipMessage() ? (
-        <Tooltip content={defineTooltipMessage()}>
-          <Button
-            data-testid={"modal-wizard-button"}
-            isAriaDisabled={isButtonDisabled()}
-            isLoading={isButtonLoading()}
-            onClick={handleButtonClick}
-            variant={"secondary"}
-          >
-            {i18n.modalButton.text}
-          </Button>
-        </Tooltip>
-      ) : (
-        <Button
-          data-testid={"modal-wizard-button"}
-          isAriaDisabled={isButtonDisabled()}
-          isLoading={isButtonLoading()}
-          onClick={handleButtonClick}
-          variant={"secondary"}
-        >
-          {i18n.modalButton.text}
-        </Button>
-      )}
-      {isOpen ? (
-        <Modal
-          description={i18n.modalWizard.description}
-          isOpen={isOpen}
-          onClose={handleWizardClose}
-          title={i18n.modalWizard.title}
-          variant={ModalVariant.large}
-        >
-          <Wizard
-            className={"import-java-classes"}
-            height={600}
-            onClose={handleWizardClose}
-            onSave={handleWizardSave}
-            steps={steps}
-          />
-        </Modal>
-      ) : null}
-    </>
+    <Modal
+      description={i18n.modalWizard.description}
+      isOpen={isOpen}
+      onClose={handleWizardClose}
+      title={i18n.modalWizard.title}
+      variant={ModalVariant.large}
+    >
+      <Wizard
+        className={"import-java-classes"}
+        height={600}
+        onClose={handleWizardClose}
+        onSave={handleWizardSave}
+        steps={steps}
+      />
+    </Modal>
   );
 };
diff --git 
a/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
 
b/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
index f07c335488d..46960a4b629 100644
--- 
a/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
+++ 
b/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
@@ -10,7 +10,7 @@ exports[`ImportJavaClasses component tests Should close Modal 
after opening it a
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-5"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-10"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -32,7 +32,7 @@ exports[`ImportJavaClasses component tests Should move to 
second step 1`] = `
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-6"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-12"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -498,7 +498,7 @@ exports[`ImportJavaClasses component tests Should move to 
second step 1`] = `
                   <button
                     aria-disabled="false"
                     class="pf-c-button pf-m-secondary"
-                    data-ouia-component-id="OUIA-Generated-Button-secondary-7"
+                    data-ouia-component-id="OUIA-Generated-Button-secondary-13"
                     data-ouia-component-type="PF4/Button"
                     data-ouia-safe="true"
                     type="button"
@@ -540,7 +540,7 @@ exports[`ImportJavaClasses component tests Should move to 
second step and fetch
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-8"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-15"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -1025,7 +1025,7 @@ exports[`ImportJavaClasses component tests Should move to 
second step and fetch
                   <button
                     aria-disabled="false"
                     class="pf-c-button pf-m-secondary"
-                    data-ouia-component-id="OUIA-Generated-Button-secondary-9"
+                    data-ouia-component-id="OUIA-Generated-Button-secondary-16"
                     data-ouia-component-type="PF4/Button"
                     data-ouia-safe="true"
                     type="button"
@@ -1067,7 +1067,7 @@ exports[`ImportJavaClasses component tests Should move to 
third step 1`] = `
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-13"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-22"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -1527,7 +1527,7 @@ exports[`ImportJavaClasses component tests Should move to 
third step 1`] = `
                   <button
                     aria-disabled="false"
                     class="pf-c-button pf-m-secondary"
-                    data-ouia-component-id="OUIA-Generated-Button-secondary-14"
+                    data-ouia-component-id="OUIA-Generated-Button-secondary-23"
                     data-ouia-component-type="PF4/Button"
                     data-ouia-safe="true"
                     type="button"
@@ -1569,7 +1569,7 @@ exports[`ImportJavaClasses component tests Should search 
box with results works
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-4"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-8"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -1942,7 +1942,7 @@ exports[`ImportJavaClasses component tests Should show 
Modal after clicking on t
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-2"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-4"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
@@ -2248,7 +2248,7 @@ exports[`ImportJavaClasses component tests should render 
ImportJavaClasses Butto
     <button
       aria-disabled="false"
       class="pf-c-button pf-m-secondary pf-m-progress"
-      data-ouia-component-id="OUIA-Generated-Button-secondary-1"
+      data-ouia-component-id="OUIA-Generated-Button-secondary-2"
       data-ouia-component-type="PF4/Button"
       data-ouia-safe="true"
       data-testid="modal-wizard-button"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 64736077e00..da6dfa0b3a7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4157,6 +4157,9 @@ importers:
       '@kie-tools/i18n-common-dictionary':
         specifier: workspace:*
         version: link:../i18n-common-dictionary
+      '@kie-tools/import-java-classes-component':
+        specifier: workspace:*
+        version: link:../import-java-classes-component
       '@kie-tools/pmml-editor-marshaller':
         specifier: workspace:*
         version: link:../pmml-editor-marshaller
@@ -4374,6 +4377,9 @@ importers:
       '@kie-tools-core/react-hooks':
         specifier: workspace:*
         version: link:../react-hooks
+      '@kie-tools-core/vscode-java-code-completion':
+        specifier: workspace:*
+        version: link:../vscode-java-code-completion
       '@kie-tools-core/workspace':
         specifier: workspace:*
         version: link:../workspace
diff --git a/repo/graph.dot b/repo/graph.dot
index 2b68ff4712b..3ed38318da1 100644
--- a/repo/graph.dot
+++ b/repo/graph.dot
@@ -108,6 +108,7 @@ digraph G {
   "@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" [ color = 
"black", fontcolor = "black", style = "dashed, rounded" ];
   "@kie-tools/maven-m2-repo-via-http-image" [ color = "black", fontcolor = 
"black", style = "dashed, rounded" ];
   "@kie-tools/dmn-editor" [ color = "blue", fontcolor = "blue", style = 
"rounded" ];
+  "@kie-tools/import-java-classes-component" [ color = "blue", fontcolor = 
"blue", style = "rounded" ];
   "@kie-tools/pmml-editor-marshaller" [ color = "blue", fontcolor = "blue", 
style = "rounded" ];
   "@kie-tools/dmn-feel-antlr4-parser" [ color = "blue", fontcolor = "blue", 
style = "rounded" ];
   "@kie-tools/dmn-marshaller" [ color = "blue", fontcolor = "blue", style = 
"rounded" ];
@@ -132,7 +133,6 @@ digraph G {
   "@kie-tools/form-code-generator-patternfly-theme" [ color = "blue", 
fontcolor = "blue", style = "rounded" ];
   "@kie-tools/jbpm-form-code-generator-themes" [ color = "blue", fontcolor = 
"blue", style = "rounded" ];
   "@kie-tools-core/i18n" [ color = "purple", fontcolor = "purple", style = 
"rounded" ];
-  "@kie-tools/import-java-classes-component" [ color = "blue", fontcolor = 
"blue", style = "rounded" ];
   "@kie-tools-core/vscode-java-code-completion" [ color = "purple", fontcolor 
= "purple", style = "rounded" ];
   "@kie-tools/runtime-tools-process-dev-ui-webapp" [ color = "blue", fontcolor 
= "blue", style = "rounded" ];
   "@kie-tools/jobs-service-webapp" [ color = "blue", fontcolor = "blue", style 
= "rounded" ];
@@ -373,6 +373,7 @@ digraph G {
   "@kie-tools/dev-deployment-upload-service" -> "@kie-tools/jest-base" [ style 
= "dashed", color = "black" ];
   "@kie-tools/dmn-editor" -> "@kie-tools-core/react-hooks" [ style = "solid", 
color = "blue" ];
   "@kie-tools/dmn-editor" -> "@kie-tools/boxed-expression-component" [ style = 
"solid", color = "blue" ];
+  "@kie-tools/dmn-editor" -> "@kie-tools/import-java-classes-component" [ 
style = "solid", color = "blue" ];
   "@kie-tools/dmn-editor" -> "@kie-tools/pmml-editor-marshaller" [ style = 
"solid", color = "blue" ];
   "@kie-tools/dmn-editor-envelope" -> "@kie-tools-core/editor" [ style = 
"solid", color = "blue" ];
   "@kie-tools/dmn-editor-envelope" -> "@kie-tools/dmn-editor" [ style = 
"solid", color = "blue" ];
diff --git a/repo/graph.json b/repo/graph.json
index 66694a3ffe4..18953cd9098 100644
--- a/repo/graph.json
+++ b/repo/graph.json
@@ -154,6 +154,7 @@
       { "id": "@kie-tools/dev-deployment-kogito-quarkus-blank-app" },
       { "id": "@kie-tools/dev-deployment-kogito-quarkus-blank-app-image" },
       { "id": "@kie-tools/maven-m2-repo-via-http-image" },
+      { "id": "@kie-tools/import-java-classes-component" },
       { "id": "@kie-tools/dmn-feel-antlr4-parser" },
       { "id": "@kie-tools/dmn-marshaller" },
       { "id": "@kie-tools/dmn-marshaller-backend-compatibility-tester" },
@@ -170,7 +171,6 @@
       { "id": "@kie-tools/form-code-generator" },
       { "id": "@kie-tools/form-code-generator-bootstrap4-theme" },
       { "id": "@kie-tools/form-code-generator-patternfly-theme" },
-      { "id": "@kie-tools/import-java-classes-component" },
       { "id": "@kie-tools/runtime-tools-process-webapp-components" },
       { "id": "@kie-tools/runtime-tools-shared-webapp-components" },
       { "id": "@kie-tools/jobs-service-webapp" },
@@ -463,6 +463,11 @@
         "target": "@kie-tools/boxed-expression-component",
         "weight": 1
       },
+      {
+        "source": "@kie-tools/dmn-editor",
+        "target": "@kie-tools/import-java-classes-component",
+        "weight": 1
+      },
       {
         "source": "@kie-tools/dmn-editor",
         "target": "@kie-tools/pmml-editor-marshaller",
@@ -1603,6 +1608,31 @@
         "target": "@kie-tools/root-env",
         "weight": 1
       },
+      {
+        "source": "@kie-tools/import-java-classes-component",
+        "target": "@kie-tools-core/vscode-java-code-completion",
+        "weight": 1
+      },
+      {
+        "source": "@kie-tools/import-java-classes-component",
+        "target": "@kie-tools/i18n-common-dictionary",
+        "weight": 1
+      },
+      {
+        "source": "@kie-tools/import-java-classes-component",
+        "target": "@kie-tools-core/monaco-editor",
+        "weight": 1
+      },
+      {
+        "source": "@kie-tools/import-java-classes-component",
+        "target": "@kie-tools-core/patternfly-base",
+        "weight": 1
+      },
+      {
+        "source": "@kie-tools/import-java-classes-component",
+        "target": "@kie-tools-core/webpack-base",
+        "weight": 1
+      },
       {
         "source": "@kie-tools/dmn-feel-antlr4-parser",
         "target": "@kie-tools/dmn-marshaller",
@@ -1788,31 +1818,6 @@
         "target": "@kie-tools-core/webpack-base",
         "weight": 1
       },
-      {
-        "source": "@kie-tools/import-java-classes-component",
-        "target": "@kie-tools-core/vscode-java-code-completion",
-        "weight": 1
-      },
-      {
-        "source": "@kie-tools/import-java-classes-component",
-        "target": "@kie-tools/i18n-common-dictionary",
-        "weight": 1
-      },
-      {
-        "source": "@kie-tools/import-java-classes-component",
-        "target": "@kie-tools-core/monaco-editor",
-        "weight": 1
-      },
-      {
-        "source": "@kie-tools/import-java-classes-component",
-        "target": "@kie-tools-core/patternfly-base",
-        "weight": 1
-      },
-      {
-        "source": "@kie-tools/import-java-classes-component",
-        "target": "@kie-tools-core/webpack-base",
-        "weight": 1
-      },
       {
         "source": "@kie-tools/runtime-tools-process-webapp-components",
         "target": "@kie-tools/runtime-tools-process-enveloped-components",


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to