Search the FirstSpirit Knowledge Base
Hallo,
ich versuche gerade, im AppCenter Bilder zu registireren, um sie per Drag&Drop in eine FS_REFERENCE-Eingabekomponnte zu ziehen.
Das AppCenter lädt eine HTML-Seite mit Texten und Bildern (per FSM umgesetzt).
Die Registrierung von Texten funktioniert einwandfrei und sie lassen sich per Drag&Drop in die Text-Eingabekomponnten ziehen.
Per Document (browserApplication.getCurrentDocument()) bekommen ich die Nodes (org.w3c.dom.Node) und kann die Texte registireren, indem ich den Node-Value eines Divs auslese.
browserNodeHandler.register((Element) node, node.getFirstChild().getNodeValue().trim());
Wie müsste hier schon der Aufruf aussehen, wenn ein img-Tag in dem Div ist? Bzw. auf was muss konkrett bei einem Bild zugegriffen werden? Brauche ich ein Objekt oder reicht die URL des Bilds für die Registrierung?
<div class="content">
<img src="pfad/zu/bild.jpg">
</div>
Und wie müsste dann, wenn das Bild registriert ist, in der onDrag-Methode der transferAgent aussehen?
public void onDrag(List<String> nodes, DragContext dragContext) {
TransferAgent transferAgent = context.requireSpecialist(TransferAgent.TYPE);
dragContext.addTransferItem(transferAgent.getStringType(), nodes.get(0));
}
Wäre transferAgent.getMediaType(Picture.class) der richtige Aufruf?
Im Einsatz ist FirstSpirit 2018-10.
Danke und viele Grüße
Mark
Ich habe die Drop-Fläche für das Bild nun über ein FS_BUTTON realisiert, auf dem die URL des Bilds fallengelassen werden kann. Anschließend wird das Bild in die Medien-Verwaltung hochgeladen und die FS_REFERENCE-Eingabekomponente mit dem Bild befüllt.
Mittlerweile konnte ich das Bild im AppCenter auslesen und die URL registrieren.
Per URL könnte ich ein Picture oder java.awt.Image erzeugen.
Jedoch weiß ich leider immer noch nicht, welcher de.espirit.firstspirit.ui.gadgets.aspects.transfer.TransferType für die Bilder der richtige ist!? Im AppCenter wird eine HTML-Seite mit Bildern und Texten geladen. Für die Texte fukntioniert das Drag&Drop bereits.
Bei TransferAgent.getMediaType() verstehe ich nicht, wie ich ein Media oder Picture für das Drag&Drop erzeugen kann, ohne gleich ein Medium in der Medien-Verwaltung zu erzeugen. Also wie kann ein temporäres Medium angelegt werden?
dragContext.addTransferItem(transferAgent.getMediaType(Picture.class), media);
Und wie lässt sich bei transferAgent.getExternalType() ein EnhancedFile erzeugen, falls dies der richtige Typ ist?
dragContext.addTransferItem(transferAgent.getExternalType(), enhancedFile);
Wenn ich stattdessen dragContext.setDragImage(image) verwende erhalte ich folgende Fehlermeldung beim Drag:
FSVersion=5.2.181007.77756#3064;JDK=1.8.0_171 64bit Oracle Corporation;OS=Windows 10 10.0 amd64;Date=10.04.2019 22:30:08 (I)
java.lang.NullPointerException
at de.espirit.firstspirit.io.EnhancedFile$Builder.getMimeType(EnhancedFile.java:666)
at de.espirit.firstspirit.io.EnhancedFile$Builder.uri(EnhancedFile.java:611)
at de.espirit.firstspirit.io.EnhancedFile.create(EnhancedFile.java:323)
at de.espirit.firstspirit.client.gui.tree.store.mediastore.MediaDndUtil.getTransferable(MediaDndUtil.java:273)
at de.espirit.firstspirit.ui.gadgets.swing.TransferWrappingCommodityContainer.get(TransferWrappingCommodityContainer.java:79)
at de.espirit.firstspirit.ui.gadgets.swing.reference.ReferenceSwingGadget$9.accept(ReferenceSwingGadget.java:686)
at de.espirit.firstspirit.ui.gadgets.swing.HandlerHostImpl$DropHandlerImpl.validatorsAccept(HandlerHostImpl.java:168)
at de.espirit.firstspirit.ui.gadgets.swing.HandlerHostImpl$DropHandlerImpl.acceptTransfer(HandlerHostImpl.java:152)
at de.espirit.firstspirit.client.datatransfer.DropHandler.dragEnter(DropHandler.java:143)
at java.awt.dnd.DropTarget.dragEnter(Unknown Source)
at sun.awt.dnd.SunDropTargetContextPeer.processEnterMessage(Unknown Source)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEnterEvent(Unknown Source)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(Unknown Source)
at sun.awt.dnd.SunDropTargetEvent.dispatch(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEnterExit(Unknown Source)
at java.awt.LightweightDispatcher.trackDropTargetEnterExit(Unknown Source)
at java.awt.LightweightDispatcher.trackMouseEnterExit(Unknown Source)
at java.awt.LightweightDispatcher.processDropTargetEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.defaultDispatchEvent(AWTDispatchingEventQueue.java:161)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue._dispatchEvent(AWTDispatchingEventQueue.java:138)
at de.espirit.firstspirit.client.AWTDispatchingEventQueue.dispatchEvent(AWTDispatchingEventQueue.java:131)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Vielleicht bin ich auch auf einem falschen Weg und ich bin für jeden Hinweis dankbar, um Bilder aus dem AppCenter in eine FS_REFERENCE-Komponente zu ziehen.
Ich habe die Drop-Fläche für das Bild nun über ein FS_BUTTON realisiert, auf dem die URL des Bilds fallengelassen werden kann. Anschließend wird das Bild in die Medien-Verwaltung hochgeladen und die FS_REFERENCE-Eingabekomponente mit dem Bild befüllt.