You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/01/17 01:11:56 UTC

[isis] 20/36: ISIS-2264: moves JodaDateTimeValueSemanticsProviderAbstract down to subclass (since there is only one)

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/isis.git

commit a88a2398a7b414fb56f7c67675d6f2c311278e83
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Jan 17 00:25:32 2020 +0100

    ISIS-2264: moves JodaDateTimeValueSemanticsProviderAbstract down to subclass (since there is only one)
---
 .../JodaDateTimeValueSemanticsProvider.java        | 128 ++++++++++++++++++-
 ...JodaDateTimeValueSemanticsProviderAbstract.java | 139 ---------------------
 .../time/TimeValueSemanticsProviderAbstract.java   |   3 +-
 3 files changed, 125 insertions(+), 145 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
index d03dc6a..929778e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProvider.java
@@ -19,7 +19,13 @@
 
 package org.apache.isis.core.metamodel.facets.value.datetimejoda;
 
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
 
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormatter;
@@ -28,13 +34,27 @@ import org.joda.time.format.ISODateTimeFormat;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.core.commons.internal.collections._Maps;
+import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
-public class JodaDateTimeValueSemanticsProvider extends JodaDateTimeValueSemanticsProviderAbstract<DateTime> {
+import lombok.Getter;
+import lombok.Setter;
 
-    // no default
-    private static final DateTime DEFAULT_VALUE = null;
+public class JodaDateTimeValueSemanticsProvider extends ValueSemanticsProviderAbstractTemporal<DateTime> {
+
+    private static final Map<String, DateFormat> FORMATS = _Maps.newHashMap();
+
+    static {
+        FORMATS.put(ISO_ENCODING_FORMAT, createDateEncodingFormat("yyyyMMdd"));
+        FORMATS.put("iso", createDateFormat("yyyy-MM-dd"));
+        FORMATS.put("medium", DateFormat.getDateInstance(DateFormat.MEDIUM));
+    }
 
+    @Getter
+    @Setter
+    private String configuredFormat;
 
     /**
      * Required because implementation of {@link Parser} and
@@ -45,10 +65,110 @@ public class JodaDateTimeValueSemanticsProvider extends JodaDateTimeValueSemanti
     }
 
     public JodaDateTimeValueSemanticsProvider(final FacetHolder holder) {
-        super(holder, DateTime.class, DEFAULT_VALUE);
+        this(holder, null);
+    }
+
+    private JodaDateTimeValueSemanticsProvider(final FacetHolder holder, final DateTime defaultValue) {
+        this("date", holder, defaultValue);
+
+        configuredFormat = getConfiguration().getValue().getFormat().getOrDefault("date", "medium").toLowerCase().trim();
+
+        buildFormat(configuredFormat);
+
+        String formatRequired = getConfiguration().getValue().getFormat().get("date");
+
+        if (formatRequired == null) {
+            format = formats().get(defaultFormat());
+        } else {
+            setMask(formatRequired); //TODO fails when using format names eg 'medium'
+        }
+    }
+
+    private JodaDateTimeValueSemanticsProvider(
+            final String propertyType, final FacetHolder holder, final DateTime defaultValue) {
+        super(propertyType, type(), holder, DateTime.class, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
+    }
+
+    // //////////////////////////////////////////////////////////////////
+    // temporal-specific stuff
+    // //////////////////////////////////////////////////////////////////
+
+    @Override
+    protected void clearFields(final Calendar cal) {
+        cal.set(Calendar.HOUR, 0);
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.AM_PM, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+    }
+
+    @Override
+    protected String defaultFormat() {
+        return "medium";
+    }
+
+    @Override
+    protected boolean ignoreTimeZone() {
+        return true;
+    }
+
+    @Override
+    protected Map<String, DateFormat> formats() {
+        return FORMATS;
     }
 
     @Override
+    public String toString() {
+        return "DateValueSemanticsProvider: " + format;
+    }
+
+    @Override
+    protected DateFormat format() {
+        final Locale locale = Locale.getDefault();
+
+        final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
+        dateFormat.setTimeZone(UTC_TIME_ZONE);
+        return dateFormat;
+    }
+
+    @Override
+    protected List<DateFormat> formatsToTry() {
+
+        final Locale locale = Locale.getDefault();
+
+        List<DateFormat> formats = new ArrayList<>();
+
+        formats.add(DateFormat.getDateInstance(DateFormat.LONG, locale));
+        formats.add(DateFormat.getDateInstance(DateFormat.MEDIUM, locale));
+        formats.add(DateFormat.getDateInstance(DateFormat.SHORT, locale));
+        formats.add(createDateFormat("yyyy-MM-dd"));
+        formats.add(createDateFormat("yyyyMMdd"));
+
+        for (DateFormat format : formats) {
+            format.setTimeZone(UTC_TIME_ZONE);
+        }
+
+        return formats;
+    }
+
+    @Override
+    public void appendAttributesTo(Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("configuredFormat", configuredFormat);
+    }
+
+
+
+
+
+
+    // no default
+    private static final DateTime DEFAULT_VALUE = null;
+
+
+
+    @Override
     protected DateTime add(final DateTime original, final int years, final int months, final int days, final int hours, final int minutes) {
         if(hours != 0 || minutes != 0) {
             throw new IllegalArgumentException("cannot add non-zero hours or minutes to a DateTime");
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
deleted file mode 100644
index 4da3836..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
+++ /dev/null
@@ -1,139 +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 org.apache.isis.core.metamodel.facets.value.datetimejoda;
-
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import org.apache.isis.core.commons.internal.collections._Maps;
-import org.apache.isis.core.config.IsisConfiguration.Value.FormatIdentifier;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
-
-import lombok.Getter;
-import lombok.Setter;
-
-public abstract class JodaDateTimeValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAbstractTemporal<T> {
-
-    private static final Map<String, DateFormat> FORMATS = _Maps.newHashMap();
-
-    static {
-        FORMATS.put(ISO_ENCODING_FORMAT, createDateEncodingFormat("yyyyMMdd"));
-        FORMATS.put("iso", createDateFormat("yyyy-MM-dd"));
-        FORMATS.put("medium", DateFormat.getDateInstance(DateFormat.MEDIUM));
-    }
-
-    @Getter @Setter
-    private String configuredFormat;
-
-    public JodaDateTimeValueSemanticsProviderAbstract(final FormatIdentifier formatIdentifier, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
-        super(formatIdentifier.name().toLowerCase(), type(), holder, adaptedClass, typicalLength, immutability, equalByContent, defaultValue);
-    }
-
-    public JodaDateTimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final T defaultValue) {
-        this(FormatIdentifier.DATE, holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
-
-        configuredFormat = getConfiguration().getValue().getFormat().getOrDefault("date", "medium").toLowerCase().trim();
-
-        buildFormat(configuredFormat);
-
-        String formatRequired = getConfiguration().getValue().getFormat().get("date");
-        
-        if (formatRequired == null) {
-            format = formats().get(defaultFormat());
-        } else {
-            setMask(formatRequired); //TODO fails when using format names eg 'medium'
-        }
-    }
-
-
-    // //////////////////////////////////////////////////////////////////
-    // temporal-specific stuff
-    // //////////////////////////////////////////////////////////////////
-
-    @Override
-    protected void clearFields(final Calendar cal) {
-        cal.set(Calendar.HOUR, 0);
-        cal.set(Calendar.HOUR_OF_DAY, 0);
-        cal.set(Calendar.MINUTE, 0);
-        cal.set(Calendar.SECOND, 0);
-        cal.set(Calendar.AM_PM, 0);
-        cal.set(Calendar.MILLISECOND, 0);
-    }
-
-    @Override
-    protected String defaultFormat() {
-        return "medium";
-    }
-
-    @Override
-    protected boolean ignoreTimeZone() {
-        return true;
-    }
-
-    @Override
-    protected Map<String, DateFormat> formats() {
-        return FORMATS;
-    }
-
-    @Override
-    public String toString() {
-        return "DateValueSemanticsProvider: " + format;
-    }
-
-    @Override
-    protected DateFormat format() {
-        final Locale locale = Locale.getDefault();
-
-        final DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
-        dateFormat.setTimeZone(UTC_TIME_ZONE);
-        return dateFormat;
-    }
-
-    @Override
-    protected List<DateFormat> formatsToTry() {
-
-        final Locale locale = Locale.getDefault();
-
-        List<DateFormat> formats = new ArrayList<>();
-
-        formats.add(DateFormat.getDateInstance(DateFormat.LONG, locale));
-        formats.add(DateFormat.getDateInstance(DateFormat.MEDIUM, locale));
-        formats.add(DateFormat.getDateInstance(DateFormat.SHORT, locale));
-        formats.add(createDateFormat("yyyy-MM-dd"));
-        formats.add(createDateFormat("yyyyMMdd"));
-
-        for (DateFormat format : formats) {
-            format.setTimeZone(UTC_TIME_ZONE);
-        }
-
-        return formats;
-    }
-
-    @Override
-    public void appendAttributesTo(Map<String, Object> attributeMap) {
-        super.appendAttributesTo(attributeMap);
-        attributeMap.put("configuredFormat", configuredFormat);
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
index 0a599d7..d092e0b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
@@ -36,7 +36,6 @@ import lombok.Setter;
 public abstract class TimeValueSemanticsProviderAbstract<T> 
 extends ValueSemanticsProviderAbstractTemporal<T> {
 
-    private static final Object DEFAULT_VALUE = null; // no default
     private static final int TYPICAL_LENGTH = 8;
 
     protected static void initFormats(final Map<String, DateFormat> formats) {
@@ -53,7 +52,7 @@ extends ValueSemanticsProviderAbstractTemporal<T> {
 
     @SuppressWarnings("unchecked")
     public TimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass) {
-        this(FormatIdentifier.TIME, holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE);
+        this(FormatIdentifier.TIME, holder, adaptedClass, 8, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) null);
 
         configuredFormat = getConfiguration().getValue().getFormat().getOrDefault("time", "short").toLowerCase().trim();