⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genericvaluelistdynaclass.java

📁 国外的一套开源CRM
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		Iterator gvlI = genericValueList.iterator();
		while (gvlI.hasNext() && (limit < 0  || cnt++ < limit) ) {
			GenericValue gv = (GenericValue) gvlI.next();	
			DynaBean bean = createDynaBean();
			for (int i = 0; i < properties.length; i++) {
				String name = properties[i].getName();
				bean.set(name, gv.get(name));
			}
			rows.add(bean);
		}

	}


	/**
	 * <p>Create and return a new {@link DynaBean} instance to be used for
	 * representing a row in the underlying result set.</p>
	 */
	protected DynaBean createDynaBean() {

		return (new BasicDynaBean(this));

	}

	// ----------------------------------------------------- Instance Variables

	/**
	 * <p>Flag defining whether column names should be lower cased when
	 * converted to property names.</p>
	 */
	protected boolean lowerCase = true;

	/**
	 * <p>The set of dynamic properties that are part of this
	 * {@link DynaClass}.</p>
	 */
	protected DynaProperty properties[] = null;

	/**
	 * <p>The set of dynamic properties that are part of this
	 * {@link DynaClass}, keyed by the property name.  Individual descriptor
	 * instances will be the same instances as those in the
	 * <code>properties</code> list.</p>
	 */
	protected Map propertiesMap = new HashMap();

	// ------------------------------------------------------ DynaClass Methods

	/**
	 * <p>Return the name of this DynaClass (analogous to the
	 * <code>getName()</code> method of <code>java.lang.Class</code), which
	 * allows the same <code>DynaClass</code> implementation class to support
	 * different dynamic classes, with different sets of properties.</p>
	 */
	public String getName() {

		return (this.getClass().getName());

	}

	/**
	 * <p>Return a property descriptor for the specified property, if it
	 * exists; otherwise, return <code>null</code>.</p>
	 *
	 * @param name Name of the dynamic property for which a descriptor
	 *  is requested
	 *
	 * @exception IllegalArgumentException if no property name is specified
	 */
	public DynaProperty getDynaProperty(String name) {

		if (name == null) {
			throw new IllegalArgumentException("No property name specified");
		}
		return ((DynaProperty) propertiesMap.get(name));

	}

	/**
	 * <p>Return an array of <code>ProperyDescriptors</code> for the properties
	 * currently defined in this DynaClass.  If no properties are defined, a
	 * zero-length array will be returned.</p>
	 */
	public DynaProperty[] getDynaProperties() {

		return (properties);

	}

	/**
	 * <p>Instantiate and return a new DynaBean instance, associated
	 * with this DynaClass.  <strong>NOTE</strong> - This operation is not
	 * supported, and throws an exception.</p>
	 *
	 * @exception IllegalAccessException if the Class or the appropriate
	 *  constructor is not accessible
	 * @exception InstantiationException if this Class represents an abstract
	 *  class, an array class, a primitive type, or void; or if instantiation
	 *  fails for some other reason
	 */
	public DynaBean newInstance()
			throws IllegalAccessException, InstantiationException {

		throw new UnsupportedOperationException("newInstance() not supported");

	}

	/**
	 * <p>Loads and returns the <code>Class</code> of the given name.
	 * By default, a load from the thread context class loader is attempted.
	 * If there is no such class loader, the class loader used to load this
	 * class will be utilized.</p>
	 *
	 * @exception GenericEntityException if an exception was thrown trying to load
	 *  the specified class
	 */
	protected Class loadClass(String className) throws GenericEntityException {

		try {
			ClassLoader cl = Thread.currentThread().getContextClassLoader();
			if (cl == null) {
					cl = this.getClass().getClassLoader();
			}
			return (cl.loadClass(className));
		} catch (Exception e) {
			throw new GenericEntityException(
					"Cannot load column class '" + className + "': " + e);
		}

	}

	/**
	 * <p>Factory method to create a new DynaProperty for the given index
	 * into the result set metadata.</p>
	 * 
	 * @param metadata is the result set metadata
	 * @param i is the column index in the metadata
	 * @return the newly created DynaProperty instance
	 */
	protected DynaProperty createDynaProperty(
									GenericDelegator delegator,
									ModelEntity modelEntity,
									String fieldName)
									throws GenericEntityException {

		String name = null;
		ModelField modelField = modelEntity.getField(fieldName);
		
		
		
		ModelFieldType type = null;
		try {
			ModelEntity mainModelEntity = modelEntity;
			if ( modelEntity.getEntityName().equals("DynamicViewEntity"))
				mainModelEntity = ((ModelViewEntity) modelEntity).getMemberModelEntity(((ModelViewEntity) modelEntity).getAlias(0).getEntityAlias());
			type = delegator.getEntityFieldType(mainModelEntity, modelField.getType());
		} catch (GenericEntityException e) {
			Debug.logWarning(e, module);
		}
		if (type == null) throw new IllegalArgumentException("Type " + modelField.getType() + " not found");
		String fieldType = type.getJavaType();
		
		//modelField.get
		if (lowerCase) {
			name = modelField.getName().toLowerCase();
		} else {
			name = modelField.getName();
		}
		String className = null;

		className = (String) fieldTypeMap.get(new Integer(SqlJdbcUtil.getType(fieldType)));

		// Default to Object type if no class name could be retrieved
		// from the metadata
		Class clazz = Object.class;
		if (className != null) {
			clazz = loadClass(className);
		}
		return new DynaProperty(name, clazz);

	}

	/**
	 * <p>Introspect the metadata associated with our result set, and populate
	 * the <code>properties</code> and <code>propertiesMap</code> instance
	 * variables.</p>
	 *
	 * @param resultSet The <code>resultSet</code> whose metadata is to
	 *  be introspected
	 *
	 * @exception GenericEntityException if an error is encountered processing the
	 *  result set metadata
	 */
	protected void introspect(List genericValueList) throws GenericEntityException {

		// Accumulate an ordered list of DynaProperties
		ArrayList list = new ArrayList();
		
		GenericValue genericValue = (GenericValue) genericValueList.get(0);
		ModelEntity modelEntity = genericValue.getModelEntity();
		 
		List fieldNames = fieldsToSelect;
		if ( fieldNames == null )
			fieldNames = modelEntity.getAllFieldNames();
		int n = fieldNames.size();
		for (int i = 0; i < n; i++) { 
			DynaProperty dynaProperty = createDynaProperty(genericValue.getDelegator(), modelEntity, (String) fieldNames.get(i));
			if (dynaProperty != null) {
					list.add(dynaProperty);
			}
		}

		// Convert this list into the internal data structures we need
		properties =
			(DynaProperty[]) list.toArray(new DynaProperty[list.size()]);
		for (int i = 0; i < properties.length; i++) {
			propertiesMap.put(properties[i].getName(), properties[i]);
		}

	}

protected static Map fieldTypeMap = new HashMap();
static {
	fieldTypeMap.put(new Integer(1), "java.lang.String" );
	fieldTypeMap.put(new Integer(2), "java.sql.Timestamp");
	fieldTypeMap.put(new Integer(3), "java.sql.Time");
	fieldTypeMap.put(new Integer(4), "java.sql.Date");
	fieldTypeMap.put(new Integer(5), "java.lang.Integer");
	fieldTypeMap.put(new Integer(6), "java.lang.Long");
	fieldTypeMap.put(new Integer(7), "java.lang.Float");
	fieldTypeMap.put(new Integer(8), "java.lang.Double");
	fieldTypeMap.put(new Integer(9), "java.lang.Boolean");
	fieldTypeMap.put(new Integer(10), "java.lang.Object");
}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -