From: Mathieu Baudier Date: Tue, 18 Oct 2022 08:11:46 +0000 (+0200) Subject: Move SWT components to their subdirectory X-Git-Tag: v2.3.8~15 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=d917d2b10162a29cddaf8c81c362efa37abcaab9 Move SWT components to their subdirectory --- diff --git a/Makefile b/Makefile index 35a3916..2d05ffd 100644 --- a/Makefile +++ b/Makefile @@ -10,11 +10,11 @@ org.argeo.app.api \ org.argeo.app.core \ org.argeo.app.servlet.odk \ org.argeo.app.servlet.publish \ -org.argeo.app.swt \ -org.argeo.app.ui \ org.argeo.app.theme.default \ org.argeo.app.profile.acr.fs \ org.argeo.app.profile.acr.jcr \ +swt/org.argeo.app.swt \ +swt/org.argeo.app.ui \ A2_OUTPUT = $(SDK_BUILD_BASE)/a2 A2_BASE = $(A2_OUTPUT) diff --git a/org.argeo.app.swt/.classpath b/org.argeo.app.swt/.classpath deleted file mode 100644 index 81fe078..0000000 --- a/org.argeo.app.swt/.classpath +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/org.argeo.app.swt/.project b/org.argeo.app.swt/.project deleted file mode 100644 index 11c6368..0000000 --- a/org.argeo.app.swt/.project +++ /dev/null @@ -1,28 +0,0 @@ - - - org.argeo.app.swt - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.pde.ManifestBuilder - - - - - org.eclipse.pde.SchemaBuilder - - - - - - org.eclipse.pde.PluginNature - org.eclipse.jdt.core.javanature - - diff --git a/org.argeo.app.swt/bnd.bnd b/org.argeo.app.swt/bnd.bnd deleted file mode 100644 index bbc81c5..0000000 --- a/org.argeo.app.swt/bnd.bnd +++ /dev/null @@ -1,7 +0,0 @@ -Import-Package:\ -org.eclipse.swt,\ -org.argeo.util.naming,\ -org.argeo.api.cms.ux,\ -org.argeo.cms.ux.acr,\ -org.argeo.app.api,\ -* \ No newline at end of file diff --git a/org.argeo.app.swt/build.properties b/org.argeo.app.swt/build.properties deleted file mode 100644 index 34d2e4d..0000000 --- a/org.argeo.app.swt/build.properties +++ /dev/null @@ -1,4 +0,0 @@ -source.. = src/ -output.. = bin/ -bin.includes = META-INF/,\ - . diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImageManager.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImageManager.java deleted file mode 100644 index 5fe67e1..0000000 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImageManager.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.argeo.app.swt.docbook; - -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; - -import org.argeo.api.acr.Content; -import org.argeo.api.acr.DName; -import org.argeo.api.acr.spi.ProvidedContent; -import org.argeo.api.cms.ux.Cms2DSize; -import org.argeo.api.cms.ux.CmsImageManager; -import org.argeo.app.api.EntityNames; -import org.argeo.app.api.EntityType; -import org.argeo.app.docbook.DbkAttr; -import org.argeo.app.docbook.DbkType; -import org.argeo.cms.acr.SvgAttrs; -import org.argeo.cms.swt.acr.AcrSwtImageManager; -import org.eclipse.swt.graphics.ImageData; - -/** Add DocBook images support to {@link CmsImageManager}. */ -public class DbkImageManager extends AcrSwtImageManager { - private Content baseFolder = null; - - public DbkImageManager(Content baseFolder) { - this.baseFolder = baseFolder; - } - - Content getImageDataNode(Content mediaObjectNode) { - return mediaObjectNode.child(DbkType.imageobject).child(DbkType.imagedata); - } - -// @Override -// public Binary getImageBinary(Node node) { -// Node fileNode = null; -// if (DbkUtils.isDbk(node, DbkType.mediaobject)) { -// Node imageDataNode = getImageDataNode(node); -// fileNode = getFileNode(imageDataNode); -// } -// try { -// if (node.isNodeType(NT_FILE)) { -// fileNode = node; -// } -// if (fileNode != null) { -// return node.getNode(JCR_CONTENT).getProperty(JCR_DATA).getBinary(); -// } else { -// return null; -// } -// } catch (RepositoryException e) { -// throw new JcrException(e); -// } -// } - - public Cms2DSize getImageSize(Content mediaObjectNode) { - Content imageDataNode = getImageDataNode(mediaObjectNode); - Content fileNode = getFileNode(imageDataNode); - if (fileNode == null) - return new Cms2DSize(0, 0); - Cms2DSize intrinsicSize; - if (fileNode.containsKey(SvgAttrs.width) && fileNode.containsKey(SvgAttrs.height)) { - int width = fileNode.get(SvgAttrs.width, Integer.class).orElseThrow(); - int height = fileNode.get(SvgAttrs.height, Integer.class).orElseThrow(); - intrinsicSize = new Cms2DSize(width, height); - } else { - try (InputStream in = fileNode.open(InputStream.class)) { - ImageData id = new ImageData(in); - intrinsicSize = updateSize(fileNode, id); - } catch (IOException e) { - throw new RuntimeException("Cannot load file " + fileNode, e); - } - } - // TODO interpret image data infos - return intrinsicSize; - } - - protected Cms2DSize updateSize(Content fileNode, ImageData id) { - fileNode.addContentClasses(EntityType.box.qName()); - fileNode.put(SvgAttrs.width, id.width); - fileNode.put(SvgAttrs.height, id.height); - return new Cms2DSize(id.width, id.height); - } - -// @Override -// protected void processNewImageFile(Content mediaObjectNode, Content fileNode, ImageData id) throws IOException { -// Node imageDataNode = getImageDataNode(mediaObjectNode); -// updateSize(fileNode, id); -// String filePath = fileNode.getPath(); -// String relPath = filePath.substring(baseFolder.getPath().length() + 1); -// imageDataNode.setProperty(DbkAttr.fileref.name(), relPath); -// } - - @Override - public String getImageUrl(Content mediaObjectNode) { - Content imageDataNode = getImageDataNode(mediaObjectNode); - // TODO factorise - String fileref = imageDataNode.get(DbkAttr.fileref, String.class).orElse(null); - if (fileref == null) - return null; - URI fileUri; - try { - // FIXME it messes up with the '/' - fileUri = new URI(URLEncoder.encode(fileref, StandardCharsets.UTF_8.toString())); - } catch (URISyntaxException | UnsupportedEncodingException e) { - throw new IllegalArgumentException("File ref in " + imageDataNode + " is badly formatted", e); - } - if (fileUri.getScheme() != null) - return fileUri.toString(); - // local - Content fileNode = getFileNode(imageDataNode); - String url = getDataPathForUrl(fileNode); - return url; - } - - protected Content getFileNode(Content imageDataNode) { - // FIXME make URL use case more robust - String fileref = imageDataNode.get(DbkAttr.fileref, String.class).orElse(null); - if (fileref == null) - return null; - return ((ProvidedContent) baseFolder).getContent(fileref); - } - - protected Content getMediaFolder() { - // TODO check edition status - Content mediaFolder = baseFolder.anyOrAddChild(EntityNames.MEDIA, DName.collection.qName()); - return mediaFolder; - } -} diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImg.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImg.java deleted file mode 100644 index 9984209..0000000 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkImg.java +++ /dev/null @@ -1,65 +0,0 @@ -package org.argeo.app.swt.docbook; - -import org.argeo.api.acr.Content; -import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.swt.acr.Img; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -/** DocBook specific image area. */ -public class DbkImg extends Img { - private static final long serialVersionUID = -6150996708899219074L; - - public DbkImg(Composite parent, int swtStyle, Content imgNode, DbkImageManager imageManager) { - super(parent, swtStyle, imgNode, imageManager); - // FIXME deal with style and initialisation - setStyle((String) null); - } - - @Override - protected Content getUploadFolder() { - Content mediaFolder = ((DbkImageManager) getImageManager()).getMediaFolder(); - return mediaFolder; - } - - @Override - protected String getUploadName() { - return null; - } - - @Override - protected void setContainerLayoutData(Composite composite) { - composite.setLayoutData(CmsSwtUtils.grabWidth(SWT.CENTER, SWT.DEFAULT)); - } - - @Override - protected void setControlLayoutData(Control control) { - control.setLayoutData(CmsSwtUtils.grabWidth(SWT.CENTER, SWT.DEFAULT)); - } - -// @Override -// protected FileUploadHandler prepareUpload(FileUploadReceiver receiver) { -// FileUploadHandler fileUploadHandler = super.prepareUpload(receiver); -// fileUploadHandler.addUploadListener(new FileUploadListener() { -// -// @Override -// public void uploadProgress(FileUploadEvent event) { -// // TODO Auto-generated method stub -// -// } -// -// @Override -// public void uploadFinished(FileUploadEvent event) { -// } -// -// @Override -// public void uploadFailed(FileUploadEvent event) { -// // TODO Auto-generated method stub -// -// } -// }); -// return fileUploadHandler; -// } - -} diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkSectionTitle.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkSectionTitle.java deleted file mode 100644 index 58dd263..0000000 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkSectionTitle.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.argeo.app.swt.docbook; - -import org.argeo.api.acr.Content; -import org.argeo.cms.swt.SwtEditablePart; -import org.argeo.cms.swt.widgets.EditableText; -import org.argeo.cms.ux.acr.ContentPart; -import org.eclipse.swt.widgets.Composite; - -/** The title of a section, based on an XML text node. */ -public class DbkSectionTitle extends EditableText implements SwtEditablePart, ContentPart { - private static final long serialVersionUID = -1787983154946583171L; - - private final TextSection section; - - public DbkSectionTitle(Composite parent, int swtStyle, Content titleNode) { - super(parent, swtStyle); - section = (TextSection) TextSection.findSection(this); - setData(titleNode); - } - - public TextSection getSection() { - return section; - } - - @Override - public Content getContent() { - return (Content) getData(); - } - -} diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java deleted file mode 100644 index 1eff7a4..0000000 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkTextInterpreter.java +++ /dev/null @@ -1,283 +0,0 @@ -package org.argeo.app.swt.docbook; - -import static org.argeo.app.docbook.DbkAcrUtils.isDbk; -import static org.argeo.app.docbook.DbkType.para; -import static org.argeo.app.docbook.DbkType.title; - -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; -import java.util.List; - -import javax.xml.transform.Result; -import javax.xml.transform.Source; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.dom.DOMResult; -import javax.xml.transform.stream.StreamResult; - -import org.apache.commons.io.IOUtils; -import org.argeo.api.acr.Content; -import org.argeo.app.docbook.DbkType; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.w3c.dom.Text; - -/** Based on HTML with a few Wiki-like shortcuts. */ -public class DbkTextInterpreter implements TextInterpreter { - - private TransformerFactory transformerFactory = TransformerFactory.newDefaultInstance(); - - private String linkCssClass = DbkType.link.name(); - - @Override - public void write(Content node, String content) { - if (isDbk(node, para) || isDbk(node, title)) { - String raw = convertToStorage(node, content); - validateBeforeStoring(raw); - - String jcrUuid = null;// node.getIdentifier(); -// if (node.hasProperty(Property.JCR_UUID)) -// jcrUuid = node.getProperty(Property.JCR_UUID).getString(); -// else { -// // TODO use time based -// jcrUuid = UUID.randomUUID().toString(); -// node.setProperty(Property.JCR_UUID, jcrUuid); -// node.getSession().save(); -// } - - StringBuilder namespaces = new StringBuilder(); - namespaces.append(" xmlns:dbk=\"http://docbook.org/ns/docbook\""); - namespaces.append(" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\""); - namespaces.append(" xmlns:xlink=\"http://www.w3.org/1999/xlink\""); - raw = "<" + node.getName() + " jcr:uuid=\"" + jcrUuid + "\"" + namespaces + ">" + raw + ""; -// System.out.println(raw); -// try (InputStream in = new ByteArrayInputStream(raw.getBytes(StandardCharsets.UTF_8))) { -// node.getSession().importXML(node.getParent().getPath(), in, -// ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); -// // node.getSession().save(); -// } catch (IOException e) { -// throw new IllegalArgumentException("Cannot parse raw content of " + node, e); -// } - -// try { -// DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); -// Document document; -// try (Reader in = new StringReader(raw)) { -// document = documentBuilder.parse(new InputSource(in)); -// } -// NodeList nl = document.getChildNodes(); -// for (int i = 0; i < nl.getLength(); i++) { -// org.w3c.dom.Node n = nl.item(i); -// if (node instanceof Text) { -// -// } -// } -// } catch (ParserConfigurationException | SAXException | IOException e) { -// throw new IllegalArgumentException("Cannot parse raw content of " + node, e); -// } - -// Node jcrText; -// if (!node.hasNode(Jcr.JCR_XMLTEXT)) -// jcrText = node.addNode(Jcr.JCR_XMLTEXT, JcrxType.JCRX_XMLTEXT); -// else -// jcrText = node.getNode(Jcr.JCR_XMLTEXT); -// jcrText.setProperty(Jcr.JCR_XMLCHARACTERS, raw); - } else { - throw new IllegalArgumentException("Don't know how to interpret " + node); - } - } - - @Override - public String read(Content item) { - String raw = raw(item); - return convertFromStorage(item, raw); - } - - @Override - public String raw(Content node) { - if (isDbk(node, para) || isDbk(node, title)) { - try (StringWriter stringWriter = new StringWriter()) { - Source source = node.adapt(Source.class); - Result result = new StreamResult(stringWriter); - transformerFactory.newTransformer().transform(source, result); - return stringWriter.toString(); - } catch (TransformerException | IOException e) { - throw new RuntimeException("Could not convert " + node + " to XML", e); - } - -// StringBuilder sb = new StringBuilder(); -// readXml(node, sb); -// NodeIterator nit = node.getNodes(); -// while (nit.hasNext()) { -// Node child = nit.nextNode(); -// if (child.getName().equals(Jcr.JCR_XMLTEXT)) { -// Node jcrText = node.getNode(Jcr.JCR_XMLTEXT); -// String txt = jcrText.getProperty(Jcr.JCR_XMLCHARACTERS).getString(); -// // TODO make it more robust -// // txt = txt.replace("\n", "").replace("\t", ""); -// txt = txt.replace("\t", " "); -// sb.append(txt); -// } else { -// try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { -// child.getSession().exportDocumentView(child.getPath(), out, true, false); -// sb.append(new String(out.toByteArray(), StandardCharsets.UTF_8)); -// } catch (IOException e) { -// throw new IllegalStateException("Cannot export " + child, e); -// } -// } -// } -// return sb.toString(); - } else { - throw new IllegalArgumentException("Don't know how to interpret " + node); - } - } - -// private void readXml(Content node, StringBuilder sb){ -// -// NodeIterator nit = node.getNodes(); -// while (nit.hasNext()) { -// Node child = nit.nextNode(); -// if (child.getName().equals(Jcr.JCR_XMLTEXT)) { -// String txt = child.getProperty(Jcr.JCR_XMLCHARACTERS).getString(); -// // TODO make it more robust -// // txt = txt.replace("\n", "").replace("\t", ""); -// txt = txt.replace("\t", " "); -// sb.append(txt); -// } else { -// sb.append('<').append(child.getName()); -// PropertyIterator pit = child.getProperties(); -// properties: while (pit.hasNext()) { -// Property p = pit.nextProperty(); -// if (p.getName().startsWith("jcr:")) -// continue properties; -// sb.append(' ').append(p.getName()).append("=\"").append(p.getString()).append('\"'); -// } -// sb.append('>'); -// readXml(child, sb); -//// try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { -//// child.getSession().exportDocumentView(child.getPath(), out, true, false); -//// sb.append(new String(out.toByteArray(), StandardCharsets.UTF_8)); -//// } catch (IOException e) { -//// throw new IllegalStateException("Cannot export " + child, e); -//// } -// sb.append("'); -// } -// } -// } - - private void readAsSimpleHtml(Content node, StringBuilder sb) { - DOMResult result = new DOMResult(); - try { - Source source = node.adapt(Source.class); - transformerFactory.newTransformer().transform(source, result); - } catch (TransformerException e) { - throw new RuntimeException("Could not convert " + node + " to XML", e); - } - - NodeList nl = result.getNode().getChildNodes(); - for (int i = 0; i < nl.getLength(); i++) { - Node n = nl.item(i); -// if (n instanceof Text) { -// Text text = (Text) n; -// sb.append(text.getTextContent()); -// } else - if (n instanceof Element) { - Element elem = (Element) n; - sb.append(elem.getTextContent()); - } - } - -// NodeIterator nit = node.getNodes(); -// while (nit.hasNext()) { -// Node child = nit.nextNode(); -// if (child.getName().equals(Jcr.JCR_XMLTEXT)) { -// String txt = child.getProperty(Jcr.JCR_XMLCHARACTERS).getString(); -// // TODO make it more robust -// // txt = txt.replace("\n", "").replace("\t", ""); -// txt = txt.replace("\t", " "); -// String html = textToSimpleHtml(txt); -// sb.append(html); -// } else if (child.getName().equals(DbkType.link.get())) { -// if (child.hasProperty(DbkAttr.XLINK_HREF)) { -// String href = child.getProperty(DbkAttr.XLINK_HREF).getString(); -// // TODO deal with other forbidden XML characters? -// href = href.replace("&", "&"); -// sb.append(""); -// readAsSimpleHtml(child, sb); -// sb.append(""); -// } -// } else { -// // ignore -// } -// } - } - - private String textToSimpleHtml(String raw) { - // FIXME the saved data should be corrected instead. - if (raw.indexOf('&') >= 0) { - raw = raw.replace("&", "&"); - } - if (raw.indexOf('<') >= 0) { - raw = raw.replace("<", "<"); - } - if (raw.indexOf('>') >= 0) { - raw = raw.replace(">", ">"); - } - if (raw.indexOf('\"') >= 0) { - raw = raw.replace("\"", """); - } - if (raw.indexOf('\'') >= 0) { - raw = raw.replace("\'", "'"); - } -// raw = "" + raw + ""; - if (raw.length() == 0) - return raw; - try (StringReader reader = new StringReader(raw)) { - List lines = IOUtils.readLines(reader); - if (lines.size() == 1) - return lines.get(0); - StringBuilder sb = new StringBuilder(raw.length() + lines.size() * BR_LENGTH); - for (int i = 0; i < lines.size(); i++) { - if (i != 0) - sb.append("
"); - sb.append(lines.get(i)); - } - return sb.toString(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - final static int BR_LENGTH = "
".length(); - - public String readSimpleHtml(Content item) { - StringBuilder sb = new StringBuilder(); -// sb.append("
"); - readAsSimpleHtml(item, sb); -// sb.append("
"); -// System.out.println(sb); - return sb.toString(); - } - - // EXTENSIBILITY - /** - * To be overridden, in order to make sure that only valid strings are being - * stored. - */ - protected void validateBeforeStoring(String raw) { - } - - /** To be overridden, in order to support additional formatting. */ - protected String convertToStorage(Content item, String content) { - return content; - - } - - /** To be overridden, in order to support additional formatting. */ - protected String convertFromStorage(Content item, String content) { - return content; - } -} diff --git a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkVideo.java b/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkVideo.java deleted file mode 100644 index 17ed0e0..0000000 --- a/org.argeo.app.swt/src/org/argeo/app/swt/docbook/DbkVideo.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.argeo.app.swt.docbook; - -import java.net.URI; -import java.net.URISyntaxException; -import java.util.List; -import java.util.Map; - -import org.argeo.api.acr.Content; -import org.argeo.api.acr.spi.ProvidedContent; -import org.argeo.app.docbook.DbkAcrUtils; -import org.argeo.app.docbook.DbkAttr; -import org.argeo.app.docbook.DbkType; -import org.argeo.cms.swt.CmsSwtUtils; -import org.argeo.cms.swt.Selected; -import org.argeo.cms.swt.acr.SwtSection; -import org.argeo.cms.swt.acr.SwtSectionPart; -import org.argeo.cms.swt.widgets.StyledControl; -import org.argeo.cms.ux.acr.ContentPart; -import org.argeo.util.naming.NamingUtils; -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Text; - -public class DbkVideo extends StyledControl implements SwtSectionPart, ContentPart { - private static final long serialVersionUID = -8753232181570351880L; - private SwtSection section; - - private int width = 640; - private int height = 360; - - private boolean editable; - - public DbkVideo(Composite parent, int style, Content node) { - this(SwtSection.findSection(parent), parent, style, node); - } - - DbkVideo(SwtSection section, Composite parent, int style, Content node) { - super(parent, style); - editable = !(SWT.READ_ONLY == (style & SWT.READ_ONLY)); - this.section = section; - setStyle(DbkType.videoobject.name()); - setData(node); - } - - @Override - protected Control createControl(Composite box, String style) { - Content mediaobject = getNode(); - Composite wrapper = new Composite(box, SWT.NONE); - wrapper.setLayout(CmsSwtUtils.noSpaceGridLayout()); - - Composite browserC = new Composite(wrapper, SWT.NONE); - browserC.setLayout(CmsSwtUtils.noSpaceGridLayout()); - GridData gd = new GridData(SWT.CENTER, SWT.FILL, true, true); - gd.widthHint = getWidth(); - gd.heightHint = getHeight(); - browserC.setLayoutData(gd); -// wrapper.setLayoutData(CmsUiUtils.fillAll()); - Browser browser = new Browser(browserC, SWT.NONE); - - if (editable) { - Composite editor = new Composite(wrapper, SWT.BORDER); - editor.setLayout(new GridLayout(3, false)); - editor.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - String fileref = DbkAcrUtils.getMediaFileref(mediaobject); - Text text = new Text(editor, SWT.SINGLE); - if (fileref != null) - text.setText(fileref); - else - text.setMessage("Embed URL of the video"); - text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - Button updateB = new Button(editor, SWT.FLAT); - updateB.setText("Update"); - updateB.addSelectionListener(new Selected() { - - @Override - public void widgetSelected(SelectionEvent e) { - Content videodata = mediaobject.child(DbkType.videoobject).child(DbkType.videodata); - String txt = text.getText(); - URI uri; - try { - uri = new URI(txt); - } catch (URISyntaxException e1) { - text.setText(""); - text.setMessage("Invalid URL"); - return; - } - - // Transform watch URL in embed - // YouTube - String videoId = null; - if ("www.youtube.com".equals(uri.getHost()) || "youtube.com".equals(uri.getHost()) - || "youtu.be".equals(uri.getHost())) { - if ("www.youtube.com".equals(uri.getHost()) || "youtube.com".equals(uri.getHost())) { - if ("/watch".equals(uri.getPath())) { - Map> map = NamingUtils.queryToMap(uri); - videoId = map.get("v").get(0); - } - } else if ("youtu.be".equals(uri.getHost())) { - videoId = uri.getPath().substring(1); - } - if (videoId != null) { - try { - uri = new URI("https://www.youtube.com/embed/" + videoId); - text.setText(uri.toString()); - } catch (URISyntaxException e1) { - throw new IllegalStateException(e1); - } - } - } - - // Vimeo - if ("vimeo.com".equals(uri.getHost())) { - videoId = uri.getPath().substring(1); - if (videoId != null) { - try { - uri = new URI("https://player.vimeo.com/video/" + videoId); - text.setText(uri.toString()); - } catch (URISyntaxException e1) { - throw new IllegalStateException(e1); - } - } - } - - videodata.put(DbkAttr.fileref, uri.toString()); - // TODO better integrate it in the edition lifecycle -// videodata.getSession().save(); - load(browser); - - } - }); - - Button deleteB = new Button(editor, SWT.FLAT); - deleteB.setText("Delete"); - deleteB.addSelectionListener(new Selected() { - - @Override - public void widgetSelected(SelectionEvent e) { - mediaobject.remove(); -// mediaobject.getSession().save(); - dispose(); - getSection().getParent().layout(true, true); - - } - }); - } - - // TODO caption - return browser; - } - - public void load(Control control) { - if (control instanceof Browser) { - Browser browser = (Browser) control; -// getNode().getSession(); - String fileref = DbkAcrUtils.getMediaFileref(getContent()); - if (fileref != null) { - // TODO manage self-hosted videos - // TODO for YouTube videos, check whether the URL starts with - // https://www.youtube.com/embed/ and not https://www.youtube.com/watch?v= - StringBuilder html = new StringBuilder(); - html.append( - "