/**
   * (inheritDoc)
   *
   * @param listener
   * @see org.goko.featuremanager.service.IFeatureManager#install(java.util.List)
   */
  @Override
  public IStatus install(
      List<GkInstallableUnit> units, IProgressMonitor monitor, IJobChangeListener listener)
      throws GkException {
    // get the repository managers and define our repositories
    IMetadataRepositoryManager manager =
        (IMetadataRepositoryManager)
            getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);

    List<IInstallableUnit> p2Units = new ArrayList<IInstallableUnit>();
    for (GkInstallableUnit gkInstallableUnit : units) {
      if (!gkInstallableUnit.isInstalled()) {
        p2Units.add(gkInstallableUnit.getBaseUnit());
      }
    }
    final InstallOperation installOperation =
        new InstallOperation(new ProvisioningSession(getProvisioningAgent()), p2Units);
    LOG.info("installOperation created " + String.valueOf(installOperation));

    IStatus operationStatus = installOperation.resolveModal(monitor);
    LOG.info("operationStatus " + String.valueOf(operationStatus));

    if (operationStatus.getSeverity() > IStatus.WARNING) {
      LOG.error("installOperation detail :" + installOperation.getResolutionDetails());

      LOG.error("Install operation failed :" + operationStatus.toString());
      if (operationStatus.isMultiStatus()) {
        for (IStatus status : operationStatus.getChildren()) {
          LOG.error("   + " + status.getMessage());
        }
      }
      LOG.error(new CoreException(operationStatus));
      return operationStatus;
    }

    final ProvisioningJob provisioningJob = installOperation.getProvisioningJob(monitor);
    LOG.info("ProvisioningJob created " + String.valueOf(provisioningJob));

    provisioningJob.schedule();

    provisioningJob.addJobChangeListener(listener);

    LOG.info("Installation of feature done");

    return operationStatus;
  }
/** @author PsyKo */
public class FeatureManagerImpl implements IFeatureManager {
  private static final GkLog LOG = GkLog.getLogger(FeatureManagerImpl.class);
  private static final String SERVICE_ID = "org.goko.feature.manager";
  private IProvisioningAgent provisioningAgent;
  private IProfileRegistry profileRegistry;

  /**
   * (inheritDoc)
   *
   * @see org.goko.core.common.service.IGokoService#getServiceId()
   */
  @Override
  public String getServiceId() throws GkException {
    return SERVICE_ID;
  }

  /**
   * (inheritDoc)
   *
   * @see org.goko.core.common.service.IGokoService#start()
   */
  @Override
  public void start() throws GkException {
    BundleContext bundleContext = Activator.getContext();
    ServiceReference reference = bundleContext.getServiceReference(IProvisioningAgent.SERVICE_NAME);
    setProvisioningAgent((IProvisioningAgent) bundleContext.getService(reference));
    setProfileRegistry(
        (IProfileRegistry) getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME));
  }

  /**
   * (inheritDoc)
   *
   * @see org.goko.core.common.service.IGokoService#stop()
   */
  @Override
  public void stop() throws GkException {
    // TODO Auto-generated method stub

  }

  /** @return the provisioningAgent */
  protected IProvisioningAgent getProvisioningAgent() {
    return provisioningAgent;
  }

  /** @param provisioningAgent the provisioningAgent to set */
  protected void setProvisioningAgent(IProvisioningAgent provisioningAgent) {
    this.provisioningAgent = provisioningAgent;
  }

  /**
   * (inheritDoc)
   *
   * @see org.goko.featuremanager.service.IFeatureManager#getInstallableUnits()
   */
  @Override
  public List<GkInstallableUnit> getInstallableUnits(IProgressMonitor monitor) throws GkException {
    List<GkInstallableUnit> lstUnits = new ArrayList<GkInstallableUnit>();
    // get the repository managers and define our repositories
    IMetadataRepositoryManager manager =
        (IMetadataRepositoryManager)
            getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);

    try {
      manager.addRepository(new URI("http://update.goko.fr/"));
      manager.loadRepository(new URI("http://update.goko.fr/"), monitor);
    } catch (ProvisionException | OperationCanceledException | URISyntaxException e) {
      throw new GkTechnicalException(e);
    }
    // Query installed units
    IProfileRegistry registry =
        (IProfileRegistry) getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME);
    IProfile profile = registry.getProfile(IProfileRegistry.SELF);
    Collection<IInstallableUnit> lstInstalledUnits =
        profile.query(new UserVisibleRootQuery(), monitor).toUnmodifiableSet();

    // Query "groups"
    IQuery<IInstallableUnit> query =
        QueryUtil.createLatestQuery(
            QueryUtil.createMatchQuery(
                "properties[$0] == $1 && properties[$2] != null",
                "org.eclipse.equinox.p2.type.group",
                "true",
                "org.eclipse.equinox.p2.type.category"));
    Collection<IInstallableUnit> lstInstallableUnit =
        manager.query(query, monitor).toUnmodifiableSet();

    if (CollectionUtils.isNotEmpty(lstInstallableUnit)) {
      for (IInstallableUnit iInstallableUnit : lstInstallableUnit) {
        GkInstallableUnit gkUnit = new GkInstallableUnit(iInstallableUnit);
        // Same ID already installed ?
        for (IInstallableUnit installedUnit : lstInstalledUnits) {
          if (StringUtils.equals(gkUnit.getId(), installedUnit.getId())) {
            gkUnit.setInstalled(true);
            break;
          }
        }

        lstUnits.add(gkUnit);
      }
    }

    return lstUnits;
  }

  /**
   * (inheritDoc)
   *
   * @param listener
   * @see org.goko.featuremanager.service.IFeatureManager#install(java.util.List)
   */
  @Override
  public IStatus install(
      List<GkInstallableUnit> units, IProgressMonitor monitor, IJobChangeListener listener)
      throws GkException {
    // get the repository managers and define our repositories
    IMetadataRepositoryManager manager =
        (IMetadataRepositoryManager)
            getProvisioningAgent().getService(IMetadataRepositoryManager.SERVICE_NAME);

    List<IInstallableUnit> p2Units = new ArrayList<IInstallableUnit>();
    for (GkInstallableUnit gkInstallableUnit : units) {
      if (!gkInstallableUnit.isInstalled()) {
        p2Units.add(gkInstallableUnit.getBaseUnit());
      }
    }
    final InstallOperation installOperation =
        new InstallOperation(new ProvisioningSession(getProvisioningAgent()), p2Units);
    LOG.info("installOperation created " + String.valueOf(installOperation));

    IStatus operationStatus = installOperation.resolveModal(monitor);
    LOG.info("operationStatus " + String.valueOf(operationStatus));

    if (operationStatus.getSeverity() > IStatus.WARNING) {
      LOG.error("installOperation detail :" + installOperation.getResolutionDetails());

      LOG.error("Install operation failed :" + operationStatus.toString());
      if (operationStatus.isMultiStatus()) {
        for (IStatus status : operationStatus.getChildren()) {
          LOG.error("   + " + status.getMessage());
        }
      }
      LOG.error(new CoreException(operationStatus));
      return operationStatus;
    }

    final ProvisioningJob provisioningJob = installOperation.getProvisioningJob(monitor);
    LOG.info("ProvisioningJob created " + String.valueOf(provisioningJob));

    provisioningJob.schedule();

    provisioningJob.addJobChangeListener(listener);

    LOG.info("Installation of feature done");

    return operationStatus;
  }

  /** @return the profileRegistry */
  public IProfileRegistry getProfileRegistry() {
    return profileRegistry;
  }

  /** @param profileRegistry the profileRegistry to set */
  public void setProfileRegistry(IProfileRegistry profileRegistry) {
    this.profileRegistry = profileRegistry;
  }
}
  /**
   * Create contents of the view part.
   *
   * @throws GkException
   */
  @PostConstruct
  public void createControls(Composite parent, MPart part) {
    try {
      GridLayout gl_parent = new GridLayout(1, false);
      gl_parent.marginWidth = 0;
      gl_parent.marginHeight = 0;
      parent.setLayout(gl_parent);

      Composite composite = new Composite(parent, SWT.NONE);
      composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
      formToolkit.adapt(composite);
      formToolkit.paintBordersFor(composite);
      composite.setLayout(new GridLayout(2, false));

      lblStatus = formToolkit.createLabel(composite, "Status :", SWT.NONE);
      lblStatus.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
      lblStatus.setBounds(0, 0, 55, 15);

      Composite composite_3 = formToolkit.createComposite(composite, SWT.NONE);
      formToolkit.paintBordersFor(composite_3);
      composite_3.setLayout(new GridLayout(2, false));

      lblDisconnected = formToolkit.createLabel(composite_3, "Disconnected", SWT.NONE);
      lblDisconnected.setImage(
          ResourceManager.getPluginImage("org.goko.serial", "icons/bullet_red.png"));

      lblDisconnected_1 = formToolkit.createLabel(composite_3, "Disconnected", SWT.NONE);

      Label lblSerialPort = new Label(composite, SWT.NONE);
      lblSerialPort.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
      lblSerialPort.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
      formToolkit.adapt(lblSerialPort, true, true);
      lblSerialPort.setText("Serial port :");

      Composite composite_1 = new Composite(composite, SWT.NONE);
      composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
      formToolkit.adapt(composite_1);
      formToolkit.paintBordersFor(composite_1);
      GridLayout gl_composite_1 = new GridLayout(3, false);
      gl_composite_1.marginWidth = 0;
      gl_composite_1.marginHeight = 0;
      composite_1.setLayout(gl_composite_1);

      comboSerialPort = new GkCombo<LabeledValue>(composite_1, SWT.NONE | SWT.READ_ONLY);
      Combo combo = comboSerialPort.getCombo();
      GridData gd_combo = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
      gd_combo.widthHint = 40;
      combo.setLayoutData(gd_combo);

      comboBaudrate = new GkCombo<LabeledValue>(composite_1, SWT.NONE | SWT.READ_ONLY);
      Combo combo_1 = comboBaudrate.getCombo();
      GridData gd_combo_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
      gd_combo_1.widthHint = 40;
      combo_1.setLayoutData(gd_combo_1);

      Button button = formToolkit.createButton(composite_1, "", SWT.NONE);
      button.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.refreshSerialPortList();
            }
          });

      button.setImage(
          ResourceManager.getPluginImage("org.goko.serial", "icons/arrow-circle-double.png"));
      new Label(composite, SWT.NONE);

      Composite composite_2 = formToolkit.createComposite(composite, SWT.NONE);
      formToolkit.paintBordersFor(composite_2);
      composite_2.setLayout(new GridLayout(2, false));

      btnConnect = formToolkit.createButton(composite_2, "Connect", SWT.NONE);
      btnConnect.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.connect();
            }
          });
      btnConnect.setEnabled(false);

      btnDisconnect = formToolkit.createButton(composite_2, "Disconnect", SWT.NONE);
      btnDisconnect.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.disconnect();
            }
          });
      btnDisconnect.setEnabled(false);
      btnDisconnect.setBounds(0, 0, 75, 25);
      m_bindingContext = initDataBindings();
      applyPersistedStates(part);
    } catch (GkException e) {
      LOG.error(e);
    }
  }
Beispiel #4
0
public class CommandPanelPart extends GkUiComponent<CommandPanelController, CommandPanelModel>
    implements IPropertyChangeListener {
  private static GkLog LOG = GkLog.getLogger(CommandPanelPart.class);
  private Button btnHome;
  private Button btnStop;
  private Button btnPause;
  private Button btnStart;
  private Button btnResetZero;
  private Button btnJogZPos;
  private Button btnSpindleOn;
  private Button btnSpindleOff;
  private Button btnJogXNeg;
  private Button btnJogXPos;
  private Button btnJogYNeg;
  private Button btnJogYPos;
  private Button btnJogZNeg;
  private Button btnResetX;
  private Button btnResetY;
  private Button btnResetZ;
  private Composite composite_7;
  private Button btnJogANeg;
  private Button btnJogAPos;
  private Button btnResetA;

  @Inject @Preference IEclipsePreferences prefs;
  private Button btnIncrementalJog;
  private Button btnKillAlarm;
  private Spinner jogStepSpinner;
  private Spinner jogSpeedSpinner;
  private Composite composite_10;
  private Group grpCoordinatesSystem;
  private Button btnCSG54;
  private Button btnCSG55;
  private Button btnCSG56;
  private Button btnCSG57;
  private Button btnCSG58;
  private Button btnCSG59;
  private Button btnResetCsZero;
  private Label lblUnit;
  private Label lblJogStep;

  @Inject
  public CommandPanelPart(IEclipseContext context) throws GkException {
    super(new CommandPanelController(new CommandPanelModel()));
    ContextInjectionFactory.inject(getController(), context);
    getController().initialize();
  }

  /**
   * Create contents of the view part.
   *
   * @throws GkException
   */
  @PostConstruct
  public void createControls(Composite parent, MPart part) throws GkException {
    parent.setLayout(new FormLayout());

    Composite composite = new Composite(parent, SWT.NONE);

    FormData fd_composite = new FormData();
    fd_composite.top = new FormAttachment(0);
    fd_composite.left = new FormAttachment(0);
    composite.setLayoutData(fd_composite);

    GridLayout gl_composite = new GridLayout(3, false);
    gl_composite.verticalSpacing = 3;
    gl_composite.marginHeight = 3;
    gl_composite.marginWidth = 3;
    composite.setLayout(gl_composite);

    Group grpManualJog = new Group(composite, SWT.NONE);
    grpManualJog.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
    grpManualJog.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
    grpManualJog.setText("Manual jog");

    GridLayout gl_grpManualJog = new GridLayout(1, false);
    gl_grpManualJog.verticalSpacing = 2;
    gl_grpManualJog.marginWidth = 4;
    gl_grpManualJog.marginHeight = 2;
    gl_grpManualJog.horizontalSpacing = 4;
    grpManualJog.setLayout(gl_grpManualJog);

    if (getDataModel().isStepModeChoiceEnabled()) {
      btnIncrementalJog = new Button(grpManualJog, SWT.CHECK);
      btnIncrementalJog.setEnabled(false);
      btnIncrementalJog.setText("Incremental jog");
    }
    Composite composite_5 = new Composite(grpManualJog, SWT.NONE);
    composite_5.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));

    composite_5.setLayout(new GridLayout(3, false));

    if (getDataModel().isIncrementalJog()) {
      lblJogStep = new Label(composite_5, SWT.NONE);
      lblJogStep.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
      lblJogStep.setText("Step :");

      jogStepSpinner = new Spinner(composite_5, SWT.BORDER);
      jogStepSpinner.setMaximum(100000);
      jogStepSpinner.setMinimum(1);
      jogStepSpinner.setDigits(GokoPreference.getInstance().getDigitCount());
      GridData gd_jogSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
      gd_jogSpinner.widthHint = 40;
      jogStepSpinner.setLayoutData(gd_jogSpinner);

      lblUnit = new Label(composite_5, SWT.NONE);

      lblUnit.setText("mm");
    }

    Label lblJogSpeed = new Label(composite_5, SWT.NONE);
    lblJogSpeed.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
    lblJogSpeed.setBounds(0, 0, 55, 15);

    lblJogSpeed.setText("Speed :");

    jogSpeedSpinner = new Spinner(composite_5, SWT.BORDER);
    jogSpeedSpinner.setMaximum(10000);
    GridData gd_jogSpeedSpinner = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_jogSpeedSpinner.widthHint = 40;
    jogSpeedSpinner.setLayoutData(gd_jogSpeedSpinner);

    new Label(composite_5, SWT.NONE);
    Composite composite_4 = new Composite(grpManualJog, SWT.NONE);

    GridLayout gl_composite_4 = new GridLayout(2, false);
    gl_composite_4.marginWidth = 0;
    gl_composite_4.marginHeight = 0;
    gl_composite_4.horizontalSpacing = 0;
    gl_composite_4.verticalSpacing = 0;
    composite_4.setLayout(gl_composite_4);

    Composite composite_2 = new Composite(composite_4, SWT.NONE);
    composite_2.setSize(45, 125);
    GridLayout gl_composite_2 = new GridLayout(1, false);
    gl_composite_2.marginWidth = 2;
    gl_composite_2.verticalSpacing = 2;
    gl_composite_2.horizontalSpacing = 2;
    gl_composite_2.marginHeight = 2;
    composite_2.setLayout(gl_composite_2);

    btnJogZPos = new Button(composite_2, SWT.NONE);
    btnJogZPos.setText("+Z");
    GridData gd_btnJogZPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogZPos.heightHint = 55;
    gd_btnJogZPos.widthHint = 35;
    btnJogZPos.setLayoutData(gd_btnJogZPos);

    btnJogZNeg = new Button(composite_2, SWT.NONE);
    btnJogZNeg.setText("-Z");
    GridData gd_btnJogZNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogZNeg.widthHint = 35;
    gd_btnJogZNeg.heightHint = 55;
    btnJogZNeg.setLayoutData(gd_btnJogZNeg);

    Composite composite_1 = new Composite(composite_4, SWT.NONE);

    GridLayout gl_composite_1 = new GridLayout(3, false);
    gl_composite_1.verticalSpacing = 2;
    gl_composite_1.marginWidth = 2;
    gl_composite_1.horizontalSpacing = 0;
    gl_composite_1.marginHeight = 0;
    composite_1.setLayout(gl_composite_1);
    new Label(composite_1, SWT.NONE);

    btnJogYPos = new Button(composite_1, SWT.NONE);
    btnJogYPos.setText("+Y");
    GridData gd_btnJogYPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogYPos.heightHint = 35;
    gd_btnJogYPos.widthHint = 35;
    btnJogYPos.setLayoutData(gd_btnJogYPos);
    new Label(composite_1, SWT.NONE);

    btnJogXNeg = new Button(composite_1, SWT.NONE);
    btnJogXNeg.setText("-X");
    GridData gd_btnJogXNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogXNeg.widthHint = 35;
    gd_btnJogXNeg.heightHint = 35;
    btnJogXNeg.setLayoutData(gd_btnJogXNeg);
    new Label(composite_1, SWT.NONE);

    btnJogXPos = new Button(composite_1, SWT.NONE);
    btnJogXPos.setText("+X");
    GridData gd_btnJogXPos = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogXPos.heightHint = 35;
    gd_btnJogXPos.widthHint = 35;
    btnJogXPos.setLayoutData(gd_btnJogXPos);
    new Label(composite_1, SWT.NONE);

    btnJogYNeg = new Button(composite_1, SWT.NONE);
    btnJogYNeg.setText("-Y");
    GridData gd_btnJogYNeg = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
    gd_btnJogYNeg.widthHint = 35;
    gd_btnJogYNeg.heightHint = 35;
    btnJogYNeg.setLayoutData(gd_btnJogYNeg);
    new Label(composite_1, SWT.NONE);
    new Label(composite_4, SWT.NONE);

    composite_7 = new Composite(composite_4, SWT.NONE);
    composite_7.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));

    GridLayout gl_composite_7 = new GridLayout(2, true);
    gl_composite_7.verticalSpacing = 2;
    gl_composite_7.marginWidth = 2;
    gl_composite_7.marginHeight = 2;
    gl_composite_7.horizontalSpacing = 2;
    composite_7.setLayout(gl_composite_7);

    btnJogANeg = new Button(composite_7, SWT.NONE);
    GridData gd_btnANeg = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnANeg.heightHint = 35;
    btnJogANeg.setLayoutData(gd_btnANeg);

    btnJogANeg.setText("A-");

    btnJogAPos = new Button(composite_7, SWT.NONE);
    GridData gd_btnAPos = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnAPos.heightHint = 35;
    btnJogAPos.setLayoutData(gd_btnAPos);

    btnJogAPos.setText("A+");

    Composite composite_9 = new Composite(composite, SWT.NONE);
    GridLayout gl_composite_9 = new GridLayout(1, false);
    gl_composite_9.horizontalSpacing = 4;
    gl_composite_9.verticalSpacing = 4;
    gl_composite_9.marginWidth = 0;
    gl_composite_9.marginHeight = 0;
    composite_9.setLayout(gl_composite_9);
    composite_9.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));

    Group grpCommands = new Group(composite_9, SWT.NONE);
    grpCommands.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
    grpCommands.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    GridLayout gl_grpCommands = new GridLayout(1, false);
    gl_grpCommands.verticalSpacing = 2;
    gl_grpCommands.marginWidth = 2;
    gl_grpCommands.marginHeight = 2;
    gl_grpCommands.horizontalSpacing = 2;
    grpCommands.setLayout(gl_grpCommands);
    grpCommands.setText("Homing");

    btnHome = new Button(grpCommands, SWT.NONE);
    btnHome.setText("Home");
    GridData gd_btnNewButton_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnNewButton_1.widthHint = 140;
    gd_btnNewButton_1.heightHint = 35;
    btnHome.setLayoutData(gd_btnNewButton_1);

    Label label = new Label(grpCommands, SWT.SEPARATOR | SWT.HORIZONTAL);
    label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    btnResetZero = new Button(grpCommands, SWT.NONE);
    btnResetZero.setText("Zero all axis");
    GridData gd_btnNewButton_2 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnNewButton_2.heightHint = 35;
    btnResetZero.setLayoutData(gd_btnNewButton_2);

    Composite composite_6 = new Composite(grpCommands, SWT.NONE);
    composite_6.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    GridLayout gl_composite_6 = new GridLayout(4, true);
    gl_composite_6.horizontalSpacing = 1;
    gl_composite_6.marginHeight = 0;
    gl_composite_6.verticalSpacing = 2;
    gl_composite_6.marginWidth = 0;
    composite_6.setLayout(gl_composite_6);

    btnResetX = new Button(composite_6, SWT.NONE);
    btnResetX.setText("X");
    btnResetX.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL));
    GridData gd_btnResetX = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnResetX.heightHint = 30;
    btnResetX.setLayoutData(gd_btnResetX);

    btnResetY = new Button(composite_6, SWT.NONE);
    btnResetY.setText("Y");
    btnResetY.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL));
    GridData gd_btnNewButton = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnNewButton.heightHint = 30;
    btnResetY.setLayoutData(gd_btnNewButton);

    btnResetZ = new Button(composite_6, SWT.NONE);
    btnResetZ.setText("Z");
    btnResetZ.setFont(SWTResourceManager.getFont("Segoe UI", 8, SWT.NORMAL));
    GridData gd_btnNewButton_21 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnNewButton_21.heightHint = 30;
    btnResetZ.setLayoutData(gd_btnNewButton_21);

    btnResetA = new Button(composite_6, SWT.NONE);
    GridData gd_btnResetA = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnResetA.heightHint = 30;
    btnResetA.setLayoutData(gd_btnResetA);

    btnResetA.setText("A");

    grpCoordinatesSystem = new Group(composite_9, SWT.NONE);
    grpCoordinatesSystem.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
    GridLayout gl_grpCoordinatesSystem = new GridLayout(1, false);
    gl_grpCoordinatesSystem.verticalSpacing = 2;
    gl_grpCoordinatesSystem.marginWidth = 2;
    gl_grpCoordinatesSystem.marginHeight = 2;
    gl_grpCoordinatesSystem.horizontalSpacing = 2;
    grpCoordinatesSystem.setLayout(gl_grpCoordinatesSystem);
    grpCoordinatesSystem.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
    grpCoordinatesSystem.setText("Coordinates system");

    Composite composite_11 = new Composite(grpCoordinatesSystem, SWT.NONE);
    composite_11.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));

    GridLayout gl_composite_11 = new GridLayout(3, true);
    gl_composite_11.verticalSpacing = 2;
    gl_composite_11.horizontalSpacing = 2;
    gl_composite_11.marginWidth = 0;
    gl_composite_11.marginHeight = 0;
    composite_11.setLayout(gl_composite_11);

    btnCSG54 = new Button(composite_11, SWT.NONE);
    btnCSG54.setText("G54");
    btnCSG54.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G54);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG54 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnCSG54.heightHint = 30;
    btnCSG54.setLayoutData(gd_btnCSG54);

    btnCSG55 = new Button(composite_11, SWT.NONE);
    btnCSG55.setText("G55");
    btnCSG55.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G55);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG55 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnCSG55.heightHint = 30;
    btnCSG55.setLayoutData(gd_btnCSG55);

    btnCSG56 = new Button(composite_11, SWT.NONE);
    btnCSG56.setText("G56");
    btnCSG56.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G56);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG56 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnCSG56.heightHint = 30;
    btnCSG56.setLayoutData(gd_btnCSG56);

    btnCSG57 = new Button(composite_11, SWT.NONE);
    btnCSG57.setText("G57");
    btnCSG57.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G57);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG57 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnCSG57.heightHint = 30;
    btnCSG57.setLayoutData(gd_btnCSG57);

    btnCSG58 = new Button(composite_11, SWT.NONE);
    btnCSG58.setText("G58");
    btnCSG58.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G58);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG58 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnCSG58.heightHint = 30;
    btnCSG58.setLayoutData(gd_btnCSG58);

    btnCSG59 = new Button(composite_11, SWT.NONE);
    btnCSG59.setText("G59");
    btnCSG59.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().setCoordinateSystem(EnumCoordinateSystem.G59);
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnCSG59 = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnCSG59.heightHint = 30;
    btnCSG59.setLayoutData(gd_btnCSG59);

    Composite composite_12 = new Composite(grpCoordinatesSystem, SWT.NONE);
    composite_12.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, true, 1, 1));

    GridLayout gl_composite_12 = new GridLayout(1, false);
    gl_composite_12.verticalSpacing = 2;
    gl_composite_12.marginHeight = 2;
    gl_composite_12.marginWidth = 0;
    gl_composite_12.horizontalSpacing = 0;
    composite_12.setLayout(gl_composite_12);

    btnResetCsZero = new Button(composite_12, SWT.NONE);
    btnResetCsZero.setText("Set current zero");
    btnResetCsZero.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseUp(MouseEvent e) {
            try {
              getController().zeroCoordinateSystem();
            } catch (GkException e1) {
              displayMessage(e1);
            }
          }
        });
    GridData gd_btnResetCsZero = new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1);
    gd_btnResetCsZero.heightHint = 35;
    gd_btnNewButton_1.heightHint = 35;
    btnResetCsZero.setLayoutData(gd_btnResetCsZero);
    btnResetCsZero.setBounds(0, 0, 75, 25);

    composite_10 = new Composite(composite, SWT.NONE);
    GridData gd_composite_10 = new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1);
    gd_composite_10.widthHint = 140;
    composite_10.setLayoutData(gd_composite_10);

    GridLayout gl_composite_10 = new GridLayout(1, false);
    gl_composite_10.verticalSpacing = 4;
    gl_composite_10.marginWidth = 2;
    gl_composite_10.marginHeight = 2;
    gl_composite_10.horizontalSpacing = 4;
    composite_10.setLayout(gl_composite_10);

    Group grpControls = new Group(composite_10, SWT.NONE);
    grpControls.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
    grpControls.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
    grpControls.setLayout(new GridLayout(1, false));
    grpControls.setText("Controls");

    Composite composite_8 = new Composite(grpControls, SWT.NONE);
    composite_8.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

    GridLayout gl_composite_8 = new GridLayout(2, true);
    gl_composite_8.verticalSpacing = 2;
    gl_composite_8.horizontalSpacing = 2;
    gl_composite_8.marginWidth = 0;
    gl_composite_8.marginHeight = 0;
    composite_8.setLayout(gl_composite_8);

    btnStart = new Button(composite_8, SWT.NONE);
    GridData gd_btnStart = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnStart.heightHint = 35;
    btnStart.setLayoutData(gd_btnStart);

    btnStart.setText("Resume");

    btnPause = new Button(composite_8, SWT.NONE);
    GridData gd_btnPause = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnPause.heightHint = 35;
    btnPause.setLayoutData(gd_btnPause);

    btnPause.setText("Pause");

    btnStop = new Button(grpControls, SWT.NONE);
    btnStop.setImage(
        ResourceManager.getPluginImage("org.goko.tools.commandpanel", "icons/stop.png"));
    btnStop.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
    GridData gd_btnStop = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnStop.heightHint = 35;
    btnStop.setLayoutData(gd_btnStop);

    btnStop.setText("Stop");

    btnKillAlarm = new Button(grpControls, SWT.NONE);
    btnKillAlarm.setImage(
        ResourceManager.getPluginImage("org.goko.tools.commandpanel", "icons/bell--minus.png"));
    GridData gd_btnKillAlarm = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnKillAlarm.heightHint = 35;
    btnKillAlarm.setLayoutData(gd_btnKillAlarm);

    btnKillAlarm.setText("Kill alarm");

    Group grpSpindle = new Group(composite_10, SWT.NONE);
    grpSpindle.setFont(SWTResourceManager.getFont("Segoe UI", 9, SWT.BOLD));
    grpSpindle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
    grpSpindle.setLayout(new FillLayout(SWT.HORIZONTAL));
    grpSpindle.setText("Spindle");

    Composite composite_3 = new Composite(grpSpindle, SWT.NONE);

    GridLayout gl_composite_3 = new GridLayout(2, true);
    gl_composite_3.marginWidth = 2;
    gl_composite_3.horizontalSpacing = 2;
    gl_composite_3.marginHeight = 2;
    composite_3.setLayout(gl_composite_3);

    btnSpindleOn = new Button(composite_3, SWT.NONE);
    btnSpindleOn.setText("On");
    GridData gd_btnSpindleOn = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_btnSpindleOn.heightHint = 35;
    btnSpindleOn.setLayoutData(gd_btnSpindleOn);

    btnSpindleOff = new Button(composite_3, SWT.NONE);
    btnSpindleOff.setText("Off");
    GridData gd_btnSpindleOff = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
    gd_btnSpindleOff.heightHint = 35;
    btnSpindleOff.setLayoutData(gd_btnSpindleOff);

    getController().initilizeValues();
    if (getDataModel().getJogSpeed() != null) {
      jogSpeedSpinner.setSelection(
          (int)
              (getDataModel().getJogSpeed().doubleValue()
                  * Math.pow(10, jogSpeedSpinner.getDigits())));
    }
    initCustomBindings(part);
    enableAdaptiveSpinner();
  }

  protected void enableAdaptiveSpinner() {
    if (jogStepSpinner != null) {
      jogStepSpinner.setSelection(
          (int)
              (getDataModel().getJogIncrement().doubleValue()
                  * Math.pow(10, jogStepSpinner.getDigits())));
      jogStepSpinner.addSelectionListener(
          new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
              int selection = jogStepSpinner.getSelection();
              if (selection < 100) {
                jogStepSpinner.setIncrement(10);
              } else if (selection < 1000) {
                jogStepSpinner.setIncrement(100);
              } else if (selection < 10000) {
                jogStepSpinner.setIncrement(1000);
              }
              getDataModel()
                  .setJogIncrement(
                      BigDecimal.valueOf(selection / Math.pow(10, jogStepSpinner.getDigits())));
            }
          });
    }

    jogSpeedSpinner.setSelection(
        (int)
            (getDataModel().getJogSpeed().doubleValue()
                * Math.pow(10, jogSpeedSpinner.getDigits())));

    jogSpeedSpinner.setIncrement(10);
    jogSpeedSpinner.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            getDataModel().setJogSpeed(BigDecimal.valueOf(jogSpeedSpinner.getSelection()));
          }
        });
  }

  protected void initCustomBindings(MPart part) throws GkException {
    getController().addTextDisplayBinding(lblUnit, "lengthUnitSymbol");

    getController().bindEnableControlWithAction(btnHome, DefaultControllerAction.HOME);
    getController().bindButtonToExecuteAction(btnHome, DefaultControllerAction.HOME);
    getController().bindEnableControlWithAction(btnStart, DefaultControllerAction.START);
    getController().bindButtonToExecuteAction(btnStart, DefaultControllerAction.START);
    getController().bindEnableControlWithAction(btnPause, DefaultControllerAction.PAUSE);
    getController().bindButtonToExecuteAction(btnPause, DefaultControllerAction.PAUSE);
    getController().bindEnableControlWithAction(btnStop, DefaultControllerAction.STOP);
    getController().bindButtonToExecuteAction(btnStop, DefaultControllerAction.STOP);
    getController().bindEnableControlWithAction(btnResetZero, DefaultControllerAction.RESET_ZERO);
    getController().bindButtonToExecuteAction(btnResetZero, DefaultControllerAction.RESET_ZERO);
    getController().bindEnableControlWithAction(btnResetX, DefaultControllerAction.RESET_ZERO);
    getController()
        .bindButtonToExecuteAction(
            btnResetX, DefaultControllerAction.RESET_ZERO, IGkConstants.X_AXIS);
    getController().bindEnableControlWithAction(btnResetY, DefaultControllerAction.RESET_ZERO);
    getController()
        .bindButtonToExecuteAction(
            btnResetY, DefaultControllerAction.RESET_ZERO, IGkConstants.Y_AXIS);
    getController().bindEnableControlWithAction(btnResetZ, DefaultControllerAction.RESET_ZERO);
    getController()
        .bindButtonToExecuteAction(
            btnResetZ, DefaultControllerAction.RESET_ZERO, IGkConstants.Z_AXIS);
    getController().bindEnableControlWithAction(btnResetA, DefaultControllerAction.RESET_ZERO);
    getController()
        .bindButtonToExecuteAction(
            btnResetA, DefaultControllerAction.RESET_ZERO, IGkConstants.A_AXIS);
    getController().bindEnableControlWithAction(btnSpindleOn, DefaultControllerAction.SPINDLE_ON);
    getController().bindButtonToExecuteAction(btnSpindleOn, DefaultControllerAction.SPINDLE_ON);
    getController().bindEnableControlWithAction(btnSpindleOff, DefaultControllerAction.SPINDLE_OFF);
    getController().bindButtonToExecuteAction(btnSpindleOff, DefaultControllerAction.SPINDLE_OFF);
    getController().bindEnableControlWithAction(btnKillAlarm, DefaultControllerAction.KILL_ALARM);
    getController().bindButtonToExecuteAction(btnKillAlarm, DefaultControllerAction.KILL_ALARM);

    if (getDataModel().isStepModeChoiceEnabled()) {
      getController().addEnableBinding(btnIncrementalJog, "stepModeChoiceEnabled");
      getController().addVisibleBinding(btnIncrementalJog, "stepModeChoiceEnabled");
      getController().addSelectionBinding(btnIncrementalJog, "incrementalJog");

      getController().addVisibleBinding(jogStepSpinner, "stepModeChoiceEnabled");
      getController().addVisibleBinding(lblUnit, "stepModeChoiceEnabled");
      getController().addVisibleBinding(lblJogStep, "stepModeChoiceEnabled");

      getController()
          .bindEnableControlWithAction(jogStepSpinner, DefaultControllerAction.JOG_START);

    } else if (getDataModel().isIncrementalJog()) {
      getController()
          .bindEnableControlWithAction(jogStepSpinner, DefaultControllerAction.JOG_START);
    }

    getController().bindEnableControlWithAction(jogSpeedSpinner, DefaultControllerAction.JOG_START);

    getController().bindEnableControlWithAction(btnJogYPos, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogYNeg, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogXPos, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogXNeg, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogZPos, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogZNeg, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogAPos, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnJogANeg, DefaultControllerAction.JOG_START);

    getController().bindEnableControlWithAction(btnCSG54, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnCSG55, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnCSG56, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnCSG57, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnCSG58, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnCSG59, DefaultControllerAction.JOG_START);
    getController().bindEnableControlWithAction(btnResetCsZero, DefaultControllerAction.JOG_START);

    getController().bindJogButton(btnJogYPos, EnumControllerAxis.Y_POSITIVE);
    getController().bindJogButton(btnJogYNeg, EnumControllerAxis.Y_NEGATIVE);
    getController().bindJogButton(btnJogXPos, EnumControllerAxis.X_POSITIVE);
    getController().bindJogButton(btnJogXNeg, EnumControllerAxis.X_NEGATIVE);
    getController().bindJogButton(btnJogZPos, EnumControllerAxis.Z_POSITIVE);
    getController().bindJogButton(btnJogZNeg, EnumControllerAxis.Z_NEGATIVE);
    getController().bindJogButton(btnJogAPos, EnumControllerAxis.A_POSITIVE);
    getController().bindJogButton(btnJogANeg, EnumControllerAxis.A_NEGATIVE);
    GokoPreference.getInstance().addPropertyChangeListener(this);
  }

  @PreDestroy
  public void dispose() {}

  @PersistState
  public void persist(MPart part) {
    getController().saveValues();
  }

  @Focus
  public void setFocus() throws GkException {
    getController().refreshExecutableAction();
    getController().saveValues();
  }

  /** @param event */
  @Override
  public void propertyChange(PropertyChangeEvent event) {
    Display.getDefault()
        .asyncExec(
            new Runnable() {

              @Override
              public void run() {
                try {
                  lblUnit.setText(GokoPreference.getInstance().getLengthUnit().getSymbol());
                  lblUnit.pack();
                } catch (GkException e) {
                  LOG.error(e);
                }
              }
            });
  }
}
public class SerialConnectionPart {
  /** LOG */
  private static final GkLog LOG = GkLog.getLogger(SerialConnectionPart.class);

  SerialConnectionController controller;

  private DataBindingContext m_bindingContext;
  private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
  private SerialConnectionBindings bindings;

  private GkCombo<LabeledValue> comboSerialPort;
  private Button btnConnect;
  private Button btnDisconnect;
  private Label lblDisconnected_1;
  private Label lblDisconnected;
  private GkCombo<LabeledValue> comboBaudrate;
  private Label lblStatus;

  @Inject
  public SerialConnectionPart(IEclipseContext context) {
    bindings = new SerialConnectionBindings();
    controller = new SerialConnectionController(bindings);
    ContextInjectionFactory.inject(controller, context);
    try {
      controller.initialize();
    } catch (GkException e) {
      e.printStackTrace();
    }
  }

  /**
   * Create contents of the view part.
   *
   * @throws GkException
   */
  @PostConstruct
  public void createControls(Composite parent, MPart part) {
    try {
      GridLayout gl_parent = new GridLayout(1, false);
      gl_parent.marginWidth = 0;
      gl_parent.marginHeight = 0;
      parent.setLayout(gl_parent);

      Composite composite = new Composite(parent, SWT.NONE);
      composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
      formToolkit.adapt(composite);
      formToolkit.paintBordersFor(composite);
      composite.setLayout(new GridLayout(2, false));

      lblStatus = formToolkit.createLabel(composite, "Status :", SWT.NONE);
      lblStatus.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
      lblStatus.setBounds(0, 0, 55, 15);

      Composite composite_3 = formToolkit.createComposite(composite, SWT.NONE);
      formToolkit.paintBordersFor(composite_3);
      composite_3.setLayout(new GridLayout(2, false));

      lblDisconnected = formToolkit.createLabel(composite_3, "Disconnected", SWT.NONE);
      lblDisconnected.setImage(
          ResourceManager.getPluginImage("org.goko.serial", "icons/bullet_red.png"));

      lblDisconnected_1 = formToolkit.createLabel(composite_3, "Disconnected", SWT.NONE);

      Label lblSerialPort = new Label(composite, SWT.NONE);
      lblSerialPort.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
      lblSerialPort.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_BACKGROUND));
      formToolkit.adapt(lblSerialPort, true, true);
      lblSerialPort.setText("Serial port :");

      Composite composite_1 = new Composite(composite, SWT.NONE);
      composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
      formToolkit.adapt(composite_1);
      formToolkit.paintBordersFor(composite_1);
      GridLayout gl_composite_1 = new GridLayout(3, false);
      gl_composite_1.marginWidth = 0;
      gl_composite_1.marginHeight = 0;
      composite_1.setLayout(gl_composite_1);

      comboSerialPort = new GkCombo<LabeledValue>(composite_1, SWT.NONE | SWT.READ_ONLY);
      Combo combo = comboSerialPort.getCombo();
      GridData gd_combo = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
      gd_combo.widthHint = 40;
      combo.setLayoutData(gd_combo);

      comboBaudrate = new GkCombo<LabeledValue>(composite_1, SWT.NONE | SWT.READ_ONLY);
      Combo combo_1 = comboBaudrate.getCombo();
      GridData gd_combo_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
      gd_combo_1.widthHint = 40;
      combo_1.setLayoutData(gd_combo_1);

      Button button = formToolkit.createButton(composite_1, "", SWT.NONE);
      button.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.refreshSerialPortList();
            }
          });

      button.setImage(
          ResourceManager.getPluginImage("org.goko.serial", "icons/arrow-circle-double.png"));
      new Label(composite, SWT.NONE);

      Composite composite_2 = formToolkit.createComposite(composite, SWT.NONE);
      formToolkit.paintBordersFor(composite_2);
      composite_2.setLayout(new GridLayout(2, false));

      btnConnect = formToolkit.createButton(composite_2, "Connect", SWT.NONE);
      btnConnect.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.connect();
            }
          });
      btnConnect.setEnabled(false);

      btnDisconnect = formToolkit.createButton(composite_2, "Disconnect", SWT.NONE);
      btnDisconnect.addMouseListener(
          new MouseAdapter() {
            @Override
            public void mouseUp(MouseEvent e) {
              controller.disconnect();
            }
          });
      btnDisconnect.setEnabled(false);
      btnDisconnect.setBounds(0, 0, 75, 25);
      m_bindingContext = initDataBindings();
      applyPersistedStates(part);
    } catch (GkException e) {
      LOG.error(e);
    }
  }

  protected void applyPersistedStates(MPart part) throws GkException {
    String baudrateStr =
        part.getPersistedState().get(SerialConnectionController.PERSISTED_BAUDRATE);

    if (StringUtils.isNotBlank(baudrateStr)) {
      LabeledValue<Integer> baudrate =
          GkUiUtils.getLabelledValueByKey(
              Integer.valueOf(baudrateStr), controller.getDataModel().getChoiceBaudrate());
      if (baudrate != null) {
        controller.getDataModel().setBaudrate(baudrate);
      }
    }

    String commPortStr =
        part.getPersistedState().get(SerialConnectionController.PERSISTED_COMMPORT);

    if (StringUtils.isNotBlank(baudrateStr)) {
      LabeledValue<String> commPort =
          GkUiUtils.getLabelledValueByKey(
              commPortStr, controller.getDataModel().getChoiceSerialPort());
      if (commPort != null) {
        controller.getDataModel().setSerialPort(commPort);
      }
    }
  }

  @PreDestroy
  public void dispose() {}

  @PersistState
  public void persist(MPart part) {
    if (controller.getDataModel() != null) {
      part.getPersistedState()
          .put(
              SerialConnectionController.PERSISTED_BAUDRATE,
              String.valueOf(controller.getDataModel().getBaudrate().getValue()));
      part.getPersistedState()
          .put(
              SerialConnectionController.PERSISTED_COMMPORT,
              controller.getDataModel().getSerialPort().getValue());
    }
  }

  @Focus
  public void setFocus() {
    // TODO	Set the focus to control
  }

  protected DataBindingContext initDataBindings() throws GkException {
    DataBindingContext bindingContext = new DataBindingContext();

    IObservableValue observeImageLblDisconnectedObserveWidget =
        WidgetProperties.image().observe(lblDisconnected);
    IObservableValue connectionImageBindingsObserveValue =
        BeanProperties.value("connectionImage").observe(bindings);
    bindingContext.bindValue(
        observeImageLblDisconnectedObserveWidget,
        connectionImageBindingsObserveValue,
        new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER),
        null);
    //
    controller.addEnableBinding(btnConnect, "connectionAllowed");
    controller.addEnableBinding(btnDisconnect, "disconnectionAllowed");

    controller.addTextDisplayBinding(lblDisconnected_1, "connectionStatus");

    controller.addItemsBinding(comboBaudrate, "choiceBaudrate");
    controller.addItemSelectionBinding(comboBaudrate, "baudrate");
    controller.addEnableReverseBinding(comboBaudrate, "connected");

    controller.addItemsBinding(comboSerialPort, "choiceSerialPort");
    controller.addItemSelectionBinding(comboSerialPort, "serialPort");
    controller.addEnableReverseBinding(comboSerialPort, "connected");

    controller.refreshSerialPortList();
    //
    return bindingContext;
  }
}