Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * OfficeFloor - http://www.officefloor.net
   * Copyright (C) 2005-2011 Daniel Sagenschneider
   *
   * This program is free software: you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation, either version 3 of the License, or
   * (at your option) any later version.
   *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.officefloor.plugin.administrator.clazz;
 
 import java.util.List;
 
 
 public class ClassAdministratorSource extends
Property name providing the java.lang.Class name.
 
 	public static final String CLASS_NAME_PROPERTY_NAME = "class.name";

java.lang.Class of the java.lang.Object providing administration methods.
 
 	private Class<?> objectClass;

Array type for the array of extension interfaces to pass to the administration java.lang.reflect.Method.
 
 
 	private Method[] dutyMethods;

Obtains the most specific extension interface type.

Parameters:
extensionInterface Current extension interface type. May be null if first administration java.lang.reflect.Method.
componentType Type to determine if in hierarchy with extension interface.
Returns:
Most specific type.
Throws:
java.lang.Exception If types are not assignable. Not able to obtain most specific as either type is not a parent of the other type.
 
 	private Class<?> getMostSpecificType(Class<?> extensionInterface,
 			Class<?> componentTypethrows Exception {
 
 		// Ensure have extension interface
 		if (extensionInterface == null) {
 			return componentType;
 		}
 
 		// Determine which is assignable
 		if (extensionInterface.isAssignableFrom(componentType)) {
 			// Component type is more specific
 			return componentType;
 		} else if (componentType.isAssignableFrom(extensionInterface)) {
 			// Extension interface contains to be more specific
 			return extensionInterface;
 		} else {
 			// Either is not the parent of the other, no specific type
 			throw new Exception("Incompatible extension interfaces ("
 					+ extensionInterface.getClass().getName() + ", "
 					+ componentType.getClass().getName() + ")");
 		}
	}
	/*
	 * =================== AdministratorSourceService ==========================
	 */
	}
		return "CLASS";
	}
	/*
	 * =================== AbstractAdministratorSource =================
	 */
	protected void loadSpecification(SpecificationContext context) {
	}
	@SuppressWarnings({ "unchecked""rawtypes" })
	protected void loadMetaData(MetaDataContext<ObjectIndexedcontext)
			throws Exception {
		AdministratorSourceContext adminContext = context
		// Obtain the administrator class
		String adminClassName = adminContext
		this. = adminContext.getClassLoader().loadClass(
				adminClassName);
		// Obtain the methods of class in sorted order (maintains indexes)
		Method[] methods = this..getMethods();
		Arrays.sort(methodsnew Comparator<Method>() {
			public int compare(Method aMethod b) {
				return a.getName().compareTo(b.getName());
			}
		});
		// Interrogate for administration methods and extension interface
		Class extensionInterface = null;
		List<MethodadminMethods = new LinkedList<Method>();
		for (Method method : methods) {
			// Method must have only one parameter
			Class<?>[] paramTypes = method.getParameterTypes();
			if ((paramTypes == null) || (paramTypes.length != 1)) {
				continue// must have one parameter
			}
			Class<?> paramType = paramTypes[0];
			// The parameter must be an array
			if (!(paramType.isArray())) {
				continue// must be an array
			}
			// Obtain the component type for the array
			Class<?> componentType = paramType.getComponentType();
			// Keep track of the most specific extension interface type
			extensionInterface = this.getMostSpecificType(extensionInterface,
					componentType);
			// Add in the duty
			context.addDuty(method.getName());
			adminMethods.add(method);
		}
		// Provide the extension interface
		context.setExtensionInterface(extensionInterface);
		// Keep reference to create the administrators
		this. = extensionInterface;
		this. = adminMethods.toArray(new Method[0]);
	}
			throws Exception {
		// Create the administration object
		Object object = this..newInstance();
		// Return the administrator
	}
New to GrepCode? Check out our FAQ X