{"id":21944,"date":"2011-09-07T21:12:00","date_gmt":"2011-09-08T02:12:00","guid":{"rendered":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/"},"modified":"2011-09-07T21:12:00","modified_gmt":"2011-09-08T02:12:00","slug":"what-heck-are-logical-models","status":"publish","type":"post","link":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/","title":{"rendered":"What the heck are logical models?"},"content":{"rendered":"<figure>\n<div class=\"feature-image\"><img decoding=\"async\" class=\"aligncenter size-full\" src=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png\" alt=\"What the heck are logical models?\"><\/div>\n<\/figure>\n<div class=\"body\">\n<div>\n<p>Have you ever committed to the repository and got mail afterwards &#x201C;Hey, this isn&#x2019;t compiling!&#x201D;? Likely you committed only some of the changes you made leaving out files required for a successful build. Let&#x2019;s take a look at a simple example:<\/p>\n<p><img class=\"lazyload\" title=\"EMF Example Model\" alt=\"logical model\" data-src=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png\"><\/p>\n<p>In this model we have a class element <strong>Some Class<\/strong> in <em>my.ecore<\/em> which extends <strong>AnAbstractClass<\/strong> in <em>Your.ecore<\/em>. In this scenario, we essentially have a dependency from <em>My.ecore<\/em> to <em>Your.ecore<\/em>. For example, renaming the class <strong>AnAbstractClass<\/strong> in <em>Your.ecore<\/em> also forces an update of the superclass property in <em>My.ecore<\/em>. This means we need to handle this change atomically across both files. In Eclipse, this is a called a &#x201C;Logical Model&#x201D;.<\/p>\n<p>A logical model is not necessarily related to <a href=\"http:\/\/www.eclipse.org\/modeling\/emf\/updates\/\">EMF<\/a> but a general concept to represent related files. While we use EMF in this example, the same applies to resources given that there is a corresponding model provider (more on that later). In the past, using CVS or Git as your SCM of choice, committing only changes for one of these files resulted in a broken repository state. Fortunately the Eclipse Platform has had a solution build-in for exactly this problem for years. Being a platform though, Eclipse only provides the necessary hooks but not the actual implementations.<\/p>\n<p>While the Eclipse CVS integration already supports Logical Models, the support in EGit is currently being <a href=\"http:\/\/egit.eclipse.org\/r\/#dashboard,74\">reviewed<\/a> for inclusion in the next major release. This means, whenever you&#x2019;re working with files that are part of a logical model and you&#x2019;re about to operate on these files, EGit will help you to include all relevant artifacts. Let&#x2019;s say are about to commit <em>My.ecore<\/em> to your repository. This will trigger EGit to reach out to the associated model providers asking the question &#x201C;I want to work on file X, which files are needed to have a consistent model?&#x201D;. In the case of <em>.ecore<\/em> files, the corresponding model provider is <a href=\"http:\/\/www.eclipse.org\/emf\/compare\/\">EMF Compare<\/a> which answers the question and EGit shows a dialog to widen the scope of the commit operation:<\/p>\n<p><img class=\"lazyload\" title=\"Selection Adjustments\" alt=\"selection\" data-src=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/selection.png\"><\/p>\n<p>This not only works when committing files to the repository but also when you replace or compare files with an older version.<\/p>\n<p><img class=\"lazyload\" title=\"Compare a logical model\" alt=\"comparison\" data-src=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/compare.png\"><\/p>\n<p>The features in EGit are only one side of the equation. We also need a tool that identifies the list of resources that are related to a given set of files. In the open source Eclipse ecosystem, EMF Compare is currently the only provider that handles the notation of logical models. With the support in CVS and EGit, I hope more plugins will contribute model providers to help users keep their repositories stable.&#xA0;<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever committed to the repository and got mail afterwards &#x201C;Hey, this isn&#x2019;t compiling!&#x201D;? Likely you committed only some of the changes you made leaving out files required for a successful build. Let&#x2019;s take a look at a simple example: In this model we have a class element Some Class in my.ecore which extends&#8230;<\/p>\n","protected":false},"author":233,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[9548],"tags":[],"class_list":["post-21944","post","type-post","status-publish","format-standard","hentry","category-engineering-teams"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.4 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>What the heck are logical models? | Tasktop Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.planview.com\/what-heck-are-logical-models\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What the heck are logical models?\" \/>\n<meta property=\"og:description\" content=\"Have you ever committed to the repository and got mail afterwards &#x201C;Hey, this isn&#x2019;t compiling!&#x201D;? Likely you committed only some of the changes you made leaving out files required for a successful build. Let&#x2019;s take a look at a simple example: In this model we have a class element Some Class in my.ecore which extends...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.planview.com\/what-heck-are-logical-models\/\" \/>\n<meta property=\"og:site_name\" content=\"Planview Blog\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772\" \/>\n<meta property=\"article:published_time\" content=\"2011-09-08T02:12:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png\" \/>\n<meta name=\"author\" content=\"Tasktop Blogger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Planview\" \/>\n<meta name=\"twitter:site\" content=\"@Planview\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tasktop Blogger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/\"},\"author\":{\"name\":\"Tasktop Blogger\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#\\\/schema\\\/person\\\/35676ea677995199889c0b6456156ce2\"},\"headline\":\"What the heck are logical models?\",\"datePublished\":\"2011-09-08T02:12:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/\"},\"wordCount\":463,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/media.planview.com\\\/tasktop_blog\\\/wp-content\\\/uploads\\\/model.png\",\"articleSection\":[\"Engineering Teams\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/\",\"url\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/\",\"name\":\"What the heck are logical models? | Tasktop Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/media.planview.com\\\/tasktop_blog\\\/wp-content\\\/uploads\\\/model.png\",\"datePublished\":\"2011-09-08T02:12:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#primaryimage\",\"url\":\"https:\\\/\\\/media.planview.com\\\/tasktop_blog\\\/wp-content\\\/uploads\\\/model.png\",\"contentUrl\":\"https:\\\/\\\/media.planview.com\\\/tasktop_blog\\\/wp-content\\\/uploads\\\/model.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/what-heck-are-logical-models\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.planview.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What the heck are logical models?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.planview.com\\\/\",\"name\":\"Planview Blog\",\"description\":\"Leading the conversation on digital connected work\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.planview.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#organization\",\"name\":\"Planview\",\"url\":\"https:\\\/\\\/blog.planview.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.planview.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/planview-logo-black.png\",\"contentUrl\":\"https:\\\/\\\/blog.planview.com\\\/wp-content\\\/uploads\\\/2015\\\/06\\\/planview-logo-black.png\",\"width\":280,\"height\":66,\"caption\":\"Planview\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"http:\\\/\\\/www.facebook.com\\\/pages\\\/Planview-Inc\\\/89422974772\",\"https:\\\/\\\/x.com\\\/Planview\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.planview.com\\\/#\\\/schema\\\/person\\\/35676ea677995199889c0b6456156ce2\",\"name\":\"Tasktop Blogger\",\"url\":\"https:\\\/\\\/blog.planview.com\\\/author\\\/tasktop-blogger\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"What the heck are logical models? | Tasktop Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/","og_locale":"en_US","og_type":"article","og_title":"What the heck are logical models?","og_description":"Have you ever committed to the repository and got mail afterwards &#x201C;Hey, this isn&#x2019;t compiling!&#x201D;? Likely you committed only some of the changes you made leaving out files required for a successful build. Let&#x2019;s take a look at a simple example: In this model we have a class element Some Class in my.ecore which extends...","og_url":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/","og_site_name":"Planview Blog","article_publisher":"http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772","article_published_time":"2011-09-08T02:12:00+00:00","og_image":[{"url":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png","type":"","width":"","height":""}],"author":"Tasktop Blogger","twitter_card":"summary_large_image","twitter_creator":"@Planview","twitter_site":"@Planview","twitter_misc":{"Written by":"Tasktop Blogger","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#article","isPartOf":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/"},"author":{"name":"Tasktop Blogger","@id":"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2"},"headline":"What the heck are logical models?","datePublished":"2011-09-08T02:12:00+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/"},"wordCount":463,"publisher":{"@id":"https:\/\/blog.planview.com\/#organization"},"image":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#primaryimage"},"thumbnailUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png","articleSection":["Engineering Teams"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/","url":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/","name":"What the heck are logical models? | Tasktop Blog","isPartOf":{"@id":"https:\/\/blog.planview.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#primaryimage"},"image":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#primaryimage"},"thumbnailUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png","datePublished":"2011-09-08T02:12:00+00:00","breadcrumb":{"@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.planview.com\/what-heck-are-logical-models\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#primaryimage","url":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png","contentUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/model.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.planview.com\/what-heck-are-logical-models\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.planview.com\/"},{"@type":"ListItem","position":2,"name":"What the heck are logical models?"}]},{"@type":"WebSite","@id":"https:\/\/blog.planview.com\/#website","url":"https:\/\/blog.planview.com\/","name":"Planview Blog","description":"Leading the conversation on digital connected work","publisher":{"@id":"https:\/\/blog.planview.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.planview.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.planview.com\/#organization","name":"Planview","url":"https:\/\/blog.planview.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png","contentUrl":"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png","width":280,"height":66,"caption":"Planview"},"image":{"@id":"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772","https:\/\/x.com\/Planview"]},{"@type":"Person","@id":"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2","name":"Tasktop Blogger","url":"https:\/\/blog.planview.com\/author\/tasktop-blogger\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts\/21944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/users\/233"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/comments?post=21944"}],"version-history":[{"count":0,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts\/21944\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/media?parent=21944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/categories?post=21944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/tags?post=21944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}