Meta-Specification and Cataloging of Software Patterns with Domain Specific Languages and Adaptive Object Models