2009-09-03 18 views
6

मैं एक आरसीपी अनुप्रयोग में ग्रहण के डिफ़ॉल्ट एक्सएमएल संपादक (org.eclipse.wst.xml.ui) का उपयोग करना चाहता हूं। मुझे वर्तमान में खुली एक्सएमएल फाइल के डीओएम को पढ़ने की जरूरत है। प्लगइन कोई विस्तार बिंदु प्रदान नहीं करता है, इसलिए मैं आंतरिक कक्षाओं तक पहुंचने की कोशिश कर रहा हूं। मुझे पता है कि मुझे आंतरिक कक्षाओं तक नहीं पहुंचना चाहिए, लेकिन मेरे पास दूसरा विकल्प नहीं है।ग्रहण आरसीपी: प्लगइन के आंतरिक वर्गों तक कैसे पहुंचे?

मेरा दृष्टिकोण प्लगइन से डेटा पढ़ने में सक्षम होने के लिए एक टुकड़ा और विस्तार बिंदु बनाना है। मैं प्लगइन को पुन: संकलित नहीं करने की कोशिश कर रहा हूं, इसलिए मैंने सोचा कि एक टुकड़ा आवश्यक था। मैं सिर्फ इसे लोड करना चाहता हूं और रनटाइम पर डेटा निकालना चाहता हूं।

तो, मेरा सवाल है: क्या प्लगइन के वर्गों तक पहुंचने का कोई और तरीका है? यदि हां, तो कैसे? किसी भी विधि के लिए कोई ट्यूटोरियल, दस्तावेज़ पृष्ठ या उपयोगी लिंक स्वागत है।

उत्तर

4

चूंकि किसी ने भी मेरे प्रश्न का उत्तर नहीं दिया और मुझे लंबी खोजों के बाद जवाब मिला, अगर मैं इस समस्या में टक्कर डालता हूं तो मैं दूसरों के जवाब का उत्तर दूंगा।

रनटाइम पर प्लगइन तक पहुंचने के लिए आपको उस प्लगइन में संलग्न और विस्तार बिंदु और एक एक्सटेंशन को जोड़ना होगा जिसे आप एक्सेस करने का प्रयास कर रहे हैं।

एक टुकड़े का उपयोग करके प्लगइन में कक्षाएं जोड़ना अनुशंसित नहीं है यदि आप प्लगइन के बाहर से उन कक्षाओं तक पहुंच बनाना चाहते हैं।

तो, इसके लिए सबसे अच्छा समाधान सीवीएस रिपोजिटरी से प्लगइन स्रोत प्राप्त करना और सीधे प्लगइन के स्रोत में संशोधन करना है। कार्यक्षमता के लिए विस्तार बिंदु, एक्सटेंशन और कोड जोड़ें।

ट्यूटोरियल:

1

मैं इस तरह XMLMultiPageEditorPart विस्तार समाप्त हो गया:

public class MultiPageEditor extends XMLMultiPageEditorPart implements 
     IResourceChangeListener { 

    @Override 
    public void resourceChanged(IResourceChangeEvent event) { 
     // TODO Auto-generated method stub 
     setActivePage(3); 
    } 

    public Document getDOM() { 
     int activePageIndex = getActivePage(); 

     setActivePage(1); 
     StructuredTextEditor fTextEditor = (StructuredTextEditor) getSelectedPage(); 
     IDocument document = fTextEditor.getDocumentProvider().getDocument(
       fTextEditor.getEditorInput()); 
     IStructuredModel model = StructuredModelManager.getModelManager() 
       .getExistingModelForRead(document); 
     Document modelDocument = null; 
     try { 
      if (model instanceof IDOMModel) { 
       // cast the structured model to a DOM Model 
       modelDocument = (Document) (((IDOMModel) model).getDocument()); 
      } 
     } finally { 
      if (model != null) { 
       model.releaseFromRead(); 
      } 
     } 
     setActivePage(activePageIndex); 
     return modelDocument; 
    } 
} 

यह एक साफ कार्यान्वयन नहीं है, लेकिन यह काम किया जाता है।

संबंधित मुद्दे