001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019 020package org.apache.isis.core.progmodel.facetdecorators.i18n; 021 022import org.apache.isis.applib.Identifier; 023import org.apache.isis.core.metamodel.facetapi.Facet; 024import org.apache.isis.core.metamodel.facetapi.FacetHolder; 025import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder; 026import org.apache.isis.core.metamodel.facetdecorator.FacetDecoratorAbstract; 027import org.apache.isis.core.metamodel.facets.describedas.DescribedAsFacet; 028import org.apache.isis.core.metamodel.facets.help.HelpFacet; 029import org.apache.isis.core.metamodel.facets.named.NamedFacet; 030import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.DescribedAsFacetWrapI18n; 031import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.HelpFacetWrapI18n; 032import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.NamedFacetWrapI18n; 033 034public class I18nFacetDecorator extends FacetDecoratorAbstract { 035 private final I18nManager i18nManager; 036 037 public I18nFacetDecorator(final I18nManager manager) { 038 i18nManager = manager; 039 } 040 041 @Override 042 public Facet decorate(final Facet facet, final FacetHolder facetHolder) { 043 if (!(facetHolder instanceof IdentifiedHolder)) { 044 return null; 045 } 046 047 final IdentifiedHolder identifiedHolder = (IdentifiedHolder) facetHolder; 048 049 final Class<?> facetType = facet.facetType(); 050 if (facetType == NamedFacet.class) { 051 return decorateWithNamedFacet(facet, identifiedHolder); 052 } 053 if (facetType == DescribedAsFacet.class) { 054 return decorateWithDescribedAsFacet(facet, identifiedHolder); 055 } 056 if (facetType == HelpFacet.class) { 057 return decorateWithHelpFacet(facet, identifiedHolder); 058 } 059 return null; 060 } 061 062 private Facet decorateWithNamedFacet(final Facet facet, final IdentifiedHolder identifiedHolder) { 063 064 final Identifier identifier = identifiedHolder.getIdentifier(); 065 final String i18nName = i18nManager.getName(identifier); 066 if (i18nName == null) { 067 return null; 068 } 069 final NamedFacetWrapI18n decoratingFacet = new NamedFacetWrapI18n(i18nName, facet.getFacetHolder()); 070 identifiedHolder.addFacet(decoratingFacet); 071 return decoratingFacet; 072 } 073 074 private Facet decorateWithDescribedAsFacet(final Facet facet, final IdentifiedHolder identifiedHolder) { 075 final Identifier identifier = identifiedHolder.getIdentifier(); 076 final String i18nDescription = i18nManager.getDescription(identifier); 077 if (i18nDescription == null) { 078 return null; 079 } 080 final DescribedAsFacetWrapI18n decoratingFacet = new DescribedAsFacetWrapI18n(i18nDescription, facet.getFacetHolder()); 081 identifiedHolder.addFacet(decoratingFacet); 082 return decoratingFacet; 083 } 084 085 private Facet decorateWithHelpFacet(final Facet facet, final IdentifiedHolder identifiedHolder) { 086 final Identifier identifier = identifiedHolder.getIdentifier(); 087 final String i18nHelp = i18nManager.getHelp(identifier); 088 if (i18nHelp == null) { 089 return null; 090 } 091 final HelpFacetWrapI18n decoratingFacet = new HelpFacetWrapI18n(i18nHelp, facet.getFacetHolder()); 092 identifiedHolder.addFacet(decoratingFacet); 093 return decoratingFacet; 094 } 095 096 @SuppressWarnings("unchecked") 097 @Override 098 public Class<? extends Facet>[] getFacetTypes() { 099 return new Class[] { NamedFacet.class, DescribedAsFacet.class, HelpFacet.class }; 100 } 101}