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
020 package org.apache.isis.core.progmodel.facetdecorators.i18n;
021
022 import org.apache.isis.applib.Identifier;
023 import org.apache.isis.core.metamodel.facetapi.Facet;
024 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
025 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
026 import org.apache.isis.core.metamodel.facetdecorator.FacetDecoratorAbstract;
027 import org.apache.isis.core.metamodel.facets.describedas.DescribedAsFacet;
028 import org.apache.isis.core.metamodel.facets.help.HelpFacet;
029 import org.apache.isis.core.metamodel.facets.named.NamedFacet;
030 import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.DescribedAsFacetWrapI18n;
031 import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.HelpFacetWrapI18n;
032 import org.apache.isis.core.progmodel.facetdecorators.i18n.internal.NamedFacetWrapI18n;
033
034 public 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 =
081 new DescribedAsFacetWrapI18n(i18nDescription, facet.getFacetHolder());
082 identifiedHolder.addFacet(decoratingFacet);
083 return decoratingFacet;
084 }
085
086 private Facet decorateWithHelpFacet(final Facet facet, final IdentifiedHolder identifiedHolder) {
087 final Identifier identifier = identifiedHolder.getIdentifier();
088 final String i18nHelp = i18nManager.getHelp(identifier);
089 if (i18nHelp == null) {
090 return null;
091 }
092 final HelpFacetWrapI18n decoratingFacet = new HelpFacetWrapI18n(i18nHelp, facet.getFacetHolder());
093 identifiedHolder.addFacet(decoratingFacet);
094 return decoratingFacet;
095 }
096
097 @SuppressWarnings("unchecked")
098 @Override
099 public Class<? extends Facet>[] getFacetTypes() {
100 return new Class[] { NamedFacet.class, DescribedAsFacet.class, HelpFacet.class };
101 }
102 }