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

📄 entityfieldpropertysource.java

📁 基于eclipse的工具开发代码
💻 JAVA
字号:
package com.cownew.studio.modelDev.propertiesSheet;

import java.util.ArrayList;
import java.util.List;

import org.dom4j.DocumentException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.TextPropertyDescriptor;

import com.cownew.studio.Activator;
import com.cownew.studio.modelDev.common.EntityFieldModelBean;
import com.cownew.studio.modelDev.common.EntityModelBean;
import com.cownew.studio.modelDev.common.EntityModelFileHandler;
import com.cownew.studio.modelDev.common.enumdef.CascadeEnum;
import com.cownew.studio.modelDev.common.enumdef.DataTypeEnum;
import com.cownew.studio.modelDev.common.enumdef.LinkTypeEnum;
import com.cownew.studio.modelDev.common.enumdef.OuterJoinEnum;
import com.cownew.studio.modelDev.common.properties.BooleanPropertyDescriptor;
import com.cownew.studio.modelDev.common.properties.EnumPropertyDescriptor;
import com.cownew.studio.modelDev.common.properties.IntegerPropertyDescriptor;
import com.cownew.studio.modelDev.common.properties.StandardComboBoxPropertyDescriptor;

public class EntityFieldPropertySource implements IPropertySource
{

	private final int PROPID_NAME = 1;

	private final int PROPID_ALIAS = 2;

	private final int PROPID_DATATYPE = 4;

	private final int PROPID_DBFIELDNAME = 5;

	private final int PROPID_ALLOWNULL = 6;

	private final int PROPID_LENGTH = 7;

	private final int PROPID_ISLINKPROPERTY = 8;

	private final int PROPID_LINKTYPE = 9;

	private final int PROPID_LINKENTITY = 10;

	private final int PROPID_CASCADETYPE = 11;

	private final int PROPID_OUTERJOINTYPE = 12;

	private final int PROPID_CONSTRAINED = 13;

	private final int PROPID_INVERSE = 14;

	private final int PROPID_LINKSERVERFIELD = 90;

	private EntityFieldModelBean bean;

	private IProject project;

	public EntityFieldPropertySource(EntityFieldModelBean bean, IProject project)
	{
		super();
		this.bean = bean;
		this.project = project;
	}

	public IPropertyDescriptor[] getPropertyDescriptors()
	{
		List<IPropertyDescriptor> propList = new ArrayList<IPropertyDescriptor>();

		propList.add(new TextPropertyDescriptor(PROPID_NAME, "name"));
		propList.add(new TextPropertyDescriptor(PROPID_ALIAS, "alias"));
		String[] typeDisplayStrings = new String[] { "String", "Int",
										"BigDecimal", "Date", "Bool", "Clob", "Blob" };
		DataTypeEnum[] typeItems = DataTypeEnum.values();
		IPropertyDescriptor typePropDesc = new StandardComboBoxPropertyDescriptor(
				PROPID_DATATYPE, "FieldType", typeDisplayStrings, typeItems);
		propList.add(typePropDesc);
		propList.add(new TextPropertyDescriptor(PROPID_DBFIELDNAME,
				"DBFieldName"));
		IPropertyDescriptor allowNullPropDesc = new BooleanPropertyDescriptor(PROPID_ALLOWNULL,
						"allowNull");
		propList.add(allowNullPropDesc);

		Object dataType = getPropertyValue(PROPID_DATATYPE);
		
		//数据类型为日期、布尔之外的类型的时候“长度”属性才有意义
		if (dataType != null && dataType != DataTypeEnum.DATE
				&& dataType != DataTypeEnum.BOOLEAN)
		{
			IPropertyDescriptor lenPropDesc = new IntegerPropertyDescriptor(
					PROPID_LENGTH, "length");
			propList.add(lenPropDesc);
		}

		//我们规定所有关联字段都必须是字符串类型
		//所以这里判断只有类型为STRING类型的时候“是否连接实体属性”属性才有意义
		if (dataType == DataTypeEnum.STRING)
		{
			BooleanPropertyDescriptor linkPropDesc = new BooleanPropertyDescriptor(PROPID_ISLINKPROPERTY,
								"isLinkProperty");
			propList.add(linkPropDesc);
			Object isLinkProp = getPropertyValue(PROPID_ISLINKPROPERTY);
			if (isLinkProp.equals(Boolean.TRUE))
			{
				//如果是“连接实体属性”则构造实体连接相关的属性描述者
				fillLinkPropertyPart(propList);

			}
		}

		return propList.toArray(new IPropertyDescriptor[propList.size()]);
	}

