in core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/grid/bootstrap/_GridModel.java [80:212]
public static Optional<_GridModel> createFrom(final BSGrid bsGrid) {
var gridModel = new _GridModel();
bsGrid.visit(new BSGrid.VisitorAdapter(){
@Override
public void visit(final BSRow bsRow) {
final String id = bsRow.getId();
if(id == null) {
return;
}
if(gridModel.contains(id)) {
bsRow.setMetadataError("There is another element in the grid with this id: " + id);
gridModel.gridErrorsDetected = true;
return;
}
gridModel.putRow(id, bsRow);
}
@Override
public void visit(final BSCol bsCol) {
final String id = bsCol.getId();
if(id == null) {
return;
}
if(gridModel.contains(id)) {
bsCol.setMetadataError("There is another element in the grid with this id: " + id);
gridModel.gridErrorsDetected = true;
return;
}
gridModel.putCol(id, bsCol);
}
@Override
public void visit(final FieldSet fieldSet) {
var groupIdAndName = GroupIdAndName.forFieldSet(fieldSet);
if(!groupIdAndName.isPresent()) {
fieldSet.setMetadataError("a fieldset must at least have an id or a name");
gridModel.gridErrorsDetected = true;
return;
}
String id = groupIdAndName.get().id();
if(gridModel.contains(id)) {
fieldSet.setMetadataError("There is another element in the grid with this id: " + id);
gridModel.gridErrorsDetected = true;
return;
}
gridModel.putFieldSet(id, fieldSet);
}
});
if(gridModel.gridErrorsDetected) {
return Optional.empty();
}
bsGrid.visit(new BSGrid.VisitorAdapter(){
@Override
public void visit(final BSCol bsCol) {
if(isSet(bsCol.isUnreferencedActions())) {
if(gridModel.colForUnreferencedActionsRef != null) {
bsCol.setMetadataError("More than one col with 'unreferencedActions' attribute set");
} else if(gridModel.fieldSetForUnreferencedActionsRef != null) {
bsCol.setMetadataError("Already found a fieldset with 'unreferencedActions' attribute set");
} else {
gridModel.colForUnreferencedActionsRef=bsCol;
}
}
if(isSet(bsCol.isUnreferencedCollections())) {
if(gridModel.colForUnreferencedCollectionsRef != null) {
bsCol.setMetadataError("More than one col with 'unreferencedCollections' attribute set");
} else if(gridModel.tabGroupForUnreferencedCollectionsRef != null) {
bsCol.setMetadataError("Already found a tabgroup with 'unreferencedCollections' attribute set");
} else {
gridModel.colForUnreferencedCollectionsRef = bsCol;
}
}
}
@Override
public void visit(final FieldSet fieldSet) {
if(isSet(fieldSet.isUnreferencedActions())) {
if(gridModel.fieldSetForUnreferencedActionsRef != null) {
fieldSet.setMetadataError("More than one fieldset with 'unreferencedActions' attribute set");
} else if(gridModel.colForUnreferencedActionsRef != null) {
fieldSet.setMetadataError("Already found a column with 'unreferencedActions' attribute set");
} else {
gridModel.fieldSetForUnreferencedActionsRef = fieldSet;
}
}
if(isSet(fieldSet.isUnreferencedProperties())) {
if(gridModel.fieldSetForUnreferencedPropertiesRef != null) {
fieldSet.setMetadataError("More than one column with 'unreferencedProperties' attribute set");
} else {
gridModel.fieldSetForUnreferencedPropertiesRef = fieldSet;
}
}
}
@Override
public void visit(final BSTabGroup bsTabGroup) {
if(isSet(bsTabGroup.isUnreferencedCollections())) {
if(gridModel.tabGroupForUnreferencedCollectionsRef != null) {
bsTabGroup.setMetadataError("More than one tabgroup with 'unreferencedCollections' attribute set");
} else if(gridModel.colForUnreferencedCollectionsRef != null) {
bsTabGroup.setMetadataError("Already found a column with 'unreferencedCollections' attribute set");
} else {
gridModel.tabGroupForUnreferencedCollectionsRef = bsTabGroup;
}
}
}
});
if(gridModel.colForUnreferencedActionsRef == null && gridModel.fieldSetForUnreferencedActionsRef == null) {
bsGrid.getMetadataErrors().add("No column and also no fieldset found with the 'unreferencedActions' attribute set");
}
if(gridModel.fieldSetForUnreferencedPropertiesRef == null) {
bsGrid.getMetadataErrors().add("No fieldset found with the 'unreferencedProperties' attribute set");
}
if(gridModel.colForUnreferencedCollectionsRef == null && gridModel.tabGroupForUnreferencedCollectionsRef == null) {
bsGrid.getMetadataErrors().add("No column and also no tabgroup found with the 'unreferencedCollections' attribute set");
}
final boolean hasErrors =
gridModel.colForUnreferencedActionsRef == null
&& gridModel.fieldSetForUnreferencedActionsRef == null
|| gridModel.fieldSetForUnreferencedPropertiesRef == null
|| gridModel.colForUnreferencedCollectionsRef == null
&& gridModel.tabGroupForUnreferencedCollectionsRef == null;
return hasErrors ? Optional.empty() : Optional.of(gridModel);
}