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 2018/01/17 16:43:39 UTC

[isis] branch master updated (a0ac44c -> 212b089)

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

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


    from a0ac44c  ISIS-1743 fa-Icon mapping for mixins using '$$' method names
     new a1b99ff  ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"
     new b96383d  ISIS-1743: removes some unused imports from HelloWorldObject
     new a581939  Merge branch 'ISIS-1743'
     new 8ee5ecc  ISIS-1742: fixes bug that mixins not contributed by default.
     add dff3bb7  ISIS-1814: adds support for @XmlTransient when validating for presence of @XmlJavaTypeAdapter on a LocalDate
     add 0a7c4ca  ISIS-1813: bumps pom versions to 1.16.1-SNAPSHOT
     add eb9b70d  ISIS-1812: implements getOnType for OTOA on mixed in, avoiding NPE when attempt to render such a property in a table.
     add 4445703  ISIS-1808: extends Ticket (response of ErrorReportingService) to allow a "kitten URL" to optionally be returned.
     new 92ed023  Merge branch 'maint-1.16.1'
     new f6aa70c  ISIS-1743 fa-Icon mapping for mixins using '$$' method names
     new df1e555  ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"
     new 5badcf2  ISIS-1743: removes some unused imports from HelloWorldObject
     new 5c72372  Merge branch 'ISIS-1743' into maint-1.16.1
     new 212b089  Merge branch 'maint-1.16.1'

