diff options
Diffstat (limited to 'src/com/ibm/ServerWizard2/view/MainDialog.java')
-rw-r--r-- | src/com/ibm/ServerWizard2/view/MainDialog.java | 1290 |
1 files changed, 1290 insertions, 0 deletions
diff --git a/src/com/ibm/ServerWizard2/view/MainDialog.java b/src/com/ibm/ServerWizard2/view/MainDialog.java new file mode 100644 index 0000000..9aa5d30 --- /dev/null +++ b/src/com/ibm/ServerWizard2/view/MainDialog.java @@ -0,0 +1,1290 @@ +package com.ibm.ServerWizard2.view; + +import java.util.Map; +import java.util.Vector; + +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.ColumnLabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.SashForm; +import org.eclipse.swt.custom.StackLayout; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Font; +import org.eclipse.swt.graphics.FontData; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowData; +import org.eclipse.swt.layout.RowLayout; +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.DirectoryDialog; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.swt.widgets.TreeColumn; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.wb.swt.SWTResourceManager; + +import com.ibm.ServerWizard2.ServerWizard2; +import com.ibm.ServerWizard2.controller.TargetWizardController; +import com.ibm.ServerWizard2.model.Attribute; +import com.ibm.ServerWizard2.model.Connection; +import com.ibm.ServerWizard2.model.ConnectionEndpoint; +import com.ibm.ServerWizard2.model.Field; +import com.ibm.ServerWizard2.model.Target; +import com.ibm.ServerWizard2.utility.GithubFile; + +public class MainDialog extends Dialog { + private TableViewer viewer; + private Tree tree; + private TreeColumn columnName; + private Text txtInstanceName; + private Combo combo; + private Menu popupMenu; + private Composite container; + private TreeItem selectedEndpoint; + private String currentPath; + + private Target targetForConnections; + private ConnectionEndpoint source; + private ConnectionEndpoint dest; + + private TargetWizardController controller; + + // Buttons + private Button btnAddTarget; + private Button btnCopyInstance; + private Button btnDefaults; + private Button btnDeleteTarget; + private Button btnSave; + private Button btnOpen; + private Button btnOpenLib; + private Button btnDeleteConnection; + private Button btnSaveAs; + + // document state + private Boolean dirty = false; + public String mrwFilename = ""; + + private Button btnRunChecks; + private SashForm sashForm; + private SashForm sashForm_1; + + private Composite compositeBus; + private Label lblInstanceType; + private Composite compositeInstance; + private Composite composite; + private Composite buttonRow1; + + private Vector<Field> attributes; + private Combo cmbBusses; + private Label lblChooseBus; + private Label lblSelectedCard; + private Boolean busMode = false; + private TabFolder tabFolder; + private TabItem tbtmAddInstances; + private TabItem tbtmAddBusses; + private Combo cmbCards; + private Boolean targetFound = false; + private List listBusses; + private Label lblBusDirections; + private Label lblInstanceDirections; + private Composite compositeDir; + private Button btnHideBusses; + private Button btnShowHidden; + + private AttributeEditingSupport attributeEditor; + private Label label; + private Label label_1; + /** + * Create the dialog. + * + * @param parentShell + */ + public MainDialog(Shell parentShell) { + super(parentShell); + setShellStyle(SWT.BORDER | SWT.MIN | SWT.MAX | SWT.RESIZE | SWT.APPLICATION_MODAL); + } + + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + newShell.setText("ServerWiz2"); + } + + public void setController(TargetWizardController t) { + controller = t; + } + + /** + * Create contents of the dialog. + * + * @param parent + */ + @Override + protected Control createDialogArea(Composite parent) { + container = (Composite) super.createDialogArea(parent); + container.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + GridLayout gl_container = new GridLayout(1, false); + gl_container.verticalSpacing = 0; + container.setLayout(gl_container); + + composite = new Composite(container, SWT.NONE); + + RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL); + rl_composite.spacing = 20; + rl_composite.wrap = false; + rl_composite.fill = true; + composite.setLayout(rl_composite); + GridData gd_composite = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1); + gd_composite.widthHint = 918; + gd_composite.heightHint = 135; + composite.setLayoutData(gd_composite); + + sashForm_1 = new SashForm(container, SWT.BORDER | SWT.VERTICAL); + GridData gd_sashForm_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); + gd_sashForm_1.heightHint = 375; + gd_sashForm_1.widthHint = 712; + sashForm_1.setLayoutData(gd_sashForm_1); + + buttonRow1 = new Composite(container, SWT.NONE); + GridData gd_buttonRow1 = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1); + gd_buttonRow1.widthHint = 751; + buttonRow1.setLayoutData(gd_buttonRow1); + GridLayout rl_buttonRow1 = new GridLayout(18, false); + buttonRow1.setLayout(rl_buttonRow1); + + this.createButtonsForButtonBar2(buttonRow1); + + + sashForm = new SashForm(sashForm_1, SWT.NONE); + + // Target Instances View + tree = new Tree(sashForm, SWT.BORDER | SWT.VIRTUAL); + tree.setToolTipText("To add an instance\r\n- click on parent\r\n- choose an instance type\r\n- click add instance"); + tree.setHeaderVisible(true); + tree.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + columnName = new TreeColumn(tree, 0); + columnName.setText("Instances"); + columnName + .setToolTipText("To add a new instance, choose parent instance. A list of child instances will appear in Instance Type combo.\r\n" + + "Select and Instance type. You can optionally enter a custom name. Then click 'Add Instance' button."); + + columnName.setResizable(true); + // sashForm.setWeights(new int[] { 283, 283 }); + + // Create attribute table + viewer = new TableViewer(sashForm_1, SWT.VIRTUAL | SWT.H_SCROLL | SWT.V_SCROLL + | SWT.FULL_SELECTION | SWT.BORDER); + + this.createAttributeTable(); + sashForm_1.setWeights(new int[] { 1, 1 }); + + // ////////////////////////////////////////////////////////// + // Tab folders + tabFolder = new TabFolder(composite, SWT.NONE); + + tbtmAddInstances = new TabItem(tabFolder, SWT.NONE); + tbtmAddInstances.setText("Instances"); + + // ////////////////////////////////////// + // Add instances tab + compositeInstance = new Composite(tabFolder, SWT.BORDER); + tbtmAddInstances.setControl(compositeInstance); + compositeInstance.setLayout(new GridLayout(3, false)); + + lblInstanceType = new Label(compositeInstance, SWT.NONE); + lblInstanceType.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + lblInstanceType.setText("Instance Type:"); + lblInstanceType.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + combo = new Combo(compositeInstance, SWT.READ_ONLY); + GridData gd_combo = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); + gd_combo.widthHint = 167; + combo.setLayoutData(gd_combo); + combo.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + btnAddTarget = new Button(compositeInstance, SWT.NONE); + btnAddTarget.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); + btnAddTarget.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnAddTarget.setText("Add Instance"); + btnAddTarget.setEnabled(false); + + Label lblName = new Label(compositeInstance, SWT.NONE); + lblName.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + lblName.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + lblName.setText("Custom Name:"); + + txtInstanceName = new Text(compositeInstance, SWT.BORDER); + GridData gd_txtInstanceName = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); + gd_txtInstanceName.widthHint = 175; + txtInstanceName.setLayoutData(gd_txtInstanceName); + txtInstanceName.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + btnDeleteTarget = new Button(compositeInstance, SWT.NONE); + btnDeleteTarget.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); + btnDeleteTarget.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnDeleteTarget.setText("Delete Instance"); + + btnShowHidden = new Button(compositeInstance, SWT.CHECK); + GridData gd_btnShowHidden = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnShowHidden.heightHint = 10; + btnShowHidden.setLayoutData(gd_btnShowHidden); + btnShowHidden.setText(" Show Hidden"); + + btnCopyInstance = new Button(compositeInstance, SWT.NONE); + btnCopyInstance.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1)); + btnCopyInstance.setText("Copy Node or Connector"); + btnCopyInstance.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnCopyInstance.setEnabled(false); + + btnDefaults = new Button(compositeInstance, SWT.NONE); + btnDefaults.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1)); + btnDefaults.setText("Restore Defaults"); + btnDefaults.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnDefaults.setEnabled(false); + + // //////////////////////////////////////////////////// + // Add Busses Tab + + tbtmAddBusses = new TabItem(tabFolder, SWT.NONE); + tbtmAddBusses.setText("Busses"); + + compositeBus = new Composite(tabFolder, SWT.BORDER); + tbtmAddBusses.setControl(compositeBus); + compositeBus.setLayout(new GridLayout(2, false)); + + lblChooseBus = new Label(compositeBus, SWT.NONE); + lblChooseBus.setAlignment(SWT.RIGHT); + GridData gd_lblChooseBus = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1); + gd_lblChooseBus.widthHint = 88; + lblChooseBus.setLayoutData(gd_lblChooseBus); + lblChooseBus.setText("Select Bus:"); + + cmbBusses = new Combo(compositeBus, SWT.READ_ONLY); + cmbBusses.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, false, 1, 1)); + + cmbBusses.add("NONE"); + cmbBusses.setData(null); + cmbBusses.select(0); + + lblSelectedCard = new Label(compositeBus, SWT.NONE); + lblSelectedCard.setAlignment(SWT.RIGHT); + GridData gd_lblSelectedCard = new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1); + gd_lblSelectedCard.widthHint = 93; + lblSelectedCard.setLayoutData(gd_lblSelectedCard); + lblSelectedCard.setText("Select Card:"); + + cmbCards = new Combo(compositeBus, SWT.READ_ONLY); + cmbCards.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + + btnDeleteConnection = new Button(compositeBus, SWT.NONE); + btnDeleteConnection.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1)); + btnDeleteConnection.setText("Delete Connection"); + btnDeleteConnection.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + btnHideBusses = new Button(compositeBus, SWT.CHECK); + btnHideBusses.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1)); + btnHideBusses.setText("Show only busses of selected type"); + btnHideBusses.setSelection(true); + + StackLayout stackLayout = new StackLayout(); + compositeDir = new Composite(composite, SWT.NONE); + compositeDir.setLayout(stackLayout); + compositeDir.setLayoutData(new RowData(382, SWT.DEFAULT)); + + lblInstanceDirections = new Label(compositeDir, SWT.NONE); + lblInstanceDirections.setFont(SWTResourceManager.getFont("Arial", 8, SWT.NORMAL)); + lblInstanceDirections.setText("Select 'chip' to create a new part or 'sys-' to create a system\r\n" + + "1. Select parent instance in Instance Tree\r\n" + + "2. Select new instance type in dropdown\r\n" + + "3. (Optional) Enter custom name\r\n" + "4. Click \"Add Instance\""); + lblInstanceDirections.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); + stackLayout.topControl = this.lblInstanceDirections; + + lblBusDirections = new Label(compositeDir, SWT.NONE); + lblBusDirections.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE)); + lblBusDirections + .setText("Steps for adding a new connection:\r\n" + + "1. Select a bus type from dropdown\r\n" + + "2. Select the card on which the bus is on from dropdown\r\n" + + "3. Navigate to connection source in Instances Tree view on left\r\n" + + "4. Right-click on source and select \"Set Source\"\r\n" + + "5. Navigate to connection destination\r\n6. Right-click on destination and select \"Add Connection\""); + + listBusses = new List(sashForm, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); + + this.addEvents(); + + controller.init(); + + this.setDirtyState(false); + // load file if passed on command line + if (!mrwFilename.isEmpty()) { + controller.readXML(mrwFilename); + setFilename(mrwFilename); + } + for (Target t : controller.getBusTypes()) { + cmbBusses.add(t.getType()); + cmbBusses.setData(t.getType(), t); + } + this.initInstanceMode(); + // columnName.setWidth(200); + sashForm.setWeights(new int[] { 1, 1 }); + columnName.pack(); + + return container; + } + + protected void createButtonsForButtonBar(Composite parent) { + parent.setEnabled(false); + GridLayout layout = (GridLayout)parent.getLayout(); + layout.marginHeight = 0; + } + + protected void createButtonsForButtonBar2(Composite row1) { + row1.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + Button btnNew = createButton(row1, IDialogConstants.NO_ID, "New", false); + GridData gd_btnNew = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnNew.widthHint = 70; + btnNew.setLayoutData(gd_btnNew); + btnNew.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnNew.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (dirty) { + if (!MessageDialog.openConfirm(null, "Save Resource", mrwFilename + + "has been modified. Ignore changes?")) { + return; + } + ServerWizard2.LOGGER.info("Discarding changes"); + } + try { + controller.initModel(); + setFilename(""); + initAll(); + setDirtyState(false); + refreshInstanceTree(); + refreshConnections(); + updateView(); + + } catch (Exception e1) { + e1.printStackTrace(); + } + } + }); + + btnOpen = createButton(row1, IDialogConstants.NO_ID, "Open...", false); + GridData gd_btnOpen = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnOpen.widthHint = 70; + btnOpen.setLayoutData(gd_btnOpen); + btnOpen.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnOpen.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + if (dirty) { + if (!MessageDialog.openConfirm(null, "Save Resource", mrwFilename + + "has been modified. Ignore changes?")) { + return; + } + ServerWizard2.LOGGER.info("Discarding changes"); + } + Button b = (Button) e.getSource(); + FileDialog fdlg = new FileDialog(b.getShell(), SWT.OPEN); + String ext[] = { "*.xml" }; + fdlg.setFilterExtensions(ext); + String filename = fdlg.open(); + if (filename == null) { + return; + } + Boolean dirty = controller.readXML(filename); + setFilename(filename); + initAll(); + setDirtyState(dirty); + } + }); + btnOpen.setToolTipText("Loads XML from file"); + + btnSave = createButton(row1, IDialogConstants.NO_ID, "Save", false); + GridData gd_btnSave = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnSave.widthHint = 70; + btnSave.setLayoutData(gd_btnSave); + btnSave.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnSave.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + String filename = mrwFilename; + if (mrwFilename.isEmpty()) { + Button b = (Button) e.getSource(); + FileDialog fdlg = new FileDialog(b.getShell(), SWT.SAVE); + String ext[] = { "*.xml" }; + fdlg.setFilterExtensions(ext); + fdlg.setOverwrite(true); + filename = fdlg.open(); + if (filename == null) { + return; + } + } + controller.writeXML(filename); + setFilename(filename); + setDirtyState(false); + } + }); + btnSave.setText("Save"); + + btnSaveAs = createButton(row1, IDialogConstants.NO_ID, "Save As...", false); + GridData gd_btnSaveAs = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnSaveAs.widthHint = 70; + btnSaveAs.setLayoutData(gd_btnSaveAs); + btnSaveAs.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Button b = (Button) e.getSource(); + FileDialog fdlg = new FileDialog(b.getShell(), SWT.SAVE); + String ext[] = { "*.xml" }; + fdlg.setFilterExtensions(ext); + fdlg.setOverwrite(true); + String filename = fdlg.open(); + if (filename == null) { + return; + } + controller.writeXML(filename); + setFilename(filename); + setDirtyState(false); + } + }); + + btnSaveAs.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnSaveAs.setEnabled(true); + + label = new Label(buttonRow1, SWT.SEPARATOR | SWT.VERTICAL); + GridData gd_sep = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_sep.heightHint = 30; + gd_sep.widthHint = 50; + label.setLayoutData(gd_sep); + + btnOpenLib = createButton(row1, IDialogConstants.NO_ID, "Open Lib", false); + GridData gd_btnOpenLib = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnOpenLib.widthHint = 74; + + btnOpenLib.setLayoutData(gd_btnOpenLib); + btnOpenLib.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnOpenLib.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Button b = (Button) e.getSource(); + DirectoryDialog fdlg = new DirectoryDialog(b.getShell(), SWT.OPEN); + fdlg.setFilterPath(controller.getWorkingDir()); + String libPath = fdlg.open(); + if (libPath == null) { + return; + } + controller.loadLibrary(libPath); + } + }); + btnOpenLib.setToolTipText("Loads External Library"); + + + btnRunChecks = createButton(row1, IDialogConstants.NO_ID, "Export HTML", false); + GridData gd_btnRunChecks = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnRunChecks.widthHint = 80; + btnRunChecks.setLayoutData(gd_btnRunChecks); + btnRunChecks.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + String tempFile = System.getProperty("java.io.tmpdir") + + System.getProperty("file.separator") + "~temp.xml"; + controller.writeXML(tempFile); + String htmlFilename = mrwFilename; + htmlFilename = htmlFilename.replace(".xml", "") + ".html"; + controller.runChecks(tempFile,htmlFilename); + } + }); + btnRunChecks.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + + Button btnForceUpdate = createButton(row1, IDialogConstants.NO_ID, "Force Update", false); + GridData gd_btnForceUpdate = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnForceUpdate.widthHint = 80; + btnForceUpdate.setLayoutData(gd_btnForceUpdate); + btnForceUpdate.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnForceUpdate.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + GithubFile.removeUpdateFile(true); + } + }); + + label_1 = new Label(buttonRow1, SWT.SEPARATOR | SWT.VERTICAL); + GridData gd_sep2 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_sep2.heightHint = 30; + gd_sep2.widthHint = 50; + label_1.setLayoutData(gd_sep2); + + Button btnExit = createButton(row1, IDialogConstants.CLOSE_ID, "Exit", false); + GridData gd_btnExit = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); + gd_btnExit.widthHint = 80; + btnExit.setLayoutData(gd_btnExit); + btnExit.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + btnExit.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Button b = (Button) e.getSource(); + b.getShell().close(); + } + }); + } + + /** + * Return the initial size of the dialog. + */ + @Override + protected Point getInitialSize() { + return new Point(933, 796); + } + + // //////////////////////////////////////////////////// + // Utility helpers + private Target getSelectedTarget() { + if (tree.getSelectionCount() > 0) { + return (Target) tree.getSelection()[0].getData(); + } + return null; + } + + private void initAll() { + tabFolder.setSelection(0); + initInstanceMode(); + } + + private void initBusMode() { + busMode = true; + this.lblBusDirections.setEnabled(true); + this.lblBusDirections.setVisible(true); + this.lblInstanceDirections.setVisible(false); + this.lblInstanceDirections.setEnabled(false); + + // update card combo + cmbCards.removeAll(); + this.targetForConnections = null; + for (Target target : controller.getConnectionCapableTargets()) { + cmbCards.add(target.getName()); + cmbCards.setData(target.getName(), target); + } + if (cmbCards.getItemCount() > 0) { + cmbCards.select(-1); + //this.targetForConnections = (Target)cmbCards.getData(); + } + for (TreeItem item : tree.getItems()) { + Target target = (Target) item.getData(); + // controller.getRootTarget().hideBusses(); + controller.hideBusses(target); + } + + + this.source = null; + this.dest = null; + this.selectedEndpoint = null; + refreshInstanceTree(); + refreshConnections(); + this.updateView(); + } + + private void initInstanceMode() { + busMode = false; + this.lblInstanceDirections.setEnabled(true); + this.lblInstanceDirections.setVisible(true); + + this.lblBusDirections.setEnabled(false); + this.lblBusDirections.setVisible(false); + + this.targetForConnections = null; + this.refreshInstanceTree(); + this.listBusses.removeAll(); + this.updateView(); + } + + private void updateChildCombo(Target targetInstance) { + btnAddTarget.setEnabled(false); + Vector<Target> v = controller.getChildTargets(targetInstance); + combo.removeAll(); + if (v != null) { + for (Target target : v) { + combo.add(target.getType()); + combo.setData(target.getType(), target); + } + if (combo.getItemCount() > 0) { + combo.select(0); + } + btnAddTarget.setEnabled(true); + } + } + + private void updateView() { + Target targetInstance = getSelectedTarget(); + if (targetInstance == null) { + btnAddTarget.setEnabled(false); + btnDeleteTarget.setEnabled(false); + btnCopyInstance.setEnabled(false); + btnDefaults.setEnabled(false); + updateChildCombo(null); + return; + } + updatePopupMenu(targetInstance); + updateChildCombo(targetInstance); + + TreeItem item = tree.getSelection()[0]; + ConnectionEndpoint ep = this.getEndpoint(item, null); + refreshAttributes(targetInstance,ep); + + if (targetInstance.isSystem()) { + btnDeleteTarget.setEnabled(false); + } else { + btnDeleteTarget.setEnabled(true); + } + if (targetInstance.isNode() || targetInstance.isConnector()) { + btnCopyInstance.setEnabled(true); + } else { + btnCopyInstance.setEnabled(false); + } + btnDefaults.setEnabled(true); + } + + + private void updatePopupMenu(Target selectedTarget) { + if (selectedTarget == null || tree.getSelectionCount()==0) { + return; + } + if (popupMenu != null) { + popupMenu.dispose(); + } + + popupMenu = new Menu(tree); + + if (busMode) { + if (cmbBusses.getSelectionIndex() > 0) { + if (targetForConnections != null && selectedTarget.getAttribute("CLASS").equals("UNIT")) { + if (selectedTarget.isOutput()) { + MenuItem srcItem = new MenuItem(popupMenu, SWT.NONE); + srcItem.setText("Set Source"); + srcItem.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + source = getEndpoint(true); + } + }); + } + } + if (source != null && selectedTarget.isInput()) { + MenuItem connItem = new MenuItem(popupMenu, SWT.NONE); + connItem.setText("Add Connection"); + connItem.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + dest = getEndpoint(false); + addConnection(false); + } + }); + MenuItem cableItem = new MenuItem(popupMenu, SWT.NONE); + cableItem.setText("Add Cable"); + cableItem.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + dest = getEndpoint(false); + addConnection(true); + } + }); + } + } else { + targetForConnections = null; + source = null; + dest = null; + } + } + TreeItem item = tree.getSelection()[0]; + TreeItem parentItem = item.getParentItem(); + if (parentItem != null) { + Target configParentTarget = (Target) parentItem.getData(); + if (configParentTarget.attributeExists("IO_CONFIG_SELECT")) { + MenuItem deconfigItem = new MenuItem(popupMenu, SWT.NONE); + deconfigItem.setText("Deconfig"); + deconfigItem.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + setConfig(false); + } + }); + MenuItem configItem = new MenuItem(popupMenu, SWT.NONE); + configItem.setText("Select Config"); + configItem.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + setConfig(true); + } + }); + } + } + tree.setMenu(popupMenu); + } + + public void setConfig(boolean config) { + TreeItem item = tree.getSelection()[0]; + Target target = (Target) item.getData(); + TreeItem parentItem = item.getParentItem(); + + if (parentItem == null) { + ServerWizard2.LOGGER.warning(target.getName() + " parent is null"); + return; + } + TreeItem grandParentItem = parentItem.getParentItem(); + Target configParentTarget = (Target) parentItem.getData(); + String configNum = target.getAttribute("IO_CONFIG_NUM"); + if (configNum.isEmpty()) { + ServerWizard2.LOGGER.warning(target.getName() + " IO_CONFIG_NUM attribute is empty"); + return; + } + ConnectionEndpoint ep = getEndpoint(parentItem,null); + String path = "/"+ep.getName(); + if (config) { + controller.setGlobalSetting(path, "IO_CONFIG_SELECT", configNum); + } else { + controller.setGlobalSetting(path, "IO_CONFIG_SELECT", "0"); + } + for (TreeItem childItem : parentItem.getItems()) { + clearTree(childItem); + } + currentPath="/"+ep.getPath(); + currentPath=currentPath.substring(0, currentPath.length()-1); + this.updateInstanceTree(configParentTarget, grandParentItem, parentItem); + } + + private ConnectionEndpoint getEndpoint(TreeItem item, String stopCard) { + ConnectionEndpoint endpoint = new ConnectionEndpoint(); + + Target target = (Target) item.getData(); + endpoint.setTargetName(target.getName()); + + Boolean done = false; + Boolean found = false; + TreeItem parentItem = item.getParentItem(); + + while (!done) { + if (parentItem==null) { + done=true; + } else { + Target parentTarget = (Target) parentItem.getData(); + String parentName = parentTarget.getName(); + if (parentName.equals(stopCard)) { + done = true; + found = true; + } else { + endpoint.setPath(parentName + "/" + endpoint.getPath()); + parentItem = parentItem.getParentItem(); + } + } + } + + if (!found && stopCard != null) { + MessageDialog.openError(null, "Connection Error", "The connection must start and end on or below selected card."); + endpoint=null; + } + return endpoint; + } + + private ConnectionEndpoint getEndpoint(boolean setBold) { + TreeItem item = tree.getSelection()[0]; + ConnectionEndpoint endpoint = getEndpoint(item,cmbCards.getText()); + if (setBold && endpoint != null) { + setEndpointState(item); + } + return endpoint; + } + + public void setEndpointState(TreeItem item) { + if (item != selectedEndpoint && selectedEndpoint != null) { + this.setFontStyle(selectedEndpoint, SWT.BOLD, false); + } + this.setFontStyle(item, SWT.BOLD | SWT.ITALIC, true); + selectedEndpoint = item; + } + + private void refreshAttributes(Target targetInstance,ConnectionEndpoint ep) { + attributes.clear(); + for (Map.Entry<String, Attribute> entry : targetInstance.getAttributes().entrySet()) { + + Attribute attribute = entry.getValue(); + if (!attribute.isHidden()) { + if (attribute.isGlobal() && !controller.getModelCreationMode()) { + if (ep !=null) { + String path="/"+ep.getName(); + Field field = controller.getGlobalSetting(path, attribute.name); + if (field==null) { + controller.setGlobalSetting(path, attribute.name, ""); + field = controller.getGlobalSetting(path, attribute.name); + } + field.type = attribute.getValue().getType(); + if (field.type.equals("enumeration")) { + field.enumerator = attribute.getValue().getFields().get(0).enumerator; + } + attributes.add(field); + } + } else { + for (Field field : attribute.getValue().getFields()) + attributes.add(field); + } + } + } + viewer.refresh(); + } + + private void clearTreeAll() { + if (tree.getItemCount() > 0) { + clearTree(tree.getItem(0)); + } + tree.removeAll(); + } + + private void clearTree(TreeItem treeitem) { + for (int i = 0; i < treeitem.getItemCount(); i++) { + clearTree(treeitem.getItem(i)); + } + treeitem.removeAll(); + treeitem.dispose(); + } + private void refreshInstanceTree() { + currentPath=""; + targetFound = false; + for (Target target : controller.getRootTargets()) { + this.updateInstanceTree(target, null); + } + if (controller.getRootTargets().size() == 0) { + this.clearTreeAll(); + } + btnAddTarget.setEnabled(false); + } + + public void updateInstanceTree(Target target, TreeItem parentItem) { + this.updateInstanceTree(target, parentItem, null); + } + + private void updateInstanceTree(Target target, TreeItem parentItem, TreeItem item) { + if (target == null) { + return; + } + if (target.isHidden()) { + return; + } + if (parentItem==null) { + this.clearTreeAll(); + } + boolean hideBus = false; + String name = target.getName(); + String lastPath = currentPath; + currentPath=currentPath+"/"+name; + + if (busMode) { + if (!target.isSystem() && !cmbBusses.getText().equals("NONE")) { + if (target.isBusHidden(cmbBusses.getText())) { + hideBus = true; + if (btnHideBusses.getSelection()) { + currentPath=lastPath; + return; + } + } + } + if (parentItem != null) { + if (controller.isGlobalSettings(lastPath, "IO_CONFIG_SELECT")) { + Field cnfgSelect = controller.getGlobalSetting(lastPath, "IO_CONFIG_SELECT"); + if (!cnfgSelect.value.isEmpty() && !cnfgSelect.value.equals("0")) { + String cnfg = target.getAttribute("IO_CONFIG_NUM"); + if (!cnfg.equals(cnfgSelect.value)) { + hideBus = true; + if (btnHideBusses.getSelection()) { + currentPath=lastPath; + return; + } + } + } + } + } + if (!hideBus) { + String sch = target.getAttribute("SCHEMATIC_INTERFACE"); + if (!sch.isEmpty()) { + name = name + " (" + sch + ")"; + } + if (target.isInput() && target.isOutput()) { + name = name + " <=>"; + } else if (target.isInput()) { + name = name + " <="; + } else if (target.isOutput()) { + name = name + " =>"; + } + } + } + Vector<Target> children = controller.getVisibleChildren(target,this.btnShowHidden.getSelection()); + TreeItem treeitem = item; + if (item == null) { + if (parentItem == null) { + //clearTreeAll(); + treeitem = new TreeItem(tree, SWT.VIRTUAL | SWT.BORDER); + } else { + treeitem = new TreeItem(parentItem, SWT.VIRTUAL | SWT.BORDER); + } + } + //Just display last part of instance name path + //String nameA[] = name.split("\\."); + //treeitem.setText(nameA[nameA.length-1]); + treeitem.setText(name); + treeitem.setData(target); + + if (target.isPluggable()) { + this.setFontStyle(treeitem, SWT.ITALIC, true); + } + if (children != null) { + for (int i = 0; i < children.size(); i++) { + Target childTarget = children.get(i); + updateInstanceTree(childTarget, treeitem); + } + } + if (target == targetForConnections && busMode) { + this.setFontStyle(treeitem, SWT.BOLD, true); + if (!targetFound) { + tree.select(treeitem); + for (TreeItem childItem : treeitem.getItems()) { + tree.showItem(childItem); + } + targetFound = true; + } + } + currentPath=lastPath; + } + + private void addConnection(Connection conn) { + listBusses.add(conn.getName()); + listBusses.setData(conn.getName(), conn); + } + + private void refreshConnections() { + this.source=null; + this.dest=null; + listBusses.removeAll(); + if (cmbBusses == null) { + return; + } + Target busTarget = (Target) cmbBusses.getData(cmbBusses.getText()); + if (targetForConnections == null) { + return; + } + + if (busTarget == null) { + for (Target tmpBusTarget : targetForConnections.getBusses().keySet()) { + for (Connection conn : targetForConnections.getBusses().get(tmpBusTarget)) { + addConnection(conn); + } + } + } else { + for (Connection conn : targetForConnections.getBusses().get(busTarget)) { + addConnection(conn); + } + } + } + + private void setFontStyle(TreeItem item, int style, boolean selected) { + if (item.isDisposed()) { + return; + } + FontData[] fD = item.getFont().getFontData(); + fD[0].setStyle(selected ? style : 0); + Font newFont = new Font(this.getShell().getDisplay(), fD[0]); + item.setFont(newFont); + } + + @Override + public boolean close() { + if (dirty) { + if (!MessageDialog.openConfirm(null, "Save Resource", mrwFilename + + "has been modified. Ignore changes?")) { + return false; + } + ServerWizard2.LOGGER.info("Discarding changes and exiting..."); + } + clearTreeAll(); + for (Control c : container.getChildren()) { + c.dispose(); + } + return super.close(); + } + + private void addConnection(Boolean cabled) { + Target busTarget = (Target) cmbBusses.getData(cmbBusses.getText()); + Connection conn = targetForConnections.addConnection(busTarget, source, dest, cabled); + this.addConnection(conn); + setDirtyState(true); + } + + private void deleteConnection() { + if (targetForConnections == null || listBusses.getSelectionCount() == 0) { + return; + } + Connection conn = (Connection) listBusses.getData(listBusses.getSelection()[0]); + controller.deleteConnection(targetForConnections, conn.busTarget, conn); + this.refreshConnections(); + setDirtyState(true); + } + + public void setDirtyState(Boolean dirty) { + this.dirty = dirty; + if (this.btnSave != null) { + this.btnSave.setEnabled(dirty); + } + if (dirty) { + this.getShell().setText("ServerWiz2 - " + this.mrwFilename + " *"); + } else { + this.getShell().setText("ServerWiz2 - " + this.mrwFilename); + } + } + + public void setFilename(String filename) { + this.mrwFilename = filename; + if (btnSave != null) { + this.btnSave.setEnabled(true); + } + this.getShell().setText("ServerWiz2 - " + this.mrwFilename); + } + + private void addEvents() { + btnShowHidden.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + refreshInstanceTree(); + } + }); + tabFolder.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + if (tabFolder.getSelection()[0]==tbtmAddBusses) { + initBusMode(); + } else { + initInstanceMode(); + } + } + }); + tree.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateView(); + } + }); + + tree.addListener(SWT.Expand, new Listener() { + public void handleEvent(Event e) { + final TreeItem treeItem = (TreeItem) e.item; + getShell().getDisplay().asyncExec(new Runnable() { + public void run() { + treeItem.getParent().getColumns()[0].pack(); + } + }); + } + }); + btnAddTarget.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Target chk = (Target) combo.getData(combo.getText()); + if (chk != null) { + TreeItem selectedItem = null; + Target parentTarget = null; + if (tree.getSelectionCount() > 0) { + selectedItem = tree.getSelection()[0]; + parentTarget = (Target) selectedItem.getData(); + } + if (chk.getType().equals("chip") || chk.getType().equals("targetoverride")) { + ServerWizard2.LOGGER.info("Entering model creation mode"); + attributeEditor.setIgnoreReadonly(); + controller.setModelCreationMode(); + tbtmAddBusses.dispose(); + } + String nameOverride = txtInstanceName.getText(); + controller.addTargetInstance(chk, parentTarget, selectedItem, nameOverride); + txtInstanceName.setText(""); + if (tree.getSelectionCount() > 0) { + selectedItem.setExpanded(true); + } + columnName.pack(); + setDirtyState(true); + } + } + }); + btnDeleteTarget.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + TreeItem treeitem = tree.getSelection()[0]; + if (treeitem == null) { + return; + } + controller.deleteTarget((Target) treeitem.getData()); + clearTree(treeitem); + setDirtyState(true); + } + }); + btnCopyInstance.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + TreeItem selectedItem = tree.getSelection()[0]; + if (selectedItem == null) { + return; + } + Target target = (Target) selectedItem.getData(); + Target parentTarget = (Target) selectedItem.getParentItem().getData(); + Target newTarget = controller.copyTargetInstance(target, parentTarget, true); + updateInstanceTree(newTarget, selectedItem.getParentItem()); + TreeItem t = selectedItem.getParentItem(); + tree.select(t.getItem(t.getItemCount() - 1)); + setDirtyState(true); + } + }); + btnDefaults.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + TreeItem selectedItem = tree.getSelection()[0]; + if (selectedItem == null) { + return; + } + if (!MessageDialog.openConfirm(null, "Restore Defaults", "Are you sure you want to restore default attribute values on this target and all of it's children?")) { + return; + } + ServerWizard2.LOGGER.info("Restoring Defaults"); + Target target = (Target) selectedItem.getData(); + controller.deepCopyAttributes(target); + setDirtyState(true); + } + }); + + cmbCards.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + Target t = (Target) cmbCards.getData(cmbCards.getText()); + targetForConnections = t; + refreshInstanceTree(); + refreshConnections(); + } + }); + cmbBusses.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + refreshInstanceTree(); + refreshConnections(); + } + }); + btnDeleteConnection.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + deleteConnection(); + } + }); + listBusses.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent arg0) { + if (listBusses.getSelectionCount() > 0) { + Connection conn = (Connection) listBusses.getData(listBusses.getSelection()[0]); + refreshAttributes(conn.busTarget,null); + } + } + }); + btnHideBusses.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + refreshInstanceTree(); + refreshConnections(); + } + }); + } + + private void createAttributeTable() { + Table table = viewer.getTable(); + + table.setHeaderVisible(true); + table.setLinesVisible(true); + table.setFont(SWTResourceManager.getFont("Arial", 9, SWT.NORMAL)); + table.addListener(SWT.CHANGED, new Listener() { + public void handleEvent(Event event) { + setDirtyState(true); + } + }); + + final TableViewerColumn colName = new TableViewerColumn(viewer, SWT.NONE); + colName.getColumn().setWidth(256); + colName.getColumn().setText("Attribute"); + colName.setLabelProvider(new ColumnLabelProvider() { + @Override + public String getText(Object element) { + Field f = (Field) element; + return f.attributeName; + } + }); + + final TableViewerColumn colField = new TableViewerColumn(viewer, SWT.NONE); + colField.getColumn().setWidth(100); + colField.getColumn().setText("Field"); + colField.setLabelProvider(new ColumnLabelProvider() { + @Override + public String getText(Object element) { + Field f = (Field) element; + if (f.attributeName.equals(f.name)) { + return ""; + } + return f.name; + } + }); + + final TableViewerColumn colValue = new TableViewerColumn(viewer, SWT.NONE); + colValue.getColumn().setWidth(100); + colValue.getColumn().setText("Value"); + colValue.setLabelProvider(new ColumnLabelProvider() { + @Override + public String getText(Object element) { + Field f = (Field) element; + return f.value; + } + }); + attributeEditor = new AttributeEditingSupport(viewer); + colValue.setEditingSupport(attributeEditor); + + final TableViewerColumn colDesc = new TableViewerColumn(viewer, SWT.NONE); + colDesc.getColumn().setWidth(350); + colDesc.getColumn().setText("Description"); + colDesc.setLabelProvider(new ColumnLabelProvider() { + @Override + public String getText(Object element) { + Field f = (Field) element; + return f.desc; + } + }); + + final TableViewerColumn colGroup = new TableViewerColumn(viewer, SWT.NONE); + colGroup.getColumn().setWidth(120); + colGroup.getColumn().setText("Group"); + colGroup.setLabelProvider(new ColumnLabelProvider() { + @Override + public String getText(Object element) { + Field f = (Field) element; + return f.group; + } + }); + + viewer.setContentProvider(ArrayContentProvider.getInstance()); + attributes = new Vector<Field>(); + viewer.setInput(attributes); + } +} |