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/26 18:57:10 UTC

[isis] branch master updated: ISIS-2882: adds missing ValueSemantics for ApplicationFeatureId

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 709d620  ISIS-2882: adds missing ValueSemantics for ApplicationFeatureId
709d620 is described below

commit 709d620270f3716526d1da0c8e56e28be29cbf58
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jan 26 19:56:57 2022 +0100

    ISIS-2882: adds missing ValueSemantics for ApplicationFeatureId
---
 .../core/metamodel/IsisModuleCoreMetamodel.java    |   3 +
 .../ApplicationFeatureIdValueSemantics.java        | 112 +++++++++++++++++++++
 .../model/valuetypes/ValueTypeExample.java         |  16 ++-
 3 files changed, 130 insertions(+), 1 deletion(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
index 8354c8e..4a66e3a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/IsisModuleCoreMetamodel.java
@@ -48,6 +48,7 @@ import org.apache.isis.core.metamodel.services.tablecol.TableColumnOrderServiceU
 import org.apache.isis.core.metamodel.services.title.TitleServiceDefault;
 import org.apache.isis.core.metamodel.specloader.ProgrammingModelServiceDefault;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoaderDefault;
+import org.apache.isis.core.metamodel.valuesemantics.ApplicationFeatureIdValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BigDecimalValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BigIntegerValueSemantics;
 import org.apache.isis.core.metamodel.valuesemantics.BlobValueSemantics;
@@ -145,6 +146,8 @@ import org.apache.isis.core.security.IsisModuleCoreSecurity;
         JavaSqlTimeValueSemantics.class,
         JavaSqlTimeStampValueSemantics.class,
         JavaUtilDateValueSemantics.class,
+        // Value Semantics (meta-model)
+        ApplicationFeatureIdValueSemantics.class,
 
         // @Service's
         ObjectManagerDefault.class,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java
new file mode 100644
index 0000000..9eafb8c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/valuesemantics/ApplicationFeatureIdValueSemantics.java
@@ -0,0 +1,112 @@
+/*
+ *  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.valuesemantics;
+
+import javax.inject.Named;
+
+import org.springframework.stereotype.Component;
+
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.value.semantics.EncoderDecoder;
+import org.apache.isis.applib.value.semantics.Parser;
+import org.apache.isis.applib.value.semantics.Renderer;
+import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract;
+import org.apache.isis.applib.value.semantics.ValueSemanticsProvider;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.schema.common.v2.ValueType;
+
+import lombok.val;
+
+@Component
+@Named("isis.val.ApplicationFeatureIdValueSemantics")
+public class ApplicationFeatureIdValueSemantics
+extends ValueSemanticsAbstract<ApplicationFeatureId>
+implements
+    EncoderDecoder<ApplicationFeatureId>,
+    Parser<ApplicationFeatureId>,
+    Renderer<ApplicationFeatureId> {
+
+    @Override
+    public Class<ApplicationFeatureId> getCorrespondingClass() {
+        return ApplicationFeatureId.class;
+    }
+
+    @Override
+    public ValueType getSchemaValueType() {
+        return ValueType.STRING; // this type can be easily converted to string and back
+    }
+
+    // -- ENCODER DECODER
+
+    @Override
+    public String toEncodedString(final ApplicationFeatureId object) {
+        return object!=null
+                ? object.asEncodedString()
+                : null;
+    }
+
+    @Override
+    public ApplicationFeatureId fromEncodedString(final String data) {
+        if(data==null) {
+            return null;
+        }
+        return ApplicationFeatureId.parseEncoded(data);
+    }
+
+    // -- RENDERER
+
+    @Override
+    public String simpleTextPresentation(final ValueSemanticsProvider.Context context, final ApplicationFeatureId value) {
+        return value == null ? "" : value.stringify();
+    }
+
+    // -- PARSER
+
+    @Override
+    public String parseableTextRepresentation(final ValueSemanticsProvider.Context context, final ApplicationFeatureId value) {
+        return value == null ? null : value.stringify();
+    }
+
+    @Override
+    public ApplicationFeatureId parseTextRepresentation(final ValueSemanticsProvider.Context context, final String text) {
+        val input = _Strings.blankToNullOrTrim(text);
+        return input!=null
+                ? ApplicationFeatureId.parse(input)
+                : null;
+    }
+
+    @Override
+    public int typicalLength() {
+        return maxLength();
+    }
+
+    @Override
+    public int maxLength() {
+        return 255;
+    }
+
+    @Override
+    public Can<ApplicationFeatureId> getExamples() {
+        return Can.of(
+                ApplicationFeatureId.newNamespace("a.namespace.only"),
+                ApplicationFeatureId.newMember("a.namespace", "with_member_id"));
+    }
+
+}
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/valuetypes/ValueTypeExample.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/valuetypes/ValueTypeExample.java
index 69c96fa..550fd35 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/valuetypes/ValueTypeExample.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/valuetypes/ValueTypeExample.java
@@ -44,6 +44,7 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.graph.tree.TreeAdapter;
 import org.apache.isis.applib.graph.tree.TreeNode;
 import org.apache.isis.applib.graph.tree.TreeState;
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
@@ -51,6 +52,7 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.applib.value.Markup;
 import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType;
 import org.apache.isis.applib.value.Password;
+import org.apache.isis.core.metamodel.valuesemantics.ApplicationFeatureIdValueSemantics;
 import org.apache.isis.schema.chg.v2.ChangesDto;
 import org.apache.isis.schema.cmd.v2.CommandDto;
 import org.apache.isis.schema.common.v2.OidDto;
@@ -429,7 +431,6 @@ public abstract class ValueTypeExample<T> {
     }
     // -- EXAMPLES - TEMPORAL - JODA TIME
 
-  //TODO    org.joda.time.DateTime - fails because format with time-zone fails on CI
     @DomainObject(
             logicalTypeName = "isis.testdomain.valuetypes.ValueTypeExampleJodaDateTime",
             nature = Nature.BEAN)
@@ -474,6 +475,19 @@ public abstract class ValueTypeExample<T> {
         private org.joda.time.LocalTime updateValue = org.joda.time.LocalTime.now().plusSeconds(15);
     }
 
+    // -- EXAMPLES - META MODEL
+
+    @DomainObject(
+            logicalTypeName = "isis.testdomain.valuetypes.ValueTypeExampleApplicationFeatureId",
+            nature = Nature.BEAN)
+    public static class ValueTypeExampleApplicationFeatureId
+    extends ValueTypeExample<ApplicationFeatureId> {
+        @Property @Getter @Setter
+        private ApplicationFeatureId value = new ApplicationFeatureIdValueSemantics().getExamples().getElseFail(0);
+        @Getter
+        private ApplicationFeatureId updateValue = new ApplicationFeatureIdValueSemantics().getExamples().getElseFail(1);
+    }
+
     // -- EXAMPLES - DATA STRUCTURE
 
     //TODO    TreeNode