{"action":"created","issue":{"url":"https://api.github.com/repos/Jasig/uPortal/issues/604","labels_url":"https://api.github.com/repos/Jasig/uPortal/issues/604/labels{/name}","comments_url":"https://api.github.com/repos/Jasig/uPortal/issues/604/comments","events_url":"https://api.github.com/repos/Jasig/uPortal/issues/604/events","html_url":"https://github.com/Jasig/uPortal/pull/604","id":119616250,"number":604,"title":"UP-4518 Add Lifecycle to portlet definition, rev portlet definition","user":{"login":"jameswennmacher","id":1479823,"avatar_url":"https://avatars.githubusercontent.com/u/1479823?v=3","gravatar_id":"","url":"https://api.github.com/users/jameswennmacher","html_url":"https://github.com/jameswennmacher","followers_url":"https://api.github.com/users/jameswennmacher/followers","following_url":"https://api.github.com/users/jameswennmacher/following{/other_user}","gists_url":"https://api.github.com/users/jameswennmacher/gists{/gist_id}","starred_url":"https://api.github.com/users/jameswennmacher/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jameswennmacher/subscriptions","organizations_url":"https://api.github.com/users/jameswennmacher/orgs","repos_url":"https://api.github.com/users/jameswennmacher/repos","events_url":"https://api.github.com/users/jameswennmacher/events{/privacy}","received_events_url":"https://api.github.com/users/jameswennmacher/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2015-12-01T00:54:35Z","updated_at":"2015-12-01T03:30:31Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/Jasig/uPortal/pulls/604","html_url":"https://github.com/Jasig/uPortal/pull/604","diff_url":"https://github.com/Jasig/uPortal/pull/604.diff","patch_url":"https://github.com/Jasig/uPortal/pull/604.patch"},"body":"https://issues.jasig.org/browse/UP-4518\r\n\r\nAdd support for optional lifecycle element.  In a portlet definition, you can add a lifecycle element:\r\n\r\nBumped portlet-definition to 4.3.  Added optional lifecycle element:\r\n\r\n```xml\r\n    <lifecycle>\r\n        <approved>2015-11-06T12:48:19.717-07:00</approved>\r\n        <published user=\"admin\">2015-11-06T12:48:19.717-07:00</published>\r\n        <expiration user=\"admin\">2015-12-16T12:48:19.717-07:00</expiration>\r\n    </lifecycle>\r\n```\r\n* lifecycle with no children: created\r\n* user is optional, defaults to system\r\n* expiration can be in the past (expired) or future (scheduled expiration)\r\n* prior elements not necessary; e.g. can specify just published and approved will be defaulted appropriately\r\n\r\n"},"comment":{"url":"https://api.github.com/repos/Jasig/uPortal/issues/comments/160840143","html_url":"https://github.com/Jasig/uPortal/pull/604#issuecomment-160840143","issue_url":"https://api.github.com/repos/Jasig/uPortal/issues/604","id":160840143,"user":{"login":"apetro","id":952283,"avatar_url":"https://avatars.githubusercontent.com/u/952283?v=3","gravatar_id":"","url":"https://api.github.com/users/apetro","html_url":"https://github.com/apetro","followers_url":"https://api.github.com/users/apetro/followers","following_url":"https://api.github.com/users/apetro/following{/other_user}","gists_url":"https://api.github.com/users/apetro/gists{/gist_id}","starred_url":"https://api.github.com/users/apetro/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apetro/subscriptions","organizations_url":"https://api.github.com/users/apetro/orgs","repos_url":"https://api.github.com/users/apetro/repos","events_url":"https://api.github.com/users/apetro/events{/privacy}","received_events_url":"https://api.github.com/users/apetro/received_events","type":"User","site_admin":false},"created_at":"2015-12-01T03:30:31Z","updated_at":"2015-12-01T03:30:31Z","body":"Love the feature.  Love the thoughtful, graceful implementation of defaults.  Love that there's test coverage over some of this. Love that there's an upgrade path and that the new entity element is eminently optional.\r\n\r\nI'd quibble with some of the implementation details. The private methods look procedural where a more object-oriented approach might be more amenable to test coverage.\r\n\r\n:+1:."}}