/* * 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.properties.propertylayout; import java.lang.reflect.Method; import java.util.Properties; import org.apache.isis.applib.annotation.PropertyLayout; import org.apache.isis.core.metamodel.facetapi.FacetHolder; import org.apache.isis.core.metamodel.facetapi.FacetUtil; import org.apache.isis.core.metamodel.facetapi.FeatureType; import org.apache.isis.core.metamodel.facets.Annotations; import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory; import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; import org.apache.isis.core.metamodel.facets.FacetedMethod; import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet; import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet; import org.apache.isis.core.metamodel.facets.all.named.NamedFacet; import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet; import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet; import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet; import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet; import org.apache.isis.core.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet; import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet; import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet; public class PropertyLayoutFacetFactory extends FacetFactoryAbstract implements ContributeeMemberFacetFactory { public PropertyLayoutFacetFactory() { super(FeatureType.PROPERTIES_AND_ACTIONS); } @Override public void process(final ProcessMethodContext processMethodContext) { final FacetHolder holder = facetHolderFrom(processMethodContext); final Properties properties = metadataPropertiesFrom(processMethodContext); final PropertyLayout propertyLayout = propertyLayoutAnnotationFrom(processMethodContext); processCssClass(holder, properties, propertyLayout); processDescribedAs(holder, properties, propertyLayout); processPromptStyle(holder, properties, propertyLayout); processHidden(holder, properties, propertyLayout); processLabelAt(holder, properties, propertyLayout); processMultiLine(holder, properties, propertyLayout); processNamed(holder, properties, propertyLayout); processRenderedAdjusted(holder, properties, propertyLayout); processTypicalLength(holder, properties, propertyLayout); processUnchanging(holder, properties, propertyLayout); } void processCssClass(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder); if(cssClassFacet == null) { cssClassFacet = CssClassFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(cssClassFacet); } void processDescribedAs( final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder); if(describedAsFacet == null) { describedAsFacet = DescribedAsFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(describedAsFacet); } void processPromptStyle(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { PromptStyleFacet promptStyleFacet = PromptStyleFacetOnPropertyFromLayoutProperties .create(properties, holder); if(promptStyleFacet == null) { promptStyleFacet = PromptStyleFacetForPropertyLayoutAnnotation .create(propertyLayout, getConfiguration(), holder); } FacetUtil.addFacet(promptStyleFacet); } void processHidden(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder); if(hiddenFacet == null) { hiddenFacet = HiddenFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(hiddenFacet); } void processLabelAt( final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder); if(labelAtFacet == null) { labelAtFacet = LabelAtFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(labelAtFacet); } void processMultiLine(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder); if(multiLineFacet == null) { multiLineFacet = MultiLineFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(multiLineFacet); } void processNamed(final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder); if(namedFacet == null) { namedFacet = NamedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(namedFacet); } void processRenderedAdjusted( final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties .create(properties, holder); if(renderedAdjustedFacet == null) { renderedAdjustedFacet = RenderedAdjustedFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(renderedAdjustedFacet); } void processTypicalLength( final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties .create(properties, holder); if(typicalLengthFacet == null) { typicalLengthFacet = TypicalLengthFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(typicalLengthFacet); } void processUnchanging( final FacetHolder holder, final Properties properties, final PropertyLayout propertyLayout) { UnchangingFacet unchangingFacet = UnchangingFacetOnPropertyFromLayoutProperties .create(properties, holder); if(unchangingFacet == null) { unchangingFacet = UnchangingFacetForPropertyLayoutAnnotation.create(propertyLayout, holder); } FacetUtil.addFacet(unchangingFacet); } @Override public void process(ProcessContributeeMemberContext processMemberContext) { final FacetHolder holder = processMemberContext.getFacetHolder(); Properties properties = metadataPropertiesFrom(processMemberContext); // cssClass CssClassFacet cssClassFacet = CssClassFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(cssClassFacet); // describedAs DescribedAsFacet describedAsFacet = DescribedAsFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(describedAsFacet); // hidden HiddenFacet hiddenFacet = HiddenFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(hiddenFacet); // labelAt LabelAtFacet labelAtFacet = LabelAtFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(labelAtFacet); // multiLine MultiLineFacet multiLineFacet = MultiLineFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(multiLineFacet); // named NamedFacet namedFacet = NamedFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(namedFacet); // renderedAsDayBefore RenderedAdjustedFacet renderedAdjustedFacet = RenderedAdjustedFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(renderedAdjustedFacet); // typicalLength TypicalLengthFacet typicalLengthFacet = TypicalLengthFacetOnPropertyFromLayoutProperties.create(properties, holder); FacetUtil.addFacet(typicalLengthFacet); } Properties metadataPropertiesFrom(final ProcessMethodContext processMethodContext) { Properties properties = processMethodContext.metadataProperties("propertyLayout"); if(properties == null) { // alternate key properties = processMethodContext.metadataProperties("layout"); } return properties; } FacetedMethod facetHolderFrom(final ProcessMethodContext processMethodContext) { return processMethodContext.getFacetHolder(); } PropertyLayout propertyLayoutAnnotationFrom(final ProcessMethodContext processMethodContext) { final Method method = processMethodContext.getMethod(); return Annotations.getAnnotation(method, PropertyLayout.class); } Properties metadataPropertiesFrom(final ProcessContributeeMemberContext processMemberContext) { Properties properties = processMemberContext.metadataProperties("propertyLayout"); if(properties == null) { // alternate key properties = processMemberContext.metadataProperties("layout"); } return properties; } }