/**
*
* Copyright (C) norad.fr
*
* 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 fr.norad.visuwall.core.business.domain;
import java.util.ArrayList;
import java.util.List;
import net.awired.ajsl.core.lang.reflect.ReflectTool;
import fr.norad.visuwall.api.plugin.capability.BasicCapability;
import fr.norad.visuwall.api.plugin.capability.BuildCapability;
import fr.norad.visuwall.api.plugin.capability.MetricCapability;
import fr.norad.visuwall.api.plugin.capability.TestCapability;
import fr.norad.visuwall.api.plugin.capability.ViewCapability;
public enum CapabilityEnum {
build(BuildCapability.class), //
test(TestCapability.class), //
metric(MetricCapability.class), //
view(ViewCapability.class), //
;
private final Class<? extends BasicCapability> capabilityClass;
private CapabilityEnum(Class<? extends BasicCapability> capabilityClass) {
this.capabilityClass = capabilityClass;
}
public Class<? extends BasicCapability> getCapabilityClass() {
return capabilityClass;
}
public static List<CapabilityEnum> getCapabilitiesForClass(Class<? extends BasicCapability> pluginConnection) {
List<CapabilityEnum> capabilitiesEnums = new ArrayList<CapabilityEnum>();
for (CapabilityEnum capabilitiesEnum : values()) {
//TODO create classImplements with a list of interfaces in params and a list of intefaces in result ?
if (ReflectTool.classImplement(pluginConnection, capabilitiesEnum.getCapabilityClass())) {
capabilitiesEnums.add(capabilitiesEnum);
}
}
return capabilitiesEnums;
}
}