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.facets.object.parseable;
021
022 import org.apache.isis.applib.annotation.Parseable;
023 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
024 import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware;
025 import org.apache.isis.core.commons.config.IsisConfiguration;
026 import org.apache.isis.core.commons.config.IsisConfigurationAware;
027 import org.apache.isis.core.commons.lang.StringUtils;
028 import org.apache.isis.core.metamodel.adapter.map.AdapterMap;
029 import org.apache.isis.core.metamodel.adapter.map.AdapterMapAware;
030 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
031 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
032 import org.apache.isis.core.metamodel.facetapi.FeatureType;
033 import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
034 import org.apache.isis.core.metamodel.runtimecontext.DependencyInjector;
035 import org.apache.isis.core.metamodel.runtimecontext.DependencyInjectorAware;
036
037 public class ParseableFacetFactory extends AnnotationBasedFacetFactoryAbstract implements IsisConfigurationAware,
038 AuthenticationSessionProviderAware, AdapterMapAware, DependencyInjectorAware {
039
040 private IsisConfiguration configuration;
041
042 private AuthenticationSessionProvider authenticationSessionProvider;
043 private AdapterMap adapterManager;
044 private DependencyInjector dependencyInjector;
045
046 public ParseableFacetFactory() {
047 super(FeatureType.OBJECTS_ONLY);
048 }
049
050 @Override
051 public void process(final ProcessClassContext processClassContaxt) {
052 FacetUtil.addFacet(create(processClassContaxt.getCls(), processClassContaxt.getFacetHolder()));
053 }
054
055 private ParseableFacetAbstract create(final Class<?> cls, final FacetHolder holder) {
056 final Parseable annotation = getAnnotation(cls, Parseable.class);
057
058 // create from annotation, if present
059 if (annotation != null) {
060 final ParseableFacetAnnotation facet =
061 new ParseableFacetAnnotation(cls, getIsisConfiguration(), holder, authenticationSessionProvider,
062 adapterManager, dependencyInjector);
063 if (facet.isValid()) {
064 return facet;
065 }
066 }
067
068 // otherwise, try to create from configuration, if present
069 final String parserName = ParserUtil.parserNameFromConfiguration(cls, getIsisConfiguration());
070 if (!StringUtils.isNullOrEmpty(parserName)) {
071 final ParseableFacetFromConfiguration facet =
072 new ParseableFacetFromConfiguration(parserName, holder, authenticationSessionProvider,
073 dependencyInjector, adapterManager);
074 if (facet.isValid()) {
075 return facet;
076 }
077 }
078
079 return null;
080 }
081
082 // ////////////////////////////////////////////////////////////////////
083 // Dependencies (injected via setters since *Aware)
084 // ////////////////////////////////////////////////////////////////////
085
086 public IsisConfiguration getIsisConfiguration() {
087 return configuration;
088 }
089
090 /**
091 * Injected since {@link IsisConfigurationAware}.
092 */
093 @Override
094 public void setIsisConfiguration(final IsisConfiguration configuration) {
095 this.configuration = configuration;
096 }
097
098 @Override
099 public void setAuthenticationSessionProvider(final AuthenticationSessionProvider authenticationSessionProvider) {
100 this.authenticationSessionProvider = authenticationSessionProvider;
101 }
102
103 @Override
104 public void setAdapterMap(final AdapterMap adapterManager) {
105 this.adapterManager = adapterManager;
106 }
107
108 @Override
109 public void setDependencyInjector(final DependencyInjector dependencyInjector) {
110 this.dependencyInjector = dependencyInjector;
111 }
112
113 }