Apache Velocity ile Kendi Kod Şablonlarınızı Oluşturun
Yazılım geliştirme süreçlerinde IDE’lerin sıklıkla yapılan işler için otomatik kod oluşturma fonksiyonları bulunur. Bunlardan bazıları getter-setter fonksiyonlarını, constructor’ları, foreach döngülerini oluşturan küçük işlevler olabileceği gibi, veri tabanı yapısını ele alarak, tablo ile ilgili sınıfları oluşturabilen ORM (Object Relation Mapping) araçları gibi gelişmiş özelliklere sahip olabilir. Bu yazımızda Apache Velocity‘i kullanarak nasıl kod şablon oluşturulabileceğini sizlere aktaracağım.
Apache Velocity Nedir?
2000’li yıllarda, ilk Apache Jakarta projeleri arasında geliştirimine başlanan Velocity, Java ortamında kod şablonlarının oluşturulmasını sağlayan bir araçtır. Java Servlet’lerin MVC çatısı altında geliştirimini sağlayan BSD lisanslı WebMacro çatısının, Apache Lisansı’na uyarlanamayacağı konusunda mütabakata varan Geir Magnusson ve Jason van Zyl tarafından yeniden yazıldığından dolayı stabildir ve WebMacro ile oldukça benzerlikler göstermektedir. 2006 yılından beri Apache TLP (Top Level Projects) arasında yer almaktadır.
Kullanım Alanları
Velocity’nin birçok farklı kullanım alanı mevcuttur:
- Web uygulamaları: HTML sayfalarının dinamik olarak işlenmesinde kullanılır. Veriler sayfa içerisine enjekte edilerek kullanıcıya ilgili içeriklerin sunulması sağlanır. Sayfa, VelocityViewServlet veya Velocity’i destekleyen herhangi bir framework kullanılarak işlenebilir.
- Kaynak kodu üretimi: Velocity ile şablonlar kullanılarak Java, SQL ve PostScript kaynak kodlarının üretiminde kullanılır. Velocity’nin bu mantıkla kullanılması ile üretilen birçok açık kaynaklı ve ticari yazılım geliştirme paketleri mevcuttur.
- Otomatik e-postaların üretimi: Birçok uygulama, hesap oluşturma, parola hatırlatma veya otomatik olarak raporların gönderimi gibi işlemler için otomatik e-posta gönderimini gerçekleştirmektedir. Java kodunun içerisine e-postanın direkt olarak gömülmesi yerine, Apache Velocity kullanılarak e-posta şablonu bir metin dosyasında saklanabilir ve tekrar tekrar kullanılabilir.
- XML Dönüştürümü: Velocity’nin sunduğu Anakia adındaki Ant görevi bir XML dosyasını okur ve Velocity şablonu için uygun hale getirir. Yaygın olarak kullanımı için “xdoc” formatındaki yazılım dokümanının, stilli bir HTML sayfası haline getirilmesi örnek olarak verilebilir.
Velocity Nasıl Kullanılır?
Velocity’e güç veren temel eleman VelocityEngine sınıfıdır. Şablon dosyasının okunması, parse edilmesi ve veri modeli ile Velocity şablonunun birleştirilerek içeriğin oluşturulması gibi tüm işlemlerin yürütülmesinde rol alır. İşleyişi basitçe ele almak gerekirse:
- Öncelikle VelocityEngine çalıştırılır.
- Şablon dosyası okunur.
- VelocityContext nesnesine veri modeli konur.
- Şablon ile veriler birleştirilir ve içerik oluşturulur.
Dilerseniz üstteki adımları basit bir Java kodu örneği ile ele alalım:
VelocityEngine velocityEngine = new VelocityEngine(); // VelocityEngine çalıştırılır. velocityEngine.init(); // Şablon dosyası okunur. Template t = velocityEngine.getTemplate("index.vm"); VelocityContext context = new VelocityContext(); // VelocityContext nesnesine veri modeli konur. context.put("isim", "Dünya"); StringWriter writer = new StringWriter(); // Şablon ile veriler birleştirilir ve içerik oluşturulur. t.merge(context, writer); // Oluşan içerik ekrana yazılır. System.out.println(writer.toString());
Şablon olarak index.vm dosyası:
Merhaba $isim
- Not: Üstteki kodun çalışabilmesi için velocity ve velocity-tools bağımlılıklarının projeye dahil edilmesi gereklidir.
Örneğimizde VTL (Velocity Template Language) dilinde index.vm dosyası oluşturarak Merhaba Dünya yazdırdık. Şimdi VTL’in ne olduğuna bir göz atalım.
Velocity Template Language (VTL)
Velocity Template Language (VTL), dinamik içeriğin oluşturulması için kullanılan basit bir dildir. VTL’deki değişken kullanımları $ karakteri ile başlar. if
ve for
gibi komutların kullanılabilmesi için ise ilgili deyimin #
karakteri ile başlaması gereklidir.
Değişken Kullanımları
Velocity’de değişkenlere erişim yapılırken 3 farklı yöntem bulunmaktadır:
- Nesne elemanı ile: Bir nesnenin içerisindeki elemanlara erişim yapılması ile sağlanır. Ayrıca private değişkenlerin de getter metodlarına erişim yapılabilir.
$musteri.adi
- Nesne metodu ile: Bir Java nesnesi içerisindeki metod’dan döndürülen değer aktarımı ile sağlanır.
$musteri.getAdi()
- Değer ataması yolu ile:
#set
ifadesi kullanılarak atama işlemi yapılır.
#set ($message="Merhaba Dünya")
Komut Kullanımları
VTL’de birçok farklı komut bulunmaktadır:
- #set: Daha önce de ankattığımız gibi
#set
ifadesi değişken atamalarında kullanılmaktadır:
#set ($message = "Merhaba Dünya") #set ($customer.name = "Zafer AYAN")
- #if #elseif #else: Bir değişkenin değerine göre değişen içeriklerin üretilmesinde kullanılmaktadır:
#if($personel.gorevi == "Yonetici") <h3> Yönetici </h3> #elseif($personel.gorevi == "Uzman Geliştirici") <h3> Uzman Yazılım Geliştiricisi </h3> #else <h3> Stajyer </h3> #end
- #foreach: Belirli bir nesne listesi üzerindeki elemanlar arasında gezmek için kullanılır:
<ul> #foreach($urun in $urunListesi) <li>$urun</li> #end </ul>
- #include: Statik dosya içeriklerinin ilgili şablona eklenmesi için kullanılır:
#include("kedicik.gif","OkuBeni.txt","index.html")
- #parse: Diğer bir Velocity şablon dosyasının, ilgili şablon içeriğine eklenmesini sağlar:
#parse("DigerTemplateDosyasi.vm")
- #break: #foreach ve #parse ifadeleri içerisinde kullanıldığında, bulunduğu kod bloğu içerisinde kendisinden sonra gelen kodun çalışmasını durdurur:
#foreach($elem in $arr) #if( $elem == 5) #break #end #end
- #macro: Velocity’nin en önemli özelliklerinden biridir. Küçük fonksiyonların oluşturulmasını sağlar. Örnek bir macro’nun oluşturulması aşağıdaki gibidir:
#macro(merhaba $isim) <h1>Merhaba $isim</h1> #end
Kullanımı ise aşağıdaki şekilde yapılır:
#merhaba("Dünya")
Çıktısı ise sizin de tahmin ettiğiniz gibi aşağıdaki şekilde olacaktır:
<h1>Merhaba Dünya</h1>
Sonuç olarak
Apache Velocity projesi bir şablondan otomatik kaynak kod oluşturmak için tam bir biçilmiş kaftan. Bununla beraber Velocity ile birlikte gelen VelocityViewServlet kullanarak bir web uygulaması oluşturabilirsiniz. Gündelik hayatta sürekli oluşturmak durumunda kaldığınız kod parçacıklarını küçük bir Velocity uygulaması oluşturarak otomatize edebilirsiniz.
Eğer sizin de Apache Velocity hakkında sorularınız veya görüşleriniz varsa yorum kısmından bize yazabilirsiniz. Bir sonraki yazımızda görüşmek üzere.