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 2021/09/17 05:04:45 UTC
[isis] branch master updated: ISIS-2870: remove support for
@Defaulted
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 a23339d ISIS-2870: remove support for @Defaulted
a23339d is described below
commit a23339d44891f08396ef7d9645ceee75ea0f9855
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Sep 17 07:04:36 2021 +0200
ISIS-2870: remove support for @Defaulted
as is conflicting with Spring managed value semantics
rational: devs can instead put their own value semantics providers onto the Spring context utilizing any Spring provided mechanics
---
.../apache/isis/applib/annotation/Defaulted.java | 79 -------
.../object/defaults/DefaultsProviderUtil.java | 97 --------
.../annotcfg/DefaultedFacetAnnotation.java | 72 ------
...tedFacetAnnotationElseConfigurationFactory.java | 66 ------
.../annotcfg/DefaultedFacetFromConfiguration.java | 47 ----
.../object/parseable/ParseableFacetAbstract.java | 94 --------
.../{parser => }/ParseableFacetUsingParser.java | 11 +-
.../facets/object/parseable/ParserUtil.java | 45 ----
.../annotcfg/ParseableFacetFromConfiguration.java | 32 ---
.../ValueFacetUsingSemanticsProviderFactory.java | 15 +-
.../dflt/ProgrammingModelFacetsJava11.java | 3 -
.../object/defaults/DefaultedFacetFactoryTest.java | 249 ---------------------
.../parseable/ParseableFacetUsingParserTest.java | 1 -
.../facets/param/name/ParameterNameFacetTest.java | 2 +-
.../ValueSemanticsProviderAbstractTestCase.java | 2 +-
15 files changed, 13 insertions(+), 802 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
deleted file mode 100644
index 285e894..0000000
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Defaulted.java
+++ /dev/null
@@ -1,79 +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.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-
-/**
- * Indicates that the class should have a default, by providing a link to a
- * {@link DefaultsProvider}, or some externally-configured mechanism.
- *
- * <p>
- * This possibly seems a little tortuous. The more obvious means to provide a
- * default would seem to be a simple <tt>@DefaultsTo(new SomeObject())</tt>.
- * However, Java only allows primitives, strings and class literals to be used
- * in annotations. We therefore need delegate to an external implementation.
- * (This more complex design is also more flexible of course; the implementation
- * of {@link DefaultsProvider} could adjust the default it provides according to
- * circumstance, for example).
- *
- * @apiNote This annotation is only incompletely recognized by the framework,
- * and may be deprecated in the future.
- *
- * @see Value
- * @since 1.x {@index}
- */
-@Inherited
-@Target({ ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Defaulted {
-
- /**
- * The fully qualified name of a class that implements the
- * {@link DefaultsProvider} interface.
- *
- * <p>
- * This is optional because some implementations may pick up the defaults
- * provider via a configuration file, or via the equivalent
- * {@link #defaultsProviderClass()}.
- *
- * <p>
- * Implementation note: the default value provided here is simply an empty
- * string because <tt>null</tt> is not a valid default.
- */
- String defaultsProviderName() default "";
-
- /**
- * As per {@link #defaultsProviderName()}, but specifying a class literal
- * rather than a fully qualified class name.
- *
- * <p>
- * Implementation note: the default value provided here is simply the
- * {@link Defaulted}'s own class, because <tt>null</tt> is not a valid
- * default.
- */
- Class<?> defaultsProviderClass() default Defaulted.class;
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
deleted file mode 100644
index 82a5c9c..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
+++ /dev/null
@@ -1,97 +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.object.defaults;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.commons.ClassExtensions;
-import org.apache.isis.core.metamodel.commons.ClassUtil;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-import lombok.NonNull;
-import lombok.val;
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public final class DefaultsProviderUtil {
-
- public static final String DEFAULTS_PROVIDER_NAME_KEY_PREFIX = "isis.reflector.java.facets.defaulted.";
- public static final String DEFAULTS_PROVIDER_NAME_KEY_SUFFIX = ".providerName";
-
- public static String defaultsProviderNameFromConfiguration(
- final IsisConfiguration configuration,
- final Class<?> type) {
-
- val key = DEFAULTS_PROVIDER_NAME_KEY_PREFIX +
- type.getCanonicalName() +
- DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
- val defaultsProviderName = configuration
- .getEnvironment()
- .getProperty(key);
-
- return !_Strings.isNullOrEmpty(defaultsProviderName)
- ? defaultsProviderName
- : null;
- }
-
- public static Class<?> defaultsProviderOrNull(
- final Class<?> candidateClass,
- final String classCandidateName) {
-
- val type = candidateClass != null
- ? ClassUtil.implementingClassOrNull(
- candidateClass.getName(),
- DefaultsProvider.class,
- FacetHolder.class)
-
- : null;
-
- return type != null
- ? type
- : ClassUtil.implementingClassOrNull(
- classCandidateName,
- DefaultsProvider.class,
- FacetHolder.class);
- }
-
- public static Optional<DefaultsProvider<?>> providerFrom(
- final @Nullable String candidateEncoderDecoderName,
- final @Nullable Class<?> candidateEncoderDecoderClass,
- final @NonNull FacetHolder holder) {
-
- val defaultsProviderClass = DefaultsProviderUtil
- .defaultsProviderOrNull(candidateEncoderDecoderClass, candidateEncoderDecoderName);
-
- val defaultsProvider = defaultsProviderClass!=null
- ? (DefaultsProvider<?>) ClassExtensions
- .newInstance(defaultsProviderClass, FacetHolder.class, holder)
- : null;
-
- return Optional.ofNullable(defaultsProvider)
- .map(holder.getServiceInjector()::injectServicesInto);
-
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
deleted file mode 100644
index fb63010..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
+++ /dev/null
@@ -1,72 +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.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetAnnotation
-extends DefaultedFacetAbstract {
-
- public static Optional<DefaultedFacet> create(
- final IsisConfiguration config,
- final Class<?> annotatedClass,
- final FacetHolder holder) {
-
- return DefaultsProviderUtil.providerFrom(
- providerName(config, annotatedClass),
- providerClass(annotatedClass),
- holder)
- .map(defaultsProvider->new DefaultedFacetAnnotation(defaultsProvider, holder));
- }
-
- // -- CONSTRUCTOR
-
- private DefaultedFacetAnnotation(
- final DefaultsProvider<?> defaultsProvider,
- final FacetHolder holder) {
- super(defaultsProvider, holder);
- }
-
- // -- HELPER
-
- private static String providerName(final IsisConfiguration config, final Class<?> annotatedClass) {
-
- final Defaulted annotation = annotatedClass.getAnnotation(Defaulted.class);
- final String providerName = annotation.defaultsProviderName();
- if (!_Strings.isNullOrEmpty(providerName)) {
- return providerName;
- }
- return DefaultsProviderUtil.defaultsProviderNameFromConfiguration(config, annotatedClass);
- }
-
- private static Class<?> providerClass(final Class<?> annotatedClass) {
- final Defaulted annotation = annotatedClass.getAnnotation(Defaulted.class);
- return annotation.defaultsProviderClass();
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
deleted file mode 100644
index fd9406bb..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotationElseConfigurationFactory.java
+++ /dev/null
@@ -1,66 +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.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import javax.inject.Inject;
-
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetAnnotationElseConfigurationFactory
-extends FacetFactoryAbstract {
-
- @Inject
- public DefaultedFacetAnnotationElseConfigurationFactory(final MetaModelContext mmc) {
- super(mmc, FeatureType.OBJECTS_ONLY);
- }
-
- @Override
- public void process(final ProcessClassContext processClassContext) {
-
- final var cls = processClassContext.getCls();
- final var facetHolder = processClassContext.getFacetHolder();
- final var config = super.getConfiguration();
- final var defaultedIfAny = processClassContext.synthesizeOnType(Defaulted.class);
-
- addFacetIfPresent(
-
- // create from annotation, if present
- defaultedIfAny
- .flatMap(defaultedAnnot->DefaultedFacetAnnotation.create(config, cls, facetHolder))
- .or(
-
- // otherwise, try to create from configuration, if present
- ()->{
- final var providerName = DefaultsProviderUtil.defaultsProviderNameFromConfiguration(config, cls);
- return _Strings.isNotEmpty(providerName)
- ? DefaultedFacetFromConfiguration.create(providerName, facetHolder)
- : Optional.empty();
- })
- );
- }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java
deleted file mode 100644
index d449a29..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetFromConfiguration.java
+++ /dev/null
@@ -1,47 +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.object.defaults.annotcfg;
-
-import java.util.Optional;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
-import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
-
-public class DefaultedFacetFromConfiguration
-extends DefaultedFacetAbstract {
-
- @Nullable
- public static Optional<DefaultedFacetFromConfiguration> create(
- final String defaultedProviderName,
- final FacetHolder holder) {
-
- return DefaultsProviderUtil.providerFrom(defaultedProviderName, null, holder)
- .map(defaultsProvider->new DefaultedFacetFromConfiguration(defaultsProvider, holder));
- }
-
- private DefaultedFacetFromConfiguration(
- final DefaultsProvider<?> defaultsProvider,
- final FacetHolder holder) {
- super(defaultsProvider, holder);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
deleted file mode 100644
index 7e1d014..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetAbstract.java
+++ /dev/null
@@ -1,94 +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.object.parseable;
-
-import java.util.function.BiConsumer;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.commons.ClassExtensions;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-public abstract class ParseableFacetAbstract
-extends FacetAbstract
-implements ParseableFacet {
-
- private final Class<?> parserClass;
-
- // to delegate to
- private final ParseableFacetUsingParser parseableFacetUsingParser;
-
- public ParseableFacetAbstract(
- final String candidateParserName,
- final Class<?> candidateParserClass,
- final FacetHolder holder) {
-
- super(ParseableFacet.class, holder);
-
- this.parserClass = ParserUtil.parserOrNull(candidateParserClass, candidateParserName);
- this.parseableFacetUsingParser = hasParser()
- ? createParseableFacetUsingParser(holder)
- : null;
- }
-
- private ParseableFacetUsingParser createParseableFacetUsingParser(
- final FacetHolder holder) {
- final Parser<?> parser = (Parser<?>) ClassExtensions
- .newInstance(parserClass, FacetHolder.class, holder);
- return ParseableFacetUsingParser.create(parser, holder);
- }
-
- /**
- * Discover whether either of the candidate parser name or class is valid.
- */
- public boolean hasParser() {
- return parserClass != null;
- }
-
- /**
- * Guaranteed to implement the {@link Parser} class, thanks to generics in
- * the applib.
- */
- public Class<?> getParserClass() {
- return parserClass;
- }
-
- @Override
- public void visitAttributes(final BiConsumer<String, Object> visitor) {
- super.visitAttributes(visitor);
- visitor.accept("parser", parserClass.getName());
- }
-
- @Override
- public ManagedObject parseTextEntry(
- final ManagedObject original,
- final String entryText,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- return parseableFacetUsingParser.parseTextEntry(original, entryText, interactionInitiatedBy);
- }
-
- @Override
- public String parseableTextRepresentation(final ManagedObject existing) {
- return parseableFacetUsingParser.parseableTextRepresentation(existing);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
similarity index 93%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
index 8f75265..0f4a004 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParser.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.object.parseable.parser;
+package org.apache.isis.core.metamodel.facets.object.parseable;
import java.util.IllegalFormatException;
import java.util.function.BiConsumer;
@@ -28,13 +28,13 @@ import org.apache.isis.applib.adapters.Parser;
import org.apache.isis.applib.adapters.ParsingException;
import org.apache.isis.applib.adapters.ValueSemanticsProvider;
import org.apache.isis.applib.exceptions.recoverable.TextEntryParseException;
+import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResultSet;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderAbstract;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
import org.apache.isis.core.metamodel.interactions.InteractionHead;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
@@ -134,16 +134,11 @@ implements ParseableFacet {
}
}
- /**
- * TODO: need to fix genericity of using Parser<?>, for now suppressing
- * warnings.
- */
@Override
- @SuppressWarnings({ "unchecked", "rawtypes" })
public String parseableTextRepresentation(final ManagedObject contextAdapter) {
final Object pojo = UnwrapUtil.single(contextAdapter);
- return ((Parser)parser).parseableTextRepresentation(parserContext(), pojo);
+ return parser.parseableTextRepresentation(parserContext(), _Casts.uncheckedCast(pojo));
}
private ValueSemanticsProvider.Context parserContext() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
deleted file mode 100644
index c678fbf..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.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 org.apache.isis.core.metamodel.facets.object.parseable;
-
-import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.core.metamodel.commons.ClassUtil;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-public final class ParserUtil {
-
- private ParserUtil() {
- }
-
- public static Class<? extends Parser<?>> parserOrNull(final Class<?> candidateClass, final String classCandidateName) {
-
- final Class<? extends Parser<?>> type = candidateClass != null
- ? uncheckedCast(ClassUtil.implementingClassOrNull(
- candidateClass.getName(), Parser.class, FacetHolder.class))
- : null;
-
- return type != null
- ? type
- : uncheckedCast(ClassUtil.implementingClassOrNull(
- classCandidateName, Parser.class, FacetHolder.class));
- }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
deleted file mode 100644
index d85cf31..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/annotcfg/ParseableFacetFromConfiguration.java
+++ /dev/null
@@ -1,32 +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.object.parseable.annotcfg;
-
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetAbstract;
-
-public class ParseableFacetFromConfiguration extends ParseableFacetAbstract {
-
- public ParseableFacetFromConfiguration(
- final String candidateParserName,
- final FacetHolder holder) {
-
- super(candidateParserName, null, holder);
- }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
index 8a6eed5..2348af4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueFacetUsingSemanticsProviderFactory.java
@@ -32,7 +32,7 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider;
import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.title.parser.TitleFacetUsingRenderer;
import org.apache.isis.core.metamodel.facets.object.value.ImmutableFacetViaValueSemantics;
import org.apache.isis.core.metamodel.facets.object.value.MaxLengthFacetUsingParser;
@@ -49,7 +49,7 @@ extends FacetFactoryAbstract {
protected final void addValueFacet(final ValueSemanticsProviderAndFacetAbstract<T> valueSemantics) {
FacetUtil.addFacet(
new ValueFacetUsingSemanticsProvider(Can.ofSingleton(valueSemantics), valueSemantics.getFacetHolder()));
- installRelatedFacets(valueSemantics, valueSemantics.getFacetHolder());
+ installRelatedFacets(Can.of(valueSemantics), valueSemantics.getFacetHolder());
}
protected final void addAllFacetsForValueSemantics(
@@ -57,24 +57,25 @@ extends FacetFactoryAbstract {
final FacetHolder holder) {
FacetUtil.addFacet(
new ValueFacetUsingSemanticsProvider(valueSemantics, holder));
- installRelatedFacets(valueSemantics.getFirstOrFail(), holder);
+ installRelatedFacets(valueSemantics, holder);
}
// -- HELPER
private void installRelatedFacets(
- final ValueSemanticsProvider<?> semanticsProvider,
+ final Can<ValueSemanticsProvider<?>> semanticsProviders,
final FacetHolder holder) {
holder.addFacet(new ImmutableFacetViaValueSemantics(holder));
- if (semanticsProvider != null) {
+ semanticsProviders
+ .forEach(semanticsProvider->{
// install the EncodeableFacet if we've been given an EncoderDecoder
final EncoderDecoder<?> encoderDecoder = semanticsProvider.getEncoderDecoder();
if (encoderDecoder != null) {
//getServiceInjector().injectServicesInto(encoderDecoder);
- FacetUtil.addFacet(new EncodableFacetUsingEncoderDecoder(encoderDecoder, holder));
+ holder.addFacet(new EncodableFacetUsingEncoderDecoder(encoderDecoder, holder));
}
final Renderer<?> renderer = semanticsProvider.getRenderer();
@@ -104,7 +105,7 @@ extends FacetFactoryAbstract {
holder.addFacet(new DefaultedFacetUsingDefaultsProvider(defaultsProvider, holder));
}
- }
+ });
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
index 66a2b8b..e55ad99 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodels/dflt/ProgrammingModelFacetsJava11.java
@@ -44,7 +44,6 @@ import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFac
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory;
import org.apache.isis.core.metamodel.facets.object.callbacks.CallbackFacetFactory;
import org.apache.isis.core.metamodel.facets.object.choices.enums.EnumFacetUsingValueFacetUsingSemanticsProviderFactory;
-import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
import org.apache.isis.core.metamodel.facets.object.domainobject.DomainObjectAnnotationFacetFactory;
import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.DomainObjectLayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.object.domainservice.annotation.DomainServiceFacetAnnotationFactory;
@@ -214,8 +213,6 @@ extends ProgrammingModelAbstract {
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BookmarkPolicyFacetFallbackFactory(mmc));
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new HomePageFacetAnnotationFactory(mmc));
- addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new DefaultedFacetAnnotationElseConfigurationFactory(mmc));
-
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory(mmc));
addFactory(FacetProcessingOrder.E1_MEMBER_MODELLING, new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory(mmc));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
deleted file mode 100644
index 4b67590..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
+++ /dev/null
@@ -1,249 +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.object.defaults;
-
-import org.apache.isis.applib.adapters.DefaultsProvider;
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
-import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
-
-import lombok.val;
-
-public class DefaultedFacetFactoryTest
-extends AbstractFacetFactoryTest {
-
- private DefaultedFacetAnnotationElseConfigurationFactory facetFactory;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- facetFactory = new DefaultedFacetAnnotationElseConfigurationFactory(metaModelContext);
- }
-
- @Override
- protected void tearDown() throws Exception {
- facetFactory = null;
- super.tearDown();
- }
-
- public void testFacetPickedUp() {
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
- final DefaultedFacet facet = facetedMethod.getFacet(DefaultedFacet.class);
- assertNotNull(facet);
- assertTrue(facet instanceof DefaultedFacetAbstract);
- }
-
- public void testFacetFacetHolderStored() {
-
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
- final DefaultedFacetAbstract valueFacet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertEquals(facetedMethod, valueFacet.getFacetHolder());
- }
-
- public void testNoMethodsRemoved() {
-
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
-
- assertNoMethodsRemoved();
- }
-
- abstract static class DefaultsProviderNoop<T> implements DefaultsProvider<T> {
-
- @Override
- public abstract T getDefaultValue();
-
- }
-
- @Defaulted(defaultsProviderName = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedUsingDefaultsProvider")
- public static class MyDefaultedUsingDefaultsProvider extends DefaultsProviderNoop<MyDefaultedUsingDefaultsProvider> {
-
- /**
- * Required since is a DefaultsProvider.
- */
- public MyDefaultedUsingDefaultsProvider() {
- }
-
- @Override
- public MyDefaultedUsingDefaultsProvider getDefaultValue() {
- return new MyDefaultedUsingDefaultsProvider();
- }
- }
-
- public void testDefaultedUsingDefaultsProviderName() {
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedUsingDefaultsProvider.class, methodRemover, facetedMethod));
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertEquals(MyDefaultedUsingDefaultsProvider.class, facet.getDefaultsProviderClass());
- }
-
- @Defaulted(defaultsProviderClass = MyDefaultedUsingDefaultsProviderClass.class)
- public static class MyDefaultedUsingDefaultsProviderClass extends DefaultsProviderNoop<MyDefaultedUsingDefaultsProviderClass> {
-
- /**
- * Required since is a DefaultsProvider.
- */
- public MyDefaultedUsingDefaultsProviderClass() {
- }
-
- @Override
- public MyDefaultedUsingDefaultsProviderClass getDefaultValue() {
- return new MyDefaultedUsingDefaultsProviderClass();
- }
- }
-
- public void testDefaultedUsingDefaultsProviderClass() {
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedUsingDefaultsProviderClass.class, methodRemover, facetedMethod));
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertEquals(MyDefaultedUsingDefaultsProviderClass.class, facet.getDefaultsProviderClass());
- }
-
- public void testDefaultedMustBeADefaultsProvider() {
- // no test, because compiler prevents us from nominating a class that
- // doesn't
- // implement DefaultsProvider
- }
-
- @Defaulted(defaultsProviderClass = MyDefaultedWithoutNoArgConstructor.class)
- public static class MyDefaultedWithoutNoArgConstructor extends DefaultsProviderNoop<MyDefaultedWithoutNoArgConstructor> {
-
- // no no-arg constructor
-
- public MyDefaultedWithoutNoArgConstructor(final int value) {
- }
-
- @Override
- public MyDefaultedWithoutNoArgConstructor getDefaultValue() {
- return new MyDefaultedWithoutNoArgConstructor(0);
- }
-
- }
-
- public void testDefaultedMustHaveANoArgConstructor() {
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedWithoutNoArgConstructor.class, methodRemover, facetedMethod));
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertNull(facet);
- }
-
- @Defaulted(defaultsProviderClass = MyDefaultedWithoutPublicNoArgConstructor.class)
- public static class MyDefaultedWithoutPublicNoArgConstructor extends DefaultsProviderNoop<MyDefaultedWithoutPublicNoArgConstructor> {
-
- // no public no-arg constructor
- MyDefaultedWithoutPublicNoArgConstructor() {
- }
-
- public MyDefaultedWithoutPublicNoArgConstructor(final int value) {
- }
-
- @Override
- public MyDefaultedWithoutPublicNoArgConstructor getDefaultValue() {
- return new MyDefaultedWithoutPublicNoArgConstructor();
- }
-
- }
-
- public void testDefaultedHaveAPublicNoArgConstructor() {
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedWithoutPublicNoArgConstructor.class, methodRemover, facetedMethod));
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertNull(facet);
- }
-
- @Defaulted()
- public static class MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration extends DefaultsProviderNoop<MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration> {
-
- /**
- * Required since is a DefaultsProvider.
- */
- public MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration() {
- }
-
- @Override
- public MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration getDefaultValue() {
- return new MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration();
- }
- }
-
- public void testDefaultedProviderNameCanBePickedUpFromConfiguration() {
-
- val className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration";
- val configKey = DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
- metaModelContext
- .runWithConfigProperties(
- map->map.put(configKey, className),
- ()->{
-
- facetFactory.process(ProcessClassContext
- .forTesting(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-
- });
-
-
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertNotNull(facet);
- assertEquals(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, facet.getDefaultsProviderClass());
- }
-
- public static class NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration extends DefaultsProviderNoop<NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration> {
-
- /**
- * Required since is a DefaultsProvider.
- */
- public NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration() {
- }
-
- @Override
- public NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration getDefaultValue() {
- return new NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration();
- }
- }
-
- public void testNonAnnotatedDefaultedCanBePickedUpFromConfiguration() {
-
- val className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration";
- val configKey = DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX;
-
- metaModelContext
- .runWithConfigProperties(
- map->map.put(configKey, className),
- ()->{
-
- facetFactory.process(ProcessClassContext.forTesting(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
-
- });
-
- final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
- assertNotNull(facet);
- assertEquals(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, facet.getDefaultsProviderClass());
- }
-
- private String canonical(final String className) {
- return className.replace('$', '.');
- }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
index 563e969..2942a92 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/parseable/ParseableFacetUsingParserTest.java
@@ -39,7 +39,6 @@ import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
public class ParseableFacetUsingParserTest {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
index b83db45..0a1324a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/name/ParameterNameFacetTest.java
@@ -67,7 +67,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
@Test
public void verifyProgrammingModelNumberOfFactories() {
- assertEquals(94, programmingModel.streamFactories().count());
+ assertEquals(93, programmingModel.streamFactories().count());
}
@Test //verify we have the javac -parameter flag set when compiling this class
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index 2e281b8..87bff2a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -47,7 +47,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacetUsingParser;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
import org.apache.isis.core.metamodel.facets.value.string.StringValueSemantics;
import org.apache.isis.core.metamodel.spec.ManagedObject;