Pattern specification and application in metamodels in ecore
design patterns : elements of reusable object - oriented software .