📄 configparteditor.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 + -