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<? extends Facet> facetType, final Facet
facet) {
to
public void addFacet(final Class<? extends Facet> facetType, final Facet
facet) {
and add
public Map<Class<? extends Facet>, Facet> getFacetsByClass() {
return this.facetsByClass;
}
*
**FacetUtil*
public static void copyFacets(final FacetHolder source, final FacetHolder
target) {
List<Facet> facets =
source.getFacets(org.apache.isis.applib.filter.Filters.<Facet>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<Class<? extends Facet>, Facet> entry :
((FacetHolderImpl) source).getFacetsByClass().entrySet()) {
((FacetHolderImpl) target).addFacet(entry.getKey(),
entry.getValue());
}
} else {
final List<Facet> facets =
source.getFacets(org.apache.isis.applib.filter.Filters.<Facet> 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
[email protected]
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