in Android

Adım Adım Eclipse’e Nasıl Eklenti(Plugin) Yazılır?

Giriş

Eclipse OSGI uygulama çatısı üzerine geliştirilmiştir ve bu da Eclipse’in dinamik ve modüler bir yapıya sahip olmasını sağlamıştır.Eklentiler ile Eclipse’in fonksiyonalitelerini arttırabilirsiniz, mesela yeni bir menü ekleyebilirsiniz. Bu makalede Eclipse için nasıl eklenti yazılabileceği anlatılacaktır.Bu makale temel Eclipse ve Java bilgisi olanlar içindir.

Başlamadan önce gerekli olan kurulumlar:

  1. Eclipse Classic (Bu makalede Eclipse Indigo 3.7.2 kullanılmıştır). Eclipse indirmek için www.eclipse.org sitesine gidebilirsiniz.
  2. Eclipse Plug-in Development Environment ve Eclipse RCP Plug-in Developer Resources paketi. Bu paketin olup olmadığını anlamak için üst menüden File->New->Project seçeneğini seçiniz. Açılan pencerede Plug-in Project ya da Plug-in Development göremiyorsanız bu paket yüklü değildir demektir. . Eğer bu paket hazır olarak indirdiğiniz Eclipse sürümünde yoksa Eclipse üst menüden Help->Install New Software basınız. Açılan pencerede Work with alanı için “The Eclipse Project Updates – http://download.eclipse.org/eclipse/updates/3.7” seçiniz ve arama kısmına “plug” yazınız. Aşağıdaki kutucuklardan Group items by category işaretli olmamasına dikkat ediniz. . Eclipse Plug-in Development Environment yanındaki kutucuğu seçiniz ve Next düğmesine basarak kurulumu tamamlayınız. Aynı şekilde Eclipse RCP Plug-in Developer Resources paketini de kurmanız gerekmektedir.

Merhaba Dünya Eklentisi

Öncelikle Merhaba Dünya eklentisi yazarak bir giriş yapalım.

Eclipse üst menüden File->New->Project seçiniz ve açılan pencereden Plug-in Project seçiniz ve Next düğmesine basınız.

Açılan pencerede proje ismine helloplugin yazınız ve Next düğmesine basınız.

Açılan pencerede bir değişiklik yapmadan Next düğmesine basınız.

Açılan pencerede Hello,World Command şablonunu seçiniz ve Finish düğmesine basınız.

Bastıktan sonra Eclipse size Plug-in perspektifini açmak isteyip istemediğinizi soracaktır.Kabul ettikten sonra projeniz oluşturulacaktır.

Üst resimde görülen MANIFEST.MF dosyasını sağ tıklayıp Run As->Eclipse Application seçiniz.Bu işlem ile plugin’in yüklenmiş olduğu bir Eclipse açılacaktır ve üst menüde plugini görebilirsiniz.

İçerik Menülerine Menü Elemanı Ekleyen Eklenti

Makalenin bu kısmında Package Explorer görünümünün sağ tıklama menüsüne bir menü elemanı ekleyeceğiz. Bu menü elemanı Java dosyaları sağ tıklandığında görünecek ve tıklandığında seçilmiş olan java dosyasının satır sayısını hesaplayıp gösterecek.

Eclipse’te menü elemanı eklemek istediğiniz menü ya da araçların bir ID’si vardır. Mesela Package Explorer’ın ID’si şudur : org.eclipse.jdt.ui.PackageExplorer. Bu ID’leri Menü Spy kullanarak öğrenebilirsiniz. Menü Spy kullanmak için Eclipse’te ID’sini öğrenmek istediğiniz yere fare ile geliniz ve alt+shift+F1 kombinasyonuna basınız:

Eklentimizi yapmak için şimdi tekrar yeni bir Eclipse Plug-in Projesi oluşturalım ve adını kodsayici verelim. Şablon seçme sayfasına kadar birşey değiştirmeden gelelim ve şablon seçme sayfasında Create a plug-in using one of the templates kutucuğundaki işareti kaldıralım ve Finish düğmesine basalım :

Proje oluşturulacak ve projenin plugin.xml dosyası açılacaktır. Şimdi bu eklentiyi geliştirmek için gereken bazı bağımlılıkları ekleyeceğiz. plugin.xml dosyasında Dependencies sekmesini seçiniz.

Açılan pencerede Required Plug-ins bölümünde Add düğmesine basınız. Açılan pencerede arama kısmına org.eclipse.jdt.core yazınız ve Matching Items kısmında org.eclipse.jdt.core seçiniz ve OK düğmesine basınız:

Aynı şekilde org.eclipse.core.resources ve org.eclipse.core.expressions bağımlılığını da ekleyiniz.

Şimdi menü elemanımızın çalıştıracağı komutu oluşturacağız. Extensions sekmesini seçiniz ve Add düğmesine basınız. Açılan pencerede Extension Point Filter kısmına org.eclipse.ui.commands yazınız ve alttaki listeden org.eclipse.ui.commands seçiniz ve Finish düğmesine basınız.

org.eclipse.ui.commands eklenecektir. org.eclipse.ui.commands elemanını sağ tıklayarak New -> command seçeneğini seçiniz.

Açılan pencerede id olarak kodsayici.count, name olarak Count ve defaultHandler olarak kodsayici.Count giriniz.

defaultHandler  komutumuzun yapacağı işi barındıran sınıf olacaktır. Bu sınıfı sonraki adımlarımızda oluşturacağız.Şimdi bu komutu menüye eklemek için gerekli olan adımlar anlatılacaktır. Extensions sekmesini seçiniz ve Add düğmesine basınız. Açılan pencerede Extension Point Filter kısmına org.eclipse.ui.menus yazınız ve alttaki listeden org.eclipse.ui.menus seçiniz ve Finish düğmesine basınız.

org.eclipse.ui.menuss eklenecektir. org.eclipse.ui.menus elemanını sağ tıklayarak New -> menuContribution seçeneğini seçiniz.

Açılan pencerede locationURI olarak popup:org.eclipse.jdt.ui.PackageExplorer giriniz. Popup menüde eklediğimiz için başına popup yazdık. popup yerine toolbar,menu gibi seçenekler de mevcut. Menüyü komutumuza bağlamak için eklediğimiz menuContribution sağ tıklayıp New->command seçiniz.

Açılan pencerede commandId olarak daha önce oluşturduğumuz komutun ID’si olan kodsayici.counter ve label olarak da Count giriniz. Label olarak girdiğimiz değer menüde görünecek olan isimdir.

Şimdi menü elemanının Java dosyası sağ tıklandığında görünmesi için gerekli adımlar anlatılacaktır.

menuContribution altındaki Count sağ tıklanıp New->visibleWhen seçeneği seçilir.

visibleWhen seçeneği oluşur ve visibleWhen sağ tıklanır ve New->with seçeneği seçilir.

Açılan pencerede variable değeri olarak activemenuSelection giriniz.

Sol paneldeki activeMenuSelection seçiniz ve sağ tıklayınız. Açılan popup’tan New->iterate seçiniz.

Açılan pencerede operator olarak or ve ifEmpty olarak false seçiniz.

Sol paneldeki iterate sağ tıklanır.Açılan pencereden New->adapt seçeneğini seçiniz.

Açılan pencerede type olarak org.eclipse.jdt.core.ICompilationUnit giriniz.

Bu adımlarda activemenuSelection isimli bir değişken oluşturduk ve menu elemanları üzerinde gezmesini söylemiş olduk (iterate). Eğer seçilen dosya org.eclipse.jdt.core.ICompilationUnit tipinden ise menü elemanının görülebilir olmasını, değilse olmamasını söylemiş olduk. activemenuSelection değişkeni daha önceden tanımlanmış bir değişkendir. Bu değişkenlere http://wiki.eclipse.org/Command_Core_Expressions adresinden ulaşabilirsiniz.

Sonuç olarak oluşan plugin.xml sekmesini tıkladığınızda şu şekilde olmalıdır:

[sourcecode language=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.ui.commands">
<command
defaultHandler="kodsayici.Counter"
id="kodsayici.counter"
name="Count">
</command>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:org.eclipse.jdt.ui.PackageExplorer">
<command
commandId="kodsayici.counter"
label="Count"
style="push">
<visibleWhen
checkEnabled="false">
<with
variable="activeMenuSelection">
<iterate
ifEmpty="false"
operator="or">
<adapt
type="org.eclipse.jdt.core.ICompilationUnit">
</adapt>
</iterate>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>

</plugin>
[/sourcecode]

Şimdi Counter isimli handler sınıfını oluşturmamız gerekiyor. Belirttiğimiz paket altına bu sınıfı oluşturalım. Bu sınıf sağ tıklanan Java dosyasını okuyarak satır sayısını hesaplamaktadır.

[sourcecode language=”java”]
package kodsayici;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;

public class Counter extends AbstractHandler {

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {

IStructuredSelection selection = (IStructuredSelection) HandlerUtil
.getActiveSite(event).getSelectionProvider().getSelection();
if (selection == null) {
return null;
}
Object firstElement = selection.getFirstElement();
int lineCount = 0;
if (firstElement instanceof ICompilationUnit) {
ICompilationUnit cu = (ICompilationUnit) firstElement;
try {
String path = cu.getCorrespondingResource().getRawLocation().toString();
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(path));
} catch (FileNotFoundException e1) {

e1.printStackTrace();
}
String thisLine;
try {
while ((thisLine = br.readLine()) != null) {
lineCount++;
}

MessageDialog.openInformation(HandlerUtil.getActiveShell(event),
"Information", "Satır Sayısı " + lineCount);
} catch (IOException e) {

e.printStackTrace();
}

} catch (JavaModelException e) {

e.printStackTrace();
}
}
else
{
MessageDialog.openInformation(HandlerUtil.getActiveShell(event),
"Error", "Java dosyası değil");
}

return null;
}

}
[/sourcecode]

MANIFEST.MF dosyasını sağ tıklayıp Run As->Eclipse Application seçiniz.Bu işlem ile plugin’in yüklenmiş olduğu bir Eclipse açılacaktır ve package explorer görünümünde bir Java dosyasını sağ tıkladığınızda Count isimli menü elemanını görebileceksiniz.

Murat AYDIN

Related Posts

Written By:

Murat Aydin is a senior software engineer in a company that develops software technologies for defense systems, and is an enthusiastic Android developer. He has several Android applications in Google Play. He is a Sun Certified Java Developer and has eight years of experience in developing web based applications using Java technologies, and desktop and engineering applications using .Net technologies. Murat Aydin earned his BSc degree in Computer Engineering from METU (Middle East Technical University) and his MSc degree in Software Engineering from METU. He is a member of GDG Ankara (Google Developer Group Ankara, www.gdgankara.org), who organize several Android events in GDG Ankara, such as Android Developer Days. (www.androiddeveloperdays.com)

One Comment

  1. Miraç June 2, 2012 Reply

Add a Comment

Your email address will not be published. Required fields are marked *