The 10 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:
 ...esentation-layer-spi_ErrorReportingService.adoc |  29 ++++++------
 .../ErrorReportingService/kitchensink-example.png  | Bin 28043 -> 180602 bytes
 .../apache/isis/applib/services/error/Ticket.java  |  36 ++++++++++++++-
 .../NotContributedFacetDerivedFromMixinFacet.java  |   2 +-
 ...ry.java => XmlJavaTypeAdapterFacetFactory.java} |  32 +++++++++++--
 .../XmlTransientFacet.java}                        |   7 ++-
 .../XmlTransientFacetAbstract.java}                |  13 +++---
 .../XmlTransientFacetDefault.java}                 |   8 ++--
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |   2 +-
 .../cssclassfa/annotprop/MixinInterceptor.java     |  50 +++++++++------------
 .../specloader/specimpl/ObjectMemberAbstract.java  |  17 +++----
 .../specimpl/OneToOneAssociationMixedIn.java       |   5 +++
 .../dflt/ProgrammingModelFacetsJava5.java          |   4 +-
 .../specimpl/ObjectActionMixedInTest.java          |  10 ++---
 .../specimpl/ObjectMemberAbstractTest.java         |  25 +++++++++++
 .../wicket/ui/errors/ExceptionStackTracePanel.html |   1 +
 .../wicket/ui/errors/ExceptionStackTracePanel.java |  20 +++++++++
 .../java/domainapp/dom/impl/HelloWorldObject.java  |   3 +-
 18 files changed, 186 insertions(+), 78 deletions(-)
 rename core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/{JaxbXmlJavaTypeAdapterFacetFactory.java => XmlJavaTypeAdapterFacetFactory.java} (92%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{MarkerFacet.java => jaxb/XmlTransientFacet.java} (84%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{object/icon/IconFacetAbstract.java => jaxb/XmlTransientFacetAbstract.java} (75%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{actions/homepage/HomePageFacetImpl.java => jaxb/XmlTransientFacetDefault.java} (81%)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java

-- 
To stop receiving notification emails like this one, please contact
['"commits@isis.apache.org" <co...@isis.apache.org>'].

[isis] 02/10: ISIS-1743: removes some unused imports from HelloWorldObject

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

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

commit b96383d84bd7d36dc51a409c1467c55bc593d8ad
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:12:30 2018 +0000

    ISIS-1743: removes some unused imports from HelloWorldObject
---
 .../helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java  | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index 2fe8bb8..54a1a35 100644
--- a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -21,10 +21,8 @@ package domainapp.dom.impl;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.VersionStrategy;
-import javax.ws.rs.HEAD;
 
 import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Ordering;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Auditing;
@@ -113,4 +111,5 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
     @javax.inject.Inject
     MessageService messageService;
 
+
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 08/10: ISIS-1743: removes some unused imports from HelloWorldObject

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

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

commit 5badcf27268f2556fa8172993eef8631ccac1ba9
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:12:30 2018 +0000

    ISIS-1743: removes some unused imports from HelloWorldObject
---
 .../helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java    | 1 +
 1 file changed, 1 insertion(+)

diff --git a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
index 672a528..54a1a35 100644
--- a/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
+++ b/example/application/helloworld/src/main/java/domainapp/dom/impl/HelloWorldObject.java
@@ -111,4 +111,5 @@ public class HelloWorldObject implements Comparable<HelloWorldObject> {
     @javax.inject.Inject
     MessageService messageService;
 
+
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 10/10: Merge branch 'maint-1.16.1'

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

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

commit 212b089a25e110a4efc8cc341606679c5d359190
Merge: 92ed023 5c72372
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:35:02 2018 +0000

    Merge branch 'maint-1.16.1'


-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 07/10: ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"

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

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

commit df1e5556520b2e08502bc707c74d0a13e3e4b5e1
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:12:06 2018 +0000

    ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"
---
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |  2 +-
 .../cssclassfa/annotprop/MixinInterceptor.java     | 50 +++++++++-------------
 .../specloader/specimpl/ObjectMemberAbstract.java  | 14 +++---
 .../specimpl/ObjectActionMixedInTest.java          | 10 ++---
 .../specimpl/ObjectMemberAbstractTest.java         | 25 +++++++++++
 5 files changed, 58 insertions(+), 43 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index bf40481..c529ea6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -109,7 +109,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
         }
     }
 
-	private String faIconIfAnyFor(String name) {
+    private String faIconIfAnyFor(String name) {
         final Map<Pattern, String> faIconByPattern = getFaIconByPattern();
 
         for (Map.Entry<Pattern, String> entry : faIconByPattern.entrySet()) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
index 21563f5..689e01e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
@@ -20,10 +20,12 @@
 package org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop;
 
 import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Optional;
 
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.core.commons.lang.NullSafe;
 import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract;
 
 /**
  * To solve <a href="https://issues.apache.org/jira/browse/ISIS-1743">ISIS-1743</a>.<br/>
@@ -34,42 +36,30 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 class MixinInterceptor {
 
 	/**
-	 * If method originates from a mixin and is named '$$' we infer the intended name 
+	 * If method originates from a mixin then we infer the intended name
 	 * from the mixin's class name.
 	 * 
-	 * @param method
+	 * @param method within the mixin type itself.
 	 * @return the intended name of the method
 	 */
-	public static String intendedNameOf(Method method) {
-		
-		if("$$".equals(method.getName()) && isMixin(method.getDeclaringClass()) ) {
-			final String mixinMethodName = inferMixinMethodName(method.getDeclaringClass());
-			if(mixinMethodName!=null)
-				return mixinMethodName; 
+	static String intendedNameOf(Method method) {
+
+		final Class<?> declaringClass = method.getDeclaringClass();
+		final List<Mixin> mixins = Annotations.getAnnotations(declaringClass, Mixin.class);
+		final Optional<Mixin> mixinIfAny = mixins.stream().findFirst();
+
+		if(mixinIfAny.isPresent()) {
+			final String methodName = method.getName();
+			final String mixinAnnotMethodName = mixinIfAny.get().method();
+			if(mixinAnnotMethodName.equals(methodName)) {
+    			final String mixinMethodName = ObjectMemberAbstract.deriveMemberNameFrom(method.getDeclaringClass().getName());
+                if(mixinMethodName!=null) {
+                    return mixinMethodName;
+                }
+			}
 		}
 		// default behavior
 		return method.getName();
 	}
-	
-	// -- HELPER
-	
-	private static boolean isMixin(Class<?> cls) {
-		return !NullSafe.isEmpty(Annotations.getAnnotations(cls, Mixin.class));
-	}
-
-	
-	/**
-	 * Parses class name of format 'Holder_mixinMethodName' and returns 'mixinMethodName'.
-	 * @param mixin
-	 * @return null if parsing fails
-	 */
-	private static String inferMixinMethodName(Class<?> mixin) {
-		final String className = mixin.getSimpleName();
-		final int p = className.indexOf('_');
-		if(p>0 && className.length()>(p+1)) { // min length := p+2 
-			return className.substring(p+1);
-		}
-		return null;
-	}
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index b059bf9..d428cb8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -348,19 +348,19 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     static String suffix(final ObjectAction mixinAction) {
-        return suffix(mixinAction.getOnType().getSingularName());
+        return deriveMemberNameFrom(mixinAction.getOnType().getSingularName());
     }
 
-    static String suffix(final String singularName) {
-        final String deriveFromUnderscore = derive(singularName, "_");
-        if(!Objects.equals(singularName, deriveFromUnderscore)) {
+    public static String deriveMemberNameFrom(final String mixinClassName) {
+        final String deriveFromUnderscore = derive(mixinClassName, "_");
+        if(!Objects.equals(mixinClassName, deriveFromUnderscore)) {
             return deriveFromUnderscore;
         }
-        final String deriveFromDollar = derive(singularName, "$");
-        if(!Objects.equals(singularName, deriveFromDollar)) {
+        final String deriveFromDollar = derive(mixinClassName, "$");
+        if(!Objects.equals(mixinClassName, deriveFromDollar)) {
             return deriveFromDollar;
         }
-        return singularName;
+        return mixinClassName;
     }
 
     private static String derive(final String singularName, final String separator) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
index 1677c7e..b90b853 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
@@ -32,31 +32,31 @@ public class ObjectActionMixedInTest {
 
         @Test
         public void exactly_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("_"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("_"));
             assertThat(s, is("_"));
         }
 
         @Test
         public void ends_with_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_"));
             assertThat(s, is("Abc_"));
         }
 
         @Test
         public void has_no_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("defghij"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("defghij"));
             assertThat(s, is("Defghij"));
         }
 
         @Test
         public void contains_one_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_def"));
             assertThat(s, is("Def"));
         }
 
         @Test
         public void contains_more_than_one_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def_ghi"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_def_ghi"));
             assertThat(s, is("Ghi"));
         }
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java
new file mode 100644
index 0000000..06d6c8d
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java
@@ -0,0 +1,25 @@
+package org.apache.isis.core.metamodel.specloader.specimpl;
+
+import org.hamcrest.CoreMatchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.*;
+
+public class ObjectMemberAbstractTest {
+
+    @Test
+    public void deriveMemberNameFrom_with_underscore() {
+        final String suffix = ObjectMemberAbstract.deriveMemberNameFrom("Customer_placeOrder");
+        Assert.assertThat(suffix, CoreMatchers.is(equalTo("placeOrder")));
+    }
+
+    @Test
+    public void deriveMemberNameFrom_with_dollar() {
+        final String suffix = ObjectMemberAbstract.deriveMemberNameFrom("Customer$placeOrder");
+        Assert.assertThat(suffix, CoreMatchers.is(equalTo("placeOrder")));
+    }
+
+
+
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 03/10: Merge branch 'ISIS-1743'

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

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

commit a581939cb542a5bb51ceaddff266efee1aa8c9fc
Merge: 3547e93 b96383d
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:13:53 2018 +0000

    Merge branch 'ISIS-1743'

 .../annotprop/CssClassFaFacetOnMemberFactory.java  |  7 +--
 .../cssclassfa/annotprop/MixinInterceptor.java     | 65 ++++++++++++++++++++++
 .../specloader/specimpl/ObjectMemberAbstract.java  | 17 +++---
 .../specimpl/ObjectActionMixedInTest.java          | 10 ++--
 .../specimpl/ObjectMemberAbstractTest.java         | 25 +++++++++
 .../java/domainapp/dom/impl/HelloWorldObject.java  |  3 +-
 6 files changed, 106 insertions(+), 21 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 06/10: ISIS-1743 fa-Icon mapping for mixins using '$$' method names

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

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

commit f6aa70c0e88ca5544b07a2fbd261c063074fcadf
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 15 22:01:29 2018 +0100

    ISIS-1743 fa-Icon mapping for mixins using '$$' method names
---
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |  9 +--
 .../cssclassfa/annotprop/MixinInterceptor.java     | 75 ++++++++++++++++++++++
 2 files changed, 77 insertions(+), 7 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index 7df2a4a..bf40481 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -94,7 +94,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
     private CssClassFaFacet createFromConfiguredRegexIfPossible(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
 
-        String value = faIconIfAnyFor(method);
+        String value = faIconIfAnyFor(MixinInterceptor.intendedNameOf(method));
         CssClassFaPosition position = CssClassFaPosition.LEFT;
         if (value != null) {
             int idxOfSeparator = value.indexOf(':');
@@ -109,12 +109,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
         }
     }
 
-    private String faIconIfAnyFor(Method method) {
-        final String name = method.getName();
-        return faIconIfAnyFor(name);
-    }
-
-    private String faIconIfAnyFor(String name) {
+	private String faIconIfAnyFor(String name) {
         final Map<Pattern, String> faIconByPattern = getFaIconByPattern();
 
         for (Map.Entry<Pattern, String> entry : faIconByPattern.entrySet()) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
new file mode 100644
index 0000000..21563f5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
@@ -0,0 +1,75 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.core.commons.lang.NullSafe;
+import org.apache.isis.core.metamodel.facets.Annotations;
+
+/**
+ * To solve <a href="https://issues.apache.org/jira/browse/ISIS-1743">ISIS-1743</a>.<br/>
+ * Could be better integrated into Isis' meta-model.
+ * 
+ * @author ahuber@apache.org
+ */
+class MixinInterceptor {
+
+	/**
+	 * If method originates from a mixin and is named '$$' we infer the intended name 
+	 * from the mixin's class name.
+	 * 
+	 * @param method
+	 * @return the intended name of the method
+	 */
+	public static String intendedNameOf(Method method) {
+		
+		if("$$".equals(method.getName()) && isMixin(method.getDeclaringClass()) ) {
+			final String mixinMethodName = inferMixinMethodName(method.getDeclaringClass());
+			if(mixinMethodName!=null)
+				return mixinMethodName; 
+		}
+		// default behavior
+		return method.getName();
+	}
+	
+	// -- HELPER
+	
+	private static boolean isMixin(Class<?> cls) {
+		return !NullSafe.isEmpty(Annotations.getAnnotations(cls, Mixin.class));
+	}
+
+	
+	/**
+	 * Parses class name of format 'Holder_mixinMethodName' and returns 'mixinMethodName'.
+	 * @param mixin
+	 * @return null if parsing fails
+	 */
+	private static String inferMixinMethodName(Class<?> mixin) {
+		final String className = mixin.getSimpleName();
+		final int p = className.indexOf('_');
+		if(p>0 && className.length()>(p+1)) { // min length := p+2 
+			return className.substring(p+1);
+		}
+		return null;
+	}
+
+}

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 05/10: Merge branch 'maint-1.16.1'

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

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

commit 92ed02333c37efd77a4f4dc50169f5c0fae36444
Merge: 8ee5ecc 4445703
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:26:05 2018 +0000

    Merge branch 'maint-1.16.1'

 ...esentation-layer-spi_ErrorReportingService.adoc |  29 ++++++++--------
 .../ErrorReportingService/kitchensink-example.png  | Bin 28043 -> 180602 bytes
 .../apache/isis/applib/services/error/Ticket.java  |  36 +++++++++++++++++++-
 ...ry.java => XmlJavaTypeAdapterFacetFactory.java} |  32 ++++++++++++++++--
 .../metamodel/facets/jaxb/XmlTransientFacet.java   |  29 ++++++++++++++++
 .../facets/jaxb/XmlTransientFacetAbstract.java     |  37 +++++++++++++++++++++
 .../facets/jaxb/XmlTransientFacetDefault.java      |  30 +++++++++++++++++
 .../specimpl/OneToOneAssociationMixedIn.java       |   5 +++
 .../dflt/ProgrammingModelFacetsJava5.java          |   4 +--
 .../wicket/ui/errors/ExceptionStackTracePanel.html |   1 +
 .../wicket/ui/errors/ExceptionStackTracePanel.java |  20 +++++++++++
 11 files changed, 204 insertions(+), 19 deletions(-)

diff --cc core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index b786d42,4435bca..65acf26
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@@ -38,17 -44,29 +38,17 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetSinceCollectionFactory;
  import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
  import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
- import org.apache.isis.core.metamodel.facets.jaxb.JaxbXmlJavaTypeAdapterFacetFactory;
+ import org.apache.isis.core.metamodel.facets.jaxb.XmlJavaTypeAdapterFacetFactory;
  import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
 -import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnMemberFactory;
  import org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFactory;
  import org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberFactory;
 -import org.apache.isis.core.metamodel.facets.members.describedas.staticmethod.DescribedAsFacetStaticMethodFactory;
  import org.apache.isis.core.metamodel.facets.members.disabled.forsession.DisableForSessionFacetViaMethodFactory;
 -import org.apache.isis.core.metamodel.facets.members.disabled.layout.DisabledFacetOnMemberFromPropertiesFactory;
  import org.apache.isis.core.metamodel.facets.members.disabled.method.DisableForContextFacetViaMethodFactory;
 -import org.apache.isis.core.metamodel.facets.members.disabled.staticmethod.DisabledFacetStaticMethodFacetFactory;
  import org.apache.isis.core.metamodel.facets.members.hidden.forsession.HideForSessionFacetViaMethodFactory;
 -import org.apache.isis.core.metamodel.facets.members.hidden.layout.HiddenFacetOnMemberFromPropertiesFactory;
  import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethodFactory;
 -import org.apache.isis.core.metamodel.facets.members.hidden.staticmethod.HiddenFacetStaticMethodFactory;
 -import org.apache.isis.core.metamodel.facets.members.named.annotprop.NamedFacetOnMemberFactory;
 -import org.apache.isis.core.metamodel.facets.members.named.staticmethod.NamedFacetStaticMethodFactory;
  import org.apache.isis.core.metamodel.facets.members.order.annotprop.MemberOrderFacetFactory;
 -import org.apache.isis.core.metamodel.facets.members.render.annotprop.RenderFacetOrResolveFactory;
  import org.apache.isis.core.metamodel.facets.object.ViewModelSemanticCheckingFacetFactory;
 -import org.apache.isis.core.metamodel.facets.object.actionorder.annotation.ActionOrderFacetAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.audit.markerifc.AuditableFacetMarkerInterfaceFactory;
 -import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetViaBookmarkableAnnotationElseFallbackFactory;
 +import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable.BookmarkPolicyFacetFallbackFactory;
  import org.apache.isis.core.metamodel.facets.object.callbacks.CreatedCallbackFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.callbacks.LoadCallbackFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackFacetFactory;
@@@ -288,9 -367,10 +288,9 @@@ public final class ProgrammingModelFace
          addFactory(new DisabledObjectFacetViaMethodFactory());
  
          addFactory(new CopyImmutableFacetOntoMembersFactory());
 -        addFactory(new ImmutableFacetMarkerInterfaceFactory());
  
          addFactory(new RecreatableObjectFacetFactory());
-         addFactory(new JaxbXmlJavaTypeAdapterFacetFactory());
+         addFactory(new XmlJavaTypeAdapterFacetFactory());
          addFactory(new MixinFacetForMixinAnnotationFactory());
  
  

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 04/10: ISIS-1742: fixes bug that mixins not contributed by default.

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

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

commit 8ee5ecc7070948153baca861112ccbd2fe2c78d4
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:16:32 2018 +0000

    ISIS-1742: fixes bug that mixins not contributed by default.
    
    Problem arose because of an incorrect inversion of the old deprecated NotContributedAs enum in terms of the new Contributed enum (NEITHER -> AS_BOTH)
---
 .../derived/NotContributedFacetDerivedFromMixinFacet.java               | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
index 1f57187..f65d314 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
@@ -31,7 +31,7 @@ public class NotContributedFacetDerivedFromMixinFacet extends NotContributedFace
 
     public NotContributedFacetDerivedFromMixinFacet(
             final FacetHolder holder) {
-        super(NotContributedAs.NEITHER, Contributed.AS_NEITHER, holder, Derivation.DERIVED);
+        super(NotContributedAs.NEITHER, Contributed.AS_BOTH, holder, Derivation.DERIVED);
     }
 
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 09/10: Merge branch 'ISIS-1743' into maint-1.16.1

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

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

commit 5c72372dcf6bad93921586dee483c0c937f0cda9
Merge: 4445703 5badcf2
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:34:39 2018 +0000

    Merge branch 'ISIS-1743' into maint-1.16.1

 .../annotprop/CssClassFaFacetOnMemberFactory.java  |  7 +--
 .../cssclassfa/annotprop/MixinInterceptor.java     | 65 ++++++++++++++++++++++
 .../specloader/specimpl/ObjectMemberAbstract.java  | 14 ++---
 .../specimpl/ObjectActionMixedInTest.java          | 10 ++--
 .../specimpl/ObjectMemberAbstractTest.java         | 25 +++++++++
 .../java/domainapp/dom/impl/HelloWorldObject.java  |  1 +
 6 files changed, 104 insertions(+), 18 deletions(-)

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.

[isis] 01/10: ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"

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

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

commit a1b99ff08db204984c61ca44e910064ead20f1a9
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 17 16:12:06 2018 +0000

    ISIS-1743: also supports mixins specified using @Mixin(method="...") eg "act" or "coll" as well as the default "$$"
---
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |  2 +-
 .../cssclassfa/annotprop/MixinInterceptor.java     | 50 +++++++++-------------
 .../specloader/specimpl/ObjectMemberAbstract.java  | 17 ++++----
 .../specimpl/ObjectActionMixedInTest.java          | 10 ++---
 .../specimpl/ObjectMemberAbstractTest.java         | 25 +++++++++++
 5 files changed, 60 insertions(+), 44 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index a72bac1..6b88929 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -84,7 +84,7 @@ public class CssClassFaFacetOnMemberFactory extends FacetFactoryAbstract impleme
         }
     }
 
-	private String faIconIfAnyFor(String name) {
+    private String faIconIfAnyFor(String name) {
         final Map<Pattern, String> faIconByPattern = getFaIconByPattern();
 
         for (Map.Entry<Pattern, String> entry : faIconByPattern.entrySet()) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
index 21563f5..689e01e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/MixinInterceptor.java
@@ -20,10 +20,12 @@
 package org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop;
 
 import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Optional;
 
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.core.commons.lang.NullSafe;
 import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract;
 
 /**
  * To solve <a href="https://issues.apache.org/jira/browse/ISIS-1743">ISIS-1743</a>.<br/>
@@ -34,42 +36,30 @@ import org.apache.isis.core.metamodel.facets.Annotations;
 class MixinInterceptor {
 
 	/**
-	 * If method originates from a mixin and is named '$$' we infer the intended name 
+	 * If method originates from a mixin then we infer the intended name
 	 * from the mixin's class name.
 	 * 
-	 * @param method
+	 * @param method within the mixin type itself.
 	 * @return the intended name of the method
 	 */
-	public static String intendedNameOf(Method method) {
-		
-		if("$$".equals(method.getName()) && isMixin(method.getDeclaringClass()) ) {
-			final String mixinMethodName = inferMixinMethodName(method.getDeclaringClass());
-			if(mixinMethodName!=null)
-				return mixinMethodName; 
+	static String intendedNameOf(Method method) {
+
+		final Class<?> declaringClass = method.getDeclaringClass();
+		final List<Mixin> mixins = Annotations.getAnnotations(declaringClass, Mixin.class);
+		final Optional<Mixin> mixinIfAny = mixins.stream().findFirst();
+
+		if(mixinIfAny.isPresent()) {
+			final String methodName = method.getName();
+			final String mixinAnnotMethodName = mixinIfAny.get().method();
+			if(mixinAnnotMethodName.equals(methodName)) {
+    			final String mixinMethodName = ObjectMemberAbstract.deriveMemberNameFrom(method.getDeclaringClass().getName());
+                if(mixinMethodName!=null) {
+                    return mixinMethodName;
+                }
+			}
 		}
 		// default behavior
 		return method.getName();
 	}
-	
-	// -- HELPER
-	
-	private static boolean isMixin(Class<?> cls) {
-		return !NullSafe.isEmpty(Annotations.getAnnotations(cls, Mixin.class));
-	}
-
-	
-	/**
-	 * Parses class name of format 'Holder_mixinMethodName' and returns 'mixinMethodName'.
-	 * @param mixin
-	 * @return null if parsing fails
-	 */
-	private static String inferMixinMethodName(Class<?> mixin) {
-		final String className = mixin.getSimpleName();
-		final int p = className.indexOf('_');
-		if(p>0 && className.length()>(p+1)) { // min length := p+2 
-			return className.substring(p+1);
-		}
-		return null;
-	}
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index cd4486e..356fd23 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -22,9 +22,10 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
 import java.util.List;
 import java.util.Objects;
 
+import com.google.common.base.Predicate;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
-import com.google.common.base.Predicate;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
@@ -346,19 +347,19 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
     }
 
     static String suffix(final ObjectAction mixinAction) {
-        return suffix(mixinAction.getOnType().getSingularName());
+        return deriveMemberNameFrom(mixinAction.getOnType().getSingularName());
     }
 
-    static String suffix(final String singularName) {
-        final String deriveFromUnderscore = derive(singularName, "_");
-        if(!Objects.equals(singularName, deriveFromUnderscore)) {
+    public static String deriveMemberNameFrom(final String mixinClassName) {
+        final String deriveFromUnderscore = derive(mixinClassName, "_");
+        if(!Objects.equals(mixinClassName, deriveFromUnderscore)) {
             return deriveFromUnderscore;
         }
-        final String deriveFromDollar = derive(singularName, "$");
-        if(!Objects.equals(singularName, deriveFromDollar)) {
+        final String deriveFromDollar = derive(mixinClassName, "$");
+        if(!Objects.equals(mixinClassName, deriveFromDollar)) {
             return deriveFromDollar;
         }
-        return singularName;
+        return mixinClassName;
     }
 
     private static String derive(final String singularName, final String separator) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
index 1677c7e..b90b853 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
@@ -32,31 +32,31 @@ public class ObjectActionMixedInTest {
 
         @Test
         public void exactly_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("_"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("_"));
             assertThat(s, is("_"));
         }
 
         @Test
         public void ends_with_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_"));
             assertThat(s, is("Abc_"));
         }
 
         @Test
         public void has_no_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("defghij"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("defghij"));
             assertThat(s, is("Defghij"));
         }
 
         @Test
         public void contains_one_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_def"));
             assertThat(s, is("Def"));
         }
 
         @Test
         public void contains_more_than_one_underscore() throws Exception {
-            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def_ghi"));
+            final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.deriveMemberNameFrom("abc_def_ghi"));
             assertThat(s, is("Ghi"));
         }
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java
new file mode 100644
index 0000000..06d6c8d
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstractTest.java
@@ -0,0 +1,25 @@
+package org.apache.isis.core.metamodel.specloader.specimpl;
+
+import org.hamcrest.CoreMatchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.*;
+
+public class ObjectMemberAbstractTest {
+
+    @Test
+    public void deriveMemberNameFrom_with_underscore() {
+        final String suffix = ObjectMemberAbstract.deriveMemberNameFrom("Customer_placeOrder");
+        Assert.assertThat(suffix, CoreMatchers.is(equalTo("placeOrder")));
+    }
+
+    @Test
+    public void deriveMemberNameFrom_with_dollar() {
+        final String suffix = ObjectMemberAbstract.deriveMemberNameFrom("Customer$placeOrder");
+        Assert.assertThat(suffix, CoreMatchers.is(equalTo("placeOrder")));
+    }
+
+
+
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.