You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/05/04 12:24:51 UTC
[isis] branch master updated (9a51b98 -> 318c156)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.
from 9a51b98 ISIS-1940 let the SortedSet-of-list adapter return a comparator=null
new dfe84e1 ISIS-898: hardcode AjaxFallbackLink to be enabled in hierarchy
new 5b92468 ISIS-1841: IsisContext: adds shortcuts for convenience
new 318c156 ISIS-898: completes proof of concept
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../core/integtestsupport/IsisSystemForTest.java | 2 +-
.../runtime/headless/IsisSystemBootstrapper.java | 2 +-
.../core/runtime/system/context/IsisContext.java | 45 ++++++--
.../components/tree/IsisToWicketTreeAdapter.java | 123 ++++++++++++++++++---
4 files changed, 146 insertions(+), 26 deletions(-)
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.
[isis] 03/03: ISIS-898: completes proof of concept
Posted by ah...@apache.org.
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
commit 318c15612abc5c3c50f4cdff0ee0dfbc732779a6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 4 14:24:14 2018 +0200
ISIS-898: completes proof of concept
Task-Url: https://issues.apache.org/jira/browse/ISIS-898
---
.../components/tree/IsisToWicketTreeAdapter.java | 85 ++++++++++++++--------
1 file changed, 56 insertions(+), 29 deletions(-)
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index 020d4ef..222623e 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -2,16 +2,18 @@ package org.apache.isis.viewer.wicket.ui.components.tree;
import java.io.Serializable;
import java.util.Iterator;
+import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Stream;
+import javax.resource.spi.IllegalStateException;
+
import org.apache.isis.applib.internal.collections._Lists;
-import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.tree.TreeAdapter;
import org.apache.isis.applib.tree.TreeNode;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -52,9 +54,6 @@ class IsisToWicketTreeAdapter {
public EntityTree(String id, ITreeProvider<EntityModel> provider) {
super(id, provider);
add(new WindowsTheme()); // TODO not required if Isis provides it's own css styles for tree-nodes
-
- super.setEnabled(true);
- super.setVisible(true);
}
/**
@@ -72,10 +71,10 @@ class IsisToWicketTreeAdapter {
*/
@Override
public Component newNodeComponent(String id, IModel<EntityModel> model) {
- return new Node<EntityModel>(id, this, model)
- {
+
+ final Node<EntityModel> node = new Node<EntityModel>(id, this, model) {
private static final long serialVersionUID = 1L;
-
+
@Override
protected Component createContent(String id, IModel<EntityModel> model) {
return EntityTree.this.newContentComponent(id, model);
@@ -84,43 +83,51 @@ class IsisToWicketTreeAdapter {
@Override
protected MarkupContainer createJunctionComponent(String id) {
- final Node<EntityModel> self = this;
+ final Node<EntityModel> node = this;
+ final Runnable toggleExpandCollapse = (Runnable & Serializable) this::toggle;
return new AjaxFallbackLink<Void>(id) {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
- toggle();
+ System.out.println("!!! before toggle");
+ toggleExpandCollapse.run();
+ System.out.println("!!! after toggle");
}
@Override
public boolean isEnabled() {
- return EntityTree.this.getProvider().hasChildren(self.getModelObject());
+ return EntityTree.this.getProvider().hasChildren(node.getModelObject());
}
@Override
public boolean isEnabledInHierarchy() {
- return true;
+ return true; // hardcoded -> true
}
};
}
+
};
+
+ node.setOutputMarkupId(true);
+
+ return node;
+
}
-
}
// -- HELPER
- private static class EntitiyModelTreeAdapter implements TreeAdapter<EntityModel>, Serializable {
+ private static class EntityModelTreeAdapter implements TreeAdapter<EntityModel>, Serializable {
private static final long serialVersionUID = 1L;
private final Class<? extends TreeAdapter> treeAdapterClass;
private transient TreeAdapter wrappedTreeAdapter;
- private EntitiyModelTreeAdapter(Class<? extends TreeAdapter> treeAdapterClass) {
+ private EntityModelTreeAdapter(Class<? extends TreeAdapter> treeAdapterClass) {
this.treeAdapterClass = treeAdapterClass;
}
@@ -172,7 +179,7 @@ class IsisToWicketTreeAdapter {
}
private PersistenceSession persistenceSession() {
- return IsisContext.getSessionFactory().getCurrentSession().getPersistenceSession();
+ return IsisContext.getPersistenceSession().orElse(null);
}
}
@@ -185,9 +192,9 @@ class IsisToWicketTreeAdapter {
private static final long serialVersionUID = 1L;
private final EntityModel primaryValue;
- private final EntitiyModelTreeAdapter treeAdapter;
+ private final EntityModelTreeAdapter treeAdapter;
- private EntityModelTreeProvider(EntityModel primaryValue, EntitiyModelTreeAdapter treeAdapter) {
+ private EntityModelTreeProvider(EntityModel primaryValue, EntityModelTreeAdapter treeAdapter) {
this.primaryValue = primaryValue;
this.treeAdapter = treeAdapter;
}
@@ -225,7 +232,7 @@ class IsisToWicketTreeAdapter {
private static ITreeProvider<EntityModel> toITreeProvider(ModelAbstract<ObjectAdapter> model) {
final TreeNode tree = (TreeNode) model.getObject().getObject();
- final EntitiyModelTreeAdapter wrappingTreeAdapter = new EntitiyModelTreeAdapter(tree.getTreeAdapterClass());
+ final EntityModelTreeAdapter wrappingTreeAdapter = new EntityModelTreeAdapter(tree.getTreeAdapterClass());
return new EntityModelTreeProvider(wrappingTreeAdapter.wrap(tree.getValue()), wrappingTreeAdapter);
}
@@ -233,33 +240,53 @@ class IsisToWicketTreeAdapter {
private static class LoadableDetachableEntityModel extends LoadableDetachableModel<EntityModel> {
private static final long serialVersionUID = 1L;
- private final Oid id;
+ private final RootOid id;
public LoadableDetachableEntityModel(EntityModel eModel) {
super(eModel);
-
- id = eModel.getObject().getOid();
+ id = (RootOid) eModel.getObject().getOid();
}
+ /*
+ * loads EntityModel using Oid (id)
+ */
@Override
protected EntityModel load() {
- //FIXME load EntityModel by id
- throw _Exceptions.notImplemented();
+
+ final PersistenceSession persistenceSession = IsisContext.getPersistenceSession()
+ .orElseThrow(()->new RuntimeException(new IllegalStateException(
+ String.format("Tree creation: missing a PersistenceSession to recreate EntityModel "
+ + "from Oid: '%s'", id)))
+ );
+
+ final ObjectAdapter objAdapter = persistenceSession.adapterFor(id);
+ if(objAdapter==null) {
+ throw new NoSuchElementException(
+ String.format("Tree creation: could not recreate EntityModel from Oid: '%s'", id));
+ }
+
+ final Object pojo = objAdapter.getObject();
+ if(pojo==null) {
+ throw new NoSuchElementException(
+ String.format("Tree creation: could not recreate Pojo from Oid: '%s'", id));
+ }
+
+ return new EntityModel(objAdapter);
}
- /**
+ /*
* Important! Models must be identifiable by their contained object.
*/
@Override
public boolean equals(Object obj) {
- if (obj instanceof EntityModel) {
- final EntityModel other = (EntityModel) obj;
- return other.getObject().getOid().equals(id);
+ if (obj instanceof LoadableDetachableEntityModel) {
+ final LoadableDetachableEntityModel other = (LoadableDetachableEntityModel) obj;
+ return id.equals(other.id);
}
return false;
}
- /**
+ /*
* Important! Models must be identifiable by their contained object.
*/
@Override
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.
[isis] 02/03: ISIS-1841: IsisContext: adds shortcuts for convenience
Posted by ah...@apache.org.
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
commit 5b92468d60dbdfe6c9c3a837b10f50484642d75f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 4 12:34:51 2018 +0200
ISIS-1841: IsisContext: adds shortcuts for convenience
also removes deprecated testReset()
---
.../core/integtestsupport/IsisSystemForTest.java | 2 +-
.../runtime/headless/IsisSystemBootstrapper.java | 2 +-
.../core/runtime/system/context/IsisContext.java | 45 ++++++++++++++++++----
3 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
index 1149542..c2fef4d 100644
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
+++ b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/IsisSystemForTest.java
@@ -327,7 +327,7 @@ public class IsisSystemForTest implements org.junit.rules.TestRule, DomainServic
// for subsequent tests; the attempt to bootstrap the framework will leave
// the IsisContext singleton as set.
- IsisContext.testReset();
+ IsisContext.clear();
final Set<String> validationErrors = ex.getValidationErrors();
final StringBuilder buf = new StringBuilder();
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
index b167b51..e587ec5 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/headless/IsisSystemBootstrapper.java
@@ -187,7 +187,7 @@ public class IsisSystemBootstrapper {
isisSessionFactory.destroyServicesAndShutdown();
pmf.close();
- IsisContext.testReset();
+ IsisContext.clear();
}
public void tearDownAllModules() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 9763ff5..3e4bf99 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -19,8 +19,15 @@
package org.apache.isis.core.runtime.system.context;
+import java.util.Optional;
+
import org.apache.isis.applib.internal.context._Context;
+import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
+import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.session.IsisSession;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
/**
@@ -40,6 +47,7 @@ public interface IsisContext {
/**
*
* @return Isis's session factory
+ * @throws IllegalStateException if IsisSessionFactory not initialized
*/
// Implementation Note: Populated only by {@link IsisSessionFactoryBuilder}.
public static IsisSessionFactory getSessionFactory() {
@@ -68,16 +76,39 @@ public interface IsisContext {
resetLogging();
}
- // -- DEPRECATIONS
+ // -- CONVENIENT SHORTCUTS
/**
- * Resets
- * @deprecated replaced by {@link #clear()}
- *
+ * @return framework's current PersistenceSession (if any)
+ * @throws IllegalStateException if IsisSessionFactory not initialized
+ */
+ public static Optional<PersistenceSession> getPersistenceSession() {
+ return Optional.ofNullable(getSessionFactory().getCurrentSession())
+ .map(IsisSession::getPersistenceSession);
+ }
+
+ /**
+ * @return framework's IsisConfiguration
+ * @throws IllegalStateException if IsisSessionFactory not initialized
+ */
+ public static IsisConfiguration getConfiguration() {
+ return getSessionFactory().getConfiguration();
+ }
+
+ /**
+ * @return framework's SpecificationLoader
+ * @throws IllegalStateException if IsisSessionFactory not initialized
+ */
+ public static SpecificationLoader getSpecificationLoader() {
+ return getSessionFactory().getSpecificationLoader();
+ }
+
+ /**
+ * @return framework's ServicesInjector
+ * @throws IllegalStateException if IsisSessionFactory not initialized
*/
- @Deprecated
- public static void testReset() {
- clear();
+ public static ServicesInjector getServicesInjector() {
+ return getSessionFactory().getServicesInjector();
}
// -- HELPER
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.
[isis] 01/03: ISIS-898: hardcode AjaxFallbackLink to be enabled in
hierarchy
Posted by ah...@apache.org.
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
commit dfe84e10c740cfadb19fe6bb68f6b15248227d43
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri May 4 11:56:18 2018 +0200
ISIS-898: hardcode AjaxFallbackLink to be enabled in hierarchy
Task-Url: https://issues.apache.org/jira/browse/ISIS-898
---
.../components/tree/IsisToWicketTreeAdapter.java | 70 ++++++++++++++++++++--
1 file changed, 66 insertions(+), 4 deletions(-)
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index 021d447..020d4ef 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -7,6 +7,7 @@ import java.util.Optional;
import java.util.stream.Stream;
import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.tree.TreeAdapter;
import org.apache.isis.applib.tree.TreeNode;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -19,8 +20,12 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
import org.apache.isis.viewer.wicket.model.models.ValueModel;
import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.Node;
import org.apache.wicket.extensions.markup.html.repeater.tree.theme.WindowsTheme;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
@@ -37,6 +42,9 @@ class IsisToWicketTreeAdapter {
// -- RENDERING
+ /**
+ * Wicket's Tree Component implemented for Isis
+ */
private static class EntityTree extends NestedTree<EntityModel> {
private static final long serialVersionUID = 1L;
@@ -44,6 +52,9 @@ class IsisToWicketTreeAdapter {
public EntityTree(String id, ITreeProvider<EntityModel> provider) {
super(id, provider);
add(new WindowsTheme()); // TODO not required if Isis provides it's own css styles for tree-nodes
+
+ super.setEnabled(true);
+ super.setVisible(true);
}
/**
@@ -52,7 +63,50 @@ class IsisToWicketTreeAdapter {
@Override
protected Component newContentComponent(String id, IModel<EntityModel> node) {
final EntityModel entityModel = node.getObject();
- return new EntityIconAndTitlePanel(id, entityModel);
+ final Component entityIconAndTitle = new EntityIconAndTitlePanel(id, entityModel);
+ return entityIconAndTitle;
+ }
+
+ /**
+ * To hardcode Node's <pre>AjaxFallbackLink.isEnabledInHierarchy()->true</pre> we override this method.
+ */
+ @Override
+ public Component newNodeComponent(String id, IModel<EntityModel> model) {
+ return new Node<EntityModel>(id, this, model)
+ {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected Component createContent(String id, IModel<EntityModel> model) {
+ return EntityTree.this.newContentComponent(id, model);
+ }
+
+ @Override
+ protected MarkupContainer createJunctionComponent(String id) {
+
+ final Node<EntityModel> self = this;
+
+ return new AjaxFallbackLink<Void>(id) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void onClick(AjaxRequestTarget target) {
+ toggle();
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return EntityTree.this.getProvider().hasChildren(self.getModelObject());
+ }
+
+ @Override
+ public boolean isEnabledInHierarchy() {
+ return true;
+ }
+
+ };
+ }
+ };
}
@@ -123,7 +177,9 @@ class IsisToWicketTreeAdapter {
}
-
+ /**
+ * Wicket's ITreeProvider implemented for Isis
+ */
private static class EntityModelTreeProvider implements ITreeProvider<EntityModel> {
private static final long serialVersionUID = 1L;
@@ -162,6 +218,10 @@ class IsisToWicketTreeAdapter {
}
+ /**
+ * @param model
+ * @return Wicket's ITreeProvider
+ */
private static ITreeProvider<EntityModel> toITreeProvider(ModelAbstract<ObjectAdapter> model) {
final TreeNode tree = (TreeNode) model.getObject().getObject();
@@ -183,7 +243,8 @@ class IsisToWicketTreeAdapter {
@Override
protected EntityModel load() {
- return null; //TODO [ahuber] load model by id, possibly not required
+ //FIXME load EntityModel by id
+ throw _Exceptions.notImplemented();
}
/**
@@ -192,7 +253,8 @@ class IsisToWicketTreeAdapter {
@Override
public boolean equals(Object obj) {
if (obj instanceof EntityModel) {
- return ((EntityModel) obj).getObject().getOid().equals(id);
+ final EntityModel other = (EntityModel) obj;
+ return other.getObject().getOid().equals(id);
}
return false;
}
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.