package at.fos.ermodel.gui;

import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.MenuItem;
import javafx.scene.control.*;
import javafx.scene.image.ImageView;
import javafx.scene.input.*;
import javafx.scene.paint.Color;
import javafx.scene.transform.Scale;

import java.awt.*;
import java.io.File;
import java.util.*;


public class A3
        extends Canvas {
    final KeyCombination sdfsdfds4564556 = new KeyCodeCombination(KeyCode.DIGIT0, KeyCombination.CONTROL_DOWN);
    final KeyCombination keyCombinationCTRL_R = new KeyCodeCombination(KeyCode.R, KeyCombination.CONTROL_DOWN);
    final KeyCombination keyCombinationCTRL_O = new KeyCodeCombination(KeyCode.O, KeyCombination.CONTROL_DOWN);
    final KeyCombination keyCombinationCTRL_E = new KeyCodeCombination(KeyCode.E, KeyCombination.CONTROL_DOWN);
    final KeyCombination keyCombinationCTRL_N = new KeyCodeCombination(KeyCode.N, KeyCombination.CONTROL_DOWN);
    final KeyCombination dsfsdfdsf56456 = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);
    final KeyCombination sadsdsadsad213213 = new KeyCodeCombination(KeyCode.C, KeyCombination.CONTROL_DOWN);
    final KeyCombination dsfsfdsfd456456 = new KeyCodeCombination(KeyCode.X, KeyCombination.CONTROL_DOWN);
    final KeyCombination dfgsdd456456 = new KeyCodeCombination(KeyCode.V, KeyCombination.CONTROL_DOWN);
    final KeyCombination asdadsa324324 = new KeyCodeCombination(KeyCode.A, KeyCombination.CONTROL_DOWN);
    final KeyCombination keyCombinationCTRL_Z = new KeyCodeCombination(KeyCode.Z, KeyCombination.CONTROL_DOWN);
    final KeyCombination dsfsdfds67678768 = new KeyCodeCombination(KeyCode.Y, KeyCombination.CONTROL_DOWN);
    private final A3 thisERMDrawCanvas;
    private final U1 u1;
    private final double canvasWidth = 2000.0D;
    private final double canvasHeight = 2000.0D;
    private final B3 view;
    private final GraphicsContext gc;
    private final ArrayList<Graphic_Main_Elem> graphicElements;
    private final ArrayList<Graphic_Main_Elem> attributeElements;
    private final ObservableList<Graphic_Main_Elem> graphicElementsObservable;
    private final ArrayList<Double> zooming = new ArrayList<>();
    private final ArrayList<Graphic_Main_Elem> pastActions;
    private final ArrayList<Graphic_Main_Elem> futureActions;
    double dockXAnyElem1 = 0.0D;
    double dockYAnyElem1 = 0.0D;
    double dockXAnyElem2 = 0.0D;
    double dockYAnyElem2 = 0.0D;
    byte dockAtPointAnyElem1 = 0;
    byte asdasdsad435435etertret = 0;
    private boolean elementIsSelected = false;
    private Graphic_Main_Elem sdadasd34535trertertret = null;
    private double xOffset;
    private double yOffset;
    private boolean connectionModeSet;
    private Graphic_Main_Elem anyElem1;
    private Graphic_Main_Elem anyElem2;
    private int selectCounterConnection = 0;
    private C4 relationalModel;
    private long elementID;
    private ContextMenu contextMenu = new ContextMenu();
    private MenuItem addText;
    private MenuItem addName;
    private MenuItem addMinMax;
    private MenuItem addISASpec;
    private MenuItem sadsadas4353453retretret;
    private MenuItem sdfsdfsdfsdfdsf324324;
    private double dialogXPos;
    private double dialogYPos;
    private boolean dsasadasd345435fghgfh;
    private boolean changeDockingPoint;
    private MenuItem changeDockingPointAtFigure1;
    private MenuItem changeDockingPointAtFigure2;
    private Graphic_LINE_Elem connectionToChange;
    private Graphic_Figure_Elem figureToChange1;
    private Graphic_Figure_Elem figureToChange2;
    private boolean rectangleSelection = false;
    private double selectRecX;
    private double selectRecY;
    private double selectRecXEnd;
    private double selectRecYEnd;
    private ArrayList<Graphic_Main_Elem> selectedElements;
    private File modelSavedInFile;
    private String initialDirectory;


    public A3(final B3 view, File modelSavedInFile, final U1 u1) {
        this.thisERMDrawCanvas = this;
        setWidth(this.canvasWidth);
        setHeight(this.canvasHeight);

        this.graphicElements = new ArrayList<>();
        this.attributeElements = new ArrayList<>();

        this.graphicElementsObservable = FXCollections.observableList(this.graphicElements);
        this.graphicElementsObservable.addListener((ListChangeListener<Graphic_Main_Elem>) arg0 -> {
            if (!u1.getText().contains("*")) u1.setText(u1.getText() + "*");
            if (!arg0.next())
                return;
            if (arg0.wasAdded()) {

                view.graphicElemLV.getItems().addAll(arg0.getAddedSubList());


                for (Graphic_Main_Elem gme : arg0.getAddedSubList()) {
                    if (gme instanceof Graphic_ATTR_Elem ||
                            gme instanceof Graphic_ES_Main_Elem ||
                            gme instanceof Graphic_RS_Main_Elem) {
                        A3.this.attributeElements.add(gme);
                    }
                }

                for (Graphic_Main_Elem gme : arg0.getAddedSubList()) {
                    gme.sfdsfsfsddf123234435(U4.ADD);
                    A3.this.pastActions.add(gme);
                }

                A3.this.futureActions.clear();
            }
            arg0.wasUpdated();


            if (arg0.wasRemoved()) {

                view.graphicElemLV.getItems().removeAll(arg0.getRemoved());
                for (Graphic_Main_Elem gme : arg0.getRemoved()) {
                    if (gme instanceof Graphic_ATTR_Elem ||
                            gme instanceof Graphic_ES_Main_Elem ||
                            gme instanceof Graphic_RS_Main_Elem) {
                        A3.this.attributeElements.remove(gme);
                    }
                }

                for (Graphic_Main_Elem gme : arg0.getAddedSubList()) {
                    if (gme instanceof Graphic_ATTR_Elem ||
                            gme instanceof Graphic_ES_Main_Elem ||
                            gme instanceof Graphic_RS_Main_Elem) {
                        A3.this.attributeElements.remove(gme);
                    }
                }

                for (Graphic_Main_Elem gme : arg0.getRemoved()) {
                    gme.sfdsfsfsddf123234435(U4.REMOVE);
                    A3.this.pastActions.add(gme);
                }

                A3.this.futureActions.clear();
            }
            A3.this.asdadsa32432rweewr();

            A3.this.sortGraphicElementsByName();
            if (view.generateRelationalModelCB.isSelected() &&
                    !A3.this.dsfdsdfssdf45645re()) {
                view.verticalBox.getChildren().clear();
            }
        });

        this.pastActions = new ArrayList<>();
        this.futureActions = new ArrayList<>();

        this.elementID = 0L;
        this.view = view;
        this.gc = getGraphicsContext2D();
        setHandler();
        createContextMenu();
        this.modelSavedInFile = modelSavedInFile;

        String dbname = "erdb";
        if (modelSavedInFile != null) dbname = modelSavedInFile.getName().replace(".erm", "") + "db";
        this.relationalModel = new C4(dbname.toLowerCase());
        this.u1 = u1;
    }

    private void clearSelectionRectangle() {
        if (selectRecX < selectRecXEnd) {
            if (selectRecY < selectRecYEnd) {
                gc.clearRect(A3.this.selectRecX - 1.0D,
                        A3.this.selectRecY - 1.0D,
                        Math.abs(A3.this.selectRecXEnd - A3.this.selectRecX) + 2.0D,
                        Math.abs(A3.this.selectRecYEnd - A3.this.selectRecY) + 2.0D);
            } else {
                gc.clearRect(A3.this.selectRecX - 1.0D,
                        A3.this.selectRecYEnd - 1.0D,
                        Math.abs(A3.this.selectRecXEnd - A3.this.selectRecX) + 2.0D,
                        Math.abs(A3.this.selectRecY - A3.this.selectRecYEnd) + 2.0D);
            }
        } else {
            if (selectRecY < selectRecYEnd) {
                gc.clearRect(A3.this.selectRecXEnd - 1.0D,
                        A3.this.selectRecY - 1.0D,
                        Math.abs(A3.this.selectRecX - A3.this.selectRecXEnd) + 2.0D,
                        Math.abs(A3.this.selectRecYEnd - A3.this.selectRecY) + 2.0D);
            } else {
                gc.clearRect(A3.this.selectRecXEnd - 1.0D,
                        A3.this.selectRecYEnd - 1.0D,
                        Math.abs(A3.this.selectRecX - A3.this.selectRecXEnd) + 2.0D,
                        Math.abs(A3.this.selectRecY - A3.this.selectRecYEnd) + 2.0D);
            }
        }
    }

    private void setHandler() {
        this.thisERMDrawCanvas.setOnScroll(event -> {
            if (event.isControlDown()) {
                double zoomFactor = 1.05D;
                double deltaY = event.getDeltaY();
                if (deltaY < 0.0D) {
                    zoomFactor = 0.95D;
                }
                if (zoomFactor == 1.05D) {

                    A3.this.zooming.add(0.95D);
                } else {

                    A3.this.zooming.add(1.05D);
                }

                A3.this.thisERMDrawCanvas.getTransforms().add(new Scale(A3.this.thisERMDrawCanvas.getScaleX() * zoomFactor,
                        A3.this.thisERMDrawCanvas.getScaleY() * zoomFactor));
                event.consume();
            }
        });

        setOnMouseDragged(event -> {
            if (A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh) {
                return;
            }
            if (A3.this.selectedElements != null && A3.this.selectedElements.size() > 0) {

                if (!A3.this.u1.getText().contains("*")) A3.this.u1.setText(A3.this.u1.getText() + "*");


                for (Graphic_Main_Elem ge : A3.this.selectedElements) {
                    double newX = ge.xPos + event.getX() - A3.this.xOffset;
                    double newY = ge.yPos + event.getY() - A3.this.yOffset;

                    if (!A3.this.dsfsdfds435345esfsfd(newX, newY, A3.this.selectedElements)) {
                        event.consume();


                        for (Graphic_Main_Elem geh : A3.this.selectedElements) {
                            newX = geh.xPos;
                            newY = geh.yPos;
                            geh.sdffdsfsdf4354357656(newX, newY);
                            ArrayList<Graphic_LINE_Elem> gleListStart = A3.this.dsfdsfdsjhkj456456(geh);
                            if (gleListStart.size() > 0) {
                                for (Graphic_LINE_Elem gle : gleListStart) {
                                    gle.dsfsdfsfd();

                                    gle.setxPos(((Graphic_Figure_Elem) geh).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[0]);
                                    gle.setyPos(((Graphic_Figure_Elem) geh).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[1]);
                                    gle.safdsadasds32432456456();
                                }
                            }
                            ArrayList<Graphic_LINE_Elem> gleListEnd = A3.this.sdfsdfds23432rwefsd(geh);
                            if (gleListEnd.size() > 0) {
                                for (Graphic_LINE_Elem gle : gleListEnd) {
                                    gle.dsfsdfsfd();
                                    gle.setxEnd(((Graphic_Figure_Elem) geh).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[0]);
                                    gle.setyEnd(((Graphic_Figure_Elem) geh).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[1]);
                                    gle.safdsadasds32432456456();
                                }
                            }
                        }


                        return;
                    }
                }

                for (Graphic_Main_Elem ge : A3.this.selectedElements) {
                    double newX = ge.xPos + event.getX() - A3.this.xOffset;
                    double newY = ge.yPos + event.getY() - A3.this.yOffset;
                    ge.sdffdsfsdf4354357656(newX, newY);

                    ArrayList<Graphic_LINE_Elem> gleListStart = A3.this.dsfdsfdsjhkj456456(ge);
                    if (gleListStart.size() > 0) {
                        for (Graphic_LINE_Elem gle : gleListStart) {
                            gle.dsfsdfsfd();

                            gle.setxPos(((Graphic_Figure_Elem) ge).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[0] + event.getX() - A3.this.xOffset);
                            gle.setyPos(((Graphic_Figure_Elem) ge).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[1] + event.getY() - A3.this.yOffset);
                            gle.safdsadasds32432456456();
                        }
                    }
                    ArrayList<Graphic_LINE_Elem> gleListEnd = A3.this.sdfsdfds23432rwefsd(ge);
                    if (gleListEnd.size() > 0) {
                        for (Graphic_LINE_Elem gle : gleListEnd) {
                            gle.dsfsdfsfd();
                            gle.setxEnd(((Graphic_Figure_Elem) ge).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[0] + event.getX() - A3.this.xOffset);
                            gle.setyEnd(((Graphic_Figure_Elem) ge).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[1] + event.getY() - A3.this.yOffset);
                            gle.safdsadasds32432456456();
                        }
                    }
                }
                A3.this.xOffset = event.getX();
                A3.this.yOffset = event.getY();

                A3.this.dsfsdf12312456dgret(A3.this.selectedElements);

                A3.this.sdfdsf456456fghgf(A3.this.selectedElements);
                event.consume();

                return;
            }

            if (A3.this.elementIsSelected) {

                if (A3.this.sdadasd34535trertertret instanceof Graphic_LINE_Elem) {
                    event.consume();

                    return;
                }
                if (!A3.this.u1.getText().contains("*")) A3.this.u1.setText(A3.this.u1.getText() + "*");

                double newX = A3.this.sdadasd34535trertertret.xPos + event.getX() - A3.this.xOffset;
                double newY = A3.this.sdadasd34535trertertret.yPos + event.getY() - A3.this.yOffset;


                if (A3.this.dsfdsf43534dfdfhg(newX, newY, A3.this.sdadasd34535trertertret)) {
                    return;
                }

                ArrayList<Graphic_LINE_Elem> gleListStart = A3.this.dsfdsfdsjhkj456456(A3.this.sdadasd34535trertertret);
                if (gleListStart.size() > 0) {
                    for (Graphic_LINE_Elem gle : gleListStart) {
                        gle.dsfsdfsfd();
                        gle.setxPos(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[0] + event.getX() - A3.this.xOffset);
                        gle.setyPos(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[1] + event.getY() - A3.this.yOffset);


                        gle.safdsadasds32432456456();
                    }
                }
                ArrayList<Graphic_LINE_Elem> gleListEnd = A3.this.sdfsdfds23432rwefsd(A3.this.sdadasd34535trertertret);
                if (gleListEnd.size() > 0) {
                    for (Graphic_LINE_Elem gle : gleListEnd) {
                        gle.dsfsdfsfd();
                        gle.setxEnd(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[0] + event.getX() - A3.this.xOffset);
                        gle.setyEnd(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[1] + event.getY() - A3.this.yOffset);


                        gle.safdsadasds32432456456();
                    }
                }

                A3.this.sdadasd34535trertertret.sdffdsfsdf4354357656(newX, newY);
                A3.this.xOffset = event.getX();
                A3.this.yOffset = event.getY();

                ArrayList<Graphic_Main_Elem> elList = new ArrayList<>();
                elList.add(A3.this.sdadasd34535trertertret);
                A3.this.dsfsdfd456456rezrez(elList);
                event.consume();

                return;
            }

            if (rectangleSelection) {
                clearSelectionRectangle();

                selectRecXEnd = event.getX();
                selectRecYEnd = event.getY();

                gc.setLineWidth(1.0D);
                gc.setLineDashes(3.0D);
                gc.setStroke(Color.RED);

                if (selectRecX < selectRecXEnd) {
                    if (selectRecY < selectRecYEnd) {
                        gc.strokeRect(A3.this.selectRecX,
                                A3.this.selectRecY,
                                Math.abs(A3.this.selectRecXEnd - A3.this.selectRecX),
                                Math.abs(A3.this.selectRecYEnd - A3.this.selectRecY));
                    } else {
                        gc.strokeRect(A3.this.selectRecX,
                                A3.this.selectRecYEnd,
                                Math.abs(A3.this.selectRecXEnd - A3.this.selectRecX),
                                Math.abs(A3.this.selectRecY - A3.this.selectRecYEnd));
                    }
                } else {
                    if (selectRecY < selectRecYEnd) {
                        gc.strokeRect(A3.this.selectRecXEnd,
                                A3.this.selectRecY,
                                Math.abs(A3.this.selectRecX - A3.this.selectRecXEnd),
                                Math.abs(A3.this.selectRecYEnd - A3.this.selectRecY));
                    } else {
                        gc.strokeRect(A3.this.selectRecXEnd,
                                A3.this.selectRecYEnd,
                                Math.abs(A3.this.selectRecX - A3.this.selectRecXEnd),
                                Math.abs(A3.this.selectRecY - A3.this.selectRecYEnd));
                    }
                }

                gc.setLineDashes();
                thisERMDrawCanvas.sdfsdfds3465er(false);
            }
            event.consume();
        });


        setOnMouseReleased(event -> {
            if (A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh) {
                return;
            }
            if (A3.this.selectedElements != null && A3.this.selectedElements.size() > 0) {
                event.consume();

                return;
            }
            if (A3.this.rectangleSelection) {
                A3.this.selectRecXEnd = event.getX();
                A3.this.selectRecYEnd = event.getY();
                clearSelectionRectangle();

                A3.this.selectedElements = A3.this.thisERMDrawCanvas.selectElementsInRectangle(A3.this.selectRecX - 1.0D, A3.this.selectRecY - 1.0D, A3.this.selectRecXEnd + 2.0D, A3.this.selectRecYEnd + 2.0D);

                if (A3.this.selectedElements.size() == 0) {
                    A3.this.rectangleSelection = false;
                } else {

                    A3.this.dsfsdfd456456rezrez(A3.this.selectedElements);
                }
                event.consume();
            }
        });

        setOnMouseMoved(event -> {
            if (A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh)
                return;
            A3.this.thisERMDrawCanvas.requestFocus();

            if (A3.this.selectedElements != null && A3.this.selectedElements.size() > 0) {
                event.consume();
                return;
            }
            if (A3.this.rectangleSelection) {
                event.consume();

                return;
            }

            if (A3.this.selectCounterConnection == 1) {
                A3.this.sdfsdfds3465er(true);
                A3.this.sdfdsfdsdf34543erretwre();
                A3.this.anyElem1.selectElem();
                A3.this.gc.setStroke(C2.TEMPLINEColor);
                A3.this.gc.strokeLine(A3.this.dockXAnyElem1, A3.this.dockYAnyElem1, event.getX(), event.getY());

                for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                    if (A3.this.anyElem1 == gme ||
                            !(gme instanceof Graphic_Figure_Elem))
                        continue;
                    if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                        double[] dockablePoints = ((Graphic_Figure_Elem) gme).getDockablePoint(event.getX(), event.getY());

                        if (dockablePoints != null) {
                            if (gme.isConnectable) {
                                ((Graphic_Figure_Elem) gme).drawDockablePoint(C2.TEMPLINEColor, (int) dockablePoints[2]);
                            }
                        }
                    }
                }
            }
            if (A3.this.isConnectionModeSet() && A3.this.selectCounterConnection == 0) {
                A3.this.sdfsdfds3465er(true);
                A3.this.sdfdsfdsdf34543erretwre();

                for (Graphic_Main_Elem gme : A3.this.graphicElements) {
                    if (!(gme instanceof Graphic_Figure_Elem))
                        continue;
                    if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                        double[] dockablePoints = ((Graphic_Figure_Elem) gme).getDockablePoint(event.getX(), event.getY());

                        if (dockablePoints != null &&
                                gme.isConnectable) {
                            ((Graphic_Figure_Elem) gme).drawDockablePoint(C2.TEMPLINEColor, (int) dockablePoints[2]);
                        }
                    }
                }
            }

            if (!A3.this.view.selectModeBTN.isSelected()) {
                return;
            }

            for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                    gme.dgfdsfdssfd43534456();

                    A3.this.view.graphicElemLV.getSelectionModel().select(gme);
                    A3.this.view.graphicElemLV.scrollTo(A3.this.view.graphicElemLV.getSelectionModel().getSelectedIndex());


                    if (A3.this.view.generateRelationalModelCB.isSelected()) {
                        T1 tableExists = A3.this.relationalModel.getTableGivenNumber(gme.sdfsdfsdfd());


                        if (tableExists == null) {
                            tableExists = A3.this.relationalModel.getColumnGivenNumber(gme.sdfsdfsdfd());
                        }

                        int indexOfTable;
                        if (tableExists != null) {
                            indexOfTable = 0;
                            for (TreeItem<T1> tableInTree : A3.this.view.rootTableNode.getChildren()) {
                                if (tableInTree.getValue().getTablename().equals(tableExists.getTablename())) {
                                    break;
                                }
                                indexOfTable++;
                            }

                            A3.this.dsfsdfds7687683rew(A3.this.view.rootTableNode);
                            A3.this.view.rootTableNode.setExpanded(true);
                            A3.this.view.treeTableView.getSelectionModel().select(indexOfTable);
                            A3.this.view.treeTableView.scrollTo(A3.this.view.treeTableView.getSelectionModel().getSelectedIndex());

                            A3.this.sfdsfsfdss324243wer(tableExists);
                        }
                    } else {

                        A3.this.view.verticalBox.getChildren().clear();
                    }


                    if (A3.this.sdadasd34535trertertret != null && gme != A3.this.sdadasd34535trertertret)
                        A3.this.sdadasd34535trertertret.dfsdfssdf456456();
                    A3.this.sdadasd34535trertertret = gme;
                    A3.this.elementIsSelected = true;
                    A3.this.thisERMDrawCanvas.requestFocus();
                    event.consume();


                    return;
                }
            }

            if (A3.this.sdadasd34535trertertret != null) A3.this.sdadasd34535trertertret.dfsdfssdf456456();
            A3.this.elementIsSelected = false;
            A3.this.sdadasd34535trertertret = null;
            A3.this.sdfsdfds3465er(true);
            event.consume();
        });


        setOnMousePressed(event -> {
            A3.this.u1.stackpane.requestFocus();


            if (A3.this.rectangleSelection) {
                A3.this.selectRecX = event.getX();
                A3.this.selectRecY = event.getY();
                A3.this.xOffset = event.getX();
                A3.this.yOffset = event.getY();
                event.consume();
                A3.this.thisERMDrawCanvas.requestFocus();

                return;
            }
            if (event.getButton() == MouseButton.PRIMARY && A3.this.view.selectModeBTN.isSelected()) {

                if (A3.this.elementIsSelected) {
                    A3.this.xOffset = event.getX();
                    A3.this.yOffset = event.getY();
                    event.consume();
                    A3.this.thisERMDrawCanvas.requestFocus();

                    return;
                }
                A3.this.selectRecX = event.getX();
                A3.this.selectRecY = event.getY();
                A3.this.rectangleSelection = true;
                event.consume();
                A3.this.thisERMDrawCanvas.requestFocus();


                return;
            }

            if (event.getButton() == MouseButton.SECONDARY && A3.this.elementIsSelected) {


                A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = true;

                if (!A3.this.thisERMDrawCanvas.contextMenu.isShowing()) {
                    A3.this.thisERMDrawCanvas.createContextMenu();
                    A3.this.thisERMDrawCanvas.setContextMenuItems(event.getScreenX() + 2.0D, event.getScreenY());

                    A3.this.thisERMDrawCanvas.contextMenu.show(A3.this.thisERMDrawCanvas, event.getScreenX() + 2.0D, event.getScreenY());
                    event.consume();
                    A3.this.thisERMDrawCanvas.requestFocus();
                }

                return;
            }

            if (event.getButton() == MouseButton.PRIMARY) {


                if (A3.this.view.attrToAttrBTN.isSelected()) {

                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY()) && gme instanceof Graphic_ATTR_Elem) {


                            A3.this.sdfsdfsfds234324rew(gme, 0, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                            A3.this.thisERMDrawCanvas.requestFocus();

                            return;
                        }
                    }

                    return;
                }

                if (A3.this.view.attrToESBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY()) && (
                                gme instanceof Graphic_ATTR_Elem || gme instanceof Graphic_ES_Elem || gme instanceof Graphic_ES_Assoc_Elem || gme instanceof Graphic_ES_Weak_Elem)) {


                            A3.this.sdfsdfsfds234324rew(gme, 1, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                            A3.this.thisERMDrawCanvas.requestFocus();

                            return;
                        }
                    }

                    return;
                }

                if (A3.this.view.attrToRSBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY()) && (
                                gme instanceof Graphic_ATTR_Elem || gme instanceof Graphic_RS_Elem)) {


                            A3.this.sdfsdfsfds234324rew(gme, 2, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                            A3.this.thisERMDrawCanvas.requestFocus();

                            return;
                        }
                    }

                    return;
                }

                if (A3.this.view.rsidToESWeakBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                            if (gme instanceof Graphic_RS_Identifying_Elem || gme instanceof Graphic_ES_Weak_Elem) {


                                A3.this.sdfsdfsfds234324rew(gme, 6, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                                A3.this.thisERMDrawCanvas.requestFocus();

                                return;
                            }
                        }
                    }

                    return;
                }
                if (A3.this.view.rsisaGeToESBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                            if (gme instanceof Graphic_ES_Weak_Elem || gme instanceof Graphic_ES_Elem || gme instanceof Graphic_RS_ISA_Elem) {


                                A3.this.sdfsdfsfds234324rew(gme, 4, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                                A3.this.thisERMDrawCanvas.requestFocus();

                                return;
                            }
                        }
                    }

                    return;
                }
                if (A3.this.view.rsisaSpToESBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                            if (gme instanceof Graphic_ES_Elem || gme instanceof Graphic_RS_ISA_Elem) {


                                A3.this.sdfsdfsfds234324rew(gme, 5, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                                A3.this.thisERMDrawCanvas.requestFocus();

                                return;
                            }
                        }
                    }

                    return;
                }
                if (A3.this.view.rsToESBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                            if (gme instanceof Graphic_Figure_Elem && !(gme instanceof Graphic_RS_ISA_Elem)) {


                                A3.this.sdfsdfsfds234324rew(gme, 3, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                                A3.this.thisERMDrawCanvas.requestFocus();

                                return;
                            }
                        }
                    }

                    return;
                }
                if (A3.this.view.rsidToESBTN.isSelected()) {


                    for (Graphic_Main_Elem gme : A3.this.graphicElements) {

                        if (gme.dsfsfds45645456(event.getX(), event.getY())) {
                            if (gme instanceof Graphic_RS_Identifying_Elem ||
                                    gme instanceof Graphic_ES_Elem ||
                                    gme instanceof Graphic_ES_Weak_Elem ||
                                    gme instanceof Graphic_ES_Assoc_Elem) {


                                A3.this.sdfsdfsfds234324rew(gme, 7, event.getX(), event.getY(), event.getScreenX(), event.getScreenY());
                                A3.this.thisERMDrawCanvas.requestFocus();

                                return;
                            }
                        }
                    }

                    return;
                }

                Graphic_Main_Elem gese = null;
                String name = null;

                if (!A3.this.view.selectModeBTN.isSelected() && !A3.this.view.rsISABTN.isSelected() && !A3.this.view.textElemBTN.isSelected() && !A3.this.view.textWithoutBorderElemBTN.isSelected()) {
                    A5 ermend = new A5(A3.this.thisERMDrawCanvas, event.getScreenX(), event.getScreenY(), null);

                    if (ermend.isDoNothing())
                        return;
                    name = ermend.getNameTF().getText();
                }


                if (A3.this.view.textElemBTN.isSelected() || A3.this.view.textWithoutBorderElemBTN.isSelected()) {
                    A7 ermend = new A7(A3.this.thisERMDrawCanvas, event.getScreenX(), event.getScreenY(), null);
                    if (ermend.isDoNothing())
                        return;
                    name = ermend.getTextTA().getText();
                    boolean hasBorder = !A3.this.view.textWithoutBorderElemBTN.isSelected();
                    gese = new Graphic_Text_Elem(A3.this.gc, event.getX(), event.getY(), name, hasBorder, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.esBTN.isSelected()) {
                    gese = new Graphic_ES_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.esWeakBTN.isSelected()) {
                    gese = new Graphic_ES_Weak_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.esAssociativeBTN.isSelected()) {
                    gese = new Graphic_ES_Assoc_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.rsBTN.isSelected()) {
                    gese = new Graphic_RS_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.rsIDBTN.isSelected()) {
                    gese = new Graphic_RS_Identifying_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.rsISABTN.isSelected()) {
                    A6 ermend = new A6(A3.this.thisERMDrawCanvas, event.getScreenX(), event.getScreenY(), null, null);


                    if (ermend.isDoNothing())
                        return;
                    gese = new Graphic_RS_ISA_Elem(A3.this.gc, event.getX(), event.getY(), "ISA", A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                    ((Graphic_RS_ISA_Elem) gese).setPartial_or_total(ermend.getP_tTF().getText());
                    ((Graphic_RS_ISA_Elem) gese).setDisjunct_or_notdisjunct(ermend.getD_ndTF().getText());
                }
                if (A3.this.view.attrOneBTN.isSelected()) {
                    gese = new Graphic_ATTR_One_Elem(A3.this.gc, event.getX(), event.getY(), name, false, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.attrMultiBTN.isSelected()) {
                    gese = new Graphic_ATTR_Multi_Elem(A3.this.gc, event.getX(), event.getY(), name, false, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.attrDerivedOneBTN.isSelected()) {
                    gese = new Graphic_ATTR_One_Elem(A3.this.gc, event.getX(), event.getY(), name, true, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.attrDerivedMultiBTN.isSelected()) {
                    gese = new Graphic_ATTR_Multi_Elem(A3.this.gc, event.getX(), event.getY(), name, true, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.attrKeyBTN.isSelected()) {
                    gese = new Graphic_ATTR_Key_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }
                if (A3.this.view.attrWeakKeyBTN.isSelected()) {
                    gese = new Graphic_ATTR_Weak_Key_Elem(A3.this.gc, event.getX(), event.getY(), name, A3.this.thisERMDrawCanvas.sdfsddf345ersdf());
                }


                assert gese != null;
                gese.safdsadasds32432456456();

                A3.this.graphicElementsObservable.add(gese);


                String operatingSystem = System.getProperty("os.name");

                if (!operatingSystem.toLowerCase().contains("linux")) {

                    try {
                        (new Robot()).keyPress(9);
                    } catch (AWTException ignored) {
                    }
                }


                if (A3.this.view.generateRelationalModelCB.isSelected() &&
                        !A3.this.dsfdsdfssdf45645re()) {
                    A3.this.view.verticalBox.getChildren().clear();
                }
                A3.this.thisERMDrawCanvas.requestFocus();
            }
        });
    }


    private boolean sfsdfsdf4354353(int connectionType, Graphic_Main_Elem anyElem1, Graphic_Main_Elem anyElem2) {
        boolean connectionAllowed = true;

        if (connectionType == 4 || connectionType == 5) {

            if (anyElem1 instanceof Graphic_RS_ISA_Elem &&
                    !(anyElem2 instanceof Graphic_ES_Elem)) connectionAllowed = false;


            if (anyElem1 instanceof Graphic_ES_Elem &&
                    !(anyElem2 instanceof Graphic_RS_ISA_Elem)) connectionAllowed = false;


            return connectionAllowed;
        }


        if (connectionType == 3) {

            if (anyElem1 instanceof Graphic_RS_Elem &&
                    !(anyElem2 instanceof Graphic_ES_Main_Elem)) connectionAllowed = false;


            if (anyElem1 instanceof Graphic_ES_Main_Elem &&
                    !(anyElem2 instanceof Graphic_RS_Elem)) connectionAllowed = false;


            if (anyElem1 instanceof Graphic_ES_Assoc_Elem &&
                    anyElem2 instanceof Graphic_ES_Main_Elem) connectionAllowed = true;

            if (anyElem1 instanceof Graphic_ES_Main_Elem &&
                    anyElem2 instanceof Graphic_ES_Assoc_Elem) connectionAllowed = true;


            return connectionAllowed;
        }


        if (connectionType == 7) {


            connectionAllowed = connectionExists(anyElem1, anyElem2);


            return connectionAllowed;
        }


        if (connectionType == 6) {


            connectionAllowed = connectionExists(anyElem1, anyElem2);


            return connectionAllowed;
        }


        if (connectionType == 2) {

            if (anyElem1 instanceof Graphic_RS_Elem) {
                if (!(anyElem2 instanceof Graphic_ATTR_Elem)) connectionAllowed = false;

            }
            if (anyElem1 instanceof Graphic_ATTR_Elem &&
                    !(anyElem2 instanceof Graphic_RS_Elem)) connectionAllowed = false;


            return connectionAllowed;
        }


        if (connectionType == 1) {
            if (anyElem1 instanceof Graphic_ES_Main_Elem) {
                if (!(anyElem2 instanceof Graphic_ATTR_Elem)) connectionAllowed = false;

            }
            if (anyElem1 instanceof Graphic_ATTR_Elem &&
                    !(anyElem2 instanceof Graphic_ES_Main_Elem)) connectionAllowed = false;


            return connectionAllowed;
        }


        if (connectionType == 0) {

            connectionAllowed = connectionExists(anyElem1, anyElem2);
        }


        return connectionAllowed;
    }


    private boolean connectionExists(Graphic_Main_Elem anyElem1, Graphic_Main_Elem anyElem2) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_LINE_Elem gmeline) {
                if (gmeline.getConnectedWithEnd() == anyElem1 &&
                        gmeline.getConnectedWithStart() == anyElem2) return false;
                if (gmeline.getConnectedWithEnd() == anyElem2 &&
                        gmeline.getConnectedWithStart() == anyElem1) return false;
            }
        }
        return true;
    }


    public void setConnectivityForFigures() {
        Graphic_Main_Elem gme;
        Iterator<Graphic_Main_Elem> var2;
        for (var2 = this.graphicElements.iterator(); var2.hasNext(); gme.isConnectable = false) {
            gme = var2.next();
        }

        var2 = this.graphicElements.iterator();

        while (true) {
            do {
                do {
                    do {
                        if (!var2.hasNext()) {
                            return;
                        }

                        gme = var2.next();
                    } while (!(gme instanceof Graphic_Figure_Elem));

                    if (this.view.attrToAttrBTN.isSelected() && gme instanceof Graphic_ATTR_Elem && !((Graphic_ATTR_Elem) gme).isKey()) {
                        gme.isConnectable = true;
                    }

                    if (this.view.attrToESBTN.isSelected() && (gme instanceof Graphic_ATTR_Elem || gme instanceof Graphic_ES_Main_Elem)) {
                        gme.isConnectable = !(gme instanceof Graphic_ATTR_Elem) || this.attributeHasESRSConnection((Graphic_ATTR_Elem) gme);
                    }

                    if (this.view.attrToRSBTN.isSelected() && (gme instanceof Graphic_ATTR_Elem || gme instanceof Graphic_RS_Main_Elem) && !(gme instanceof Graphic_RS_ISA_Elem) && !(gme instanceof Graphic_RS_Identifying_Elem)) {
                        gme.isConnectable = !(gme instanceof Graphic_ATTR_Elem) || this.attributeHasESRSConnection((Graphic_ATTR_Elem) gme);
                    }

                    if (this.view.rsToESBTN.isSelected() && (gme instanceof Graphic_ES_Main_Elem || gme instanceof Graphic_RS_Elem)) {
                        gme.isConnectable = true;
                    }

                    if (this.view.rsidToESWeakBTN.isSelected() && (gme instanceof Graphic_ES_Weak_Elem || gme instanceof Graphic_RS_Identifying_Elem)) {
                        gme.isConnectable = true;
                    }

                    if (this.view.rsidToESBTN.isSelected() && (gme instanceof Graphic_ES_Elem || gme instanceof Graphic_ES_Assoc_Elem || gme instanceof Graphic_RS_Identifying_Elem || gme instanceof Graphic_ES_Weak_Elem)) {
                        gme.isConnectable = true;
                    }

                    if (this.view.rsisaGeToESBTN.isSelected() && (gme instanceof Graphic_ES_Elem || gme instanceof Graphic_RS_ISA_Elem)) {
                        gme.isConnectable = true;
                    }
                } while (!this.view.rsisaSpToESBTN.isSelected());
            } while (!(gme instanceof Graphic_ES_Elem) && !(gme instanceof Graphic_RS_ISA_Elem));

            gme.isConnectable = true;
        }
    }


    private boolean attributeHasESRSConnection(Graphic_ATTR_Elem gmeAttribute) {
        boolean found = false;
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_LINE_Attr_ES_Elem ||
                    gme instanceof Graphic_LINE_Attr_RS_Elem) {
                Graphic_LINE_Elem gmeline = (Graphic_LINE_Elem) gme;
                if (gmeline.getConnectedWithEnd() == gmeAttribute ||
                        gmeline.getConnectedWithStart() == gmeAttribute) return false;
            }
        }
        return !found;
    }


    private void sdfsdfsfds234324rew(Graphic_Main_Elem gme, int connectionType, double mouseX, double mouseY, double screenX, double screenY) {
        if (!gme.isConnectable) {
            return;
        }

        double[] dockablePoints = ((Graphic_Figure_Elem) gme).getDockablePoint(mouseX, mouseY);
        if (dockablePoints == null) {
            return;
        }
        switch (this.selectCounterConnection) {
            case 0 -> {
                this.anyElem1 = gme;
                this.selectCounterConnection++;
                this.view.buttonPane.setDisable(true);
                gme.dgfdsfdssfd43534456();
                this.dockXAnyElem1 = dockablePoints[0];
                this.dockYAnyElem1 = dockablePoints[1];
                this.dockAtPointAnyElem1 = (byte) (int) dockablePoints[2];
                return;
            }
            case 1 -> {
                if (!sfsdfsdf4354353(connectionType, this.anyElem1, gme)) {
                    return;
                }
                this.anyElem2 = gme;
                if (this.anyElem1 == this.anyElem2) {
                    return;
                }
                this.selectCounterConnection++;
                gme.dgfdsfdssfd43534456();
                this.dockXAnyElem2 = dockablePoints[0];
                this.dockYAnyElem2 = dockablePoints[1];
                this.asdasdsad435435etertret = (byte) (int) dockablePoints[2];
            }
        }


        if (this.selectCounterConnection >= 2) {
            String minimum, maximum;
            this.view.buttonPane.setDisable(false);


            Graphic_LINE_Elem gese = null;
            switch (connectionType) {
                case 0 -> gese = new Graphic_LINE_Attr_Attr_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 1 -> gese = new Graphic_LINE_Attr_ES_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 2 -> gese = new Graphic_LINE_Attr_RS_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 4 -> gese = new Graphic_LINE_RSISAG_ES_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 5 -> gese = new Graphic_LINE_RSISAS_ES_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 6 -> gese = new Graphic_LINE_RSID_ESWEAK_Elem(this.gc,
                        this.dockXAnyElem1, this.dockYAnyElem1,
                        this.dockXAnyElem2, this.dockYAnyElem2,
                        this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                        (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                        this.thisERMDrawCanvas.sdfsddf345ersdf());
                case 3, 7 -> {
                    if (!this.changeDockingPoint) {
                        A4 ermminmax = new A4(this.thisERMDrawCanvas,
                                screenX,
                                screenY,
                                "0", "n");
                        if (ermminmax.isDoNothing()) {

                            this.selectCounterConnection = 0;
                            this.anyElem1.dfsdfssdf456456();
                            this.anyElem2.dfsdfssdf456456();
                            this.anyElem1 = null;
                            this.anyElem2 = null;
                            this.dockXAnyElem1 = 0.0D;
                            this.dockYAnyElem1 = 0.0D;
                            this.dockXAnyElem2 = 0.0D;
                            this.dockYAnyElem2 = 0.0D;
                            this.dockAtPointAnyElem1 = 0;
                            this.asdasdsad435435etertret = 0;

                            sdfsdfds3465er(true);
                            sdfdsfdsdf34543erretwre();
                            return;
                        }
                        minimum = ermminmax.getMinTF().getText();
                        maximum = ermminmax.getMaxTF().getText();
                    } else {

                        minimum = this.connectionToChange.getMinimum();
                        maximum = this.connectionToChange.getMaximum();
                    }
                    if (connectionType == 3) {
                        gese = new Graphic_LINE_RS_ES_Elem(this.gc,
                                this.dockXAnyElem1, this.dockYAnyElem1,
                                this.dockXAnyElem2, this.dockYAnyElem2,
                                this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                                (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                                this.thisERMDrawCanvas.sdfsddf345ersdf());
                    }
                    if (connectionType == 7)
                        gese = new Graphic_LINE_RSID_ES_Elem(this.gc,
                                this.dockXAnyElem1, this.dockYAnyElem1,
                                this.dockXAnyElem2, this.dockYAnyElem2,
                                this.dockAtPointAnyElem1, this.asdasdsad435435etertret,
                                (Graphic_Figure_Elem) this.anyElem1, (Graphic_Figure_Elem) this.anyElem2,
                                this.thisERMDrawCanvas.sdfsddf345ersdf());
                    gese.setMinimum(minimum);
                    gese.setMaximum(maximum);
                }
            }


            this.graphicElementsObservable.add(gese);


            this.selectCounterConnection = 0;
            this.anyElem1.dfsdfssdf456456();
            this.anyElem2.dfsdfssdf456456();
            this.anyElem1 = null;
            this.anyElem2 = null;
            this.dockXAnyElem1 = 0.0D;
            this.dockYAnyElem1 = 0.0D;
            this.dockXAnyElem2 = 0.0D;
            this.dockYAnyElem2 = 0.0D;
            this.dockAtPointAnyElem1 = 0;
            this.asdasdsad435435etertret = 0;

            sdfsdfds3465er(true);

            if (this.changeDockingPoint) {
                this.view.selectModeBTN.setSelected(true);
                this.changeDockingPoint = false;
            } else {
                sdfdsfdsdf34543erretwre();
            }
            if (this.view.generateRelationalModelCB.isSelected() &&
                    !dsfdsdfssdf45645re()) {
                this.view.verticalBox.getChildren().clear();
            }
        }
    }


    public void clearERMDrawCanvas() {
        this.gc.clearRect(0.0D, 0.0D, getWidth(), getHeight());

        this.graphicElementsObservable.clear();

        this.attributeElements.clear();


        this.elementID = 1L;
    }


    public void sdfdsfdsf43645re() {
        this.selectedElements = new ArrayList<>();
        for (Graphic_Main_Elem gme : this.graphicElements) {
            this.selectedElements.add(gme);
            gme.selectElem();
        }
        this.rectangleSelection = true;
    }


    public void sdfsdfds3465er(boolean clearCanvas) {
        if (clearCanvas) sfdsfsd43543();

        dsfsdf12312456dgret(null);
        sdfdsf456456fghgf(null);
    }


    public void dsfsdfd456456rezrez(ArrayList<Graphic_Main_Elem> without) {
        dsfsdf12312456dgret(without);
        sdfdsf456456fghgf(without);
    }


    private void dsfsdf12312456dgret(ArrayList<Graphic_Main_Elem> without) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if ((gme instanceof Graphic_Figure_Elem || gme instanceof Graphic_Text_Elem) && (
                    without == null || sadsadaads435435rete(without, gme))) gme.safdsadasds32432456456();

        }
    }


    private void sdfdsf456456fghgf(ArrayList<Graphic_Main_Elem> without) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_LINE_Elem && (
                    without == null || sadsadaads435435rete(without, gme))) gme.safdsadasds32432456456();

        }
    }


    private boolean sadsadaads435435rete(ArrayList<Graphic_Main_Elem> without, Graphic_Main_Elem figure) {
        boolean found = true;
        if (without.contains(figure)) return false;
        return found;
    }


    public ArrayList<Graphic_LINE_Elem> dsfdsfdsjhkj456456(Graphic_Main_Elem elementSelected) {
        ArrayList<Graphic_LINE_Elem> gle = new ArrayList<>();
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_LINE_Elem && (
                    (Graphic_LINE_Elem) gme).getConnectedWithStart().sdfsdfsdfd() == elementSelected.sdfsdfsdfd()) {
                gle.add((Graphic_LINE_Elem) gme);
            }
        }

        return gle;
    }


    public ArrayList<Graphic_LINE_Elem> sdfsdfds23432rwefsd(Graphic_Main_Elem elementSelected) {
        ArrayList<Graphic_LINE_Elem> gle = new ArrayList<>();
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_LINE_Elem && (
                    (Graphic_LINE_Elem) gme).getConnectedWithEnd().sdfsdfsdfd() == elementSelected.sdfsdfsdfd()) {
                gle.add((Graphic_LINE_Elem) gme);
            }
        }

        return gle;
    }


    public void sdfdsfd567657rrt(KeyEvent event) {
        if (this.thisERMDrawCanvas.contextMenu.isShowing()) {
            return;
        }
        if (this.keyCombinationCTRL_R.match(event)) {
            (this.view.getCurrentTab()).canvas.sdfsdfds3465er(true);
            event.consume();
        }


        if (this.keyCombinationCTRL_O.match(event)) {
            this.view.readModel();
            event.consume();
        }


        if (this.keyCombinationCTRL_E.match(event)) {
            this.view.close();
            return;
        }

        if (this.keyCombinationCTRL_N.match(event)) {
            this.view.setCurrentTab(this.view.addNewTab(null));
            (this.view.getCurrentTab()).canvas.requestFocus();
            this.view.tabPane.getSelectionModel().select(this.view.getCurrentTab());
            event.consume();

            return;
        }

        if (this.dsfsdfdsf56456.match(event)) {
            this.view.saveModel();
            event.consume();

            return;
        }

        if (this.sdfsdfds4564556.match(event)) {
            Collections.reverse(this.zooming);
            for (Double d : this.zooming) {
                this.thisERMDrawCanvas.getTransforms().add(new Scale(this.thisERMDrawCanvas.getScaleX() * d,
                        this.thisERMDrawCanvas.getScaleY() * d));
            }
            this.thisERMDrawCanvas
                    .zooming.clear();
            setWidth(this.canvasWidth);
            setHeight(this.canvasHeight);
            event.consume();

            return;
        }

        if (this.dsfsfdsfd456456.match(event)) {
            this.thisERMDrawCanvas.requestFocus();

            if (this.selectedElements != null) {
                this.view.setToCopyElements(new ArrayList<>());
                for (Graphic_Main_Elem gme : this.selectedElements) {
                    Graphic_Main_Elem gmeCopy = (Graphic_Main_Elem) T3.copyObject(gme);
                    this.view.getToCopyElements().add(gmeCopy);
                }

                for (Graphic_Main_Elem gme : this.selectedElements) {
                    gme.dsfsdfsfd();
                    sfsdfsfds4343(gme.sdfsdfsdfd());
                }
            }
            event.consume();

            return;
        }

        if (this.sadsdsadsad213213.match(event)) {
            this.thisERMDrawCanvas.requestFocus();

            if (this.selectedElements != null) {
                this.view.setToCopyElements(new ArrayList<>());
                for (Graphic_Main_Elem gme : this.selectedElements) {
                    Graphic_Main_Elem gmeCopy = (Graphic_Main_Elem) T3.copyObject(gme);
                    this.view.getToCopyElements().add(gmeCopy);
                }
            }
            event.consume();

            return;
        }

        if (this.dfgsdd456456.match(event)) {
            this.thisERMDrawCanvas.requestFocus();
            if (this.view.getToCopyElements() != null) {

                ArrayList<Graphic_Main_Elem> elementsPrepared = new ArrayList<>();
                for (Graphic_Main_Elem gme : this.view.getToCopyElements()) {
                    Graphic_Main_Elem gmeCopy = (Graphic_Main_Elem) T3.copyObject(gme);
                    elementsPrepared.add(gmeCopy);
                }


                for (Graphic_Main_Elem gme : elementsPrepared) {

                    if (gme instanceof Graphic_LINE_Elem) {
                        for (Graphic_Main_Elem gmeLinePoint : elementsPrepared) {
                            if (gmeLinePoint instanceof Graphic_Figure_Elem) {
                                if (((Graphic_LINE_Elem) gme).getConnectedWithEnd().sdfsdfsdfd() == gmeLinePoint.sdfsdfsdfd()) {
                                    ((Graphic_LINE_Elem) gme).setConnectedWithEnd((Graphic_Figure_Elem) gmeLinePoint);
                                }
                                if (((Graphic_LINE_Elem) gme).getConnectedWithStart().sdfsdfsdfd() == gmeLinePoint.sdfsdfsdfd()) {
                                    ((Graphic_LINE_Elem) gme).setConnectedWithStart((Graphic_Figure_Elem) gmeLinePoint);
                                }
                            }
                        }
                    }
                }

                long nextElem = sdfsddf345ersdf();
                for (Graphic_Main_Elem gme : elementsPrepared) {

                    gme.setGc(this.gc);
                    gme.dsdasadsasd32423432(nextElem);
                    gme.isVisible = true;
                    nextElem++;
                }

                this.graphicElementsObservable.addAll(elementsPrepared);


                sdfsdfds3465er(true);

                this.elementID = sdfsddf345ersdf();
                this.view.setToCopyElements(null);
            }
            event.consume();

            return;
        }

        if (this.asdadsa324324.match(event)) {
            this.thisERMDrawCanvas.requestFocus();
            this.view.selectModeBTN.setSelected(true);
            sdfdsfdsf43645re();
            event.consume();

            return;
        }

        if (this.keyCombinationCTRL_Z.match(event)) {
            this.thisERMDrawCanvas.requestFocus();
            if (this.selectedElements != null || this.elementIsSelected) {
                return;
            }
            if (this.pastActions != null && this.pastActions.size() > 0) {

                Graphic_Main_Elem lastAction = this.pastActions.remove(this.pastActions.size() - 1);

                this.futureActions.add(lastAction);
                if (Objects.requireNonNull(lastAction.adsadadsa4354353()) == U4.REMOVE) {
                    this.graphicElements.add(lastAction);
                    lastAction.sfdsfsfsddf123234435(U4.ADD);
                } else {
                    this.graphicElements.remove(lastAction);
                    lastAction.sfdsfsfsddf123234435(U4.REMOVE);
                }


            }
            sdfsdfds3465er(true);
            if (this.view.generateRelationalModelCB.isSelected() &&
                    !dsfdsdfssdf45645re()) {
                this.view.verticalBox.getChildren().clear();
            }
            asdadsa32432rweewr();
            this.view.graphicElemLV.getItems().clear();
            this.view.graphicElemLV.getItems().addAll(this.graphicElements);

            if (this.connectionModeSet) (this.view.getCurrentTab()).canvas.sdfdsfdsdf34543erretwre();
            event.consume();

            return;
        }

        if (this.dsfsdfds67678768.match(event)) {
            if (this.futureActions.size() > 0) {
                Graphic_Main_Elem redoElem = this.futureActions.remove(this.futureActions.size() - 1);

                if (this.graphicElements.size() > 0)
                    this.pastActions.add(this.graphicElements.get(this.graphicElements.size() - 1));
                if (Objects.requireNonNull(redoElem.adsadadsa4354353()) == U4.REMOVE) {
                    this.graphicElements.add(redoElem);
                    redoElem.sfdsfsfsddf123234435(U4.ADD);
                } else {
                    this.graphicElements.remove(redoElem);
                    redoElem.sfdsfsfsddf123234435(U4.REMOVE);
                }


            }
            sdfsdfds3465er(true);
            if (this.view.generateRelationalModelCB.isSelected() &&
                    !dsfdsdfssdf45645re()) {
                this.view.verticalBox.getChildren().clear();
            }
            asdadsa32432rweewr();
            this.view.graphicElemLV.getItems().clear();
            this.view.graphicElemLV.getItems().addAll(this.graphicElements);

            if (this.connectionModeSet) (this.view.getCurrentTab()).canvas.sdfdsfdsdf34543erretwre();
            event.consume();


            return;
        }


        switch (event.getCode()) {
            case F1, S -> {
                sdfsdfds3465er(true);
                if (this.view.selectModeBTN.isSelected()) {
                    this.selectedElements = null;
                    this.rectangleSelection = false;
                    this.elementIsSelected = false;
                    this.sdadasd34535trertertret = null;
                    this.view.lastCreationSelected.fire();
                } else {
                    this.view.selectModeBTN.fire();
                }
                event.consume();
                return;
            }
            case BACK_SPACE, DELETE -> {
                if (this.rectangleSelection) {
                    for (Graphic_Main_Elem gme : this.selectedElements) {
                        gme.dsfsdfsfd();
                        sfsdfsfds4343(gme.sdfsdfsdfd());
                    }
                    this.selectedElements = null;
                    this.rectangleSelection = false;
                    sdfsdfds3465er(true);
                    return;
                }
                if (!this.elementIsSelected) return;
                this.sdadasd34535trertertret.dsfsdfsfd();
                if (this.sdadasd34535trertertret instanceof Graphic_Figure_Elem) {
                    ArrayList<Graphic_LINE_Elem> linesAsEnd = sdfsdfds23432rwefsd(this.sdadasd34535trertertret);
                    ArrayList<Graphic_LINE_Elem> linesAsStart = dsfdsfdsjhkj456456(this.sdadasd34535trertertret);
                    for (Graphic_LINE_Elem gle : linesAsEnd) {

                        gle.dsfsdfsfd();

                        this.graphicElementsObservable.remove(gle);

                    }

                    for (Graphic_LINE_Elem gle : linesAsStart) {

                        gle.dsfsdfsfd();

                        this.graphicElementsObservable.remove(gle);

                    }

                }


                this.graphicElementsObservable.remove(this.sdadasd34535trertertret);


                this.elementIsSelected = false;

                this.sdadasd34535trertertret = null;

                sdfsdfds3465er(true);
            }


            case ESCAPE -> {

                if (this.thisERMDrawCanvas.dsasadasd345435fghgfh) this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;


                if (this.rectangleSelection) {

                    this.rectangleSelection = false;

                    this.selectedElements = null;

                    sdfsdfds3465er(false);

                    return;

                }

                if (this.selectCounterConnection > 0) {

                    if (this.anyElem1 != null) this.anyElem1.dfsdfssdf456456();

                    this.anyElem1 = null;

                    if (this.anyElem2 != null) this.anyElem2.dfsdfssdf456456();

                    this.anyElem2 = null;

                    sdfsdfds3465er(true);

                    sdfdsfdsdf34543erretwre();


                    this.view.buttonPane.setDisable(false);


                    this.selectCounterConnection = 0;

                }
            }


            case UP -> {

                if (dsfdsfds4354354fdhf(0.0D, -5.0D)) {


                    dsfsfdsd3453efs(0.0D, -5.0D);

                    sdfsdfds3465er(true);

                }
            }


            case DOWN -> {

                dsfsfdsd3453efs(0.0D, 5.0D);

                sdfsdfds3465er(true);

                sdfdsfsfds();
            }


            case LEFT -> {

                if (dsfdsfds4354354fdhf(-5.0D, 0.0D)) {


                    dsfsfdsd3453efs(-5.0D, 0.0D);

                    sdfsdfds3465er(true);

                }
            }


            case RIGHT -> {

                dsfsfdsd3453efs(5.0D, 0.0D);

                sdfsdfds3465er(true);

                sdfdsfsfds();
            }

        }


        event.consume();
    }


    public void createContextMenu() {
        this.contextMenu = new ContextMenu();


        this.contextMenu.setOnHiding(event -> {
            if (A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh)
                A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;

        });


        this.addText = new MenuItem("Change Text");
        this.addText.setOnAction(event -> {
            event.consume();
            A7 ermend = new A7(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos, A3.this.sdadasd34535trertertret.name);
            if (A3.this.sdadasd34535trertertret instanceof Graphic_Text_Elem) {

                ((Graphic_Text_Elem) A3.this.sdadasd34535trertertret).changeName(ermend.getTextTA().getText());
                A3.this.view.graphicElemLV.refresh();

                if (A3.this.view.generateRelationalModelCB.isSelected() &&
                        !A3.this.dsfdsdfssdf45645re()) {
                    A3.this.view.verticalBox.getChildren().clear();
                }
            }
            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;
        });


        this.addName = new MenuItem("Change Name");
        this.addName.setOnAction(event -> {
            event.consume();
            A5 ermend = new A5(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos, A3.this.sdadasd34535trertertret.name);
            if (A3.this.sdadasd34535trertertret instanceof Graphic_Figure_Elem) {
                ArrayList<Graphic_LINE_Elem> gleListStart = A3.this.dsfdsfdsjhkj456456(A3.this.sdadasd34535trertertret);


                ((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).changeName(ermend.getNameTF().getText());
                A3.this.view.graphicElemLV.refresh();


                if (gleListStart.size() > 0) {
                    for (Graphic_LINE_Elem gle : gleListStart) {
                        gle.dsfsdfsfd();

                        gle.setxPos(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[0]);
                        gle.setyPos(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtStart())[1]);
                        gle.safdsadasds32432456456();
                    }
                }
                ArrayList<Graphic_LINE_Elem> gleListEnd = A3.this.sdfsdfds23432rwefsd(A3.this.sdadasd34535trertertret);
                if (gleListEnd.size() > 0) {
                    for (Graphic_LINE_Elem gle : gleListEnd) {
                        gle.dsfsdfsfd();
                        gle.setxEnd(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[0]);
                        gle.setyEnd(((Graphic_Figure_Elem) A3.this.sdadasd34535trertertret).getXYForGivenPoint(gle.getLineConnectedWithPointAtEnd())[1]);
                        gle.safdsadasds32432456456();
                    }
                }

                if (A3.this.view.generateRelationalModelCB.isSelected() &&
                        !A3.this.dsfdsdfssdf45645re()) {
                    A3.this.view.verticalBox.getChildren().clear();
                }
            }
            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;
        });


        this.addMinMax = new MenuItem("Change Min/Max");
        this.addMinMax.setOnAction(event -> {
            event.consume();
            Graphic_LINE_Elem gle = (Graphic_LINE_Elem) A3.this.sdadasd34535trertertret;
            A4 ermend = new A4(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos, gle.getMinimum(), gle.getMaximum());
            gle.changeMinMax(ermend.getMinTF().getText(), ermend.getMaxTF().getText());
            A3.this.view.graphicElemLV.refresh();
            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;

            if (A3.this.view.generateRelationalModelCB.isSelected() &&
                    !A3.this.dsfdsdfssdf45645re()) {
                A3.this.view.verticalBox.getChildren().clear();
            }
        });


        this.addISASpec = new MenuItem("Change T-P/D-ND");
        this.addISASpec.setOnAction(event -> {
            event.consume();
            Graphic_RS_ISA_Elem gle = (Graphic_RS_ISA_Elem) A3.this.sdadasd34535trertertret;
            A6 ermend = new A6(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos, gle.getPartial_or_total(), gle.getDisjunct_or_notdisjunct());
            gle.changeP_T_D_ND(ermend.getP_tTF().getText(), ermend.getD_ndTF().getText());
            A3.this.view.graphicElemLV.refresh();
            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;
            if (A3.this.view.generateRelationalModelCB.isSelected() &&
                    !A3.this.dsfdsdfssdf45645re()) {
                A3.this.view.verticalBox.getChildren().clear();
            }
        });


        this.sadsadas4353453retretret = new MenuItem("ES/RS Transformation");
        this.sadsadas4353453retretret.setOnAction(event -> {
            event.consume();
            U3 tir = (U3) A3.this.sdadasd34535trertertret;

            A9 ermend = new A9(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos,
                    A3.this.sdadasd34535trertertret.name,
                    tir.getCreateRelation(),
                    tir.getRelationName(),
                    tir.getRelationPraefix(),
                    tir.getCreateInserts(),
                    tir.getNumberRowsToInsert(),
                    false);
            tir.setCreateRelation(ermend.getCreateRelationCB().isSelected());
            tir.setRelationName(ermend.getRelationNameTF().getText());
            tir.setRelationPraefix((ermend.getRelationPraefixTF().getText() == null) ? "" : ermend.getRelationPraefixTF().getText());
            tir.setCreateInserts(ermend.getCreateInsertStatementsCB().isSelected());
            tir.setNumberRowsToInsert(Long.parseLong(ermend.getNumberRowsToInsertTF().getText()));
            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;

            A3.this.view.graphicElemLV.refresh();
            if (A3.this.view.generateRelationalModelCB.isSelected() &&
                    !A3.this.dsfdsdfssdf45645re()) {
                A3.this.view.verticalBox.getChildren().clear();
            }
        });


        this.sdfsdfsdfsdfdsf324324 = new MenuItem("Attribute Transformation");
        this.sdfsdfsdfsdfdsf324324.setOnAction(event -> {
            event.consume();
            U2 tir = (U2) A3.this.sdadasd34535trertertret;
            if (A3.this.sdadasd34535trertertret instanceof Graphic_ATTR_Multi_Elem) {
                B1 ermend = new B1(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos,
                        A3.this.sdadasd34535trertertret.name,
                        tir.getCreateColumn(),
                        tir.getColumnName(),
                        tir.getMVRelationName(),
                        tir.getMVRelationNamePraefix(),
                        tir.getColumnPostfix(),
                        tir.getDatatype(),
                        tir.isAutoincrement(),
                        tir.isKey(),
                        tir.isNullable(),
                        tir.isUnique());
                tir.setCreateColumn(ermend.getCreateColumnCB().isSelected());
                tir.setColumnName(ermend.getColumnNameTF().getText());
                tir.setMVRelationName(ermend.getRelationNameTF().getText());
                tir.setMVRelationNamePraefix(ermend.getRelationNamePraefixTF().getText());
                tir.setColumnPostfix(ermend.getColumnPostfixTF().getText());
                tir.setDatatype(ermend.getDatatypeTF().getText());
                tir.setIsAutoincrement(ermend.getIsAutoincrementCB().isSelected());
                tir.setIsKey(ermend.getIsKeyCB().isSelected());
                tir.setIsNullable(ermend.getIsNullableCB().isSelected());
                tir.setIsUnique(ermend.getIsUniqueCB().isSelected());
            } else {

                A8 ermend = new A8(A3.this.thisERMDrawCanvas, A3.this.dialogXPos, A3.this.dialogYPos,
                        A3.this.sdadasd34535trertertret.name,
                        tir.getCreateColumn(),
                        tir.getColumnName(),
                        tir.getColumnPostfix(),
                        tir.getDatatype(),
                        (A3.this.sdadasd34535trertertret instanceof Graphic_ATTR_Weak_Key_Elem),
                        tir.isAutoincrement(),
                        tir.getAutoincrementStartAt(),
                        tir.isKey(),
                        tir.isNullable(),
                        tir.isUnique(),
                        tir.getDataGenerationType(),
                        tir.getPar1(),
                        tir.getPar1_label(),
                        tir.getPar2(),
                        tir.getPar2_label());
                tir.setCreateColumn(ermend.getCreateColumnCB().isSelected());
                tir.setColumnName(ermend.getColumnNameTF().getText());
                tir.setColumnPostfix(ermend.getColumnPostfixTF().getText());
                tir.setDatatype(ermend.getDatatypeTF().getText());
                tir.setIsAutoincrement(ermend.getIsAutoincrementCB().isSelected());
                tir.setAutoincrementStartAt(Long.parseLong(ermend.getAutoincrementStartAtTF().getText()));
                tir.setIsKey(ermend.getIsKeyCB().isSelected());
                tir.setIsNullable(ermend.getIsNullableCB().isSelected());
                tir.setIsUnique(ermend.getIsUniqueCB().isSelected());
                tir.setDataGenerationType(ermend.getDataGenerationTypeCoB().getSelectionModel().getSelectedItem());
                tir.setPar1(ermend.getPar1TF().getText());
                tir.setPar1_label(ermend.getPar1LBL().getText());
                tir.setPar2(ermend.getPar2TF().getText());
                tir.setPar2_label(ermend.getPar2LBL().getText());
            }


            A3.this.view.graphicElemLV.refresh();

            A3.this.thisERMDrawCanvas.dsasadasd345435fghgfh = false;
            if (A3.this.view.generateRelationalModelCB.isSelected() &&
                    !A3.this.dsfdsdfssdf45645re()) {
                A3.this.view.verticalBox.getChildren().clear();
            }
        });


        this.changeDockingPointAtFigure1 = new MenuItem("Change Docking Point at ");
        this.changeDockingPointAtFigure1.setOnAction(event -> A3.this.prepareForDockingChange(A3.this.figureToChange2,
                A3.this.connectionToChange.getxPos(), A3.this.connectionToChange.getyPos(),
                A3.this.connectionToChange.getLineConnectedWithPointAtStart()));


        this.changeDockingPointAtFigure2 = new MenuItem("Change Docking Point at ");
        this.changeDockingPointAtFigure2.setOnAction(event -> A3.this.prepareForDockingChange(A3.this.figureToChange1,
                A3.this.connectionToChange.getxEnd(), A3.this.connectionToChange.getyEnd(),
                A3.this.connectionToChange.getLineConnectedWithPointAtEnd()));

        this.contextMenu.getItems().addAll(this.addName, this.addText, this.addMinMax, this.addISASpec, this.sadsadas4353453retretret, this.sdfsdfsdfsdfdsf324324, this.changeDockingPointAtFigure1, this.changeDockingPointAtFigure2);
    }


    private void prepareForDockingChange(Graphic_Figure_Elem figureHold, double x, double y, byte pointAt) {
        this.sdadasd34535trertertret.dsfsdfsfd();
        this.graphicElementsObservable.remove(this.sdadasd34535trertertret);

        this.connectionModeSet = true;
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAG_ES_Elem)
            this.view.rsisaGeToESBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAS_ES_Elem)
            this.view.rsisaSpToESBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_Attr_Elem)
            this.view.attrToAttrBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_ES_Elem) this.view.attrToESBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_RS_Elem) this.view.attrToRSBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RSID_ESWEAK_Elem)
            this.view.rsidToESWeakBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RSID_ES_Elem) this.view.rsidToESBTN.setSelected(true);
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RS_ES_Elem) this.view.rsToESBTN.setSelected(true);


        this.anyElem1 = figureHold;
        this.anyElem2 = null;
        this.dockXAnyElem1 = x;
        this.dockYAnyElem1 = y;
        this.dockAtPointAnyElem1 = pointAt;
        this.selectCounterConnection = 1;

        this.changeDockingPoint = true;

        this.view.buttonPane.setDisable(true);
    }


    private void setContextMenuItems(double xPos, double yPos) {
        this.dialogXPos = xPos;
        this.dialogYPos = yPos;


        this.addText.setVisible(false);
        this.addName.setVisible(false);
        this.addMinMax.setVisible(false);
        this.addISASpec.setVisible(false);
        this.sadsadas4353453retretret.setVisible(false);
        this.sdfsdfsdfsdfdsf324324.setVisible(false);
        this.changeDockingPointAtFigure1.setVisible(false);
        this.changeDockingPointAtFigure2.setVisible(false);


        if (this.sdadasd34535trertertret instanceof Graphic_Text_Elem) {
            this.addText.setVisible(true);
            this.addName.setVisible(false);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);

            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_ES_Main_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(true);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(true);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);

            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_RS_Identifying_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(true);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);

            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_RS_ISA_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(false);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(true);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);


            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_RS_Main_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(true);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(true);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);

            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_ATTR_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(true);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(true);


            return;
        }

        this.connectionToChange = null;
        if (this.sdadasd34535trertertret instanceof Graphic_LINE_Elem &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAG_ES_Elem) &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAS_ES_Elem) &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_RSID_ESWEAK_Elem) &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_Attr_Elem) &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_ES_Elem) &&
                !(this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_RS_Elem)) {
            this.addText.setVisible(false);
            this.addName.setVisible(false);
            this.addMinMax.setVisible(true);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);
            this.connectionToChange = (Graphic_LINE_Elem) this.sdadasd34535trertertret;
            this.figureToChange1 = this.connectionToChange.getConnectedWithEnd();
            this.figureToChange2 = this.connectionToChange.getConnectedWithStart();
            this.changeDockingPointAtFigure1.setVisible(true);
            String elementToUndock1 = this.figureToChange1.sdfsdfsd32234243();
            this.changeDockingPointAtFigure1.setText(this.changeDockingPointAtFigure1.getText() + " " + elementToUndock1);
            this.changeDockingPointAtFigure2.setVisible(true);
            String elementToUndock2 = this.figureToChange2.sdfsdfsd32234243();
            this.changeDockingPointAtFigure2.setText(this.changeDockingPointAtFigure2.getText() + " " + elementToUndock2);

            return;
        }

        if (this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAG_ES_Elem ||
                this.sdadasd34535trertertret instanceof Graphic_LINE_RSISAS_ES_Elem ||
                this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_Attr_Elem ||
                this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_ES_Elem ||
                this.sdadasd34535trertertret instanceof Graphic_LINE_Attr_RS_Elem ||
                this.sdadasd34535trertertret instanceof Graphic_LINE_RSID_ESWEAK_Elem) {
            this.addText.setVisible(false);
            this.addName.setVisible(false);
            this.addMinMax.setVisible(false);
            this.addISASpec.setVisible(false);
            this.sadsadas4353453retretret.setVisible(false);
            this.sdfsdfsdfsdfdsf324324.setVisible(false);
            this.connectionToChange = (Graphic_LINE_Elem) this.sdadasd34535trertertret;
            this.figureToChange1 = this.connectionToChange.getConnectedWithEnd();
            this.figureToChange2 = this.connectionToChange.getConnectedWithStart();
            this.changeDockingPointAtFigure1.setVisible(true);
            String elementToUndock1 = this.figureToChange1.sdfsdfsd32234243();
            this.changeDockingPointAtFigure1.setText(this.changeDockingPointAtFigure1.getText() + " " + elementToUndock1);
            this.changeDockingPointAtFigure2.setVisible(true);
            String elementToUndock2 = this.figureToChange2.sdfsdfsd32234243();
            this.changeDockingPointAtFigure2.setText(this.changeDockingPointAtFigure2.getText() + " " + elementToUndock2);
        }
    }


    private ArrayList<Graphic_Main_Elem> selectElementsInRectangle(double xStart, double yStart, double xEnd, double yEnd) {
        if (xEnd < xStart) {
            double t = xEnd;
            xEnd = xStart;
            xStart = t;
        }
        if (yEnd < yStart) {
            double t = yEnd;
            yEnd = yStart;
            yStart = t;
        }
        ArrayList<Graphic_Main_Elem> selEl = new ArrayList<>();
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme.xPos >= xStart && gme.yPos >= yStart &&
                    gme.xPos <= xEnd && gme.yPos <= yEnd) {

                gme.safdsadasds32432456456();
                gme.selectElem();

                selEl.add(gme);
            }
        }
        return selEl;
    }


    public void sfsdfsfds4343(long elementID) {
        for (int i = 0; i < this.graphicElements.size(); i++) {
            if (this.graphicElements.get(i).sdfsdfsdfd() == elementID) {
                this.graphicElementsObservable.remove(i);
                return;
            }
        }
    }


    public void sdfdsfdsdf43543ref() {
        if (this.rectangleSelection) {
            this.rectangleSelection = false;
            for (Graphic_Main_Elem ge : this.selectedElements) {
                ge.safdsadasds32432456456();
            }
            this.selectedElements = null;
        }
    }


    public void sfdsfsd43543() {
        this.gc.clearRect(0.0D, 0.0D, this.canvasWidth, this.canvasHeight);
    }


    private boolean dsfsdfds435345esfsfd(double newX, double newY, ArrayList<Graphic_Main_Elem> selectedElements) {
        for (Graphic_Main_Elem gme : selectedElements) {
            if (dsfdsf43534dfdfhg(newX, newY, gme)) return false;
        }
        return true;
    }


    private boolean dsfdsfds4354354fdhf(double newXd, double newYd) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (dsfdsf43534dfdfhg(gme.getxPos() + newXd, gme.getyPos() + newYd, gme)) return false;
        }
        return true;
    }


    private boolean dsfdsf43534dfdfhg(double newX, double newY, Graphic_Main_Elem gme) {
        if (gme instanceof Graphic_Figure_Elem || gme instanceof Graphic_Text_Elem) {
            return !(newX - gme.dsfsfsd456457657() / 2.0D >= 0.0D) || !(newY - gme.getHeight() / 2.0D >= 0.0D);
        } else return !(newX >= 0.0D) || !(newY >= 0.0D);
    }


    public double[] dssfsdfd43643634() {
        double[] widthHeight = new double[2];
        double maxHeight = 0.0D;
        double maxWidth = 0.0D;

        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_Figure_Elem) {
                if (maxWidth < gme.getxPos() + gme.dsfsfsd456457657()) {
                    maxWidth = gme.getxPos() + gme.dsfsfsd456457657();
                }
                if (maxHeight < gme.getyPos() + gme.getHeight()) {
                    maxHeight = gme.getyPos() + gme.getHeight();
                }
            }
        }
        widthHeight[0] = maxWidth;
        widthHeight[1] = maxHeight;
        return widthHeight;
    }


    public ArrayList<Graphic_Main_Elem> sddsfsfsdf45645645() {
        return this.graphicElements;
    }


    public void safdsadsa65765ewthjk(ArrayList<Graphic_Main_Elem> graphicElements) {
        this.graphicElementsObservable.addAll(graphicElements);
    }


    public File getSaveFile() {
        return this.modelSavedInFile;
    }


    public void setSaveFile(File modelSavedInFile) {
        this.modelSavedInFile = modelSavedInFile;
    }


    public void sdfdsfdsdf34543erretwre() {
        setConnectivityForFigures();
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme instanceof Graphic_Figure_Elem) {
                ((Graphic_Figure_Elem) gme).dockablePointsAtElem();
            }
        }
    }


    public void sdfsdfds435634terf() {
        this.rectangleSelection = false;
        this.selectedElements = null;
        this.anyElem1 = null;
        this.selectCounterConnection = 0;
    }


    public void modelVisibility() {
        if (this.view.menuVisibilityAllRMI == null)
            return;
        if (this.view.menuVisibilityAllRMI.isSelected() && this.view.menuVisibilityTEXTRMI.isSelected()) {
            for (Graphic_Main_Elem gme : this.graphicElements) {
                gme.isVisible = true;
            }

            return;
        }
        if (this.view.menuVisibilityAllRMI.isSelected() && !this.view.menuVisibilityTEXTRMI.isSelected()) {
            for (Graphic_Main_Elem gme : this.graphicElements) {
                gme.isVisible = !(gme instanceof Graphic_Text_Elem);

            }

            return;
        }
        for (Graphic_Main_Elem gme : this.graphicElements) {
            gme.isVisible = false;
        }

        for (Graphic_Main_Elem gme : this.graphicElements) {

            if (this.view.menuVisibilityTEXTRMI.isSelected() &&
                    gme instanceof Graphic_Text_Elem) {
                gme.isVisible = true;
            }


            if ((this.view.menuVisibilityES_RSRMI.isSelected() || this.view.menuVisibilityES_RS_KEYRMI.isSelected()) && (
                    gme instanceof Graphic_ES_Main_Elem || gme instanceof Graphic_RS_Main_Elem)) {
                gme.isVisible = true;

                for (Graphic_LINE_Elem line : sdfsdfds23432rwefsd(gme)) {
                    line.isVisible = true;
                }
                for (Graphic_LINE_Elem line : dsfdsfdsjhkj456456(gme)) {
                    line.isVisible = true;
                }

                for (Graphic_Main_Elem attributes : getAttributesForVisibility(gme)) {

                    for (Graphic_LINE_Elem line : sdfsdfds23432rwefsd(attributes)) {
                        line.isVisible = false;
                    }
                    for (Graphic_LINE_Elem line : dsfdsfdsjhkj456456(attributes)) {
                        line.isVisible = false;
                    }
                }
            }


            if (this.view.menuVisibilityES_RS_KEYRMI.isSelected()) {

                for (Graphic_Main_Elem attributes : getKeyAttributesForVisibility(gme)) {
                    attributes.isVisible = true;

                    for (Graphic_LINE_Elem line : sdfsdfds23432rwefsd(attributes)) {
                        line.isVisible = true;
                    }
                    for (Graphic_LINE_Elem line : dsfdsfdsjhkj456456(attributes)) {
                        line.isVisible = true;
                    }
                }

                for (Graphic_Main_Elem attributes : getWeakKeyAttributesForVisibility(gme)) {
                    attributes.isVisible = true;

                    for (Graphic_LINE_Elem line : sdfsdfds23432rwefsd(attributes)) {
                        line.isVisible = true;
                    }
                    for (Graphic_LINE_Elem line : dsfdsfdsjhkj456456(attributes)) {
                        line.isVisible = true;
                    }
                }
            }
        }
    }


    public long getElementID() {
        return this.elementID;
    }


    public void dsfds124332(long elementID) {
        this.elementID = elementID;
    }


    public long sdfsddf345ersdf() {
        long lastId = 0L;
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme.sdfsdfsdfd() > lastId) lastId = gme.sdfsdfsdfd();
        }
        return lastId + 1L;
    }


    private void dsfsfdsd3453efs(double xd, double yd) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            gme.setxPos(gme.getxPos() + xd);
            gme.setyPos(gme.getyPos() + yd);
            if (gme instanceof Graphic_Figure_Elem gfe) {
                gfe.calculateTextWidthHeight();
            }
            if (gme instanceof Graphic_LINE_Elem gle) {
                gle.setxEnd(gle.getxEnd() + xd);
                gle.setyEnd(gle.getyEnd() + yd);
            }
        }
    }


    private void sdfdsfsfds() {
    }


    public double getCanvasWidth() {
        return this.canvasWidth;
    }


    public double getCanvasHeight() {
        return this.canvasHeight;
    }


    private void sfdsfsfdss324243wer(T1 table) {
        this.view.rootColumnNode = new TreeItem<>(null);

        this.view.treeColumnView = new TreeView<>(this.view.rootColumnNode);

        this.view.treeColumnView.setShowRoot(false);
        if (this.view.verticalBox.getChildren().size() > 1) {
            this.view.verticalBox.getChildren().set(1, this.view.treeColumnView);
        } else {
            this.view.verticalBox.getChildren().add(this.view.treeColumnView);
        }

        this.view.treeColumnView.setCellFactory(p -> new TreeCell<>() {
            protected void updateItem(C3 item, boolean empty) {
                super.updateItem(item, empty);
                if (!empty && item != null) {
                    setStyle("-fx-text-fill: black;-fx-font-size: 12;");
                    if (item.isKey()) {
                        setStyle("-fx-font-weight: bold;-fx-font-size: 12;");
                    }

                    if (item.isKey() && item.getReferencesTo() == null) {
                        setText(item.getColumnName() + "@PK," + item.getDatatype());
                    } else if (item.isKey() && item.getReferencesTo() != null) {
                        setText(item.getColumnName() + "@PFK," + item.getDatatype());
                    } else if (item.getReferencesTo() != null) {
                        setText(item.getColumnName() + "@FK," + item.getDatatype());
                    } else {

                        setText(item.getColumnName() + "@" + item.getDatatype());
                    }
                } else {
                    setText("");
                }
            }
        });
        this.view.rootColumnNode.setExpanded(true);
        this.view.rootColumnNode.getChildren().clear();

        for (C3 column : table.getSkjdfhgdskjf674534()) {
            TreeItem<C3> element;

            element = new TreeItem<>(column);
            this.view.rootColumnNode.getChildren().add(element);
        }
    }


    public boolean dsfdsdfssdf45645re() {
        if (!this.view.generateRelationalModelCB.isSelected()) {
            return false;
        }
        ZZ30 mergedModel;
        try {
            mergedModel = new ZZ30(this.view, this.graphicElements, this.relationalModel);
            if (!mergedModel.lkshjdskjhsdlkjhds()) return false;
            this.relationalModel = mergedModel.getRelationalModel();
        } catch (StackOverflowError sofe) {


            this.view.verticalBox.getChildren().clear();


            this.view.generateRelationalModelCB.setSelected(false);
            return false;
        }


        ImageView treeviewImg = new ImageView(C2.esImage);
        treeviewImg.setFitHeight(20.0D);
        treeviewImg.setFitWidth(20.0D);

        this.view.rootTableNode = new TreeItem<>(null);

        this.view.treeTableView = new TreeView<>(this.view.rootTableNode);
        this.view.treeTableView.setPrefHeight(600.0D);
        this.view.treeTableView.setShowRoot(false);

        this.view.treeTableView.setOnKeyReleased(event -> {
            @SuppressWarnings("unchecked") TreeView<T1> tv = (TreeView<T1>) event.getSource();
            TreeItem<T1> selectedItem = tv.getSelectionModel().getSelectedItem();
            T1 selectedRelation = selectedItem.getValue();
            A3.this.view.selectModeBTN.setSelected(true);
            A3.this.thisERMDrawCanvas.sdfsdfds3465er(true);
            A3.this.thisERMDrawCanvas.dsfdsfsdf43543refds(selectedRelation.getReferstoGraphicalElement());

            A3.this.sfdsfsfdss324243wer(selectedRelation);
        });


        this.view.treeTableView.setOnMouseClicked(event -> {
            @SuppressWarnings("unchecked") TreeView<T1> tv = (TreeView<T1>) event.getSource();
            TreeItem<T1> selectedItem = tv.getSelectionModel().getSelectedItem();
            if (selectedItem != null) {
                T1 selectedRelation = selectedItem.getValue();
                A3.this.view.selectModeBTN.setSelected(true);
                A3.this.thisERMDrawCanvas.sdfsdfds3465er(true);
                A3.this.thisERMDrawCanvas.dsfdsfsdf43543refds(selectedRelation.getReferstoGraphicalElement());

                A3.this.sfdsfsfdss324243wer(selectedRelation);
            }
            event.consume();
        });


        if (this.view.verticalBox.getChildren().size() > 0) {
            this.view.verticalBox.getChildren().set(0, this.view.treeTableView);
        } else {
            this.view.verticalBox.getChildren().add(this.view.treeTableView);
        }
        this.view.treeTableView.setCellFactory(p -> new TreeCell<>() {
            protected void updateItem(T1 item, boolean empty) {
                super.updateItem(item, empty);
                if (!empty && item != null) {
                    setStyle("-fx-text-fill: black;-fx-font-size: 11;");
                    setText(item.getTablename());
                } else {
                    setText("");
                }
            }
        });


        this.view.rootTableNode.setExpanded(true);
        this.view.rootTableNode.getChildren().clear();
        for (T1 table : mergedModel.getRelationalModel().getTables()) {
            TreeItem<T1> element;

            element = new TreeItem<>(table);
            this.view.rootTableNode.getChildren().add(element);

            for (T1 fktable : mergedModel.getRelationalModel().getTables()) {
                for (C3 column : fktable.getSkjdfhgdskjf674534()) {
                    if (column.getReferencesTo() != null && column.getReferencesTo().tablename().equals(table.getTablename())) {
                        TreeItem<T1> fkTreeItem = new TreeItem<>(fktable);
                        element.getChildren().add(fkTreeItem);

                        break;
                    }
                }
            }
        }
        if (this.view.rootTableNode.getChildren().size() > 0) {
            this.view.treeTableView.getSelectionModel().select(0);
            T1 selectedRelation = (T1) ((TreeItem<?>) this.view.treeTableView.getSelectionModel().getSelectedItem()).getValue();
            this.view.selectModeBTN.setSelected(true);
            this.thisERMDrawCanvas.sdfsdfds3465er(true);
            this.thisERMDrawCanvas.dsfdsfsdf43543refds(selectedRelation.getReferstoGraphicalElement());

            sfdsfsfdss324243wer(selectedRelation);
        } else {

            this.view.verticalBox.getChildren().clear();
        }


        return true;
    }


    public C4 dsfdsfd45645zr() {
        return this.relationalModel;
    }


    private ArrayList<Graphic_Main_Elem> getAttributesForVisibility(Graphic_Main_Elem gme) {
        ArrayList<Graphic_Main_Elem> attributes = new ArrayList<>();
        for (Graphic_Main_Elem gmLooking : this.graphicElements) {


            if (gmLooking instanceof Graphic_LINE_Elem) {


                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd().sdfsdfsdfd() == gme.sdfsdfsdfd() && ((Graphic_LINE_Elem) gmLooking).getConnectedWithStart() instanceof Graphic_ATTR_Elem gae) {
                    attributes.add(gae);
                }
                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithStart().sdfsdfsdfd() == gme.sdfsdfsdfd() && ((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd() instanceof Graphic_ATTR_Elem gae) {
                    attributes.add(gae);
                }
            }
        }
        return attributes;
    }


    private ArrayList<Graphic_Main_Elem> getKeyAttributesForVisibility(Graphic_Main_Elem gme) {
        ArrayList<Graphic_Main_Elem> attributes = new ArrayList<>();
        for (Graphic_Main_Elem gmLooking : this.graphicElements) {


            if (gmLooking instanceof Graphic_LINE_Elem) {


                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd().sdfsdfsdfd() == gme.sdfsdfsdfd() && (
                        (Graphic_LINE_Elem) gmLooking).getConnectedWithStart() instanceof Graphic_ATTR_Key_Elem) {
                    Graphic_ATTR_Elem gae = (Graphic_ATTR_Elem) ((Graphic_LINE_Elem) gmLooking).getConnectedWithStart();

                    attributes.add(gae);
                }
                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithStart().sdfsdfsdfd() == gme.sdfsdfsdfd() && (
                        (Graphic_LINE_Elem) gmLooking).getConnectedWithEnd() instanceof Graphic_ATTR_Key_Elem) {
                    Graphic_ATTR_Elem gae = (Graphic_ATTR_Elem) ((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd();

                    attributes.add(gae);
                }
            }
        }
        return attributes;
    }


    private ArrayList<Graphic_Main_Elem> getWeakKeyAttributesForVisibility(Graphic_Main_Elem gme) {
        ArrayList<Graphic_Main_Elem> attributes = new ArrayList<>();
        for (Graphic_Main_Elem gmLooking : this.graphicElements) {


            if (gmLooking instanceof Graphic_LINE_Elem) {


                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd().sdfsdfsdfd() == gme.sdfsdfsdfd() && (
                        (Graphic_LINE_Elem) gmLooking).getConnectedWithStart() instanceof Graphic_ATTR_Weak_Key_Elem) {
                    Graphic_ATTR_Elem gae = (Graphic_ATTR_Elem) ((Graphic_LINE_Elem) gmLooking).getConnectedWithStart();

                    attributes.add(gae);
                }
                if (((Graphic_LINE_Elem) gmLooking).getConnectedWithStart().sdfsdfsdfd() == gme.sdfsdfsdfd() && (
                        (Graphic_LINE_Elem) gmLooking).getConnectedWithEnd() instanceof Graphic_ATTR_Weak_Key_Elem) {
                    Graphic_ATTR_Elem gae = (Graphic_ATTR_Elem) ((Graphic_LINE_Elem) gmLooking).getConnectedWithEnd();

                    attributes.add(gae);
                }
            }
        }
        return attributes;
    }


    public void dsfdsfsdf43543refds(long refersToElement) {
        for (Graphic_Main_Elem gme : this.graphicElements) {
            if (gme.sdfsdfsdfd() == refersToElement) {
                gme.selectElem();
                return;
            }
        }
    }


    public B3 getView() {
        return this.view;
    }


    private void dsfsdfds7687683rew(TreeItem<?> item) {
        if (item != null && !item.isLeaf()) {
            item.setExpanded(false);
            for (TreeItem<?> child : item.getChildren()) {
                dsfsdfds7687683rew(child);
            }
        }
    }


    public String getInitialDirectory() {
        return this.initialDirectory;
    }


    public void setInitialDirectory(String initialDirectory) {
        this.initialDirectory = initialDirectory;
    }


    public ObservableList<Graphic_Main_Elem> fsdfdsfds1231278() {
        return this.graphicElementsObservable;
    }


    public void asdadsa32432rweewr() {
        Collections.sort(this.graphicElements);
    }


    public void sortGraphicElementsByName() {
        this.attributeElements.sort(Comparator.comparing(arg0 -> arg0.sdfsdfsd32234243().toLowerCase()));
    }


    public ArrayList<Graphic_Main_Elem> getAttributeElements() {
        return this.attributeElements;
    }


    public boolean isConnectionModeSet() {
        return this.connectionModeSet;
    }


    public void setConnectionModeSet(boolean connectionModeSet) {
        this.connectionModeSet = connectionModeSet;
    }


    public U1 getTabWithCanvas() {
        return this.u1;
    }
}


