You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/03/31 07:57:11 UTC

[causeway] 02/02: CAUSEWAY-2485: reworks @Action#domainEvent

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit a662db00a8b9f6511a81b988f4a6ce9d26ef63fe
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Mar 31 08:56:33 2023 +0100

    CAUSEWAY-2485: reworks @Action#domainEvent
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |  2 -
 .../ActionDomainEventControlStrategy.java          |  2 -
 .../ActionDomainEventPage-description.adoc         |  4 --
 ...ctionDomainEventPage_changeControlStrategy.java | 13 ++--
 .../CollectionDomainEventVm-description.adoc       |  4 --
 .../xxxDomainEvent/DomainObjectXxxDomainEvent.java | 45 ------------
 .../DomainObjectXxxDomainEvent.layout.xml          | 81 ----------------------
 .../DomainObjectXxxDomainEventPage_objects.java    | 29 --------
 .../DomainObjectXxxDomainEventJpa-description.adoc | 11 ---
 .../jpa/DomainObjectXxxDomainEventJpa.java         | 64 -----------------
 .../jpa/DomainObjectXxxDomainEventJpaEntities.java | 40 -----------
 .../PropertyDomainEventPage-description.adoc       |  4 --
 12 files changed, 6 insertions(+), 293 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index 36bcc11844..d0cd3cee84 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -30,7 +30,6 @@ import demoapp.dom.domain.objects.DomainObject.introspection.annotReqd.jpa.Domai
 import demoapp.dom.domain.objects.DomainObject.introspection.encapsulated.jpa.DomainObjectIntrospectionEncapsulatedJpa;
 import demoapp.dom.domain.objects.DomainObject.mixinMethod.jpa.DomainObjectMixinMethodJpa;
 import demoapp.dom.domain.objects.DomainObject.nature.entity.jpa.DomainObjectNatureJpa;
-import demoapp.dom.domain.objects.DomainObject.xxxDomainEvent.jpa.DomainObjectXxxDomainEventJpa;
 import demoapp.dom.domain.objects.DomainObject.xxxLifecycleEvent.jpa.DomainObjectXxxLifecycleEventJpa;
 import demoapp.dom.domain.objects.other.embedded.jpa.NumberConstantJpa;
 import demoapp.dom.domain.properties.Property.commandPublishing.jpa.PropertyCommandPublishingJpa;
@@ -106,7 +105,6 @@ import org.springframework.context.annotation.Profile;
         DomainObjectIntrospectionAnnotReqdJpa.class,
         DomainObjectIntrospectionEncapsulatedJpa.class,
         DomainObjectMixinMethodJpa.class,
-        DomainObjectXxxDomainEventJpa.class,
         DomainObjectXxxLifecycleEventJpa.class,
 
         CausewayBlobJpa.class,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventControlStrategy.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventControlStrategy.java
index 6317a893e6..1c8f49c78d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventControlStrategy.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventControlStrategy.java
@@ -56,7 +56,6 @@ enum ActionDomainEventControlStrategy {
                     ev.disable("ControlStrategy set to DISABLE");
                     break;
             }
-
         }
     },
 // end::disable[]
