public class ConsistencyCheck
extends java.lang.Object
Die Klasse übernimmt die Konsistenzprüfung, wie sie in TPuK1-138,139,140,141 gefordert wird.
Modifier and Type | Field and Description |
---|---|
private java.util.Map<ConfigurationArea,java.util.Set<ConfigurationAreaDependency>> |
_areasDependencies
Speichert zu einem Konfigurationsbereich die Abhängigkeiten zu anderen Konfigurationsbereichen.
|
private java.util.Map<ConfigurationArea,java.lang.Short> |
_areaVersionMap
Speichert zu einem Konfigurationsbereich die Version, mit der der Bereich aktiviert werden soll.
|
private long |
_configurationAuthorityId
Objekt-ID des lokalen Konfigurationsverantwortlichen oder 0, falls der lokale Konfigurationsverantwortliche nicht bestimmt werden kann
|
private ConfigAreaAndVersion[] |
_consistencyCheckDefinition |
private ConfigDataModel |
_dataModel
Datenmodell für die übergebene Bereiche
|
private static Debug |
_debug
DebugLogger für Debug-Ausgaben
|
private boolean |
_storeDependencies
Flag, das festlegt, ob die Abhängigkeiten zwischen Bereichen geschrieben und geprüft werden sollen.
|
private VersionedView |
_versionedView
Hilfsobjekt, das bei Zugriffen auf Konfigurationsdaten die Konfigurationsbereiche in vorgegebenen Versionen betrachtet
|
static boolean |
ALLOW_SPECIAL_CONFIG_CHANGES_FOR_TEST
Flag zum Umschalten des Verhaltens beim Import für TestModelChanges
|
Constructor and Description |
---|
ConsistencyCheck(ConfigAreaAndVersion[] consistencyCheckDefinition,
ConfigDataModel dataModel)
Erstellt ein Objekt, das vorgegebene Konfigurationsbereiche einer Konsistenzprüfung unterzieht.
|
Modifier and Type | Method and Description |
---|---|
private boolean |
checkDataSetReferences(Data data,
Data parentData,
ConfigurationArea configArea,
DataModel dataModel,
ConsistencyCheckResult errorObject,
SystemObject systemObject,
java.util.Map<SystemObject,java.util.List<SystemObject>> usedComponents)
Durchläuft rekursiv einen Datensatz und prüft ob alle referenzierten Objekte im entsprechenden Konfigurationsbereich vorhanden und gültig sind.
|
private void |
checkDependency(SystemObject systemObject,
SystemObject dependencyObject,
ConfigurationAreaDependencyKind dependencyKind)
Prüft, ob ein Objekt vom anderen Abhängig ist und trägt beim Konfigurationsbereich, falls nötig, die Abhängigkeit ein.
|
private boolean |
checkDoubleComponentUsage(SystemObject component,
SystemObject componentUser,
java.util.Map<SystemObject,java.util.List<SystemObject>> componentsOfAnArea,
ConsistencyCheckResult result)
Prüft, ob eine Komponente bereits von einem anderen übergeordneten Objekt benutzt wird.
|
private void |
checkDoubleIdsInDifferentAreas(SystemObject systemObject,
java.util.Map<java.lang.Long,java.util.List<SystemObject>> idsFromAllAreas,
ConsistencyCheckResult result)
Diese Methode prüft, ob eine Id bereits vergeben wurde.
|
private void |
checkDoublePidsInDifferntAreas(SystemObject systemObject,
java.util.Map<java.lang.String,SystemObject> pidsFromAllAreas,
ConsistencyCheckResult result)
Diese Methode prüft, ob die Pid des übergebenen Objekts bereits in einem anderen Konfigurationsbereich vergeben wurde.
|
private void |
checkParameterTypeHierarchyDefinition(ConsistencyCheckResult result,
java.util.Collection<ConfigurationObject> hierarchyObjects) |
private boolean |
configurationObjectAvailability(ConfigurationObject configurationObject)
Prüft ob ein Objekt in der angegebenen Version gültig ist (das Objekt kann auch über die Version hinaus gültig sein).
|
private void |
createDependency(short verifyingVersion,
ConfigurationArea verifyingArea,
short neededVersion,
ConfigurationArea dependencyArea,
ConfigurationAreaDependencyKind dependencyKind)
Speichert eine Abhängigkeit für den Bereich
verifyingArea in Map _areasDependencies . |
private java.lang.StringBuffer |
createLocalErrorMessagePartOne(ConfigurationArea configArea,
java.lang.String errorType)
Erzeugt den ersten Teil einer Fehlermeldung, die zu einem lokalen Fehler gehört.
|
private short |
getActiveVersion(SystemObject systemObject)
Diese Methode sucht für ein Objekt die aktive Version.
|
private java.lang.String |
getAttributeDescription(Data parentData,
Data data) |
(package private) java.util.List<SystemObject> |
getAttributeGroups(SystemObjectType systemObjectType)
Alle Attributgruppen suchen (auch supertypen)
|
private short |
getDependenceVersion(SystemObject systemObject)
Diese Methode gibt die Version zurück, in der eine Abhängigkeit zu dem übergebenen Objekt besteht.
|
(package private) java.util.List<ObjectSetUse> |
getObjectSetUses(SystemObjectType systemObjectType)
Diese Methode ermittelt anhand eines Objekt-Typen seine sämtlichen Mengenverwendungen.
|
private static java.lang.String |
getStackTrace(java.lang.Exception e) |
private boolean |
ignoreAttributeValueError(SystemObject configArea,
AttributeGroup attributeGroup,
Aspect aspect,
Data data)
Beim anlegen eines Konfigurationsobjekts, das einen Konfigurationsbereich darstellt, werden in einem Datensatz drei Zeitstempel gespeichert.
|
private boolean |
isObjectTransient(SystemObject systemObject)
Prüft, ob ein Objekt transient ist.
|
private boolean |
isParameter(AttributeGroup checkATG)
Prüft, ob eine ATG in der aktiven/zu aktivierenden Version parametrierend ist.
|
private void |
saveDependencies()
Speichert alle Abhängigkeiten zwischen Bereichen, die durch die Konsistenzprüfung gefunden wurden, in entsprechenden Datensätzen im Bereich.
|
ConsistencyCheckResultInterface |
startConsistencyCheck(KindOfConsistencyCheck kindOfConsistencyCheck)
Diese Methode führt eine Konsistenzprüfung für alle(aktive, im Konstruktor übergebene, nur in den Verwaltungsinformationen) Konfigurationsbereiche durch.
|
public static boolean ALLOW_SPECIAL_CONFIG_CHANGES_FOR_TEST
Flag zum Umschalten des Verhaltens beim Import für TestModelChanges
private static final Debug _debug
DebugLogger für Debug-Ausgaben
private final ConfigAreaAndVersion[] _consistencyCheckDefinition
private final ConfigDataModel _dataModel
Datenmodell für die übergebene Bereiche
private final VersionedView _versionedView
Hilfsobjekt, das bei Zugriffen auf Konfigurationsdaten die Konfigurationsbereiche in vorgegebenen Versionen betrachtet
private final java.util.Map<ConfigurationArea,java.lang.Short> _areaVersionMap
Speichert zu einem Konfigurationsbereich die Version, mit der der Bereich aktiviert werden soll. Kann der Bereich in der Map nicht gefunden werden, wird der Bereich in der Version, in der er derzeit läuft, weiter laufen. Als Schlüssel dient der Konfigurationsbereich, als Ergebnis wird die Version, mit der der Konfigurationsbereich in der Zukunft laufen soll, zurückgegeben.
Anmerkung: Es werden nur die Bereiche eingetragen, die auch im Konstruktor übergeben wurden.
private final java.util.Map<ConfigurationArea,java.util.Set<ConfigurationAreaDependency>> _areasDependencies
Speichert zu einem Konfigurationsbereich die Abhängigkeiten zu anderen Konfigurationsbereichen.
Key = Bereich, für den Abhängigkeiten gefunden wurden.
Value = Menge mit allen gefundenen Abhängigkeiten
private long _configurationAuthorityId
Objekt-ID des lokalen Konfigurationsverantwortlichen oder 0, falls der lokale Konfigurationsverantwortliche nicht bestimmt werden kann
private boolean _storeDependencies
Flag, das festlegt, ob die Abhängigkeiten zwischen Bereichen geschrieben und geprüft werden sollen. Es gesetzt wird, wenn das Metamodell in Version 9 oder höher vorliegt.
public ConsistencyCheck(ConfigAreaAndVersion[] consistencyCheckDefinition, ConfigDataModel dataModel)
Erstellt ein Objekt, das vorgegebene Konfigurationsbereiche einer Konsistenzprüfung unterzieht.
consistencyCheckDefinition
- PidŽs aller Konfigurationsbereiche, die in einer neuen Version geprüft werden sollen. Zu jedem Konfigurationsbereich ist ausserdem die Version gespeichert, die aktiviert werden soll. Ist die Version 0, so wird die größte zu verwendene Version gesucht. Die ModifiableVersion darf nur dann berücksichtigt werden, wenn es auch Elemente gibt die in der ModifiableVersion geändert werden würden. Die anderen Bereiche, die nicht übergeben wurden, werden in der aktuellen Version geprüft.dataModel
- Datenmodell, mit dem die übergebenen Bereich geprüft werden sollenpublic ConsistencyCheckResultInterface startConsistencyCheck(KindOfConsistencyCheck kindOfConsistencyCheck)
Diese Methode führt eine Konsistenzprüfung für alle(aktive, im Konstruktor übergebene, nur in den Verwaltungsinformationen) Konfigurationsbereiche durch.
Die Version mit der der Bereich geprüft wird, wurde entweder im Konstruktor übergeben oder ist die aktuelle Version des Bereichs.
Die Methode blockiert, bis ein Ergebnis vorliegt.
kindOfConsistencyCheck
- Bestimmt wie mit Abhängigkeiten zwischen Konfigurationsbereichen umgegangen wird. Bei einer einfachen Konsistenzprüfung werden die Abhängigkeiten zwischen den Bereichen zwar erkannt, aber nicht mittels Dätensätzen am Bereich gespeichert. Bei einer Freigabe zur Übernahme (die auch Interferenzfehler verzeiht) werden wiedrum Abhängigkeiten gespeichert, die bei einer lokalen Aktivierung nicht gespeichert werden würden.private static java.lang.String getStackTrace(java.lang.Exception e)
private void checkDependency(SystemObject systemObject, SystemObject dependencyObject, ConfigurationAreaDependencyKind dependencyKind)
Prüft, ob ein Objekt vom anderen Abhängig ist und trägt beim Konfigurationsbereich, falls nötig, die Abhängigkeit ein.
Der Konfigurationsverantwortliche des Parameters systemObject
muss der Verantwortliche der Konfiguration sein, da nur dieser Abhängigkeiten in den Bereichen eintragen darf.
Wenn die beiden Objekte im selben Bereich sind, kommt es zu keiner Abhängigkeit.
systemObject
- Objekt, das vielleicht von einem anderen Objekt abhängig ist und somit dazu führt, dass der Bereich des Objekts eine Abhängigkeit zu einem anderen Bereich erhält.dependencyObject
- Objekt von dem der Parameter systemObject
abhängig ist.dependencyKind
- Art der Abhängigkeit, wenn eine Abhängigkeit gefunden wird. Als Versionen werden die eingetragen, in der die Aktion ausgeführt wird, dies muss nicht unbedingt die aktuelle sein.private boolean isObjectTransient(SystemObject systemObject)
Prüft, ob ein Objekt transient ist. Konfigurationsobjekt sind niemals transient, dort wird immer false
zurückgegeben. Bei dynamischen Objekten muss dies geprüft werden.
systemObject
- Objekt, das geprüft werden soll, ob es transient ist.false
, wenn ein dynamisches Objekt nicht transient ist und false
, wenn ein Konfigurationsobjekt übergeben wird; true
, wenn ein dynamisches Objekt transient ist.private void createDependency(short verifyingVersion, ConfigurationArea verifyingArea, short neededVersion, ConfigurationArea dependencyArea, ConfigurationAreaDependencyKind dependencyKind)
Speichert eine Abhängigkeit für den Bereich verifyingArea
in Map _areasDependencies
.
Damit die Daten endgültig als Datensatz gespeichert werden, muss die Methode saveDependencies()
aufgerufen werden.
verifyingVersion
- Version, in der die Abhängigkeit entstanden ist.verifyingArea
- Bereich, der ab verifyingVersion
vom Bereich dependencyArea
abhängig ist.neededVersion
- Version, in der der Bereich dependencyArea
vorliegen muss, damit die Abhängigkeit aufgelöst werden kann.dependencyArea
- Bereich, von dem verifyingArea
abhängig ist.dependencyKind
- Art der Abhängigkeitprivate void saveDependencies() throws ConfigurationChangeException
Speichert alle Abhängigkeiten zwischen Bereichen, die durch die Konsistenzprüfung gefunden wurden, in entsprechenden Datensätzen im Bereich.
Die Methode sperrt die _areasDependencies
bis alle Operationen abgeschlossen sind.
ConfigurationChangeException
- Wird geworfen, wenn der Datensatz, der die Abhängigkeiten enthält, nicht geschrieben werden kann.private void checkParameterTypeHierarchyDefinition(ConsistencyCheckResult result, java.util.Collection<ConfigurationObject> hierarchyObjects)
private boolean isParameter(AttributeGroup checkATG)
Prüft, ob eine ATG in der aktiven/zu aktivierenden Version parametrierend ist.
checkATG
- ATG, die geprüft werden solltrue
, wenn die übergeben ATG in der übergebenen Version gültig ist; false
, wenn nicht.private boolean ignoreAttributeValueError(SystemObject configArea, AttributeGroup attributeGroup, Aspect aspect, Data data)
Beim anlegen eines Konfigurationsobjekts, das einen Konfigurationsbereich darstellt, werden in einem Datensatz drei Zeitstempel gespeichert.
Bei der ersten Version wurden diese drei Zeitstempel mit 0 deklariert. Die Zahl 0 im Zusammenhang mit abseluten Zeitangaben wurden aber zur Erkennung des “undefiniert” Werts benutzt. Damit waren diese Datensätze immer “nicht definiert”, dies wurde in der Konsistenzprüfung als Fehler erkannt (Der Datensatz war nicht definiert).
Dieser Fehler wird im Rahmen des Imports behoben, neue Objekte bekommen als Zeitstempel die aktuelle Zeit.
Damit trotzdem mit alten Daten weiter gearbeitet werden kann, wird dieser Fehler absichtlich von der Konsistenzprüfung ignoriert.
Es müssen folgende Bediengungen erfüllt sein, damit diese Methode true
zurück gibt: 1) Das übergebene Objekt muss ein Konfigurationsbereich sein 2) Es muss sich um die Attributgruppe “atg.konfigurationsBereichÄnderungsZeiten” handeln 3) Es muss der Aspekt “asp.eigenschaften” Eigenschaften benutzt werden 4) Einer der folgenden Attribute muss 0 sein: LetzteÄnderungszeitDynamischesObjekt, LetzteÄnderungszeitKonfigurationsObjekt, LetzteÄnderungszeitDatensatz 5) Falls ein Attribut nicht 0 ist, so muss der Wert des Attributs definiert sein.
configArea
- Es muss sich um einen Konfigurationsbereich handeln (das wird mit instanceOf geprüft)attributeGroup
- ATG, die zu einem Fehler führteaspect
- Aspekt, der zu einem Fehler führtedata
- Datensatz, der Daten enthält, die nicht definiert sind.true
, wenn die übergenen Parameter zwar einen lokalen Fehler enthalten, dieser aber ignoriert werden kann. false
, wenn es sich um einen lokalen Fehler handelt, der gemeldet werden muss.private boolean checkDoubleComponentUsage(SystemObject component, SystemObject componentUser, java.util.Map<SystemObject,java.util.List<SystemObject>> componentsOfAnArea, ConsistencyCheckResult result)
Prüft, ob eine Komponente bereits von einem anderen übergeordneten Objekt benutzt wird. Die übergebene Komponente wird in der übergebenen Map gespeichert.
Wird die Komponente bereits benutzt, so wird ein lokaler Fehler erzeugt und am übergebenen Objekt result
gespeichert.
component
- Komponente, die geprüft werden soll. Diese wird als Key in der übergebenen Map gespeichert.componentUser
- Übergeordnetes Objekt, dass die Komponente nutzt. Dieser Wert wird als Value in der Map gespeichert.componentsOfAnArea
- Map, die alle bisher benutzten Komponenten und deren Benutzer enthält.result
- Objekt, an dem lokale Fehler gespeichert werden. true
, wenn es zu keinem Fehler gekommen ist. false
, wenn eine Komponente von zwei übergeordneten Objekten benutzt wurde.private void checkDoubleIdsInDifferentAreas(SystemObject systemObject, java.util.Map<java.lang.Long,java.util.List<SystemObject>> idsFromAllAreas, ConsistencyCheckResult result)
Diese Methode prüft, ob eine Id bereits vergeben wurde. Dazu werden alle Ids aller betrachteten Objekte gespeichert. Wurde eine Id bereits vergeben, so wird ein lokaler Fehler gemeldet.
systemObject
- Objekt, das überprüft werden sollidsFromAllAreas
- Map, die alle Ids speichert. In dieser Map wir das übergebene Objekt systemObject
ebenfalls gespeichert.result
- Wird eine doppelte Id gefunden, so wird ein lokaler Fehler erzeugt und an diesem Objekt gespeichert.private void checkDoublePidsInDifferntAreas(SystemObject systemObject, java.util.Map<java.lang.String,SystemObject> pidsFromAllAreas, ConsistencyCheckResult result)
Diese Methode prüft, ob die Pid des übergebenen Objekts bereits in einem anderen Konfigurationsbereich vergeben wurde. Ist dies der Fall, so wird eine Warnung erzeugt und an das übergebene Objekt result
übergeben.
Eine Ausnahme bilden Objekte mit der Pid "" (es wurde keine Pid angegeben), diese werden nicht gespeichert und nicht Berücksichtigt.
Die Warnung darf nur eingetragen werden, wenn die beiden Objekte in unterschiedlichen Konfigurationsbereichen zu finden sind. Sind beide Objekte im gleichen Bereich, wurde ein lokaler Fehler gefunden. Dieser muss durch einen anderen Test gefunden und gemeldet werden.
Wurde die Pid bisher nicht vergeben, so wird sie in der übergebenen Map gespeichert.
systemObject
- Objekt, dessen Pid geprüft werden soll.pidsFromAllAreas
- Alle Pids, die bisher in die Map eingetragen wurden. Wurde eine doppelte Pid gefunden, so wird das neue Objekt nicht in die Map eingetragen.result
- Objekt, in dem eine Warnung eingetragen wird, wenn die Pid des übergebenen Objekts systemObject
bereits in der Map vorhanden war.private boolean checkDataSetReferences(Data data, Data parentData, ConfigurationArea configArea, DataModel dataModel, ConsistencyCheckResult errorObject, SystemObject systemObject, java.util.Map<SystemObject,java.util.List<SystemObject>> usedComponents)
Durchläuft rekursiv einen Datensatz und prüft ob alle referenzierten Objekte im entsprechenden Konfigurationsbereich vorhanden und gültig sind.
Ist ein referenziertes Objekt als Komposition gekennzeichnet, so muss das referenzierte Objekt im übergebenen Konfigurationsbereich zu finden sein.
Ist ein referenziertes Objekt als Aggregation bzw. Assoziation gekennzeichnet, muss das referenzierte Objekt im übergebenen Datenmodell zu finden sein.
In allen Fällen muss das referenzierte Objekt in der angegebenen Version gültig sein.
data
- Datensatz, der geprüft werden sollparentData
- Übergeordnetes Data-Objekt oder null
, falls data
einen ganzen Datensatz darstellt.configArea
- Konfigurationsbereich, in dem sich ein referenziertes Objekt befinden muss, wenn die Referenz als Komposition definiert istdataModel
- Datenmodell, in dem sich ein referenziertes Objekt befinden muss, wenn die Referenz nicht als Komposition definiert isterrorObject
- Objekt, in dem ein Fehler eingetragen werden kannsystemObject
- Objekt, an dem der Datensatz gespeichert ist. Diese Information wird benötigt, um eine entsprechende Fehlermeldung zu generierenusedComponents
- Speichert alle Komponenten und deren übergeordnete Objekte.private java.lang.String getAttributeDescription(Data parentData, Data data)
private boolean configurationObjectAvailability(ConfigurationObject configurationObject)
Prüft ob ein Objekt in der angegebenen Version gültig ist (das Objekt kann auch über die Version hinaus gültig sein).
configurationObject
- Objekt, das geprüft werden sollprivate java.lang.StringBuffer createLocalErrorMessagePartOne(ConfigurationArea configArea, java.lang.String errorType)
Erzeugt den ersten Teil einer Fehlermeldung, die zu einem lokalen Fehler gehört. Der erste Teil ist bei jedem lokalen Fehler identisch. Der Fehlertext hat folgende Form.
“Text ” “pid des Konfigurationsbereichs” “ Text ” “errorType” “. ”
configArea
- Konfigurationsbereich, in dem der lokale Fehler aufgetreten isterrorType
- Art des Fehlers, der aufgetreten istjava.util.List<ObjectSetUse> getObjectSetUses(SystemObjectType systemObjectType)
Diese Methode ermittelt anhand eines Objekt-Typen seine sämtlichen Mengenverwendungen.
systemObjectType
- der Objekt-Typjava.util.List<SystemObject> getAttributeGroups(SystemObjectType systemObjectType)
Alle Attributgruppen suchen (auch supertypen)
systemObjectType
- private short getActiveVersion(SystemObject systemObject)
Diese Methode sucht für ein Objekt die aktive Version. Befindet sich das Objekt in einem Bereich, der aktiviert werden soll, ist die aktive Version die Version in der der Bereich aktiviert werden soll. Wird der Bereich nicht mit einer neuen Version aktiviert, so wird die derzeit aktive Version zurückgegeben.
systemObject
- Objekt, zu dem die aktive Version des Bereich ermittelt werden sollprivate short getDependenceVersion(SystemObject systemObject)
Diese Methode gibt die Version zurück, in der eine Abhängigkeit zu dem übergebenen Objekt besteht. Wird ein Konfigurationsobjekt übergeben, so wird die Version zurückgegeben, in der das Objekt erzeugt wurde.
Wird ein dynamisches Objekt übergeben, so wird die Version gesucht, in der das dynamische Objekt erzeugt wurde und diese zurückgegeben. (Ein dynamisches Objekt entsteht zu einem Zeitpunkt, zu diesem Zeitpunkt muss eine Version aktiv gewesen sein, diese wird zurückgegeben.)
systemObject
- Objekt, dessen Version gefunden werden soll