2011-01-09 13 views
0

Ich schreibe etwas Eclipse EMF-Code und möchte den Inhalt eines EObject drucken (nicht auf Festplatte speichern). HierDrucken Sie ein EObject?

ist das, was ich versuche:

public static void print(EObject obj) { 
    Resource eResource = obj.eResource(); 
    try { 
     eResource.save(System.out, null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

aber das gibt eine Nullpointer. Ich habe dies stattdessen versucht:

public static void print(EObject obj) { 
    ResourceSet resourceSet = new ResourceSetImpl(); 
    resourceSet.getResourceFactoryRegistry().getProtocolToFactoryMap() 
     .put("*", new XMIResourceFactoryImpl()); 
    Resource resource = resourceSet.createResource(URI.createURI("dummyfile.xml")); 
    resource.getContents().add(obj); 
    try { 
     resource.save(System.out, null); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
    } 

Dies funktioniert, aber ist es nicht möglich, Bildschirm zu drucken, ohne eine Dummy-URI spezifiziert ??

Antwort

2

Aktualisiert EcoreUtil.copy()

überprüfen diesen Code enthalten.

Resource res = new XMLResourceImpl(); 
res.getContents().add(EcoreUtil.copy(obj)); 
try { 
    resource.save(System.out, null); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

Wenn das fehlschlägt, dann ja müssen Sie eine Dummy-URI

Resource res = new XMLResourceImpl (URI.createURI("dummyfile.xml")); 
res.getContents().add(EcoreUtil.copy(obj)); 
try { 
    resource.save(System.out, null); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 
+0

Danke das funktioniert! Ich muss nur eine Kopie von meinem obj hinzufügen, sonst ist es nach dem Ausdruck gegangen: res.getContents(). Add (EcoreUtil.copy (obj)); – u123

+0

@tul Ich werde den Code aktualisieren. Denken Sie daran, EMF ist nur ein Framework, so dass all diese Objekte von Implementierungen unterstützt werden. Ich würde vermuten, dass es einen Null-Implementierungswert gibt, den EcoreUtil ersetzt. –

0

Hm, wenn ich eine Kopie übergeben:

Resource res = new XMLResourceImpl(); 
res.getContents().add(ECoreUtil.copy(obj)); 
try { 
    resource.save(System.out, null); 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 
} 

einige der XMI-Attribute werden nicht gedruckt. Aber wenn ich die obige Methode mehrmals aufrufen und keine Kopie überlasse, bekomme ich eine NullPointerException. Ich schätze, ich verstehe hier nicht eine grundlegende EMF/Containment-Funktionalität?

So ist meine aktualisierte Frage ist:

Ist es möglich, ein FULL EObject Modell ohne Änderung des Inhalts, wenn das Modell in den folgenden Code verwendet wird, drucken?