/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * staff.java
 *
 * Created on Mar 18, 2010, 11:25:22 AM
 */

/**
 *
 * @author Admin2
 */

import com.lindo.Lingd18;
import javax.swing.JOptionPane;

public class staff extends javax.swing.JDialog {

   // Load the Lingo JNI interface
   static {
      System.loadLibrary( "Lingj64_18");
   }

   // Create a new Lingo object, which we will use to interface with Lingo
   Lingd18 lng = new Lingd18();

   // Stores the Lingo JNI environment pointer
   Object pLngEnv;

   int nLastIterationCount;

   /** Creates new form staff */
   public staff(java.awt.Frame parent, boolean modal) {
       super(parent, modal);
       initComponents();
       
       // Create the Lingo environment.
       // We do this here in the constructor so as not to repeat this
       // for each subsequent solve, improving performance.
       // Be sure to delete the Lingo environment on exit.
       pLngEnv = lng.LScreateEnvLng();
       if ( pLngEnv == null)
       {
          JOptionPane.showMessageDialog(null, "Unable to create Lingo environment");
          return;
       }
   }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jNeeds1 = new javax.swing.JTextField();
        jStart1 = new javax.swing.JLabel();
        jOnDuty1 = new javax.swing.JLabel();
        jNeeds2 = new javax.swing.JTextField();
        jStart2 = new javax.swing.JLabel();
        jOnDuty2 = new javax.swing.JLabel();
        jNeeds3 = new javax.swing.JTextField();
        jStart3 = new javax.swing.JLabel();
        jOnDuty3 = new javax.swing.JLabel();
        jNeeds4 = new javax.swing.JTextField();
        jStart4 = new javax.swing.JLabel();
        jOnDuty4 = new javax.swing.JLabel();
        jNeeds5 = new javax.swing.JTextField();
        jStart5 = new javax.swing.JLabel();
        jOnDuty5 = new javax.swing.JLabel();
        jNeeds6 = new javax.swing.JTextField();
        jStart6 = new javax.swing.JLabel();
        jOnDuty6 = new javax.swing.JLabel();
        jNeeds7 = new javax.swing.JTextField();
        jStart7 = new javax.swing.JLabel();
        jOnDuty7 = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLabel10 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jButtonSolve = new javax.swing.JButton();
        jButtonExit = new javax.swing.JButton();
        jTotal = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Lingo Staff Scheduling using Java");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                staff.this.windowClosing(evt);
            }
        });

        jNeeds1.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds1.setText("0");

        jStart1.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart1.setText("0");
        jStart1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty1.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty1.setText("0");
        jOnDuty1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds2.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds2.setText("0");

        jStart2.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart2.setText("0");
        jStart2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty2.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty2.setText("0");
        jOnDuty2.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds3.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds3.setText("0");

        jStart3.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart3.setText("0");
        jStart3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty3.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty3.setText("0");
        jOnDuty3.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds4.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds4.setText("0");

        jStart4.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart4.setText("0");
        jStart4.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty4.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty4.setText("0");
        jOnDuty4.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds5.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds5.setText("0");

        jStart5.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart5.setText("0");
        jStart5.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty5.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty5.setText("0");
        jOnDuty5.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds6.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds6.setText("0");

        jStart6.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart6.setText("0");
        jStart6.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty6.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty6.setText("0");
        jOnDuty6.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jNeeds7.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jNeeds7.setText("0");

        jStart7.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jStart7.setText("0");
        jStart7.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jOnDuty7.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jOnDuty7.setText("0");
        jOnDuty7.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel1.setText("Mon");

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel2.setText("Tue");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel3.setText("Wed");

        jLabel4.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel4.setText("Thu");

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel5.setText("Fri");

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel6.setText("Sat");

        jLabel7.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel7.setText("Sun");

        jLabel8.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel8.setText("Day:");

        jLabel9.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel9.setText("Needs:");

        jLabel10.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel10.setText("Start:");

        jLabel11.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel11.setText("On Duty:");

        jButtonSolve.setText("Solve");
        jButtonSolve.setActionCommand("jButton1");
        jButtonSolve.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSolveActionPerformed(evt);
            }
        });

        jButtonExit.setText("Exit");
        jButtonExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonExitActionPerformed(evt);
            }
        });

        jTotal.setFont(new java.awt.Font("Courier New", 0, 12)); // NOI18N
        jTotal.setText("0");
        jTotal.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel12.setText("Total...");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jButtonSolve)
                        .addGap(18, 18, 18)
                        .addComponent(jButtonExit))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(38, 38, 38)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3)
                            .addComponent(jLabel4)
                            .addComponent(jLabel5)
                            .addComponent(jLabel6)
                            .addComponent(jLabel7)
                            .addComponent(jLabel8))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 43, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jNeeds6, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(37, 37, 37)
                                .addComponent(jStart6, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(38, 38, 38)
                                .addComponent(jOnDuty6, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jNeeds5, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(37, 37, 37)
                                .addComponent(jStart5, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(38, 38, 38)
                                .addComponent(jOnDuty5, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jNeeds4, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(37, 37, 37)
                                .addComponent(jStart4, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(38, 38, 38)
                                .addComponent(jOnDuty4, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jNeeds3, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(37, 37, 37)
                                .addComponent(jStart3, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(38, 38, 38)
                                .addComponent(jOnDuty3, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jNeeds2, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(37, 37, 37)
                                .addComponent(jStart2, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(38, 38, 38)
                                .addComponent(jOnDuty2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jNeeds1, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel9))
                                .addGap(37, 37, 37)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jStart1, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addComponent(jLabel10))
                                .addGap(38, 38, 38)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel11)
                                    .addComponent(jOnDuty1, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jNeeds7, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(21, 21, 21)
                                        .addComponent(jLabel12)))
                                .addGap(37, 37, 37)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jTotal, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(jStart7, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(38, 38, 38)
                                        .addComponent(jOnDuty7, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)))))))
                .addGap(24, 24, 24))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(27, 27, 27)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jLabel8)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel9)
                        .addComponent(jLabel10)
                        .addComponent(jLabel11)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart1)
                        .addComponent(jOnDuty1))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel1)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart2)
                        .addComponent(jOnDuty2))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart3)
                        .addComponent(jOnDuty3))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel3)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart4)
                        .addComponent(jOnDuty4))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel4)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart5)
                        .addComponent(jOnDuty5))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel5)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart6)
                        .addComponent(jOnDuty6))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel6)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(jStart7)
                        .addComponent(jOnDuty7))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jNeeds7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel7)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTotal)
                    .addComponent(jLabel12))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 22, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonSolve)
                    .addComponent(jButtonExit))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private static int MySolverCallback( Object pnLng, int iLoc, Object jobj)
    {
       staff s = (staff) jobj;
       int nIterations[] = new int [1];
       s.lng.LSgetCallbackInfoIntLng( pnLng, Lingd18.LS_IINFO_ITERATIONS_LNG, nIterations);
       return( 0);
    }

    private static int MyErrorCallback( Object pnLng, int nErrorCode, String jsErrMessage, Object jobj)
    {
       JOptionPane.showMessageDialog(null,
        "Lingo error code: " + nErrorCode);
       JOptionPane.showMessageDialog(null,
        "Lingo error message:\n\n " + jsErrMessage);
       return( 0);
    }

    @SuppressWarnings("static-access")
    private void jButtonSolveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSolveActionPerformed

       Double d=0.;
       String s;

       double dNeeds[] = new double[7];
       double dStart[] = new double [7];
       double dOnDuty[] = new double [7];
       double dObj[] = new double [1];
       double dStatus[] = new double [1];

       StringBuffer sbDays = new StringBuffer( "MON \n TUE \n WED \n THU \n FRI \n SAT \n SUN");
       StringBuffer sbDays2 = new StringBuffer( "                                                ");

       try
       {
          s = jNeeds1.getText();   dNeeds[0] = d.valueOf( s);
          s = jNeeds2.getText();   dNeeds[1] = d.valueOf( s);
          s = jNeeds3.getText();   dNeeds[2] = d.valueOf( s);
          s = jNeeds4.getText();   dNeeds[3] = d.valueOf( s);
          s = jNeeds5.getText();   dNeeds[4] = d.valueOf( s);
          s = jNeeds6.getText();   dNeeds[5] = d.valueOf( s);
          s = jNeeds7.getText();   dNeeds[6] = d.valueOf( s);
       }
       catch ( Exception e)
       {
          JOptionPane.showMessageDialog(null, "Invalid staffing needs data.");
          return;
       }

       // open a log file
       int nErr = lng.LSopenLogFileLng( pLngEnv, "lingo.log");
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSopenLogFileLng() error: " + nErr);
          return;
       }

       // pass Lingo the name of the solver callback function...
       nErr = lng.LSsetCallbackSolverLng( pLngEnv, "MySolverCallback", this);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetCallbackSolverLng() error");
          return;
       }

       // ...and the error callback function
       nErr = lng.LSsetCallbackErrorLng( pLngEnv, "MyErrorCallback", this);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetCallbackErrorLng() error");
          return;
       }

       // pass lingo a pointer to the DAYS set
       int[] nPointersNow = new int[1];
       nErr = lng.LSsetPointerStringLng( pLngEnv, sbDays, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerStringLng() error");
          return;
       }

       // pass lingo a pointer to the staffing needs
       nErr = lng.LSsetPointerLng( pLngEnv, dNeeds, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
           JOptionPane.showMessageDialog(null, "LSsetPointerLng() error");
           return;
       }

       // pass pointers to output areas
       nErr = lng.LSsetPointerLng( pLngEnv, dStart, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerLng() error");
          return;
       }

       nErr = lng.LSsetPointerLng( pLngEnv, dOnDuty, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerLng() error");
          return;
       }

       nErr = lng.LSsetPointerLng( pLngEnv, dObj, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerLng() error");
          return;
       }

       nErr = lng.LSsetPointerLng( pLngEnv, dStatus, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerLng() error");
          return;
       }

       // for illustrative purposes only, we'll have Lingo return the set to sbDays2
       nErr = lng.LSsetPointerStringLng( pLngEnv, sbDays2, nPointersNow);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          JOptionPane.showMessageDialog(null, "LSsetPointerStringLng() error");
          return;
       }

       // construct the script
       // echo input to log file
       String sScript = "SET ECHOIN 1" + "\n";

       // load the model from disk
       sScript = sScript + "TAKE JStaffptr.lng" + "\n";

       // view the formulation
       sScript = sScript + "LOOK ALL" + "\n";

       // solve
       sScript = sScript + "GO" + "\n";

       // exit script processor
       sScript = sScript + "QUIT" + "\n";

       // run the script
       dStatus[0] = -1;
       nLastIterationCount = -1;
       nErr = lng.LSexecuteScriptLng( pLngEnv, sScript);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          System.out.println( "***LSexecuteScriptLng error***: " + nErr);
          return;
       }

       // clear the pointers to force update of local arrays
       // ***NOTE*** solution won't get passed to local arrays until
       // LSclearPointersLng is called!!!
       nErr = lng.LSclearPointersLng( pLngEnv);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          System.out.println( "***LSclearPointerLng() error***: " + nErr);
          return;
       }

       // check the solution status
       if ( dStatus[0] != lng.LS_STATUS_GLOBAL_LNG)
        System.out.println( "***Unable to Solve*** dStatus:" + dStatus[0]);

       // close Lingo's log file
       nErr = lng.LScloseLogFileLng( pLngEnv);
       if ( nErr != lng.LSERR_NO_ERROR_LNG )
       {
          System.out.println( "***LScloseLogFileLng() error***: " + nErr);
          return;
       }

       // dsiplay the solution
       Integer nTotal = 0;
       Integer n;

       d = dStart[0]; n = d.intValue();  jStart1.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[0]; n = d.intValue();  jOnDuty1.setText( n.toString());

       d = dStart[1]; n = d.intValue();  jStart2.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[1]; n = d.intValue();  jOnDuty2.setText( n.toString());

       d = dStart[2]; n = d.intValue();  jStart3.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[2]; n = d.intValue();  jOnDuty3.setText( n.toString());

       d = dStart[3]; n = d.intValue();  jStart4.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[3]; n = d.intValue();  jOnDuty4.setText( n.toString());

       d = dStart[4]; n = d.intValue();  jStart5.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[4]; n = d.intValue();  jOnDuty5.setText( n.toString());

       d = dStart[5]; n = d.intValue();  jStart6.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[5]; n = d.intValue();  jOnDuty6.setText( n.toString());

       d = dStart[6]; n = d.intValue();  jStart7.setText( n.toString());
       nTotal = nTotal + n;
       d = dOnDuty[6]; n = d.intValue();  jOnDuty7.setText( n.toString());
       
       jTotal.setText( nTotal.toString());

    }//GEN-LAST:event_jButtonSolveActionPerformed

    @SuppressWarnings("static-access")
    private void jButtonExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExitActionPerformed
       // delete the Lingo environment
       lng.LSdeleteEnvLng( pLngEnv);
       System.exit( 0);
    }//GEN-LAST:event_jButtonExitActionPerformed

    @SuppressWarnings("static-access")
    private void windowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_windowClosing
       // delete the Lingo environment
       lng.LSdeleteEnvLng( pLngEnv);
    }//GEN-LAST:event_windowClosing

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                staff dialog = new staff(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonExit;
    private javax.swing.JButton jButtonSolve;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JTextField jNeeds1;
    private javax.swing.JTextField jNeeds2;
    private javax.swing.JTextField jNeeds3;
    private javax.swing.JTextField jNeeds4;
    private javax.swing.JTextField jNeeds5;
    private javax.swing.JTextField jNeeds6;
    private javax.swing.JTextField jNeeds7;
    private javax.swing.JLabel jOnDuty1;
    private javax.swing.JLabel jOnDuty2;
    private javax.swing.JLabel jOnDuty3;
    private javax.swing.JLabel jOnDuty4;
    private javax.swing.JLabel jOnDuty5;
    private javax.swing.JLabel jOnDuty6;
    private javax.swing.JLabel jOnDuty7;
    private javax.swing.JLabel jStart1;
    private javax.swing.JLabel jStart2;
    private javax.swing.JLabel jStart3;
    private javax.swing.JLabel jStart4;
    private javax.swing.JLabel jStart5;
    private javax.swing.JLabel jStart6;
    private javax.swing.JLabel jStart7;
    private javax.swing.JLabel jTotal;
    // End of variables declaration//GEN-END:variables

}
