Menu

12 Eylül 2010 Pazar

Karakter Fonksiyonlari

Karakter degerleri uzerinde islem yapar. Bir cogu bir veya birden fazla karakter veri tipinde paremetre alir ve karakter yada sayisal veri tipinde deger dondurur.
Karakter fonksiyonlarini 2 gruba ayirmak mumkundur.
  • Buyuk kucuk harf donusum fonksiyonlari
             (LOWER, UPPER, INITCAP)
  • Karakter isleme fonksiyonlari
            (SUBSTR, CHR, CONCAT, INSTR, LENGTH ...)

Asagida en cok kullaninalan karekter fonksiyonlarini ogrenelim..

CONCAT
Bu fonksiyon iki parametre alir ve sonuc olarak ikinci dizgeyi birinci dizgeye eklenmis olarak dondurur.
1 .
      SELECT CONCAT('Ertugrul','Aslan') FROM dual;

      DONEN_DEGER  
      -------------
     ErtugrulAslan 

2.
     SELECT CONCAT('Ertugrul',' Aslan') FROM dual;
 
     DONEN_DEGER  
     ------------- 
     Ertugrul Aslan  

3.
     SELECT concat(first_name, last_name) FROM employees where email ='JWHALEN'
 
     DONEN_DEGER  
     ------------- 
     JenniferWhalen  

4.
     SELECT concat(first_name, ' '||last_name) FROM employees where email ='JWHALEN'
 
     DONEN_DEGER  
     ------------- 
     
Jennifer Whalen 


SUBSTR 
SUBSTR(,[,]) fonksiyonu bi karakter dizgesi k1 icerisinde m`inci pozisyondan  baslayarak dizgenin sonuna kadar yada eger belirtilmisse n`inci pozisyona kadar olan dizgeyi dondurur.
1.
     SELECT substr('Ben ve Oracle', 1, 11) FROM dual;
 
     DONEN_DEGER  
     ------------- 
     
Ben ve Orac
 
2.
     SELECT substr('Ben ve Oracle', 1, 11) FROM dual;
 
     DONEN_DEGER  
     ------------- 
     
Ben ve Orac

3.
     SELECT substr('Ben ve Oracle', 1, 13) FROM dual;
 
     DONEN_DEGER  
     ------------- 
     
Ben ve Oracle

4.
     SELECT substr('Ben ve Oracle', 1, 30) FROM dual;
 
     DONEN_DEGER  
     ------------- 
     
Ben ve Oracle


 LENGTH
 LENGTH() fonksiyonu ilgili karakter dizgesinin uzunlugunu dondurur.
1.
     SELECT length('Ben ve Oracle') FROM dual;
 
     DONEN_DEGER  
     ------------- 
     
13
 
2.
     SELECT length('') FROM dual;
 
     DONEN_DEGER  
     ------------- 
      (Null)

 INSTR
INSTR(,,[i[,j]]) fonksiyonu dort paremetre alir. k1 ve k2 karakter dizgeleri, i ve j tamsayidir. Bu fonksiyon k1 icerisinde k2`nin j`inci tekrarinin sayisal pozisyonu dondurur. Arama islemi i`ininci degerder baslar. Eger i`ye negatif bir deger girilirse arama tersten yapilir yani sagdan sola dogru ancak pozisyon yine saga dogru sayilir. I ve j`nin varsayilan degerleri 1`dir.
1.
     SELECT instr('Ertugrul', 'g',1,1) FROM dual;
 
     DONEN_DEGER  
     ------------- 
      5
 
2.
     SELECT instr('Ertugrul', 'g',1,2) FROM dual;
 
     DONEN_DEGER  
     ------------- 
      0
 
3.
     SELECT instr('Ertugrul', 'u',1,1) FROM dual;
 
     DONEN_DEGER  
     ------------- 
     4

4.
     SELECT instr('Ertugrul', 'u',1,2) FROM dual;
 
     DONEN_DEGER  
     ------------- 
      7

5.
     SELECT instr('Ertugrul', 'g',-1,1) FROM dual;
 
     DONEN_DEGER  
     -------------       
      5


LPAD ve RPAD
LPAD(k,i, k2) fonksiyonu 3 parametre alir. k1 ve k2 karakter veritipindendir ve i tamsayidir.Bu fonksiyon k1 karakterinin basina  toplam dizge uzunlugu i oluncaya kadar k2 karakterinden koyar. Eger k1`in uzunlugu i degerininde buyuk ise k1 uzunlugu i olana kadar kesilir. RPAD(k1,i,k2) fonksiyonu ise bu islemi k1`in sonunda yapar

1.
     SELECT lpad('Ertugrul', 15,'+') FROM dual;
 
     DONEN_DEGER  
     -------------       
      +++++++Ertugrul

2.
     SELECT rpad('Ertugrul', 20,'+') FROM dual;
 
     DONEN_DEGER  
     -------------       
      Ertugrul++++++++++++ 

TRIM
TRIM(k1,k2 FROM k3) fonksiyonu uc parametre alir. k2 ve k3 karakter dizgeleridir. k1 asagidakilerden biri olabilir. LEADING, TRAILING, BOTH. Bu fonksiyon secilen k1 degerine gore k3 icerisindeki k2 karakter dizgeleri cikartilmis olarak k3 dizgesini dondurur.
1.
    SELECT TRIM('  Ertugrul.  Aslan  ') test1,
       TRIM('Ertugrul.  Aslan  ') test2,
       TRIM('  Ertugrul.  Aslan') test3
    FROM DUAL;
 
     DONEN_DEGER  
     -------------       
      Ertugrul.  Aslan Ertugrul.  Aslan Ertugrul.  Aslan 


