You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/11/15 12:26:12 UTC

[isis] branch ISIS-2444 created (now e269b45)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at e269b45  ISIS-2444: adds links to running apps

This branch includes the following new commits:

     new 076bccc  ISIS-2444: updates examples.
     new 1cea2f2  ISIS-2444: adds links to preview apps here.
     new e269b45  ISIS-2444: adds links to running apps

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.



[isis] 01/03: ISIS-2444: updates examples.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 076bcccff2833542673e7aa51bdec6458ee3df3d
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Nov 15 12:14:21 2020 +0000

    ISIS-2444: updates examples.
---
 .../applib-classes/examples/value/Blob.java        | 32 ++++++++++++
 .../applib-classes/examples/value/Image.java       | 61 ----------------------
 .../applib-classes/examples/value/Markup.java      |  7 ++-
 .../examples/services/command/Command.java         |  2 +-
 .../services/iactn/InteractionContext.java         | 16 +-----
 .../examples/services/jaxb/JaxbService.java        | 22 ++++----
 .../examples/services/metamodel/BeanSort.java      | 16 ++++--
 7 files changed, 62 insertions(+), 94 deletions(-)

diff --git a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Blob.java b/api/applib/src/main/adoc/modules/applib-classes/examples/value/Blob.java
index 3dba41d..5b0c42f 100644
--- a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Blob.java
+++ b/api/applib/src/main/adoc/modules/applib-classes/examples/value/Blob.java
@@ -19,10 +19,12 @@
 
 package org.apache.isis.applib.value;
 
+import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.Objects;
+import java.util.Optional;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
@@ -32,14 +34,17 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.jaxb.PrimitiveJaxbAdapters;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.image._Images;
 
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
 // tag::refguide[]
 // end::refguide[]
 @Value(semanticsProviderName =
         "org.apache.isis.core.metamodel.facets.value.blobs.BlobValueSemanticsProvider")
 @XmlJavaTypeAdapter(Blob.JaxbToStringAdapter.class)   // for JAXB view model support
+@Log4j2
 public final class Blob implements NamedWithMimeType {
 
     /**
@@ -197,4 +202,31 @@ public final class Blob implements NamedWithMimeType {
         }
 
     }
+    
+    /**
+     * @return optionally the payload as a {@link BufferedImage} based on whether 
+     * this Blob's MIME type identifies as image and whether the payload is not empty 
+     */
+    public Optional<BufferedImage> asImage() {
+        
+        val bytes = getBytes();
+        if(bytes == null) {
+            return Optional.empty();
+        }
+        
+        val mimeType = getMimeType();
+        if(mimeType == null || !mimeType.getPrimaryType().equals("image")) {
+            return Optional.empty();
+        }
+        
+        try {
+            val img = _Images.fromBytes(getBytes());
+            return Optional.ofNullable(img);
+        } catch (Exception e) {
+            log.error("failed to read image data", e);
+            return Optional.empty();
+        }
+        
+    }
+    
 }
diff --git a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Image.java b/api/applib/src/main/adoc/modules/applib-classes/examples/value/Image.java
deleted file mode 100644
index 63df43c..0000000
--- a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Image.java
+++ /dev/null
@@ -1,61 +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.value;
-
-import java.io.Serializable;
-
-import org.apache.isis.applib.annotation.Value;
-
-/**
- * Represents an image.
- */
-// tag::refguide[]
-// end::refguide[]
-@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.image.ImageValueSemanticsProvider")
-public class Image implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private final int[][] image;
-
-    public Image(final int[][] image) {
-        this.image = image;
-    }
-
-    public Object getValue() {
-        return image;
-    }
-
-    @Override
-    public String toString() {
-        final int height = getHeight();
-        return "Image [size=" + height + "x" + (height == 0 || image[0] == null ? 0 : image[0].length) + "]";
-    }
-
-    public int[][] getImage() {
-        return image;
-    }
-
-    public int getHeight() {
-        return image == null ? 0 : image.length;
-    }
-
-    public int getWidth() {
-        return image == null ? 0 : image[0].length;
-    }
-}
diff --git a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Markup.java b/api/applib/src/main/adoc/modules/applib-classes/examples/value/Markup.java
index 65a4291..ee1bec6 100644
--- a/api/applib/src/main/adoc/modules/applib-classes/examples/value/Markup.java
+++ b/api/applib/src/main/adoc/modules/applib-classes/examples/value/Markup.java
@@ -38,7 +38,7 @@ import org.apache.isis.commons.internal.base._Strings;
 @Value(semanticsProviderName = 
         "org.apache.isis.core.metamodel.facets.value.markup.MarkupValueSemanticsProvider")
 @XmlJavaTypeAdapter(Markup.JaxbToStringAdapter.class)   // for JAXB view model support
-public class Markup implements HasHtml, Serializable {   // TODO: should be final
+public final class Markup implements HasHtml, Serializable {
 
     private static final long serialVersionUID = 1L;
     private final String html;
@@ -110,4 +110,9 @@ public class Markup implements HasHtml, Serializable {   // TODO: should be fina
         }
     }
 
+    /** syntactic sugar */
+    public static Markup valueOfHtml(String html) {
+        return new Markup(html);
+    }
+
 }
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/command/Command.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/command/Command.java
index c53302c..9460a63 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/command/Command.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/command/Command.java
@@ -279,7 +279,7 @@ public class Command implements HasUniqueId, HasUsername, HasCommandDto {
          * Implementation notes: set when the action is invoked (in the <tt>ActionInvocationFacet</tt>).
          * @param commandDto
          */
-        public void setCommandDto(final CommandDto commandDto, final int targetIdx) {
+        public void setCommandDto(final CommandDto commandDto) {
             Command.this.commandDto = commandDto;
         }
         /**
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/InteractionContext.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/InteractionContext.java
index 157e265..eb92628 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/InteractionContext.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/iactn/InteractionContext.java
@@ -30,12 +30,9 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.IsisInteractionScope;
 import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.applib.services.TransactionScopeListener;
-import org.apache.isis.applib.services.metrics.MetricsService;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import lombok.val;
 
 /**
  * This service (API and implementation) provides access to context information about any {@link Interaction}.
@@ -53,12 +50,10 @@ import lombok.val;
 @IsisInteractionScope
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
 //@Log4j2
-public class InteractionContext implements TransactionScopeListener, DisposableBean {
+public class InteractionContext implements DisposableBean {
 
     // end::refguide[]
 
-    private final MetricsService metricsService;
-
     /**
      * The currently active {@link Interaction} for this thread.
      */
@@ -74,15 +69,6 @@ public class InteractionContext implements TransactionScopeListener, DisposableB
         this.interaction = interaction;
     }
 
-
-    @Override
-    public void onTransactionEnding() {
-        val command = getInteraction().getCommand();
-        command.updater().setSystemStateChanged(
-                command.isSystemStateChanged() 
-                || metricsService.numberObjectsDirtied() > 0);
-    }
-
     @Override
     public void destroy() throws Exception {
         setInteraction(null);
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/JaxbService.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/JaxbService.java
index bf0344c..637f5b9 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/JaxbService.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/jaxb/JaxbService.java
@@ -126,7 +126,7 @@ public interface JaxbService {
             try {
                 return internalFromXml(jaxbContext, xml, unmarshallerProperties);
             } catch (Exception e) {
-                throw _Xml.verbose("unmarshalling XML", null, e);
+                throw _Xml.verboseException("unmarshalling XML", null, e);
             }
         }
 
@@ -140,7 +140,7 @@ public interface JaxbService {
                 val jaxbContext = jaxbContextForClass(domainClass);
                 return _Casts.uncheckedCast(internalFromXml(jaxbContext, xml, unmarshallerProperties));
             } catch (Exception e) {
-                throw _Xml.verbose("unmarshalling XML", domainClass, e);
+                throw _Xml.verboseException("unmarshalling XML", domainClass, e);
             }
         }
 
@@ -153,12 +153,10 @@ public interface JaxbService {
             val jaxbContext = jaxbContextForObject(domainObject);
             try {
                 val marshaller = jaxbContext.createMarshaller();
-
                 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
-                if(!_NullSafe.isEmpty(marshallerProperties)) {
-                    for (val entry : marshallerProperties.entrySet()) {
-                        marshaller.setProperty(entry.getKey(), entry.getValue());
-                    }
+                
+                for (val entry : _NullSafe.entrySet(marshallerProperties)) {
+                    marshaller.setProperty(entry.getKey(), entry.getValue());
                 }
 
                 configure(marshaller);
@@ -170,7 +168,7 @@ public interface JaxbService {
                 return xml;
 
             } catch (Exception e) {
-                throw _Xml.verbose("marshalling domain object to XML", domainClass, e);
+                throw _Xml.verboseException("marshalling domain object to XML", domainClass, e);
             }
         }
 
@@ -213,11 +211,11 @@ public interface JaxbService {
             }
             
             val unmarshaller = jaxbContext.createUnmarshaller();
-            if(!_NullSafe.isEmpty(unmarshallerProperties)) {
-                for (val entry : unmarshallerProperties.entrySet()) {
-                    unmarshaller.setProperty(entry.getKey(), entry.getValue());
-                }
+            
+            for (val entry : _NullSafe.entrySet(unmarshallerProperties)) {
+                unmarshaller.setProperty(entry.getKey(), entry.getValue());
             }
+            
             configure(unmarshaller);
 
             val pojo = unmarshaller.unmarshal(new StringReader(xml));
diff --git a/api/applib/src/main/adoc/modules/applib-svc/examples/services/metamodel/BeanSort.java b/api/applib/src/main/adoc/modules/applib-svc/examples/services/metamodel/BeanSort.java
index 63bb5fd..5fbe4fa 100644
--- a/api/applib/src/main/adoc/modules/applib-svc/examples/services/metamodel/BeanSort.java
+++ b/api/applib/src/main/adoc/modules/applib-svc/examples/services/metamodel/BeanSort.java
@@ -41,7 +41,7 @@ public enum BeanSort {
      *
      */
     // tag::refguide[]
-    ENTITY,
+    ENTITY_JDO, ENTITY_JPA,
     // end::refguide[]
     /**
      * Injectable object, associated with a lifecycle context
@@ -104,10 +104,14 @@ public enum BeanSort {
         return this == COLLECTION;
     }
 
-    public boolean isEntity() {
-        return this == ENTITY;
+    public boolean isEntityJdo() {
+        return this == ENTITY_JDO;
     }
-
+    
+    public boolean isEntityJpa() {
+        return this == ENTITY_JPA;
+    }
+    
     public boolean isUnknown() {
         return this == UNKNOWN;
     }
@@ -125,6 +129,10 @@ public enum BeanSort {
 
         return true;
     }
+    
+    public boolean isEntity() {
+        return isEntityJdo() || isEntityJpa();
+    }
 
 
     // tag::refguide[]


[isis] 02/03: ISIS-2444: adds links to preview apps here.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 1cea2f243fddc89cc232e755ad0b1c52a5086267
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Nov 15 12:14:32 2020 +0000

    ISIS-2444: adds links to preview apps here.
---
 antora/supplemental-ui/index.html | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index 5d3798f..c999b43 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -613,11 +613,13 @@ Examples
             <div class="col-lg-6 text-left text-lg-left">
               <p class="cta-text text-center" style="margin-block-end: 0; ">
                 Learn about Apache Isis™ by running the minimal <a href="docs/latest/starters/helloworld.html">helloworld</a>&nbsp;starter&nbsp;app.
+                You can see the app running <a href="https://helloworld.isis.incode.work/">here</a>.
               </p>
             </div>
             <div class="col-lg-6 text-left text-lg-left">
               <p class="cta-text text-center" style="margin-block-end: 0; ">
                 Develop your own Apache Isis™ app using the more structured <a href="docs/latest/starters/simpleapp.html">simpleapp</a>&nbsp;starter&nbsp;app.
+                You can see the app running <a href="https://helloworld.isis.incode.work/">here</a>.
               </p>
             </div>
           </div>


[isis] 03/03: ISIS-2444: adds links to running apps

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2444
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e269b455544655cfea82fbe4ee1e3a503b580bed
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Nov 15 12:25:45 2020 +0000

    ISIS-2444: adds links to running apps
---
 antora/supplemental-ui/index.html | 357 ++++++++++++++++++++------------------
 1 file changed, 185 insertions(+), 172 deletions(-)

diff --git a/antora/supplemental-ui/index.html b/antora/supplemental-ui/index.html
index c999b43..d4efed7 100644
--- a/antora/supplemental-ui/index.html
+++ b/antora/supplemental-ui/index.html
@@ -84,9 +84,9 @@
           <a href="#testimonials">What?</a>
           <ul>
             <li><a href="#testimonials">Reviews</a></li>
-<!--
-            <li><a href="#portfolio">Examples</a></li>
--->
+            <!--
+                        <li><a href="#portfolio">Examples</a></li>
+            -->
           </ul>
         </li>
         <li class="menu-has-children">
@@ -113,10 +113,10 @@
         <li class="menu-has-children">
           <a href="">ASF</a>
           <ul>
-<!--
-            <li><a href="#team">Our Committers</a></li>
-            <li><hr/></li>
--->
+            <!--
+                        <li><a href="#team">Our Committers</a></li>
+                        <li><hr/></li>
+            -->
             <li><a href="https://www.apache.org/">Apache Home Page</a></li>
             <li><a href="https://www.apache.org/events/current-event">Events</a></li>
             <li><a href="https://www.apache.org/licenses/">Licenses</a></li>
@@ -136,9 +136,9 @@
 
   <div class="intro-content">
     <h2>Build software that's<br/>in step with your business</h2>
-<!--
-    <img src="_/img/home/isis-logo-568x286.png"/>
--->
+    <!--
+        <img src="_/img/home/isis-logo-568x286.png"/>
+    -->
     <div>
       <p>
         <a href="#testimonials" class="btn-projects scrollto">Reviews</a>
@@ -327,18 +327,18 @@
         </div>
 
 
-<!--
-commented out Johan's, cos he's since come on board as a committer.
-        <div class="testimonial-item">
-          <p>
-            <img src="_/img/home/quote-sign-left.png" class="quote-sign-left" alt="">
-            Support from the Apache Isis community is excellent. I sense a love and dedication that is inspiring.
-            <img src="_/img/home/quote-sign-right.png" class="quote-sign-right" alt="">
-          </p>
-          <h3>Johan Doornenbal</h3>
-          <h4></h4>
-        </div>
--->
+        <!--
+        commented out Johan's, cos he's since come on board as a committer.
+                <div class="testimonial-item">
+                  <p>
+                    <img src="_/img/home/quote-sign-left.png" class="quote-sign-left" alt="">
+                    Support from the Apache Isis community is excellent. I sense a love and dedication that is inspiring.
+                    <img src="_/img/home/quote-sign-right.png" class="quote-sign-right" alt="">
+                  </p>
+                  <h3>Johan Doornenbal</h3>
+                  <h4></h4>
+                </div>
+        -->
 
 
 
@@ -431,67 +431,67 @@ commented out Johan's, cos he's since come on board as a committer.
 Examples
 ============================-->
 
-<!--
-  <section id="portfolio" class="wow fadeInUp">
-    <div class="container">
-      <div class="section-header">
-        <h2>Examples</h2>
-        <p>Apache Isis apps are often (though not exclusively) line-of-business systems.  The section below shows some examples of built using by the Apache Isis user community.  You can read more about these apps <a href="toc/powered-by/powered-by.html">here</a>.</p>
+  <!--
+    <section id="portfolio" class="wow fadeInUp">
+      <div class="container">
+        <div class="section-header">
+          <h2>Examples</h2>
+          <p>Apache Isis apps are often (though not exclusively) line-of-business systems.  The section below shows some examples of built using by the Apache Isis user community.  You can read more about these apps <a href="toc/powered-by/powered-by.html">here</a>.</p>
+        </div>
       </div>
-    </div>
 
-    <div class="container-fluid">
-      <div class="row no-gutters">
+      <div class="container-fluid">
+        <div class="row no-gutters">
 
-        <div class="col-lg-3 col-md-4">
-          <div class="portfolio-item wow fadeInUp">
-            <a href="_/img/home/portfolio/transportplanner/TransportDemand.png" class="portfolio-popup">
-              <img src="_/img/home/portfolio/transportplanner/TransportDemand.png" alt="">
-              <div class="portfolio-overlay">
-                <div class="portfolio-info"><h2 class="wow fadeInUp">Transport Planner</h2></div>
-              </div>
-            </a>
+          <div class="col-lg-3 col-md-4">
+            <div class="portfolio-item wow fadeInUp">
+              <a href="_/img/home/portfolio/transportplanner/TransportDemand.png" class="portfolio-popup">
+                <img src="_/img/home/portfolio/transportplanner/TransportDemand.png" alt="">
+                <div class="portfolio-overlay">
+                  <div class="portfolio-info"><h2 class="wow fadeInUp">Transport Planner</h2></div>
+                </div>
+              </a>
+            </div>
           </div>
-        </div>
 
-        <div class="col-lg-3 col-md-4">
-          <div class="portfolio-item wow fadeInUp">
-            <a href="_/img/home/portfolio/commapp/screenshot-1.png" class="portfolio-popup">
-              <img src="_/img/home/portfolio/commapp/screenshot-1.png" height="141px" alt="">
-              <div class="portfolio-overlay">
-                <div class="portfolio-info"><h2 class="wow fadeInUp">CommApp</h2></div>
-              </div>
-            </a>
+          <div class="col-lg-3 col-md-4">
+            <div class="portfolio-item wow fadeInUp">
+              <a href="_/img/home/portfolio/commapp/screenshot-1.png" class="portfolio-popup">
+                <img src="_/img/home/portfolio/commapp/screenshot-1.png" height="141px" alt="">
+                <div class="portfolio-overlay">
+                  <div class="portfolio-info"><h2 class="wow fadeInUp">CommApp</h2></div>
+                </div>
+              </a>
+            </div>
           </div>
-        </div>
 
-        <div class="col-lg-3 col-md-4">
-          <div class="portfolio-item wow fadeInUp">
-            <a href="_/img/home/portfolio/estatio/est-invoice.png" class="portfolio-popup">
-              <img src="_/img/home/portfolio/estatio/est-invoice.png" alt="">
-              <div class="portfolio-overlay">
-                <div class="portfolio-info"><h2 class="wow fadeInUp">Estatio</h2></div>
-              </div>
-            </a>
+          <div class="col-lg-3 col-md-4">
+            <div class="portfolio-item wow fadeInUp">
+              <a href="_/img/home/portfolio/estatio/est-invoice.png" class="portfolio-popup">
+                <img src="_/img/home/portfolio/estatio/est-invoice.png" alt="">
+                <div class="portfolio-overlay">
+                  <div class="portfolio-info"><h2 class="wow fadeInUp">Estatio</h2></div>
+                </div>
+              </a>
+            </div>
           </div>
-        </div>
 
-        <div class="col-lg-3 col-md-4">
-          <div class="portfolio-item wow fadeInUp">
-            <a href="_/img/home/portfolio/gesconsultor-grc/fig-3-custom-ui-analyzing-risk-scenarios.png" class="portfolio-popup">
-              <img src="_/img/home/portfolio/gesconsultor-grc/fig-3-custom-ui-analyzing-risk-scenarios.png" alt="">
-              <div class="portfolio-overlay">
-                <div class="portfolio-info"><h2 class="wow fadeInUp">GRC</h2></div>
-              </div>
-            </a>
+          <div class="col-lg-3 col-md-4">
+            <div class="portfolio-item wow fadeInUp">
+              <a href="_/img/home/portfolio/gesconsultor-grc/fig-3-custom-ui-analyzing-risk-scenarios.png" class="portfolio-popup">
+                <img src="_/img/home/portfolio/gesconsultor-grc/fig-3-custom-ui-analyzing-risk-scenarios.png" alt="">
+                <div class="portfolio-overlay">
+                  <div class="portfolio-info"><h2 class="wow fadeInUp">GRC</h2></div>
+                </div>
+              </a>
+            </div>
           </div>
+
         </div>
 
       </div>
-
-    </div>
-  </section>
--->
+    </section>
+  -->
 
 
   <!--==========================
@@ -528,14 +528,14 @@ Examples
 
       </div>
 
-<!--
-      <div>
-        <li><i class="ion-android-checkmark-circle"></i>Write your business logic in entities, domain services or view models.</li>
-        <li><i class="ion-android-checkmark-circle"></i>Your users access your business logic through a web UI that the framework dynamically renders from your domain model.</li>
-        <li><i class="ion-android-checkmark-circle"></i>Consume your domain model from other apps through REST API or the Swagger UI, also dynamically rendered.</li>
-        <li><i class="ion-android-checkmark-circle"></i>Integration test your domain model, on top of JUnit 5.  No need to write slow &amp; fragile Selenium tests, as the UI is automatically generated.</li>
-      </div>
--->
+      <!--
+            <div>
+              <li><i class="ion-android-checkmark-circle"></i>Write your business logic in entities, domain services or view models.</li>
+              <li><i class="ion-android-checkmark-circle"></i>Your users access your business logic through a web UI that the framework dynamically renders from your domain model.</li>
+              <li><i class="ion-android-checkmark-circle"></i>Consume your domain model from other apps through REST API or the Swagger UI, also dynamically rendered.</li>
+              <li><i class="ion-android-checkmark-circle"></i>Integration test your domain model, on top of JUnit 5.  No need to write slow &amp; fragile Selenium tests, as the UI is automatically generated.</li>
+            </div>
+      -->
 
     </div>
   </section>
@@ -580,7 +580,7 @@ Examples
           </div>
         </div>
 
-		<div class="col-lg-4">
+        <div class="col-lg-4">
           <div class="box wow fadeInLeft" data-wow-delay="0.1s">
             <div class="pic"><img src="_/img/home/built-with/project-lombok.png" height="105px" alt=""></div>
             <p class="description"><a href="https://projectlombok.org/">Lombok</a> is a java library that automatically plugs into your editor and build tools, spicing up your java. Never write another getter or equals method again.</p>
@@ -613,22 +613,24 @@ Examples
             <div class="col-lg-6 text-left text-lg-left">
               <p class="cta-text text-center" style="margin-block-end: 0; ">
                 Learn about Apache Isis™ by running the minimal <a href="docs/latest/starters/helloworld.html">helloworld</a>&nbsp;starter&nbsp;app.
-                You can see the app running <a href="https://helloworld.isis.incode.work/">here</a>.
+                You can see the app running <a href="https://helloworld.isis.incode.work/" target="_blank">here</a>.
               </p>
             </div>
             <div class="col-lg-6 text-left text-lg-left">
               <p class="cta-text text-center" style="margin-block-end: 0; ">
                 Develop your own Apache Isis™ app using the more structured <a href="docs/latest/starters/simpleapp.html">simpleapp</a>&nbsp;starter&nbsp;app.
-                You can see the app running <a href="https://helloworld.isis.incode.work/">here</a>.
+                You can see the app running <a href="https://simpleapp.isis.incode.work/" target="_blank">here</a>.
               </p>
             </div>
           </div>
           <div class="row">
             <div class="col-lg-6 text-left text-lg-left">
               <p>
-                <pre id="helloworld-text">
-curl https://codeload.github.com/apache/isis-app-helloworld/zip/master | jar xv
-cd isis-app-helloworld-master
+              <pre id="helloworld-text">
+APP=isis-app-helloworld
+BRANCH=master
+curl https://codeload.github.com/apache/$APP/zip/$BRANCH | jar xv
+cd $APP-$BRANCH
 
 mvn clean install
 mvn spring-boot:run</pre>
@@ -637,8 +639,10 @@ mvn spring-boot:run</pre>
             <div class="col-lg-6 text-left text-lg-left">
               <p>
               <pre id="simpleapp-text">
-curl https://codeload.github.com/apache/isis-app-simpleapp/zip/master | jar xv
-cd isis-app-simpleapp-master
+APP=isis-app-simpleapp
+BRANCH=master
+curl https://codeload.github.com/apache/$APP/zip/$BRANCH | jar xv
+cd $APP-$BRANCH
 
 mvn clean install
 mvn -pl webapp spring-boot:run</pre>
@@ -657,7 +661,15 @@ mvn -pl webapp spring-boot:run</pre>
               </p>
             </div>
           </div>
+          <div class="row">
+            <div class="col-lg-12 text-left text-lg-left">
+              <p class="cta-text text-center" style="margin-block-end: 0; margin-top: 20px;">
+                You can also explore the Apache Isis programming model through the demo app, running <a href="https://demo-wicket.isis.incode.work/" target="_blank">here</a>.
+              </p>
+            </div>
+          </div>
 
+<!--
           <div class="row">
             <p class="cta-text text-center" style="margin-block-end: 0; margin-left: 20px; margin-top: 20px;">
               If you want to use the previous 1.x version, you can use these Maven archetypes.
@@ -695,9 +707,10 @@ mvn -pl webapp jetty:run</pre>
               </p>
             </div>
         </div>
+-->
+        </div>
       </div>
     </div>
-    </div>
   </section>
 
   <!--==========================
@@ -741,78 +754,78 @@ mvn -pl webapp jetty:run</pre>
       </div>
     </div>
 
-<!--
-    <section id="team" class="wow fadeInUp">
-      <div class="container">
-        <div class="section-header">
-          <h2>Committers</h2>
-        </div>
-        <div class="row">
-          <div class="col-md-12">
-            <p class="cta-text">Apache Isis currently has 14 committers, including:</p>
-          </div>
-        </div>
-        <div class="row">
-          <div class="col-lg-3 col-md-6">
-            <div class="member">
-              <div class="pic"><img src="_/img/home/team/DanHaywood.jfif" height="255px" alt=""></div>
-              <div class="details">
-                <h4>Dan Haywood</h4>
-                <span>Haywood Associates Ltd.</span>
-                <div class="social">
-                  <a href="https://github.com/danhaywood"><i class="fa fa-github"></i></a>
-                  <a href="https://twitter.com/dkhaywood"><i class="fa fa-twitter"></i></a>
-                  <a href="https://www.linkedin.com/in/dkhaywood"><i class="fa fa-linkedin"></i></a>
-                </div>
+    <!--
+        <section id="team" class="wow fadeInUp">
+          <div class="container">
+            <div class="section-header">
+              <h2>Committers</h2>
+            </div>
+            <div class="row">
+              <div class="col-md-12">
+                <p class="cta-text">Apache Isis currently has 14 committers, including:</p>
               </div>
             </div>
-          </div>
+            <div class="row">
+              <div class="col-lg-3 col-md-6">
+                <div class="member">
+                  <div class="pic"><img src="_/img/home/team/DanHaywood.jfif" height="255px" alt=""></div>
+                  <div class="details">
+                    <h4>Dan Haywood</h4>
+                    <span>Haywood Associates Ltd.</span>
+                    <div class="social">
+                      <a href="https://github.com/danhaywood"><i class="fa fa-github"></i></a>
+                      <a href="https://twitter.com/dkhaywood"><i class="fa fa-twitter"></i></a>
+                      <a href="https://www.linkedin.com/in/dkhaywood"><i class="fa fa-linkedin"></i></a>
+                    </div>
+                  </div>
+                </div>
+              </div>
 
-          <div class="col-lg-3 col-md-6">
-            <div class="member">
-              <div class="pic"><img src="_/img/home/team/AndiHuber.jpg" height="255px" alt=""></div>
-              <div class="details">
-                <h4>Andi Huber</h4>
-                <span>Java Enthusiast</span>
-                <div class="social">
-                  <a href="https://github.com/andi-huber"><i class="fa fa-github"></i></a>
+              <div class="col-lg-3 col-md-6">
+                <div class="member">
+                  <div class="pic"><img src="_/img/home/team/AndiHuber.jpg" height="255px" alt=""></div>
+                  <div class="details">
+                    <h4>Andi Huber</h4>
+                    <span>Java Enthusiast</span>
+                    <div class="social">
+                      <a href="https://github.com/andi-huber"><i class="fa fa-github"></i></a>
+                    </div>
+                  </div>
                 </div>
               </div>
-            </div>
-          </div>
 
-          <div class="col-lg-3 col-md-6">
-            <div class="member">
-              <div class="pic"><img src="_/img/home/team/JeroenVanDerWal.jfif" height="255px" alt=""></div>
-              <div class="details">
-                <h4>Jeroen van der Wal</h4>
-                <span>Incode Software</span>
-                <div class="social">
-                  <a href="https://github.com/jcvanderwal"><i class="fa fa-github"></i></a>
-                  <a href="https://www.linkedin.com/in/jcvanderwal/"><i class="fa fa-linkedin"></i></a>
+              <div class="col-lg-3 col-md-6">
+                <div class="member">
+                  <div class="pic"><img src="_/img/home/team/JeroenVanDerWal.jfif" height="255px" alt=""></div>
+                  <div class="details">
+                    <h4>Jeroen van der Wal</h4>
+                    <span>Incode Software</span>
+                    <div class="social">
+                      <a href="https://github.com/jcvanderwal"><i class="fa fa-github"></i></a>
+                      <a href="https://www.linkedin.com/in/jcvanderwal/"><i class="fa fa-linkedin"></i></a>
+                    </div>
+                  </div>
                 </div>
               </div>
-            </div>
-          </div>
 
-          <div class="col-lg-3 col-md-6">
-            <div class="member">
-              <div class="pic"><img src="_/img/home/team/JohanDoornenbal.jfif" height="255px" alt=""></div>
-              <div class="details">
-                <h4>Johan Doornenbal</h4>
-                <span>Incode Software</span>
-                <div class="social">
-                  <a href="https://github.com/johandoornenbal"><i class="fa fa-github"></i></a>
-                  <a href="https://www.linkedin.com/in/johan-doornenbal-3b286210/"><i class="fa fa-linkedin"></i></a>
+              <div class="col-lg-3 col-md-6">
+                <div class="member">
+                  <div class="pic"><img src="_/img/home/team/JohanDoornenbal.jfif" height="255px" alt=""></div>
+                  <div class="details">
+                    <h4>Johan Doornenbal</h4>
+                    <span>Incode Software</span>
+                    <div class="social">
+                      <a href="https://github.com/johandoornenbal"><i class="fa fa-github"></i></a>
+                      <a href="https://www.linkedin.com/in/johan-doornenbal-3b286210/"><i class="fa fa-linkedin"></i></a>
+                    </div>
+                  </div>
                 </div>
               </div>
             </div>
-          </div>
-        </div>
 
-      </div>
-    </section>
--->
+          </div>
+        </section>
+    -->
 
     <!--
           <div class="container mb-4">
@@ -903,32 +916,32 @@ mvn -pl webapp jetty:run</pre>
 <script src="_/js/home/lib/sticky/sticky.js"></script>
 
 <script>
-  document.querySelector('#helloworld-copy').addEventListener('click', async event => {
-    if (!navigator.clipboard) {
-      document.querySelector('#helloworld-copy').remove();
-      return
-    }
-    const text = document.querySelector('#helloworld-text').innerHTML;
-    try {
-      await navigator.clipboard.writeText(text);
-      event.target.textContent = 'Copied to clipboard';
-    } catch (err) {
-      alert("Failed to copy :-(", err)
-    }
-  });
-  document.querySelector('#simpleapp-copy').addEventListener('click', async event => {
-    if (!navigator.clipboard) {
-      document.querySelector('#simpleapp-copy').remove();
-      return
-    }
-    const text = document.querySelector('#simpleapp-text').innerHTML;
-    try {
-      await navigator.clipboard.writeText(text);
-      event.target.textContent = 'Copied to clipboard';
-    } catch (err) {
-      alert("Failed to copy :-(", err)
-    }
-  })
+    document.querySelector('#helloworld-copy').addEventListener('click', async event => {
+        if (!navigator.clipboard) {
+            document.querySelector('#helloworld-copy').remove();
+            return
+        }
+        const text = document.querySelector('#helloworld-text').innerHTML;
+        try {
+            await navigator.clipboard.writeText(text);
+            event.target.textContent = 'Copied to clipboard';
+        } catch (err) {
+            alert("Failed to copy :-(", err)
+        }
+    });
+    document.querySelector('#simpleapp-copy').addEventListener('click', async event => {
+        if (!navigator.clipboard) {
+            document.querySelector('#simpleapp-copy').remove();
+            return
+        }
+        const text = document.querySelector('#simpleapp-text').innerHTML;
+        try {
+            await navigator.clipboard.writeText(text);
+            event.target.textContent = 'Copied to clipboard';
+        } catch (err) {
+            alert("Failed to copy :-(", err)
+        }
+    })
 </script>
 
 <!-- Template Main Javascript File -->