package net.ms.designer.editors.component.dialog; import java.lang.reflect.InvocationTargetException; import java.util.List; import net.ms.designer.core.MsContext; import net.ms.designer.core.MsElement; import net.ms.designer.core.MsProject; import net.ms.designer.core.PropertyUtils; import net.ms.designer.editors.component.models.BizComponent; import net.ms.designer.editors.component.models.CompDiagram; import net.ms.designer.editors.component.models.Component; import net.ms.designer.editors.component.models.EnumComponent; import net.ms.designer.editors.component.tools.WriteToProjectXML; import net.ms.designer.editors.packages.ui.PackageEditor; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; 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.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.internal.UIPlugin; public class PropertyDialog extends TitleAreaDialog { public int status; private Object type; private Shell shell; private Object container; private Text txtName; private Text txtIname; private Text txtDesc; private Label lName; private Label lIname; private Label lDesc; public PropertyDialog(Shell parent, Object type , Object container) { super(parent); this.shell = parent; this.type = type; this.container = container; } protected Control createDialogArea(Composite parent) { if (type instanceof BizComponent) setTitle("ҵ�������Ϣ"); else setTitle("ö�������Ϣ"); // config the composite Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginHeight = 5; layout.marginWidth = 20; layout.verticalSpacing = 8; layout.numColumns = 2; composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setLayout(layout); lName = new Label(composite,SWT.NONE); lName.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lName.setText("����"); txtName = new Text(composite,SWT.BORDER); txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); lIname = new Label(composite,SWT.NONE); lIname.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lIname.setText("����"); txtIname = new Text(composite,SWT.BORDER); txtIname.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); lDesc = new Label(composite,SWT.NONE); lDesc.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); lDesc.setText("����"); txtDesc = new Text(composite,SWT.BORDER); txtDesc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (type instanceof BizComponent) { if( ((BizComponent)type).getName()!= null) txtName.setText(((BizComponent)type).getName()); else txtName.setText(""); if(((BizComponent)type).getIname() != null) txtIname.setText(((BizComponent)type).getIname()); else txtIname.setText(""); if(((BizComponent)type).getDesc() != null) txtDesc.setText(((BizComponent)type).getDesc()); else txtDesc.setText(""); } if (type instanceof EnumComponent) { if( ((EnumComponent)type).getName()!= null) txtName.setText(((EnumComponent)type).getName()); else txtName.setText(""); if(((EnumComponent)type).getIname() != null) txtIname.setText(((EnumComponent)type).getIname()); else txtIname.setText(""); if(((EnumComponent)type).getDesc() != null) txtDesc.setText(((EnumComponent)type).getDesc()); else txtDesc.setText(""); } return composite; } public void okPressed() { if (type instanceof BizComponent) { if(txtName.getText() != "") { char ii = txtName.getText().toString().charAt(0); if(!((ii >='A') && (ii <='Z'))) { MessageBox box = new MessageBox(shell); box.setMessage("The first charater must be upcase"); box.open(); return; } boolean flag = true; List packs = ((CompDiagram)container).getNodes(); for(int i = 0;i < packs.size(); i++) { if(((Component)packs.get(i)).getName().equals(txtName.getText())) { flag = false; break; } } if(!flag) { MessageBox box = new MessageBox(shell); box.setMessage("Invailed name!"); box.open(); return; } // implements the changing // begin String oldName = ((BizComponent)type).getName(); String newName = txtName.getText(); if(!oldName.equals(newName) && status == 1) { this.dealChanging("component" , "name" , oldName , newName); } // end ((BizComponent)type).setName(txtName.getText()); ((BizComponent)type).setIname(txtIname.getText()); ((BizComponent)type).setDesc(txtDesc.getText()); super.okPressed(); return; } else return; } if (type instanceof EnumComponent) { if(txtName.getText() != "") { char ii = txtName.getText().toString().charAt(0); if(!((ii >='A') && (ii <= 'Z'))) { MessageBox box = new MessageBox(shell); box.setMessage("The first charater must be upcase"); box.open(); return; } boolean flag = true; List packs = ((CompDiagram)container).getNodes(); for(int i = 0;i < packs.size(); i++) { if(((Component)packs.get(i)).getName().equals(txtName.getText())) { flag = false; break; } } if(!flag) { MessageBox box = new MessageBox(shell); box.setMessage("Invailed name!"); box.open(); return; } // implements the changing // begin String oldName = ((EnumComponent)type).getName(); String newName = txtName.getText(); if(!oldName.equals(newName) && status == 1) { this.dealChanging("enumeration" , "name" , oldName , newName); } // end ((EnumComponent)type).setName(txtName.getText()); ((EnumComponent)type).setIname(txtIname.getText()); ((EnumComponent)type).setDesc(txtDesc.getText()); super.okPressed(); return; } else return; } } /** * * @param oldText * @param newText */ public void dealChanging(String parentTag , String tag , String oldText , String newText) { PackageEditor editor = (PackageEditor)UIPlugin.getDefault() .getWorkbench().getActiveWorkbenchWindow() .getActivePage().getActiveEditor(); MsProject project = editor.getProject(); MsContext context = editor.getContext(); // // modify the "project.xml" file // String filePath = project.getConfigPath() + "project.xml"; WriteToProjectXML writor = new WriteToProjectXML(); try { writor.changeText(filePath , parentTag , tag , oldText , newText); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } // // modify the context object // String type = ""; if(parentTag.equals("enumeration")) { type = "enumdetail"; // get the old element to modify MsElement element = context.getElement(type + "_" + oldText); // changing element.setNodeName(newText); Object container = element.getContainer(); try { List list = (List)PropertyUtils.getProperty(container , "children"); PropertyUtils.setProperty(list.get(0) , "tableName" , newText); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } MsElement newElement = element; context.addElement(newElement); context.removeElement(type + "_" + oldText); } if(parentTag.equals("component")) { type = "componentdetail"; // get the old element to modify MsElement element = context.getElement(type + "_" + oldText); // changing element.setNodeName(newText); Object container = element.getContainer(); ((net.ms.designer.editors.componentdetail.models.Container)container) .getMainTable().setName(newText); MsElement newElement = element; context.addElement(newElement); context.removeElement(type + "_" + oldText); } } }