REPLACE
REPLACE(k1,k2,k3) fonksiyonu 3 parametre alir. k1,k2 ve k3 karakter dizgeleridir. Bu fonksiyon k1 icerisinde tum k2`leri k3 ile degistirir. k32nin varsayilan degeri NULL`dur. Eger k3 null olursa k1 icerisindeki tum k2`ler cikarili. Eger k2 NULL olursa k1 degismeden aynen doner. Eger k1 NULL olursa NULL doner.
1.
    SELECT replace('Ertugrul','ul','a') FROM DUAL;
 
     DONEN_DEGER  
     -------------       
      Ertugra


LOWER-UPPER-INITCAP
LOWER(k1) fonksiyonu karakter dizgesi bir parametre alir. Bu fonksiyon parametre olarak verilen karakter dizgesinin tum harflerini kucuk harfer, UPPER, buyuk harfe, INITCAP, ilk harfini buyuk harfe digerlerini kucuk harfe cevirir.
1.
    SELECT lower('eRtUGrUL') LOWER_TEST, upper('eRtUGrUL') UPPER_TEST,     initcap('eRtUGrUL') INITCAP_TEST FROM DUAL;
 
LOWER_TEST   UPPER_TEST    INITCAP_TEST
---------------     ----------------    ------------
ertugrul          ERTUGRUL       Ertugrul 




Sayisal Fonksiyonlar

Sayisal fonksiyonlar sayisal degerler uzerinde bir kisim matematiksel yada aritmetik islem yaparlar. Tum parametleri sayisal degerlerdir ve tum fonksiyonlar deger dondurur. Trigonometrik fonksiyonlar dereceler uzerinde degil, radian degerler uzerinde calisir.

            ABS          Mutlak degeri dondurur       

            ACOS       Arc-kosinus degerini dondurur.

            ASIN        Arc-sinus degerini dondurur.      
 
            CEIL         Sayiyi bi ust tamsayi degerine yuvarlar     
  
            COS         Cosinus degerini dondurur.           

            FLOOR    Sayiyi bi alt tamsayi degerine dondurur.

            MOD        Sayinin modunu dondurur. Yani bolmeden kalani     
  
            POWER    Sayinin ussel degerini verir. Yani a(b) nin degerini verir.  
 
            ROUND    Sayiyi yuvarlar       

            SQRT        Sayinin karakokunu verir.           

            TRUNC    Sayinin belirtilen kismini keser.

Ornekler

1.
      SELECT ROUND(12345, -3) test1, round(12345.54321, 3) test2 FROM dual
       TEST1                  TEST2                 
      ----------              --------------
       12000                  12345.543     

2.
      SELECT trunc(1234.567, 1) test1, trunc(1234.567, -2) test2 FROM dual
       TEST1                  TEST2                 
      -------------       ----------------------
       1234.5                 1200     

3.
      SELECT ceil(8.7) test1, ceil(-34.89) test2, floor(8.7) test3, floor(-34.89) test4 FROM dual
TEST1             TEST2            TEST3               TEST4                
---------         -----------       -----------       ---------------
9                      -34                    8                      -35    

4.
      SELECT mod(19, 5) test1, mod(9, 2.5) test2, mod(-55, 6) test3 FROM dual
       TEST1            TEST2         TEST3                 
     ---------         ---------       ----------
         4                    1.5               -1

UNION, UNION ALL, INTERSECT, MINUS

UNION            : Iki SELECT sorgusunun birlestirilmesinde kullanilir. Kayitlari siralanmis bir sekilde listeler.
UNION ALL   : Iki SELECT sorgusunun birlestirilmesinde kullanilir. UNION`da farkli olarak, iki sorgudan   donen butun kayitlari verir. Ayni kayitlar varsa tekrarlanir.
INTERSECT   : Iki SELECT sorgusunun birlesmesinde, kesisen degerleri dondurur. Ayni degerler tekrarlanmaz ve siralama olur.
MINUS            : Iki SELECT sorgusundan yanliz birinde olan kayitlari dondurur. Ayni degerler tekrarlanmaz ve siralama vardir.

NOT : Yukaridaki operatorlari kullanirken dikkat etmemiz gereken sorgudan dondurmesini istedigimiz sutunlar, her iki tablodada ayni type`de olmalidir.
Ornek :
Simdi Yukaridaki operatorlari kullanmak icin 2 tane tablo yaratalim ve bu operatorlari kullanalim.

A tablosu 
Name                                Type
ID                                      Number
Name                                 VARCHAR2(20)
Surname                             VARCHAR2(20)

B tablosu
Name                                Type
Name                                 VARCHAR2(20)
Surname                             VARCHAR2(20)


select  *  from a

COLUMN1                NAME                 SURNAME             
---------------------- -------------------- --------------------
1                      ertugrul             aslan               
2                      selcuk               kadir               
3                      bilge                turk                

3 rows selected


select  *  from b

NAME                 SURNAME             
-------------------- --------------------
ertugrul             aslan               
selcuk               kadir               
mustafa              duran               
hakan                aslan               

4 rows selected

Simdi yukaridaki operatorlari kullanmaya baslayalim..
  1. SELECT name, surname FROM A
          UNION SELECT name, surname FROM B
NAME                 SURNAME             
-------------------- --------------------
bilge                turk                
ertugrul             aslan               
hakan                aslan               
mustafa              duran               
selcuk               kadir               

5 rows selected


  1. SELECT name, surname FROM A
          UNION ALL SELECT name, surname FROM B
NAME                 SURNAME             
-------------------- --------------------
ertugrul             aslan               
selcuk               kadir               
bilge                turk                
ertugrul             aslan               
selcuk               kadir               
mustafa              duran               
hakan                aslan             

7 rows selected

  1. SELECT name, surname FROM A
         INTERSECT SELECT name, surname FROM B
NAME                 SURNAME            
-------------------- --------------------
ertugrul             aslan              
selcuk               kadir              

2 rows selected


  1. SELECT name, surname FROM A
          MINUS SELECT name, surname FROM B
NAME                 SURNAME            
-------------------- --------------------
bilge                turk               

1 rows selected


SELECT name, surname FROM B
      MINUS SELECT name, surname FROM A

NAME                 SURNAME            
-------------------- --------------------
hakan                aslan              
mustafa              duran              

2 rows selected

MINUS kullanirken kayitlar tekrarlanmaz ve siralama olur. Burada bir seye dikkat etmemiz gerekiyor. Mesala A tablosunda bilge turk, B tablosunda mustafa duran kayitlari, once A`yi kullandigimizda bilge turk, veriyor. Cunku diger tablodan cikariyor. Once B`yi kullandigimizda sonuc farkli oldugu yukarida gorulmektedir.

Sql Fundamental

Tablespace – Datafile Oluşturma

Oracle’da verilerimiz fiziksel olarak datafile’larda saklanır ve bu datafile’ları barındıran lojiksel olarak Tablespace adını verdiğimiz yapılar bulunur. Tablespace’ler, data fileların toplu olarak yönetimini kolaylaştırmıştır. Bir Tablespacei read only yaparak, onu içeren dosyaları da read only yapmış oluruz, hepsini teker teker yapacağımıza.
Şimdi bu tablespace oluşturma işlemini manuel olarak yapalım.
İlk olarak konsoldan bir dosya oluşturalım.
root@ertugrul-laptop:/home/oracle/datafiles# touch ertugrul_3.dbf 
root@ertugrul-laptop:/home/oracle/datafiles# ls -la
 
Daha sonra bu dosyaya yazma işlemlerinin gerçekleşebilmesi için: 
root@ertugrul-laptop:/home/oracle/datafiles# chmod 777 ertugrul_3.dbf
 
Şimdi  ertugrul_ts_2 adli tablespacimizi
ertugrul_3.dbf dosyasini içerecek şekilde oluşturalım: 
CREATE TABLESPACE ertugrul_TS_1 DATAFILE '/home/oracle/datafiles/ertugrul_1.dbf' SIZE 10M;Tablespace altered.
 
Kontrol etmek için: 
root@ertugrul-laptop:/home/oracle/datafiles# ls -latotal 20536drwxr-xr-x 2 root root 
 4096 2008-06-03 13:35 .drwxrwxrwx 3 root root 
 4096 2008-06-03 10:11 ..-rwxrwxrwx 1 root root 
10493952 2008-06-03 11:49 ertugrul_3.dbf.........


Görüldüğü gibi
ertugrul_3.dbf dosyası 10MB olarak oluşturuldu.
Şimdi, başka bir dosyayı var olan tablespace’e ekleme işlemini gerçekleştirelim.
Yine bir dosya oluşturalım, ertugrul_4.dbf diye, chmod ayarlarını yapalım,
ve sql plus ‘ta su komutu yazalım:
alter tablespace ertugrul_ts_1 add datafile '/home/oracle/datafiles/ertugrul_4.dbf' SIZE 10M


Çok basit komutlarla datafile’larımızı ve tablespace’lerimizi oluşturmuş olduk.

26 Ağustos 2010 Perşembe

Jasper Ireport tutorial

Jasper Ireport tutorial
http://jasperforge.org/website/ireportwebsite/IR%20Website/tutorials/Dashboard/Dashboard.html

25 Ağustos 2010 Çarşamba

O`relly sitesindeki kitaplari asagidaki linkden indirebilirsiniz

http://roniwahyu.wordpress.com/2009/12/02/free-oreilly-ebook-download/

22 Temmuz 2010 Perşembe

FİNCAN VE YAŞLI KADIN

Yasli kadin, bir antika dukkaninda aldigi yuzyillik fincani ozenle salona vitrine yerlestirdi...
Fincanin bicimi, uzerindeki renkler, desenler onun bir sanat eseri oldugunu soyluyordu...
Odedigi fiyati hatirladi, hayir hicde pahaliya almamisdi aslinda..
Hayranlikla fincani seyretmeye devam etti...
Derken birden fincan dile geldi ve konusmaya basladi...
Kadina, bana hayranlikla baktiginin farkindayim...
Ama bilmelisinki ben hep bole degildim.. Yasadigim sikintilar beni bu hale getirdi..
Kadin, simdi hayret icindeydi..
Onundeki kahve fincani konusuyordu kendi ile...
Kekeleyerek, nasil?, anlayamadim, diyebildi yasli kadin sadece...
Demek istiyorum ki, ben bir zamanlar camurdan ibarettim.
Ve bir sanatkar geldi, beni eline aldi ezdi dovdu yogurdu...
Cektigim sikintilara dayanamayip Yeter. Lutfen dur artik diye bagirmak zorunda kaldim...
Ama, usta sadece gulumsedi, daha degilll. diye cevapladi beni....
Sonra beni alip bir tahtanin uzerine koydu. Burada dondum dondum dondum...
Dondukce basimda dondu, yine haykirdim.
Lutfen beni bu seyin uzerinden kurtar, donmek istemiyorum artik...
Ama, usta bana yine bakti, gulumsedi, henuz degill dedi..
Derken, beni aldi bi firina koydu kapiyi kapayip isiyi artirdi..
Onu simdi firinin penceresinden gorebiliyordum...
Firinda git gide isiniyordu, aklimda sole geciyordu, beni heralde yakarak oldurecek...
Firinin duvarlarina vurmaya basladim...Bir tarafdanda bagiyordum..
Usta usta lutfen izin ver cikayim burdan
Pencereden onun yuzunu gorebiliyor, hala gulumsuyor ve hala daha degilll, daha degill diyordu...
Bir saat kadar sonra firini acti beni cikardi..
Simdi rahat rahat nefes alabiliyordum..
Firinin yakici sicakligindan kurtulmus sukrediyordum...
Beni masanin uzerine koydu, biraz boyayla firca getirdi...
Boyali firca ile bana hafif hafif dokunmaya basladi..
Firca her tarafinda geziniyor ve ben bu arada gidiklaniyordum...
Lutfen usta yapma.! Gidiklaniyorum dedim..Onun cevabi ise ayni oldu yine...
Henuz degil....
Sonra beni nazikce tuttu, ve firina dogru yurumeye basladi...
Hayir dedim, beni yine firina sokma ne olur..Bagirdim...
Firini acip beni iceri yiteleyib kapagi yine kapatti...
Isiyi bir oncekinin 2 katina cikardi.. Bu sefer beni gercekten yakacak kavuracak heralde diye dusundum...
Pencereden bakip ona yine yalvardim ama...O yine daha degill, diyordu....
Ancak bu defa, ustanin yanaklarindan bir damla goz yasinin yuvarlandigini aktigini gordum...
Tam son nefesimi vermek uzere oldugumu dusunuyordum ki...
Birden firinin kapagi acildi, ustanin nazik eli beni cekti disari cikardi...
Derinnn bir nefes daha aldim..Hasret kaldigim serinlige kavusmustum...
Beni yuksekce bir rafa koydu..Ve karsima gecti sole dedi...
Simdi tam istedigim gibi oldun...Kendine bi bakmak istermisin...
Ona Evet dedim...
Bir ayna getirip onume koydu...Inanamiyordum gordugume...
Aynaya tekrar tekrar baktim..Bu ben degilim ben sadece bir camur parcasiyim dedim...
Evet bu sensin dedi usta...
Senin aci ve sikinti diye gordugun seyler sayesinde bole mukemmel bi fincan haline geldin...
Eger sen bir camur parcasiyken uzerinde calismasaydim...Kuruyup gidecektin...
Doner tezgahin uzerine koymasaydin ufalanip toz olacakdin...
Sicak firina sokmasaydim catlayacakdin...
Boyamasaydim, hayatinda renk olmayacakti....
Ama sana asil guc ve kuvveti veren ikinci firin oldu....
Simdi arzu ettigim hersey var uzerinde....
Ve ben kahve fincani, su sozlerin agzimdan ciktigini hayretle fark ettim....
Ustamm, sana guvenmedigim icin Ne Olur Beni Affet....
Bana zarar verecegini dusunmustum...
Beni benden fazla sevip, iyilik yapacagini fark edememisdim....
Bakisim kisaydi, ama simdi, beni harika bir sanat eseri yaptigini goruyorum...
Benim sikinti ve aci diye gordugum seyleri bana verdigin icin, sonsuzzzz tesekkur ederim...
Hemde cook ama coookk tesekkur ederim...

16 Haziran 2010 Çarşamba

ResultSet`i List`e cevirme

List al = new ArrayList();
ResultSet rs = stmt.executeQuery("SELECT userid, username FROM USER");
while (rs.next()) {
   int i = rs.getInt("userid");
  String str = rs.getString("username");
  User user = new User(i, str);
  al.add(user);
}

Application Express (APEX) Nedir, APEX`in Ozellikleri ve kullanim alanlari

  • Application Express (APEX), eski adı HTML-DB olan ve Oracle veritabanı üzerinde çalışan hızlı uygulama geliştirme aracıdır
  • APEX, web tabanlı uygulama geliştirmek için tasarlanmış, web tabanlı çalışan bir üründür
  • APEX uygulamalarını kullanabilmek için istemci (client) tarafına kurulması gereken herhangi bir program yoktur
  • APEX, Oracle tarafından sürekli geliştirilen ve yenilenen bir platformdur
APEX Özellikleri   
  • APEX’in çalışabilmesi için herhangi bir Application Server kurulumuna ihtiyaç yoktur
  • SQL, PL/SQL, HTML, CSS gibi bilinen teknolojiler aynı framework içerisinde birleştirilmiştir
  • APEX uygulamalarıyla ilgili tüm bilgiler veritabanında tutulur, başka bir kaynak kod üretimi söz konusu değildir
  • Application Builder - Dinamik uygulama geliştirme aracı 
  • SQL Workshop - Veritabanı yapılarını inceleme, SQL sorguları oluşturma aracı 
  • Utilities - Yardımcı uygulamalar 
  • Raporlar ( SQL sorguları , SQL dönen fonksiyonlar )        
  • Bilgi Giriş Formları 
  1. Tablo, view yada prosedür üzerine formlar
  2. Çoklu güncelleme formları 
  3. Master-detail formlar 
  4. Web service formları 
  5. Pop up formlar 
  • Grafikler 
  • Takvimler 
  • Güvenlik
  1. LDAP bağlantısı 
  2. Single sign-on
  3. Veritabanı kullanıcı 
  4. Apex kullanıcısı 
  5. Her objeye güvenlik şeması atayabilme
  • Navigasyon - Tab, listeler, ağaç görünümü, breadcrumbs
  • Oracle 9.2.0.3 verisyonundan itibaren tüm Oracle veritabanı versiyonları tarafından desteklenir
  • Ücretsiz bir versiyon olan OracleXE veritabanı üzerinde tam uyumlulukla çalışır

APEX Kullanım Alanları               
  •  Veritabanı merkezli uygalamalarınız varsa
  • Genel olarak SQL veya PL/SQL bilginiz varsa
  • Çok derin programlama bilgisine ihtiyaç duymadan belirli özelliklerde web uygulaması yapmak istiyorsanız, 
  • MS Access veya MS Excel’de yaptığınız işleri merkezi bir uygulamaya taşımak istiyorsanız, 
  • Dünya çapında yaygın kullanım alanına sahiptir. Büyük ölçekte projelerin gerçekleştirildiği sektörler
  1. Kamu - Otomotiv - Telekom - Bilimsel Arastirma    

Oracle Application Express’e Dışarıdan Ulaşma(Remote Access)

Bu işlemi yapmadan önce yapılacaklar:
-Windows Servislerinden OracleXETNSListener ı kapatıyoruz.
-Çalışan herhangi bir tarayıcı ekranı var ise onları da kapatıyoruz(ki neden çıktığını anlamadığınız bir sorunla karşılaşmayın. Bazen işlem düzgün çalışsa da tarayıcı kapatılıp açılmadığından sayfaya erişilemiyor hatası çıkıyor.)

Oracle Application Express 3.0.1(önceki versiyonlarda da geçerli) de dışarıdan ulaşmak için başlat->çalıştır’dan cmd yazıp command prompt a giriyoruz. Command prompta:
sqlplus system/sifreniz
yazıp sqlplus’a system olarak bağlanıyoruz. Buradan sonra aşağıdaki komutu çalıştırıyoruz:
exec dbms_xdb.setListenerLocalAccess(l_access => FALSE);

Servislerden OracleXETNSListener ı açıyoruz.

Bundan sonra hangi ip yi aldıysak örneğin http://192.168.2.1:8080/apex yazıp application express’e bağlanıyoruz. Eğer bilgisayar adı tanımlanmışsa aynı şekilde ağ içerisinde örneğin http://ertugrul:8080/apex yazıp da bağlanabilirsiniz.

Eğer uzaktan bağlantı erişimini engellemek istiyorsak:
exec dbms_xdb.setListenerLocalAccess(l_access => TRUE);
yazarak tekrar sadece localhost tan erişime açık hale getirebiliyoruz.

Hepsi bu kadar.

12 Haziran 2010 Cumartesi

Report Parser

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.apache.xml.serialize.XMLSerializer;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReportParser {

    private Properties fileTable;
    private String reportDirectory;

    public ReportParser(File file, String reportDirectory) throws Exception {

        this.reportDirectory = reportDirectory;
        if (this.reportDirectory == null) {
            this.reportDirectory = file.getParent();
        }
        fileTable = new Properties();
        parse(file);

        fileTable.store(new FileOutputStream(this.reportDirectory + file.separator + "main.xml"), "Report table");
    }

    private String convertToFullName(String directory, String fileName) {
        if (!fileName.contains(File.separator)) {
            fileName = directory + File.separator + fileName;
        }
        return fileName;
    }

    public void parse() {
    }

    public void parse(File file) throws Exception {

        if (fileTable.getProperty(file.getName()) != null) {
            return;
        }

        fileTable.setProperty(file.getName(), UUID.randomUUID().toString().replaceAll("-", ""));

        Document doc = getDocument(file);

        NodeList imgList = doc.getElementsByTagName("imageExpression");

        for (int i = 0; i < imgList.getLength(); i++) {
            Node imgNode = imgList.item(i);
            String fileName = imgNode.getTextContent().replaceAll("\"", "");
            fileName = convertToFullName(file.getParent(), fileName);
            String value = fileTable.getProperty(fileName);
            if (value == null) {
                value = UUID.randomUUID().toString().replaceAll("-", "");
                fileTable.setProperty(fileName, value);
                imgNode.getFirstChild().setNodeValue(value);
                writeImage(fileName, convertToFullName(reportDirectory, value));
            }
        }

        NodeList subReportList = doc.getElementsByTagName("subreportExpression");

        for (int i = 0; i < subReportList.getLength(); i++) {
            Node subReportNode = subReportList.item(i);
            String fileName = subReportNode.getFirstChild().getNodeValue().replaceAll("\"", "").replaceAll(".jasper", ".jrxml");
            fileName = convertToFullName(file.getParent(), fileName);
            String value = fileTable.getProperty(fileName);
            if (value == null) {
                parse(new File(fileName));
                subReportNode.getFirstChild().setNodeValue(value);
            }
        }
        writeDocument(doc, convertToFullName(this.reportDirectory, fileTable.getProperty(file.getName())));
    }

    public Properties getFileTable() {
        return fileTable;
    }

    public void setFileTable(Properties fileTable) {
        this.fileTable = fileTable;
    }

    public void writeDocument(Document document, String file) {
        try {
            XMLSerializer serializer = new XMLSerializer();
            serializer.setOutputCharStream(
                    new java.io.FileWriter(file));
            serializer.serialize(document);
        } catch (Throwable ex) {
            ex.printStackTrace();
        }
    }

    private Document getDocument(File xmlFile) throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);
        doc.getDocumentElement().normalize();
        return doc;
    }

    private void writeImage(String fileName, String value) {
        FileInputStream fin = null;
        try {
            fin = new FileInputStream(fileName);
            byte[] buf = new byte[fin.available()];
            fin.read(buf);
            fin.close();
            FileOutputStream fout = new FileOutputStream(value);
            fout.write(buf);
            fout.close();
        } catch (IOException ex) {
            Logger.getLogger(ReportParser.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

11 Haziran 2010 Cuma

Ireport uzerinde SubReport olusturma ve kullanma

Bu yazimizda Ireport uzerinde subreport kullanimini, bir rapor uzerine subreport`un nasil eklendigi uygulamali bi sekilde yapmaya calisacaz..

Ben NetBean uzerindeki daha onceden JavaDB (Derby) ile baglanti kurdugum source kullanacam..

Oncelikle bize gerekli olacak tablolari yaratma ile baslayalim, ve tablolar uzerindeki iliskileri belirtelim..

CREATE TABLE alumnos (            
                ID integer NOT NULL,               
                NOMBRE varchar(100) NOT NULL,         
                CLAVE varchar(100) NOT NULL,       
                PRIMARY KEY  (ID)                     
              )

Ikinci Tablomuz..

CREATE TABLE materias (            
                ID integer NOT NULL,               
                NOMBRE VARCHAR(100) NOT NULL,         
                PRIMARY KEY  (ID)                     
              )

 Tablolar arasinda iliskileri gosterdigimiz yardimci tablomuz


CREATE TABLE alumnos_materias (
    ALUMNO_ID integer NOT NULL, 
    MATERIA_ID integer NOT NULL, 
     PRIMARY KEY (ALUMNO_ID, MATERIA_ID),

    FOREIGN KEY (ALUMNO_ID) REFERENCES alumnos (ID),
    FOREIGN KEY (MATERIA_ID) REFERENCES materias (ID) 
)

Simdide, tablolarimiza veriler ekleyelim..


INSERT INTO alumnos VALUES (1, 'Alumno 1', '00001');
INSERT INTO alumnos VALUES (2, 'Alumno 2', '00002');
INSERT INTO alumnos VALUES (3, 'Alumno 3', '00003');
INSERT INTO alumnos VALUES (4, 'Alumno 4', '00004');
INSERT INTO alumnos VALUES (5, 'Alumno 5', '00005');
INSERT INTO alumnos VALUES (6, 'Alumno 6', '00006');
INSERT INTO alumnos VALUES (7, 'Alumno 7', '00007');
INSERT INTO alumnos VALUES (8, 'Alumno 8', '00008');
INSERT INTO alumnos VALUES (9, 'Alumno 9', '00009');
INSERT INTO alumnos VALUES (10, 'Alumno 10', '000010');


INSERT INTO materias VALUES (1, 'Matematicas');
INSERT INTO materias VALUES (2, 'Fisica');
INSERT INTO materias VALUES (3, 'Quimica');
INSERT INTO materias VALUES (4, 'Biologia');
INSERT INTO materias VALUES (5, 'Historia');
INSERT INTO materias VALUES (6, 'Geografia');


INSERT INTO alumnos_materias VALUES (1, 1);
INSERT INTO alumnos_materias VALUES (1, 3);
INSERT INTO alumnos_materias VALUES (1, 5);

INSERT INTO alumnos_materias VALUES (2, 1);
INSERT INTO alumnos_materias VALUES (2, 2);
INSERT INTO alumnos_materias VALUES (2, 3);

INSERT INTO alumnos_materias VALUES (3, 2);
INSERT INTO alumnos_materias VALUES (3, 4);
INSERT INTO alumnos_materias VALUES (3, 6);

INSERT INTO alumnos_materias VALUES (4, 4);
INSERT INTO alumnos_materias VALUES (4, 5);
INSERT INTO alumnos_materias VALUES (4, 6);

INSERT INTO alumnos_materias VALUES (5, 1);
INSERT INTO alumnos_materias VALUES (5, 4);
INSERT INTO alumnos_materias VALUES (5, 5);

INSERT INTO alumnos_materias VALUES (6, 2);
INSERT INTO alumnos_materias VALUES (6, 5);
INSERT INTO alumnos_materias VALUES (6, 6);

INSERT INTO alumnos_materias VALUES (7, 1);
INSERT INTO alumnos_materias VALUES (7, 3);
INSERT INTO alumnos_materias VALUES (7, 5);

INSERT INTO alumnos_materias VALUES (8, 1);
INSERT INTO alumnos_materias VALUES (8, 2);
INSERT INTO alumnos_materias VALUES (8, 3);

INSERT INTO alumnos_materias VALUES (9, 2);
INSERT INTO alumnos_materias VALUES (9, 4);
INSERT INTO alumnos_materias VALUES (9, 6);

INSERT INTO alumnos_materias VALUES (10, 4);
INSERT INTO alumnos_materias VALUES (10, 5);
INSERT INTO alumnos_materias VALUES (10, 6);

Bir şeye karar vermeden önce 2 defa düşünün!

Bir şeyde çok iyi ol. O “şey” seni değerli kılacak

Özürlü sekiz çocuğu olan ve frengi hastası hamile bir kadına rastlasaydınız, ona kürtaj olmasını tavsiye eder miydiniz?

Yanıtladıktan sonra aşağıdaki soruları yanıtlayın.
Şimdi bir dünya lideri seçme zamanı ve sizin oyunuz da sonucu etkileyecek.
Işte üç aday hakkındaki gerçekler:
1. aday: Sahtekar siyasetçilerle işbirliği içinde ve falcılara danışıyor.
Iki metresi olmuş. Paket paket sigara ve günde 8 ile 10 bardak martini içiyor.
2. aday: İki kere işten atılmış, öğlene kadar uyur. Üniversitedeyken uyuşturucu kullanmış ve her gece 1 litre viski içiyor.
3. aday: Madalya almış bir savaş kahramanı, vejeteryan, sigara içmiyor.
Nadiren bira içer ve evlilik dışı hiçbir ilişkisi olmamış.
Tercihiniz bu adaylardan hangisi olurdu?
Önce karar verin, kopya çekmek yok, daha sonra aşağıdaki yanıta bakın lütfen!
1. aday: Franklin D. Roosevelt
2. aday: Winston Churchill
3. aday: Adolf Hitler
ve bu arada…
Kürtaj sorusuna eğer evet dediyseniz, Beethoven’i öldürdünüz!
JRXML file parsing ve Zip file olusturma

import java.io.FileInputStream;
import java.io.FileOutputStream;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ReadXMLFile_bak {

    public static String directory;
    public static String fXmlFile;
    public static String ZipedFileName;

    public static void main(String argv[]) throws Exception {
        ReadXMLFile_bak mLFile = new ReadXMLFile_bak();
        mLFile.zippedJRXML();

    }

    public void zippedJRXML() throws Exception {
        NodeList nList = getDocument().getElementsByTagName("jasperReport");
        for (int temp = 0; temp < nList.getLength(); temp++) {
            Node nNode = nList.item(temp);
            if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                List files = new ArrayList();
                files.add(fXmlFile);
                files.addAll(getSubReportList(nNode));
                files.addAll(getImageList(nNode));
                createZip(files);
            }
        }
    }

    private List getSubReportList(Node node) {
        Element eElement = (Element) node;
        List subReps = new ArrayList();
        for (String sb : getTagValue("subreportExpression", eElement)) {
            sb = sb.substring(1, sb.length() - 1);
            if (!sb.contains("\\")) {
                subReps.add(directory + sb);
                System.out.println("subReps : " + directory + sb);
            } else {
                subReps.add(sb);
            }
        }
        return subReps;
    }

    private List getImageList(Node node) {
        Element eElement = (Element) node;
        List images = new ArrayList();
        for (String sb : getTagValue("imageExpression", eElement)) {
            sb = sb.substring(1, sb.length() - 1);
            if (!sb.contains("\\")) {
                images.add(directory + sb);
            } else {
                images.add(sb);
            }
        }
        return images;
    }

    private List getTagValue(String sTag, Element eElement) {
        int size = eElement.getElementsByTagName(sTag).getLength();
        List list = new ArrayList();
        for (int i = 0; i < size; i++) {
            NodeList nlList = eElement.getElementsByTagName(sTag).item(i).getChildNodes();
            Node nValue = (Node) nlList.item(0);
            list.add(nValue.getNodeValue());
        }
        return list;
    }

    private void createZip(List files) throws Exception {
        FileOutputStream outputFile = new FileOutputStream(ZipedFileName);
        ZipOutputStream zipFile = new ZipOutputStream(outputFile);
        byte[] buffer = new byte[1024];
        for (int i = 0; i < files.size(); i++) {
            FileInputStream inFile = new FileInputStream(files.get(i));
            zipFile.putNextEntry(new ZipEntry(files.get(i)));
            int length;
            while ((length = inFile.read(buffer)) > 0) {
                zipFile.write(buffer, 0, length);
            }
            zipFile.closeEntry();
            inFile.close();

        }
        System.out.println(".....Created ZIP file Successfully.....");
        zipFile.close();
    }

    private Document getDocument() throws Exception {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);
        doc.getDocumentElement().normalize();
        return doc;
    }
}

8 Haziran 2010 Salı

Object Kelimesinin Seçilmesi

Kelimeler hiç şüphesiz düşüncelerimizi, hayal dünyamızı, algılarımızı şekillendiriyor. Fikir dünyamız için yeni açılımlar getirmede kolaylaştırıcı bir rol de üstlenebiliyorlar, veya tam tersine düşüncelerimiz önünde zaman zaman engel de olabiliyorlar. Bilişim teknolojilerindeki yabancı terimlere bire bir sözlük karşılıkları bulunmasından pek memnun olmadığımı belirtmek istiyorum. Endişem bu sözlük karşılıklarının üzerinde çalıştığımız alanla ilgili kavram, olgu ve diğer yapıları tam manası ile aktarmada zayıf kalmalarıdır.

Aşağıda 2003 yılında Harezmi Yahoo grubunda yayımlanmış bir mesajdan bir bölüm var. Mesajın sahibi Naci Akkök. Halen Norveç Oslo Üniversitesi'nde öğretim görevlisi. Nesneye dayalı programlama ile ilgili kavramları mümkün olduğunca sağlıklı ve kayıpsız biçimde insanlar arasında paylaşabilmek için object teriminin nasıl tercih edildiği ile ilgili çok inginç bir örnek olduğunu düşünüyorum.

Ben Kristen Nygaard'un önce ögrencisi sayilirim. Simdi "Simula" müzesine kaldirilan bir kara (aslinda esil) tahtamiz vardi, onun önünde böyle seyleri günlerce tartisirdik. Nesne object gibi ama "material" olma özelligini ima ediyor. Object kelimesinin arkasinda yatan orijinal fikir "individual" ve "identifiable" olmasi idi, ama terimin bilincli bir sekilde "ting" olarak secilmemesinin ana nedeni kavramlari kapsamamasi idi. Bir de object'in "process" (sürec, sadece aktivite tanimi) kavramina kontrast olarak secildigini de hatirlamak gerekir. Kristen Nygaard'un Ole Johan Dahl (yani Simula ve OO kavramlarinin "formalisti") ile tartismalarindan su cümleyi cok iyi hatirliyorum: Bu "sey" hem fiziki hem kavramsal seyleri temsil edebilmeli. Kendisi sürec'e alternatif olmali ama bir süreci de temsil edebilmeli. Ingilizcedeki tanimimiz "a structural and behavioral representation of a conceptual or physical entity, identifiable as a separate individual entity".

Hatta "object" kelimesinin (ki Norveccesi de ayni, Objekt) seciminde bir bireye "odaklanma" (focus) yan anlami da önemli: Programlama (ki o zaman Simula ve OO sadece simulasyon programlamak icin düsünülüyordu) cevreyi kavramsallastirmak, modellemek ile baslar, ve bu modelde nelere odaklanacak, neler model disi birkilacak bu da cok önemli (denirdi). Dolayisiyla objekt'ler model üniteleri olarak da "object of attention", yani secilip üzerine odaklanan objectler olarak da düsünülürdü. Ayrica "object"in "subject"ten faki, yani kavramsal da olsa "dissal" bir seyin temsili oldugu da kelimenin seciminde rol oynadi. Tabii daha benim bildigim ve nbilmedigim 1000 cesit tartisma oldu bu konuda, ama sanirim tartismalarin tarzinda modelleme ünitesinin özellikleri yatiyordu hep. Bunlar felsefi (ve tarihi) tartismalar belki ama tartismalarin altinda dilin ne derece düsünmeye yardimci olabilecegi veya engelleyebilecegi hipotezi yatiyor (Sapir-Whorf thesis).

Nesne bu kavramlari temsil ediyormu (kognitif olarak, yani otomatik bunu mu algiliyor insanlar "nesne" kelimesini duyduklarinda)? Degilse, bu kavramlari toplayan ve "icgüdüsel" temsil eden Türkce kelime nedir? Object'in Türkce cevirsindeki tartismalara aranizda sahit olan varmi? Bilmek isterdim.

Naci Akkök 29.08.2003


Evet, sahiden biz yabancı terimlere Türkçe karşılıklar bulurken bu değerlendirmeleri yapıyor muyuz?

1 Mayıs 2010 Cumartesi

Java ile Dosya indirme

import java.io.*;
import java.net.*;
import javax.swing.JProgressBar;

public class guncelleme implements Runnable{
private int dosyaBoyutu = 0;
private OutputStream output = null;
private URLConnection UrlBaglanti = null;
private InputStream input = null;
private JProgressBar statusBar = null;
private volatile Thread proc = null;

public guncelleme(String urlbaglanti, String kayitYolu,JProgressBar progresBar){
//Burda internet adresine bağlantı sağlanıyor. Dosya okunuyor ve yazılıyor.
proc = new Thread(this);
try {
URL UrlLoc = new URL(urlbaglanti);
output = new BufferedOutputStream(new FileOutputStream(kayitYolu));
UrlBaglanti = UrlLoc.openConnection();
input =UrlBaglanti.getInputStream();
//İnternetteki dosyanın boyutu alınıyor ve JprogressBar'a aktarılıyor.
dosyaBoyutu = UrlBaglanti.getContentLength();
statusBar = progresBar;

} catch (Exception exception) {
System.out.println("Dosya alınamadı veya kaydedilemedi !");
}
// Herzaman indirilmeden sonra başlatılmalı.
proc.start();

}


public void run() {

}
//Bu metodu kullanarak ağacı ve indirmeyi durduruyoruz.
public void IndirmeyiDurdur(){
proc.interrupt();
}

public void Indir(){
try {
byte[] yaz = new byte[4096];
int bytesOku;
long bytesYaz = 0;
// JprogressBarın ayarları
statusBar.setMinimum(0);
statusBar.setMaximum(dosyaBoyutu);
statusBar.setValue(0);
statusBar.setStringPainted(true);
//Verinin çıktısına bakılıyor ve hardiske yazılıyor.
while((bytesOku = input.read(yaz)) != -1){
output.write(yaz, 0, bytesOku);
//Veri şuan yazılıyor.
bytesYaz += bytesOku;
//Anlık olarak progresBara indirilbe bilgisi yolluyor.
statusBar.setValue((int)bytesYaz);
}
//İnput ve output değerleri temizleniyor.
input.close();
output.close();
} catch (Exception exception) {
System.out.println("Dosya yazılamadı !");
}

}

}

31 Mart 2010 Çarşamba

Jsf 2.0 ile custom component olusturma

Makalemizde Jsf 2.0 ile custom component`lerin nasil olusturuldugu orneklerle beraber uygulamali olarak paylasmaya calisacam. Jsf `in 2.0`dan onceki surumlerinde de custom component olusturabiliyorduk ancak JSF2 ve facelets ile birlikte bu konu cok daha rahat bi sekilde hazirlanabiliyor. Bi sonraki yazimda, jsf2 ile gelen ozelliklerinden ve jsf2 ile eski surumlerin karsilastirilmasindan bahsedecem.

Simdi konumuza donersek, custom componentleri hangi durumlarda olusturuz, neden bole biseye ihtiyac duyariz derseniz, jsf`nin kendi componentlerinin yeterli olmadigi durumlarda, uygulamalarimiz icin kendi componentlerimizi olustururuz mesala bi ornek vermek gerekirse, h:datatable componentinde h:selectOneRadio componenti kullandigimizda cogumuz karsilasmisizdir, birden fazla satir secilebiliyor, ama radio butonlarin ozellikleri grub halinde calismalari ve o grub icinde yanliz birtane secilebilir olmalaridir. Ancak jsf componentinde birden fazla satir secebiliyoruz ve buda bizim hic istemedigimiz bir sonuc ortaya koyuyor, iste tam burada custom componentler yardimimiza kosuyor, ve biz kendi radio buton componentimizi istedigimiz sekilde olusturabiliyoruz. Bu sorunu 3.parti framevorklar kullanarak cozebiliyoruz ancak, onlarda sayfaya fazla bisekilde javascript-ajax atiyorlar. Bizim kendi olusturdugumuzu componentde ise hic bisekilde javascritpte yada ajax`a ihtiyacimiz olmayacak, Konuyu uzatmadan isterseniz hemen, nasil kendi componentlerimizi olusturabiliriz onan bakalim.

Ben uygulamarimda,

NetBeans 6.8 - glassfishv3 - j2ee 6 - jsf 2.0 ve facelets kullandim.

Simdi componentimizi olusturmaya baslayalim.

Bize gerekli olan classlar, SingleRowSelect, SingleRowSelectRenderer, RadioGroup, RadioGroupRenderer,

Simdi bu classlar ne isimize yarayacak,

SingleRowSelect classi bizim componentimizin propertylerinin olacagi class, bi nevi hangi attributelerinin olacagini burada gosteriyoruz, biz burada butun attributeleri tek tek olusturmakdansa var olanin uzerine bize gereken attributeleri ekleyelim, bunun icinde yanliz groupId attributemiz olsa bizim icin yeterli olacak. Classin icersi asagidaki gibi..



package net.aslan.faces.radiobutton;

import javax.faces.component.FacesComponent;


@FacesComponent(value = SingleRowSelect.COMPONENT_TYPE)
public class SingleRowSelect extends javax.faces.component.UIInput {

public static final String COMPONENT_FAMILY = "net.aslan.faces.component";
public static final String COMPONENT_TYPE = "net.aslan.faces.component.radiobutton.SingleRowSelect";
public static final String RENDERER_TYPE = "net.aslan.faces.component.radiobutton.SingleRowSelectRenderer";

public SingleRowSelect() {
super();
setRendererType(RENDERER_TYPE);
}

@Override
public String getFamily() {
return COMPONENT_FAMILY;
}

public void setGroupId(String groupId) {
getStateHelper().put("groupId", groupId);
}

public String getGroupId() {
return (String) getStateHelper().get("groupId");
}
}


Yukarida dikkat edecek olursak, classimizi UInput`dan extends ettik, cunku ayni seyleri tekrardan yazmakdansa bize gerekli olani var olani kullanarak onun uzerine eklemek daha rahat ve kolay olacaktir. UInput classinin icerisini incelemek bize cok fayada saglayacaktir.

Simdi yukaridaki classdaki kodlarin neler yaptigindan biraz bahsedecek olursak,

@FacesComponent, bu ozellikle jsf2 ile birlikte gelen annotationlar ile classin neyapacaginin neturden bi class olduguna karar veriyoruz,

ve classimizi component olarak gosteriyoruz, value` degeri ise componentin bir butun olarak calisacagindan Component_Family belirtiyoruz,

public static final String COMPONENT_FAMILY = "net.aslan.faces.component";
public static final String COMPONENT_TYPE = "net.aslan.faces.component.radiobutton.SingleRowSelect";


kodlarimiz UInput classinin icindede var oldugunda biz bu propertyleri ovveride ediyoruz ve kendi component type`mizi ve family`ini gosteriyoruz, biz ovveride etmeseydik kendisi tanyacakti ama biz ona izin vermiyoruz (UIInput classinin icini incelemenizi tavsiye ederim.)


public SingleRowSelect() {
super();
setRendererType(RENDERER_TYPE);
}


burada ise yapilandiricimizda renderer olacagi classimi set ediyoruz, eger biz set etmesek kendi renderer classini kullanacaktir.

ve son olarak

public void setGroupId(String groupId) {
getStateHelper().put("groupId", groupId);
}

public String getGroupId() {
return (String) getStateHelper().get("groupId");
}




bizim icin gerekli olan attribute`i olusturuyoruz ve stateHelper ekliyoruz, stateHelper Map seklinde calisiyor, setGroupId`de map`a ekliyoruz ve istegimiz zaman getGroupId`de oldugu gibi cagirabiliyoru, StateHelper`i ilerki makalelerde UIInput incelerken gorecegiz.



Bundan sonra bizim icin gerekli olan ve en onemli kisimlardan birisi renderer clasimizi olusturmak. Yani componentimizin nasil davranacagini bu class yardimiyla belirtecegiz..



import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.FacesRenderer;

@FacesRenderer(componentFamily = SingleRowSelect.COMPONENT_FAMILY, rendererType = SingleRowSelect.RENDERER_TYPE)
public class SingleRowSelectRenderer extends javax.faces.render.Renderer {

@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
SingleRowSelect radio = (SingleRowSelect) component;
String clientId = component.getClientId();
String groupId = radio.getGroupId();
Object selectedItems = null;
RadioButtonGroup group = null;

if (groupId != null) {
group = (RadioButtonGroup) findComponent(radio, groupId);
if (group != null) {
selectedItems = group.getValue();
} else {
}
}

ResponseWriter writer = context.getResponseWriter();
writer.startElement("input", component);
writer.writeAttribute("type", "radio", null);
writer.writeAttribute("id", clientId, null);

if (group != null) {
writer.writeAttribute("name", group.getClientId(), null);
} else {
writer.writeAttribute("name", clientId, null);
}
writer.writeAttribute("value", radio.getValue(), "value");

if (selectedItems != null) {
System.out.println("type is:" + radio.getValue().getClass().getName() + " / value:" + radio.getValue());
}
writer.endElement("input");
}

private UIComponent findComponent(UIComponent comp, String componentId) {
UIComponent parent = comp;
UIComponent found = null;
int i = 1;
while (parent != null) {
found = parent.findComponent(componentId);
if (found != null) {
return found;
}
parent = parent.getParent();
}
return null;
}
}


yukaridaki kod blogumuzu inceleyecek olursak,

@FacesRenderer ile classimizn renderer ozellikde davranacagini belirtiyoruz ve componentFamily ve rendererType`ni gosteriyoruz, ve classimizi Renderer`den extend ediyoruz, bize gerekli olan kisimlari ovveride edip gerekli degisiklikleri yaptiyoruz.

@Override
public void encodeEnd(FacesContext context, UIComponent component) throws IOException {


Renderer classinin encodeEnd metodunu ovveride ettik cunku bizim icin componentimizin en son nasil davranacagini burada belirttik, metodu icinde kullandiklarimiza gelince.

SingleRowSelect radio = (SingleRowSelect) component

-burada componentimizi daha once olusturdugumuz SingleRowSelect custom component`i tipinde olusturduk. Burada kullandigimiz clientId componentimizin clientId`sini aldik, groupId ile`de bizim olusturdugumuz attribute`in degerin aldik. RadioGroup birazdan bizim olusturacagimiz class, bu classida component gibi olusturduk, cunku radiobutonlarimizdaki degerleri grub halinde kullanip radio butondaki degeri Object turunde almak icin.


ResponseWriter writer = context.getResponseWriter();
writer.startElement("input", component);
budan sonraki kisimlarda ise componentimizi hangi propetylerinin oldugunu degerlerin nasil alinacagini gosteriyoruz, bu bolumleri derinlemesi baska bi makalede paylasacagiz.

Ve RadioGroup ve RadioGroupRenderer clasinin yaziyoruz, bu bolumlerin uzerine fazla deyinmeden gececem, makaleyi cok fazla uzatmamak icin, sorusu olan arkadaslara formda yardimci olmaya calisirim.



=============

package net.aslan.faces.radiobutton;


import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.render.FacesRenderer;


@FacesRenderer(componentFamily = RadioButtonGroup.COMPONENT_FAMILY, rendererType = RadioButtonGroup.RENDERER_TYPE)
public class RadioButtonGroupRenderer extends javax.faces.render.Renderer {

public RadioButtonGroupRenderer() {
super();
}

@Override
public void decode(FacesContext context, UIComponent component) {

RadioButtonGroup group = (RadioButtonGroup) component;
String clientId = group.getClientId(context);
Object[] submittedValue = context.getExternalContext().getRequestParameterValuesMap().get(clientId);
group.setSubmittedValue(submittedValue);
}
}


====================

package net.aslan.faces.radiobutton;


import javax.faces.component.FacesComponent;
import javax.faces.component.UIInput;


@FacesComponent(value = RadioButtonGroup.COMPONENT_TYPE)
public class RadioButtonGroup extends UIInput {

public static final String COMPONENT_FAMILY = "net.aslan.faces.component";
public static final String COMPONENT_TYPE = "net.aslan.faces.component.radiobutton.RadioButtonGroup";
public static final String RENDERER_TYPE = "net.aslan.faces.component.checkbox.RadioButtonGroupRenderer";

public RadioButtonGroup() {
super();
setRendererType(RENDERER_TYPE);
}

@Override
public String getFamily() {
return COMPONENT_FAMILY;
}
}


Bizim icin gerekli olanlar classlar bukadar, bunda sonra yapmamiz gereken, componentimiz icin bi taglib olusturmak ve xml`de gostermek, daha sonrada kullanmak :).



Bunda sonra yapacaklarimiz cok kolay, oncelikle taglib`imizi olusturalim.



net-aslan-taglib.xml





http://www.aslan.net/jsf/component


inputRadiobutton

net.aslan.faces.component.radiobutton.SingleRowSelect


radioGroup

net.aslan.faces.component.radiobutton.RadioButtonGroup




sonra web.xml icerisinde gosterelim..



javax.faces.FACELETS_LIBRARIES/WEB-INF/net-aslan-taglib.xml



uygulamadaki dizin yapisi asagidaki sekilde






hepsi bukadar, simdide facelets page`imde kullanmaya basliyalim.


DataBean.java


import accr.beans.Person;
import accr.beans.PersonRemote;
import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;


@ManagedBean
@SessionScoped
public class DataBean implements Serializable {

@EJB
PersonRemote pr;
private Person selectedPerson;
Object selectedItem[];

public List getPersons() {
return pr.findAll();
}

public String actionEdit() {
String id = (String) selectedItem[0];
selectedPerson = pr.getPerson(new Long(id));
System.out.println("Per : " + selectedPerson.getName());
return "edit";
}

public Object[] getSelectedItem() {
return selectedItem;
}

public void setSelectedItem(Object[] selectedItem) {
System.out.println("Set edildi -----=== ");
this.selectedItem = selectedItem;
}

public Person getSelectedPerson() {
return selectedPerson;
}

public void setSelectedPerson(Person selectedPerson) {
this.selectedPerson = selectedPerson;
}
}


index.xhtml



































edit.xhtml






Edit Person











uygulamanin tamamini, proje halinde dosyalar bolunde bulubilirsiniz.

Yorum ve dusuncelerinizi bekliyorum, Faydali olmasi dilegiyle.

Bir sonraki makaledeki, Jsf 2.0 ile gelen yeniliklerden bahsedecegim..

Degiserek gelismenin dilegilyle...



Ertugrul Aslan

R.I.S.K Company

Baku / Azerbaycan

27 Mart 2010 Cumartesi

Java Ile Asal Sayi

Asagidaki ornekde java ile asal sayilarin nasil bulundugu gosteren bi ornegimiz var
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException {
int a;
System.out.println("Kaca kadar olan asal sayılar bulunsun :");
BufferedReader nesne = new BufferedReader(new InputStreamReader(System.in));
int sayı = Integer.parseInt(nesne.readLine());
for (int i = 2; i < sayı; i++) {
a = 1;
for (int j = 2; j < i; j++) {
if (i % j == 0) {
a = 0;
}
}
if (a == 1) {
System.out.println("" + i);
}
}
}
}

2 Şubat 2010 Salı

Ceturk




CETURK JAVA ve Kariyer Günü

CETURK olarak Çankaya Üniversitesi Uygulamalı Matematik Bilgisayar Bilimleri Topluluğu ile birlikte "JAVA ve Kariyer Günü" etkinliği düzenliyoruz. Etkinlik konusu dahilinde JAVA dünyasındaki kariyer olanaklarından bahsedilecek ve etkinlik sonundaki panelimiz ile bilgi alışverişi gerçekleştirilecektir.Etkinliğe katılım ücretsizdir.
1
Konuşmacılar ve Seminer Konuları:
Kadir Teke - Mehmet Gursul : İş İlanlarında Java

Kenan Sevindik : Java, Kariyer ve Gelecek

Mert Çalışkan : Fikrim Açık, Kodum Açık
Ümit Vardar : JavaFX
Adres:

Çankaya Üniversitesi - Mavi Salon
Saat: 12:00 - 17:00

Kayıt işlemi için bu bağlantıyı kullanabilirsiniz.

27 Ocak 2010 Çarşamba

List`i array`a - array`i liste cevirme

Bu yazimizda Collection`lar altinda bulunan List`i array`a ve array`i de liste cevirez. Bir ornek uzerinde gosterecek olursak,

public static void main(String args[]){

Object object[];
List list = new ArrayList();
// simdi listi arraya cevirelim
object = list.toArray();
// simdide array`i liste cevirelim
list = Arrays.asList(object);
}

Hepsi bukadar : )