/* EDMO - Elektrik Dağıtım Merkezleri Otomasyonu
   Author - A. Zerrin Kibaroğlu
   1.00 19/06/2000 */
import java.lang.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.Border;
import java.util.*;
import java.text.*;
public class edmo extends JFrame {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
      
   public edmo() {
      super( "ELEKTRİK DAĞITIM MERKEZLERİ" );
	// GUI ortamını hazırla
     	Container p = getContentPane();
      screenvar = new DataPanel();
      msgout = new JTextArea( 8, 40 );
	p.setLayout( new FlowLayout() );
      p.add( new JScrollPane( screenvar ) );
      p.add( new JScrollPane(msgout) );
		
	// Veri tabanı bağlantısını hazırla
	try {
         String url = "jdbc:odbc:edmodsn";
         Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
         dbconn = DriverManager.getConnection( url );
         msgout.append( "Veri tabanına bağlantı kuruldu.\n" );
      } // try
      catch ( ClassNotFoundException cnfex ) {
         cnfex.printStackTrace();
         msgout.append( "Veri tabanına bağlantı başarısız oldu.\n" +
                        cnfex.toString() );
      }
      catch ( SQLException sqlex ) {
         sqlex.printStackTrace();
         msgout.append( "Veri tabanına bağlantı başarısız oldu.\n" +
                        sqlex.toString() );
      }
      catch ( Exception excp ) {
         excp.printStackTrace();
         msgout.append( excp.toString() );
      }
	// İşlem düğmelerini ekrana ekle
      ButtonPanel controls = new ButtonPanel ( dbconn, screenvar, msgout);
      p.add ( controls );
	// Ek işlem tuşlarını radyo düğmeleri olarak ekrana ekle
	RadioButtons rb = new RadioButtons ( dbconn , screenvar, msgout );
	p.add ( rb );
	setSize( 500, 550 );
	show();
   } // public edmo()
   public static void main ( String args[] ) {
	edmo merkez = new edmo();
	merkez.addWindowListener(
         new WindowAdapter() {
		public void windowClosing( WindowEvent e ) {
		   System.exit( 0 );
		}
	   }
	);
   } // public static void main
} // public edmo
//
// Tarihce Giris Ekrani
//
class TarihceGiris extends JFrame implements ActionListener {
   
   private Connection dbconn;
   private DataPanel screenvar;
   private JTextArea msgout;
   private boolean firsttime = true;
   
   public TarihceGiris( Connection dbc, DataPanel scv, JTextArea msg ) {
	super( "TARİHÇE GİRİŞ" );
	dbconn = dbc;
	screenvar = scv;
	msgout = msg;
   }
   public void actionPerformed( ActionEvent e) {
	if (firsttime) {
 	   Container cnt = getContentPane();
	   cnt.setLayout( new FlowLayout() );
	   TarihceBox tb = new TarihceBox();
	   cnt.add( tb );
	   JButton confirmTarihce = new JButton("Tamam");
	   confirmTarihce.addActionListener( new Tarihce( dbconn, screenvar, msgout, tb ) );
	   cnt.add( confirmTarihce  );
	   setSize( 400, 200 );
	   firsttime = false;
	}
	show();
   } // public void actionPerformed
} // class TarihceGiris
//
// Tarihce Giris Alanlari
//
class Tarihce implements ActionListener {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
   private TarihceBox obox;
  
   public Tarihce( Connection dbc, DataPanel scv, JTextArea msg, TarihceBox tb  ) {
      dbconn = dbc;
      screenvar = scv;
      msgout = msg;
	obox = tb;
   }
   public void actionPerformed( ActionEvent e ) {	
	boolean inputerror = false;
	String sacik = "";
	String dtstr = "";
	java.util.Date ddate = new java.util.Date();
      try {
         Statement statement = dbconn.createStatement();
	   try {
	      SimpleDateFormat fmt = new SimpleDateFormat ("dd/MM/yyyy");
	      ddate = fmt.parse(obox.indate.getText());
	      fmt = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
		dtstr = fmt.format(ddate);
	   }
	   catch( Exception dfe ) {
		inputerror = true;
		obox.indate.setText("Hata-yanlış tarih!");
            msgout.append( dfe.toString() );
	   }
	   sacik = obox.inacik.getText();
	   //  strip out non-numerics from Merkez No
	   String numstrg = new String();
	   for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	      if ( screenvar.merkezno.getText().charAt(i)>='0' && 
	         screenvar.merkezno.getText().charAt(i)<='9') { 
		      numstrg += screenvar.merkezno.getText().substring(i,i+1);
	   	   }
	   }
	   screenvar.merkezno.setText(numstrg);
         if( !screenvar.merkezno.getText().equals("") ) {
		if ( !inputerror && (sacik != "")  ) {
               String query = "INSERT INTO Tarihce " + 
		      "(TARIHCE_MNO,TARIH,ACIKLAMA)" +
		      "VALUES ("+ screenvar.merkezno.getText() + ",'" +
		      dtstr + "','" + sacik + "')";
		   msgout.append( "\nSorgu cümlesi: " + dbconn.nativeSQL( query ) + "\n" );
		   int result = statement.executeUpdate( query );
		   if ( result == 1 )
 			msgout.append( "\nTarihçe bilgisi başarıyla kaydedildi.\n" );
		   else {
			msgout.append( "\nTarihçe bilgisi kaydedilemedi!\n" );
			obox.inacik.setText( "" );
		   }
		} // if !inputerror
		else 
 		   msgout.append( "\nTarihçe bilgisini girerek, Tamam tuşuna basın.\n" );
	   } // if !screenvar
	   else
		msgout.append( "\n *** Tarihçe bilgisini girmeden önce bir Merkez bilgisi çağırın ***\n");
      statement.close();
	} // try
      catch ( SQLException sqlex ) {
       	msgout.append( sqlex.toString() );
      }
	// clear out Tarihce input boxes after database write
	if (!inputerror) {
		java.util.Date date = new java.util.Date();
	      SimpleDateFormat fmt = new SimpleDateFormat ("dd/MM/yyyy");
	      obox.indate.setText(fmt.format(date));
		obox.inacik.setText("");
	}
   } // public void actionPerformed
} // class Tarihce
//
// Tarihce Listeleme Ekrani
//
class TarihceGoster extends JFrame implements ActionListener {
   private Connection dbconn;
   private DataPanel screenvar;
   private JTextArea msgout;
   private boolean firsttime = true;
   private Container c;
   private JScrollPane jspane;
   private QueryTableModel qtbl;
   private JTable jtbl;
   public TarihceGoster( Connection dbc, DataPanel scv, JTextArea msg ) {
	super( "MERKEZ TARİHÇESİ" );
	dbconn = dbc;
	screenvar = scv;
	msgout = msg;
   }
   public void actionPerformed( ActionEvent e) {
	//  strip out non-numerics from Merkez No
	String numstrg = new String();
	for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	   if ( screenvar.merkezno.getText().charAt(i)>='0' && 
		screenvar.merkezno.getText().charAt(i)<='9') { 
		numstrg += screenvar.merkezno.getText().substring(i,i+1);
	   }
	}
	screenvar.merkezno.setText(numstrg);
	// Merkez No'sunu kontrol et
      if ( !screenvar.merkezno.getText().equals("") ) {
	   // İlk kez çağırılıyorsa GUI ortamını hazırla
	   if ( firsttime ) {
		c = getContentPane();
		c.setLayout( new FlowLayout() );
		qtbl = new QueryTableModel( dbconn, screenvar, msgout );
		qtbl.query();
		jtbl = new JTable( qtbl );
		TableColumn tcol = jtbl.getColumnModel().getColumn(0);
		tcol.setPreferredWidth(50);
		jspane = new JScrollPane( jtbl );
		c.add( jspane );
		setSize( 500, 500 );
		firsttime = false;
	   }
	   else {
		qtbl.query();
		qtbl.fire();
		TableColumn tcol = jtbl.getColumnModel().getColumn(0);
		tcol.setPreferredWidth(50);
	   }
	   show();
	}
      else 
         msgout.append( "\n ***Tarihçe bilgisini istemeden önce bir Merkez bilgisi çağırın ***\n");
   } // public void actionperformed
} // class TarihceGoster
//
// Tarihce bilgileri listeleme tablosu
//
class QueryTableModel extends AbstractTableModel {
   Connection dbconn;
   DataPanel screenvar;
   JTextArea msgout;
   Vector totalrows;
   String[] colheads = {"Tarih", "Açıklama"};
   public QueryTableModel(Connection dbc, DataPanel scv, JTextArea msg ){
	dbconn = dbc;
      screenvar = scv;
      msgout = msg;
      totalrows = new Vector();
  
   }
   public String getColumnName(int i) { return colheads[i]; }
   public int getColumnCount() { return 2; }
   public int getRowCount() { return totalrows.size(); }
   public Object getValueAt(int row, int col) {
      return ((String[])totalrows.elementAt(row))[col];
   }
   public boolean isCellEditable(int row, int col) {
      return false;
   }
   public void fire() {
      fireTableChanged(null);
   }
   
