497 lines
12 KiB
JavaScript
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");
|
|
} |