Added: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1712911&view=auto ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (added) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Fri Nov 6 06:18:44 2015 @@ -0,0 +1,178 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.common.tree; + +import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.WebSession.getUserId; + +import java.util.Date; + +import org.apache.openmeetings.db.dao.file.FileExplorerItemDao; +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.file.FileExplorerItem; +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.web.app.Application; +import org.apache.openmeetings.web.common.AddFolderDialog; +import org.apache.openmeetings.web.common.ConfirmableAjaxBorder; +import org.apache.wicket.Component; +import org.apache.wicket.ajax.AjaxEventBehavior; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.panel.Panel; +import org.apache.wicket.markup.repeater.RepeatingView; +import org.apache.wicket.model.CompoundPropertyModel; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; +import org.apache.wicket.util.time.Duration; + +import com.googlecode.wicket.jquery.core.JQueryBehavior; +import com.googlecode.wicket.jquery.core.Options; +import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable; + +public abstract class FileTreePanel extends Panel { + private static final long serialVersionUID = 1L; + final WebMarkupContainer trees = new WebMarkupContainer("tree-container"); + private final WebMarkupContainer sizes = new WebMarkupContainer("sizes"); + protected final IModel<FileItem> selectedFile = new CompoundPropertyModel<FileItem>((FileItem)null); + protected final IModel<String> homeSize = Model.of((String)null); + protected final IModel<String> publicSize = Model.of((String)null); + final ConvertingErrorsDialog errorsDialog = new ConvertingErrorsDialog("errors", Model.of((Recording)null)); + protected FileItemTree<? extends FileItem> selected; + protected RepeatingView treesView = new RepeatingView("tree"); + + public FileTreePanel(String id) { + super(id); + defineTrees(); + selectedFile.getObject().setId(Long.MIN_VALUE); + final AddFolderDialog addFolder = new AddFolderDialog("addFolder", Application.getString(712)) { + private static final long serialVersionUID = 1L; + + @Override + protected void onSubmit(AjaxRequestTarget target) { + createFolder(getModelObject()); + target.add(trees); //FIXME add correct refresh + } + }; + add(addFolder); + Droppable<FileItem> trashToolbar = new Droppable<FileItem>("trash-toolbar") { + private static final long serialVersionUID = 1L; + + @Override + public void onConfigure(JQueryBehavior behavior) { + super.onConfigure(behavior); + behavior.setOption("hoverClass", Options.asString("ui-state-hover trash-toolbar-hover")); + behavior.setOption("accept", Options.asString(".recorditem, .fileitem")); + } + + @Override + public void onDrop(AjaxRequestTarget target, Component component) { + Object o = component.getDefaultModelObject(); + if (o instanceof FileItem) { + delete((FileItem)o, target); + } + } + }; + add(trashToolbar); + trashToolbar.add(new WebMarkupContainer("create").add(new AjaxEventBehavior("click") { + private static final long serialVersionUID = 1L; + + @Override + protected void onEvent(AjaxRequestTarget target) { + addFolder.open(target); + } + })); + trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("click") { + private static final long serialVersionUID = 1L; + + @Override + protected void onEvent(AjaxRequestTarget target) { + target.add(trees); //FIXME add correct refresh + } + })); + trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) { + private static final long serialVersionUID = 1L; + + @Override + protected void onSubmit(AjaxRequestTarget target, Form<?> form) { + delete(selectedFile.getObject(), target); + } + }); + + add(trees.add(treesView).setOutputMarkupId(true)); + updateSizes(); + add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true)); + sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) { + private static final long serialVersionUID = 1L; + + protected void onPostProcessTarget(AjaxRequestTarget target) { + updateSizes(); + } + }); + add(errorsDialog); + } + + void delete(FileItem f, AjaxRequestTarget target) { + long id = f.getId(); + if (id > 0) { + if (f instanceof Recording) { + getBean(RecordingDao.class).delete((Recording)f); + } else { + getBean(FileExplorerItemDao.class).delete((FileExplorerItem)f); + } + } + target.add(trees); //FIXME add correct refresh + } + + public void createRecordingFolder(String name) { + Recording f = new Recording(); + f.setFileName(name); + f.setInsertedBy(getUserId()); + f.setInserted(new Date()); + f.setType(Type.Folder);; + Recording p = (Recording)selectedFile.getObject(); + long parentId = p.getId(); + if (Type.Folder == p.getType()) { + f.setParentItemId(parentId); + } + f.setOwnerId(p.getOwnerId()); + f.setOrganization_id(p.getOrganization_id()); + getBean(RecordingDao.class).update(f); + } + + public abstract void defineTrees(); + + public abstract void update(AjaxRequestTarget target, FileItem f); + + public abstract void createFolder(String name); + + public abstract void updateSizes(); + + @Override + protected void onDetach() { + selectedFile.detach(); + homeSize.detach(); + publicSize.detach(); + super.onDetach(); + } +}
Copied: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html (from r1712825, openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html) URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html?p2=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html&p1=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html&r1=1712825&r2=1712911&rev=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.html (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.html Fri Nov 6 06:18:44 2015 @@ -20,6 +20,6 @@ --> <html xmlns:wicket="http://wicket.apache.org"> <wicket:panel> - <div wicket:id="drop" class="recording item"><div wicket:id="drag"><wicket:child /><span wicket:id="name" class="name"></span></div></div> + <div wicket:id="drop" class="file item"><div wicket:id="drag"><wicket:child /><span wicket:id="name" class="name"></span></div></div> </wicket:panel> </html> Copied: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java (from r1712825, openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java) URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java?p2=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java&p1=openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java&r1=1712825&r2=1712911&rev=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/record/RecordingPanel.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java Fri Nov 6 06:18:44 2015 @@ -16,12 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.openmeetings.web.user.record; +package org.apache.openmeetings.web.common.tree; import static org.apache.openmeetings.web.app.Application.getBean; -import org.apache.openmeetings.db.dao.record.FlvRecordingDao; -import org.apache.openmeetings.db.entity.record.FlvRecording; +import org.apache.openmeetings.db.dao.file.FileExplorerItemDao; +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.file.FileExplorerItem; +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.wicket.Component; import org.apache.wicket.MarkupContainer; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -38,48 +42,53 @@ import com.googlecode.wicket.jquery.core import com.googlecode.wicket.jquery.ui.interaction.draggable.Draggable; import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable; -public class RecordingPanel extends Panel { +public class FolderPanel extends Panel { private static final long serialVersionUID = 1L; protected final MarkupContainer drop; protected final MarkupContainer drag; - public RecordingPanel(String id, final IModel<FlvRecording> model, final RecordingsPanel treePanel) { + public FolderPanel(String id, final IModel<? extends FileItem> model, final FileTreePanel treePanel) { super(id, model); - FlvRecording r = model.getObject(); - drop = r.isFolder() ? new Droppable<FlvRecording>("drop", model) { + FileItem r = model.getObject(); + drop = r.getType() == Type.Folder ? new Droppable<FileItem>("drop", Model.of(r)) { private static final long serialVersionUID = 1L; @Override public void onConfigure(JQueryBehavior behavior) { super.onConfigure(behavior); behavior.setOption("hoverClass", Options.asString("ui-state-hover")); - behavior.setOption("accept", Options.asString(".recorditem")); + behavior.setOption("accept", Options.asString(getDefaultModelObject() instanceof Recording ? ".recorditem" : ".fileitem")); } @Override public void onDrop(AjaxRequestTarget target, Component component) { Object o = component.getDefaultModelObject(); - if (o instanceof FlvRecording) { - FlvRecording p = (FlvRecording)drop.getDefaultModelObject(); - FlvRecording f = (FlvRecording)o; - long pid = p.getFlvRecordingId(); + if (o instanceof FileItem) { + FileItem p = (FileItem)drop.getDefaultModelObject(); + FileItem f = (FileItem)o; + long pid = p.getId(); //FIXME parent should not be moved to child !!!!!!! - if (pid == f.getFlvRecordingId()) { + if (pid == f.getId()) { return; } - f.setParentFileExplorerItemId(pid > 0 ? pid : null); + f.setParentItemId(pid > 0 ? pid : null); f.setOwnerId(p.getOwnerId()); - f.setRoom_id(p.getRoom_id()); - f.setOrganization_id((p).getOrganization_id()); - getBean(FlvRecordingDao.class).update(f); + f.setRoomId(p.getRoomId()); + if (f instanceof Recording) { + Recording r = (Recording)f; + r.setOrganization_id(((Recording)p).getOrganization_id()); + getBean(RecordingDao.class).update(r); + } else { + getBean(FileExplorerItemDao.class).update((FileExplorerItem)f); + } } target.add(treePanel.trees); //FIXME add correct refresh } } : new WebMarkupContainer("drop"); - if (r.getFlvRecordingId() < 1) { + if (r.getId() < 1) { drag = new WebMarkupContainer("drag"); } else { - Draggable<FlvRecording> d = new Draggable<FlvRecording>("drag", model) { + Draggable<? extends FileItem> d = new Draggable<FileItem>("drag", Model.of(r)) { private static final long serialVersionUID = 1L; @Override @@ -90,10 +99,10 @@ public class RecordingPanel extends Pane } }; d.setContainment(".file.tree"); - d.add(AttributeAppender.append("class", "recorditem")); + d.add(AttributeAppender.append("class", r instanceof Recording ? "recorditem" : "fileitem")); drag = d; } - drag.add(r.getFlvRecordingId() < 1 ? new Label("name", r.getFileName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) { + drag.add(r.getId() < 1 ? new Label("name", r.getFileName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) { private static final long serialVersionUID = 1L; @Override @@ -104,9 +113,13 @@ public class RecordingPanel extends Pane @Override protected void onSubmit(AjaxRequestTarget target) { super.onSubmit(target); - FlvRecording fi = model.getObject(); + FileItem fi = model.getObject(); fi.setFileName(getEditor().getModelObject()); - getBean(FlvRecordingDao.class).update(fi); + if (fi instanceof Recording) { + getBean(RecordingDao.class).update((Recording)fi); + } else { + getBean(FileExplorerItemDao.class).update((FileExplorerItem)fi); + } } @Override Added: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java?rev=1712911&view=auto ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java (added) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/MyRecordingTreeProvider.java Fri Nov 6 06:18:44 2015 @@ -0,0 +1,51 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.common.tree; + +import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.WebSession.getUserId; + +import java.util.Arrays; +import java.util.Iterator; + +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.file.FileItem.Type; +import org.apache.openmeetings.db.entity.record.Recording; +import org.apache.openmeetings.web.app.Application; + +public class MyRecordingTreeProvider extends RecordingTreeProvider { + private static final long serialVersionUID = 1L; + + public Iterator<? extends Recording> getRoots() { + Recording r = new Recording(); + r.setId(0L); + r.setType(Type.Folder); + r.setFileName(Application.getString(860)); + r.setOwnerId(getUserId()); + return Arrays.asList(r).iterator(); + } + + public Iterator<? extends Recording> getChildren(Recording node) { + if (node.getId() == 0) { + return getBean(RecordingDao.class).getRootByOwner(getUserId()).iterator(); + } else { + return super.getChildren(node); + } + } +} Added: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java?rev=1712911&view=auto ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java (added) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/PublicRecordingTreeProvider.java Fri Nov 6 06:18:44 2015 @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.common.tree; + +import static org.apache.openmeetings.web.app.Application.getBean; + +import java.util.Arrays; +import java.util.Iterator; + +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.file.FileItem.Type; +import org.apache.openmeetings.db.entity.record.Recording; +import org.apache.openmeetings.web.app.Application; + +public class PublicRecordingTreeProvider extends RecordingTreeProvider { + private static final long serialVersionUID = 1L; + private final Long groupId; + private final String name; + + public PublicRecordingTreeProvider(Long groupId, String name) { + this.groupId = groupId; + this.name = name; + } + + public Iterator<? extends Recording> getRoots() { + Recording r = new Recording(); + r.setId(groupId == null ? -1 : -groupId); + r.setOrganization_id(groupId); + r.setOwnerId(null); + r.setType(Type.Folder); + String pub = Application.getString(861); + r.setFileName(groupId == null ? pub : String.format("%s (%s)", pub, name)); + return Arrays.asList(r).iterator(); + } + + public Iterator<? extends Recording> getChildren(Recording node) { + if (node.getId() < 0) { + return getBean(RecordingDao.class).getRootByPublic(groupId).iterator(); + } else { + return super.getChildren(node); + } + } +} Added: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java?rev=1712911&view=auto ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java (added) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/RecordingTreeProvider.java Fri Nov 6 06:18:44 2015 @@ -0,0 +1,52 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.common.tree; + +import static org.apache.openmeetings.web.app.Application.getBean; + +import java.util.Iterator; + +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.file.FileItem.Type; +import org.apache.openmeetings.db.entity.record.Recording; +import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; + +public abstract class RecordingTreeProvider implements ITreeProvider<Recording> { + private static final long serialVersionUID = 1L; + + public void detach() { + // TODO LDM should be used + } + + public boolean hasChildren(Recording node) { + return node.getId() <= 0 || Type.Folder == node.getType(); + } + + public Iterator<? extends Recording> getChildren(Recording node) { + return getBean(RecordingDao.class).getByParent(node.getId()).iterator(); + } + + public IModel<Recording> model(Recording object) { + // TODO LDM should be used + return Model.of(object); + } + +} Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java Fri Nov 6 06:18:44 2015 @@ -26,7 +26,7 @@ import org.apache.wicket.ajax.AjaxReques import org.apache.wicket.request.IRequestParameters; public abstract class BaseNotInitedPage extends BasePage { - private static final long serialVersionUID = 5716753033219700254L; + private static final long serialVersionUID = 1L; private static final InstallationConfig installCfg = new InstallationConfig(); @Override Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.html Fri Nov 6 06:18:44 2015 @@ -25,9 +25,11 @@ <link rel="shortcut icon" href="public/favicon.ico" type="image/x-icon"/> <title wicket:id="pageTitle">[title]</title> <link media="screen" type="text/css" rel="stylesheet" href="css/theme.css"/> + <link media="screen" type="text/css" rel="stylesheet" href="css/chat.css"/> <link media="screen" type="text/css" rel="stylesheet" href="css/forms.css"/> <link media="screen" type="text/css" rel="stylesheet" href="css/calendar.css"/> <link media="screen" type="text/css" rel="stylesheet" href="css/admin.css"/> + <link media="screen" type="text/css" rel="stylesheet" href="css/room.css"/> </head> <body> <div wicket:id="header"></div> Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/BasePage.java Fri Nov 6 06:18:44 2015 @@ -41,6 +41,7 @@ import org.wicketstuff.urlfragment.Async public abstract class BasePage extends AsyncUrlFragmentAwarePage { private static final long serialVersionUID = 1L; private final Map<String, String> options; + private final HeaderPanel header; public abstract boolean isRtl(); protected abstract String getLanguageCode(); @@ -58,7 +59,7 @@ public abstract class BasePage extends A .add(new AttributeModifier("lang", code)) .add(new AttributeModifier("dir", isRtl() ? "rtl" : "ltr"))); add(new Label("pageTitle", appName)); - add(new HeaderPanel("header", appName)); + add(header = new HeaderPanel("header", appName)); } protected OmUrlFragment getUrlFragment(IRequestParameters params) { @@ -71,6 +72,10 @@ public abstract class BasePage extends A return null; } + public HeaderPanel getHeader() { + return header; + } + @Override protected Map<String, String> getOptions() { return options; Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html Fri Nov 6 06:18:44 2015 @@ -19,39 +19,41 @@ --> <html xmlns:wicket="http://wicket.apache.org"> - <wicket:head> - <script type="text/javascript"> - function showBusyIndicator() { - $('#busy_indicator').show(); - } - function hideBusyIndicator() { - $('#busy_indicator').hide(); - } - </script> - </wicket:head> - <wicket:extend> - <script type="text/javascript"> - $(function() { - Wicket.Event.subscribe('/ajax/call/failure', hideBusyIndicator); - Wicket.Event.subscribe('/ajax/call/before', showBusyIndicator); - Wicket.Event.subscribe('/ajax/call/success', hideBusyIndicator); - Wicket.Event.subscribe('/ajax/call/complete', hideBusyIndicator); - }); - </script> - <div id="topControls"> - <div id="topLinks"><span - id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span - id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span - id="logout"><a wicket:id="logout" href="#"><wicket:message key="310"/></a></span><span - id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a - wicket:id="about"><wicket:message key="1549"/></a></span> - </div> - <div wicket:id="dev" id="devMenu"/> - <div id="busy_indicator"><wicket:message key="1554"/></div> - <div wicket:id="menu"></div> +<wicket:head> + <link media="screen" type="text/css" rel="stylesheet" href="css/jquery.ui.menubar.css"/> + <script type="text/javascript" src="js/jquery.ui.menubar.js"></script> + <script type="text/javascript"> + function showBusyIndicator() { + $('#busy_indicator').show(); + } + function hideBusyIndicator() { + $('#busy_indicator').hide(); + } + </script> +</wicket:head> +<wicket:extend> + <script type="text/javascript"> + $(function() { + Wicket.Event.subscribe('/ajax/call/failure', hideBusyIndicator); + Wicket.Event.subscribe('/ajax/call/before', showBusyIndicator); + Wicket.Event.subscribe('/ajax/call/success', hideBusyIndicator); + Wicket.Event.subscribe('/ajax/call/complete', hideBusyIndicator); + }); + </script> + <div id="topControls"> + <div wicket:id="topLinks"><span + id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span + id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span + id="logout"><a wicket:id="logout" href="#"><wicket:message key="310"/></a></span><span + id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a + wicket:id="about"><wicket:message key="1549"/></a></span> </div> - <div wicket:id="contents"><div wicket:id="child"></div></div> - <div wicket:id="chatPanel"></div> - <div wicket:id="aboutDialog"></div> - </wicket:extend> + <div wicket:id="dev" id="devMenu"/> + <div id="busy_indicator" class="ui-widget-header"><span><wicket:message key="1554"/></span></div> + <div wicket:id="menu"></div> + </div> + <div wicket:id="contents"><div wicket:id="child"></div></div> + <div wicket:id="chatPanel"></div> + <div wicket:id="aboutDialog"></div> +</wicket:extend> </html> \ No newline at end of file Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java Fri Nov 6 06:18:44 2015 @@ -29,7 +29,7 @@ import static org.apache.openmeetings.we import static org.apache.openmeetings.web.util.OmUrlFragment.getPanel; import org.apache.openmeetings.web.app.Application; -import org.apache.openmeetings.web.app.WebClient; +import org.apache.openmeetings.web.app.Client; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.BasePanel; import org.apache.openmeetings.web.common.ConfirmableAjaxBorder; @@ -62,7 +62,7 @@ import org.wicketstuff.urlfragment.UrlFr @AuthorizeInstantiation({"Admin", "Dashboard", "Room"}) public class MainPage extends BaseInitedPage { - private static final long serialVersionUID = 6421960759218157999L; + private static final long serialVersionUID = 1L; private static final Logger log = Red5LoggerFactory.getLogger(MainPage.class, webAppRootKey); private final MenuPanel menu; private final MarkupContainer contents; @@ -127,13 +127,13 @@ public class MainPage extends BaseInited @Override protected void onConnect(ConnectedMessage message) { super.onConnect(message); - addOnlineUser(new WebClient(WebSession.get().getId(), message.getKey(), getUserId())); + addOnlineUser(new Client(WebSession.get().getId(), message.getKey(), getUserId())); log.debug("WebSocketBehavior::onConnect"); } @Override protected void onClose(ClosedMessage message) { - WebClient client = getClientByKeys(getUserId(), WebSession.get().getId()); + Client client = getClientByKeys(getUserId(), WebSession.get().getId()); removeOnlineUser(client); super.onClose(message); log.debug("WebSocketBehavior::onClose"); Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/RecordingPage.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/RecordingPage.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/RecordingPage.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/RecordingPage.java Fri Nov 6 06:18:44 2015 @@ -21,8 +21,8 @@ package org.apache.openmeetings.web.page import static org.apache.openmeetings.web.app.Application.getBean; import static org.apache.openmeetings.web.app.WebSession.getRecordingId; -import org.apache.openmeetings.db.dao.record.FlvRecordingDao; -import org.apache.openmeetings.db.entity.record.FlvRecording; +import org.apache.openmeetings.db.dao.record.RecordingDao; +import org.apache.openmeetings.db.entity.record.Recording; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.user.record.VideoInfo; import org.apache.openmeetings.web.user.record.VideoPlayer; @@ -35,11 +35,11 @@ public class RecordingPage extends BaseI public RecordingPage(PageParameters p) { String hash = p.get("hash").toString(); - FlvRecording r = null; + Recording r = null; if (WebSession.get().signIn(hash)) { Long recId = getRecordingId(); if (recId != null) { - r = getBean(FlvRecordingDao.class).get(recId); + r = getBean(RecordingDao.class).get(recId); } } add(new VideoInfo("info", r).setVisible(r != null), new VideoPlayer("player", r).setVisible(r != null)); Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java Fri Nov 6 06:18:44 2015 @@ -245,7 +245,7 @@ public class ForgetPasswordDialog extend userDao.update(us, -1L); String reset_link = appLink + "?hash=" + us.getResethash(); - String email = us.getAdresses().getEmail(); + String email = us.getAddress().getEmail(); String template = ResetPasswordTemplate.getEmail(reset_link); Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java Fri Nov 6 06:18:44 2015 @@ -197,7 +197,7 @@ public class RegisterDialog extends Abst try { getBean(IUserManager.class).registerUserInit(UserDao.getDefaultRights(), login, password, lastName , firstName, email, null /* age/birthday */, "" /* street */ - , "" /* additionalname */, "" /* fax */, "" /* zip */, state.getState_id() + , "" /* additionalname */, "" /* fax */, "" /* zip */, state.getId() , "" /* town */, lang, true /* sendWelcomeMessage */ , Arrays.asList(getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)), "" /* phone */, false, sendConfirmation, TimeZone.getTimeZone(tzModel.getObject()), @@ -255,7 +255,7 @@ public class RegisterDialog extends Abst langField.setRequired(true).setLabel(Model.of(Application.getString(111))); add(tzDropDown.setRequired(true).setLabel(Model.of(Application.getString(1143)))); add(stateField = new DropDownChoice<State>("state", new PropertyModel<State>(RegisterDialog.this, "state"), - getBean(StateDao.class).getStates(), new ChoiceRenderer<State>("name", "state_id"))); + getBean(StateDao.class).get(), new ChoiceRenderer<State>("name", "state_id"))); stateField.setRequired(true).setLabel(Model.of(Application.getString(120))); add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected private static final long serialVersionUID = 1L; Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java Fri Nov 6 06:18:44 2015 @@ -155,7 +155,7 @@ public class ResetPasswordDialog extends @Override protected void onSubmit(AjaxRequestTarget target) { try { - getBean(UserDao.class).update(user, password.getConvertedInput(), user.getUser_id()); + getBean(UserDao.class).update(user, password.getConvertedInput(), user.getId()); } catch (Exception e) { error(e.getMessage()); } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java Fri Nov 6 06:18:44 2015 @@ -172,11 +172,11 @@ public class SignInDialog extends Abstra } OmAuthenticationStrategy strategy = getAuthenticationStrategy(); WebSession ws = WebSession.get(); - Type type = domain.getLdapConfigId() > 0 ? Type.ldap : Type.user; - if (ws.signIn(login, password, type, domain.getLdapConfigId())) { + Type type = domain.getId() > 0 ? Type.ldap : Type.user; + if (ws.signIn(login, password, type, domain.getId())) { setResponsePage(Application.get().getHomePage()); if (rememberMe) { - strategy.save(login, password, type, domain.getLdapConfigId()); + strategy.save(login, password, type, domain.getId()); } else { strategy.remove(); } @@ -185,7 +185,7 @@ public class SignInDialog extends Abstra if (ws.getLoginError() != null) { ErrorValue eValue = getBean(ErrorDao.class).get(-1 * ws.getLoginError()); if (eValue != null) { - error(Application.getString(eValue.getFieldvalues_id())); + error(Application.getString(eValue.getLabelId())); target.add(feedback); } } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java Fri Nov 6 06:18:44 2015 @@ -142,7 +142,7 @@ public class InvitationDialog extends Ab @Override protected Object getId(Organisation choice) { - return choice.getOrganisation_id(); + return choice.getId(); } }); @@ -182,7 +182,7 @@ public class InvitationDialog extends Ab groups.setModelObject(new ArrayList<Organisation>()); groups.setEnabled(false); tzId.setObject(u.getTimeZoneId()); - lang = u.getLanguage_id(); + lang = u.getLanguageId(); url.setModelObject(null); inviteeType.setObject(InviteeType.user); form.setModelObject(i); @@ -242,7 +242,7 @@ public class InvitationDialog extends Ab } } else { for (Organisation g : groups.getModelObject()) { - for (Organisation_Users ou : getBean(OrganisationUserDao.class).get(g.getOrganisation_id(), 0, Integer.MAX_VALUE)) { + for (Organisation_Users ou : getBean(OrganisationUserDao.class).get(g.getId(), 0, Integer.MAX_VALUE)) { Invitation i = create(ou.getUser()); try { getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false); @@ -280,7 +280,7 @@ public class InvitationDialog extends Ab i.setInvitee(u); if (Type.contact == u.getType()) { //TODO not sure it is right - u.setLanguage_id(lang); + u.setLanguageId(lang); } return getBean(InvitationDao.class).update(i); } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java Fri Nov 6 06:18:44 2015 @@ -42,7 +42,7 @@ public class RoomBroadcaster { sa.new MessageSender(sa.getRoomScope("" + roomId), method, obj) { public boolean filter(IConnection conn) { Client rcl = sessionMgr.getClientByStreamId(conn.getClient().getId(), null); - return rcl.getIsScreenClient() + return rcl.isScreenClient() || rcl.getRoom_id() == null || !rcl.getRoom_id().equals(roomId) || userDao.get(rcl.getUser_id()) == null; } }.start(); Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Fri Nov 6 06:18:44 2015 @@ -20,6 +20,7 @@ package org.apache.openmeetings.web.room import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.Application.getRoomUsers; import static org.apache.openmeetings.web.app.WebSession.getLanguage; import static org.apache.openmeetings.web.app.WebSession.getSid; import static org.apache.openmeetings.web.app.WebSession.getUserId; @@ -31,6 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.apache.openmeetings.core.session.SessionManager; import org.apache.openmeetings.db.dao.room.InvitationDao; import org.apache.openmeetings.db.dao.room.PollDao; import org.apache.openmeetings.db.dao.room.RoomDao; @@ -39,7 +41,6 @@ import org.apache.openmeetings.db.dao.se import org.apache.openmeetings.db.dao.server.SessiondataDao; import org.apache.openmeetings.db.entity.room.Client; import org.apache.openmeetings.db.entity.server.Server; -import org.apache.openmeetings.core.session.SessionManager; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.BasePanel; import org.apache.openmeetings.web.room.poll.CreatePollDialog; @@ -149,7 +150,7 @@ public class RoomPanel extends BasePanel } else if (!secureHash.isEmpty()) { roomId = getBean(SOAPLoginDao.class).get(secureHash.toString()).getRoom_id(); } else if (!invitationHash.isEmpty()) { - roomId = getBean(InvitationDao.class).getInvitationByHashCode(invitationHash.toString(), true).getRoom().getRooms_id(); + roomId = getBean(InvitationDao.class).getInvitationByHashCode(invitationHash.toString(), true).getRoom().getId(); } } catch (Exception e) { //no-op @@ -231,6 +232,15 @@ public class RoomPanel extends BasePanel } } + public static boolean isModerator(long userId, long roomId) { + for (org.apache.openmeetings.web.app.Client c : getRoomUsers(roomId)) { + if (c.getUserId() == userId && c.hasRight(org.apache.openmeetings.web.app.Client.Right.moderator)) { + return true; + } + } + return false; + } + private ResourceReference newResourceReference() { return new JavaScriptResourceReference(RoomPanel.class, "swf-functions.js"); } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java Fri Nov 6 06:18:44 2015 @@ -26,7 +26,7 @@ import java.util.List; import org.apache.openmeetings.db.dao.room.PollDao; import org.apache.openmeetings.db.entity.room.RoomPoll; -import org.apache.openmeetings.db.entity.room.RoomPollAnswers; +import org.apache.openmeetings.db.entity.room.RoomPollAnswer; import org.apache.openmeetings.web.app.Application; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; @@ -212,11 +212,11 @@ public class PollResultsDialog extends A private Integer[] getValues(RoomPoll p) { Integer[] values = initValues(p != null && p.getPollType().getIsNumericAnswer() ? 10 : 2); if (p != null && p.getPollType().getIsNumericAnswer()) { - for (RoomPollAnswers a : p.getRoomPollAnswerList()) { + for (RoomPollAnswer a : p.getRoomPollAnswerList()) { values[a.getPointList() - 1] ++; } } else if (p != null) { - for (RoomPollAnswers a : p.getRoomPollAnswerList()) { + for (RoomPollAnswer a : p.getRoomPollAnswerList()) { values[a.getAnswer() ? 0 : 1] ++; } } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java Fri Nov 6 06:18:44 2015 @@ -27,7 +27,7 @@ import java.util.List; import org.apache.openmeetings.db.dao.room.PollDao; import org.apache.openmeetings.db.dao.user.UserDao; -import org.apache.openmeetings.db.entity.room.RoomPollAnswers; +import org.apache.openmeetings.db.entity.room.RoomPollAnswer; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.web.app.Application; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -50,7 +50,7 @@ import com.googlecode.wicket.kendo.ui.pa * @author solomax * */ -public class VoteDialog extends AbstractFormDialog<RoomPollAnswers> { +public class VoteDialog extends AbstractFormDialog<RoomPollAnswer> { private static final long serialVersionUID = 1L; private final static List<Integer> answers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); //TODO max vote should be added private final long roomId; @@ -63,15 +63,15 @@ public class VoteDialog extends Abstract public VoteDialog(String id, long roomId) { super(id, Application.getString(18)); this.roomId = roomId; - add(form = new PollAnswerForm("form", new CompoundPropertyModel<RoomPollAnswers>(new RoomPollAnswers()))); + add(form = new PollAnswerForm("form", new CompoundPropertyModel<RoomPollAnswer>(new RoomPollAnswer()))); } static String getName(User u) { - return u == null ? "" : getUserId() == u.getUser_id() ? Application.getString(1411) : u.getFirstname() + " " + u.getLastname(); + return u == null ? "" : getUserId() == u.getId() ? Application.getString(1411) : u.getFirstname() + " " + u.getLastname(); } public void updateModel(AjaxRequestTarget target) { - RoomPollAnswers a = new RoomPollAnswers(); + RoomPollAnswer a = new RoomPollAnswer(); a.setRoomPoll(getBean(PollDao.class).getPoll(roomId)); User u = getBean(UserDao.class).get(getUserId()); a.setVotedUser(u); @@ -117,7 +117,7 @@ public class VoteDialog extends Abstract */ @Override protected void onSubmit(AjaxRequestTarget target) { - RoomPollAnswers a = form.getModelObject(); + RoomPollAnswer a = form.getModelObject(); a.setVoteDate(new Date()); a.getRoomPoll().getRoomPollAnswerList().add(a); getBean(PollDao.class).updatePoll(a.getRoomPoll()); @@ -128,12 +128,12 @@ public class VoteDialog extends Abstract user.detach(); super.onDetach(); } - private class PollAnswerForm extends Form<RoomPollAnswers> { + private class PollAnswerForm extends Form<RoomPollAnswer> { private static final long serialVersionUID = 1L; private final WebMarkupContainer typeBool = new WebMarkupContainer("typeBool"); private final WebMarkupContainer typeInt = new WebMarkupContainer("typeInt"); - PollAnswerForm(String id, IModel<RoomPollAnswers> model) { + PollAnswerForm(String id, IModel<RoomPollAnswer> model) { super(id, model); add(feedback); add(new Label("user", user)); Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/AboutDialog.java Fri Nov 6 06:18:44 2015 @@ -21,6 +21,7 @@ package org.apache.openmeetings.web.user import static org.apache.openmeetings.util.Version.getBuildDate; import static org.apache.openmeetings.util.Version.getRevision; import static org.apache.openmeetings.util.Version.getVersion; +import static org.apache.openmeetings.web.app.Application.getBean; import java.util.ArrayList; import java.util.List; @@ -34,15 +35,12 @@ import com.googlecode.wicket.jquery.ui.w import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton; public class AboutDialog extends AbstractDialog<String> { - private static final long serialVersionUID = 1400355222295594321L; + private static final long serialVersionUID = 1L; public AboutDialog(String id) { super(id, Application.getString(1549)); - add(new Label("name", Application.getBean(ConfigurationDao.class).getConfValue( - "application.name" - , String.class - , ConfigurationDao.DEFAULT_APP_NAME))); + add(new Label("name", getBean(ConfigurationDao.class).getAppName())); add(new Label("version", getVersion())); add(new Label("revision", getRevision())); add(new Label("buildDate", getBuildDate())); @@ -53,6 +51,7 @@ public class AboutDialog extends Abstrac return new ArrayList<DialogButton>(); } - public void onClose(IPartialPageRequestHandler arg0, DialogButton arg1) { + @Override + public void onClose(IPartialPageRequestHandler handler, DialogButton arg1) { } } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.html Fri Nov 6 06:18:44 2015 @@ -19,47 +19,27 @@ --> <html xmlns:wicket="http://wicket.apache.org"> - <wicket:head> - <script type="text/javascript"> - function toggleChat() { - var chat = $('#chat'); - $('#chat #controlBlock #control') - .removeClass('ui-icon-carat-1-' + (chat.height() < 24 ? 'n' : 's')) - .addClass('ui-icon-carat-1-' + (chat.height() < 24 ? 's' : 'n')); - chat.animate({ height: chat.height() < 24 ? "320px" : "20px" }, 1000); - } - function addChatMessageInternal(m) { - if (m && m.type == "chat") { - var msg = $('<div><span class="from">' + m.msg.from + '</span><span class="date">' - + m.msg.sent + '</span>' + m.msg.message + '</div>'); - $('#messageArea').append(msg); - msg[0].scrollIntoView(); - } - } - function addChatMessage(m) { - if (m && m.type == "chat") { - addChatMessageInternal(m) - $('#messageArea').emoticonize(); - } - } - Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) { - addChatMessage(jQuery.parseJSON(msg)); - }); - </script> - </wicket:head> - <wicket:panel> - <div id="chat" class="ui-state-default"> - <div id="controlBlock" onclick="toggleChat();" class="ui-state-active clickable"><span id="control" class="ui-icon ui-icon-carat-1-n sort-icon"></span><span><wicket:message key="244"/></span></div> - <div wicket:id="messages"></div> - <form wicket:id="sendForm"> - <div wicket:id="toolbarContainer"></div> - <table style="width: 100%"> - <tr> - <td><div id="chatMessage" wicket:id="chatMessage"></div></td> - <td style="width: 50px"><div wicket:id="send"><wicket:message key="220"/></div></td> - </tr> - </table> - </form> +<wicket:panel> + <div id="chat" class="ui-state-default"> + <div onclick="toggleChat();" class="control block clickable ui-widget-header ui-state-active"><div class="ui-icon ui-icon-carat-1-n sort-icon"></div><div class="label"><wicket:message key="244"/></div></div> + <div id="chatTabs"> + <ul> + <li><a href="#chatTab-all"><wicket:message key="1494"/></a></li> + </ul> + <div id="chatTab-all" class="messageArea"></div> </div> - </wicket:panel> + <form wicket:id="sendForm"> + <div wicket:id="toolbarContainer"></div> + <table style="width: 100%"> + <tr> + <td><div id="chatMessage" wicket:id="chatMessage"></div></td> + <td style="width: 50px"> + <div wicket:id="send"><wicket:message key="220"/></div> + <input type="hidden" wicket:id="activeTab" id="activeChatTab"/> + </td> + </tr> + </table> + </form> + </div> +</wicket:panel> </html> Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java Fri Nov 6 06:18:44 2015 @@ -21,29 +21,52 @@ package org.apache.openmeetings.web.user import static org.apache.commons.lang3.StringEscapeUtils.unescapeXml; import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.Application.getRoomUsers; +import static org.apache.openmeetings.web.app.Application.getUserRooms; +import static org.apache.openmeetings.web.app.Application.isUserInRoom; import static org.apache.openmeetings.web.app.WebSession.getDateFormat; import static org.apache.openmeetings.web.app.WebSession.getUserId; +import static org.apache.openmeetings.web.room.RoomPanel.isModerator; +import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction; +import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Calendar; import java.util.Date; +import java.util.List; import org.apache.openmeetings.db.dao.basic.ChatDao; +import org.apache.openmeetings.db.dao.room.RoomDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.basic.ChatMessage; +import org.apache.openmeetings.db.entity.room.Room; +import org.apache.openmeetings.db.entity.user.User; +import org.apache.openmeetings.web.app.Application; +import org.apache.openmeetings.web.app.Client; +import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.BasePanel; import org.apache.wicket.Component; +import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.json.JSONArray; import org.apache.wicket.ajax.json.JSONException; import org.apache.wicket.ajax.json.JSONObject; import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation; import org.apache.wicket.behavior.Behavior; +import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; +import org.apache.wicket.markup.head.JavaScriptHeaderItem; import org.apache.wicket.markup.head.OnDomReadyHeaderItem; -import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.head.PriorityHeaderItem; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.HiddenField; import org.apache.wicket.model.Model; import org.apache.wicket.protocol.ws.WebSocketSettings; import org.apache.wicket.protocol.ws.api.IWebSocketConnection; import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry; +import org.apache.wicket.protocol.ws.api.registry.PageIdKey; +import org.apache.wicket.request.resource.JavaScriptResourceReference; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; @@ -54,41 +77,97 @@ import com.googlecode.wicket.jquery.ui.p @AuthorizeInstantiation({"Dashboard", "Room"}) public class ChatPanel extends BasePanel { private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey); - private static final long serialVersionUID = -9144707674886211557L; - private static final String MESSAGE_AREA_ID = "messageArea"; + private static final long serialVersionUID = 1L; + private static final String ID_TAB_PREFIX = "chatTab-"; + private static final String ID_USER_PREFIX = ID_TAB_PREFIX + "u"; + public static final String ID_ROOM_PREFIX = ID_TAB_PREFIX + "r"; + private static final String ID_ALL = ID_TAB_PREFIX + "all"; + private static final String PARAM_MSG_ID = "msgid"; + private static final String PARAM_ROOM_ID = "roomid"; + private final AbstractDefaultAjaxBehavior acceptMessage = new AbstractDefaultAjaxBehavior() { + private static final long serialVersionUID = 1L; + + @Override + protected void respond(AjaxRequestTarget target) { + try { + long msgId = getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong(); + long roomId = getRequest().getRequestParameters().getParameterValue(PARAM_ROOM_ID).toLong(); + ChatDao dao = getBean(ChatDao.class); + ChatMessage m = dao.get(msgId); + if (m.isNeedModeration() && isModerator(getUserId(), roomId)) { + m.setNeedModeration(false); + dao.update(m); + sendRoom(m, getMessage(Arrays.asList(m)).put("mode", "accept").toString()); + } else { + log.error("It seems like we are being hacked!!!!"); + } + } catch (Exception e) { + log.error("Unexpected exception while accepting chat message", e); + } + } + }; - private JSONObject getMessage(ChatMessage m) throws JSONException { - String msg = m.getMessage(); - msg = msg == null ? msg : " " + msg.replaceAll(" ", " ") + " "; - return new JSONObject() - .put("type", "chat") - .put("msg", new JSONObject() + private static JSONObject setScope(JSONObject o, ChatMessage m, long curUserId) { + String scope, scopeName; + if (m.getToUser() != null) { + User u = curUserId == m.getToUser().getId() ? m.getFromUser() : m.getToUser(); + scope = ID_USER_PREFIX + u.getId(); + scopeName = String.format("%s %s", u.getFirstname(), u.getLastname()); + } else if (m.getToRoom() != null) { + scope = ID_ROOM_PREFIX + m.getToRoom().getId(); + scopeName = String.format("%s %s", Application.getString(406), m.getToRoom().getId()); + o.put("needModeration", m.isNeedModeration()); + } else { + scope = ID_ALL; + scopeName = Application.getString(1494); + } + return o.put("scope", scope).put("scopeName", scopeName); + } + + public static JSONObject getMessage(List<ChatMessage> list) throws JSONException { + return getMessage(getUserId(), list); + } + + private static JSONObject getMessage(long curUserId, List<ChatMessage> list) throws JSONException { + JSONArray arr = new JSONArray(); + for (ChatMessage m : list) { + String smsg = m.getMessage(); + smsg = smsg == null ? smsg : " " + smsg.replaceAll(" ", " ") + " "; + arr.put(setScope(new JSONObject(), m, curUserId) .put("id", m.getId()) - .put("message", msg) + .put("message", smsg) .put("from", m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname()) - .put("sent", getDateFormat().format(m.getSent())) - ); + .put("sent", getDateFormat().format(m.getSent()))); + } + return new JSONObject() + .put("type", "chat") + .put("msg", arr); } public ChatPanel(String id) { super(id); - setOutputMarkupId(true); + setOutputMarkupPlaceholderTag(true); setMarkupId(id); - add(new Behavior() { - private static final long serialVersionUID = -2205036360048419129L; + add(acceptMessage, new Behavior() { + private static final long serialVersionUID = 1L; @Override public void renderHead(Component component, IHeaderResponse response) { ChatDao dao = getBean(ChatDao.class); try { - StringBuilder sb = new StringBuilder(); //FIXME limited count should be loaded with "earlier" link - for (ChatMessage m : dao.get(0, 30)) { - sb.append("addChatMessageInternal(").append(getMessage(m).toString()).append(");"); + List<ChatMessage> list = new ArrayList<ChatMessage>(dao.getGlobal(0, 30)); + for(Long roomId : getUserRooms(getUserId())) { + Room r = getBean(RoomDao.class).get(roomId); + list.addAll(dao.getRoom(roomId, 0, 30, !r.isChatModerated() || isModerator(getUserId(), roomId))); } - if (sb.length() > 0) { - sb.append("$('#").append(MESSAGE_AREA_ID).append("').emoticonize();"); + Calendar c = WebSession.getCalendar(); + c.add(Calendar.HOUR_OF_DAY, -1); + list.addAll(dao.getUserRecent(getUserId(), c.getTime(), 0, 30)); + if (list.size() > 0) { + StringBuilder sb = new StringBuilder(); + sb.append("addChatMessage(").append(getMessage(list).toString()).append(");"); response.render(OnDomReadyHeaderItem.forScript(sb.toString())); } } catch (JSONException e) { @@ -97,12 +176,58 @@ public class ChatPanel extends BasePanel super.renderHead(component, response); } }); - add(new EmoticonsBehavior("#" + MESSAGE_AREA_ID)); - add(new WebMarkupContainer("messages").setMarkupId(MESSAGE_AREA_ID)); - ChatToolbar toolbar = new ChatToolbar("toolbarContainer"); - final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar); - add(new Form<Void>("sendForm").add( - toolbar + add(new EmoticonsBehavior(".messageArea")); + add(new ChatForm("sendForm")); + } + + public void roomEnter(Room r, AjaxRequestTarget target) { + if (r.isChatHidden()) { + target.add(setVisible(false)); + return; + } + StringBuilder sb = new StringBuilder(); + sb.append("$(function() {"); + sb.append(String.format("addChatTab('%1$s%2$d', '%3$s %2$d');", ID_ROOM_PREFIX, r.getId(), Application.getString(406))); + sb.append(r.isChatOpened() ? "openChat();" : "closeChat();"); + List<ChatMessage> list = getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || isModerator(getUserId(), r.getId())); + if (list.size() > 0) { + sb.append("addChatMessage(").append(getMessage(list).toString()).append(");"); + } + sb.append("});"); + target.appendJavaScript(sb); + } + + @Override + public void renderHead(IHeaderResponse response) { + super.renderHead(response); + response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(ChatPanel.class, "chat.js")))); + response.render(CssHeaderItem.forUrl("css/chat.css")); + response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("acceptMessage", acceptMessage, explicit(PARAM_ROOM_ID), explicit(PARAM_MSG_ID)), "acceptMessage"))); + } + + private void sendRoom(ChatMessage m, String msg) { + IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry(); + for (Client c : getRoomUsers(m.getToRoom().getId())) { + try { + if (!m.isNeedModeration() || (m.isNeedModeration() && c.hasRight(Client.Right.moderator))) { + reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg); + } + } catch (Exception e) { + log.error("Error while sending message to room", e); + } + } + } + + private class ChatForm extends Form<Void> { + private static final long serialVersionUID = 1L; + private final ChatToolbar toolbar = new ChatToolbar("toolbarContainer"); + private final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar); + private final HiddenField<String> activeTab = new HiddenField<String>("activeTab", Model.of("")); + + ChatForm(String id) { + super(id); + add(toolbar + , activeTab , chatMessage.setOutputMarkupId(true) , new AjaxButton("send") { private static final long serialVersionUID = 1L; @@ -114,18 +239,63 @@ public class ChatPanel extends BasePanel m.setMessage(unescapeXml(chatMessage.getDefaultModelObjectAsString())); m.setSent(new Date()); m.setFromUser(getBean(UserDao.class).get(getUserId())); + try { + String scope = activeTab.getModelObject(); + if (scope != null) { + if (ID_ALL.equals(scope)) { + //we done + } else if (scope.startsWith(ID_ROOM_PREFIX)) { + Room r = getBean(RoomDao.class).get(Long.parseLong(scope.substring(ID_ROOM_PREFIX.length()))); + if (isUserInRoom(r.getId(), getUserId())) { + m.setToRoom(r); + } else { + log.error("It seems like we are being hacked!!!!"); + return; + } + m.setNeedModeration(r.isChatModerated() && !isModerator(m.getFromUser().getId(), r.getId())); + } else if (scope.startsWith(ID_USER_PREFIX)) { + User u = getBean(UserDao.class).get(Long.parseLong(scope.substring(ID_USER_PREFIX.length()))); + m.setToUser(u); + } + } + } catch (Exception e) { + //no-op + } dao.update(m); - IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry(); - for (IWebSocketConnection c : reg.getConnections(getApplication())) { - try { - c.sendMessage(getMessage(m).toString()); - } catch(Exception e) { - log.error("Error while sending message", e); + String msg = getMessage(Arrays.asList(m)).toString(); + if (m.getToRoom() != null) { + sendRoom(m, msg); + } else if (m.getToUser() != null) { + IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry(); + for (Client c : Application.getClients(getUserId())) { + try { + reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg); + } catch (Exception e) { + log.error("Error while sending message to room", e); + } + } + msg = getMessage(m.getToUser().getId(), Arrays.asList(m)).toString(); + for (Client c : Application.getClients(m.getToUser().getId())) { + try { + reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId())).sendMessage(msg); + } catch (Exception e) { + log.error("Error while sending message to room", e); + } + } + } else { + IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry(); + for (IWebSocketConnection c : reg.getConnections(getApplication())) { + try { + c.sendMessage(msg); + } catch(Exception e) { + log.error("Error while sending message", e); + } } } chatMessage.setDefaultModelObject(""); target.add(chatMessage); }; - })); + }); + } } } Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html Fri Nov 6 06:18:44 2015 @@ -37,7 +37,7 @@ </tr> <tr> <td><wicket:message key="565" /></td> - <td><select wicket:id="remind" ></select></td> + <td><select wicket:id="reminder" ></select></td> </tr> <tr> <td colspan="2"><input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label></td> Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java Fri Nov 6 06:18:44 2015 @@ -20,11 +20,9 @@ package org.apache.openmeetings.web.user import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; import static org.apache.openmeetings.web.app.Application.getBean; -import static org.apache.openmeetings.web.app.WebSession.getLanguage; import static org.apache.openmeetings.web.app.WebSession.getUserId; import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate; import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime; -import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes; import java.util.ArrayList; import java.util.Arrays; @@ -35,14 +33,12 @@ import java.util.List; import java.util.Set; import org.apache.openmeetings.db.dao.calendar.AppointmentDao; -import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao; import org.apache.openmeetings.db.dao.room.RoomDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.calendar.Appointment; -import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps; +import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder; import org.apache.openmeetings.db.entity.calendar.MeetingMember; import org.apache.openmeetings.db.entity.room.Room; -import org.apache.openmeetings.db.entity.room.RoomType; import org.apache.openmeetings.db.entity.user.Organisation_Users; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.db.util.FormatHelper; @@ -60,6 +56,7 @@ import org.apache.wicket.markup.html.bas import org.apache.wicket.markup.html.form.ChoiceRenderer; import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.IChoiceRenderer; import org.apache.wicket.markup.html.form.PasswordTextField; import org.apache.wicket.markup.html.form.RequiredTextField; import org.apache.wicket.markup.html.form.TextField; @@ -130,18 +127,19 @@ public class AppointmentDialog extends A confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){ private static final long serialVersionUID = 1L; - public void onClose(IPartialPageRequestHandler target, DialogButton button) { + @Override + public void onClose(IPartialPageRequestHandler handler, DialogButton button) { if (button != null && button.match(AbstractDialog.OK)){ - deleteAppointment(target); + deleteAppointment(handler); } } }; add(confirmDelete); } - protected void deleteAppointment(IPartialPageRequestHandler target) { + protected void deleteAppointment(IPartialPageRequestHandler handler) { getBean(AppointmentDao.class).delete(getModelObject(), getUserId()); - calendarPanel.refresh(target); + calendarPanel.refresh(handler); } @Override @@ -160,16 +158,16 @@ public class AppointmentDialog extends A } @Override - protected void onOpen(IPartialPageRequestHandler target) { - target.add(this.form); + protected void onOpen(IPartialPageRequestHandler handler) { + handler.add(this.form); } @Override - public void onClose(IPartialPageRequestHandler target, DialogButton button) { + public void onClose(IPartialPageRequestHandler handler, DialogButton button) { if (delete.equals(button)) { - confirmDelete.open(target); + confirmDelete.open(handler); } else if (enterRoom.equals(button)) { - RoomEnterBehavior.roomEnter((MainPage)getPage(), target, getModelObject().getRoom().getRooms_id()); + RoomEnterBehavior.roomEnter((MainPage)getPage(), handler, getModelObject().getRoom().getId()); } } @@ -184,25 +182,25 @@ public class AppointmentDialog extends A final List<MeetingMember> attendees = a.getMeetingMembers() == null ? new ArrayList<MeetingMember>() : a.getMeetingMembers(); Set<Long> currentIds = new HashSet<Long>(); for (User u : attendeesModel.getObject()) { - if (u.getUser_id() != null) { - currentIds.add(u.getUser_id()); + if (u.getId() != null) { + currentIds.add(u.getId()); } } //remove users for (Iterator<MeetingMember> i = attendees.iterator(); i.hasNext();) { MeetingMember m = i.next(); - if (!currentIds.contains(m.getUser().getUser_id())) { + if (!currentIds.contains(m.getUser().getId())) { i.remove(); } } Set<Long> originalIds = new HashSet<Long>(); for (MeetingMember m : attendees) { - originalIds.add(m.getUser().getUser_id()); + originalIds.add(m.getUser().getId()); } //add users for (User u : attendeesModel.getObject()) { - if (u.getUser_id() == null || !originalIds.contains(u.getUser_id())) { + if (u.getId() == null || !originalIds.contains(u.getId())) { MeetingMember mm = new MeetingMember(); mm.setUser(u); mm.setDeleted(false); @@ -221,7 +219,7 @@ public class AppointmentDialog extends A } public static boolean isOwner(Appointment object) { - return object.getOwner() != null && getUserId() == object.getOwner().getUser_id(); + return object.getOwner() != null && getUserId() == object.getOwner().getId(); } @Override @@ -237,32 +235,30 @@ public class AppointmentDialog extends A private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now())); private final PasswordTextField pwd = new PasswordTextField("password"); private final Label owner = new Label("aowner", Model.of("")); - private final DropDownChoice<RoomType> roomType = new RoomTypeDropDown("room.roomtype"); + private final DropDownChoice<Room.Type> roomType = new RoomTypeDropDown("room.type"); private final DropDownChoice<Room> room = new DropDownChoice<Room>( "room" , getRoomList() - , new ChoiceRenderer<Room>("name", "rooms_id")); + , new ChoiceRenderer<Room>("name", "id")); @Override protected void onModelChanged() { super.onModelChanged(); Appointment a = getModelObject(); - List<AppointmentReminderTyps> remindTypes = getRemindTypes(); - if (a.getRemind() == null && !remindTypes.isEmpty()) { - a.setRemind(remindTypes.get(0)); + if (a.getReminder() == null) { + a.setReminder(Reminder.none); } - List<RoomType> roomTypes = getRoomTypes(); if (a.getRoom() == null) { Room r = new Room(); r.setAppointment(true); a.setRoom(r); } - if (a.getRoom().getRoomtype() == null && !roomTypes.isEmpty()) { - a.getRoom().setRoomtype(roomTypes.get(0)); + if (a.getRoom().getType() == null) { + a.getRoom().setType(Room.Type.conference); } - createRoom = Boolean.TRUE.equals(a.getRoom().getAppointment()); + createRoom = a.getRoom().isAppointment(); roomType.setEnabled(createRoom); room.setEnabled(!createRoom); if (a.getId() == null) { @@ -304,21 +300,30 @@ public class AppointmentDialog extends A pwd.setOutputMarkupId(true); add(pwd); - List<AppointmentReminderTyps> remindTypes = getRemindTypes(); - add(new DropDownChoice<AppointmentReminderTyps>( - "remind" - , remindTypes - , new ChoiceRenderer<AppointmentReminderTyps>() { + add(new DropDownChoice<Reminder>( + "reminder" + , Arrays.asList(Reminder.values()) + , new IChoiceRenderer<Reminder>() { private static final long serialVersionUID = 1L; @Override - public Object getDisplayValue(AppointmentReminderTyps object) { - return getString("" + object.getFieldvalues_id()); + public Object getDisplayValue(Reminder art) { + return getString("appointment.reminder." + art.name()); } @Override - public String getIdValue(AppointmentReminderTyps object, int index) { - return "" + object.getTypId(); + public String getIdValue(Reminder art, int index) { + return art.name(); + } + + @Override + public Reminder getObject(String id, IModel<? extends List<? extends Reminder>> choices) { + for (Reminder art : choices.getObject()) { + if (art.name().equals(id)) { + return art; + } + } + return null; } })); @@ -349,19 +354,15 @@ public class AppointmentDialog extends A add(owner); } - private List<AppointmentReminderTyps> getRemindTypes() { - return getBean(AppointmentReminderTypDao.class).getAppointmentReminderTypList(getLanguage()); - } - private List<Room> getRoomList() { //FIXME need to be reviewed List<Room> result = new ArrayList<Room>(); RoomDao dao = getBean(RoomDao.class); result.addAll(dao.getPublicRooms()); for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) { - result.addAll(dao.getOrganisationRooms(ou.getOrganisation().getOrganisation_id())); + result.addAll(dao.getOrganisationRooms(ou.getOrganisation().getId())); } - if (getModelObject().getRoom() != null && getModelObject().getRoom().getAppointment()) { //FIXME review + if (getModelObject().getRoom() != null && getModelObject().getRoom().isAppointment()) { //FIXME review result.add(getModelObject().getRoom()); } return result; Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java Fri Nov 6 06:18:44 2015 @@ -42,7 +42,7 @@ public class AppointmentModel extends Ca @Override protected List<? extends CalendarEvent> load() { List<CalendarEvent> list = new ArrayList<CalendarEvent>(); - for (Appointment a : getBean(AppointmentDao.class).getAppointmentsByRange(getUserId(), getDate(getStart()), getDate(getEnd()))) { + for (Appointment a : getBean(AppointmentDao.class).getInRange(getUserId(), getDate(getStart()), getDate(getEnd()))) { list.add(new OmCalendarEvent(a)); } return list; Modified: openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java URL: http://svn.apache.org/viewvc/openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java?rev=1712911&r1=1712910&r2=1712911&view=diff ============================================================================== --- openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java (original) +++ openmeetings/branches/3.1.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java Fri Nov 6 06:18:44 2015 @@ -29,9 +29,9 @@ import java.util.Date; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; import org.apache.openmeetings.db.dao.calendar.AppointmentDao; -import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.calendar.Appointment; +import org.apache.openmeetings.db.entity.calendar.Appointment.Reminder; import org.apache.openmeetings.web.app.Application; import org.apache.openmeetings.web.app.WebSession; import org.apache.openmeetings.web.common.UserPanel; @@ -84,10 +84,6 @@ public class CalendarPanel extends UserP return getBean(AppointmentDao.class); } - private AppointmentReminderTypDao getAppointmentReminderTypDao() { - return getBean(AppointmentReminderTypDao.class); - } - public void refresh(IPartialPageRequestHandler target) { calendar.refresh(target); } @@ -265,7 +261,7 @@ public class CalendarPanel extends UserP private Appointment getDefault() { Appointment a = new Appointment(); - a.setRemind(getAppointmentReminderTypDao().get(3L)); //TODO: Make configurable + a.setReminder(Reminder.email); //TODO: Make configurable a.setOwner(getBean(UserDao.class).get(getUserId())); a.setTitle(Application.getString(1444)); log.debug(" -- getDefault -- Current model " + a);