   public void query() {
      try {
         Statement statement = dbconn.createStatement();
         String query = "SELECT TARIH,ACIKLAMA FROM Tarihce " +
	      "WHERE TARIHCE_MNO =" + 
	      screenvar.merkezno.getText() +
		" ORDER BY TARIH";
         msgout.append( "\nSorgu cümlesi: " + dbconn.nativeSQL( query ) + "\n" );
         ResultSet rs = statement.executeQuery( query );
	   totalrows = new Vector();
         while ( rs.next() ) {
            String[] record = new String[2];
		try {
		   SimpleDateFormat fmt = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
		   java.util.Date ddate = fmt.parse(rs.getString(1));
		   fmt = new SimpleDateFormat ("dd/MM/yyyy");
		   record[0] = fmt.format(ddate);
		}
		catch( Exception dfe ) {
		   msgout.append( dfe.toString() );
		}
		record[1] = rs.getString(2);
            totalrows.addElement( record );
          } // while
          msgout.append( "\nSorgu başarıyla tamamlandı.\n" );
          statement.close();
      }
      catch ( SQLException sqlex ) {
	   msgout.append( sqlex.toString() );
      }
   } // public void query
} // class queryTableModel
//
// Merkez Cizimi (calisir durumda degil)
//
class MerkezCizim extends JFrame implements ActionListener {
   static final int NOFUNC = 5; // No of functions
   static final int STACKSIZE = 50; // No of elements that can be placed
   static final int RECTWIDTH = 40; // Default element width
   static final int RECTHEIGHT = 40; // Default element height
   static final int BASEX = 0, BASEY = 0, WIDTH = 600, HEIGHT = 400;
   private Connection dbconn;
   private DataPanel screenvar;
   private JScrollPane orderpane;
   private JTextArea msgout;
   private boolean firsttime = true;
   private Container c;
   private Graphics g;
   public MerkezCizim( Connection dbc, DataPanel scv, JTextArea msg ) {
	dbconn = dbc;
	screenvar = scv;
	msgout = msg;
   }
   public void actionPerformed( ActionEvent e) {
	//  strip out non-numerics from Merkez No
	String numstrg = new String();
	for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	   if ( screenvar.merkezno.getText().charAt(i)>='0' && 
		screenvar.merkezno.getText().charAt(i)<='9') { 
		numstrg += screenvar.merkezno.getText().substring(i,i+1);
	   }
	}
	screenvar.merkezno.setText(numstrg);
	// Merkez No'sunu kontrol et
      if ( !screenvar.merkezno.getText().equals("") ) {
	   // İlk kez çağırılıyorsa GUI ortamını hazırla
	   if ( firsttime ) {
		c = getContentPane();
		c.setLayout( new FlowLayout() );
		// RectangleArea rectangleArea = new RectangleArea(this);
		// c.add(rectangleArea);
		setSize( 600, 400 );
		firsttime = false;
		g.drawLine(BASEX+RECTWIDTH,BASEY,BASEX+RECTWIDTH,BASEY+HEIGHT);
		for (int i=1; i<=NOFUNC; i++)
		   g.drawLine(BASEX,BASEY+RECTHEIGHT*i,BASEX+RECTWIDTH,BASEY+RECTHEIGHT*i);
		g.drawString("A",17,28);
		g.drawString("B",17,68);
		g.drawString("C",17,108);
		g.drawString("D",17,148);
		g.drawString("E",17,188);
	   }
	   else {
	   }
	   show();
	}
      else 
         msgout.append( "\n ***Çizim bilgisini istemeden önce bir Merkez bilgisi çağırın ***\n");
   } // public void actionperformed
   public void cizimQuery() {
      try {
         Statement statement = dbconn.createStatement();
         String query = "SELECT BAS_X, BAS_Y, SEKIL_TIPI, BIT_X, BIT_Y FROM Cizim " +
	      "WHERE CIZIM_MNO =" + screenvar.merkezno.getText();
         msgout.append( "\nSorgu cümlesi: " + dbconn.nativeSQL( query ) + "\n" );
         ResultSet rs = statement.executeQuery( query );
         while ( rs.next() ) {
	   } // while
         msgout.append( "\nSorgu başarıyla tamamlandı.\n" );
         statement.close();
      }
      catch ( SQLException sqlex ) {
	   msgout.append( sqlex.toString() );
      }
   } // public void cizimQuery
} // class MerkezCizim
//
// Tarihce alanlarinin hazirlanmasi
//
class TarihceBox extends JPanel {
   JTextField indate, inacik;
  
   public TarihceBox() {
	JPanel j = new JPanel();
	j.setLayout(new GridLayout(2,2) );
	JLabel pdate = new JLabel( "İşlemin yapıldığı tarih :" );
	j.add( pdate );
      indate = new JTextField( 10 );
	// default olarak bugünün tarihini tarih alanına koy
	java.util.Date date = new java.util.Date();
	SimpleDateFormat fmt = new SimpleDateFormat ("dd/MM/yyyy");
	indate.setText(fmt.format(date));
	j.add( indate );
	pdate.setLabelFor( indate );
	JLabel pacik  = new JLabel( "İşlem açıklaması :");
	j.add( pacik);
	inacik = new JTextField( 10 );
	j.add( inacik );
	pacik.setLabelFor( inacik );
	setLayout(new FlowLayout() );
	add(j);
   } // public TarihceBox()
} // class TarihceBox
//
// Yeni Merkez kaydi ekleme
//
class AddRecord implements ActionListener {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
   private int gv, cv;
   private Integer tempInt;
   public AddRecord( Connection dbc, DataPanel scv, JTextArea msg ) {
      dbconn = dbc;
      screenvar = scv;
      msgout = msg;
   }
   public void actionPerformed( ActionEvent e ) {
      try {
         Statement statement = dbconn.createStatement();
	   //  strip out non-numerics from Merkez No
	   String numstrg = new String();
	   for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	      if ( screenvar.merkezno.getText().charAt(i)>='0' && 
	         screenvar.merkezno.getText().charAt(i)<='9') { 
		      numstrg += screenvar.merkezno.getText().substring(i,i+1);
	   	   }
	   }
	   screenvar.merkezno.setText(numstrg);
	   try {
		gv = tempInt.parseInt ( screenvar.girisvolt.getText(), 10 );
	   }
	   catch ( NumberFormatException nfex ) {
		msgout.append( nfex.toString() );
		gv = 0;
	   }
	   try {
		cv = tempInt.parseInt ( screenvar.cikisvolt.getText(), 10 );
	   }
	   catch ( NumberFormatException nfex ) {
		msgout.append( nfex.toString() );
		cv = 0;
	   }
	   // Merkez no boş bırakılmamalı
         if (!screenvar.merkezno.getText().equals( "" ) &&
		// Merkez tipi A, B, C1 veya C2 olmalı
		 (screenvar.tipi.getText().equals( "A" ) ||
		  screenvar.tipi.getText().equals( "B" ) ||
		  screenvar.tipi.getText().equals( "C1" ) ||
		  screenvar.tipi.getText().equals( "C2" ) ) &&
		// Merkez ana tipi Normal veya İndirici olmalı
		 (screenvar.anatipi.getText().equals( "Normal" ) ||
		  screenvar.anatipi.getText().equals( "İndirici" ) ) &&
		// Merkez yapisi Bina, Köşk veya Direk olmalı
		 (screenvar.yapisi.getText().equals( "Bina" ) ||
		  screenvar.yapisi.getText().equals( "Köşk" ) ||
		  screenvar.yapisi.getText().equals( "Direk" ) ) &&
		// Giriş voltajı sıfırdan büyük olmalı
		 (gv > 0) &&
		// Çıkış voltajı sıfırdan büyük olmalı
		 (cv > 0) &&
		// Giriş voltajı, Çıkış Voltajından büyük olmalı
		 (gv > cv) &&
		// Merkez ana tipi "Normal" ise besleyen merkez no girilmeli
		// Merkez ana tipi "İndirici" ise besleyen merkez no girilmemeli
		 (screenvar.anatipi.getText().equals( "Normal") ^
		 (screenvar.besleyenmerkezno.getText().equals("") ||
		  screenvar.besleyenmerkezno.getText().equals("0") ) ) ) {
		// Test sırasında belirlenen indirici merkez için kaydedilecek besleyen merkez numarası
		// veri tabanına null gönderilmeyeceği için sıfır yapılıyor
		   numstrg = screenvar.besleyenmerkezno.getText();
		   if (numstrg.equals("")) numstrg = "0";
               String query = "INSERT INTO Merkez (" +
                  "MERKEZ_NO, MERKEZ_ADI, ADRES, TIPI, " +
                  "ANA_TIPI, YAPISI, GIRIS_VOLT, " +
                  "CIKIS_VOLT, TRAFO_GUCU, ISLETME_GUCU, BESLEYEN_MERKEZ" +
                  ") VALUES (" +
                  screenvar.merkezno.getText() + ", '" + 
                  screenvar.merkezadi.getText()  + "', '" + 
                  screenvar.adres.getText() + "', '" + 
                  screenvar.tipi.getText() + "', '" + 
                  screenvar.anatipi.getText() + "', '" + 
                  screenvar.yapisi.getText()   + "', " + 
                  screenvar.girisvolt.getText() + ", " + 
                  screenvar.cikisvolt.getText() + ", " + 
                  screenvar.trafogucu.getText() + ", " + 
                  screenvar.isletmegucu.getText() + ", " + 
                  numstrg + ")";
                  msgout.append( "\nSorgu cümlesi: " + 
                  dbconn.nativeSQL( query ) + "\n" );
               int result = statement.executeUpdate( query );
               if ( result == 1 ){
			msgout.append( "\nMerkez bilgisi başarıyla kaydedildi.\n" );
		}     
            else {
		   screenvar.merkezno.setText( "" );
               screenvar.merkezadi.setText( "" );
               screenvar.adres.setText( "" );
               screenvar.tipi.setText( "" );
               screenvar.anatipi.setText( "" );
               screenvar.yapisi.setText( "" );
               screenvar.girisvolt.setText( "" );
               screenvar.cikisvolt.setText( "" );
               screenvar.trafogucu.setText( "" );
               screenvar.isletmegucu.setText( "" );
               screenvar.besleyenmerkezno.setText( "" );
            }
         }
         else 
		msgout.append( "\nMerkez bilgisi veri tabanına eklenemedi!\n" );
		if (screenvar.merkezno.getText().equals( "" ))
		   msgout.append( "\nMerkez No boş bırakılamaz!\n" );
		else {
		   if (gv <= cv)
			msgout.append( "\nGiriş voltajı Çıkış voltajından büyük olmalı!\n" );
		   if (gv <= 0)
			msgout.append( "\nGiriş voltajı sıfırdan büyük olmalı!\n" );
		   if (cv <= 0)
			msgout.append( "\nÇıkış voltajı sıfırdan büyük olmalı!\n" );
		   if (!(screenvar.tipi.getText().equals( "A" ) ||
				screenvar.tipi.getText().equals( "B" ) ||
				screenvar.tipi.getText().equals( "C1" ) ||
				screenvar.tipi.getText().equals( "C2" ) ) )
			   msgout.append( "\nMerkez Tipi 'A', 'B', 'C1' veya 'C2' olmalı!\n" );
		   if (!(screenvar.anatipi.getText().equals( "Normal" ) ||
			screenvar.anatipi.getText().equals( "İndirici" ) ) )
			msgout.append( "\nMerkez Ana Tipi 'Normal' veya 'İndirici' olmalı!\n" );
		   else if (!(screenvar.anatipi.getText().equals( "Normal") ^
				(screenvar.besleyenmerkezno.getText().equals("") ||
				screenvar.besleyenmerkezno.getText().equals("") ) ) )
				  {msgout.append( "\nNormal Merkez için Besleyen Merkez No'sunu girmelisiniz!" );
				   msgout.append( "\nİndirici Merkez için Besleyen Merkez No'sunu boş bırakmalısınız!\n" ); }
		   if (!(screenvar.yapisi.getText().equals( "Bina" ) ||
				screenvar.yapisi.getText().equals( "Köşk" ) ||
				screenvar.yapisi.getText().equals( "Direk" ) ) )
			msgout.append( "\nMerkez Yapisi 'Bina', 'Köşk' veya 'Direk' olmalı!\n" );
		   }
         statement.close();
      }
      catch ( SQLException sqlex ) {
         msgout.append( sqlex.toString() );
	   screenvar.merkezno.setText("Dosyada mevcut - yeniden deneyin!");
      }
   }
} // class AddRecord
//
// Merkez Kaydi Bulma
//
class FindRecord implements ActionListener {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
 
   public FindRecord( Connection dbc, DataPanel scv,
                      JTextArea msg ) {
      dbconn = dbc;
      screenvar = scv;
      msgout = msg;
   }
   public void actionPerformed( ActionEvent e ) {
   try {
      //  strip out non-numerics from Merkez No
	String numstrg = new String();
	for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	   if ( screenvar.merkezno.getText().charAt(i)>='0' && 
	      screenvar.merkezno.getText().charAt(i)<='9') { 
		   numstrg += screenvar.merkezno.getText().substring(i,i+1);
	      }
	}
	screenvar.merkezno.setText(numstrg);
	if ( !numstrg.equals( "" ) ) {
         Statement statement =dbconn.createStatement();
         String query = "SELECT * FROM Merkez " +
            "WHERE MERKEZ_NO = " + numstrg;
            msgout.append( "\nSorgu cümlesi: "   + 
               dbconn.nativeSQL( query ) + "\n" );
            ResultSet rs = statement.executeQuery( query );
            display( rs );
            statement.close();
         }
      else 
         screenvar.merkezno.setText("Merkez No'sunu yazın" );
      }
      catch ( SQLException sqlex ) {
 	   msgout.append( sqlex.toString() + sqlex.getMessage() );
	}
   }
   // Display results of query
   public void display( ResultSet rs ) {
      try {         
         rs.next();
         int recordNumber = rs.getInt( 1 );
         if ( recordNumber != 0 ) {
            screenvar.merkezno.setText( String.valueOf(recordNumber) );
            screenvar.merkezadi.setText( rs.getString( 2 ) );
            screenvar.adres.setText( rs.getString( 3 ) );
		screenvar.tipi.setText( rs.getString( 4 ) );
            screenvar.anatipi.setText( rs.getString( 5 ) );
            screenvar.yapisi.setText( rs.getString( 6 ) );
		Integer temp = new Integer(0);
		screenvar.girisvolt.setText( temp.toString(rs.getInt( 7 )) );
            screenvar.cikisvolt.setText( temp.toString(rs.getInt( 8 )) );
            screenvar.trafogucu.setText( temp.toString(rs.getInt( 9 )) );
            screenvar.isletmegucu.setText( temp.toString(rs.getInt( 10 )) );
            screenvar.besleyenmerkezno.setText( temp.toString(rs.getInt( 11 )) );
         }
         else
            msgout.append( "\nKayıt bulunamadı!\n" );         
    }
    catch ( SQLException sqlex ) {
       msgout.append( "\n*** İstenen Merkez no'ya sahip kayıt dosyada bulunamadı ***\n" );
    }
  }
} // class FindRecord
//
// Merkez Kaydi Guncelle
//
class UpdateRecord implements ActionListener {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
   private int gv, cv;
   private Integer tempInt;
   public UpdateRecord( Connection dbc, DataPanel scv,
      JTextArea msg ) {
         dbconn = dbc;
         screenvar = scv;
         msgout = msg;
   }
   public void actionPerformed( ActionEvent e ) {
      try {
         Statement statement = dbconn.createStatement();
         if ( ! screenvar.merkezno.getText().equals( "" ) ) {
	   	//  strip out non-numerics from Merkez No
		String numstrg = new String();
	   	for (int i = 0; i < screenvar.merkezno.getText().length(); i++) {  
		   if ( screenvar.merkezno.getText().charAt(i)>='0' && 
		      screenvar.merkezno.getText().charAt(i)<='9') { 
			   numstrg += screenvar.merkezno.getText().substring(i,i+1);
		   }
	      }
		screenvar.merkezno.setText(numstrg);
	   try {
		gv = tempInt.parseInt ( screenvar.girisvolt.getText(), 10 );
	   }
	   catch ( NumberFormatException nfex ) {
		msgout.append( nfex.toString() );
		gv = 0;
	   }
	   try {
		cv = tempInt.parseInt ( screenvar.cikisvolt.getText(), 10 );
	   }
	   catch ( NumberFormatException nfex ) {
		msgout.append( nfex.toString() );
		cv = 0;
	   }
		// Merkez no boş bırakılmamalı
         if (!screenvar.merkezno.getText().equals( "" ) &&
		// Merkez tipi A, B, C1 veya C2 olmalı
		 (screenvar.tipi.getText().equals( "A" ) ||
		  screenvar.tipi.getText().equals( "B" ) ||
		  screenvar.tipi.getText().equals( "C1" ) ||
		  screenvar.tipi.getText().equals( "C2" ) ) &&
		// Merkez ana tipi Normal veya İndirici olmalı
		 (screenvar.anatipi.getText().equals( "Normal" ) ||
		  screenvar.anatipi.getText().equals( "İndirici" ) ) &&
		// Merkez yapisi Bina, Köşk veya Direk olmalı
		 (screenvar.yapisi.getText().equals( "Bina" ) ||
		  screenvar.yapisi.getText().equals( "Köşk" ) ||
		  screenvar.yapisi.getText().equals( "Direk" ) ) &&
		// Giriş voltajı sıfırdan büyük olmalı
		 (gv > 0) &&
		// Çıkış voltajı sıfırdan büyük olmalı
		 (cv > 0) &&
		// Giriş voltajı, Çıkış Voltajından büyük olmalı
		 (gv > cv) &&
		// Merkez ana tipi "Normal" ise besleyen merkez no girilmeli
		// Merkez ana tipi "İndirici" ise besleyen merkez no girilmemeli veya sıfır olmalı
		 (screenvar.anatipi.getText().equals( "Normal") ^
		 (screenvar.besleyenmerkezno.getText().equals("") ||
		  screenvar.besleyenmerkezno.getText().equals("0") ) ) ) {
		      String query = "UPDATE Merkez SET " +
               "MERKEZ_ADI='" + screenvar.merkezadi.getText() + 
               "', ADRES='" + screenvar.adres.getText() + 
               "', TIPI='" + screenvar.tipi.getText() +
               "', ANA_TIPI='" + screenvar.anatipi.getText() + 
               "', YAPISI='" + screenvar.yapisi.getText() + 
               "', GIRIS_VOLT=" + screenvar.girisvolt.getText() +
               ", CIKIS_VOLT=" + screenvar.cikisvolt.getText() +
               ", TRAFO_GUCU=" + screenvar.trafogucu.getText() + 
               ", ISLETME_GUCU=" + screenvar.isletmegucu.getText() + 
               ", BESLEYEN_MERKEZ=" + screenvar.besleyenmerkezno.getText() +
               " WHERE MERKEZ_NO=" + screenvar.merkezno.getText();
               msgout.append( "\nSorgu cümlesi: " + 
                  dbconn.nativeSQL( query ) + "\n" );
            int result = statement.executeUpdate( query ); 
            
            if ( result == 1 )
               msgout.append( "\nMerkez bilgisi başarıyla güncellendi\n" );
            else {
               msgout.append( "\nGüncelleme işlemi başarısız oldu!\n" );
               screenvar.merkezno.setText( "" );
               screenvar.merkezadi.setText( "" );
               screenvar.adres.setText( "" );
               screenvar.tipi.setText( "" );
               screenvar.anatipi.setText( "" );
               screenvar.yapisi.setText( "" );
               screenvar.girisvolt.setText( "" );
               screenvar.cikisvolt.setText( "" );
               screenvar.trafogucu.setText( "" );
               screenvar.isletmegucu.setText( "" );
               screenvar.besleyenmerkezno.setText( "" );
            }
         }
         else 
               msgout.append( "\nMerkez bilgisi veri tabanında güncellenemedi!\n" );
		   if (screenvar.merkezno.getText().equals( "" ))
			msgout.append( "\nMerkez No boş bırakılamaz!\n" );
		   else {
			if (gv <= cv)
			   msgout.append( "\nGiriş voltajı Çıkış voltajından büyük olmalı!\n" );
			if (gv <= 0)
			   msgout.append( "\nGiriş voltajı sıfırdan büyük olmalı!\n" );
			if (cv <= 0)
			   msgout.append( "\nÇıkış voltajı sıfırdan büyük olmalı!\n" );
			if (!(screenvar.tipi.getText().equals( "A" ) ||
				screenvar.tipi.getText().equals( "B" ) ||
				screenvar.tipi.getText().equals( "C1" ) ||
				screenvar.tipi.getText().equals( "C2" ) ) )
			   msgout.append( "\nMerkez Tipi 'A', 'B', 'C1' veya 'C2' olmalı!\n" );
			if (!(screenvar.anatipi.getText().equals( "Normal" ) ||
				screenvar.anatipi.getText().equals( "İndirici" ) ) )
			   msgout.append( "\nMerkez Ana Tipi 'Normal' veya 'İndirici' olmalı!\n" );
			else if (!(screenvar.anatipi.getText().equals( "Normal") ^
				(screenvar.besleyenmerkezno.getText().equals("") ||
				screenvar.besleyenmerkezno.getText().equals("0") ) ) )
				  {msgout.append( "\nNormal Merkez için Besleyen Merkez No'sunu girmelisiniz!" );
				   msgout.append( "\nİndirici Merkez için Besleyen Merkez No'sunu boş bırakmalısınız!\n" ); }
			if (!(screenvar.yapisi.getText().equals( "Bina" ) ||
				screenvar.yapisi.getText().equals( "Köşk" ) ||
				screenvar.yapisi.getText().equals( "Direk" ) ) )
			msgout.append( "\nMerkez Yapisi 'Bina', 'Köşk' veya 'Direk' olmalı!\n" );
		   }
    	   statement.close();
         }
         else 
            msgout.append( "\nYalnızca mevcut bir kaydı güncelleyebilirsiniz. " +
                           "'Bul' düğmesini kullanarak mevcut bir kayıda ulaşın, " +
                           "daha sonra bilgilerini değiştirerek 'Güncelle' düğmesini " +
                           "tıklayın.\n" );
      }
      catch ( SQLException sqlex ) {
                  msgout.append( sqlex.toString() );
      }
   }
} // class Updaterecord
//
// Merkez kaydi Sil
//
class DeleteRecord implements ActionListener {
   private DataPanel screenvar;
   private JTextArea msgout;
   private Connection dbconn;
 
   public DeleteRecord( Connection dbc, DataPanel scv,
                      JTextArea msg ) {
      dbconn = dbc;
      screenvar = scv;
      msgout = msg;
   }
   public void actionPerformed( ActionEvent e ) {
   try {
      //  strip out non-numerics from Merkez No
	String numstrg = new String();
	for (int i = 0; i < screenvar.merkezno.getText().length(); i++){  
	   if ( screenvar.merkezno.getText().charAt(i)>='0' && 
	      screenvar.merkezno.getText().charAt(i)<='9') { 
		   numstrg += screenvar.merkezno.getText().substring(i,i+1);
	      }
	}
	screenvar.merkezno.setText(numstrg);
	if ( !numstrg.equals( "" ) ) {
         Statement statement =dbconn.createStatement();
         String query = "DELETE FROM Merkez " +
            "WHERE MERKEZ_NO = " + numstrg;
            msgout.append( "\nSorgu cümlesi: "   + 
               dbconn.nativeSQL( query ) + "\n" );
            ResultSet rs = statement.executeQuery( query );
            statement.close();
         }
      else 
         screenvar.merkezno.setText("Merkez No'sunu yazın" );
      }
      catch ( SQLException sqlex ) {
	   msgout.append( "\nKayıt silinemedi\n");
 	   msgout.append( sqlex.toString() + sqlex.getMessage() );
	}
   }
} // class DeleteRecord
//
// Merkez Bilgi Giris Alanlari
//
class DataPanel extends JPanel {
      
   JTextField merkezno, merkezadi, adres, tipi, anatipi, yapisi,
	girisvolt, cikisvolt, trafogucu, isletmegucu, besleyenmerkezno;
   JLabel lmno, lmad, ladr, ltip, latip, lyap, lgv, lcv, ltg, lig, lbmno;
   public DataPanel() {
	// Label panel
      JPanel labelPanel = new JPanel();
      labelPanel.setLayout( 
         new GridLayout( 11, 1 ) );
	lmno = new JLabel( "Merkez No :", 0 );
	labelPanel.add( lmno);
 	lmad = new JLabel( "Merkez Adı :", 0 );
	labelPanel.add( lmad);
 	ladr = new JLabel( "Adres :", 0 );
	labelPanel.add( ladr);
	ltip = new JLabel( "Merkez Tipi :", 0 );
	labelPanel.add( ltip);
 	latip = new JLabel( "Merkez Ana Tipi :", 0 );
	labelPanel.add( latip);
 	lyap = new JLabel( "Merkez Yapısı :", 0 );
	labelPanel.add( lyap);
 	lgv = new JLabel( "Giriş Voltajı :", 0 );
	labelPanel.add( lgv);
 	lcv = new JLabel( "Çıkış Voltajı :", 0 );
	labelPanel.add( lcv);
 	ltg = new JLabel( "Trafo Gücü :", 0 );
	labelPanel.add( ltg);
 	lig = new JLabel( "İşletme Gücü :", 0 );
	labelPanel.add( lig);
 	lbmno = new JLabel( "Besleyen Merkez No :", 0 );
	labelPanel.add( lbmno);
      // TextField panel
      JPanel screenvarPanel = new JPanel();
      screenvarPanel.setLayout( 
         new GridLayout( 11, 1 ) );
      merkezno = new JTextField("Girin ve 'Bul'u tıklayın", 20) ;
	screenvarPanel.add( merkezno);
	merkezadi = new JTextField( 20 );
      screenvarPanel.add( merkezadi );
      adres = new JTextField( 20 );
      screenvarPanel.add( adres );
	// Combo boxlarla cikan problemler nedeniyle normal text alan kullanildi
//	String[] merkezTipiStrings = { "A", "B", "C1", "C2" };
//    JComboBox tipi = new JComboBox(merkezTipiStrings);
	tipi = new JTextField( 20 );
	screenvarPanel.add(tipi);
//    String[] merkezAnaTipiStrings = { "Normal Merkez", "İndirici Merkez" };
//    JComboBox anatipi = new JComboBox(merkezAnaTipiStrings);
	anatipi = new JTextField( 20 );
	screenvarPanel.add(anatipi);
//    String[] merkezYapisiStrings = { "Bina ", "Köşk ", "Direk" };
//    JComboBox yapisi = new JComboBox(merkezYapisiStrings);
	yapisi = new JTextField( 20 );
	screenvarPanel.add(yapisi);
	girisvolt = new JTextField( 20 );
      screenvarPanel.add( girisvolt );
      cikisvolt = new JTextField( 20 );
      screenvarPanel.add( cikisvolt );
      trafogucu = new JTextField( 20 );
      screenvarPanel.add( trafogucu );
      isletmegucu = new JTextField( 20 );
      screenvarPanel.add( isletmegucu );
      besleyenmerkezno = new JTextField( 20 );
      screenvarPanel.add( besleyenmerkezno );
	// Accessibility Section - relate labels and text fields
	// for use by assistive technologies
	lmno.setLabelFor( merkezno );
	lmad.setLabelFor( merkezadi );
	ladr.setLabelFor( adres );
	ltip.setLabelFor( tipi );
	latip.setLabelFor( anatipi );
	lyap.setLabelFor( yapisi );
	lgv.setLabelFor( girisvolt );
	lcv.setLabelFor( cikisvolt );
	ltg.setLabelFor( trafogucu );
	lig.setLabelFor( isletmegucu );
	lbmno.setLabelFor( besleyenmerkezno );
      setLayout( new GridLayout( 1, 2 ) );
      add( labelPanel );
      add( screenvarPanel );
   }
} // class DataPanel
//
// Dugme alanini olustur
//
class ButtonPanel extends JPanel {
      
   public ButtonPanel( Connection dbc, DataPanel scv, 
      JTextArea msg ) {
      setLayout( new GridLayout( 1, 4 ) );
      
      JButton findName = new JButton( "Bul" );
      findName.addActionListener( new FindRecord( dbc, scv, msg ) );
      add( findName );
      JButton addName = new JButton( "Ekle" );
      addName.addActionListener( new AddRecord( dbc, scv, msg ) );
      add( addName );
      
      JButton updateName = new JButton( "Güncelle" );
      updateName.addActionListener( new UpdateRecord( dbc, scv, msg ) );
      add( updateName );
      
      JButton deleteName = new JButton( "Sil" );
      deleteName.addActionListener( new DeleteRecord( dbc, scv, msg ) );
      add( deleteName );
      
      JButton clear = new JButton( "Temizle" );
      clear.addActionListener( new Clearscreenvar( scv ) );
      add( clear );
      
   }
} // class ButtonPanel
//
// Diger fonksiyon dugmelerini olustur
//
class RadioButtons extends JPanel {
        
   public RadioButtons( Connection dbc, DataPanel scv,
      JTextArea msg  ) {
	
	TarihceGiris dkord = new TarihceGiris( dbc, scv, msg );
	JRadioButton tgiris = new JRadioButton( "Tarihçe Giriş", false );
 	tgiris.addActionListener( dkord );
	add( tgiris );
	
	TarihceGoster ohist = new TarihceGoster( dbc, scv, msg );
	JRadioButton tgoster = new JRadioButton( "Tarihçe Göster", false );
	tgoster.addActionListener( ohist );
	add( tgoster );
 	
	MerkezCizim drawing = new MerkezCizim( dbc, scv, msg );
     	JRadioButton cizim = new JRadioButton( "Çizim", false );
	cizim.addActionListener( drawing );
	add( cizim );
	ButtonGroup radioGrp = new ButtonGroup();
	radioGrp.add( tgiris );
	radioGrp.add( tgoster );	
	radioGrp.add( cizim ); 
      
   }
} // class RadioButtons
//
// Ekrandaki giris alanlarini temizle
//
class Clearscreenvar implements ActionListener {
   private DataPanel screenvar;
   public Clearscreenvar( DataPanel scv ) {
      screenvar = scv;
   }
   public void actionPerformed( ActionEvent e )
   {
      screenvar.merkezno.setText( "" );
      screenvar.merkezadi.setText( "" );
      screenvar.adres.setText( "" );
      screenvar.tipi.setText( "" );
      screenvar.anatipi.setText( "" );
      screenvar.yapisi.setText( "" );
      screenvar.girisvolt.setText( "" );
      screenvar.cikisvolt.setText( "" );
      screenvar.trafogucu.setText( "" );
      screenvar.isletmegucu.setText( "" );
      screenvar.besleyenmerkezno.setText( "" );
   } // public void actionPerformed
} // class Clearscreenvar