configmodeler and vclipse languages and ides for product modeling on different abstraction levels

57
ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels Tim Geisler webXcerpt Software GmbH [email protected] CWG 2010, Vienna 2010-04-20

Upload: tim-geisler

Post on 15-Aug-2015

19 views

Category:

Software


0 download

TRANSCRIPT

Page 1: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

ConfigModeler and VClipse

Languages and IDEs for Product Modeling

on Different Abstraction Levels

Tim Geisler

webXcerpt Software GmbH

[email protected]

CWG 2010, Vienna 2010-04-20

Page 2: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Product Modeling Gap

Page 3: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

● Post-merger consolidation:harmonize SAP and non-SAP systemsfor sales and configuration

● SAP ERP/PLM (VC) + SAP CRM 2007 (IPC)● Migration challenge:

How to migrate 6 product lines / more than 240 different products to VC / IPC?

(CWG 2009 Berlin talk by Gerhard Hering, NSN)

Product Modeling @

Page 4: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Fabric-like Modeling

NSN VC framework

IPC extensions

coding conventions

Nearshore VC modeling team

Company-wide generic product structure

Standardizedproduct descriptions

Page 5: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Fabric-like Modeling

NSN VC framework

IPC extensions

coding conventions

Nearshore VC modeling team

Company-wide generic product structure

Standardizedproduct descriptions

Page 6: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Standardized Product Descriptions

● Product structure● Characteristics

(domains, texts, default values, interface design)

● Quantity rules for materials

● Other rules

In-house product experts specify product models

Page 7: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Problems

Excel „template“ used as graph paper● pseudo code – manual translation required● manual tracking of changes● no guarantee for completeness● no specific tool support – just general Excel● first visual feedback with product setup

Page 8: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Standardized Product Descriptions

Page 9: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Standardized Product Descriptions

Formalized Product Descriptions

Page 10: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Formalized Product Descriptions

Domain specific language● problem-oriented● human-understandable● text-based● machine-processable

Configuration Modeling Language (CML)

Page 11: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Products

Materials

Value Domains

Parameters

Equations

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Page 12: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Products

Materials

Value Domains

Parameters

Equations

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Page 13: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Products

Materials

Value Domains

Parameters

Equations

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Page 14: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Products

Materials

Value Domains

Parameters

Equations

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Page 15: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Configuration Modeling Language

Products

Materials

Value Domains

Parameters

Equations

Page 16: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Configuration Modeling Language

Identifiers

Page 17: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Configuration Modeling Language

Identifiers

Slotting

Page 18: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

product CWGSwitch is #ABC000010000630 { uplink in [10GE, *1GE] is XYZ_CWGSWITCH_UPL; domain boards =

switch uplink {case 10GE : [*unequipped, 2x10GE, 8x1GE, 16x1GE];case 1GE : [*unequipped, 8x1GE, 16x1GE];};

product interfaceSubsystem is #ABC000010000640 {slot slot1 in boards is XYZ_CWGSWITCH_SLOT01;slot slot2 in boards is XYZ_CWGSWITCH_SLOT02;slot slot3 in boards is XYZ_CWGSWITCH_SLOT03;slot slot4 in boards is XYZ_CWGSWITCH_SLOT04;slotable #2x10GE is #ABC00001000634;slotable #8x1GE is #ABC00001000635;slotable #16x1GE is #ABC00001000636;check(#2x10GE > 2, "Only two 2x10GE boards allowed");

}; product powerSubsystem is #ABC000010000641 {

power in [*AC, DC] is XYZ_CWGSWITCH_PWR;powerRedundancy in

if power == AC then [*false, true] else disabled false

is XYZ_CWGSWITCH_PWRRED;amountPowerSupplies = 1 + (1 when powerRedundancy);#POWER:AC = amountPowerSupplies when power == AC;...

};...

Configuration Modeling Language

Identifiers

Slotting

Conditionals

Page 19: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Parallel conditions● Value domains● Default values● Visibility

hw/sw inif isNewDeliverythen switch chassis {

case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; }

else invisible NoHW/SW;

Page 20: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Parallel conditions● Value domains● Default values● Visibility

hw/sw inif isNewDeliverythen switch chassis {

case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; }

else invisible NoHW/SW;

Page 21: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Configuration Modeling Language

Parallel conditions● Value domains● Default values● Visibility

hw/sw inif isNewDeliverythen switch chassis {

case Chassis:A : [NoHW/SW, *HW/SW1, HW/SW2]; case Chassis:B : case Chassis:C : [NoHW/SW, *HW/SW2, HW/SW3]; case Chassis:D : disabled HW/SW1; default : invisible NoHW/SW; }

else invisible NoHW/SW;

Page 22: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

ConfigModeler

Integrated Development Environment (IDE)

for CML● Eclipse-based

Page 23: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Syntax checks

Page 24: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Syntax checks

Checking references

Page 25: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Syntax checks

Checking references

Checking types

Page 26: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Syntax checks

Checking references

Checking types

Code completion

Page 27: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Syntax checks

Checking references

Checking types

Code completion

Cycle detection

Page 28: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

General IDE Features

Diff and history

Page 29: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Domain-specific IDE Features

Additional information

Page 30: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Domain-specific IDE Features

Additional information

Dependency graph

