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 840109855f ISIS-3325: simplifies _TreeModel and renames it to
_TreeNodeMemento
840109855f is described below
commit 840109855fcccf32d1bf4cb7dcbcdd1e6d533f42
Author: andi-huber <[email protected]>
AuthorDate: Mon Jan 23 15:20:11 2023 +0100
ISIS-3325: simplifies _TreeModel and renames it to _TreeNodeMemento
---
.../tree/CausewayToWicketTreeAdapter.java | 37 +++++---
.../tree/_LoadableDetachableTreeModel.java | 103 ---------------------
.../ui/components/tree/_TreeExpansionModel.java | 18 ++--
.../wicket/ui/components/tree/_TreeModel.java | 57 ------------
.../ui/components/tree/_TreeModelTreeAdapter.java | 21 ++---
.../ui/components/tree/_TreeModelTreeProvider.java | 18 ++--
.../ui/components/tree/_TreeNodeMemento.java | 87 +++++++++++++++++
7 files changed, 136 insertions(+), 205 deletions(-)
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/CausewayToWicketTreeAdapter.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/CausewayToWicketTreeAdapter.java
index 830ca9bd3e..7e3b0d31f6 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/CausewayToWicketTreeAdapter.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/CausewayToWicketTreeAdapter.java
@@ -32,10 +32,12 @@ import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.causeway.applib.graph.tree.TreeNode;
+import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.viewer.wicket.model.models.ScalarModel;
import org.apache.causeway.viewer.wicket.model.models.ValueModel;
+import org.apache.causeway.viewer.wicket.model.util.WktContext;
import
org.apache.causeway.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
import lombok.val;
@@ -73,10 +75,13 @@ class CausewayToWicketTreeAdapter {
/**
* Wicket's Tree Component implemented for Causeway
*/
- private static class EntityTree extends NestedTree<_TreeModel> {
+ private static class EntityTree extends NestedTree<_TreeNodeMemento>
+ implements HasMetaModelContext {
private static final long serialVersionUID = 1L;
+ private transient MetaModelContext metaModelContext;
+
public static EntityTree of(
final String id, final ManagedObject treeNodeObject, final
MetaModelContext mmc) {
@@ -89,7 +94,7 @@ class CausewayToWicketTreeAdapter {
wrappingTreeAdapter.wrap(treeNode.getValue(),
treeNode.getPositionAsPath()),
wrappingTreeAdapter);
- val treeExpansionModel = _TreeExpansionModel.of(mmc,
+ val treeExpansionModel = _TreeExpansionModel.of(
treeNode.getTreeState().getExpandedNodePaths());
return new EntityTree(id,
@@ -99,18 +104,24 @@ class CausewayToWicketTreeAdapter {
private EntityTree(
final String id,
- final ITreeProvider<_TreeModel> provider,
+ final ITreeProvider<_TreeNodeMemento> provider,
final _TreeExpansionModel collapseExpandState) {
super(id, provider, collapseExpandState);
}
+ @Override
+ public MetaModelContext getMetaModelContext() {
+ return this.metaModelContext =
WktContext.computeIfAbsent(metaModelContext);
+ }
+
/**
* To use a custom component for the representation of a node's
content we override this method.
*/
@Override
- protected Component newContentComponent(final String id, final
IModel<_TreeModel> node) {
- final _TreeModel treeModel = node.getObject();
- final Component entityIconAndTitle = new
EntityIconAndTitlePanel(id, treeModel);
+ protected Component newContentComponent(final String id, final
IModel<_TreeNodeMemento> node) {
+ final _TreeNodeMemento treeModel = node.getObject();
+ final Component entityIconAndTitle = new EntityIconAndTitlePanel(
+ id, treeModel.asObjectAdapterModel(getMetaModelContext()));
return entityIconAndTitle;
}
@@ -118,20 +129,20 @@ class CausewayToWicketTreeAdapter {
* To hardcode Node's
<pre>AjaxFallbackLink.isEnabledInHierarchy()->true</pre> we override this
method.
*/
@Override
- public Component newNodeComponent(final String id, final
IModel<_TreeModel> model) {
+ public Component newNodeComponent(final String id, final
IModel<_TreeNodeMemento> model) {
- final Node<_TreeModel> node = new Node<_TreeModel>(id, this,
model) {
+ final Node<_TreeNodeMemento> node = new
Node<_TreeNodeMemento>(id, this, model) {
private static final long serialVersionUID = 1L;
@Override
- protected Component createContent(final String id, final
IModel<_TreeModel> model) {
+ protected Component createContent(final String id, final
IModel<_TreeNodeMemento> model) {
return EntityTree.this.newContentComponent(id, model);
}
@Override
protected MarkupContainer createJunctionComponent(final String
id) {
- final Node<_TreeModel> node = this;
+ final Node<_TreeNodeMemento> node = this;
final Runnable toggleExpandCollapse = (Runnable &
Serializable) this::toggle;
return new AjaxFallbackLink<Void>(id) {
@@ -168,7 +179,7 @@ class CausewayToWicketTreeAdapter {
* we override this method.
*/
@Override
- public State getState(final _TreeModel t) {
+ public State getState(final _TreeNodeMemento t) {
return treeExpansionModel().contains(t.getTreePath()) ?
State.EXPANDED : State.COLLAPSED;
}
@@ -177,7 +188,7 @@ class CausewayToWicketTreeAdapter {
* we override this method.
*/
@Override
- public void expand(final _TreeModel t) {
+ public void expand(final _TreeNodeMemento t) {
treeExpansionModel().onExpand(t);
super.expand(t);
}
@@ -187,7 +198,7 @@ class CausewayToWicketTreeAdapter {
* we override this method.
*/
@Override
- public void collapse(final _TreeModel t) {
+ public void collapse(final _TreeNodeMemento t) {
treeExpansionModel().onCollapse(t);
super.collapse(t);
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_LoadableDetachableTreeModel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_LoadableDetachableTreeModel.java
deleted file mode 100644
index d7d50156dd..0000000000
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_LoadableDetachableTreeModel.java
+++ /dev/null
@@ -1,103 +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.causeway.viewer.wicket.ui.components.tree;
-
-import java.util.NoSuchElementException;
-import java.util.Objects;
-
-import org.apache.wicket.model.LoadableDetachableModel;
-
-import org.apache.causeway.applib.graph.tree.TreePath;
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.core.metamodel.context.HasMetaModelContext;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.object.ManagedObjects;
-import org.apache.causeway.viewer.wicket.model.util.WktContext;
-
-import lombok.val;
-
-/**
- * Wicket's loadable/detachable model for TreeModel nodes.
- */
-class _LoadableDetachableTreeModel
-extends LoadableDetachableModel<_TreeModel>
-implements HasMetaModelContext {
- private static final long serialVersionUID = 1L;
-
- private final Bookmark bookmark;
- private final TreePath treePath;
- private final int hashCode;
-
- private transient MetaModelContext metaModelContext;
-
- public _LoadableDetachableTreeModel(final _TreeModel tModel) {
- super(tModel);
- this.treePath = tModel.getTreePath();
- this.bookmark = ManagedObjects.bookmarkElseFail(tModel.getObject());
-
- this.hashCode = Objects.hash(bookmark.hashCode(), treePath.hashCode());
- this.metaModelContext = tModel.getMetaModelContext();
- }
-
- /*
- * loads EntityModel using Oid (id)
- */
- @Override
- protected _TreeModel load() {
-
- val objAdapter = getObjectManager()
- .loadObject(bookmark)
- .orElseThrow(()->new NoSuchElementException(
- String.format("Tree creation: could not recreate
TreeModel from Bookmark: '%s'", bookmark)));
-
- final Object pojo = objAdapter.getPojo();
- if(pojo==null) {
- throw new NoSuchElementException(
- String.format("Tree creation: could not recreate Pojo from
Oid: '%s'", bookmark));
- }
-
- return new _TreeModel(getMetaModelContext(), objAdapter, treePath);
- }
-
- @Override
- public MetaModelContext getMetaModelContext() {
- return this.metaModelContext =
WktContext.computeIfAbsent(metaModelContext);
- }
-
- /*
- * Important! Models must be identifiable by their contained object. Also
IDs must be
- * unique within a tree structure.
- */
- @Override
- public boolean equals(final Object obj) {
- if (obj instanceof _LoadableDetachableTreeModel) {
- final _LoadableDetachableTreeModel other =
(_LoadableDetachableTreeModel) obj;
- return treePath.equals(other.treePath) &&
bookmark.equals(other.bookmark);
- }
- return false;
- }
-
- /*
- * Important! Models must be identifiable by their contained object.
- */
- @Override
- public int hashCode() {
- return hashCode;
- }
-}
\ No newline at end of file
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeExpansionModel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeExpansionModel.java
index 8a32e363a4..1dff504104 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeExpansionModel.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeExpansionModel.java
@@ -24,26 +24,23 @@ import java.util.stream.Collectors;
import org.apache.wicket.model.IModel;
import org.apache.causeway.applib.graph.tree.TreePath;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
/**
* Wicket's model for collapse/expand state
*/
-class _TreeExpansionModel implements IModel<Set<_TreeModel>> {
+class _TreeExpansionModel implements IModel<Set<_TreeNodeMemento>> {
private static final long serialVersionUID = 648152234030889164L;
public static _TreeExpansionModel of(
- final MetaModelContext commonContext,
final Set<TreePath> expandedTreePaths) {
-
- return new _TreeExpansionModel(commonContext, expandedTreePaths);
+ return new _TreeExpansionModel( expandedTreePaths);
}
/**
* Happens on user interaction via UI.
* @param t
*/
- public void onExpand(final _TreeModel t) {
+ public void onExpand(final _TreeNodeMemento t) {
expandedTreePaths.add(t.getTreePath());
}
@@ -51,7 +48,7 @@ class _TreeExpansionModel implements IModel<Set<_TreeModel>> {
* Happens on user interaction via UI.
* @param t
*/
- public void onCollapse(final _TreeModel t) {
+ public void onCollapse(final _TreeNodeMemento t) {
expandedTreePaths.remove(t.getTreePath());
}
@@ -60,20 +57,19 @@ class _TreeExpansionModel implements
IModel<Set<_TreeModel>> {
}
private final Set<TreePath> expandedTreePaths;
- private final Set<_TreeModel> expandedNodes;
+ private final Set<_TreeNodeMemento> expandedNodes;
private _TreeExpansionModel(
- final MetaModelContext commonContext,
final Set<TreePath> expandedTreePaths) {
this.expandedTreePaths = expandedTreePaths;
this.expandedNodes = expandedTreePaths.stream()
- .map(tPath->new _TreeModel(commonContext, tPath))
+ .map(tPath->new _TreeNodeMemento(tPath))
.collect(Collectors.toSet());
}
@Override
- public Set<_TreeModel> getObject() {
+ public Set<_TreeNodeMemento> getObject() {
return expandedNodes;
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModel.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModel.java
deleted file mode 100644
index 2234b6c983..0000000000
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModel.java
+++ /dev/null
@@ -1,57 +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.causeway.viewer.wicket.ui.components.tree;
-
-import java.util.Objects;
-
-import org.apache.causeway.applib.graph.tree.TreePath;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
-import org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
-
-/**
- * Extending the UiObjectWkt to also provide a TreePath.
- */
-class _TreeModel extends UiObjectWkt {
- private static final long serialVersionUID = 8916044984628849300L;
-
- private final TreePath treePath;
- private final boolean isTreePathModelOnly;
-
- public _TreeModel(final MetaModelContext commonContext, final TreePath
treePath) {
- super(commonContext, commonContext.getObjectManager().adapt(0)); //
any bookmarkable will do
- this.treePath = treePath;
- this.isTreePathModelOnly = true;
- }
-
- public _TreeModel(final MetaModelContext commonContext, final
ManagedObject adapter, final TreePath treePath) {
- super(commonContext, Objects.requireNonNull(adapter));
- this.treePath = treePath;
- this.isTreePathModelOnly = false;
- }
-
- public TreePath getTreePath() {
- return treePath;
- }
-
- public boolean isTreePathModelOnly() {
- return isTreePathModelOnly;
- }
-
-}
\ No newline at end of file
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeAdapter.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeAdapter.java
index 6b1bb3e348..5fda8458cb 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeAdapter.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeAdapter.java
@@ -40,7 +40,7 @@ import lombok.NonNull;
@SuppressWarnings({"rawtypes", "unchecked"})
class _TreeModelTreeAdapter
implements
- TreeAdapter<_TreeModel>,
+ TreeAdapter<_TreeNodeMemento>,
HasMetaModelContext,
Serializable {
@@ -64,7 +64,7 @@ implements
}
@Override
- public Optional<_TreeModel> parentOf(final _TreeModel treeModel) {
+ public Optional<_TreeNodeMemento> parentOf(final _TreeNodeMemento
treeModel) {
if(treeModel==null) {
return Optional.empty();
}
@@ -73,7 +73,7 @@ implements
}
@Override
- public int childCountOf(final _TreeModel treeModel) {
+ public int childCountOf(final _TreeNodeMemento treeModel) {
if(treeModel==null) {
return 0;
}
@@ -81,7 +81,7 @@ implements
}
@Override
- public Stream<_TreeModel> childrenOf(final _TreeModel treeModel) {
+ public Stream<_TreeNodeMemento> childrenOf(final _TreeNodeMemento
treeModel) {
if(treeModel==null) {
return Stream.empty();
}
@@ -89,19 +89,18 @@ implements
.map(newPojoToTreeModelMapper(treeModel));
}
- _TreeModel wrap(final @NonNull Object pojo, final TreePath treePath) {
- return new _TreeModel(
- getMetaModelContext(),
- ManagedObject.adaptSingular(getSpecificationLoader(), pojo),
+ _TreeNodeMemento wrap(final @NonNull Object pojo, final TreePath treePath)
{
+ return new _TreeNodeMemento(
+ ManagedObject.adaptSingular(getSpecificationLoader(),
pojo).getBookmark().orElseThrow(),
treePath);
}
- private Object unwrap(final _TreeModel model) {
+ private Object unwrap(final _TreeNodeMemento model) {
Objects.requireNonNull(model);
- return model.getObject().getPojo();
+ return model.getPojo(getMetaModelContext());
}
- private Function<Object, _TreeModel> newPojoToTreeModelMapper(final
_TreeModel parent) {
+ private Function<Object, _TreeNodeMemento> newPojoToTreeModelMapper(final
_TreeNodeMemento parent) {
return IndexedFunction.zeroBased((indexWithinSiblings, pojo)->
wrap(pojo, parent.getTreePath().append(indexWithinSiblings)));
}
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeProvider.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeProvider.java
index 683231f2c1..bf810243fc 100644
---
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeProvider.java
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeModelTreeProvider.java
@@ -29,17 +29,17 @@ import
org.apache.causeway.commons.internal.collections._Lists;
/**
* Wicket's {@link ITreeProvider} implemented for Causeway
*/
-class _TreeModelTreeProvider implements ITreeProvider<_TreeModel> {
+class _TreeModelTreeProvider implements ITreeProvider<_TreeNodeMemento> {
private static final long serialVersionUID = 1L;
/**
* tree's root
*/
- private final _TreeModel primaryValue;
+ private final _TreeNodeMemento primaryValue;
private final _TreeModelTreeAdapter treeAdapter;
- _TreeModelTreeProvider(final _TreeModel primaryValue, final
_TreeModelTreeAdapter treeAdapter) {
+ _TreeModelTreeProvider(final _TreeNodeMemento primaryValue, final
_TreeModelTreeAdapter treeAdapter) {
this.primaryValue = primaryValue;
this.treeAdapter = treeAdapter;
}
@@ -49,25 +49,23 @@ class _TreeModelTreeProvider implements
ITreeProvider<_TreeModel> {
}
@Override
- public Iterator<? extends _TreeModel> getRoots() {
+ public Iterator<? extends _TreeNodeMemento> getRoots() {
return _Lists.singleton(primaryValue).iterator();
}
@Override
- public boolean hasChildren(final _TreeModel node) {
+ public boolean hasChildren(final _TreeNodeMemento node) {
return treeAdapter.childCountOf(node)>0;
}
@Override
- public Iterator<? extends _TreeModel> getChildren(final _TreeModel node) {
+ public Iterator<? extends _TreeNodeMemento> getChildren(final
_TreeNodeMemento node) {
return treeAdapter.childrenOf(node).iterator();
}
@Override
- public IModel<_TreeModel> model(final _TreeModel treeModel) {
- return treeModel.isTreePathModelOnly()
- ? Model.of(treeModel)
- : new _LoadableDetachableTreeModel(treeModel);
+ public IModel<_TreeNodeMemento> model(final _TreeNodeMemento treeModel) {
+ return Model.of(treeModel);
}
}
\ No newline at end of file
diff --git
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeNodeMemento.java
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeNodeMemento.java
new file mode 100644
index 0000000000..7e0f87dafc
--- /dev/null
+++
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/tree/_TreeNodeMemento.java
@@ -0,0 +1,87 @@
+/*
+ * 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.causeway.viewer.wicket.ui.components.tree;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+import org.apache.causeway.applib.graph.tree.TreePath;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.commons.internal.assertions._Assert;
+import org.apache.causeway.core.metamodel.context.MetaModelContext;
+import org.apache.causeway.viewer.wicket.model.models.ObjectAdapterModel;
+import org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
+
+import lombok.Getter;
+import lombok.NonNull;
+
+/**
+ * Memento for a pair of {@link Bookmark} and {@link TreePath}.
+ */
+class _TreeNodeMemento implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Getter private final Bookmark bookmark;
+ @Getter private final TreePath treePath;
+ private final int hashCode;
+
+ public _TreeNodeMemento(final TreePath treePath) {
+ this.bookmark = null;
+ this.treePath = treePath;
+ this.hashCode = Objects.hash(0, treePath.hashCode());
+ }
+
+ public _TreeNodeMemento(final @NonNull Bookmark bookmark, final @NonNull
TreePath treePath) {
+ this.bookmark = bookmark;
+ this.treePath = treePath;
+ this.hashCode = Objects.hash(bookmark.hashCode(), treePath.hashCode());
+ }
+
+ public boolean isTreePathMemento() {
+ return bookmark==null;
+ }
+
+ public Object getPojo(final MetaModelContext mmc) {
+ _Assert.assertFalse(isTreePathMemento());
+ return /*isTreePathMemento()
+ ? null
+ : */asObjectAdapterModel(mmc).getObject().getPojo();
+ }
+
+ public ObjectAdapterModel asObjectAdapterModel(final MetaModelContext mmc)
{
+ _Assert.assertFalse(isTreePathMemento());
+ return UiObjectWkt.ofBookmark(mmc, getBookmark());
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ if (obj instanceof _TreeNodeMemento) {
+ final _TreeNodeMemento other = (_TreeNodeMemento) obj;
+ return treePath.equals(other.treePath)
+ && bookmark.equals(other.bookmark);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return hashCode;
+ }
+
+}
\ No newline at end of file