2016-04-07 12 views
1

Bir ağı EMF ile modellemeye çalışıyorum. Ağ, birbirine bağlı düğümlerden oluşmalıdır. Her düğümün diğerlerine, bir ağ ağı gibi bir veya daha fazla bağlantısı olmalıdır.EMF'de kendi kendini referanslayan düğümleri modellemek ve bunları ECP ile düzenlemek

Model, EMF İstemci Platformları (ECP) Demo Uygulaması tarafından düzenlenebilir olmalıdır. Kullanıcı düğümler oluşturduğunda, ECP model-kaşifinde, bağlantıları diğer düğümlere, tercihen bir listeye kurabilir.

İlk denemede bir öz-referans vardı, ama sorun iki yönlü bir öz referans yok. Bu, karşıt düğümden bağlantıyı görmemekle sonuçlanır.

Bir sonraki düşüncem başka bir soruna yol açan bir ara bağlantı sınıfı kullanmaktı. Model-explorer'da görünen bir bağlantı sınıfı olmadan bu bağlantıyı otomatik olarak oluşturmak istiyorum. Oluşturduğum ECP demo uygulamasında değil, oluşturulan EMF görüntüleyicide elde etmek mümkün olurdu.

Üçüncü Fikir: Son düşünceyi çözmeyi düşünebilmemin tek yolu, oradaki bağlantı sınıfını düzenlemek için düğüm görünümünde bir tableControl kullanıyor. Ama sonra model-explorer bağlantı sınıfını gizleme sorunu kalır ve bağlantı sınıfı proje sınıfında (en üst düzey) görünür ve kendi sınıflarında değil (benim durumumda bir ağ sınıfı).

Doe'nin herhangi bir fikri var, benim problemlerimi nasıl çözebilirim?

düzenleme: ilave bilgi düğümler arasındaki

bağlantıları tanımı tam dubleks göredir. Ve sonra grafik en kısa yol algoritması için girdi olarak kullanılmalıdır.

cevap

1

İlk denemeniz iyi olanıdır. Aslında Ecore’da zıt model olabilirsiniz. Bunu yapmak için, iki EReferences modelini aynı nesneye (yani iki refleks referansı) doğru modellemelisiniz, ardından EReference ürününüzden birinin eOpposite özelliğini diğerine ayarlayın. Bu (eOpposite değeri unutmayın) gibi görünüyor, Ecore-XMI yılında https://repository.genmymodel.com/vincent.aranega/NodeGraph

: Burada

eOpposite seti ile basit metamodel olan

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZhv1pEeW9zv77lynsJg" 
    name="references" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZiv1pEeW9zv77lynsJg"/> 

<eStructuralFeatures xsi:type="ecore:EReference" xmi:id="_pwXZiv1pEeW9zv77lynsJg" 
    name="relatives" upperBound="-1" eType="#_pwXZg_1pEeW9zv77lynsJg" eOpposite="#_pwXZhv1pEeW9zv77lynsJg" /> 

bu metamodel ile, mümkün Birçok Node içeren bir Graph oluşturmak için. Her düğüm reference başka düğüm olabilir. B adlı başka bir referansa bir NodeA ise,B toplaması A ile otomatik olarak güncelleştirilir.

+0

Yön için teşekkürler. Ama şimdi bir giriş ve çıkış bağlantısı gibi. Referansları akrabalara otomatik olarak eklemek iyi bir fikirdir (oluşturulan kodda), böylece sadece referanslardan birini kullanarak grafiğin içinden geçebilirim. – zumbie

+0

ou unuttum: ve eğer öyleyse, bu çifte eklentiyi uygulamak için yer neresi olurdu (veya referans listelerinin daha iyi senkronizasyonu). BTW: orijinal soru cevaplandı, ben de seninkini işaretliyorum. Tekrar teşekkürler. – zumbie

+0

İhtiyacınız doğru olduğundan emin değilim. Size verdiğim çözümle, sadece "referanslar" koleksiyonunu kullanarak grafiğin içinden geçebilirsiniz.İki koleksiyon otomatik olarak senkronize edilir, eğer iki koleksiyondan birine bir eleman koyarsanız, diğeri güncellenir. –

İlgili konular