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.facets.object.parseable; 021 022import com.google.common.base.Strings; 023 024import org.apache.isis.applib.annotation.Parseable; 025import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider; 026import org.apache.isis.core.commons.authentication.AuthenticationSessionProviderAware; 027import org.apache.isis.core.commons.config.IsisConfiguration; 028import org.apache.isis.core.commons.config.IsisConfigurationAware; 029import org.apache.isis.core.commons.lang.StringExtensions; 030import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager; 031import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware; 032import org.apache.isis.core.metamodel.deployment.DeploymentCategory; 033import org.apache.isis.core.metamodel.facetapi.FacetHolder; 034import org.apache.isis.core.metamodel.facetapi.FacetUtil; 035import org.apache.isis.core.metamodel.facetapi.FeatureType; 036import org.apache.isis.core.metamodel.facets.Annotations; 037import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract; 038import org.apache.isis.core.metamodel.runtimecontext.RuntimeContext; 039import org.apache.isis.core.metamodel.runtimecontext.RuntimeContextAware; 040import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector; 041import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware; 042 043public class ParseableFacetFactory extends FacetFactoryAbstract implements IsisConfigurationAware, AuthenticationSessionProviderAware, AdapterManagerAware, ServicesInjectorAware, RuntimeContextAware { 044 045 private IsisConfiguration configuration; 046 047 private AuthenticationSessionProvider authenticationSessionProvider; 048 private AdapterManager adapterManager; 049 private ServicesInjector servicesInjector; 050 051 private RuntimeContext runtimeContext; 052 053 public ParseableFacetFactory() { 054 super(FeatureType.OBJECTS_ONLY); 055 } 056 057 @Override 058 public void process(final ProcessClassContext processClassContaxt) { 059 FacetUtil.addFacet(create(processClassContaxt.getCls(), processClassContaxt.getFacetHolder())); 060 } 061 062 private ParseableFacetAbstract create(final Class<?> cls, final FacetHolder holder) { 063 final Parseable annotation = Annotations.getAnnotation(cls, Parseable.class); 064 065 // create from annotation, if present 066 if (annotation != null) { 067 final ParseableFacetAnnotation facet = new ParseableFacetAnnotation(cls, getIsisConfiguration(), holder, getDeploymentCategory(), authenticationSessionProvider, adapterManager, servicesInjector); 068 if (facet.isValid()) { 069 return facet; 070 } 071 } 072 073 // otherwise, try to create from configuration, if present 074 final String parserName = ParserUtil.parserNameFromConfiguration(cls, getIsisConfiguration()); 075 if (!Strings.isNullOrEmpty(parserName)) { 076 final ParseableFacetFromConfiguration facet = new ParseableFacetFromConfiguration(parserName, holder, getDeploymentCategory(), authenticationSessionProvider, servicesInjector, adapterManager); 077 if (facet.isValid()) { 078 return facet; 079 } 080 } 081 082 return null; 083 } 084 085 // //////////////////////////////////////////////////////////////////// 086 // Dependencies (injected via setters since *Aware) 087 // //////////////////////////////////////////////////////////////////// 088 089 /** 090 * Derived from {@link #setRuntimeContext(RuntimeContext)} (since {@link RuntimeContextAware}). 091 */ 092 private DeploymentCategory getDeploymentCategory() { 093 return runtimeContext.getDeploymentCategory(); 094 } 095 096 public IsisConfiguration getIsisConfiguration() { 097 return configuration; 098 } 099 100 /** 101 * Injected since {@link IsisConfigurationAware}. 102 */ 103 @Override 104 public void setConfiguration(final IsisConfiguration configuration) { 105 this.configuration = configuration; 106 } 107 108 @Override 109 public void setAuthenticationSessionProvider(final AuthenticationSessionProvider authenticationSessionProvider) { 110 this.authenticationSessionProvider = authenticationSessionProvider; 111 } 112 113 @Override 114 public void setAdapterManager(final AdapterManager adapterManager) { 115 this.adapterManager = adapterManager; 116 } 117 118 @Override 119 public void setServicesInjector(final ServicesInjector dependencyInjector) { 120 this.servicesInjector = dependencyInjector; 121 } 122 123 @Override 124 public void setRuntimeContext(RuntimeContext runtimeContext) { 125 this.runtimeContext = runtimeContext; 126 } 127 128}