Page 31: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Domain-specific IDE Features

Additional information

Dependency graph

IPC preview for user interface

Page 32: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VC Code Generation

Automatic generation of SAP product modelfrom formal specification in CML

Page 33: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VC Code Generation

Uses NSN VC framework and coding conventions...* count slotable materialPFUNCTION Z_VC_GEN_AGG_INST_02 ( GEN_CSTIC_IN_PREFIX_01 = 'XYZ_CWGSWITCH_SLOT', GEN_CSTIC_IN_PREFIX_02 = 'NA', GEN_CSTIC_IN_PREFIX_03 = 'NA', GEN_CSTIC_IN_PREFIX_04 = 'NA', GEN_CSTIC_QTY_PREFIX = 'NA', GEN_DIGITS = 2, GEN_CSTIC_OUT = 'GEN_CML_AGG_MODULES', GEN_INSTANCE_START = 'PARENT', GEN_INCL_START_INST = 'T', GEN_INCL_SELF_INST = 'F', GEN_RECURSIVE = 'F', GEN_AGG_CTRL_SUFFIX = 'NA', GEN_AGG_CTRL_MATNR_LIST = 'NA', GEN_AGG_CTRL_CLASS = 'NA', GEN_AGG_CTRL_CSTIC = 'NA', GEN_AGG_CTRL_VAL = 'NA', GEN_MODE = 'DELETE'),* slotable material #2x10GEPFUNCTION Z_VC_GEN_GET_COMP_DATA_01 ( GEN_CSTIC_IN = 'GEN_CML_AGG_MODULES', GEN_INSTANCE_IN = 'SELF', GEN_VAL_CHAR_01 = '2x10GE', GEN_INDEX_NUM = 1, GEN_COMP_QTY = $SELF.GEN_AUX_NUM_01),PFUNCTION Z_VC_GEN_SET_VBOM_MU ( GEN_MU_ID = 'ABC00001000634', GEN_MU_QTY = $SELF.GEN_AUX_NUM_01, GEN_VBOM_CSTIC = 'GEN_VBOM_CURR') IF $SELF.GEN_AUX_NUM_01 GT 0,...

Page 34: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VC Code Generation

Automated model setupvia Product Data Replication

PDR

Page 35: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Use of ConfigModeler at NSN

● Product specialists specify and set upproducts models in SAP

● 20 users (10 regular)● up to now 60 products● but: not a tool for all products

Page 36: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

System Overview

RFC

Editor

ConfigModeler

CML

Compiler

Page 37: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Product Modeling in SAP VC

existing:● textual languages for procedures and constraints● interactive creation and change of VC objects

missing:● human-readable textual language for VC objects

– diff / merge / version control– find / replace– partial models– product model as a document

Page 38: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

System Overview

RFC

Editor

ConfigModeler

CML

Compiler

Page 39: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

System Overview

RFC

Editor

Editor

ConfigModeler

VClipse

CML

VCML

Compiler

Page 40: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VCML: DSL for SAP VC

● Simple DSL for SAP VC objectswith embedded languages for procedures and constraints

● DSL design:● Make it simple● Model only important properties of SAP objects,

others are hard-wired or defaulted

Page 41: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VCML Example: Characteristic

characteristic WP_OPTIONS { description "Web Phone Options" documentation "Some long documentation on Web Phone Options" symbolic { numberOfChars 3 values { '001' { description "Cable for connecting monitor" } '002' { description "Voice mail" } '003' { description "Camera" } '004' { description "Additional Antenna" } '005' { description "Memory Upgrade" dependencies { WP_MEMORY_UPGRADE } } '006' { description "Self-Cleaning Screen" } } } status released [ multiValue required ]}

Page 42: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VCML Example: Precondition

precondition WP_MEMORY_UPGRADE { description "Precond. for memory upgrade" status released source {* memory upgrade is only allowed with answering machine$self.WP_options specified and$self.WP_options = '002'. }}

Page 43: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Page 44: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Jump to definition

Page 45: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Jump to definition

Page 46: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Jump to definition

Code completion

Page 47: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Jump to definition

Code completion

Outline

Document order PMEVC order

Page 48: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse: Eclipse-based IDE for VCML

Syntax check

Jump to definition

Code completion

Outline

Diff / merge

History

Page 49: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Interfaces to SAP: RFC-based

CRUD operations

Recursive model extraction

Page 50: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Interfaces to SAP: IDoc-based

Send complete product modelsvia Product Data Replication (PDR)

VCML JCo IDocs UPSPDR

Page 51: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse is Free

Page 52: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse is Free

Page 53: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

VClipse.org: Open Source

Use, adapt, integrate, contribute!

Page 54: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Summary

Product modeling is like programming● Use appropriate languages ● Use appropriate tools

Tool chain for text-based product modeling● CML, VCML:

two languages with different abstraction levels● ConfigModeler, VClipse:

two Eclipse-based IDEs

Page 55: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Summary

Page 56: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels

Thanks to ...

● various persons at Nokia Siemens Networks● Peter Muthsam (VC knowledge)● Daniel Naus (CWG Sandbox)● itemis (Xtext)● webXcerpt team

Page 57: ConfigModeler and VClipse Languages and IDEs for Product Modeling on Different Abstraction Levels