You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by os...@apache.org on 2013/08/20 10:54:36 UTC

svn commit: r1515747 - /isis/site/trunk/content/getting-started/resources/isis-templates.xml

Author: oscarbou
Date: Tue Aug 20 08:54:36 2013
New Revision: 1515747

URL: http://svn.apache.org/r1515747
Log:
ISIS-499: Add templates for implementing JDO managed relationships as detailed on: - http://www.datanucleus.org/products/datanucleus/jdo/orm/relationships.html

Modified:
    isis/site/trunk/content/getting-started/resources/isis-templates.xml

Modified: isis/site/trunk/content/getting-started/resources/isis-templates.xml
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/getting-started/resources/isis-templates.xml?rev=1515747&r1=1515746&r2=1515747&view=diff
==============================================================================
--- isis/site/trunk/content/getting-started/resources/isis-templates.xml (original)
+++ isis/site/trunk/content/getting-started/resources/isis-templates.xml Tue Aug 20 08:54:36 2013
@@ -1,467 +1,442 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><templates><template autoinsert="true" context="java-members" deleted="false" description="Action" enabled="true" name="isa">// {{ ${actionName} (action)&#13;
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")&#13;
-public ${ReturnType} ${actionName}(final ${ParameterType} ${parameterType}) {&#13;
-	return ${cursor}null; // TODO: business logic here&#13;
-}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument N autoComplete" enabled="true" name="isaauto">${:import(java.util.Collections,java.util.List)}public List&lt;${ParameterType}&gt; autoComplete${ParameterNumThenCapitalizedActionName}(final String searchArg) {&#13;
-	return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N, based on the provided search argument&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument N choices" enabled="true" name="isacho">${:import(java.util.Collections,java.util.List)}public List&lt;${ParameterType}&gt; choices${ParameterNumThenCapitalizedActionName}() {&#13;
-	return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument defaults" enabled="true" name="isadef">public ${ParameterType} default${ParameterNumThenCapitalizedActionName}() {&#13;
-	return ${cursor}null; // TODO: return default for argument N&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action disabling" enabled="true" name="isadis">public String disable${ActionName}() {&#13;
-	return ${cursor}null; // TODO: return reason why action disabled, null if enabled&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action hiding" enabled="true" name="isahid">public boolean hide${ActionName}() {&#13;
-	return ${cursor}false; // TODO: return true if action is hidden, false if visible&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action validation" enabled="true" name="isaval">public String validate${ActionName}(final ${ParameterType} ${parameterType}) {&#13;
-	return ${cursor}null; // TODO: return reason why action arguments are invalid, null if ok&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (1:m bidir parent)" enabled="true" name="isc-1m">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
-	// check for no-op&#13;
-	if (${childElementName} == null || &#13;
-		get${ChildCollectionName}().contains(${childElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate arg from its current parent (if any).&#13;
-	${childElementName}.clear${ParentPropertyNameInChild}();&#13;
-	// associate arg&#13;
-	${childElementName}.set${ParentPropertyNameInChild}(this);&#13;
-	get${ChildCollectionName}().add(${childElementName});&#13;
-	// additional business logic&#13;
-	onAddTo${ChildCollectionName}(${childElementName});&#13;
-}&#13;
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
-	// check for no-op&#13;
-	if (${childElementName} == null || &#13;
-		!get${ChildCollectionName}().contains(${childElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate arg&#13;
-	${childElementName}.set${ParentPropertyNameInChild}(null);&#13;
-	get${ChildCollectionName}().remove(${childElementName});&#13;
-	// additional business logic&#13;
-	onRemoveFrom${ChildCollectionName}(${childElementName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (m:m bidir child)" enabled="true" name="isc-mmc">public void addTo${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {&#13;
-	// check for no-op&#13;
-	if (${parentElementName} == null || &#13;
-		get${ParentCollectionName}().contains(${parentElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent to add&#13;
-	${parentElementName}.addTo${ChildCollectionNameInParent}(this);&#13;
-	// additional business logic&#13;
-	onAddTo${ParentCollectionName}(${parentElementName});&#13;
-}&#13;
-public void removeFrom${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {&#13;
-	// check for no-op&#13;
-	if (${parentElementName} == null || &#13;
-		!get${ParentCollectionName}().contains(${parentElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent to remove&#13;
-	${parentElementName}.removeFrom${ChildCollectionNameInParent}(this);&#13;
-	// additional business logic&#13;
-	onRemoveFrom${ParentCollectionName}(${parentElementName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (m:m bidir parent)" enabled="true" name="isc-mmp">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
-	// check for no-op&#13;
-	if (${childElementName} == null || &#13;
-		get${ChildCollectionName}().contains(${childElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate arg from its current parent (if any).&#13;
-	${childElementName}.removeFrom${ParentCollectionNameInChild}(this);&#13;
-	// associate arg&#13;
-	${childElementName}.get${ParentCollectionNameInChild}().add(this);&#13;
-	get${ChildCollectionName}().add(${childElementName});&#13;
-	// additional business logic&#13;
-	onAddTo${ChildCollectionName}(${childElementName});&#13;
-}&#13;
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
-	// check for no-op&#13;
-	if (${childElementName} == null || &#13;
-		!get${ChildCollectionName}().contains(${childElementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate arg&#13;
-	${childElementName}.get${ParentCollectionNameInChild}().remove(this);&#13;
-	get${ChildCollectionName}().remove(${childElementName});&#13;
-	// additional business logic&#13;
-	onRemoveFrom${ChildCollectionName}(${childElementName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection disabling" enabled="true" name="iscdis">public String disable${CollectionName}() {&#13;
-	return ${cursor}null; // TODO: return reason why collection read-only, null if editable&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection hiding" enabled="true" name="ischid">public boolean hide${CollectionName}() {&#13;
-	return ${cursor}false; // TODO: return true if hidden, false otherwise&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (list)" enabled="true" name="iscl">// {{ ${CollectionName} (Collection)&#13;
-${:import(java.util.List,java.util.ArrayList,org.apache.isis.applib.annotation.MemberOrder)}private List&lt;${ElementType}&gt; ${collectionName} = new ArrayList&lt;${ElementType}&gt;();&#13;
-@MemberOrder(sequence="1")&#13;
-public List&lt;${ElementType}&gt; get${CollectionName}() {&#13;
-	return ${collectionName};&#13;
-}&#13;
-public void set${CollectionName}(final List&lt;${ElementType}&gt; ${collectionName}) {&#13;
-	this.${collectionName} = ${collectionName};&#13;
-}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Collection modify" enabled="true" name="iscmod">public void addTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-	// check for no-op&#13;
-	if (${elementName} == null || &#13;
-		get${CollectionName}().contains(${elementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// associate new&#13;
-	get${CollectionName}().add(${elementName});&#13;
-    // additional business logic&#13;
-    onAddTo${CollectionName}(${elementName});&#13;
-}&#13;
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-	// check for no-op&#13;
-	if (${elementName} == null || &#13;
-		!get${CollectionName}().contains(${elementName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate existing&#13;
-	get${CollectionName}().remove(${elementName});&#13;
-    // additional business logic&#13;
-    onRemoveFrom${CollectionName}(${elementName});&#13;
-}&#13;
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}&#13;
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection modify (with actions)" enabled="true" name="iscmoda">${:import(org.apache.isis.applib.annotation.MemberOrder)}// Action.&#13;
-@MemberOrder(name="${collectionName}", sequence="1")&#13;
-public ${enclosing_type} insertInto${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    addTo${CollectionName}(${elementName});&#13;
-    return this;&#13;
-}&#13;
-&#13;
-// Programming model.&#13;
-public void addTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    // check for no-op&#13;
-    if (${elementName} == null ||&#13;
-            get${CollectionName}().contains(${elementName})) {&#13;
-            return;&#13;
-    }&#13;
-    // associate new&#13;
-    get${CollectionName}().add(${elementName});&#13;
-    // additional business logic&#13;
-    onAddTo${CollectionName}(${elementName});&#13;
-}&#13;
-&#13;
-// Action.&#13;
-@MemberOrder(name="${collectionName}", sequence="2")&#13;
-public ${enclosing_type} deleteFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    removeFrom${CollectionName}(${elementName});&#13;
-    return this;&#13;
-}&#13;
-&#13;
-// Programming model.&#13;
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    // check for no-op&#13;
-    if (${elementName} == null ||&#13;
-            !get${CollectionName}().contains(${elementName})) {&#13;
-            return;&#13;
-    }&#13;
-    // dissociate existing&#13;
-    get${CollectionName}().remove(${elementName});&#13;
-    // additional business logic&#13;
-    onRemoveFrom${CollectionName}(${elementName});&#13;
-}&#13;
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}&#13;
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set)" enabled="true" name="iscs">// {{ ${CollectionName} (Collection)&#13;
-${:import(java.util.Set,java.util.LinkedHashSet,org.apache.isis.applib.annotation.MemberOrder)}private Set&lt;${ElementType}&gt; ${collectionName} = new LinkedHashSet&lt;${ElementType}&gt;();&#13;
-@MemberOrder(sequence="1")&#13;
-public Set&lt;${ElementType}&gt; get${CollectionName}() {&#13;
-	return ${collectionName};&#13;
-}&#13;
-public void set${CollectionName}(final Set&lt;${ElementType}&gt; ${collectionName}) {&#13;
-	this.${collectionName} = ${collectionName};&#13;
-}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set-sorted)" enabled="true" name="iscss">// {{ ${CollectionName} (Collection)&#13;
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder)}private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();&#13;
-@MemberOrder(sequence="1")&#13;
-public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {&#13;
-    return ${collectionName};&#13;
-}&#13;
-public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {&#13;
-    this.${collectionName} = ${collectionName};&#13;
-}&#13;
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set-sorted-with actions)" enabled="true" name="iscssa">// {{ ${CollectionName} (Collection)&#13;
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder)}private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();&#13;
-@MemberOrder(sequence="1")&#13;
-public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {&#13;
-    return ${collectionName};&#13;
-}&#13;
-public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {&#13;
-    this.${collectionName} = ${collectionName};&#13;
-}&#13;
-&#13;
-@MemberOrder(name="${collectionName}", sequence="1")&#13;
-public ${enclosing_type} insertInto${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    addTo${CollectionName}(${elementName});&#13;
-    return this;&#13;
-}&#13;
-&#13;
-// Programming model.&#13;
-public void addTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    // check for no-op&#13;
-    if (${elementName} == null ||&#13;
-            get${CollectionName}().contains(${elementName})) {&#13;
-            return;&#13;
-    }&#13;
-    // associate new&#13;
-    get${CollectionName}().add(${elementName});&#13;
-    // additional business logic&#13;
-    onAddTo${CollectionName}(${elementName});&#13;
-}&#13;
-&#13;
-// Action.&#13;
-@MemberOrder(name="${collectionName}", sequence="2")&#13;
-public ${enclosing_type} deleteFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    removeFrom${CollectionName}(${elementName});&#13;
-    return this;&#13;
-}&#13;
-&#13;
-// Programming model.&#13;
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-    // check for no-op&#13;
-    if (${elementName} == null ||&#13;
-        !get${CollectionName}().contains(${elementName})) {&#13;
-        return;&#13;
-    }&#13;
-    // dissociate existing&#13;
-    get${CollectionName}().remove(${elementName});&#13;
-    // additional business logic&#13;
-    onRemoveFrom${CollectionName}(${elementName});&#13;
-}&#13;
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}&#13;
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-}&#13;
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection validation" enabled="true" name="iscval">public String validateAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-	return ${cursor}null; // TODO: return reason why argument cannot be added, null if ok to add&#13;
-}&#13;
-public String validateRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
-	return null; // TODO: return reason why argument cannot be removed, null if ok to remove&#13;
-}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies region" enabled="true" name="isd">// {{ injected dependencies&#13;
-${cursor}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies - injected service" enabled="true" name="isds">// {{ injected: ${ServiceType}&#13;
-private ${ServiceType} ${serviceType};&#13;
-public void set${ServiceType}(final ${ServiceType} ${serviceType}) {&#13;
-	this.${serviceType} = ${serviceType};&#13;
-}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (persistent)" enabled="true" name="isfp">// {{ Create new (already persisted) ${Type}&#13;
-public ${Type} new${Type}() {&#13;
-	${Type} ${type} = newTransientInstance(${Type}.class);&#13;
-	${cursor}// TODO: set up any properties&#13;
-&#13;
-	persist(${type});&#13;
-	return ${type};&#13;
-}&#13;
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (transient)" enabled="true" name="isft">// {{ Create new (still transient) ${Type}&#13;
-public ${Type} new${InstanceOfType}() {&#13;
-	${Type} ${type} = newTransientInstance(${Type}.class);&#13;
-	${cursor}// TODO: set up any properties&#13;
-&#13;
-	return ${type};&#13;
-}&#13;
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification region" enabled="true" name="isid">// {{ Identification&#13;
-${cursor}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - icon" enabled="true" name="isidicon">public String iconName() {&#13;
-	return ${cursor}null; // TODO: return name of image file (without suffix)&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - title" enabled="true" name="isidtitle">public String title() {&#13;
-    ${:import(org.apache.isis.applib.util.TitleBuffer)}final TitleBuffer buf = new TitleBuffer();&#13;
-    ${cursor}// TODO: append to TitleBuffer, typically value properties&#13;
-	return buf.toString();&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle region" enabled="true" name="isl">// {{ Lifecycle methods&#13;
-${cursor}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - create" enabled="true" name="islc">public void created() {&#13;
-    ${cursor}// TODO: post-create&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - load" enabled="true" name="isll">public void loading() {&#13;
-    ${cursor}// TODO: pre-load&#13;
-}&#13;
-public void loaded() {&#13;
-    // TODO: post-load&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - persist" enabled="true" name="islp">public void persisting() {&#13;
-    ${cursor}// TODO: pre-persist&#13;
-}&#13;
-public void persisted() {&#13;
-    // TODO: post-persist&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - remove" enabled="true" name="islr">public void removing() {&#13;
-    ${cursor}// TODO: pre-remove&#13;
-}&#13;
-public void removed() {&#13;
-    // TODO: post-remove&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - update" enabled="true" name="islu">public void updating() {&#13;
-    ${cursor}// TODO: pre-update&#13;
-}&#13;
-public void updated() {&#13;
-    // TODO: post-update&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property" enabled="true" name="isp">// {{ ${PropertyName} (property)&#13;
-private ${PropertyType} ${propertyName};&#13;
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")&#13;
-public ${PropertyType} get${PropertyName}() {&#13;
-	return ${propertyName};&#13;
-}&#13;
-public void set${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
-	this.${propertyName} = ${propertyName};&#13;
-}&#13;
-// }}&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Property (1:1 bidir child)" enabled="true" name="isp-11c">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {&#13;
-    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
-	// check for no-op&#13;
-	if (${parentPropertyName} == null || &#13;
-		${parentPropertyName}.equals(current${ParentPropertyName})) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent(s) to (re-)associate&#13;
-    if(current${ParentPropertyName}!=null) {&#13;
-        current${ParentPropertyName}.clear${ChildPropertyNameInParent}();&#13;
-    }&#13;
-	${parentPropertyName}.modify${ChildPropertyNameInParent}(this);&#13;
-	// additional business logic&#13;
-	onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});&#13;
-}&#13;
-public void clear${ParentPropertyName}() {&#13;
-    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
-	// check for no-op&#13;
-	if (current${ParentPropertyName} == null) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent to dissociate&#13;
-	current${ParentPropertyName}.clear${ChildPropertyNameInParent}();&#13;
-	// additional business logic&#13;
-	onClear${ParentPropertyName}(current${ParentPropertyName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property (1:1 bidir parent)" enabled="true" name="isp-11p">public void modify${ChildPropertyName}(final ${ChildPropertyType} ${childPropertyName}) {&#13;
-    ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();&#13;
-	// check for no-op&#13;
-	if (${childPropertyName} == null || &#13;
-		${childPropertyName}.equals(current${ChildPropertyName})) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate existing&#13;
-	clear${ChildPropertyName}();&#13;
-	// associate new&#13;
-	${childPropertyName}.set${ParentPropertyNameInChild}(this);&#13;
-	set${ChildPropertyName}(${childPropertyName});&#13;
-	// additional business logic&#13;
-	onModify${ChildPropertyName}(current${ChildPropertyName}, ${childPropertyName});&#13;
-}&#13;
-public void clear${ChildPropertyName}() {&#13;
-    ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();&#13;
-	// check for no-op&#13;
-	if (current${ChildPropertyName} == null) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate existing&#13;
-	current${ChildPropertyName}.set${ParentPropertyNameInChild}(null);&#13;
-	set${ChildPropertyName}(null);&#13;
-	// additional business logic&#13;
-	onClear${ChildPropertyName}(current${ChildPropertyName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property (m:1 bidir child)" enabled="true" name="isp-m1">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {&#13;
-    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
-	// check for no-op&#13;
-	if (${parentPropertyName} == null || &#13;
-		${parentPropertyName}.equals(current${ParentPropertyName})) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent to associate&#13;
-	${parentPropertyName}.addTo${ChildCollectionNameInParent}(this);&#13;
-	// additional business logic&#13;
-	onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});&#13;
-}&#13;
-public void clear${ParentPropertyName}() {&#13;
-    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
-	// check for no-op&#13;
-	if (current${ParentPropertyName} == null) {&#13;
-		return;&#13;
-	}&#13;
-	// delegate to parent to dissociate&#13;
-	current${ParentPropertyName}.removeFrom${ChildCollectionNameInParent}(this);&#13;
-	// additional business logic&#13;
-	onClear${ParentPropertyName}(current${ParentPropertyName});&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property autocomplete" enabled="true" name="ispauto">${:import(java.util.List)}public List&lt;${PropertyType}&gt; autoComplete${PropertyName}(final String searchArg) {&#13;
-	return ${cursor}null; // TODO: return list of choices for property based on the provided search argument&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property choices" enabled="true" name="ispcho">${:import(java.util.List)}public List&lt;${PropertyType}&gt; choices${PropertyName}() {&#13;
-	return ${cursor}null; // TODO: return list of choices for property&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property defaults" enabled="true" name="ispdef">public ${PropertyType} default${PropertyName}() {&#13;
-	return ${cursor}null; // TODO: return default for property when first created&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property disabling" enabled="true" name="ispdis">public String disable${PropertyName}() {&#13;
-	return ${cursor}null; // TODO: return reason why property is disabled, null if editable&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property hiding" enabled="true" name="isphid">public boolean hide${PropertyName}() {&#13;
-	return ${cursor}false; // TODO: return true if hidden, false if visible&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property modify" enabled="true" name="ispmod">public void modify${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
-    ${PropertyType} current${PropertyName} = get${PropertyName}();&#13;
-	// check for no-op&#13;
-	if (${propertyName} == null || &#13;
-		${propertyName}.equals(current${PropertyName})) {&#13;
-		return;&#13;
-	}&#13;
-	// associate new&#13;
-	set${PropertyName}(${propertyName});&#13;
-	// additional business logic&#13;
-	onModify${PropertyName}(current${PropertyName}, ${propertyName});&#13;
-}&#13;
-public void clear${PropertyName}() {&#13;
-    ${PropertyType} current${PropertyName} = get${PropertyName}();&#13;
-	// check for no-op&#13;
-	if (current${PropertyName} == null) {&#13;
-		return;&#13;
-	}&#13;
-	// dissociate existing&#13;
-	set${PropertyName}(null);&#13;
-	// additional business logic&#13;
-	onClear${PropertyName}(current${PropertyName});&#13;
-}&#13;
-protected void onModify${PropertyName}(final ${PropertyType} old${PropertyName}, final ${PropertyType} new${PropertyName}) {&#13;
-}&#13;
-protected void onClear${PropertyName}(final ${PropertyType} old${PropertyName}) {&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property validation" enabled="true" name="ispval">public String validate${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
-	if (${propertyName} == null) return null;&#13;
-	return ${cursor}null; // TODO: return reason why proposed value is invalid, null if valid&#13;
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all" enabled="true" name="issa">// {{ all ${TypePlural}&#13;
-${:import(org.apache.isis.applib.annotation.Exploration,java.util.List)}@Exploration&#13;
-public List&lt;${Type}&gt; all${TypePlural}() {&#13;
-	return allInstances(${Type}.class);&#13;
-}&#13;
-// }}&#13;
-&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all matching" enabled="true" name="issafil">// {{ all ${TypePlural} that ${filterDescription}&#13;
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
-public List&lt;${Type}&gt; all${TypePlural}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
-	return allMatches(${Type}.class, filter);&#13;
-}&#13;
-// }}&#13;
-&#13;
-&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for first matching" enabled="true" name="issffil">// {{ first ${Type} that ${filterDescription}&#13;
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
-public ${Type} first${Type}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
-	return firstMatch(${Type}.class, filter);&#13;
-}&#13;
-// }}&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for unique matching" enabled="true" name="issufil">// {{ unique ${Type} that ${filterDescription}&#13;
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
-public ${Type} unique${Type}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
-	return uniqueMatch(${Type}.class, filter);&#13;
-}&#13;
-// }}&#13;
-</template><template autoinsert="true" context="java-members" deleted="false" description="Object-level validation" enabled="true" name="isval">public String validate() {&#13;
-    ${cursor}// TODO: return reason why object is in invalid state (and so cannot be saved/updated), or null if ok&#13;
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+         http://www.apache.org/licenses/LICENSE-2.0
+         
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<templates><template autoinsert="true" context="java-members" deleted="false" description="Action" enabled="true" name="isa">// {{ ${actionName} (action)&#13;
+${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")&#13;
+public ${ReturnType} ${actionName}(final ${ParameterType} ${parameterType}) {&#13;
+	return ${cursor}null; // TODO: business logic here&#13;
+}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument N choices" enabled="true" name="isacho">${:import(java.util.Collections,java.util.List)}public List&lt;${ParameterType}&gt; choices${ParameterNumThenCapitalizedActionName}() {&#13;
+	return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument defaults" enabled="true" name="isadef">public ${ParameterType} default${ParameterNumThenCapitalizedActionName}() {&#13;
+	return ${cursor}null; // TODO: return default for argument N&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action disabling" enabled="true" name="isadis">public String disable${ActionName}() {&#13;
+	return ${cursor}null; // TODO: return reason why action disabled, null if enabled&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action hiding" enabled="true" name="isahid">public boolean hide${ActionName}() {&#13;
+	return ${cursor}false; // TODO: return true if action is hidden, false if visible&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action validation" enabled="true" name="isaval">public String validate${ActionName}(final ${ParameterType} ${parameterType}) {&#13;
+	return ${cursor}null; // TODO: return reason why action arguments are invalid, null if ok&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (1:m bidir parent)" enabled="true" name="isc-1m">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
+	// check for no-op&#13;
+	if (${childElementName} == null || &#13;
+		get${ChildCollectionName}().contains(${childElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate arg from its current parent (if any).&#13;
+	${childElementName}.clear${ParentPropertyNameInChild}();&#13;
+	// associate arg&#13;
+	${childElementName}.set${ParentPropertyNameInChild}(this);&#13;
+	get${ChildCollectionName}().add(${childElementName});&#13;
+	// additional business logic&#13;
+	onAddTo${ChildCollectionName}(${childElementName});&#13;
+}&#13;
+public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
+	// check for no-op&#13;
+	if (${childElementName} == null || &#13;
+		!get${ChildCollectionName}().contains(${childElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate arg&#13;
+	${childElementName}.set${ParentPropertyNameInChild}(null);&#13;
+	get${ChildCollectionName}().remove(${childElementName});&#13;
+	// additional business logic&#13;
+	onRemoveFrom${ChildCollectionName}(${childElementName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - 1:n bidir, foreign key)" enabled="true" name="isc-jdo-1n-b-fk">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent)}@Persistent(mappedBy="${elementNameInChild}", dependentElement="${trueOrFalse}")
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();
+@MemberOrder(sequence="1")
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - 1:n bidir, join table)" enabled="true" name="isc-jdo-1n-b-jt">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persitent,javax.jdo.annotations.Join)}@Persistent(mappedBy="${elementNameInChild}", dependentElement="${trueOrFalse}")
+@Join
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();
+@MemberOrder(sequence="1")
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - 1:n unidir, foreign key)" enabled="true" name="isc-jdo-1n-u-fk">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Element)}
+@Element(column="${ColumnName}", dependent="${trueOrFalse}")
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();
+@MemberOrder(sequence="1")
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - 1:n unidir, join table)" enabled="true" name="isc-jdo-1n-u-jt">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Join,javax.jdo.annotations.Element)}@Join
+@Element(dependent="${trueOrFalse}")
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();
+@MemberOrder(sequence="1")
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - m:n bidir - child)" enabled="true" name="isc-jdo-mn-ub-c">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent)}@Persistent(mappedBy="${ChildCollectionNameInParent}")
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - m:n unidir &amp; bidir - parent)" enabled="true" name="isc-jdo-mn-ub-p">// {{ ${CollectionName} (Collection)
+${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder,javax.jdo.annotations.Persistent,javax.jdo.annotations.Join,javax.jdo.annotations.Element)}@Persistent(table="${TableName}")
+@Join(column="${ThisEntityFieldName}")
+@Element(column="${RelatedEntityFieldName}")
+private SortedSet&lt;${ElementType}&gt; ${collectionName} = new TreeSet&lt;${ElementType}&gt;();@MemberOrder(sequence="1")
+
+public SortedSet&lt;${ElementType}&gt; get${CollectionName}() {
+	return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet&lt;${ElementType}&gt; ${collectionName}) {
+	this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (m:m bidir child)" enabled="true" name="isc-mmc">public void addTo${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {&#13;
+	// check for no-op&#13;
+	if (${parentElementName} == null || &#13;
+		get${ParentCollectionName}().contains(${parentElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to add&#13;
+	${parentElementName}.addTo${ChildCollectionNameInParent}(this);&#13;
+	// additional business logic&#13;
+	onAddTo${ParentCollectionName}(${parentElementName});&#13;
+}&#13;
+public void removeFrom${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {&#13;
+	// check for no-op&#13;
+	if (${parentElementName} == null || &#13;
+		!get${ParentCollectionName}().contains(${parentElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to remove&#13;
+	${parentElementName}.removeFrom${ChildCollectionNameInParent}(this);&#13;
+	// additional business logic&#13;
+	onRemoveFrom${ParentCollectionName}(${parentElementName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (m:m bidir parent)" enabled="true" name="isc-mmp">public void addTo${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
+	// check for no-op&#13;
+	if (${childElementName} == null || &#13;
+		get${ChildCollectionName}().contains(${childElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate arg from its current parent (if any).&#13;
+	${childElementName}.removeFrom${ParentCollectionNameInChild}(this);&#13;
+	// associate arg&#13;
+	${childElementName}.get${ParentCollectionNameInChild}().add(this);&#13;
+	get${ChildCollectionName}().add(${childElementName});&#13;
+	// additional business logic&#13;
+	onAddTo${ChildCollectionName}(${childElementName});&#13;
+}&#13;
+public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {&#13;
+	// check for no-op&#13;
+	if (${childElementName} == null || &#13;
+		!get${ChildCollectionName}().contains(${childElementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate arg&#13;
+	${childElementName}.get${ParentCollectionNameInChild}().remove(this);&#13;
+	get${ChildCollectionName}().remove(${childElementName});&#13;
+	// additional business logic&#13;
+	onRemoveFrom${ChildCollectionName}(${childElementName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection disabling" enabled="true" name="iscdis">public String disable${CollectionName}() {&#13;
+	return ${cursor}null; // TODO: return reason why collection read-only, null if editable&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection hiding" enabled="true" name="ischid">public boolean hide${CollectionName}() {&#13;
+	return ${cursor}false; // TODO: return true if hidden, false otherwise&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (list)" enabled="true" name="iscl">// {{ ${CollectionName} (Collection)&#13;
+${:import(java.util.List,java.util.ArrayList,org.apache.isis.applib.annotation.MemberOrder)}private List&lt;${ElementType}&gt; ${collectionName} = new ArrayList&lt;${ElementType}&gt;();&#13;
+@MemberOrder(sequence="1")&#13;
+public List&lt;${ElementType}&gt; get${CollectionName}() {&#13;
+	return ${collectionName};&#13;
+}&#13;
+public void set${CollectionName}(final List&lt;${ElementType}&gt; ${collectionName}) {&#13;
+	this.${collectionName} = ${collectionName};&#13;
+}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Collection modify" enabled="true" name="iscmod">public void addTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+	// check for no-op&#13;
+	if (${elementName} == null || &#13;
+		get${CollectionName}().contains(${elementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// associate new&#13;
+	get${CollectionName}().add(${elementName});&#13;
+    // additional business logic&#13;
+    onAddTo${CollectionName}(${elementName});&#13;
+}&#13;
+public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+	// check for no-op&#13;
+	if (${elementName} == null || &#13;
+		!get${CollectionName}().contains(${elementName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate existing&#13;
+	get${CollectionName}().remove(${elementName});&#13;
+    // additional business logic&#13;
+    onRemoveFrom${CollectionName}(${elementName});&#13;
+}&#13;
+protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+}&#13;
+protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set)" enabled="true" name="iscs">// {{ ${CollectionName} (Collection)&#13;
+${:import(java.util.Set,java.util.LinkedHashSet,org.apache.isis.applib.annotation.MemberOrder)}private Set&lt;${ElementType}&gt; ${collectionName} = new LinkedHashSet&lt;${ElementType}&gt;();&#13;
+@MemberOrder(sequence="1")&#13;
+public Set&lt;${ElementType}&gt; get${CollectionName}() {&#13;
+	return ${collectionName};&#13;
+}&#13;
+public void set${CollectionName}(final Set&lt;${ElementType}&gt; ${collectionName}) {&#13;
+	this.${collectionName} = ${collectionName};&#13;
+}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Collection validation" enabled="true" name="iscval">public String validateAddTo${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+	return ${cursor}null; // TODO: return reason why argument cannot be added, null if ok to add&#13;
+}&#13;
+public String validateRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {&#13;
+	return null; // TODO: return reason why argument cannot be removed, null if ok to remove&#13;
+}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies region" enabled="true" name="isd">// {{ injected dependencies&#13;
+${cursor}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies - injected service" enabled="true" name="isds">// {{ injected: ${ServiceType}&#13;
+private ${ServiceType} ${serviceType};&#13;
+public void set${ServiceType}(final ${ServiceType} ${serviceType}) {&#13;
+	this.${serviceType} = ${serviceType};&#13;
+}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (persistent)" enabled="true" name="isfp">// {{ Create new (already persisted) ${Type}&#13;
+public ${Type} new${Type}() {&#13;
+	${Type} ${type} = newTransientInstance(${Type}.class);&#13;
+	${cursor}// TODO: set up any properties&#13;
+&#13;
+	persist(${type});&#13;
+	return ${type};&#13;
+}&#13;
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (transient)" enabled="true" name="isft">// {{ Create new (still transient) ${Type}&#13;
+public ${Type} new${InstanceOfType}() {&#13;
+	${Type} ${type} = newTransientInstance(${Type}.class);&#13;
+	${cursor}// TODO: set up any properties&#13;
+&#13;
+	return ${type};&#13;
+}&#13;
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification region" enabled="true" name="isid">// {{ Identification&#13;
+${cursor}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - icon" enabled="true" name="isidicon">public String iconName() {&#13;
+	return ${cursor}null; // TODO: return name of image file (without suffix)&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - title" enabled="true" name="isidtitle">public String title() {&#13;
+    ${:import(org.apache.isis.applib.util.TitleBuffer)}final TitleBuffer buf = new TitleBuffer();&#13;
+    ${cursor}// TODO: append to TitleBuffer, typically value properties&#13;
+	return buf.toString();&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle region" enabled="true" name="isl">// {{ Lifecycle methods&#13;
+${cursor}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - create" enabled="true" name="islc">public void created() {&#13;
+    ${cursor}// TODO: post-create&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - load" enabled="true" name="isll">public void loading() {&#13;
+    ${cursor}// TODO: pre-load&#13;
+}&#13;
+public void loaded() {&#13;
+    // TODO: post-load&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - persist" enabled="true" name="islp">public void persisting() {&#13;
+    ${cursor}// TODO: pre-persist&#13;
+}&#13;
+public void persisted() {&#13;
+    // TODO: post-persist&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - remove" enabled="true" name="islr">public void removing() {&#13;
+    ${cursor}// TODO: pre-remove&#13;
+}&#13;
+public void removed() {&#13;
+    // TODO: post-remove&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - update" enabled="true" name="islu">public void updating() {&#13;
+    ${cursor}// TODO: pre-update&#13;
+}&#13;
+public void updated() {&#13;
+    // TODO: post-update&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property" enabled="true" name="isp">// {{ ${PropertyName} (property)&#13;
+private ${PropertyType} ${propertyName};&#13;
+${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")&#13;
+public ${PropertyType} get${PropertyName}() {&#13;
+	return ${propertyName};&#13;
+}&#13;
+public void set${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
+	this.${propertyName} = ${propertyName};&#13;
+}&#13;
+// }}&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Property (1:1 bidir child)" enabled="true" name="isp-11c">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {&#13;
+    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
+	// check for no-op&#13;
+	if (${parentPropertyName} == null || &#13;
+		${parentPropertyName}.equals(current${ParentPropertyName})) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to associate&#13;
+	${parentPropertyName}.modify${ChildPropertyNameInParent}(this);&#13;
+	// additional business logic&#13;
+	onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});&#13;
+}&#13;
+public void clear${PropertyName}() {&#13;
+    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
+	// check for no-op&#13;
+	if (current${ParentPropertyName} == null) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to dissociate&#13;
+	current${ParentPropertyName}.clear${ChildPropertyNameInParent}();&#13;
+	// additional business logic&#13;
+	onClear${ParentPropertyName}(current${ParentPropertyName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property (1:1 bidir parent)" enabled="true" name="isp-11p">public void modify${ChildPropertyName}(final ${ChildPropertyType} ${childPropertyName}) {&#13;
+    ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();&#13;
+	// check for no-op&#13;
+	if (${childPropertyName} == null || &#13;
+		${childPropertyName}.equals(current${ChildPropertyName})) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate existing&#13;
+	clear${ChildPropertyName}();&#13;
+	// associate new&#13;
+	${childPropertyName}.set${ParentPropertyNameInChild}(this);&#13;
+	set${ChildPropertyName}(${childPropertyName});&#13;
+	// additional business logic&#13;
+	onModify${ChildPropertyName}(current${ChildPropertyName}, ${childPropertyName});&#13;
+}&#13;
+public void clear${ChildPropertyName}() {&#13;
+    ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();&#13;
+	// check for no-op&#13;
+	if (current${ChildPropertyName} == null) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate existing&#13;
+	current${ChildPropertyName}.set${ParentPropertyNameInChild}(null);&#13;
+	set${ChildPropertyName}(null);&#13;
+	// additional business logic&#13;
+	onClear${ChildPropertyName}(current${ChildPropertyName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property (m:1 bidir child)" enabled="true" name="isp-m1">public void modify${ParentPropertyName}(final ${ParentPropertyType} ${parentPropertyName}) {&#13;
+    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
+	// check for no-op&#13;
+	if (${parentPropertyName} == null || &#13;
+		${parentPropertyName}.equals(current${ParentPropertyName})) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to associate&#13;
+	${parentPropertyName}.addTo${ChildCollectionNameInParent}(this);&#13;
+	// additional business logic&#13;
+	onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});&#13;
+}&#13;
+public void clear${ParentPropertyName}() {&#13;
+    ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();&#13;
+	// check for no-op&#13;
+	if (current${ParentPropertyName} == null) {&#13;
+		return;&#13;
+	}&#13;
+	// delegate to parent to dissociate&#13;
+	current${ParentPropertyName}.removeFrom${ChildCollectionNameInParent}(this);&#13;
+	// additional business logic&#13;
+	onClear${ParentPropertyName}(current${ParentPropertyName});&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property choices" enabled="true" name="ispcho">${:import(java.util.List)}public List&lt;${PropertyType}&gt; choices${PropertyName}() {&#13;
+	return ${cursor}null; // TODO: return list of choices for property&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property defaults" enabled="true" name="ispdef">public ${PropertyType} default${PropertyName}() {&#13;
+	return ${cursor}null; // TODO: return default for property when first created&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property disabling" enabled="true" name="ispdis">public String disable${PropertyName}() {&#13;
+	return ${cursor}null; // TODO: return reason why property is disabled, null if editable&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property hiding" enabled="true" name="isphid">public boolean hide${PropertyName}() {&#13;
+	return ${cursor}false; // TODO: return true if hidden, false if visible&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property modify" enabled="true" name="ispmod">public void modify${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
+    ${PropertyType} current${PropertyName} = get${PropertyName}();&#13;
+	// check for no-op&#13;
+	if (${propertyName} == null || &#13;
+		${propertyName}.equals(current${PropertyName})) {&#13;
+		return;&#13;
+	}&#13;
+	// associate new&#13;
+	set${PropertyName}(${propertyName});&#13;
+	// additional business logic&#13;
+	onModify${PropertyName}(current${PropertyName}, ${propertyName});&#13;
+}&#13;
+public void clear${PropertyName}() {&#13;
+    ${PropertyType} current${PropertyName} = get${PropertyName}();&#13;
+	// check for no-op&#13;
+	if (current${PropertyName} == null) {&#13;
+		return;&#13;
+	}&#13;
+	// dissociate existing&#13;
+	set${PropertyName}(null);&#13;
+	// additional business logic&#13;
+	onClear${PropertyName}(current${PropertyName});&#13;
+}&#13;
+protected void onModify${PropertyName}(final ${PropertyType} old${PropertyName}, final ${PropertyType} new${PropertyName}) {&#13;
+}&#13;
+protected void onClear${PropertyName}(final ${PropertyType} old${PropertyName}) {&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property validation" enabled="true" name="ispval">public String validate${PropertyName}(final ${PropertyType} ${propertyName}) {&#13;
+	if (${propertyName} == null) return null;&#13;
+	return ${cursor}null; // TODO: return reason why proposed value is invalid, null if valid&#13;
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Isis Section" enabled="true" name="iss">// {{ ${SectionName}
+${cursor}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all" enabled="true" name="issa">// {{ all ${TypePlural}&#13;
+${:import(org.apache.isis.applib.annotation.Exploration,java.util.List)}@Exploration&#13;
+public List&lt;${Type}&gt; all${TypePlural}() {&#13;
+	return allInstances(${Type}.class);&#13;
+}&#13;
+// }}&#13;
+&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all matching" enabled="true" name="issafil">// {{ all ${TypePlural} that ${filterDescription}&#13;
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
+public List&lt;${Type}&gt; all${TypePlural}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
+	return allMatches(${Type}.class, filter);&#13;
+}&#13;
+// }}&#13;
+&#13;
+&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for first matching" enabled="true" name="issffil">// {{ first ${Type} that ${filterDescription}&#13;
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
+public ${Type} first${Type}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
+	return firstMatch(${Type}.class, filter);&#13;
+}&#13;
+// }}&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for unique matching" enabled="true" name="issufil">// {{ unique ${Type} that ${filterDescription}&#13;
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration&#13;
+public ${Type} unique${Type}Matching(final Filter&lt;${Type}&gt; filter) {&#13;
+	return uniqueMatch(${Type}.class, filter);&#13;
+}&#13;
+// }}&#13;
+</template><template autoinsert="true" context="java-members" deleted="false" description="Object-level validation" enabled="true" name="isval">public String validate() {&#13;
+    ${cursor}// TODO: return reason why object is in invalid state (and so cannot be saved/updated), or null if ok&#13;
 }</template></templates>
\ No newline at end of file