blob: 36c95b06f860e80ea2a3b4b4750bd912c4090b5e [file] [log] [blame]
/*
* 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.sling.models.impl;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Map;
import org.apache.sling.models.annotations.ViaProviderType;
import org.apache.sling.models.spi.ImplementationPicker;
import org.apache.sling.models.spi.Injector;
import org.apache.sling.models.spi.ViaProvider;
import org.apache.sling.models.spi.injectorspecific.InjectAnnotationProcessorFactory;
import org.apache.sling.models.spi.injectorspecific.InjectAnnotationProcessorFactory2;
import org.apache.sling.models.spi.injectorspecific.StaticInjectAnnotationProcessorFactory;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import javax.servlet.Servlet;
@SuppressWarnings("deprecation")
public class ModelConfigurationPrinter {
private static final String EXPORT_SERVLET_FILTER = "(" + ModelPackageBundleListener.PROP_EXPORTER_SERVLET_CLASS + "=*)";
private final ModelAdapterFactory modelAdapterFactory;
private final BundleContext bundleContext;
private final AdapterImplementations adapterImplementations;
ModelConfigurationPrinter(ModelAdapterFactory modelAdapterFactory, BundleContext bundleContext, AdapterImplementations adapterImplementations) {
this.modelAdapterFactory = modelAdapterFactory;
this.bundleContext = bundleContext;
this.adapterImplementations = adapterImplementations;
}
public void printConfiguration(PrintWriter printWriter) {
// injectors
printWriter.println("Sling Models Injectors:");
Collection<Injector> injectors = modelAdapterFactory.getInjectors();
if (injectors.isEmpty()) {
printWriter.println("none");
} else {
for (Injector injector : injectors) {
printWriter.printf("%s - %s", injector.getName(), injector.getClass().getName());
printWriter.println();
}
}
printWriter.println();
// inject annotations processor factories
printWriter.println("Sling Models Inject Annotation Processor Factories:");
Collection<InjectAnnotationProcessorFactory> factories = modelAdapterFactory.getInjectAnnotationProcessorFactories();
Collection<InjectAnnotationProcessorFactory2> factories2 = modelAdapterFactory.getInjectAnnotationProcessorFactories2();
Collection<StaticInjectAnnotationProcessorFactory> staticFactories = modelAdapterFactory.getStaticInjectAnnotationProcessorFactories();
if ((factories.isEmpty())
&& (factories2.isEmpty())
&& (staticFactories.isEmpty())) {
printWriter.println("none");
} else {
for (StaticInjectAnnotationProcessorFactory factory : staticFactories) {
printWriter.printf("%s", factory.getClass().getName());
printWriter.println();
}
for (InjectAnnotationProcessorFactory2 factory : factories2) {
printWriter.printf("%s", factory.getClass().getName());
printWriter.println();
}
for (InjectAnnotationProcessorFactory factory : factories) {
printWriter.printf("%s", factory.getClass().getName());
printWriter.println();
}
}
printWriter.println();
// implementation pickers
printWriter.println("Sling Models Implementation Pickers:");
ImplementationPicker[] pickers = modelAdapterFactory.getImplementationPickers();
if (pickers == null || pickers.length == 0) {
printWriter.println("none");
} else {
for (ImplementationPicker picker : pickers) {
printWriter.printf("%s", picker.getClass().getName());
printWriter.println();
}
}
printWriter.println();
// implementation pickers
printWriter.println("Sling Models Via Providers:");
Map<Class<? extends ViaProviderType>, ViaProvider> viaProviders = modelAdapterFactory.getViaProviders();
if (viaProviders == null || viaProviders.size() == 0) {
printWriter.println("none");
} else {
for (Map.Entry<Class<? extends ViaProviderType>, ViaProvider> entry : viaProviders.entrySet()) {
printWriter.printf("%s (Type: %s)", entry.getValue().getClass().getName(), entry.getKey().getName());
printWriter.println();
}
}
printWriter.println();
// models bound to resource types
printWriter.println("Sling Models Bound to Resource Types *For Resources*:");
for (Map.Entry<String, Class<?>> entry : adapterImplementations.getResourceTypeMappingsForResources().entrySet()) {
printWriter.print(entry.getValue().getName());
printWriter.print(" - ");
printWriter.println(entry.getKey());
}
printWriter.println();
printWriter.println("Sling Models Bound to Resource Types *For Requests*:");
for (Map.Entry<String, Class<?>> entry : adapterImplementations.getResourceTypeMappingsForRequests().entrySet()) {
printWriter.print(entry.getValue().getName());
printWriter.print(" - ");
printWriter.println(entry.getKey());
}
printWriter.println();
// registered exporter servlets
printWriter.println("Sling Models Exporter Servlets:");
try {
ServiceReference[] servlets = bundleContext.getServiceReferences(Servlet.class.getName(), EXPORT_SERVLET_FILTER);
if (servlets != null) {
for (ServiceReference ref : servlets) {
printWriter.print(ref.getProperty(ModelPackageBundleListener.PROP_EXPORTER_SERVLET_CLASS));
printWriter.print(" exports '");
printWriter.print(ref.getProperty("sling.servlet.resourceTypes"));
printWriter.print("' with selector '");
printWriter.print(ref.getProperty("sling.servlet.selectors"));
printWriter.print("' and extension '");
printWriter.print(ref.getProperty("sling.servlet.extensions"));
printWriter.print("' with exporter '");
printWriter.print(ref.getProperty(ModelPackageBundleListener.PROP_EXPORTER_SERVLET_NAME));
printWriter.println("'");
}
}
} catch (InvalidSyntaxException e) {
// ignore
}
}
}