Author: solomax
Date: Wed Jan 18 04:52:53 2017
New Revision: 1779288
URL: http://svn.apache.org/viewvc?rev=1779288&view=rev
Log:
[OPENMEETINGS-1527] key modifiers are passed to server
Removed:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileFolder.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileFolder.java
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1779288&r1=1779287&r2=1779288&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
Wed Jan 18 04:52:53 2017
@@ -19,14 +19,27 @@
package org.apache.openmeetings.web.common.tree;
import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.openmeetings.db.entity.record.Recording.Status;
import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.json.JSONObject;
import
org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.string.Strings;
+
+import com.googlecode.wicket.jquery.ui.markup.html.link.AjaxLink;
public class FileItemTree extends DefaultNestedTree<FileItem> {
private static final long serialVersionUID = 1L;
+ private final static String CSS_CLASS_FILE = "file ";
final FileTreePanel treePanel;
public FileItemTree(String id, FileTreePanel treePanel,
ITreeProvider<FileItem> tp) {
@@ -35,8 +48,144 @@ public class FileItemTree extends Defaul
setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
}
+ private void onClick(AjaxRequestTarget target, FileItem f) {
+ String mod =
getRequest().getRequestParameters().getParameterValue("modifiers").toOptionalString();
+ boolean shift = false, ctrl = false;
+ if (!Strings.isEmpty(mod)) {
+ JSONObject o = new JSONObject(mod);
+ shift = o.optBoolean("shift");
+ ctrl = o.optBoolean("ctrl");
+ }
+ treePanel.setSelected(f, target, shift, ctrl);
+ if (Type.Folder == f.getType() && getState(f) ==
State.COLLAPSED) {
+ this.expand(f);
+ } else {
+ treePanel.update(target, f);
+ }
+ }
+
+ private static boolean isClickable() {
+ return true;
+ }
+
@Override
protected Component newContentComponent(String id, IModel<FileItem>
node) {
- return new FileFolder(id, this, node, treePanel);
+ return new Folder<FileItem>(id, this, node) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected Component newLabelComponent(String id, final
IModel<FileItem> lm) {
+ FileItem r = lm.getObject();
+ return Type.Folder == r.getType() || r.getId()
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm,
treePanel);
+ }
+
+ @Override
+ protected boolean isSelected() {
+ FileItem f = getModelObject(), s =
treePanel.getSelected();
+ return s.getHash().equals(f.getHash());
+ }
+
+ @Override
+ protected boolean isClickable() {
+ return FileItemTree.isClickable();
+ }
+
+ @Override
+ protected void onClick(AjaxRequestTarget target) {
+ FileItemTree.this.onClick(target,
getModelObject());
+ }
+
+ @Override
+ protected MarkupContainer newLinkComponent(String id,
IModel<FileItem> model) {
+ final FileItem f = getModelObject();
+ return new AjaxLink<Void>(id) {
+ private static final long
serialVersionUID = 1L;
+
+ @Override
+ public boolean isEnabled() {
+ return
FileItemTree.isClickable();
+ }
+
+ @Override
+ public void onClick(AjaxRequestTarget
target) {
+
FileItemTree.this.onClick(target, f);
+ }
+
+ @Override
+ protected void
updateAjaxAttributes(AjaxRequestAttributes attributes) {
+
super.updateAjaxAttributes(attributes);
+
attributes.getDynamicExtraParameters().add("return {modifiers:
JSON.stringify({shift: attrs.event.shiftKey, ctrl: attrs.event.ctrlKey})};");
+ }
+ };
+ }
+
+ @Override
+ protected String getOtherStyleClass(FileItem r) {
+ return getItemStyle(r, false);
+ }
+
+ @Override
+ protected String getOpenStyleClass() {
+ return getItemStyle(getModelObject(), true);
+ }
+
+ @Override
+ protected String getClosedStyleClass() {
+ return getItemStyle(getModelObject(), false);
+ }
+
+ @Override
+ protected String getSelectedStyleClass() {
+ return "ui-state-active";
+ }
+
+ @Override
+ protected IModel<String> newLabelModel(IModel<FileItem>
model) {
+ return Model.of(model.getObject().getName());
+ }
+ };
+ }
+
+ private static String getItemStyle(FileItem f, boolean open) {
+ StringBuilder style = new StringBuilder("big om-icon ");
+ if (f.getId() == null) {
+
style.append(CSS_CLASS_FILE).append(f.getHash().indexOf("my") > -1 ? "my" :
"public");
+ } else {
+ if (!f.exists()) {
+ style.append("broken ");
+ }
+ switch(f.getType()) {
+ case Folder:
+
style.append(CSS_CLASS_FILE).append(open ? "folder-open " : "folder ");
+ break;
+ case Image:
+
style.append(CSS_CLASS_FILE).append("image ");
+ break;
+ case PollChart:
+
style.append(CSS_CLASS_FILE).append("chart ");
+ break;
+ case WmlFile:
+
style.append(CSS_CLASS_FILE).append("wml ");
+ break;
+ case Video:
+ case Recording:
+ {
+ style.append("recording ");
+ if (f instanceof Recording) {
+ Status st =
((Recording)f).getStatus();
+ if (Status.RECORDING == st ||
Status.CONVERTING == st) {
+
style.append("processing");
+ }
+ }
+ }
+ break;
+ case Presentation:
+
style.append(CSS_CLASS_FILE).append("doc ");
+ break;
+ default:
+ break;
+ }
+ }
+ return style.toString();
}
}
Modified:
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1779288&r1=1779287&r2=1779288&view=diff
==============================================================================
---
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
(original)
+++
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
Wed Jan 18 04:52:53 2017
@@ -82,7 +82,7 @@ public abstract class FileTreePanel exte
super(id);
this.addFolder = addFolder;
OmTreeProvider tp = new OmTreeProvider(roomId);
- setSelected(tp.getRoot(), null);
+ setSelected(tp.getRoot(), null, false, false);
form.add(tree = new FileItemTree("tree", this, tp));
form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
add(form.add(downloader));
@@ -246,7 +246,7 @@ public abstract class FileTreePanel exte
}
}
- public void setSelected(FileItem fi, AjaxRequestTarget target) {
+ public void setSelected(FileItem fi, AjaxRequestTarget target, boolean
shift, boolean ctrl) {
FileItem _prev = selected.getObject();
updateNode(target, _prev);
if (target != null) {
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java?rev=1779288&r1=1779287&r2=1779288&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileItemTree.java
Wed Jan 18 04:52:53 2017
@@ -19,14 +19,27 @@
package org.apache.openmeetings.web.common.tree;
import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.db.entity.file.FileItem.Type;
+import org.apache.openmeetings.db.entity.record.Recording;
+import org.apache.openmeetings.db.entity.record.Recording.Status;
import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.json.JSONObject;
import
org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.string.Strings;
+
+import com.googlecode.wicket.jquery.ui.markup.html.link.AjaxLink;
public class FileItemTree extends DefaultNestedTree<FileItem> {
private static final long serialVersionUID = 1L;
+ private final static String CSS_CLASS_FILE = "file ";
final FileTreePanel treePanel;
public FileItemTree(String id, FileTreePanel treePanel,
ITreeProvider<FileItem> tp) {
@@ -35,8 +48,144 @@ public class FileItemTree extends Defaul
setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
}
+ private void onClick(AjaxRequestTarget target, FileItem f) {
+ String mod =
getRequest().getRequestParameters().getParameterValue("modifiers").toOptionalString();
+ boolean shift = false, ctrl = false;
+ if (!Strings.isEmpty(mod)) {
+ JSONObject o = new JSONObject(mod);
+ shift = o.optBoolean("shift");
+ ctrl = o.optBoolean("ctrl");
+ }
+ treePanel.setSelected(f, target, shift, ctrl);
+ if (Type.Folder == f.getType() && getState(f) ==
State.COLLAPSED) {
+ this.expand(f);
+ } else {
+ treePanel.update(target, f);
+ }
+ }
+
+ private static boolean isClickable() {
+ return true;
+ }
+
@Override
protected Component newContentComponent(String id, IModel<FileItem>
node) {
- return new FileFolder(id, this, node, treePanel);
+ return new Folder<FileItem>(id, this, node) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected Component newLabelComponent(String id, final
IModel<FileItem> lm) {
+ FileItem r = lm.getObject();
+ return Type.Folder == r.getType() || r.getId()
== null ? new FolderPanel(id, lm, treePanel) : new FileItemPanel(id, lm,
treePanel);
+ }
+
+ @Override
+ protected boolean isSelected() {
+ FileItem f = getModelObject(), s =
treePanel.getSelected();
+ return s.getHash().equals(f.getHash());
+ }
+
+ @Override
+ protected boolean isClickable() {
+ return FileItemTree.isClickable();
+ }
+
+ @Override
+ protected void onClick(AjaxRequestTarget target) {
+ FileItemTree.this.onClick(target,
getModelObject());
+ }
+
+ @Override
+ protected MarkupContainer newLinkComponent(String id,
IModel<FileItem> model) {
+ final FileItem f = getModelObject();
+ return new AjaxLink<Void>(id) {
+ private static final long
serialVersionUID = 1L;
+
+ @Override
+ public boolean isEnabled() {
+ return
FileItemTree.isClickable();
+ }
+
+ @Override
+ public void onClick(AjaxRequestTarget
target) {
+
FileItemTree.this.onClick(target, f);
+ }
+
+ @Override
+ protected void
updateAjaxAttributes(AjaxRequestAttributes attributes) {
+
super.updateAjaxAttributes(attributes);
+
attributes.getDynamicExtraParameters().add("return {modifiers:
JSON.stringify({shift: attrs.event.shiftKey, ctrl: attrs.event.ctrlKey})};");
+ }
+ };
+ }
+
+ @Override
+ protected String getOtherStyleClass(FileItem r) {
+ return getItemStyle(r, false);
+ }
+
+ @Override
+ protected String getOpenStyleClass() {
+ return getItemStyle(getModelObject(), true);
+ }
+
+ @Override
+ protected String getClosedStyleClass() {
+ return getItemStyle(getModelObject(), false);
+ }
+
+ @Override
+ protected String getSelectedStyleClass() {
+ return "ui-state-active";
+ }
+
+ @Override
+ protected IModel<String> newLabelModel(IModel<FileItem>
model) {
+ return Model.of(model.getObject().getName());
+ }
+ };
+ }
+
+ private static String getItemStyle(FileItem f, boolean open) {
+ StringBuilder style = new StringBuilder("big om-icon ");
+ if (f.getId() == null) {
+
style.append(CSS_CLASS_FILE).append(f.getHash().indexOf("my") > -1 ? "my" :
"public");
+ } else {
+ if (!f.exists()) {
+ style.append("broken ");
+ }
+ switch(f.getType()) {
+ case Folder:
+
style.append(CSS_CLASS_FILE).append(open ? "folder-open " : "folder ");
+ break;
+ case Image:
+
style.append(CSS_CLASS_FILE).append("image ");
+ break;
+ case PollChart:
+
style.append(CSS_CLASS_FILE).append("chart ");
+ break;
+ case WmlFile:
+
style.append(CSS_CLASS_FILE).append("wml ");
+ break;
+ case Video:
+ case Recording:
+ {
+ style.append("recording ");
+ if (f instanceof Recording) {
+ Status st =
((Recording)f).getStatus();
+ if (Status.RECORDING == st ||
Status.CONVERTING == st) {
+
style.append("processing");
+ }
+ }
+ }
+ break;
+ case Presentation:
+
style.append(CSS_CLASS_FILE).append("doc ");
+ break;
+ default:
+ break;
+ }
+ }
+ return style.toString();
}
}
Modified:
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL:
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1779288&r1=1779287&r2=1779288&view=diff
==============================================================================
---
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
(original)
+++
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
Wed Jan 18 04:52:53 2017
@@ -82,7 +82,7 @@ public abstract class FileTreePanel exte
super(id);
this.addFolder = addFolder;
OmTreeProvider tp = new OmTreeProvider(roomId);
- setSelected(tp.getRoot(), null);
+ setSelected(tp.getRoot(), null, false, false);
form.add(tree = new FileItemTree("tree", this, tp));
form.add(download.setVisible(false).setOutputMarkupPlaceholderTag(true));
add(form.add(downloader));
@@ -246,7 +246,7 @@ public abstract class FileTreePanel exte
}
}
- public void setSelected(FileItem fi, AjaxRequestTarget target) {
+ public void setSelected(FileItem fi, AjaxRequestTarget target, boolean
shift, boolean ctrl) {
FileItem _prev = selected.getObject();
updateNode(target, _prev);
if (target != null) {