Java tutorial
package com.khs.sherpa.endpoint; /* * Copyright 2012 the original author or authors. * * 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. */ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import javax.annotation.security.DenyAll; import javax.annotation.security.RolesAllowed; import org.apache.commons.lang3.StringUtils; import org.reflections.ReflectionUtils; import org.reflections.Reflections; import com.google.common.base.Predicates; import com.khs.sherpa.annotation.Action; import com.khs.sherpa.annotation.Endpoint; import com.khs.sherpa.annotation.Param; import com.khs.sherpa.context.ApplicationContext; import com.khs.sherpa.context.ApplicationContextAware; import com.khs.sherpa.exception.NoSuchManagedBeanExcpetion; import com.khs.sherpa.exception.SherpaRuntimeException; import com.khs.sherpa.json.service.SessionTokenService; import com.khs.sherpa.util.MethodUtil; import com.khs.sherpa.util.SherpaPredicates; @Endpoint(value = "Sherpa", authenticated = false) public class SherpaEndpoint implements ApplicationContextAware { private ApplicationContext applicationContext; @RolesAllowed("SHERPA_ADMIN") @Action(mapping = "/sherpa/admin/sessions") public Object sessions(SessionTokenService service) { return service.sessions(); } @RolesAllowed("SHERPA_ADMIN") @Action(mapping = "/sherpa/admin/endpoints") public Map<String, String> endpoints() { Map<String, String> map = new HashMap<String, String>(); for (Entry<String, Object> entry : applicationContext.getEndpointTypes().entrySet()) { String name = entry.getValue().getClass().getAnnotation(Endpoint.class).value(); if (StringUtils.isEmpty(name)) { name = entry.getValue().getClass().getSimpleName(); } map.put(name, entry.getValue().getClass().getName()); } return map; } @SuppressWarnings("unchecked") // @RolesAllowed("SHERPA_ADMIN") @Action(mapping = "/sherpa/admin/describe/{value}") public Object describe(@Param("value") String value) { List<Map<String, Object>> actions = new ArrayList<Map<String, Object>>(); Set<Method> methods = null; try { methods = Reflections.getAllMethods(applicationContext.getType(value), Predicates.and(Predicates.not(SherpaPredicates.withAssignableFrom(Object.class)), ReflectionUtils.withModifier(Modifier.PUBLIC), Predicates.not(ReflectionUtils.withModifier(Modifier.ABSTRACT)), Predicates.not(SherpaPredicates.withGeneric()))); } catch (NoSuchManagedBeanExcpetion e) { throw new SherpaRuntimeException(e); } for (Method method : methods) { Map<String, Object> action = new HashMap<String, Object>(); actions.add(action); action.put("name", MethodUtil.getMethodName(method)); if (method.isAnnotationPresent(DenyAll.class)) { action.put("permission", "DenyAll"); } else if (method.isAnnotationPresent(RolesAllowed.class)) { action.put("permission", "RolesAllowed"); action.put("roles", method.getAnnotation(RolesAllowed.class).value()); } else { action.put("permission", "PermitAll"); } Map<String, String> params = new HashMap<String, String>(); Class<?>[] types = method.getParameterTypes(); Annotation[][] parameters = method.getParameterAnnotations(); for (int i = 0; i < parameters.length; i++) { Class<?> type = types[i]; Param annotation = null; if (parameters[i].length > 0) { for (Annotation an : parameters[i]) { if (an.annotationType().isAssignableFrom(Param.class)) { annotation = (Param) an; break; } } } if (annotation != null) { params.put(annotation.value(), type.getName()); } } if (params.size() > 0) { action.put("params", params); } else { action.put("params", null); } } return actions; } public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } }