Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00017 package com.generalrobotix.ui.util;
00018
00019 import org.eclipse.jface.dialogs.MessageDialog;
00020 import org.eclipse.swt.SWT;
00021 import org.eclipse.swt.events.SelectionEvent;
00022 import org.eclipse.swt.events.SelectionListener;
00023 import org.eclipse.swt.events.ModifyEvent;
00024 import org.eclipse.swt.events.ModifyListener;
00025 import org.eclipse.swt.layout.GridData;
00026 import org.eclipse.swt.layout.GridLayout;
00027 import org.eclipse.swt.widgets.Button;
00028 import org.eclipse.swt.widgets.Composite;
00029 import org.eclipse.swt.widgets.FileDialog;
00030 import org.eclipse.swt.widgets.Label;
00031 import org.eclipse.swt.widgets.Text;
00032 import org.eclipse.swt.widgets.TabFolder;
00033 import org.eclipse.osgi.util.NLS;
00034
00035 import com.generalrobotix.ui.GrxPluginManager;
00036 import com.generalrobotix.ui.grxui.GrxUIPerspectiveFactory;
00037 import com.generalrobotix.ui.util.GrxProcessManager.AProcess;
00038 import com.generalrobotix.ui.util.GrxProcessManager.ProcessInfo;
00039
00040 public class GrxServerManagerPanel extends Composite {
00041
00042 static private final int HORIZON_INDENT_ = 4;
00043 static private final int LABEL_LENGTH_ = 40;
00044 static private final int LOCAL_REF_BUTTON_LENGTH_ = 18;
00045 static private final int BUTTON_LENGTH_ = 64;
00046 static private final int TEXT_LENGTH_ = 256;
00047 static private final String START_ = MessageBundle.get("GrxServerManagerPanel.button.start");
00048 static private final String STOP_ = MessageBundle.get("GrxServerManagerPanel.button.stop");
00049 static private final String RESTART_ = MessageBundle.get("GrxServerManagerPanel.button.restart");
00050
00051 private Button toggleButton_ = null;
00052 private Button restartButton_= null;
00053 private Button autoChkBox_ = null;
00054 private Button useORBChkBox_ = null;
00055 private Text pathText_ = null;
00056 private Text argsText_ = null;
00057 private GrxServerManager serverManager_ = null;
00058
00059 private String pathStr_ = null;
00060 private String argsStr_ = null;
00061 private boolean bUseORB_;
00062 private boolean bAuto_;
00063
00064 private ProcessInfo processInfo_=null;
00065 private boolean restartFlag_ = false;
00066 private GrxPluginManager pluginManager_ = null;
00067
00068 public GrxServerManagerPanel(GrxServerManager manager, TabFolder parent, int style, int index, GrxPluginManager pluginManager) {
00069 super(parent, style);
00070 pluginManager_ = pluginManager;
00071 serverManager_ = manager;
00072 processInfo_ = manager.getServerInfo().elementAt(index);
00073 Composite localPanel = this;
00074 localPanel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL |
00075 GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_CENTER));
00076
00077 GridLayout localGridLayout = new GridLayout(4, false);
00078
00079 localGridLayout.marginLeft = 0;
00080 localGridLayout.horizontalSpacing = 0;
00081 localPanel.setLayout(localGridLayout);
00082
00083 Label localLabelPath = new Label(localPanel, SWT.RIGHT);
00084 localLabelPath.setText(MessageBundle.get("GrxServerManagerPanel.label.path"));
00085 GridData labelPathGridData = new GridData();
00086 labelPathGridData.widthHint = LABEL_LENGTH_;
00087
00088 pathText_ = new Text(localPanel, SWT.BORDER);
00089 GridData pathGridData = new GridData(GridData.FILL_HORIZONTAL);
00090 pathGridData.widthHint = TEXT_LENGTH_;
00091 pathText_.setText(processInfo_.com.get(processInfo_.editComIndex));
00092 pathStr_ = processInfo_.com.get(processInfo_.editComIndex);
00093 pathText_.addModifyListener( new ModifyListener() {
00094 public void modifyText(ModifyEvent e){
00095 pathStr_ = new String( pathText_.getText().trim());
00096 }
00097 });
00098
00099 Button localRefButton = new Button(localPanel, SWT.PUSH);
00100 localRefButton.setText("...");
00101 GridData refbtnGridData = new GridData();
00102 refbtnGridData.horizontalIndent = HORIZON_INDENT_;
00103 refbtnGridData.widthHint = LOCAL_REF_BUTTON_LENGTH_;
00104
00105 restartButton_ = new Button(localPanel, SWT.PUSH);
00106 restartButton_.setText(RESTART_);
00107 GridData rstbtnGridData = new GridData();
00108 rstbtnGridData.horizontalIndent = HORIZON_INDENT_;
00109 rstbtnGridData.widthHint = BUTTON_LENGTH_;
00110
00111 Label localLabelArgs = new Label(localPanel, SWT.RIGHT);
00112 localLabelArgs.setText(MessageBundle.get("GrxServerManagerPanel.label.args"));
00113 GridData labelArgsGridData = new GridData();
00114 labelArgsGridData.widthHint = LABEL_LENGTH_;
00115
00116 argsText_ = new Text(localPanel, SWT.BORDER);
00117 GridData argsGridData = new GridData(GridData.FILL_HORIZONTAL);
00118 argsGridData.widthHint = TEXT_LENGTH_;
00119 argsText_.setText(processInfo_.args);
00120 argsStr_ = processInfo_.args;
00121 argsText_.addModifyListener( new ModifyListener() {
00122 public void modifyText(ModifyEvent e){
00123 argsStr_ = new String(argsText_.getText().trim());
00124 }
00125 });
00126
00127 toggleButton_ = new Button(localPanel, SWT.PUSH);
00128 GrxProcessManager pm = (GrxProcessManager) pluginManager_.getItem("processManager");
00129 AProcess process = pm.get(processInfo_.id);
00130 if ( process!=null && process.isRunning() ) {
00131 toggleButton_.setText(STOP_);
00132 restartButton_.setVisible(true);
00133 } else {
00134 toggleButton_.setText(START_);
00135 restartButton_.setVisible(false);
00136 }
00137
00138 localRefButton.addSelectionListener(new SelectionListener() {
00139 public void widgetDefaultSelected(SelectionEvent e) {}
00140
00141 public void widgetSelected(SelectionEvent e) {
00142 updateRefBtn();
00143 }
00144 });
00145
00146 toggleButton_.addSelectionListener(new SelectionListener() {
00147 public void widgetDefaultSelected(SelectionEvent e) {}
00148
00149 public void widgetSelected(SelectionEvent e) {
00150 updateBtn();
00151 }
00152 });
00153
00154 restartButton_.addSelectionListener(new SelectionListener() {
00155 public void widgetDefaultSelected(SelectionEvent e) {}
00156
00157 public void widgetSelected(SelectionEvent e) {
00158 updateRestartBtn();
00159 }
00160 });
00161
00162 GridData btnGridData = new GridData();
00163 btnGridData.horizontalIndent = HORIZON_INDENT_;
00164 btnGridData.widthHint = BUTTON_LENGTH_;
00165 btnGridData.horizontalAlignment = SWT.END;
00166 btnGridData.horizontalSpan = 2;
00167
00168 Label localLabelAuto = new Label(localPanel, SWT.RIGHT | SWT.FILL);
00169 localLabelAuto.setText(MessageBundle.get("GrxServerManagerPanel.label.start"));
00170 GridData labelAutoGridData = new GridData(GridData.FILL_HORIZONTAL);
00171 labelAutoGridData.horizontalSpan = 2;
00172 labelAutoGridData.widthHint = LABEL_LENGTH_ + TEXT_LENGTH_;
00173
00174 autoChkBox_ = new Button(localPanel, SWT.CHECK);
00175 GridData chkbtnGridData = new GridData();
00176 chkbtnGridData.horizontalIndent = HORIZON_INDENT_;
00177 autoChkBox_.setSelection(processInfo_.autoStart);
00178 bAuto_ = processInfo_.autoStart;
00179 autoChkBox_.addSelectionListener( new SelectionListener() {
00180 public void widgetDefaultSelected(SelectionEvent e){}
00181
00182 public void widgetSelected(SelectionEvent e){
00183 bAuto_ = autoChkBox_.getSelection();
00184 }
00185
00186 });
00187 Label localLabelUseORB = new Label(localPanel, SWT.RIGHT | SWT.FILL);
00188 localLabelUseORB.setText(MessageBundle.get("GrxServerManagerPanel.label.useeRef"));
00189 GridData labelUseORBGridData = new GridData(GridData.FILL_HORIZONTAL);
00190 labelUseORBGridData.horizontalSpan = 2;
00191 labelUseORBGridData.widthHint = LABEL_LENGTH_ + TEXT_LENGTH_;
00192
00193 useORBChkBox_ = new Button(localPanel, SWT.CHECK);
00194 GridData UseORBchkbtnGridData = new GridData();
00195 UseORBchkbtnGridData.horizontalIndent = HORIZON_INDENT_;
00196 useORBChkBox_.setSelection(processInfo_.useORB);
00197 bUseORB_ = processInfo_.useORB;
00198 useORBChkBox_.addSelectionListener( new SelectionListener() {
00199 public void widgetDefaultSelected(SelectionEvent e){}
00200
00201 public void widgetSelected(SelectionEvent e){
00202 bUseORB_ = useORBChkBox_.getSelection();
00203 }
00204
00205 });
00206 localLabelPath.setLayoutData(labelPathGridData);
00207 pathText_.setLayoutData(pathGridData);
00208 localRefButton.setLayoutData(refbtnGridData);
00209 restartButton_.setLayoutData(rstbtnGridData);
00210 localLabelArgs.setLayoutData(labelArgsGridData);
00211 argsText_.setLayoutData(argsGridData);
00212 toggleButton_.setLayoutData(btnGridData);
00213 localLabelAuto.setLayoutData(labelAutoGridData);
00214 autoChkBox_.setLayoutData(chkbtnGridData);
00215 localLabelUseORB.setLayoutData(labelUseORBGridData);
00216 useORBChkBox_.setLayoutData(UseORBchkbtnGridData);
00217 }
00218
00219
00220 public void updateProcessInfo(){
00221 processInfo_.autoStart = bAuto_;
00222 processInfo_.useORB = bUseORB_;
00223 processInfo_.args = argsStr_;
00224
00225
00226 processInfo_.com.remove(processInfo_.editComIndex);
00227 processInfo_.com.add( processInfo_.editComIndex, pathStr_ );
00228 }
00229
00230
00231 private void updateRefBtn() {
00232
00233 String[] filterNames = new String[] { MessageBundle.get("GrxServerManagerPanel.filedialog.filterName") };
00234 String[] filterExtensions = new String[] { "*" };
00235 FileDialog fileDlg = new FileDialog(GrxUIPerspectiveFactory.getCurrentShell(), SWT.OPEN);
00236
00237 fileDlg.setText("");
00238 fileDlg.setFilterNames(filterNames);
00239 fileDlg.setFilterExtensions(filterExtensions);
00240
00241 String strServerName = processInfo_.id;
00242 fileDlg.setText(MessageBundle.get("GrxServerManagerPanel.filedialog.title") + strServerName);
00243 pathText_.setText(fileDlg.open());
00244 }
00245
00246
00247 private void updateBtn() {
00248 String mes = MessageBundle.get("GrxServerManagerPanel.dialog.message.update");
00249 mes = NLS.bind(mes, new String[]{toggleButton_.getText()});
00250
00251
00252 if ( MessageDialog.openConfirm(
00253 this.getShell(),
00254 MessageBundle.get("GrxServerManagerPanel.dialog.title.update") + toggleButton_.getText(),
00255 mes))
00256 {
00257 updateProcessInfo();
00258 if( serverManager_.toggleProcess(processInfo_) )
00259 {
00260 toggleButton_.setText(STOP_);
00261 restartButton_.setVisible(true);
00262 }else{
00263 toggleButton_.setText(START_);
00264 restartButton_.setVisible(false);
00265 }
00266 }
00267 }
00268
00269
00270 private void updateRestartBtn() {
00271 String mes = MessageBundle.get("GrxServerManagerPanel.dialog.message.restart");
00272 String title = MessageBundle.get("GrxServerManagerPanel.dialog.title.update") + restartButton_.getText();
00273
00274 if ( MessageDialog.openConfirm(
00275 this.getShell(),
00276 title,
00277 mes))
00278 {
00279 updateProcessInfo();
00280
00281 GrxProcessManager pm = (GrxProcessManager) pluginManager_.getItem("processManager");
00282 AProcess process = pm.get(processInfo_.id);
00283
00284
00285
00286 if(process==null || !process.isRunning()){
00287 if( serverManager_.toggleProcess(processInfo_) )
00288 {
00289 toggleButton_.setText(STOP_);
00290 restartButton_.setVisible(true);
00291 }else{
00292 toggleButton_.setText(START_);
00293 restartButton_.setVisible(false);
00294 MessageDialog.openError(
00295 this.getShell(),title,
00296 MessageBundle.get("GrxServerManagerPanel.dialog.message.errorRestart"));
00297 }
00298 return;
00299 }
00300
00301
00302 if(serverManager_.toggleProcess(processInfo_))
00303 {
00304 toggleButton_.setText(STOP_);
00305 restartButton_.setVisible(true);
00306 MessageDialog.openError(
00307 this.getShell(),title,
00308 MessageBundle.get("GrxServerManagerPanel.dialog.message.errorRestart"));
00309 return;
00310 }
00311
00312 if(!serverManager_.toggleProcess(processInfo_))
00313 {
00314 toggleButton_.setText(START_);
00315 restartButton_.setVisible(false);
00316 MessageDialog.openError(
00317 this.getShell(),title,
00318 MessageBundle.get("GrxServerManagerPanel.dialog.message.errorRestart"));
00319 return;
00320 }
00321
00322 toggleButton_.setText(STOP_);
00323 restartButton_.setVisible(true);
00324 restartFlag_ = true;
00325 }
00326 }
00327
00328 public void setStartText(){
00329
00330 if(restartFlag_)
00331 {
00332 restartFlag_ = false;
00333 return;
00334 }
00335
00336 toggleButton_.setText(START_);
00337 restartButton_.setVisible(false);
00338 }
00339 }