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 2018/03/15 12:23:49 UTC

[isis] branch master updated: ISIS-1887 pull in java.sql.Timestamp support from -legacy

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 f39fc20  ISIS-1887 pull in java.sql.Timestamp support from -legacy
f39fc20 is described below

commit f39fc20d9144a7b314de7e99c6b23052eed07ee5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Mar 15 13:23:45 2018 +0100

    ISIS-1887 pull in java.sql.Timestamp support from -legacy
    
    refactoring: no longer depending on deprecated Isis time value types
---
 .../plugins/ProgrammingModelIsisTimePlugin.java    |  3 -
 .../facets/value/timestampsql/EpochMillis.java     | 40 +++++++++
 .../EpochMillisValueSemanticsProviderAbstract.java | 98 ++++++++++++++++++++++
 ...ampValueFacetUsingSemanticsProviderFactory.java |  0
 .../JavaSqlTimeStampValueSemanticsProvider.java    | 11 +--
 .../dflt/ProgrammingModelFacetsJava5.java          |  2 +
 6 files changed, 144 insertions(+), 10 deletions(-)

diff --git a/core/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelIsisTimePlugin.java b/core/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelIsisTimePlugin.java
index e9588ff..a4e3d6d 100644
--- a/core/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelIsisTimePlugin.java
+++ b/core/metamodel-legacy/src/main/java/org/apache/isis/progmodels/plugins/ProgrammingModelIsisTimePlugin.java
@@ -4,7 +4,6 @@ import org.apache.isis.core.metamodel.facets.value.date.DateValueFacetUsingSeman
 import org.apache.isis.core.metamodel.facets.value.datetime.DateTimeValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.time.TimeValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.value.timestampsql.JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin;
 
 public class ProgrammingModelIsisTimePlugin implements ProgrammingModelPlugin {
@@ -17,8 +16,6 @@ public class ProgrammingModelIsisTimePlugin implements ProgrammingModelPlugin {
         
 		collector.addFactory(new TimeStampValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
 		collector.addFactory(new TimeValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
-		
-		collector.addFactory(new JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory(), FacetFactoryCategory.VALUE);
 
 	}
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillis.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillis.java
new file mode 100644
index 0000000..0d5b883
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillis.java
@@ -0,0 +1,40 @@
+/*
+ *  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.timestampsql;
+
+import java.util.Date;
+
+class EpochMillis {
+
+	private final long epochMillis;
+	
+	public EpochMillis(long epochMillis) {
+		this.epochMillis = epochMillis;
+	}
+
+	public long epochMillis() {
+		return epochMillis;
+	}
+	
+	public Date toJavaUtilDate() {
+		return new Date(epochMillis);
+	}
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillisValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillisValueSemanticsProviderAbstract.java
new file mode 100644
index 0000000..c9d5525
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/EpochMillisValueSemanticsProviderAbstract.java
@@ -0,0 +1,98 @@
+/*
+ *  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.timestampsql;
+
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+
+abstract class EpochMillisValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAbstractTemporal<T> {
+
+    private static final Object DEFAULT_VALUE = null; // no default
+    private static final int TYPICAL_LENGTH = 25;
+
+    protected static void initFormats(final Map<String, DateFormat> formats) {
+        formats.put(ISO_ENCODING_FORMAT, createDateEncodingFormat("yyyyMMdd'T'HHmmssSSS")); 
+        formats.put("short", DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG));
+    }
+
+    @SuppressWarnings("unchecked")
+    public EpochMillisValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final ServicesInjector context) {
+        super("timestamp", holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE, context);
+        final String formatRequired = getConfiguration().getString(ConfigurationConstants.ROOT + "value.format.timestamp");
+        if (formatRequired == null) {
+            format = formats().get(defaultFormat());
+        } else {
+            setMask(formatRequired);
+        }
+    }
+
+    @Override
+    protected T add(final T original, final int years, final int months, final int days, final int hours, final int minutes) {
+        return original;
+    }
+
+    @Override
+    protected String defaultFormat() {
+        return "short";
+    }
+
+    @Override
+    public String toString() {
+        return "TimeStampValueSemanticsProvider: " + format;
+    }
+
+    @Override
+    protected DateFormat format() {
+
+        final Locale locale = Locale.getDefault();
+        final TimeZone timeZone = TimeZone.getDefault();
+
+        final DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale);
+        dateFormat.setTimeZone(timeZone);
+
+        return dateFormat;
+    }
+
+    protected List<DateFormat> formatsToTry() {
+        final List<DateFormat> formats = new ArrayList<DateFormat>();
+
+        final Locale locale = Locale.getDefault();
+        final TimeZone timeZone = TimeZone.getDefault();
+
+        formats.add(DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG, locale));
+        formats.add(DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG, locale));
+        formats.add(createDateFormat("yyyy-MM-dd HH:mm:ss.SSS"));
+
+        for (final DateFormat format : formats) {
+            format.setTimeZone(timeZone);
+        }
+
+        return formats;
+    }
+}
diff --git a/core/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
similarity index 100%
rename from core/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory.java
diff --git a/core/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java
similarity index 88%
rename from core/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java
index c43e4f4..6f0d3a9 100644
--- a/core/metamodel-legacy/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/JavaSqlTimeStampValueSemanticsProvider.java
@@ -24,25 +24,22 @@ import java.text.DateFormat;
 import java.util.Date;
 import java.util.Map;
 
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.parseable.InvalidEntryException;
 import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
-
-import org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 
 public class JavaSqlTimeStampValueSemanticsProvider 
-extends TimeStampValueSemanticsProviderAbstract<java.sql.Timestamp> {
+extends EpochMillisValueSemanticsProviderAbstract<java.sql.Timestamp> {
 
     public static final boolean isAPropertyDefaultFacet() {
         return PropertyDefaultFacet.class.isAssignableFrom(JavaSqlTimeStampValueSemanticsProvider.class);
     }
 
-    private static Map<String, DateFormat> formats = Maps.newHashMap();
+    private static Map<String, DateFormat> formats = _Maps.newHashMap();
 
     static {
         initFormats(formats);
@@ -66,7 +63,7 @@ extends TimeStampValueSemanticsProviderAbstract<java.sql.Timestamp> {
 
     @Override
     protected Date dateValue(final Object value) {
-        return new Date(((Timestamp) value).getTime());
+        return ((EpochMillis) value).toJavaUtilDate();
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 88ae176..6656023 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -160,6 +160,7 @@ import org.apache.isis.core.metamodel.facets.value.shortint.ShortPrimitiveValueF
 import org.apache.isis.core.metamodel.facets.value.shortint.ShortWrapperValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.string.StringValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.timesql.JavaSqlTimeValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.timestampsql.JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.url.URLValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.uuid.UUIDValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.postprocessors.param.ActionCollectionParameterDefaultsAndChoicesPostProcessor;
@@ -372,6 +373,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(new BigDecimalValueFacetUsingSemanticsProviderFactory());
         addFactory(new JavaSqlDateValueFacetUsingSemanticsProviderFactory());
         addFactory(new JavaSqlTimeValueFacetUsingSemanticsProviderFactory());
+        addFactory(new JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory());
         addFactory(new JavaUtilDateValueFacetUsingSemanticsProviderFactory());
         addFactory(new StringValueFacetUsingSemanticsProviderFactory());
         addFactory(new URLValueFacetUsingSemanticsProviderFactory());

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.