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

📄 configparteditor.java

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

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.InputStream;
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.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.ui.IJavaElementSearchConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.dialogs.SelectionDialog;

import com.cownew.studio.modelDev.common.CommonUtils;
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.MsgBox;
import com.cownew.studio.modelDev.common.SelectionListenerAdapter;

public class ConfigPartEditor extends AbstractPartEditor
{
	private Composite container;

	private Text txtName;

	private Text txtAlias;

	private Text txtPackageName;

	private Text txtDBTableName;

	private Combo comboPrimaryKey;

	private ListViewer listViewerFields;

	private List<EntityFieldModelBean> listFieldModelBean;

	private boolean isLoading = false;

	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException
	{
		super.init(site, input);
		setPartName("config");

	}

	public void createPartControl(Composite parent)
	{
		Point size = new Point(480, 250);
		ScrolledComposite scontainer = new ScrolledComposite(parent,
				SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
		scontainer.setExpandHorizontal(true);
		scontainer.setExpandVertical(true);
		scontainer.setMinSize(size);

		container = new Composite(scontainer, SWT.NONE);
		container.setSize(size);
		scontainer.setContent(container);

		GridLayout gridLayout = new GridLayout(4, false);
		container.setLayout(gridLayout);

		ModifyListener modifyListener = new ModifyListener() {

			public void modifyText(ModifyEvent e)
			{
				loadBeanToEditorInput();
			}

		};

		Label lName = new Label(container, SWT.NONE);
		lName.setText("Name:");
		GridData gdTxtName = new GridData();
		gdTxtName.horizontalSpan = 3;
		gdTxtName.horizontalAlignment = GridData.FILL;
		txtName = new Text(container, SWT.NONE);
		txtName.setLayoutData(gdTxtName);

		Label lAlias = new Label(container, SWT.NONE);
		lAlias.setText("Alias:");
		GridData gdAlias = new GridData();
		gdAlias.horizontalSpan = 3;
		gdAlias.horizontalAlignment = GridData.FILL;
		txtAlias = new Text(container, SWT.NONE);
		txtAlias.setLayoutData(gdAlias);

		Label lPackageName = new Label(container, SWT.NONE);
		lPackageName.setText("PackageName:");
		GridData gdPackageName = new GridData();
		gdPackageName.horizontalSpan = 2;
		gdPackageName.horizontalAlignment = GridData.FILL;
		txtPackageName = new Text(container, SWT.NONE);
		txtPackageName.setLayoutData(gdPackageName);

		Button btnBrowsePackage = new Button(container, SWT.NONE);
		btnBrowsePackage.setText("...");
		btnBrowsePackage.addSelectionListener(new SelectionListenerAdapter() {
			public void widgetSelected(SelectionEvent e)
			{
				super.widgetSelected(e);
				browsePackage();
			}

		});

		Label lDBTableName = new Label(container, SWT.NONE);
		lDBTableName.setText("DBTableName:");
		GridData gdDBTableName = new GridData();
		gdDBTableName.horizontalSpan = 3;
		gdDBTableName.horizontalAlignment = GridData.FILL;
		txtDBTableName = new Text(container, SWT.NONE);
		txtDBTableName.setLayoutData(gdDBTableName);

		Label lPrimaryKey = new Label(container, SWT.NONE);
		lPrimaryKey.setText("PrimaryKey(only string field):");
		GridData gdPrimaryKey = new GridData();
		gdPrimaryKey.horizontalSpan = 3;
		gdPrimaryKey.horizontalAlignment = GridData.FILL;
		comboPrimaryKey = new Combo(container, SWT.READ_ONLY);
		comboPrimaryKey.setLayoutData(gdPrimaryKey);
		comboPrimaryKey.addSelectionListener(new SelectionListenerAdapter() {
			public void widgetSelected(SelectionEvent e)
			{

				loadBeanToEditorInput();
			}

		});

		Label lFieldList = new Label(container, SWT.NONE);
		lFieldList
				.setText("Field List(property of field will display in view of'properties'):");
		GridData gdDFieldList = new GridData();
		gdDFieldList.horizontalSpan = 4;
		gdDFieldList.horizontalAlignment = GridData.FILL;
		lFieldList.setLayoutData(gdDFieldList);

		final org.eclipse.swt.widgets.List listFields = new org.eclipse.swt.widgets.List(
				container, SWT.V_SCROLL | SWT.H_SCROLL);

		GridData gdListField = new GridData();
		gdListField.horizontalSpan = 3;
		gdListField.verticalSpan = 6;
		gdListField.horizontalAlignment = GridData.FILL;
		gdListField.verticalAlignment = GridData.FILL;

		gdListField.heightHint = 100;
		listFields.setLayoutData(gdListField);

		listViewerFields = new ListViewer(listFields);

		listViewerFields.setLabelProvider(new FieldLabelProvider());
		listViewerFields.setContentProvider(new ListContentProvider());
		getSite().setSelectionProvider(listViewerFields);

		listFieldModelBean = new ArrayList<EntityFieldModelBean>();
		listViewerFields.setInput(listFieldModelBean);

		Button btnAdd = new Button(container, SWT.NONE);
		btnAdd.setText("add");
		btnAdd.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e)
			{
				addField();
			}

		});

		Button btnRemove = new Button(container, SWT.NONE);
		btnRemove.setText("remove");
		btnRemove.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e)
			{
				removeField(listFields);
			}

		});

		Button btnShowPropPage = new Button(container, SWT.NONE);
		btnShowPropPage.setText("open properties views");
		btnShowPropPage.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e)
			{
				EditorUtils.openPropertiesSheetView();
			}
		});

		new Label(container, SWT.NONE);
		new Label(container, SWT.NONE);
		new Label(container, SWT.NONE);

		loadDocument();

		txtName.addModifyListener(modifyListener);
		txtAlias.addModifyListener(modifyListener);
		txtDBTableName.addModifyListener(modifyListener);
		txtPackageName.addModifyListener(modifyListener);

		container.layout();
	}

	public void doSave(IProgressMonitor monitor)
	{
		if (CommonUtils.isEmptyString(txtName.getText()))
		{
			Shell shell = getSite().getShell();
			MsgBox.showError(shell, "Name cannot be null!");
			return;
		}
		super.doSave(monitor);
	}

	private PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {

		public void propertyChange(PropertyChangeEvent evt)
		{
			refreshEditor();
		}

	};

	private void fillControl(EntityModelBean bean)
	{
		txtName.setText(bean.getName());

		txtAlias.setText(bean.getAlias());

		txtPackageName.setText(bean.getPackageName());

		txtDBTableName.setText(bean.getDbTableName());

		listFieldModelBean.clear();
		listFieldModelBean.addAll(bean.getFieldList());
		for (int i = 0, n = listFieldModelBean.size(); i < n; i++)
		{
			EntityFieldModelBean fieldModelBean = listFieldModelBean.get(i);
			PropertyChangeSupport pcp = (PropertyChangeSupport) fieldModelBean
					.getAdapter(PropertyChangeSupport.class);
			pcp.addPropertyChangeListener(propertyChangeListener);
		}
		EditorUtils.refreshListViewer(listViewerFields);
		String[] pkItems = EditorUtils.getAvailPrimaryKeys(listFieldModelBean);
		comboPrimaryKey.setItems(pkItems);

		EditorUtils.selectCombo(comboPrimaryKey, bean.getPrimaryKey());
	}

	private IFile geCurrentFile()
	{
		IFileEditorInput fileInput = (IFileEditorInput) getEditorInput();
		return fileInput.getFile();
	}

	private IProject getCurrentProject()
	{
		IFile file = geCurrentFile();
		return file.getProject();
	}

	public void loadDocument()
	{
		isLoading = true;
		InputStream inStream = null;
		try
		{
			inStream = geCurrentFile().getContents(true);
			EntityModelBean bean = EntityModelFileHandler.xmlToBean(inStream,
					getCurrentProject());
			fillControl(bean);

		} catch (DocumentException e)
		{
			CommonUtils.handleExceptionAndAbort(e);
		} catch (CoreException e)
		{
			CommonUtils.handleExceptionAndAbort(e);
		} finally
		{
			isLoading = false;
			CommonUtils.closeStream(inStream);
		}
	}

	protected String generateModelCode()
	{
		EntityModelBean bean = new EntityModelBean();
		bean.setName(txtName.getText());
		bean.setAlias(txtAlias.getText());
		bean.setPackageName(txtPackageName.getText());
		bean.setDbTableName(txtDBTableName.getText());
		bean.setPrimaryKey(comboPrimaryKey.getText());
		bean.getFieldList().addAll(listFieldModelBean);

		return EntityModelFileHandler.modelToXML(bean);
	}

	private void loadBeanToEditorInput()
	{
		if (isLoading)
		{
			return;
		}
		setDirty();
		EditorUtils.refreshListViewer(listViewerFields);
		EditorUtils.setEditorInputText(getEditorInput(), generateModelCode());
	}

	private void browsePackage()
	{
		IJavaProject javaProject = JavaCore.create(getCurrentProject());
		SelectionDialog dialog = null;
		try
		{
			int style = IJavaElementSearchConstants.CONSIDER_REQUIRED_PROJECTS;
			Shell shell = getSite().getShell();
			dialog = JavaUI.createPackageDialog(shell, javaProject, style);
		} catch (JavaModelException e1)
		{
			CommonUtils.handleExceptionAndAbort(e1);
		}
		if (dialog.open() != Window.OK)
		{
			return;
		}
		IPackageFragment pck = (IPackageFragment) dialog.getResult()[0];
		if (pck != null)
		{
			txtPackageName.setText(pck.getElementName());
		}
	}

	private void refreshEditor()
	{
		String pkField = comboPrimaryKey.getText();
		loadBeanToEditorInput();
		EditorUtils.refreshListViewer(listViewerFields);
		String[] pkItems = EditorUtils.getAvailPrimaryKeys(listFieldModelBean);

		comboPrimaryKey.setItems(pkItems);
		if (!CommonUtils.isEmptyString(pkField))
		{
			EditorUtils.selectCombo(comboPrimaryKey, pkField);
		}
	}

	private void addField()
	{
		EntityFieldModelBean bean = new EntityFieldModelBean(
				getCurrentProject());
		bean.setName("field");

		PropertyChangeSupport obPropSource = (PropertyChangeSupport) bean
				.getAdapter(PropertyChangeSupport.class);
		obPropSource.addPropertyChangeListener(propertyChangeListener);
		listFieldModelBean.add(bean);

		refreshEditor();
	}

	private void removeField(final org.eclipse.swt.widgets.List listFields)
	{
		if (listFields.getSelectionIndex() < 0)
		{
			MsgBox.showError("no field selected!");
			return;
		}

		int index = listFields.getSelectionIndex();
		EntityFieldModelBean bean = listFieldModelBean.get(index);
		PropertyChangeSupport obPropSource = (PropertyChangeSupport) bean
				.getAdapter(PropertyChangeSupport.class);
		obPropSource.removePropertyChangeListener(propertyChangeListener);
		listFieldModelBean.remove(bean);

		refreshEditor();
	}

}

⌨️ 快捷键说明

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