@@ -79,7 +78,6 @@ enum ActionDomainEventControlStrategy {
     EXECUTING_FORCE_UPPER_CASE{
         @Override
         void on(ActionDomainEvent<?> ev, ServiceRegistry serviceRegistry) {
-
             switch (ev.getEventPhase()) {
                 case EXECUTING:
                     List<Object> arguments = ev.getArguments();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage-description.adoc
index e2714d225f..b4866da1a1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage-description.adoc
@@ -15,10 +15,6 @@ The `domainEvent` element specifies the class to be emitted; this must be a subc
 If no `domainEvent` is specified on the action itself, then the domain event class can be specified at the class level using link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/DomainObject.html#actiondomainevent[@DomainObject#actionDomainEvent].
 And if not specified at the class level, then an instance of `o.a.c.applib.events.domain.ActionDomainEvent.Default` is emitted as the fallback.
 
-[TIP]
-====
-The fallback domain event can be suppressed using the `causeway.applib.annotation.action.domain-event.post-for-default` configuration property.
-====
 
 === How this demo works
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage_changeControlStrategy.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage_changeControlStrategy.java
index a5e8d5a10a..f3836ba2b4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage_changeControlStrategy.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventPage_changeControlStrategy.java
@@ -32,17 +32,16 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor
 public class ActionDomainEventPage_changeControlStrategy {
 
-    private final ActionDomainEventPage actionDomainEventVm;
+    private final ActionDomainEventPage mixee;
 
-    @MemberSupport public ActionDomainEventPage act(final ActionDomainEventControlStrategy controlStrategy) {
-        eventActionDomainEventControlService.controlStrategy = controlStrategy;
-        return actionDomainEventVm;
+    @MemberSupport public ActionDomainEventPage act(ActionDomainEventControlStrategy controlStrategy) {
+        subscriber.controlStrategy = controlStrategy;
+        return mixee;
     }
     @MemberSupport public ActionDomainEventControlStrategy default0Act() {
-        return eventActionDomainEventControlService.controlStrategy;
+        return subscriber.controlStrategy;
     }
 
-    @Inject
-    ActionDomainEventControlSubscriber eventActionDomainEventControlService;
+    @Inject ActionDomainEventControlSubscriber subscriber;
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm-description.adoc
index 16ea3c7810..2a0b6a4011 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm-description.adoc
@@ -13,10 +13,6 @@ If no `domainEvent` is specified on the property itself, then the domain event c
 
 And if not specified at the class level, then an instance of `org.apache.causeway.applib.events.domain.CollectionDomainEvent.Default` is emitted as the fallback.
 
-[TIP]
-====
-The fallback domain event can be suppressed using the `causeway.applib.annotation.collection.domain-event.post-for-default` configuration property.
-====
 
 
 == Annotated Collection
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.java
deleted file mode 100644
index 5f12dbf969..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- *  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.
- */
-package demoapp.dom.domain.objects.DomainObject.xxxDomainEvent;
-
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom._infra.values.ValueHolder;
-
-import org.apache.causeway.applib.annotation.ObjectSupport;
-
-@SuppressWarnings("CdiManagedBeanInconsistencyInspection")
-public abstract class DomainObjectXxxDomainEvent
-        implements
-        HasAsciiDocDescription,
-        ValueHolder<String> {
-
-    @ObjectSupport
-    public String title() {
-        return getName();
-    }
-
-    @Override
-    public String value() {
-        return getName();
-    }
-
-    public abstract String getName();
-    public abstract void setName(String value);
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.layout.xml
deleted file mode 100644
index 691a0c6d47..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEvent.layout.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- 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. -->
-<bs3:grid
-        xsi:schemaLocation="https://causeway.apache.org/applib/layout/component https://causeway.apache.org/applib/layout/component/component.xsd   https://causeway.apache.org/applib/layout/grid/bootstrap3 https://causeway.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="https://causeway.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="https://causeway.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-	<bs3:row>
-		<bs3:col span="10" unreferencedActions="true">
-			<cpt:domainObject />
-		</bs3:col>
-		<bs3:col span="2">
-			<cpt:fieldSet name="" id="sources" />
-		</bs3:col>
-	</bs3:row>
-
-	<bs3:row>
-		<bs3:col span="6">
-			<bs3:tabGroup>
-				<bs3:tab name="General">
-					<bs3:row>
-						<bs3:col span="12">
-							<cpt:fieldSet name="General" id="general" >
-								<cpt:property id="name"/>
-								<cpt:property id="originalName"/>
-								<cpt:property id="initialCharacter"/>
-							</cpt:fieldSet>
-						</bs3:col>
-					</bs3:row>
-				</bs3:tab>
-				<bs3:tab name="Metadata">
-					<bs3:row>
-						<bs3:col span="12">
-							<cpt:fieldSet name="Metadata" id="metadata" >
-								<cpt:property id="id"/>
-								<cpt:property id="logicalTypeName"/>
-								<cpt:property id="version"/>
-							</cpt:fieldSet>
-						</bs3:col>
-					</bs3:row>
-				</bs3:tab>
-				<bs3:tab name="Other">
-					<bs3:row>
-						<bs3:col span="12">
-							<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-						</bs3:col>
-					</bs3:row>
-				</bs3:tab>
-			</bs3:tabGroup>
-		</bs3:col>
-		<bs3:col span="6">
-			<cpt:fieldSet name="Description" id="description" >
-				<cpt:action id="clearHints" position="PANEL" />
-				<cpt:action id="rebuildMetamodel" position="PANEL"/>
-				<cpt:action id="downloadLayout"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="downloadJdoMetamodel"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="recentExecutions"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="recentAuditTrailEntries"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="impersonateWithRoles"  position="PANEL_DROPDOWN"/>
-				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
-				<cpt:property id="description"/>
-			</cpt:fieldSet>
-		</bs3:col>	</bs3:row>
-	<bs3:row>
-		<bs3:col span="12" unreferencedCollections="true"/>
-	</bs3:row>
-
-</bs3:grid>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_objects.java
deleted file mode 100644
index 25623f499e..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/DomainObjectXxxDomainEventPage_objects.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package demoapp.dom.domain.objects.DomainObject.xxxDomainEvent;
-
-import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.objects.DomainObject.mixinMethod.DomainObjectMixinMethod;
-import demoapp.dom.domain.objects.DomainObject.mixinMethod.DomainObjectMixinMethodPage;
-import lombok.RequiredArgsConstructor;
-
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.Collection;
-import org.apache.causeway.applib.annotation.CollectionLayout;
-import org.apache.causeway.applib.annotation.DomainObject;
-
-@Collection()
-@CollectionLayout()
-@RequiredArgsConstructor
-public class DomainObjectXxxDomainEventPage_objects {
-
-    @SuppressWarnings("unused")
-    private final DomainObjectXxxDomainEventPage mixee;
-
-    public List<? extends DomainObjectXxxDomainEvent> coll() {   // <.>
-        return objectRepository.all();
-    }
-
-    @Inject ValueHolderRepository<String, ? extends DomainObjectXxxDomainEvent> objectRepository;
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa-description.adoc
deleted file mode 100644
index e2fa64e618..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa-description.adoc
+++ /dev/null
@@ -1,11 +0,0 @@
-:Notice: 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 ag [...]
-
-This domain class ...
-
-[source,java,indent=0]
-.DomainObjectXxxDomainEvent.java
-----
-include::../DomainObjectXxxDomainEvent.java[tags=class]
-----
-<.> ...
-
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa.java
deleted file mode 100644
index 0e38144620..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpa.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  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.
- */
-package demoapp.dom.domain.objects.DomainObject.xxxDomainEvent.jpa;
-
-import demoapp.dom.domain.objects.DomainObject.xxxDomainEvent.DomainObjectXxxDomainEvent;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.inject.Named;
-import javax.persistence.*;
-
-import org.apache.causeway.applib.annotation.DomainObject;
-import org.apache.causeway.applib.annotation.Nature;
-import org.apache.causeway.persistence.jpa.applib.integration.CausewayEntityListener;
-import org.springframework.context.annotation.Profile;
-
-@Profile("demo-jpa")
-@Entity
-@Table(
-    schema = "demo",
-    name = "DomainObjectXxxDomainEventJpa"
-)
-@EntityListeners(CausewayEntityListener.class)
-@Named("demo.DomainObjectXxxDomainEventJpa")
-@NoArgsConstructor
-//tag::class[]
-// ...
-@DomainObject(nature = Nature.ENTITY)
-public class DomainObjectXxxDomainEventJpa
-                extends DomainObjectXxxDomainEvent {
-    // ...
-//end::class[]
-
-    public DomainObjectXxxDomainEventJpa(String value) {
-        setName(value);
-    }
-
-    @Id
-    @GeneratedValue
-    private Long id;
-//tag::class[]
-
-    @Getter @Setter
-    private String name;
-
-}
-//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpaEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpaEntities.java
deleted file mode 100644
index 4a13c9638a..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/xxxDomainEvent/jpa/DomainObjectXxxDomainEventJpaEntities.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- *  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.
- */
-package demoapp.dom.domain.objects.DomainObject.xxxDomainEvent.jpa;
-
-import demoapp.dom._infra.values.ValueHolderRepository;
-
-import org.springframework.context.annotation.Profile;
-import org.springframework.stereotype.Service;
-
-@Profile("demo-jpa")
-@Service
-public class DomainObjectXxxDomainEventJpaEntities
-extends ValueHolderRepository<String, DomainObjectXxxDomainEventJpa> {
-
-    protected DomainObjectXxxDomainEventJpaEntities() {
-        super(DomainObjectXxxDomainEventJpa.class);
-    }
-
-    @Override
-    protected DomainObjectXxxDomainEventJpa newDetachedEntity(String value) {
-        return new DomainObjectXxxDomainEventJpa(value);
-    }
-
-}
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventPage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventPage-description.adoc
index 9480532663..df5abd89bf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventPage-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventPage-description.adoc
@@ -14,10 +14,6 @@ The `domainEvent` element specifies the class to be emitted; this must be a subc
 If no `domainEvent` is specified on the property itself, then the domain event class can be specified at the class level using `@DomainObject#propertyDomainEvent`.
 And if not specified at the class level, then an instance of `org.apache.causeway.applib.events.domain.PropertyDomainEvent.Default` is emitted as the fallback.
 
-[TIP]
-====
-The fallback domain event can be suppressed using the `causeway.applib.annotation.property.domain-event.post-for-default` configuration property.
-====
 
 == Annotated Property