001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017 package org.apache.geronimo.console;
018
019 import java.lang.reflect.Method;
020 import java.lang.reflect.Modifier;
021 import javax.portlet.GenericPortlet;
022 import javax.portlet.PortletRequest;
023 import org.apache.commons.logging.Log;
024 import org.apache.commons.logging.LogFactory;
025
026 import org.apache.geronimo.console.util.PortletManager;
027 import org.apache.geronimo.management.geronimo.WebContainer;
028
029 /**
030 * Superclass with some generic functionality for console portlets
031 *
032 * @version $Rev: 562021 $ $Date: 2007-08-02 01:51:18 -0400 (Thu, 02 Aug 2007) $
033 */
034 public class BasePortlet extends GenericPortlet {
035 private final static Log log = LogFactory.getLog(BasePortlet.class);
036 protected final static String WEB_SERVER_JETTY = "jetty";
037 protected final static String WEB_SERVER_TOMCAT = "tomcat";
038 protected final static String WEB_SERVER_GENERIC = "generic";
039
040 protected final static String getWebServerType(Class cls) {
041 Class[] intfs = cls.getInterfaces();
042 for (int i = 0; i < intfs.length; i++) {
043 Class intf = intfs[i];
044 if(intf.getName().indexOf("Jetty") > -1) {
045 return WEB_SERVER_JETTY;
046 } else if(intf.getName().indexOf("Tomcat") > -1) {
047 return WEB_SERVER_TOMCAT;
048 }
049 }
050 return WEB_SERVER_GENERIC;
051 }
052
053 public final static void setProperty(Object target, String name, Object value) {
054 boolean found = false;
055 Class cls = target.getClass();
056 String setter = "set"+Character.toUpperCase(name.charAt(0))+name.substring(1);
057 Method[] list = cls.getMethods();
058 for (int i = 0; i < list.length; i++) {
059 Method method = list[i];
060 if(method.getName().equals(setter) && method.getParameterTypes().length == 1 && Modifier.isPublic(method.getModifiers()) &&
061 !Modifier.isStatic(method.getModifiers())) {
062 found = true;
063 try {
064 method.invoke(target, new Object[]{value});
065 } catch (Exception e) {
066 log.error("Unable to set property "+name+" on "+target.getClass().getName());
067 }
068 break;
069 }
070 }
071 if(!found) {
072 throw new IllegalArgumentException("No such method found ("+setter+" on "+target.getClass().getName()+")");
073 }
074 }
075
076 public final static Object getProperty(Object target, String name) {
077 Class cls = target.getClass();
078 String getter = "get"+Character.toUpperCase(name.charAt(0))+name.substring(1);
079 String booleanGetter = "is"+Character.toUpperCase(name.charAt(0))+name.substring(1);
080 Method[] list = cls.getMethods();
081 for (int i = 0; i < list.length; i++) {
082 Method method = list[i];
083 String methodName = method.getName();
084 if( (methodName.equals(getter) || methodName.equals(booleanGetter))
085 && method.getParameterTypes().length == 0 && Modifier.isPublic(method.getModifiers()) &&
086 !Modifier.isStatic(method.getModifiers())) {
087 try {
088 return method.invoke(target, new Object[0]);
089 } catch (Exception e) {
090 log.error("Unable to get property "+name+" on "+target.getClass().getName());
091 }
092 break;
093 }
094 }
095 throw new IllegalArgumentException("No such method found ("+getter+" on "+target.getClass().getName()+")");
096 }
097
098 public final static Object callOperation(Object target, String operation, Object[] args) {
099 Class cls = target.getClass();
100 Method[] list = cls.getMethods();
101 for (int i = 0; i < list.length; i++) {
102 Method method = list[i];
103 if(method.getName().equals(operation) && ((args == null && method.getParameterTypes().length == 0) || (args != null && args.length == method.getParameterTypes().length))
104 && Modifier.isPublic(method.getModifiers()) && !Modifier.isStatic(method.getModifiers())) {
105 try {
106 return method.invoke(target, args);
107 } catch (Exception e) {
108 log.error("Unable to invoke "+operation+" on "+target.getClass().getName());
109 }
110 break;
111 }
112 }
113 throw new IllegalArgumentException("No such method found ("+operation+" on "+target.getClass().getName()+")");
114 }
115 }