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.

VMediaBasePaintable.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  6. import com.vaadin.terminal.gwt.client.UIDL;
  7. import com.vaadin.terminal.gwt.client.Util;
  8. public abstract class VMediaBasePaintable extends AbstractComponentConnector {
  9. public static final String TAG_SOURCE = "src";
  10. public static final String ATTR_PAUSE = "pause";
  11. public static final String ATTR_PLAY = "play";
  12. public static final String ATTR_MUTED = "muted";
  13. public static final String ATTR_CONTROLS = "ctrl";
  14. public static final String ATTR_AUTOPLAY = "auto";
  15. public static final String ATTR_RESOURCE = "res";
  16. public static final String ATTR_RESOURCE_TYPE = "type";
  17. public static final String ATTR_HTML = "html";
  18. public static final String ATTR_ALT_TEXT = "alt";
  19. @Override
  20. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  21. super.updateFromUIDL(uidl, client);
  22. if (!isRealUpdate(uidl)) {
  23. return;
  24. }
  25. getWidget().setControls(shouldShowControls(uidl));
  26. getWidget().setAutoplay(shouldAutoplay(uidl));
  27. getWidget().setMuted(isMediaMuted(uidl));
  28. // Add all sources
  29. for (int ix = 0; ix < uidl.getChildCount(); ix++) {
  30. UIDL child = uidl.getChildUIDL(ix);
  31. if (TAG_SOURCE.equals(child.getTag())) {
  32. getWidget().addSource(getSourceUrl(child),
  33. getSourceType(child));
  34. }
  35. }
  36. setAltText(uidl);
  37. evalPauseCommand(uidl);
  38. evalPlayCommand(uidl);
  39. }
  40. protected boolean shouldShowControls(UIDL uidl) {
  41. return uidl.getBooleanAttribute(ATTR_CONTROLS);
  42. }
  43. private boolean shouldAutoplay(UIDL uidl) {
  44. return uidl.getBooleanAttribute(ATTR_AUTOPLAY);
  45. }
  46. private boolean isMediaMuted(UIDL uidl) {
  47. return uidl.getBooleanAttribute(ATTR_MUTED);
  48. }
  49. private boolean allowHtmlContent(UIDL uidl) {
  50. return uidl.getBooleanAttribute(ATTR_HTML);
  51. }
  52. private void evalPlayCommand(UIDL uidl) {
  53. if (uidl.hasAttribute(ATTR_PLAY)) {
  54. getWidget().play();
  55. }
  56. }
  57. private void evalPauseCommand(UIDL uidl) {
  58. if (uidl.hasAttribute(ATTR_PAUSE)) {
  59. getWidget().pause();
  60. }
  61. }
  62. @Override
  63. public VMediaBase getWidget() {
  64. return (VMediaBase) super.getWidget();
  65. }
  66. /**
  67. * @param uidl
  68. * @return the URL of a resource to be used as a source for the media
  69. */
  70. private String getSourceUrl(UIDL uidl) {
  71. String url = getConnection().translateVaadinUri(
  72. uidl.getStringAttribute(VMediaBasePaintable.ATTR_RESOURCE));
  73. if (url == null) {
  74. return "";
  75. }
  76. return url;
  77. }
  78. /**
  79. * @param uidl
  80. * @return the mime type of the media
  81. */
  82. private String getSourceType(UIDL uidl) {
  83. return uidl.getStringAttribute(VMediaBasePaintable.ATTR_RESOURCE_TYPE);
  84. }
  85. private void setAltText(UIDL uidl) {
  86. String alt = uidl.getStringAttribute(VMediaBasePaintable.ATTR_ALT_TEXT);
  87. if (alt == null || "".equals(alt)) {
  88. alt = getWidget().getDefaultAltHtml();
  89. } else if (!allowHtmlContent(uidl)) {
  90. alt = Util.escapeHTML(alt);
  91. }
  92. getWidget().setAltText(alt);
  93. }
  94. }