	/**
	 * 构造实体连接相关的属性描述者
	 */
	private void fillLinkPropertyPart(List<IPropertyDescriptor> propList)
	{
		propList.add(new EntityPropertyDescriptor(
				PROPID_LINKENTITY, "LinkedEntity", project));
		LinkTypeEnum[] linkTypeEnums = new LinkTypeEnum[] {
								LinkTypeEnum.ONETOONE, LinkTypeEnum.ONETOMANY,LinkTypeEnum.MANYTOONE };
		String[] linkTypeStrings = new String[] { "OneToOne",
								"OneToMany","ManyToOne" };
		propList.add(new StandardComboBoxPropertyDescriptor(
				PROPID_LINKTYPE, "linkType", linkTypeStrings, linkTypeEnums));

		propList.add(new EnumPropertyDescriptor(PROPID_CASCADETYPE,
				"cascadeType", CascadeEnum.class));
		propList.add(new EnumPropertyDescriptor(PROPID_OUTERJOINTYPE,
				"outerJoinType", OuterJoinEnum.class));
		Object linkType = getPropertyValue(PROPID_LINKTYPE);
		if (linkType == LinkTypeEnum.ONETOONE)
		{
			propList.add(new BooleanPropertyDescriptor(PROPID_CONSTRAINED,
					"constrained"));
		} else if (linkType == LinkTypeEnum.ONETOMANY)
		{
			propList.add(new BooleanPropertyDescriptor(PROPID_INVERSE,
					"inverse"));

			String linkEntity = (String) getPropertyValue(PROPID_LINKENTITY);
			if (linkEntity != null)
			{
				//只有关联类型为ONETOMANY并且关联的实体不为空的时候构造keycolumn属性描述者
				String[] colArray = getLinkEntityCols(linkEntity);
				IPropertyDescriptor keyColPropDesc = new StandardComboBoxPropertyDescriptor(
										PROPID_LINKSERVERFIELD, "keycolumn", colArray,colArray);
				propList.add(keyColPropDesc);
			}
		}
	}

	/**
	 * 得到实体linkEntity的所有的字段
	 * @param linkEntity
	 * @return
	 */
	private String[] getLinkEntityCols(String linkEntity)
	{
		EntityModelBean linkBean;
		try
		{
			IFile linkFile = project.getFile(linkEntity);
			linkBean = EntityModelFileHandler.xmlToBean(linkFile);
		} catch (DocumentException e)
		{
			Activator.logException(e);
			return null;
		}
		List<EntityFieldModelBean> fieldList = linkBean.getFieldList();
		String[] fieldArray = getAllColumns(fieldList);
		return fieldArray;
	}

	/**
	 * 从字段列表得到字段名
	 * @param fieldList
	 * @return
	 */
	private static String[] getAllColumns(
			List<EntityFieldModelBean> fieldList)
	{
		int size = fieldList.size();
		String[] fields = new String[size];
		for (int i = 0, n = size; i < n; i++)
		{
			fields[i] = fieldList.get(i).getDbFieldName();
		}
		return fields;
	}
	
	public Object getPropertyValue(Object id)
	{
		int i = ((Integer) id).intValue();
		switch (i) {
		case PROPID_NAME:
			return bean.getName();
		case PROPID_ALIAS:
			return bean.getAlias();
		case PROPID_DATATYPE:
			return bean.getDataype();
		case PROPID_DBFIELDNAME:
			return bean.getDbFieldName();
		case PROPID_ALLOWNULL:
			return bean.isAllowNull();
		case PROPID_LENGTH:
			return Integer.valueOf(bean.getLength());
		case PROPID_ISLINKPROPERTY:
			return Boolean.valueOf(bean.isLinkProperty());
		case PROPID_LINKTYPE:
			return bean.getLinkType();
		case PROPID_LINKENTITY:
			return bean.getLinkEntity();
		case PROPID_CASCADETYPE:
			return bean.getCascadeType();
		case PROPID_OUTERJOINTYPE:
			return bean.getOuterJoinType();
		case PROPID_CONSTRAINED:
			return Boolean.valueOf(bean.isConstrained());
		case PROPID_INVERSE:
			return Boolean.valueOf(bean.isInverse());
		case PROPID_LINKSERVERFIELD:
			return bean.getKeyColumn();
		default:
			throw new IllegalArgumentException();

		}
	}

	public void setPropertyValue(Object id, Object value)
	{
		int i = ((Integer) id).intValue();

		switch (i) {
		case PROPID_NAME:
			bean.setName((String) value);
			break;
		case PROPID_ALIAS:
			bean.setAlias((String) value);
			break;
		case PROPID_DATATYPE:
			bean.setDataType((DataTypeEnum) value);
			break;
		case PROPID_DBFIELDNAME:
			bean.setDbFieldName((String) value);
			break;
		case PROPID_ALLOWNULL:
			Boolean allowNull = (Boolean) value;
			bean.setAllowNull(allowNull.booleanValue());
			break;
		case PROPID_LENGTH:
			Integer length = (Integer) value;
			bean.setLength(length.intValue());
			break;
		case PROPID_ISLINKPROPERTY:
			Boolean isLinkProp = (Boolean) value;
			bean.setLinkProperty(isLinkProp.booleanValue());
			break;
		case PROPID_LINKTYPE:
			bean.setLinkType((LinkTypeEnum) value);
			break;
		case PROPID_LINKENTITY:
			bean.setLinkEntity((String) value);
			break;
		case PROPID_CASCADETYPE:
			bean.setCascadeType((CascadeEnum) value);
			break;
		case PROPID_OUTERJOINTYPE:
			bean.setOuterJoinType((OuterJoinEnum) value);
			break;
		case PROPID_CONSTRAINED:
			Boolean constrained = (Boolean) value;
			bean.setConstrained(constrained.booleanValue());
			break;
		case PROPID_INVERSE:
			Boolean inverse = (Boolean) value;
			bean.setInverse(inverse.booleanValue());
			break;
		case PROPID_LINKSERVERFIELD:
			bean.setKeyColumn((String) value);
			break;
		default:
			throw new IllegalArgumentException();

		}
	}

	public Object getEditableValue()
	{
		return null;
	}

	public boolean isPropertySet(Object id)
	{
		return true;
	}

	public void resetPropertyValue(Object id)
	{
				
	}

}

⌨️ 快捷键说明

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