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/04/15 16:36:31 UTC

[isis] branch master updated: ISIS-2569: simplify _OidMarshaller

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 8db3bce  ISIS-2569: simplify _OidMarshaller
8db3bce is described below

commit 8db3bce7710debb04002b043df31dbd17016acd6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 15 18:36:07 2021 +0200

    ISIS-2569: simplify _OidMarshaller
---
 .../isis/core/metamodel/adapter/oid/Oid.java       | 47 ++++++++++++----------
 .../isis/core/metamodel/adapter/oid/_EmptyOid.java |  2 +-
 .../core/metamodel/adapter/oid/_OidMarshaller.java | 17 +-------
 .../core/metamodel/adapter/oid/_SimpleOid.java     |  2 +-
 .../isis/core/metamodel/spec/ManagedObjects.java   |  2 +-
 .../oid/OidMarshallerTest_roundtripping.java       |  4 +-
 .../adapter/oid/OidMarshallerTest_unmarshal.java   | 14 +++----
 .../ui/component/EventProviderAbstract.java        |  2 +-
 .../domainobjects/DomainObjectReprRenderer.java    |  2 +-
 .../viewer/resources/JsonParserHelper.java         |  2 +-
 .../wicket/model/models/BookmarkTreeNode.java      |  6 +--
 .../wicket/model/models/PageParameterUtil.java     |  2 +-
 .../widgets/breadcrumbs/BreadcrumbModel.java       |  2 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |  2 +-
 .../integration/ConverterForObjectAdapter.java     |  2 +-
 .../ConverterForObjectAdapterMemento.java          |  2 +-
 .../viewer/services/mementos/ObjectMementoWkt.java |  6 +--
 17 files changed, 53 insertions(+), 63 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index c2c3850..1321f97 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -75,18 +75,7 @@ public interface Oid extends Serializable {
                 identifier);
     }
     
-    // --
-    
-    /**
-     * A string representation of this {@link Oid}.
-     */
-    default String enString() {
-        return _OidMarshaller.marshal(this);
-    }
-
-    default boolean isEmpty() {
-        return false; // default, only overridden by Oid_Value
-    }
+    // -- PARTS THAT MAKE UP THE OID
     
     /**
      * The logical-type-name of the domain object this instance is representing.
@@ -95,23 +84,26 @@ public interface Oid extends Serializable {
     String getLogicalTypeName();
 
     
-    // -- REFACTORING ...
-    
     String getIdentifier();
-
-    public default Bookmark asBookmark() {
-        return Bookmark.of(getLogicalTypeName(), getIdentifier());
-    }
     
-    // -- DECODE FROM STRING 
+    // -- STRINGIFY
     
-    public static Oid parseEncoded(final String urlEncodedOidStr) {
+    /**
+     * A string representation of this {@link Oid}.
+     */
+    default String stringify() {
+        return _OidMarshaller.marshal(this);
+    }
+
+    // -- PARSING 
+    
+    public static Oid parseUrlEncoded(final String urlEncodedOidStr) {
         final String oidStr = _UrlDecoderUtil.urlDecode(urlEncodedOidStr);
         return parse(oidStr);
     }
 
     public static Oid parse(final String oidStr) {
-        return _OidMarshaller.unmarshal(oidStr, _SimpleOid.class);
+        return _OidMarshaller.unmarshal(oidStr);
     }
 
     // -- OBJECT LOADING
@@ -128,5 +120,18 @@ public interface Oid extends Serializable {
                         ObjectLoader.Request.of(spec, objectId)));
         
     }
+    
+    // -- EMPTY OID 
+    
+    default boolean isEmpty() {
+        return false; // default, only overridden by Oid_Value
+    }
+    
+    // -- CONVERSION
+    
+    public default Bookmark asBookmark() {
+        return Bookmark.of(getLogicalTypeName(), getIdentifier());
+    }
+    
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_EmptyOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_EmptyOid.java
index d95d378..b7abe85 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_EmptyOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_EmptyOid.java
@@ -28,7 +28,7 @@ final class _EmptyOid implements Oid {
     static final _EmptyOid INSTANCE = new _EmptyOid();
 
     @Override
-    public String enString() {
+    public String stringify() {
         return null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_OidMarshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_OidMarshaller.java
index a832670..1210378 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_OidMarshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_OidMarshaller.java
@@ -120,7 +120,7 @@ final class _OidMarshaller {
 
     // -- UNMARSHAL
 
-    static <T extends Oid> T unmarshal(String oidStr, Class<T> requestedType) {
+    static <T extends Oid> T unmarshal(String oidStr) {
 
         final Matcher matcher = OIDSTR_PATTERN.matcher(oidStr);
         if (!matcher.matches()) {
@@ -158,7 +158,6 @@ final class _OidMarshaller {
 
         if(oneToManyId == null) {
             if(aggregateOidParts.isEmpty()) {
-                ensureCorrectType(oidStr, requestedType, Oid.class);
                 return _Casts.uncheckedCast(
                         _SimpleOid.of(rootObjectType, rootIdentifier));
             } else {
@@ -182,18 +181,6 @@ final class _OidMarshaller {
         }
     }
 
-
-    private static <T> void ensureCorrectType(String oidStr, Class<T> requestedType, 
-            final Class<? extends Oid> actualType) {
-
-        if(!requestedType.isAssignableFrom(actualType)) {
-            throw new IllegalArgumentException(
-                    String.format("OID '%s' was unmarshealled to type '%s' which cannot be assigned "
-                            + "to requested type '%s'",
-                            oidStr, actualType.getSimpleName(), requestedType.getSimpleName()) );
-        }
-    }
-
     private static String getGroup(final Matcher matcher, final int group) {
         final int groupCount = matcher.groupCount();
         if(group > groupCount) {
@@ -203,6 +190,4 @@ final class _OidMarshaller {
         return _Strings.emptyToNull(val);
     }
 
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_SimpleOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_SimpleOid.java
index 325d19c..df730ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_SimpleOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/_SimpleOid.java
@@ -77,7 +77,7 @@ final class _SimpleOid implements Oid {
 
     @Override
     public String toString() {
-        return enString();
+        return stringify();
     }
     
     // -- HELPER
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index c95781d..4304dc1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -149,7 +149,7 @@ public final class ManagedObjects {
      */
     public static Optional<String> stringify(@Nullable ManagedObject managedObject) {
         return identify(managedObject)
-                .map(Oid::enString);
+                .map(Oid::stringify);
     }
     
     public static String stringifyElseFail(@Nullable ManagedObject managedObject) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
index 64fc758..1d2ef39 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
@@ -32,7 +32,7 @@ public class OidMarshallerTest_roundtripping {
     public void oid() {
         val oid = Oid.root(LogicalTypeTestFactory.cus(), "123");
 
-        final String enString = oid.enString();
+        final String enString = oid.stringify();
         final Oid deString = Oid.parse(enString);
         assertThat(deString, is(oid));
     }
@@ -41,7 +41,7 @@ public class OidMarshallerTest_roundtripping {
     public void oid_withLegacyVersionIgnored() {
         val oid = Oid.root(LogicalTypeTestFactory.cus(), "123");
 
-        final String enString = oid.enString();
+        final String enString = oid.stringify();
         final Oid deString = Oid.parse(enString + "^" + 90807L);
         assertThat(deString, is(oid));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
index fea8fa2..dd8ea7d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
@@ -58,11 +58,11 @@ public class OidMarshallerTest_unmarshal {
     public void persistentRoot() {
         final String oidStr = "CUS:123";
 
-        final Oid oid = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid.getLogicalTypeName(), is("CUS"));
         assertThat(oid.getIdentifier(), is("123"));
 
-        final Oid oid2 = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid2 = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid, equalTo(oid2));
     }
 
@@ -70,11 +70,11 @@ public class OidMarshallerTest_unmarshal {
     public void persistentRootWithFullyQualifiedSpecId() {
         final String oidStr = "com.planchase.ClassName:8";
 
-        final Oid oid = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid.getLogicalTypeName(), is("com.planchase.ClassName"));
         assertThat(oid.getIdentifier(), is("8"));
 
-        final Oid oid2 = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid2 = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid, equalTo(oid2));
     }
 
@@ -91,18 +91,18 @@ public class OidMarshallerTest_unmarshal {
     public void transientRoot() {
         final String oidStr = "!CUS:123";
 
-        final Oid oid = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid.getLogicalTypeName(), is("CUS"));
         assertThat(oid.getIdentifier(), is("123"));
 
-        final Oid oid2 = _OidMarshaller.unmarshal(oidStr, Oid.class);
+        final Oid oid2 = _OidMarshaller.unmarshal(oidStr);
         assertThat(oid, equalTo(oid2));
     }
 
 
     @Test(expected=IllegalArgumentException.class)
     public void badPattern() {
-        _OidMarshaller.unmarshal("xxx", Oid.class);
+        _OidMarshaller.unmarshal("xxx");
     }
 
 
diff --git a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
index 61a3046..08ac1c5 100644
--- a/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
+++ b/extensions/vw/fullcalendar/ui/src/main/java/org/apache/isis/extensions/fullcalendar/ui/component/EventProviderAbstract.java
@@ -106,7 +106,7 @@ public abstract class EventProviderAbstract implements EventProvider {
             val oid = ManagedObjects.identify(dereferencedManagedObject).orElse(null);
             if(oid!=null) {
 
-                final String oidStr = oid.enString();
+                final String oidStr = oid.stringify();
                 event.setId(oidStr + "-" + calendarName);
 
                 event.setClassName("fullCalendar2-event-" + calendarName);
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 92b9e34..8c7a1ec 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -178,7 +178,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
                     addLinkToSelf();
                 }
                 oidIfAny.ifPresent(oid->{
-                    val oidStr = oid.enString();
+                    val oidStr = oid.stringify();
                     getExtensions().mapPut("oid", oidStr);
                 });
             }
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
index bc68ed8..2d9b473 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/JsonParserHelper.java
@@ -152,7 +152,7 @@ public class JsonParserHelper {
         String domainType = matcher.group(1);
         String instanceId = matcher.group(2);
         
-        return Oid.forLogicalTypeNameAndIdentifier(domainType, instanceId).enString();
+        return Oid.forLogicalTypeNameAndIdentifier(domainType, instanceId).stringify();
     }
 
     private static String resourceFor(final ObjectSpecification objectSpec) {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index 869a82e..b4efeb5 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -62,7 +62,7 @@ public class BookmarkTreeNode implements Serializable {
             final int depth) {
         pageParameters = bookmarkableModel.getPageParametersWithoutUiHints();
         Oid oid = oidFrom(pageParameters);
-        this.oidNoVerStr = oid.enString();
+        this.oidNoVerStr = oid.stringify();
         this.oidNoVer = Oid.parse(oidNoVerStr);
 
         // replace oid with the noVer equivalent.
@@ -211,7 +211,7 @@ public class BookmarkTreeNode implements Serializable {
             })
             .filter(_NullSafe::isPresent)
             .map(parentOid->{
-                final String parentOidStr = parentOid.enString();
+                final String parentOidStr = parentOid.stringify();
                 return parentOidStr;
             })
             .forEach(parentOidStr->{
@@ -259,7 +259,7 @@ public class BookmarkTreeNode implements Serializable {
     public static String oidStrFrom(BookmarkableModel candidateBookmarkableModel) {
         final Oid oid = oidFrom(candidateBookmarkableModel.getPageParametersWithoutUiHints());
         return oid != null
-                ? oid.enString()
+                ? oid.stringify()
                 : null;
     }
 
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
index 3661c44..935678b 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageParameterUtil.java
@@ -232,7 +232,7 @@ public class PageParameterUtil {
         }
 
         try {
-            val oid = Oid.parseEncoded(encoded);
+            val oid = Oid.parseUrlEncoded(encoded);
             return oid.loadObject(mmc).orElse(null);
         } catch (final Exception e) {
             return null;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
index 87c8aa3..26a1234 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbModel.java
@@ -103,7 +103,7 @@ public class BreadcrumbModel implements Serializable {
         }
         try {
             final Oid unmarshal = Oid.parse(oidStr);
-            return unmarshal.enString();
+            return unmarshal.stringify();
         } catch(Exception ex) {
             return null;
         }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 1541ddd..2c6b753 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -81,7 +81,7 @@ extends PanelAbstract<Void, IModel<Void>> {
                     final PageParameters pageParameters = choice.getPageParametersWithoutUiHints();
                     final String oidStr = PageParameterNames.OBJECT_OID.getStringFrom(pageParameters);
                     final Oid resultOid = Oid.parse(oidStr);
-                    return resultOid.enString();
+                    return resultOid.stringify();
                 } catch (Exception ex) {
                     breadcrumbModel.remove(choice);
                     return null;
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
index d1c9b76..b9f232c 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapter.java
@@ -49,7 +49,7 @@ public class ConverterForObjectAdapter implements IConverter<ManagedObject> {
      */
     @Override
     public ManagedObject convertToObject(final String value, final Locale locale) {
-        val oid = Oid.parseEncoded(value);
+        val oid = Oid.parseUrlEncoded(value);
         val spec = objectManager.getMetaModelContext()
                 .getSpecificationLoader()
                 .specForLogicalTypeNameElseFail(oid.getLogicalTypeName());
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapterMemento.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapterMemento.java
index 2fe27f3..f672647 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapterMemento.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/ConverterForObjectAdapterMemento.java
@@ -53,7 +53,7 @@ public class ConverterForObjectAdapterMemento implements IConverter<ObjectMement
         if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
-        val oid = Oid.parseEncoded(value);
+        val oid = Oid.parseUrlEncoded(value);
         return commonContext.mementoFor(oid);
     }
 
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
index fd52352..cf26b95 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/services/mementos/ObjectMementoWkt.java
@@ -243,7 +243,7 @@ final class ObjectMementoWkt implements HasLogicalType, Serializable {
                     // we copy this updated oid string into our memento so that, if we retry,
                     // we will succeed second time around
 
-                    memento.persistentOidStr = oid.enString();
+                    memento.persistentOidStr = oid.stringify();
                 }
             }
 
@@ -418,7 +418,7 @@ final class ObjectMementoWkt implements HasLogicalType, Serializable {
             return;
         }
 
-        this.persistentOidStr = oid.enString();
+        this.persistentOidStr = oid.stringify();
         requires(persistentOidStr, "persistentOidStr");
 
         this.bookmark = oid.asBookmark();
@@ -446,7 +446,7 @@ final class ObjectMementoWkt implements HasLogicalType, Serializable {
 
         if(spec.isIdentifiable() || spec.isParented() ) {
             val oid = ManagedObjects.identifyElseFail(adapter);
-            persistentOidStr = oid.enString();
+            persistentOidStr = oid.stringify();
             bookmark = oid.asBookmark();
             if(adapter.getPojo() instanceof HintIdProvider) {
                 HintIdProvider provider = (HintIdProvider) adapter.getPojo();