Return-Path: X-Original-To: apmail-isis-users-archive@www.apache.org Delivered-To: apmail-isis-users-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8A8C81855C for ; Fri, 28 Aug 2015 18:04:28 +0000 (UTC) Received: (qmail 1901 invoked by uid 500); 28 Aug 2015 18:04:28 -0000 Delivered-To: apmail-isis-users-archive@isis.apache.org Received: (qmail 1867 invoked by uid 500); 28 Aug 2015 18:04:28 -0000 Mailing-List: contact users-help@isis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: users@isis.apache.org Delivered-To: mailing list users@isis.apache.org Received: (qmail 1853 invoked by uid 99); 28 Aug 2015 18:04:28 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 28 Aug 2015 18:04:28 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id BDDA7C06B6 for ; Fri, 28 Aug 2015 18:04:27 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 4.011 X-Spam-Level: **** X-Spam-Status: No, score=4.011 tagged_above=-999 required=6.31 tests=[HTML_MESSAGE=3, KAM_LAZY_DOMAIN_SECURITY=1, T_REMOTE_IMAGE=0.01, URIBL_BLOCKED=0.001] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id 7eD1QNbmhl1b for ; Fri, 28 Aug 2015 18:04:18 +0000 (UTC) Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.126.187]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with ESMTPS id BC0FA42B5D for ; Fri, 28 Aug 2015 18:04:17 +0000 (UTC) Received: from [127.0.0.1] ([95.23.166.12]) by mrelayeu.kundenserver.de (mreue003) with ESMTPSA (Nemesis) id 0LhAId-1YtYtB0IlD-00oaZz for ; Fri, 28 Aug 2015 20:04:10 +0200 Subject: Re: HiddenFacet wrong behavior To: users@isis.apache.org References: <55E05D0D.30101@gesconsultor.com> From: =?UTF-8?B?TmFjaG8gQ8Ohbm92YXMgUmVqw7Nu?= Message-ID: <55E0A291.80300@gesconsultor.com> Date: Fri, 28 Aug 2015 20:04:01 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/alternative; boundary="------------090902030602090802060003" X-Antivirus: avast! (VPS 150828-0, 28/08/2015), Outbound message X-Antivirus-Status: Clean X-Provags-ID: V03:K0:VBc8Ox2JHBvarDQjUGQWPWT8Hu7ZpCfRWchMg3/fpJpblnViona 9i7Ks/NzZMIuG8/KHRrVofYC7Rqps1A2N7bp7wzvDWYpTaIY9Jiyjeae21p91zIGNaQtzb+ 8+OcA1pzatj4BM3WC8Q6Zd8HDi7hCprhW6T+qhB3KZcdF2+B93JFhhrqSvawMHKVPXcobcn VBwwBKbZ8ajgTol1Zz8Fw== X-UI-Out-Filterresults: notjunk:1;V01:K0:LRKcY0UDGeo=:/7XNU0fW389H0X2kvwO1l5 obKG4nJIc8KZT0ocIrbktu3r/9GAhiJuHKC0t+fDp/vUgSusIHrww+s2f0SSE7hQJxTmT+WUo qnqomLei1YFgk9I35jdpjtgogEauSxTD8k3ZXbyae+BU4uxtiD0Vrd7/yRiqltDvhrtUbHFGF zm+AG2czMKJw0hz2NEbfeLdkrybtn8NRXIXTbfyxwfyVfGx6q3zKc+qRAllyfm62ri09RJD2c Fc0jnwu5+/an9p5KOepwsmNpguJRndcm7kYZXc6S+YHA5kZ5aYn5jhUvwq2jrMUKO46RJ6rv8 3bw+hBeLZaB0aeYSTuvWmgsMayi1eBWYnGPEwNCyxpWVV+7gcG1g9gSK/+gXa41vI8J0lxMk8 Wfuo4hDjKGmEF0LJHZq4mmMk3jWS70JBd7QB0dprdOh0J+kiwy387KLebLWH8P5Am7tdYwpVA KK+bpitX5d5c5QTUhBFuyFVf7BYXe3UOkBYYv3HmRQ16M+cJqZdgIZq31Vy9+BpdPXzTJ2vdr 8pCyK9xsdFdeFdzepALglGBE7Q1BkvHxEJtfn+eEcSgI6KgQduWfg9x3sWF/kR1lOsk6GwHBT pEYb+fS0SvVgEtR/ykyfR8dX63gap4UbBncuynaBiGD2LcbKlsy+taBD6Pr05ePIWRpQiWweP bKG3n9RNJgzs6eN6/g+Fhw+Dy/1V4itVriCXlPsbprPKQYT9CQeqbgQpthz2h4j5ekz0P80C4 0VP6jSHs/UZbYN4p --------------090902030602090802060003 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit The code that produces me this is like this: *Code where I receive the action *objectSpecification.getObjectActions(Contributed.INCLUDED) *Action Contributed (I dont't use param contributed as you in this case)* @Action(hidden = Where.EVERYWHERE) public E findBySingletonProperty(final Class ofType, final String entityParamName, final Object object) { ..... } If you can't reproduce with this information, I'll try one case on SimpleApp more specific. Thanks El 28/08/2015 a las 18:48, Dan Haywood escribió: > Hi Nacho, > > thanks for this, though I'm having trouble trying to replicate. > > > For example, in the todoapp [1] there's a contributed action on ToDoItem: > > @DomainService(nature = NatureOfService.VIEW_CONTRIBUTIONS_ONLY) > public class ToDoItemAnalysisContributions { > > @ActionLayout(contributed = Contributed.AS_ACTION) > @Action( > semantics = SemanticsOf.SAFE > ) > public ToDoItemsByCategoryViewModel analyseCategory(final ToDoItem > item) { > return toDoAppAnalysis.toDoItemsForCategory(item.getCategory()); > } > ... > } > > > if I change this to: > > @ActionLayout(contributed = Contributed.AS_ACTION) > @Action( > hidden = Where.EVERYWHERE, > semantics = SemanticsOf.SAFE > ) > public ToDoItemsByCategoryViewModel analyseCategory(final ToDoItem > item) { ... } > > then the action is hidden on ToDoItem. > > ~~~ > > Can you give me an example that demonstrates the issue (either the todoapp > or based on simpleapp?) > > Thanks > Dan > > [1] https://github.com/isisaddons/isis-app-todoapp > > > > > On 28 August 2015 at 14:07, Nacho Cánovas Rejón > wrote: > >> Hi again Dan. >> >> I updated all annotations and is one behavior with Hidden not contemplated. >> >> Actions, properties and collections declares well a HidenFacet with their >> own annotation, but the problem is when we try to get HidenFacet from a >> Contributed Action, it always returns "is not hide". >> >> I show you why: >> >> These are facets declared from some action: >> >> {interface >> org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet=ActionDefaultsFacetNone[type=ActionDefaultsFacet], >> interface >> org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet=ActionDomainEventFacetForActionAnnotation[interaction=Validating;Disabling;Hiding,type=ActionDomainEventFacet], >> interface >> org.apache.isis.core.metamodel.facets.all.named.NamedFacet=NamedFacetTranslated[type=NamedFacet], >> interface >> org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet=ActionPositionFacetFallback[type=ActionPositionFacet,position=BELOW], >> interface >> org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet=AuthorizationFacetImpl[interaction=Disabling;Hiding,type=AuthorizationFacet], >> interface >> org.apache.isis.core.metamodel.facets.object.hidden.HiddenObjectFacet=HiddenObjectFacetViaMethod[interaction=Hiding,type=HiddenObjectFacet], >> interface >> org.apache.isis.core.metamodel.facets.all.help.HelpFacet=HelpFacetNone[type=HelpFacet,null], >> interface >> *org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet=HiddenFacetForActionAnnotation[interaction=Hiding,,when=Always; >> where =Everywhere]*, interface >> org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet=ActionInvocationFacetWrapTransaction[type=ActionInvocationFacet] >> --> >> ActionInvocationFacetForDomainEventFromActionAnnotation[type=ActionInvocationFacet,method=public >> com.xms.framework.api.domain.model.isis.AbstractMultiTenantObject >> com.xms.framework.api.domain.model.isis.AbstractSingletonMultiTenantObjectRepositoryAndFactory.findBySingletonProperty(java.lang.Class,java.lang.String,java.lang.Object)], >> interface >> org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet=ActionSemanticsFacetForActionAnnotation[type=ActionSemanticsFacet], >> class >> org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation=HiddenFacetForActionAnnotation[interaction=Hiding,,when=Always; >> where =Everywhere], interface >> org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet=BookmarkPolicyFacetFallback[type=BookmarkPolicyFacet], >> interface >> org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet=DescribedAsFacetOnMemberDerivedFromType[type=DescribedAsFacet,""], >> interface >> org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet=ActionChoicesFacetNone[type=ActionChoicesFacet]} >> >> And these are declared by some contributed action (same action as I wrote >> up). >> >> {interface >> org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet=ActionDefaultsFacetNone[type=ActionDefaultsFacet], >> interface >> org.apache.isis.core.metamodel.facets.all.named.NamedFacet=NamedFacetTranslated[type=NamedFacet], >> interface >> org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet=ActionDomainEventFacetForActionAnnotation[interaction=Validating;Disabling;Hiding,type=ActionDomainEventFacet], >> interface >> org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet=ActionPositionFacetFallback[type=ActionPositionFacet,position=BELOW], >> interface >> org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet=AuthorizationFacetImpl[interaction=Disabling;Hiding,type=AuthorizationFacet], >> interface >> org.apache.isis.core.metamodel.facets.all.help.HelpFacet=HelpFacetNone[type=HelpFacet,null], >> interface >> org.apache.isis.core.metamodel.facets.object.hidden.HiddenObjectFacet=HiddenObjectFacetViaMethod[interaction=Hiding,type=HiddenObjectFacet], >> interface >> org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet=ActionInvocationFacetWrapTransaction[type=ActionInvocationFacet] >> --> >> ActionInvocationFacetForDomainEventFromActionAnnotation[type=ActionInvocationFacet,method=public >> com.xms.framework.api.domain.model.isis.AbstractMultiTenantObject >> com.xms.framework.api.domain.model.isis.AbstractSingletonMultiTenantObjectRepositoryAndFactory.findBySingletonProperty(java.lang.Class,java.lang.String,java.lang.Object)], >> interface >> org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet=ActionSemanticsFacetForActionAnnotation[type=ActionSemanticsFacet], >> class >> org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation=HiddenFacetForActionAnnotation[interaction=Hiding,,when=Always; >> where =Everywhere], interface >> org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet=DescribedAsFacetOnMemberDerivedFromType[type=DescribedAsFacet,""], >> interface >> org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet=BookmarkPolicyFacetFallback[type=BookmarkPolicyFacet], >> interface >> org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet=ActionChoicesFacetNone[type=ActionChoicesFacet]} >> >> Only is the difference I wrote you bold. >> >> The problem is on constructor of ObjectActionContributee >> (FacetUtil.copyFacets(serviceAction.getFacetedMethod(), facetHolder);), >> because when this method is executed, removes HiddenFacet because is also >> repeated on HiddenFacetForActionAnnotation, and we can't get the class well >> for "contributedAction.isAlwaysHidden()", because it can't find >> HiddenFacet(instead we can get HiddenFacetForActionAnnotation) from map >> defined on FacetHolderImpl. >> >> The way I see, is that are two ways to fix this. >> >> - Get custom Hide facet for each type (action, property, collection) in >> order to avoid a standard HideFacet on "isAlwaysHidden" method. >> - Change copy facets method. >> >> I did second fix, but I don't know concepts too well and I it's a bit >> dirty correction. >> >> *FacetHolderImpl* >> >> private void addFacet(final Class facetType, final Facet >> facet) { >> >> to >> >> public void addFacet(final Class facetType, final Facet >> facet) { >> >> and add >> >> public Map, Facet> getFacetsByClass() { >> return this.facetsByClass; >> } >> * >> **FacetUtil* >> >> public static void copyFacets(final FacetHolder source, final FacetHolder >> target) { >> List facets = >> source.getFacets(org.apache.isis.applib.filter.Filters.any()); >> for (Facet facet : facets) { >> target.addFacet(facet); >> } >> } >> >> to >> >> public static void copyFacets(final FacetHolder source, final FacetHolder >> target) { >> if (FacetHolderImpl.class.isInstance(source) && >> FacetHolderImpl.class.isInstance(target)) { >> for (final Entry, Facet> entry : >> ((FacetHolderImpl) source).getFacetsByClass().entrySet()) { >> ((FacetHolderImpl) target).addFacet(entry.getKey(), >> entry.getValue()); >> } >> } else { >> final List facets = >> source.getFacets(org.apache.isis.applib.filter.Filters. any()); >> for (final Facet facet : facets) { >> target.addFacet(facet); >> } >> } >> } >> >> Best regards, Nacho. >> >> -- >> Ignacio Cánovas Rejón >> Tel. 902 900 231 >> Fax 96 353 19 09 >> n.canovas@gesconsultor.com >> www.gesconsultor.com >> >> Este mensaje y los ficheros anexos son confidenciales. Los mismos >> contienen información reservada que no puede ser difundida. Si usted ha >> recibido este correo por error, tenga la amabilidad de eliminarlo de su >> sistema y avisar al remitente mediante reenvío a su dirección electrónica; >> no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. >> >> Su dirección de correo electrónico junto a sus datos personales constan en >> un fichero titularidad de GESDATOS SOFTWARE S.L. cuya finalidad es la de >> mantener el contacto con Ud. Si quiere saber de qué información disponemos >> de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un >> escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente >> dirección: GESDATOS SOFTWARE S.L. Av. Cortes Valencianas 50-1º-C, C.P. >> 46015 de Valencia. Asimismo, es su responsabilidad comprobar que este >> mensaje o sus archivos adjuntos no contengan virus informáticos, y en caso >> que los tuvieran eliminarlos. >> >> >> >> --- >> El software de antivirus Avast ha analizado este correo electrónico en >> busca de virus. >> http://www.avast.com >> -- Ignacio Cánovas Rejón Tel. 902 900 231 Fax 96 353 19 09 n.canovas@gesconsultor.com www.gesconsultor.com Este mensaje y los ficheros anexos son confidenciales. Los mismos contienen información reservada que no puede ser difundida. Si usted ha recibido este correo por error, tenga la amabilidad de eliminarlo de su sistema y avisar al remitente mediante reenvío a su dirección electrónica; no deberá copiar el mensaje ni divulgar su contenido a ninguna persona. Su dirección de correo electrónico junto a sus datos personales constan en un fichero titularidad de GESDATOS SOFTWARE S.L. cuya finalidad es la de mantener el contacto con Ud. Si quiere saber de qué información disponemos de Ud., modificarla, y en su caso, cancelarla, puede hacerlo enviando un escrito al efecto, acompañado de una fotocopia de su D.N.I. a la siguiente dirección: GESDATOS SOFTWARE S.L. Av. Cortes Valencianas 50-1º-C, C.P. 46015 de Valencia. Asimismo, es su responsabilidad comprobar que este mensaje o sus archivos adjuntos no contengan virus informáticos, y en caso que los tuvieran eliminarlos. --- El software de antivirus Avast ha analizado este correo electrónico en busca de virus. http://www.avast.com --------------090902030602090802060003--