You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VLazyInitItemIdentifiers.java 1.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. *
  3. */
  4. package com.vaadin.terminal.gwt.client.ui.dd;
  5. import java.util.HashSet;
  6. import com.vaadin.terminal.gwt.client.UIDL;
  7. /**
  8. *
  9. */
  10. final public class VLazyInitItemIdentifiers extends VAcceptCriterion {
  11. private boolean loaded = false;
  12. private HashSet<String> hashSet;
  13. private VDragEvent lastDragEvent;
  14. @Override
  15. public void accept(final VDragEvent drag, UIDL configuration,
  16. final VAcceptCallback callback) {
  17. if (lastDragEvent == null || lastDragEvent != drag) {
  18. loaded = false;
  19. lastDragEvent = drag;
  20. }
  21. if (loaded) {
  22. Object object = drag.getDropDetails().get("itemIdOver");
  23. if (hashSet.contains(object)) {
  24. callback.accepted(drag);
  25. }
  26. } else {
  27. VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
  28. public void handleResponse(boolean accepted, UIDL response) {
  29. hashSet = new HashSet<String>();
  30. String[] stringArrayAttribute = response
  31. .getStringArrayAttribute("allowedIds");
  32. for (int i = 0; i < stringArrayAttribute.length; i++) {
  33. hashSet.add(stringArrayAttribute[i]);
  34. }
  35. loaded = true;
  36. if (accepted) {
  37. callback.accepted(drag);
  38. }
  39. }
  40. };
  41. VDragAndDropManager.get().visitServer(acceptCallback);
  42. }
  43. }
  44. @Override
  45. public boolean needsServerSideCheck(VDragEvent drag, UIDL criterioUIDL) {
  46. return loaded;
  47. }
  48. @Override
  49. public boolean validates(VDragEvent drag, UIDL configuration) {
  50. return false; // not used is this implementation
  51. }
  52. }