/*
* Copyright 2012 david gonzalez.
*
* Licensed 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 com.activecq.samples.slingadapterfactories.impl;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.resource.Resource;
import org.osgi.framework.Constants;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(
label = "Samples - Adapter Factory",
description = "",
metatype = false,
immediate = false
)
@Properties({
@Property(
label = "Vendor",
name = Constants.SERVICE_VENDOR,
value = "ActiveCQ",
propertyPrivate = true
),
@Property(
label = "Ranking",
name = Constants.SERVICE_RANKING,
intValue = 0,
propertyPrivate = true
),
@Property(
label = "Adaptables",
description = "Adaptables list the \"From\" objects the adapter supports",
name = "adaptables",
value = {"org.apache.sling.api.SlingHttpServletRequest"},
propertyPrivate = true
),
@Property(
label = "Adapters",
description = "Adapters list the \"To\" objects the adapter supports",
name = "adapters",
value = {"org.apache.sling.api.resource.Resource"},
propertyPrivate = true
)
})
@Service
public class SampleAdapterFactory implements AdapterFactory {
@SuppressWarnings("unused")
private static final Logger log = LoggerFactory
.getLogger(SampleAdapterFactory.class);
@Override
public <AdapterType> AdapterType getAdapter(Object adaptable,
Class<AdapterType> type) {
// Ensure the adaptable object is of an appropriate type
if (!(adaptable instanceof SlingHttpServletRequest) || (adaptable == null)) {
log.warn("Always log when a object cannot be adapted.");
return null;
}
Resource resource = ((SlingHttpServletRequest) adaptable).getResource();
if (resource == null) {
log.warn("Always log when a object cannot be adapted.");
}
return (AdapterType) resource;
}
@Activate
protected void activate(ComponentContext componentContext) {
}
@Deactivate
protected void deactivate(ComponentContext componentContext) {
}
}