claeis / ilivalidator

INTERLIS validator
14 stars 21 forks source link

Constraintauswertung bei Aufzähltypen 'ALL OF' nicht möglich #300

Closed edigonzales closed 2 years ago

edigonzales commented 3 years ago

Statuswerte EXTENDS SIA405_Base_Abwasser_LV95.Status = (  
      in_Betrieb (
         provisorisch,
         wird_aufgehoben
      ),
      tot (
        aufgehoben_nicht_verfuellt,
        aufgehoben_unbekannt,
        verfuellt
      ),
      weitere (
         Berechnungsvariante,
         geplant,
         Projekt
      )
    );    
    Status = ALL OF Statuswerte;
MANDATORY CONSTRAINT Status == #in_Betrieb;

(Attribut heisst ebenfalls Status).

Fehlermeldung:


Error: incompatible values
Error:     ch.interlis.iox_j.validator.Value.compareTo(Value.java:274)
Error:     ch.interlis.iox_j.validator.Validator.evaluateExpression(Validator.java:1264)
Error:     ch.interlis.iox_j.validator.Validator.validateMandatoryConstraint(Validator.java:1195)
Error:     ch.interlis.iox_j.validator.Validator.iterateThroughAllObjects(Validator.java:705)
Error:     ch.interlis.iox_j.validator.Validator.doSecondPass(Validator.java:514)
Error:     org.interlis2.validator.Validator.validate(Validator.java:289)
Error:     org.interlis2.validator.Validator.runValidation(Validator.java:68)
Error:     org.interlis2.validator.Validator.runValidation(Validator.java:61)
Error:     ch.so.agi.vsavalidator.Knoten.Cid_2140_Fehler(Knoten.java:254)
edigonzales commented 3 years ago

Falls ich im Modell anstelle des Aufzähltyps Status nur Statuswerte verwende, kann der Constraint ausgewertet werden.

edigonzales commented 3 years ago

Statuswert ist in der Methode.compareTo() vom Typ=ch.interlis.ili2c.metamodel.EnumerationType.

Status ist vom Typ=ch.interlis.ili2c.metamodel.EnumTreeValueType.

Die Behandlung von EnumTreeValueType fehlt im "compare simple value"-Block.

edigonzales commented 2 years ago

Weitere Fall, der nicht funktioniert, d.h. Fehler wird nicht entdeckt:


MANDATORY CONSTRAINT DEFINED(Status) AND Status != #unbekannt;

      <VSADSSMINI_2020_LV95.VSADSSMini.Knoten TID="deg5mQXX20001002">
        <Letzte_Aenderung>20201115</Letzte_Aenderung>
        <DatenherrRef REF="deg5mQXX20000001"/>
        <DatenlieferantRef REF="deg5mQXX20000001"/>
        <Bezeichnung>Knoten_2</Bezeichnung>
        <Status>unbekannt</Status>
        <Lage>
          <COORD>
            <C1>2603917.000</C1>
            <C2>1225510.000</C2>
          </COORD>
        </Lage>
        <BetreiberRef REF="deg5mQXX20000001"/>
        <EigentuemerRef REF="deg5mQXX20000001"/>
      </VSADSSMINI_2020_LV95.VSADSSMini.Knoten>