#![allow(clippy::all, dead_code, unused)]
use cimdecoder::CimDataset;
use crate::Violation;
use crate::helpers::*;
pub fn validate_p61970_600_2_diagramlayout_ap_con_simple_shacl(dataset: &CimDataset) -> Vec<Violation> {
let mut v = Vec::new();
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_name_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_orientation_in(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_x1initial_view_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_y2initial_view_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_m_rid_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_diagram_style_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_y1initial_view_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_x2initial_view_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_diagram_style_has_value(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_description_max_count(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_orientation_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_identified_obj_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_is_polygon_max_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_offset_x_max_c_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_rotation_max_c_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_object_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_has_value(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_description_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_offset_y_max_c_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_drawing_order_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_object_etc_2(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_name_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_m_rid_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_identifie_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_identified_obj_etc_2(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_y_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_se_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_2(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_3(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_z_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_x_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_4(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_name_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_descr_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_m_rid_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_name_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_description_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_m_rid_required(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_o_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_text_diagram_object_text_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_drawing_o_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_r_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_descri_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_is_polygo_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_offset_x_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_offset_y_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_rotation_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_identifie_etc_2(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_h_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_m_rid_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_name_r_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_o_etc_2(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_drawing_or_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_descripti_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_name_requ_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_m_rid_req_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_visible_ob_etc(dataset));
v.extend(check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_visible_ob_etc_2(dataset));
v
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_name_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Diagram>() {
Some(o) => o, None => continue,
};
if obj.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "Diagram".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_orientation_in(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
const ALLOWED: &[&str] = &["OrientationKind.positive", "OrientationKind.negative"];
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Diagram>() {
Some(o) => o, None => continue,
};
if obj.orientation.is_none() { continue; }
if !ALLOWED.contains(&obj.orientation.as_ref().map_or("", |u| u.uri.as_str())) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.orientation-datatype".to_string(),
class: "Diagram".to_string(),
property: "Diagram.orientation".to_string(),
message: "The datatype is not IRI (Internationalized Resource Identifier) or it is enumerated value not part of the profile.".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.orientation-datatype".to_string(),
description: "This constraint validates the datatype of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_x1initial_view_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Diagram.x1InitialView") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.x1InitialView-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.x1InitialView".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.x1InitialView-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_y2initial_view_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Diagram.y2InitialView") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.y2InitialView-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.y2InitialView".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.y2InitialView-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_m_rid_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Diagram>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "Diagram".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_diagram_style_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Diagram.DiagramStyle") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.DiagramStyle-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.DiagramStyle".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.DiagramStyle-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_y1initial_view_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Diagram.y1InitialView") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.y1InitialView-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.y1InitialView".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.y1InitialView-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_x2initial_view_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("Diagram.x2InitialView") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.x2InitialView-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.x2InitialView".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.x2InitialView-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_diagram_style_has_value(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Diagram>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.diagram_style.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DiagramStyle"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.DiagramStyle-valueType".to_string(),
class: "Diagram".to_string(),
property: "Diagram.DiagramStyle".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DiagramStyle".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.DiagramStyle-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_identified_object_description_max_count(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "Diagram".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_diagram_orientation_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("Diagram").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::Diagram>() {
Some(o) => o, None => continue,
};
if obj.orientation.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:Diagram.orientation-cardinality".to_string(),
class: "Diagram".to_string(),
property: "Diagram.orientation".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "Diagram.orientation-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_identified_obj_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.IdentifiedObject") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:DiagramObject.IdentifiedObject-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.IdentifiedObject".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.IdentifiedObject-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_is_polygon_max_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.isPolygon") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.isPolygon-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.isPolygon".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.isPolygon-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_offset_x_max_c_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.offsetX") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.offsetX-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.offsetX".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.offsetX-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_rotation_max_c_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.rotation") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.rotation-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.rotation".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.rotation-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_object_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.DiagramObjectStyle") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.DiagramObjectStyle-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.DiagramObjectStyle".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.DiagramObjectStyle-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_has_value(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.diagram.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["Diagram"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.Diagram-valueType".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.Diagram".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:Diagram".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.Diagram-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_description_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
if obj.diagram.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.Diagram-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.Diagram".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.Diagram-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_offset_y_max_c_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.offsetY") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.offsetY-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.offsetY".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.offsetY-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_drawing_order_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.drawingOrder") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.drawingOrder-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.drawingOrder".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.drawingOrder-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_diagram_object_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.diagram_object_style.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DiagramObjectStyle"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.DiagramObjectStyle-valueType".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.DiagramObjectStyle".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DiagramObjectStyle".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.DiagramObjectStyle-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_name_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
if obj.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_identified_object_m_rid_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "DiagramObject".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_identifie_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.base.identified_object_.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["Diagram", "DiagramObject", "VisibilityLayer", "DiagramStyle", "DiagramObjectStyle", "TextDiagramObject"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.IdentifiedObject-valueType".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.IdentifiedObject".to_string(),
message: "One of the following occurs: 1) The value type is not IRI; 2) The value type is not the right class.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.IdentifiedObject-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_diagram_object_identified_obj_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.identified_object_.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["Diagram", "DiagramObject", "VisibilityLayer", "DiagramStyle", "DiagramObjectStyle", "TextDiagramObject"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.IdentifiedObject-valueType".to_string(),
class: "DiagramObject".to_string(),
property: "DiagramObject.IdentifiedObject".to_string(),
message: "One of the following occurs: 1) The value type is not IRI; 2) The value type is not the right class.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.IdentifiedObject-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObjectPoint.DiagramObjectGluePoint") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.DiagramObjectGluePoint-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.DiagramObjectGluePoint".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.DiagramObjectGluePoint-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_y_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectPoint>() {
Some(o) => o, None => continue,
};
if obj.y_position.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.yPosition-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.yPosition".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.yPosition-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_se_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObjectPoint.sequenceNumber") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.sequenceNumber-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.sequenceNumber".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.sequenceNumber-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectPoint>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.diagram_object_glue_point.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DiagramObjectGluePoint"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.DiagramObjectGluePoint-valueType".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.DiagramObjectGluePoint".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DiagramObjectGluePoint".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.DiagramObjectGluePoint-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_3(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectPoint>() {
Some(o) => o, None => continue,
};
if obj.diagram_object.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.DiagramObject-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.DiagramObject".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.DiagramObject-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_z_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObjectPoint.zPosition") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.zPosition-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.zPosition".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.zPosition-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_x_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectPoint>() {
Some(o) => o, None => continue,
};
if obj.x_position.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.xPosition-cardinality".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.xPosition".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.xPosition-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_point_diagram_object_point_di_etc_4(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectPoint").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectPoint>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.diagram_object.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DiagramObject", "TextDiagramObject"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObjectPoint.DiagramObject-valueType".to_string(),
class: "DiagramObjectPoint".to_string(),
property: "DiagramObjectPoint.DiagramObject".to_string(),
message: "One of the following occurs: 1) The value type is not IRI; 2) The value type is not the right class.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObjectPoint.DiagramObject-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_name_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectStyle").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectStyle>() {
Some(o) => o, None => continue,
};
if obj.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DiagramObjectStyle".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_descr_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectStyle").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DiagramObjectStyle".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_object_style_identified_object_m_rid_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramObjectStyle").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramObjectStyle>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "DiagramObjectStyle".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_name_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramStyle").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramStyle>() {
Some(o) => o, None => continue,
};
if obj.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "DiagramStyle".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_description_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramStyle").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "DiagramStyle".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_diagram_style_identified_object_m_rid_required(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("DiagramStyle").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::DiagramStyle>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "DiagramStyle".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_o_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.base.diagram_object_style.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["DiagramObjectStyle"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.DiagramObjectStyle-valueType".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.DiagramObjectStyle".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:DiagramObjectStyle".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.DiagramObjectStyle-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_text_diagram_object_text_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
if obj.text.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:TextDiagramObject.text-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "TextDiagramObject.text".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "TextDiagramObject.text-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_drawing_o_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.drawingOrder") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.drawingOrder-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.drawingOrder".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.drawingOrder-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_r_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
if obj.base.diagram.is_none() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.Diagram-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.Diagram".to_string(),
message: "Missing required association.".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.Diagram-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_descri_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_is_polygo_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.isPolygon") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.isPolygon-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.isPolygon".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.isPolygon-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_offset_x_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.offsetX") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.offsetX-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.offsetX".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.offsetX-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_offset_y_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.offsetY") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.offsetY-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.offsetY".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.offsetY-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_rotation_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.rotation") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.rotation-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.rotation".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.rotation-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_identifie_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.IdentifiedObject") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:DiagramObject.IdentifiedObject-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.IdentifiedObject".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.IdentifiedObject-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_h_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
let ref_mrid = match obj.base.diagram.as_ref() {
Some(r) => r.mrid.trim_start_matches('#'), None => continue,
};
if let Some(ref_entry) = dataset.entries.get(ref_mrid) {
let allowed: &[&str] = &["Diagram"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.Diagram-valueType".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.Diagram".to_string(),
message: "One of the following does not conform: 1) The value type shall be IRI; 2) The value type shall be an instance of the class: cim:Diagram".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.Diagram-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_m_rid_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
if obj.base.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_identified_object_name_r_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::TextDiagramObject>() {
Some(o) => o, None => continue,
};
if obj.base.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_text_diagram_object_diagram_object_diagram_o_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("TextDiagramObject").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("DiagramObject.DiagramObjectStyle") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:DiagramObject.DiagramObjectStyle-cardinality".to_string(),
class: "TextDiagramObject".to_string(),
property: "DiagramObject.DiagramObjectStyle".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "DiagramObject.DiagramObjectStyle-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_drawing_or_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("VisibilityLayer.drawingOrder") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:VisibilityLayer.drawingOrder-cardinality".to_string(),
class: "VisibilityLayer".to_string(),
property: "VisibilityLayer.drawingOrder".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "VisibilityLayer.drawingOrder-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_descripti_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
if dataset.entries[mrid].block.duplicate_fields.contains("IdentifiedObject.description") {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.description-cardinality".to_string(),
class: "VisibilityLayer".to_string(),
property: "IdentifiedObject.description".to_string(),
message: "Cardinality violation. Upper bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.description-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_name_requ_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::VisibilityLayer>() {
Some(o) => o, None => continue,
};
if obj.base.name.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.name-cardinality".to_string(),
class: "VisibilityLayer".to_string(),
property: "IdentifiedObject.name".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.name-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_identified_object_m_rid_req_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::VisibilityLayer>() {
Some(o) => o, None => continue,
};
if obj.base.m_rid.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "ido:IdentifiedObject.mRID-cardinality".to_string(),
class: "VisibilityLayer".to_string(),
property: "IdentifiedObject.mRID".to_string(),
message: "Missing required property (attribute).".to_string(),
severity: "sh:Violation".to_string(),
name: "IdentifiedObject.mRID-cardinality".to_string(),
description: "This constraint validates the cardinality of the property (attribute).".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_visible_ob_etc(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::VisibilityLayer>() {
Some(o) => o, None => continue,
};
if obj.visible_objects.is_empty() {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:VisibilityLayer.VisibleObjects-cardinality".to_string(),
class: "VisibilityLayer".to_string(),
property: "VisibilityLayer.VisibleObjects".to_string(),
message: "Cardinality violation. Lower bound shall be 1".to_string(),
severity: "sh:Violation".to_string(),
name: "VisibilityLayer.VisibleObjects-cardinality".to_string(),
description: "This constraint validates the cardinality of the association at the used direction.".to_string(),
});
}
}
violations
}
pub fn check_p61970_600_2_diagramlayout_ap_con_simple_shacl_visibility_layer_visibility_layer_visible_ob_etc_2(dataset: &CimDataset) -> Vec<Violation> {
let mut violations = Vec::new();
for mrid in dataset.by_type.get("VisibilityLayer").into_iter().flatten() {
let entry = &dataset.entries[mrid];
let obj = match entry.element.as_any()
.downcast_ref::<cimstructs::VisibilityLayer>() {
Some(o) => o, None => continue,
};
for r in &obj.visible_objects {
let ref_id = r.mrid.trim_start_matches('#');
if ref_id.is_empty() { continue; }
if let Some(ref_entry) = dataset.entries.get(ref_id) {
let allowed: &[&str] = &["DiagramObject", "TextDiagramObject"];
if !allowed.contains(&ref_entry.element.type_name()) {
violations.push(Violation {
object_id: mrid.clone(),
rule_id: "dl:VisibilityLayer.VisibleObjects-valueType".to_string(),
class: "VisibilityLayer".to_string(),
property: "VisibilityLayer.VisibleObjects".to_string(),
message: "One of the following occurs: 1) The value type is not IRI; 2) The value type is not the right class.".to_string(),
severity: "sh:Violation".to_string(),
name: "VisibilityLayer.VisibleObjects-valueType".to_string(),
description: "This constraint validates the value type of the association at the used direction.".to_string(),
});
}
}
}
}
violations
}