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)
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
-public ${ReturnType} ${actionName}(final ${ParameterType} ${parameterType}) {
- return ${cursor}null; // TODO: business logic here
-}
-// }}
-
-</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<${ParameterType}> autoComplete${ParameterNumThenCapitalizedActionName}(final String searchArg) {
- return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N, based on the provided search argument
-}</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<${ParameterType}> choices${ParameterNumThenCapitalizedActionName}() {
- return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument defaults" enabled="true" name="isadef">public ${ParameterType} default${ParameterNumThenCapitalizedActionName}() {
- return ${cursor}null; // TODO: return default for argument N
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action disabling" enabled="true" name="isadis">public String disable${ActionName}() {
- return ${cursor}null; // TODO: return reason why action disabled, null if enabled
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action hiding" enabled="true" name="isahid">public boolean hide${ActionName}() {
- return ${cursor}false; // TODO: return true if action is hidden, false if visible
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Action validation" enabled="true" name="isaval">public String validate${ActionName}(final ${ParameterType} ${parameterType}) {
- return ${cursor}null; // TODO: return reason why action arguments are invalid, null if ok
-}</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}) {
- // check for no-op
- if (${childElementName} == null ||
- get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg from its current parent (if any).
- ${childElementName}.clear${ParentPropertyNameInChild}();
- // associate arg
- ${childElementName}.set${ParentPropertyNameInChild}(this);
- get${ChildCollectionName}().add(${childElementName});
- // additional business logic
- onAddTo${ChildCollectionName}(${childElementName});
-}
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- !get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg
- ${childElementName}.set${ParentPropertyNameInChild}(null);
- get${ChildCollectionName}().remove(${childElementName});
- // additional business logic
- onRemoveFrom${ChildCollectionName}(${childElementName});
-}</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}) {
- // check for no-op
- if (${parentElementName} == null ||
- get${ParentCollectionName}().contains(${parentElementName})) {
- return;
- }
- // delegate to parent to add
- ${parentElementName}.addTo${ChildCollectionNameInParent}(this);
- // additional business logic
- onAddTo${ParentCollectionName}(${parentElementName});
-}
-public void removeFrom${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {
- // check for no-op
- if (${parentElementName} == null ||
- !get${ParentCollectionName}().contains(${parentElementName})) {
- return;
- }
- // delegate to parent to remove
- ${parentElementName}.removeFrom${ChildCollectionNameInParent}(this);
- // additional business logic
- onRemoveFrom${ParentCollectionName}(${parentElementName});
-}</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}) {
- // check for no-op
- if (${childElementName} == null ||
- get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg from its current parent (if any).
- ${childElementName}.removeFrom${ParentCollectionNameInChild}(this);
- // associate arg
- ${childElementName}.get${ParentCollectionNameInChild}().add(this);
- get${ChildCollectionName}().add(${childElementName});
- // additional business logic
- onAddTo${ChildCollectionName}(${childElementName});
-}
-public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
- // check for no-op
- if (${childElementName} == null ||
- !get${ChildCollectionName}().contains(${childElementName})) {
- return;
- }
- // dissociate arg
- ${childElementName}.get${ParentCollectionNameInChild}().remove(this);
- get${ChildCollectionName}().remove(${childElementName});
- // additional business logic
- onRemoveFrom${ChildCollectionName}(${childElementName});
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection disabling" enabled="true" name="iscdis">public String disable${CollectionName}() {
- return ${cursor}null; // TODO: return reason why collection read-only, null if editable
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection hiding" enabled="true" name="ischid">public boolean hide${CollectionName}() {
- return ${cursor}false; // TODO: return true if hidden, false otherwise
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (list)" enabled="true" name="iscl">// {{ ${CollectionName} (Collection)
-${:import(java.util.List,java.util.ArrayList,org.apache.isis.applib.annotation.MemberOrder)}private List<${ElementType}> ${collectionName} = new ArrayList<${ElementType}>();
-@MemberOrder(sequence="1")
-public List<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final List<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Collection modify" enabled="true" name="iscmod">public void addTo${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- get${CollectionName}().contains(${elementName})) {
- return;
- }
- // associate new
- get${CollectionName}().add(${elementName});
- // additional business logic
- onAddTo${CollectionName}(${elementName});
-}
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- !get${CollectionName}().contains(${elementName})) {
- return;
- }
- // dissociate existing
- get${CollectionName}().remove(${elementName});
- // additional business logic
- onRemoveFrom${CollectionName}(${elementName});
-}
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {
-}
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
-}</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.
-@MemberOrder(name="${collectionName}", sequence="1")
-public ${enclosing_type} insertInto${CollectionName}(final ${ElementType} ${elementName}) {
- addTo${CollectionName}(${elementName});
- return this;
-}
-
-// Programming model.
-public void addTo${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- get${CollectionName}().contains(${elementName})) {
- return;
- }
- // associate new
- get${CollectionName}().add(${elementName});
- // additional business logic
- onAddTo${CollectionName}(${elementName});
-}
-
-// Action.
-@MemberOrder(name="${collectionName}", sequence="2")
-public ${enclosing_type} deleteFrom${CollectionName}(final ${ElementType} ${elementName}) {
- removeFrom${CollectionName}(${elementName});
- return this;
-}
-
-// Programming model.
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- !get${CollectionName}().contains(${elementName})) {
- return;
- }
- // dissociate existing
- get${CollectionName}().remove(${elementName});
- // additional business logic
- onRemoveFrom${CollectionName}(${elementName});
-}
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {
-}
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set)" enabled="true" name="iscs">// {{ ${CollectionName} (Collection)
-${:import(java.util.Set,java.util.LinkedHashSet,org.apache.isis.applib.annotation.MemberOrder)}private Set<${ElementType}> ${collectionName} = new LinkedHashSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public Set<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final Set<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set-sorted)" enabled="true" name="iscss">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder)}private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set-sorted-with actions)" enabled="true" name="iscssa">// {{ ${CollectionName} (Collection)
-${:import(java.util.SortedSet,java.util.TreeSet,org.apache.isis.applib.annotation.MemberOrder)}private SortedSet<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
-@MemberOrder(sequence="1")
-public SortedSet<${ElementType}> get${CollectionName}() {
- return ${collectionName};
-}
-public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
- this.${collectionName} = ${collectionName};
-}
-
-@MemberOrder(name="${collectionName}", sequence="1")
-public ${enclosing_type} insertInto${CollectionName}(final ${ElementType} ${elementName}) {
- addTo${CollectionName}(${elementName});
- return this;
-}
-
-// Programming model.
-public void addTo${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- get${CollectionName}().contains(${elementName})) {
- return;
- }
- // associate new
- get${CollectionName}().add(${elementName});
- // additional business logic
- onAddTo${CollectionName}(${elementName});
-}
-
-// Action.
-@MemberOrder(name="${collectionName}", sequence="2")
-public ${enclosing_type} deleteFrom${CollectionName}(final ${ElementType} ${elementName}) {
- removeFrom${CollectionName}(${elementName});
- return this;
-}
-
-// Programming model.
-public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {
- // check for no-op
- if (${elementName} == null ||
- !get${CollectionName}().contains(${elementName})) {
- return;
- }
- // dissociate existing
- get${CollectionName}().remove(${elementName});
- // additional business logic
- onRemoveFrom${CollectionName}(${elementName});
-}
-protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {
-}
-protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
-}
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection validation" enabled="true" name="iscval">public String validateAddTo${CollectionName}(final ${ElementType} ${elementName}) {
- return ${cursor}null; // TODO: return reason why argument cannot be added, null if ok to add
-}
-public String validateRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
- return null; // TODO: return reason why argument cannot be removed, null if ok to remove
-}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies region" enabled="true" name="isd">// {{ injected dependencies
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies - injected service" enabled="true" name="isds">// {{ injected: ${ServiceType}
-private ${ServiceType} ${serviceType};
-public void set${ServiceType}(final ${ServiceType} ${serviceType}) {
- this.${serviceType} = ${serviceType};
-}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (persistent)" enabled="true" name="isfp">// {{ Create new (already persisted) ${Type}
-public ${Type} new${Type}() {
- ${Type} ${type} = newTransientInstance(${Type}.class);
- ${cursor}// TODO: set up any properties
-
- persist(${type});
- return ${type};
-}
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (transient)" enabled="true" name="isft">// {{ Create new (still transient) ${Type}
-public ${Type} new${InstanceOfType}() {
- ${Type} ${type} = newTransientInstance(${Type}.class);
- ${cursor}// TODO: set up any properties
-
- return ${type};
-}
-// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification region" enabled="true" name="isid">// {{ Identification
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - icon" enabled="true" name="isidicon">public String iconName() {
- return ${cursor}null; // TODO: return name of image file (without suffix)
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - title" enabled="true" name="isidtitle">public String title() {
- ${:import(org.apache.isis.applib.util.TitleBuffer)}final TitleBuffer buf = new TitleBuffer();
- ${cursor}// TODO: append to TitleBuffer, typically value properties
- return buf.toString();
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle region" enabled="true" name="isl">// {{ Lifecycle methods
-${cursor}
-// }}
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - create" enabled="true" name="islc">public void created() {
- ${cursor}// TODO: post-create
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - load" enabled="true" name="isll">public void loading() {
- ${cursor}// TODO: pre-load
-}
-public void loaded() {
- // TODO: post-load
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - persist" enabled="true" name="islp">public void persisting() {
- ${cursor}// TODO: pre-persist
-}
-public void persisted() {
- // TODO: post-persist
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - remove" enabled="true" name="islr">public void removing() {
- ${cursor}// TODO: pre-remove
-}
-public void removed() {
- // TODO: post-remove
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - update" enabled="true" name="islu">public void updating() {
- ${cursor}// TODO: pre-update
-}
-public void updated() {
- // TODO: post-update
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property" enabled="true" name="isp">// {{ ${PropertyName} (property)
-private ${PropertyType} ${propertyName};
-${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
-public ${PropertyType} get${PropertyName}() {
- return ${propertyName};
-}
-public void set${PropertyName}(final ${PropertyType} ${propertyName}) {
- this.${propertyName} = ${propertyName};
-}
-// }}
-
-</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}) {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (${parentPropertyName} == null ||
- ${parentPropertyName}.equals(current${ParentPropertyName})) {
- return;
- }
- // delegate to parent(s) to (re-)associate
- if(current${ParentPropertyName}!=null) {
- current${ParentPropertyName}.clear${ChildPropertyNameInParent}();
- }
- ${parentPropertyName}.modify${ChildPropertyNameInParent}(this);
- // additional business logic
- onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
-}
-public void clear${ParentPropertyName}() {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (current${ParentPropertyName} == null) {
- return;
- }
- // delegate to parent to dissociate
- current${ParentPropertyName}.clear${ChildPropertyNameInParent}();
- // additional business logic
- onClear${ParentPropertyName}(current${ParentPropertyName});
-}</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}) {
- ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
- // check for no-op
- if (${childPropertyName} == null ||
- ${childPropertyName}.equals(current${ChildPropertyName})) {
- return;
- }
- // dissociate existing
- clear${ChildPropertyName}();
- // associate new
- ${childPropertyName}.set${ParentPropertyNameInChild}(this);
- set${ChildPropertyName}(${childPropertyName});
- // additional business logic
- onModify${ChildPropertyName}(current${ChildPropertyName}, ${childPropertyName});
-}
-public void clear${ChildPropertyName}() {
- ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
- // check for no-op
- if (current${ChildPropertyName} == null) {
- return;
- }
- // dissociate existing
- current${ChildPropertyName}.set${ParentPropertyNameInChild}(null);
- set${ChildPropertyName}(null);
- // additional business logic
- onClear${ChildPropertyName}(current${ChildPropertyName});
-}</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}) {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (${parentPropertyName} == null ||
- ${parentPropertyName}.equals(current${ParentPropertyName})) {
- return;
- }
- // delegate to parent to associate
- ${parentPropertyName}.addTo${ChildCollectionNameInParent}(this);
- // additional business logic
- onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
-}
-public void clear${ParentPropertyName}() {
- ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
- // check for no-op
- if (current${ParentPropertyName} == null) {
- return;
- }
- // delegate to parent to dissociate
- current${ParentPropertyName}.removeFrom${ChildCollectionNameInParent}(this);
- // additional business logic
- onClear${ParentPropertyName}(current${ParentPropertyName});
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property autocomplete" enabled="true" name="ispauto">${:import(java.util.List)}public List<${PropertyType}> autoComplete${PropertyName}(final String searchArg) {
- return ${cursor}null; // TODO: return list of choices for property based on the provided search argument
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property choices" enabled="true" name="ispcho">${:import(java.util.List)}public List<${PropertyType}> choices${PropertyName}() {
- return ${cursor}null; // TODO: return list of choices for property
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property defaults" enabled="true" name="ispdef">public ${PropertyType} default${PropertyName}() {
- return ${cursor}null; // TODO: return default for property when first created
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property disabling" enabled="true" name="ispdis">public String disable${PropertyName}() {
- return ${cursor}null; // TODO: return reason why property is disabled, null if editable
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property hiding" enabled="true" name="isphid">public boolean hide${PropertyName}() {
- return ${cursor}false; // TODO: return true if hidden, false if visible
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property modify" enabled="true" name="ispmod">public void modify${PropertyName}(final ${PropertyType} ${propertyName}) {
- ${PropertyType} current${PropertyName} = get${PropertyName}();
- // check for no-op
- if (${propertyName} == null ||
- ${propertyName}.equals(current${PropertyName})) {
- return;
- }
- // associate new
- set${PropertyName}(${propertyName});
- // additional business logic
- onModify${PropertyName}(current${PropertyName}, ${propertyName});
-}
-public void clear${PropertyName}() {
- ${PropertyType} current${PropertyName} = get${PropertyName}();
- // check for no-op
- if (current${PropertyName} == null) {
- return;
- }
- // dissociate existing
- set${PropertyName}(null);
- // additional business logic
- onClear${PropertyName}(current${PropertyName});
-}
-protected void onModify${PropertyName}(final ${PropertyType} old${PropertyName}, final ${PropertyType} new${PropertyName}) {
-}
-protected void onClear${PropertyName}(final ${PropertyType} old${PropertyName}) {
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Property validation" enabled="true" name="ispval">public String validate${PropertyName}(final ${PropertyType} ${propertyName}) {
- if (${propertyName} == null) return null;
- return ${cursor}null; // TODO: return reason why proposed value is invalid, null if valid
-}</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all" enabled="true" name="issa">// {{ all ${TypePlural}
-${:import(org.apache.isis.applib.annotation.Exploration,java.util.List)}@Exploration
-public List<${Type}> all${TypePlural}() {
- return allInstances(${Type}.class);
-}
-// }}
-
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all matching" enabled="true" name="issafil">// {{ all ${TypePlural} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public List<${Type}> all${TypePlural}Matching(final Filter<${Type}> filter) {
- return allMatches(${Type}.class, filter);
-}
-// }}
-
-
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for first matching" enabled="true" name="issffil">// {{ first ${Type} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public ${Type} first${Type}Matching(final Filter<${Type}> filter) {
- return firstMatch(${Type}.class, filter);
-}
-// }}
-</template><template autoinsert="true" context="java-members" deleted="false" description="Search for unique matching" enabled="true" name="issufil">// {{ unique ${Type} that ${filterDescription}
-${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
-public ${Type} unique${Type}Matching(final Filter<${Type}> filter) {
- return uniqueMatch(${Type}.class, filter);
-}
-// }}
-</template><template autoinsert="true" context="java-members" deleted="false" description="Object-level validation" enabled="true" name="isval">public String validate() {
- ${cursor}// TODO: return reason why object is in invalid state (and so cannot be saved/updated), or null if ok
+<?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)
+${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
+public ${ReturnType} ${actionName}(final ${ParameterType} ${parameterType}) {
+ return ${cursor}null; // TODO: business logic here
+}
+// }}
+
+</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<${ParameterType}> choices${ParameterNumThenCapitalizedActionName}() {
+ return ${cursor}Collections.emptyList(); // TODO: return list of choices for argument N
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action argument defaults" enabled="true" name="isadef">public ${ParameterType} default${ParameterNumThenCapitalizedActionName}() {
+ return ${cursor}null; // TODO: return default for argument N
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action disabling" enabled="true" name="isadis">public String disable${ActionName}() {
+ return ${cursor}null; // TODO: return reason why action disabled, null if enabled
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action hiding" enabled="true" name="isahid">public boolean hide${ActionName}() {
+ return ${cursor}false; // TODO: return true if action is hidden, false if visible
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Action validation" enabled="true" name="isaval">public String validate${ActionName}(final ${ParameterType} ${parameterType}) {
+ return ${cursor}null; // TODO: return reason why action arguments are invalid, null if ok
+}</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}) {
+ // check for no-op
+ if (${childElementName} == null ||
+ get${ChildCollectionName}().contains(${childElementName})) {
+ return;
+ }
+ // dissociate arg from its current parent (if any).
+ ${childElementName}.clear${ParentPropertyNameInChild}();
+ // associate arg
+ ${childElementName}.set${ParentPropertyNameInChild}(this);
+ get${ChildCollectionName}().add(${childElementName});
+ // additional business logic
+ onAddTo${ChildCollectionName}(${childElementName});
+}
+public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
+ // check for no-op
+ if (${childElementName} == null ||
+ !get${ChildCollectionName}().contains(${childElementName})) {
+ return;
+ }
+ // dissociate arg
+ ${childElementName}.set${ParentPropertyNameInChild}(null);
+ get${ChildCollectionName}().remove(${childElementName});
+ // additional business logic
+ onRemoveFrom${ChildCollectionName}(${childElementName});
+}</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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
+@MemberOrder(sequence="1")
+public SortedSet<${ElementType}> get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
+@MemberOrder(sequence="1")
+public SortedSet<${ElementType}> get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
+@MemberOrder(sequence="1")
+public SortedSet<${ElementType}> get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
+@MemberOrder(sequence="1")
+public SortedSet<${ElementType}> get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();
+public SortedSet<${ElementType}> get${CollectionName}() {
+return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${collectionName}) {
+this.${collectionName} = ${collectionName};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="JDO Collection (set - m:n unidir & 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<${ElementType}> ${collectionName} = new TreeSet<${ElementType}>();@MemberOrder(sequence="1")
+
+public SortedSet<${ElementType}> get${CollectionName}() {
+ return ${collectionName};
+}
+public void set${CollectionName}(final SortedSet<${ElementType}> ${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}) {
+ // check for no-op
+ if (${parentElementName} == null ||
+ get${ParentCollectionName}().contains(${parentElementName})) {
+ return;
+ }
+ // delegate to parent to add
+ ${parentElementName}.addTo${ChildCollectionNameInParent}(this);
+ // additional business logic
+ onAddTo${ParentCollectionName}(${parentElementName});
+}
+public void removeFrom${ParentCollectionName}(final ${ParentElementType} ${parentElementName}) {
+ // check for no-op
+ if (${parentElementName} == null ||
+ !get${ParentCollectionName}().contains(${parentElementName})) {
+ return;
+ }
+ // delegate to parent to remove
+ ${parentElementName}.removeFrom${ChildCollectionNameInParent}(this);
+ // additional business logic
+ onRemoveFrom${ParentCollectionName}(${parentElementName});
+}</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}) {
+ // check for no-op
+ if (${childElementName} == null ||
+ get${ChildCollectionName}().contains(${childElementName})) {
+ return;
+ }
+ // dissociate arg from its current parent (if any).
+ ${childElementName}.removeFrom${ParentCollectionNameInChild}(this);
+ // associate arg
+ ${childElementName}.get${ParentCollectionNameInChild}().add(this);
+ get${ChildCollectionName}().add(${childElementName});
+ // additional business logic
+ onAddTo${ChildCollectionName}(${childElementName});
+}
+public void removeFrom${ChildCollectionName}(final ${ChildElementType} ${childElementName}) {
+ // check for no-op
+ if (${childElementName} == null ||
+ !get${ChildCollectionName}().contains(${childElementName})) {
+ return;
+ }
+ // dissociate arg
+ ${childElementName}.get${ParentCollectionNameInChild}().remove(this);
+ get${ChildCollectionName}().remove(${childElementName});
+ // additional business logic
+ onRemoveFrom${ChildCollectionName}(${childElementName});
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection disabling" enabled="true" name="iscdis">public String disable${CollectionName}() {
+ return ${cursor}null; // TODO: return reason why collection read-only, null if editable
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection hiding" enabled="true" name="ischid">public boolean hide${CollectionName}() {
+ return ${cursor}false; // TODO: return true if hidden, false otherwise
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (list)" enabled="true" name="iscl">// {{ ${CollectionName} (Collection)
+${:import(java.util.List,java.util.ArrayList,org.apache.isis.applib.annotation.MemberOrder)}private List<${ElementType}> ${collectionName} = new ArrayList<${ElementType}>();
+@MemberOrder(sequence="1")
+public List<${ElementType}> get${CollectionName}() {
+ return ${collectionName};
+}
+public void set${CollectionName}(final List<${ElementType}> ${collectionName}) {
+ this.${collectionName} = ${collectionName};
+}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Collection modify" enabled="true" name="iscmod">public void addTo${CollectionName}(final ${ElementType} ${elementName}) {
+ // check for no-op
+ if (${elementName} == null ||
+ get${CollectionName}().contains(${elementName})) {
+ return;
+ }
+ // associate new
+ get${CollectionName}().add(${elementName});
+ // additional business logic
+ onAddTo${CollectionName}(${elementName});
+}
+public void removeFrom${CollectionName}(final ${ElementType} ${elementName}) {
+ // check for no-op
+ if (${elementName} == null ||
+ !get${CollectionName}().contains(${elementName})) {
+ return;
+ }
+ // dissociate existing
+ get${CollectionName}().remove(${elementName});
+ // additional business logic
+ onRemoveFrom${CollectionName}(${elementName});
+}
+protected void onAddTo${CollectionName}(final ${ElementType} ${elementName}) {
+}
+protected void onRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Collection (set)" enabled="true" name="iscs">// {{ ${CollectionName} (Collection)
+${:import(java.util.Set,java.util.LinkedHashSet,org.apache.isis.applib.annotation.MemberOrder)}private Set<${ElementType}> ${collectionName} = new LinkedHashSet<${ElementType}>();
+@MemberOrder(sequence="1")
+public Set<${ElementType}> get${CollectionName}() {
+ return ${collectionName};
+}
+public void set${CollectionName}(final Set<${ElementType}> ${collectionName}) {
+ this.${collectionName} = ${collectionName};
+}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Collection validation" enabled="true" name="iscval">public String validateAddTo${CollectionName}(final ${ElementType} ${elementName}) {
+ return ${cursor}null; // TODO: return reason why argument cannot be added, null if ok to add
+}
+public String validateRemoveFrom${CollectionName}(final ${ElementType} ${elementName}) {
+ return null; // TODO: return reason why argument cannot be removed, null if ok to remove
+}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies region" enabled="true" name="isd">// {{ injected dependencies
+${cursor}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Dependencies - injected service" enabled="true" name="isds">// {{ injected: ${ServiceType}
+private ${ServiceType} ${serviceType};
+public void set${ServiceType}(final ${ServiceType} ${serviceType}) {
+ this.${serviceType} = ${serviceType};
+}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (persistent)" enabled="true" name="isfp">// {{ Create new (already persisted) ${Type}
+public ${Type} new${Type}() {
+ ${Type} ${type} = newTransientInstance(${Type}.class);
+ ${cursor}// TODO: set up any properties
+
+ persist(${type});
+ return ${type};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Factory - new instance (transient)" enabled="true" name="isft">// {{ Create new (still transient) ${Type}
+public ${Type} new${InstanceOfType}() {
+ ${Type} ${type} = newTransientInstance(${Type}.class);
+ ${cursor}// TODO: set up any properties
+
+ return ${type};
+}
+// }}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification region" enabled="true" name="isid">// {{ Identification
+${cursor}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - icon" enabled="true" name="isidicon">public String iconName() {
+ return ${cursor}null; // TODO: return name of image file (without suffix)
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Identification - title" enabled="true" name="isidtitle">public String title() {
+ ${:import(org.apache.isis.applib.util.TitleBuffer)}final TitleBuffer buf = new TitleBuffer();
+ ${cursor}// TODO: append to TitleBuffer, typically value properties
+ return buf.toString();
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle region" enabled="true" name="isl">// {{ Lifecycle methods
+${cursor}
+// }}
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - create" enabled="true" name="islc">public void created() {
+ ${cursor}// TODO: post-create
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - load" enabled="true" name="isll">public void loading() {
+ ${cursor}// TODO: pre-load
+}
+public void loaded() {
+ // TODO: post-load
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - persist" enabled="true" name="islp">public void persisting() {
+ ${cursor}// TODO: pre-persist
+}
+public void persisted() {
+ // TODO: post-persist
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - remove" enabled="true" name="islr">public void removing() {
+ ${cursor}// TODO: pre-remove
+}
+public void removed() {
+ // TODO: post-remove
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Lifecycle - update" enabled="true" name="islu">public void updating() {
+ ${cursor}// TODO: pre-update
+}
+public void updated() {
+ // TODO: post-update
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property" enabled="true" name="isp">// {{ ${PropertyName} (property)
+private ${PropertyType} ${propertyName};
+${:import(org.apache.isis.applib.annotation.MemberOrder)}@MemberOrder(sequence="1")
+public ${PropertyType} get${PropertyName}() {
+ return ${propertyName};
+}
+public void set${PropertyName}(final ${PropertyType} ${propertyName}) {
+ this.${propertyName} = ${propertyName};
+}
+// }}
+
+</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}) {
+ ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
+ // check for no-op
+ if (${parentPropertyName} == null ||
+ ${parentPropertyName}.equals(current${ParentPropertyName})) {
+ return;
+ }
+ // delegate to parent to associate
+ ${parentPropertyName}.modify${ChildPropertyNameInParent}(this);
+ // additional business logic
+ onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
+}
+public void clear${PropertyName}() {
+ ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
+ // check for no-op
+ if (current${ParentPropertyName} == null) {
+ return;
+ }
+ // delegate to parent to dissociate
+ current${ParentPropertyName}.clear${ChildPropertyNameInParent}();
+ // additional business logic
+ onClear${ParentPropertyName}(current${ParentPropertyName});
+}</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}) {
+ ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
+ // check for no-op
+ if (${childPropertyName} == null ||
+ ${childPropertyName}.equals(current${ChildPropertyName})) {
+ return;
+ }
+ // dissociate existing
+ clear${ChildPropertyName}();
+ // associate new
+ ${childPropertyName}.set${ParentPropertyNameInChild}(this);
+ set${ChildPropertyName}(${childPropertyName});
+ // additional business logic
+ onModify${ChildPropertyName}(current${ChildPropertyName}, ${childPropertyName});
+}
+public void clear${ChildPropertyName}() {
+ ${ChildPropertyType} current${ChildPropertyName} = get${ChildPropertyName}();
+ // check for no-op
+ if (current${ChildPropertyName} == null) {
+ return;
+ }
+ // dissociate existing
+ current${ChildPropertyName}.set${ParentPropertyNameInChild}(null);
+ set${ChildPropertyName}(null);
+ // additional business logic
+ onClear${ChildPropertyName}(current${ChildPropertyName});
+}</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}) {
+ ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
+ // check for no-op
+ if (${parentPropertyName} == null ||
+ ${parentPropertyName}.equals(current${ParentPropertyName})) {
+ return;
+ }
+ // delegate to parent to associate
+ ${parentPropertyName}.addTo${ChildCollectionNameInParent}(this);
+ // additional business logic
+ onModify${ParentPropertyName}(current${ParentPropertyName}, ${parentPropertyName});
+}
+public void clear${ParentPropertyName}() {
+ ${ParentPropertyType} current${ParentPropertyName} = get${ParentPropertyName}();
+ // check for no-op
+ if (current${ParentPropertyName} == null) {
+ return;
+ }
+ // delegate to parent to dissociate
+ current${ParentPropertyName}.removeFrom${ChildCollectionNameInParent}(this);
+ // additional business logic
+ onClear${ParentPropertyName}(current${ParentPropertyName});
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property choices" enabled="true" name="ispcho">${:import(java.util.List)}public List<${PropertyType}> choices${PropertyName}() {
+ return ${cursor}null; // TODO: return list of choices for property
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property defaults" enabled="true" name="ispdef">public ${PropertyType} default${PropertyName}() {
+ return ${cursor}null; // TODO: return default for property when first created
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property disabling" enabled="true" name="ispdis">public String disable${PropertyName}() {
+ return ${cursor}null; // TODO: return reason why property is disabled, null if editable
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property hiding" enabled="true" name="isphid">public boolean hide${PropertyName}() {
+ return ${cursor}false; // TODO: return true if hidden, false if visible
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property modify" enabled="true" name="ispmod">public void modify${PropertyName}(final ${PropertyType} ${propertyName}) {
+ ${PropertyType} current${PropertyName} = get${PropertyName}();
+ // check for no-op
+ if (${propertyName} == null ||
+ ${propertyName}.equals(current${PropertyName})) {
+ return;
+ }
+ // associate new
+ set${PropertyName}(${propertyName});
+ // additional business logic
+ onModify${PropertyName}(current${PropertyName}, ${propertyName});
+}
+public void clear${PropertyName}() {
+ ${PropertyType} current${PropertyName} = get${PropertyName}();
+ // check for no-op
+ if (current${PropertyName} == null) {
+ return;
+ }
+ // dissociate existing
+ set${PropertyName}(null);
+ // additional business logic
+ onClear${PropertyName}(current${PropertyName});
+}
+protected void onModify${PropertyName}(final ${PropertyType} old${PropertyName}, final ${PropertyType} new${PropertyName}) {
+}
+protected void onClear${PropertyName}(final ${PropertyType} old${PropertyName}) {
+}</template><template autoinsert="true" context="java-members" deleted="false" description="Property validation" enabled="true" name="ispval">public String validate${PropertyName}(final ${PropertyType} ${propertyName}) {
+ if (${propertyName} == null) return null;
+ return ${cursor}null; // TODO: return reason why proposed value is invalid, null if valid
+}</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}
+${:import(org.apache.isis.applib.annotation.Exploration,java.util.List)}@Exploration
+public List<${Type}> all${TypePlural}() {
+ return allInstances(${Type}.class);
+}
+// }}
+
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for all matching" enabled="true" name="issafil">// {{ all ${TypePlural} that ${filterDescription}
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
+public List<${Type}> all${TypePlural}Matching(final Filter<${Type}> filter) {
+ return allMatches(${Type}.class, filter);
+}
+// }}
+
+
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for first matching" enabled="true" name="issffil">// {{ first ${Type} that ${filterDescription}
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
+public ${Type} first${Type}Matching(final Filter<${Type}> filter) {
+ return firstMatch(${Type}.class, filter);
+}
+// }}
+</template><template autoinsert="true" context="java-members" deleted="false" description="Search for unique matching" enabled="true" name="issufil">// {{ unique ${Type} that ${filterDescription}
+${:import(org.apache.isis.applib.annotation.Exploration,org.apache.isis.applib.Filter,java.util.List)}@Exploration
+public ${Type} unique${Type}Matching(final Filter<${Type}> filter) {
+ return uniqueMatch(${Type}.class, filter);
+}
+// }}
+</template><template autoinsert="true" context="java-members" deleted="false" description="Object-level validation" enabled="true" name="isval">public String validate() {
+ ${cursor}// TODO: return reason why object is in invalid state (and so cannot be saved/updated), or null if ok
}</template></templates>
\ No newline at end of file