You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/04 09:33:22 UTC
[isis] branch master updated: ISIS-2882: adds TimeFormatPrecisionFacet
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 15156b9 ISIS-2882: adds TimeFormatPrecisionFacet
15156b9 is described below
commit 15156b9d547b5b5ce2b5c8a336a57410140910c3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 4 10:33:14 2022 +0100
ISIS-2882: adds TimeFormatPrecisionFacet
- as contributed by @ValueSemantics.timePrecision()
---
.../value/semantics/ValueSemanticsAbstract.java | 1 -
.../DateFormatStyleFacet.java | 2 +-
.../DateFormatStyleFacetAbstract.java | 2 +-
.../TimeFormatPrecisionFacet.java} | 17 ++++++------
.../TimeFormatPrecisionFacetAbstract.java} | 32 +++++++++++-----------
.../TimeFormatStyleFacet.java | 2 +-
.../TimeFormatStyleFacetAbstract.java | 2 +-
...rmatStyleFacetFromValueSemanticsAnnotation.java | 4 +--
...recisionFacetFromValueSemanticsAnnotation.java} | 24 ++++++++--------
...rmatStyleFacetFromValueSemanticsAnnotation.java | 4 +--
.../ValueSemanticsAnnotationFacetFactory.java | 4 +++
.../temporal/TemporalValueSemanticsProvider.java | 11 +++++---
.../ValueSemanticsAnnotationFacetFactoryTest.java | 4 +--
13 files changed, 58 insertions(+), 51 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsAbstract.java b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsAbstract.java
index 53b7151..fee49c2 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsAbstract.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/semantics/ValueSemanticsAbstract.java
@@ -197,7 +197,6 @@ implements
final @NonNull FormatStyle dateFormatStyle,
final @NonNull FormatStyle timeFormatStyle) {
- //FIXME[ISIS-2882] honor OffsetCharacteristic
switch (temporalCharacteristic) {
case DATE_TIME:
return DateTimeFormatter.ofLocalizedDateTime(dateFormatStyle, timeFormatStyle)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacet.java
similarity index 98%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacet.java
index d1cbd2b..7b8573d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacet.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
import java.time.format.FormatStyle;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacetAbstract.java
similarity index 99%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacetAbstract.java
index ea9b059..ba5bf44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/DateFormatStyleFacetAbstract.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
import java.time.format.FormatStyle;
import java.util.Objects;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacet.java
similarity index 74%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacet.java
index d1cbd2b..733920a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/DateFormatStyleFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacet.java
@@ -16,23 +16,24 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
-
-import java.time.format.FormatStyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
+import org.apache.isis.applib.annotation.TimePrecision;
import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.core.metamodel.facetapi.Facet;
/**
- * If associated with a temporal date value, the style of a localized date.
- * @see ValueSemantics#dateFormatStyle()
+ * If associated with a temporal time value, the time of day precision,
+ * used for editing a time field in the UI.
+ *
+ * @see ValueSemantics#timePrecision()
*/
-public interface DateFormatStyleFacet
+public interface TimeFormatPrecisionFacet
extends Facet {
/**
- * As provided by {@link ValueSemantics#dateFormatStyle()}.
+ * As provided by {@link ValueSemantics#timePrecision()}.
*/
- FormatStyle getDateFormatStyle();
+ TimePrecision getTimePrecision();
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacetAbstract.java
similarity index 69%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacetAbstract.java
index c46b942..119f39b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatPrecisionFacetAbstract.java
@@ -16,12 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
-import java.time.format.FormatStyle;
import java.util.Objects;
import java.util.function.BiConsumer;
+import org.apache.isis.applib.annotation.TimePrecision;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -29,45 +29,45 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import lombok.Getter;
import lombok.NonNull;
-public abstract class TimeFormatStyleFacetAbstract
+public abstract class TimeFormatPrecisionFacetAbstract
extends FacetAbstract
-implements TimeFormatStyleFacet {
+implements TimeFormatPrecisionFacet {
private static final Class<? extends Facet> type() {
- return TimeFormatStyleFacet.class;
+ return TimeFormatPrecisionFacet.class;
}
@Getter(onMethod_ = {@Override})
- private final @NonNull FormatStyle timeFormatStyle;
+ private final @NonNull TimePrecision timePrecision;
- protected TimeFormatStyleFacetAbstract(
- final FormatStyle timeFormatStyle,
+ protected TimeFormatPrecisionFacetAbstract(
+ final TimePrecision timePrecision,
final FacetHolder holder) {
super(type(), holder);
- this.timeFormatStyle = timeFormatStyle;
+ this.timePrecision = timePrecision;
}
- protected TimeFormatStyleFacetAbstract(
- final FormatStyle timeFormatStyle,
+ protected TimeFormatPrecisionFacetAbstract(
+ final TimePrecision timePrecision,
final FacetHolder holder,
final Facet.Precedence precedence) {
super(type(), holder, precedence);
- this.timeFormatStyle = timeFormatStyle;
+ this.timePrecision = timePrecision;
}
@Override
public boolean semanticEquals(@NonNull final Facet other) {
- return other instanceof TimeFormatStyleFacet
+ return other instanceof TimeFormatPrecisionFacet
? Objects.equals(
- this.getTimeFormatStyle(),
- ((TimeFormatStyleFacet)other).getTimeFormatStyle())
+ this.getTimePrecision(),
+ ((TimeFormatPrecisionFacet)other).getTimePrecision())
: false;
}
@Override
public void visitAttributes(final BiConsumer<String, Object> visitor) {
super.visitAttributes(visitor);
- visitor.accept("timeFormatStyle", timeFormatStyle.name());
+ visitor.accept("timePrecision", timePrecision.name());
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacet.java
similarity index 98%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacet.java
index 87bf071..c385a46 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacet.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
import java.time.format.FormatStyle;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacetAbstract.java
similarity index 99%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacetAbstract.java
index c46b942..4cf6d57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformatstyle/TimeFormatStyleFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/temporalformat/TimeFormatStyleFacetAbstract.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle;
+package org.apache.isis.core.metamodel.facets.objectvalue.temporalformat;
import java.time.format.FormatStyle;
import java.util.Objects;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
index 146097b..c4b8001 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
@@ -23,8 +23,8 @@ import java.util.Optional;
import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacetAbstract;
public class DateFormatStyleFacetFromValueSemanticsAnnotation
extends DateFormatStyleFacetAbstract {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatPrecisionFacetFromValueSemanticsAnnotation.java
similarity index 67%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatPrecisionFacetFromValueSemanticsAnnotation.java
index 146097b..d6d99a0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/DateFormatStyleFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatPrecisionFacetFromValueSemanticsAnnotation.java
@@ -18,30 +18,30 @@
*/
package org.apache.isis.core.metamodel.facets.value.semantics;
-import java.time.format.FormatStyle;
import java.util.Optional;
+import org.apache.isis.applib.annotation.TimePrecision;
import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatPrecisionFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatPrecisionFacetAbstract;
-public class DateFormatStyleFacetFromValueSemanticsAnnotation
-extends DateFormatStyleFacetAbstract {
+public class TimeFormatPrecisionFacetFromValueSemanticsAnnotation
+extends TimeFormatPrecisionFacetAbstract {
- public static Optional<DateFormatStyleFacet> create(
+ public static Optional<TimeFormatPrecisionFacet> create(
final Optional<ValueSemantics> valueSemanticsIfAny,
final FacetHolder holder) {
return valueSemanticsIfAny
- .map(ValueSemantics::dateFormatStyle)
- .map(dateFormatStyle->
- new DateFormatStyleFacetFromValueSemanticsAnnotation(dateFormatStyle, holder));
+ .map(ValueSemantics::timePrecision)
+ .map(timePrecision->
+ new TimeFormatPrecisionFacetFromValueSemanticsAnnotation(timePrecision, holder));
}
- private DateFormatStyleFacetFromValueSemanticsAnnotation(
- final FormatStyle dateFormatStyle, final FacetHolder holder) {
- super(dateFormatStyle, holder);
+ private TimeFormatPrecisionFacetFromValueSemanticsAnnotation(
+ final TimePrecision timePrecision, final FacetHolder holder) {
+ super(timePrecision, holder);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
index cd6d24a..6a00a16 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/TimeFormatStyleFacetFromValueSemanticsAnnotation.java
@@ -23,8 +23,8 @@ import java.util.Optional;
import org.apache.isis.applib.annotation.ValueSemantics;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacetAbstract;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatStyleFacetAbstract;
public class TimeFormatStyleFacetFromValueSemanticsAnnotation
extends TimeFormatStyleFacetAbstract {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
index 6fec513..1c613b9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactory.java
@@ -136,6 +136,10 @@ extends FacetFactoryAbstract {
TimeFormatStyleFacetFromValueSemanticsAnnotation
.create(valueSemanticsIfAny, facetHolder));
+ addFacetIfPresent(
+ TimeFormatPrecisionFacetFromValueSemanticsAnnotation
+ .create(valueSemanticsIfAny, facetHolder));
+
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
index 9993ff6..dccc53c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/temporal/TemporalValueSemanticsProvider.java
@@ -40,8 +40,9 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatPrecisionFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatStyleFacet;
import lombok.Getter;
import lombok.NonNull;
@@ -270,8 +271,10 @@ implements TemporalValueSemantics<T> {
.map(TimeFormatStyleFacet::getTimeFormatStyle)
.orElse(FormatStyle.MEDIUM);
- //FIXME[ISIS-2882] honor facets
- val timePrecision = TimePrecision.SECOND;
+ val timePrecision = featureIfAny
+ .flatMap(feature->feature.lookupFacet(TimeFormatPrecisionFacet.class))
+ .map(TimeFormatPrecisionFacet::getTimePrecision)
+ .orElse(TimePrecision.SECOND);
return of(dateFormatStyle, timeFormatStyle, timePrecision);
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
index 7ebe68d..cf328ad 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/semantics/ValueSemanticsAnnotationFacetFactoryTest.java
@@ -16,8 +16,8 @@ import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxFractionalDig
import org.apache.isis.core.metamodel.facets.objectvalue.digits.MaxTotalDigitsFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinFractionalDigitsFacet;
import org.apache.isis.core.metamodel.facets.objectvalue.digits.MinIntegerDigitsFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.DateFormatStyleFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.temporalformatstyle.TimeFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.DateFormatStyleFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.temporalformat.TimeFormatStyleFacet;
@SuppressWarnings("unused")
public class ValueSemanticsAnnotationFacetFactoryTest