Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ILI2.3: Import of valid model leads to invalid model in umleditor (CONSTRAINT) #82

Open
beistehen opened this issue Oct 3, 2024 · 0 comments

Comments

@beistehen
Copy link

beistehen commented Oct 3, 2024

Grundlage

Importiertes Modell (Quelle: Datei uniqueGlobal_Path.ili aus ili2c-Repo):

MODEL ModelA AT "http://www.interlis.ch/ili2c/tests/" VERSION "1" =
  TOPIC TopicA =

    STRUCTURE StructA =
      attrA : TEXT*10;
    END StructA;

    CLASS ClassB =
      attrB1 : TEXT*10;
      attrB2 : StructA;
      UNIQUE attrB2->attrA;
    END ClassB;
    
    CLASS ClassC =
      attrC : TEXT*10;
    END ClassC;
    
    ASSOCIATION b2c =
      b -- {0..1} ClassB;
      c -- {0..*} ClassC;
      UNIQUE b->attrB1;
      UNIQUE c->attrC;
    END b2c;

    CONSTRAINTS OF ClassC =
      UNIQUE b->attrB1;
    END;
    
  END TopicA;

END ModelA.

Von umleditor erzeugtes Modell:

INTERLIS 2.3;

MODEL ModelA ()
AT "http://www.interlis.ch/ili2c/tests/"
VERSION "1"  =

  TOPIC TopicA =

    STRUCTURE StructA =
      attrA : TEXT*10;
    END StructA;

    CLASS ClassB =
      attrB1 : TEXT*10;
      attrB2 : ModelA.TopicA.StructA;
      UNIQUE attrB2->attrA;
    END ClassB;

    CLASS ClassC =
      attrC : TEXT*10;
      UNIQUE b->attrB1;
    END ClassC;

    ASSOCIATION b2c =
      b -- {0..1} ClassB;
      c -- {0..*} ClassC;
      UNIQUE b->attrB1;
      UNIQUE c->attrC;
    END b2c;

  END TopicA;

END ModelA.

Problem

Der CONSTRAINT auf der Klasse ClassC, der im Ursprungsmodell eigenständig steht

CONSTRAINTS OF ClassC =
  UNIQUE b->attrB1;
END;

wird durch den umleditor direkt in die Klasse ClassC hinein verschoben und der externe CONSTRAINT entfällt.

Für einfache CONSTRAINTS ist dies wohl zulässig. Sobald aber ASSOCIATIONS involviert sind (Attributpfade, Referenzen) funktioniert dies nicht mehr, da diese zum Zeitpunkt der CONSTRAINTS-Auswertung bereits bekannt sein müssen.

Somit setzt es hier den Fehler Name b is not applicable to CLASS ModelA.TopicA.ClassC. und anschliessend eine NPE ab bei der Validierung des zweiten Modells.

Das Modell wird übrigens bereits beim Import durch den umleditor "verunstaltet". Eine Validierung innerhalb des umleditors schlägt deshalb ebenfalls fehl.

Ein ähnlich gelagertes Issues ist #41. Es ist schon etwas älter.

Nebenschauplatz: Das exportierte Modell ist zudem wegen der leeren Klammer nach dem Modellnamen zusätzlich ungültig. Aber das wäre eine andere Baustelle ...

Umgebung

umleditor v3.10.2
java 11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant