package com.explicatis.ext_token_field.client;
import com.explicatis.ext_token_field.shared.DropTargetType;
import com.explicatis.ext_token_field.shared.ExtTokenFieldServerRpc;
import com.explicatis.ext_token_field.shared.Token;
import com.google.gwt.event.dom.client.DragLeaveEvent;
import com.google.gwt.event.dom.client.DragOverEvent;
import com.google.gwt.event.dom.client.DropEvent;
import com.google.gwt.user.client.ui.SimplePanel;
public class DropTargetWidget extends SimplePanel
{
public static final String DROP_TARGET_CLASS_NAME = "token-drop-target";
public static final String HIGHLIGHTED_CLASS_NAME = "highlighted";
private final DropTargetType type;
private final Token token;
private final ExtTokenFieldWidget fieldWidget;
public DropTargetWidget(ExtTokenFieldWidget fieldWidget, DropTargetType type, Token token)
{
this.fieldWidget = fieldWidget;
this.type = type;
this.token = token;
addStyleName(DROP_TARGET_CLASS_NAME);
initDragOverHandler();
initDragLeaveHandler();
initDropHandler();
}
private void setHighlighted(boolean value)
{
if (value)
{
addStyleName(HIGHLIGHTED_CLASS_NAME);
}
else
{
removeStyleName(HIGHLIGHTED_CLASS_NAME);
}
}
private void wasDropped(String sourceTokenId)
{
Long sourceTokenIdLong = Long.valueOf(sourceTokenId);
wasDropped(sourceTokenIdLong);
}
protected void wasDropped(long sourceTokenId)
{
ExtTokenFieldServerRpc serverRpc = fieldWidget.getServerRpc();
Token sourceToken = fieldWidget.findTokenById(sourceTokenId);
boolean sourceIsTarget = sourceToken.equals(token);
if (sourceIsTarget)
return;
serverRpc.tokenDroped(sourceToken, token, type);
}
private void initDropHandler()
{
addDomHandler(event -> {
String sourcetokenid = event.getData(TokenWidget.SOURCE_TOKEN_ID_PROPERTY);
wasDropped(sourcetokenid);
setHighlighted(false);
}, DropEvent.getType());
}
private void initDragLeaveHandler()
{
addDomHandler(event -> setHighlighted(false), DragLeaveEvent.getType());
}
private void initDragOverHandler()
{
addDomHandler(event -> setHighlighted(true), DragOverEvent.getType());
}
}