This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push: new a0ac44c ISIS-1743 fa-Icon mapping for mixins using '$$' method names a0ac44c is described below commit a0ac44c4e1dd74f5faf4cb59541101d3b42be88b Author: Andi Huber <ahu...@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 8fd1508..a72bac1 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 @@ -69,7 +69,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(':'); @@ -84,12 +84,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 ahu...@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" <commits@isis.apache.org>'].