`DefaultGriffonServiceClass.java`
`01 /* 02 * Copyright 2010-2012 the original author or authors. 03 * 04 * Licensed under the Apache License, Version 2.0 (the "License"); 05 * you may not use this file except in compliance with the License. 06 * You may obtain a copy of the License at 07 * 08 * http://www.apache.org/licenses/LICENSE-2.0 09 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package org.codehaus.griffon.runtime.core; 17 18 import griffon.core.GriffonApplication; 19 import griffon.core.GriffonServiceClass; 20 import griffon.util.GriffonClassUtils; 21 import griffon.util.GriffonNameUtils; 22 import groovy.lang.Closure; 23 import groovy.lang.MetaMethod; 24 import groovy.lang.MetaProperty; 25 26 import java.lang.reflect.Method; 27 import java.util.LinkedHashSet; 28 import java.util.Set; 29 30 /** 31 * @author Andres Almiray 32 * @since 0.9.1 33 */ 34 public class DefaultGriffonServiceClass extends DefaultGriffonClass implements GriffonServiceClass { 35 protected final Set<String> serviceCache = new LinkedHashSet<String>(); 36 37 public DefaultGriffonServiceClass(GriffonApplication app, Class<?> clazz) { 38 super(app, clazz, TYPE, TRAILING); 39 } 40 41 public void resetCaches() { 42 super.resetCaches(); 43 serviceCache.clear(); 44 } 45 46 public String[] getServiceNames() { 47 if (serviceCache.isEmpty()) { 48 for (String propertyName : getPropertiesWithFields()) { 49 if (!STANDARD_PROPERTIES.contains(propertyName) && 50 !serviceCache.contains(propertyName) && 51 !GriffonClassUtils.isEventHandler(propertyName) && 52 getPropertyValue(propertyName, Closure.class) != null) { 53 serviceCache.add(propertyName); 54 } 55 } 56 for (Method method : getClazz().getMethods()) { 57 String methodName = method.getName(); 58 if (!serviceCache.contains(methodName) && 59 GriffonClassUtils.isPlainMethod(method) && 60 !GriffonClassUtils.isEventHandler(methodName)) { 61 serviceCache.add(methodName); 62 } 63 } 64 for (MetaProperty p : getMetaProperties()) { 65 String propertyName = p.getName(); 66 if (GriffonClassUtils.isGetter(p, true)) { 67 propertyName = GriffonNameUtils.uncapitalize(propertyName.substring(3)); 68 } 69 if (!STANDARD_PROPERTIES.contains(propertyName) && 70 !serviceCache.contains(propertyName) && 71 !GriffonClassUtils.isEventHandler(propertyName) && 72 isClosureMetaProperty(p)) { 73 serviceCache.add(propertyName); 74 } 75 } 76 for (MetaMethod method : getMetaClass().getMethods()) { 77 String methodName = method.getName(); 78 if (!serviceCache.contains(methodName) && 79 GriffonClassUtils.isPlainMethod(method) && 80 !GriffonClassUtils.isEventHandler(methodName)) { 81 serviceCache.add(methodName); 82 } 83 } 84 } 85 86 return serviceCache.toArray(new String[serviceCache.size()]); 87 } 88 }`