/*
* 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.deltaspike.core.impl.activation;
import org.apache.deltaspike.core.api.config.ConfigResolver;
import org.apache.deltaspike.core.spi.activation.ClassDeactivator;
import org.apache.deltaspike.core.spi.activation.Deactivatable;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* This is a default implementation of ClassDeactivator which uses {@see ConfigSource} to resolve configuration options
* for whether a class is active or not.
*
* By design, this is not a well performant implementation. It is a useful utility to avoid implementing the interface
* manually and may be an easy way to spin up test archives with some classes purposefully disabled.
*/
public class DefaultClassDeactivator implements ClassDeactivator
{
public static final String KEY_PREFIX = "deactivate.";
private static final Logger LOG = Logger.getLogger(DefaultClassDeactivator.class.getName());
@Override
public Boolean isActivated(Class<? extends Deactivatable> targetClass)
{
final String key = KEY_PREFIX + targetClass.getName();
final String value = ConfigResolver.getPropertyValue(key);
if (value == null)
{
return null;
}
else
{
if (LOG.isLoggable(Level.FINE))
{
LOG.log(Level.FINE, "Deactivation setting for {0} found to be {1} based on configuration.",
new Object[]{key, value});
}
return !Boolean.valueOf(value);
}
}
}