/* * Copyright (C) 2013 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.configuration.v2.resource; import com.intel.dcsg.cpg.extensions.Extensions; import com.intel.mtwilson.configuration.v2.model.ExtensionFilterCriteria; import com.intel.mtwilson.launcher.ws.ext.V2; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.regex.Pattern; import javax.ws.rs.BeanParam; import javax.ws.rs.GET; //import javax.ejb.Stateless; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authz.annotation.RequiresPermissions; /** * See also com.intel.mtwilson.v2.test.extensions.ExtensionsResource in mtwilson-test-ws-v2 * @author jbuhacoff */ @V2 //@Stateless @Path("/extensions") public class ExtensionsResource { private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(ExtensionsResource.class); private static final Pattern extensionClassName = Pattern.compile("^(?:[a-zA-Z0-9$.]*)$"); @GET @RequiresPermissions("extensions:search") @Produces(MediaType.TEXT_PLAIN) public String search(@BeanParam ExtensionFilterCriteria criteria) { Map<String,List<Class<?>>> map = Extensions.getWhiteboard(); HashSet<String> resultset = new HashSet<>(); for(String registeredInterface : map.keySet()) { if( criteria.isInterface != null && criteria.isInterface.booleanValue() ) { // list of extension points if( acceptInterface(registeredInterface, criteria)) { resultset.add(registeredInterface); } } else { // list of implementations List<Class<?>> list = map.get(registeredInterface); for(Class<?> clazz : list) { String className = clazz.getName(); if( acceptExtension(className, registeredInterface, criteria)) { resultset.add(className); } } } } return StringUtils.join(resultset, "\n"); } private boolean acceptExtension(String extensionName, String registeredInterface, ExtensionFilterCriteria criteria) { if( criteria.filter ) { return (criteria.interfaceEqualTo == null || criteria.interfaceEqualTo.isEmpty() || criteria.interfaceEqualTo.equals(registeredInterface)) && (criteria.nameEqualTo == null || criteria.nameEqualTo.isEmpty() || extensionName.equals(criteria.nameEqualTo)) && (criteria.nameContains == null || criteria.nameContains.isEmpty() || extensionName.contains(criteria.nameContains)) ; } else { return true; } } private boolean acceptInterface(String registeredInterface, ExtensionFilterCriteria criteria) { if( criteria.filter ) { return (criteria.interfaceEqualTo == null || criteria.interfaceEqualTo.isEmpty() || registeredInterface.equals(criteria.interfaceEqualTo)) ; } else { return true; } } }