Fusa_Medini/Vecmocon_FuSaBMS_2W/config/scripts/.lib/finderEx.js

497 lines
12 KiB
JavaScript

/*
* Copyright (c) 2015-2019 ANSYS medini Technologies AG
* All rights reserved.
*
* The script is provided "as is" without warranty of any kind.
* ANSYS medini Technologies AG disclaims all warranties, either express or implied,
* including the warranties of merchantability and fitness for a particular purpose.
*
* v2020-10-21 - added findOrCreateHazard
* v2020-03-06 - initial support for traces
* v2020-01-03 - initial support for variables
* v2019-08-29 - initial support for Weaknesses and Triggers
* v2019-06-26 - improved support for goals and functions
* v2019-06-18 - added support for hazardous events
* v2019-04-11 - added support for general activities and actions
* v2017-03-01 - added support for project and system packages
* v2017-02-10 - added support for requirements
* v2016-11-14 - added support for hazard
* v2015-06-10 - added support for goal
* v2015-06-08 - initial version
*/
if (!bind) {
throw "This script requires extended API";
}
// extended finder methods
var AutoCounterSupport = bind("de.ikv.medini.metamodel.autocounter", "de.ikv.medini.metamodel.autocounter.AutoCounterSupport", false);
var TraceController = bind("de.ikv.medini.kernel.traceability", "de.ikv.medini.kernel.traceability.TraceController", false);
// helper
function findLimitation(scope, name) {
if (!scope) {
console.error("scope is undefined!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.Limitation, false).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateLimitation(scope, name) {
var found = findLimitation(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.Limitation);
created.name = name;
return created;
}
// helper
function findTriggeringCondition(scope, name) {
if (!scope) {
console.error("scope is undefined!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.TriggeringCondition, false).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateTriggeringCondition(scope, name) {
var found = findTriggeringCondition(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.TriggeringCondition);
created.name = name;
return created;
}
// helper
function findHazardousEvent(scope, id) {
if (!scope) {
console.error("scope is undefined!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.hazard.HazardousEvent, false).find("id", id);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateHazardousEvent(scope, id) {
var found = findHazardousEvent(scope, id);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.hazard.HazardousEvent);
created.id = id;
return created;
}
// helper
function findAction(scope, name) {
if (!scope) {
console.error("Scope is undefined in findAction!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLAction, true)
.find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
return undefined;
}
// helper
function findOrCreateAction(scope, name) {
var found = findAction(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.sysml.SysMLAction);
created.name = name;
return created;
}
// helper
function findActivity(scope, name) {
if (!scope) {
console.error("Scope is undefined in findActivity!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLActivity, true)
.find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
return undefined;
}
// helper
function findOrCreateActivity(scope, name) {
var found = findActivity(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.sysml.SysMLActivity);
created.name = name;
return created;
}
// helper
function findFunction(scope, name, id) {
if (!scope) {
console.error("Scope is undefined in findFunction!");
return undefined;
}
// id before name (!)
if (id) {
var found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLActivity, true)
.and("typeCode", "function")
.find("id", id);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
}
if (name) {
found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLActivity, true)
.and("typeCode", "function")
.find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
}
return undefined;
}
// helper
function findOrCreateFunction(scope, name, id) {
var found = findFunction(scope, name, id);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.sysml.SysMLActivity);
created.typeCode = "function";
created.id = id ? id : AutoCounterSupport.createUniqueIDString(created, "id", "F-001");
created.name = name;
return created;
}
// helper
function findMalfunction(scope, name) {
if (!scope) {
console.error("Scope is undefined in findMalfunction!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.Malfunction, true).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateMalfunction(scope, name) {
var found = findMalfunction(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.Malfunction);
created.name = name;
return created;
}
// helper
function findHazard(scope, name) {
if (!scope) {
console.error("Scope is undefined in find method!");
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.Hazard, true).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateHazard(scope, name) {
if (!scope) {
console.error("Scope is undefined in findOrCreate!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.Hazard, true).find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.Hazard);
created.name = name;
return created;
}
// helper
function findOrCreateFailureMode(scope, name) {
if (!scope) {
console.error("Scope is undefined in findOrCreate!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.FailureMode, true).find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.FailureMode);
created.name = name;
return created;
}
// helper
function findOrCreateMeasure(scope, name) {
if (!scope) {
console.error("Scope is undefined in findOrCreate!");
}
var found = Global.getFinder(scope).findByType(Metamodel.safetyModel.Measure, true).find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
// create one
var created = Factory.createElement(scope, Metamodel.safetyModel.Measure);
created.name = name;
return created;
}
// helper
function findContainerPackage(scope, name) {
if (!scope) {
console.error("Scope is undefined in find method!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLContainerPackage, true).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreateContainerPackage(scope, name) {
var found = findContainerPackage(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.sysml.SysMLContainerPackage);
created.name = name;
return created;
}
// helper
function findPart(scope, name) {
if (!scope) {
console.error("Scope is undefined in find method!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.sysml.SysMLPart, true).find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.asArray()[0];
}
return undefined;
}
// helper
function findOrCreatePart(scope, name) {
var found = findPart(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.sysml.SysMLPart);
created.name = name;
return created;
}
// helper
function findGoal(scope, name, id) {
if (!scope) {
console.error("Scope is undefined in find method!");
}
// id before name (!)
if (id) {
var found = Global.getFinder(scope).findByType(Metamodel.safetygoals.SafetyGoal, true).find("identifier", id);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
}
if (name) {
found = Global.getFinder(scope).findByType(Metamodel.safetygoals.SafetyGoal, true).find("name", name);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
}
return undefined;
}
// helper
function findOrCreateGoal(scope, name, id) {
var found = findGoal(scope, name, id);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.safetygoals.SafetyGoal);
created.name = name;
created.identifier = id;
return created;
}
// helper
function findRequirement(scope, nameOrId) {
if (!scope) {
console.error("Scope is undefined in find method!");
}
var found = Global.getFinder(scope).findByType(Metamodel.safetygoals.SafetyRequirement, true).find("name", nameOrId);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
// try again with ID
found = Global.getFinder(scope).findByType(Metamodel.safetygoals.SafetyRequirement, true).find("identifier", nameOrId);
if (!found.isEmpty()) {
// first() since 3.0.2
return found.first();
}
return undefined;
}
// helper
function findPackage(scope, name) {
if (!scope) {
console.error("Scope is undefined in find method!");
return undefined;
}
var found = Global.getFinder(scope).findByType(Metamodel.projectmodel.PJPackage, true).find("name", name);
if (!found.isEmpty()) {
return found.first();
}
return undefined;
}
// helper
function findOrCreatePackage(scope, name) {
var found = findPackage(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, Metamodel.projectmodel.PJPackage);
created.name = name;
return created;
}
// helper
function findVariable(scope, name) {
if (!scope) {
console.error("Scope is undefined in find method!");
return undefined;
}
// only handle elements that may carry failure rate data
if (!Metamodel.safetyModel.Failable.isInstance(scope)) {
console.error("Scope is not a Failable but has to be!");
return undefined;
}
// we can skip if elements has no failure rate data
if (!scope.failureRateData) {
return undefined;
}
// search for catalog variables first
var found = Global.getFinder(scope.failureRateData.variables.toArray()).findByType("FRVariable").find("name", name);
if (!found.isEmpty()) {
return found.first();
}
// search for user variables next
found = Global.getFinder(scope.failureRateData.userVariables.toArray()).findByType("FRVariable").find("name", name);
if (!found.isEmpty()) {
return found.first();
}
// give up
return undefined;
}
// helper
function findOrCreateVariable(scope, name) {
var found = findVariable(scope, name);
if (found) {
return found;
}
// create one
var created = Factory.createElement(scope, "FRVariable");
created.name = name;
// created.description = description;
// created.comment = comment;
// created.value = value;
return created;
}
function findTraces(project) {
var traceSet = TraceController.INSTANCE.findTraceModel(project ? project : finder.project);
return Global.getFinder(traceSet).findByType("Trace");
}