blob: f7bcf4946a09e0fdbb1b184ef9734b43f717f868 [file] [log] [blame]
/*
* 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.util;
import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
import static org.apache.openmeetings.util.OpenmeetingsVariables.getBaseUrl;
import java.io.Serializable;
import java.util.Locale;
import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
import org.apache.openmeetings.db.dao.room.RoomDao;
import org.apache.openmeetings.db.entity.room.Room;
import org.apache.openmeetings.web.admin.backup.BackupPanel;
import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
import org.apache.openmeetings.web.admin.connection.ConnectionsPanel;
import org.apache.openmeetings.web.admin.email.EmailPanel;
import org.apache.openmeetings.web.admin.extra.ExtraPanel;
import org.apache.openmeetings.web.admin.groups.GroupsPanel;
import org.apache.openmeetings.web.admin.labels.LangPanel;
import org.apache.openmeetings.web.admin.ldaps.LdapsPanel;
import org.apache.openmeetings.web.admin.oauth.OAuthPanel;
import org.apache.openmeetings.web.admin.rooms.RoomsPanel;
import org.apache.openmeetings.web.admin.users.UsersPanel;
import org.apache.openmeetings.web.app.Application;
import org.apache.openmeetings.web.app.ClientManager;
import org.apache.openmeetings.web.common.BasePanel;
import org.apache.openmeetings.web.room.RoomPanel;
import org.apache.openmeetings.web.user.calendar.CalendarPanel;
import org.apache.openmeetings.web.user.dashboard.OmDashboardPanel;
import org.apache.openmeetings.web.user.profile.EditProfilePanel;
import org.apache.openmeetings.web.user.profile.InvitationsPanel;
import org.apache.openmeetings.web.user.profile.MessagesContactsPanel;
import org.apache.openmeetings.web.user.profile.UserSearchPanel;
import org.apache.openmeetings.web.user.profile.WidgetsPanel;
import org.apache.openmeetings.web.user.record.RecordingsPanel;
import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
import org.apache.wicket.request.flow.RedirectToUrlException;
public class OmUrlFragment implements Serializable {
private static final long serialVersionUID = 1L;
private AreaKeys area = AreaKeys.USER;
private String type = "";
public static final String CHILD_ID = "child";
public static final String TYPE_CALENDAR = "calendar";
public static final String TYPE_DASHBOARD = "dashboard";
public static final String TYPE_MESSAGES = "messages";
public static final String TYPE_EDIT = "edit";
public static final String TYPE_RECORDINGS = "record";
public static final String TYPE_MY = "my";
public static final String TYPE_GROUP = "group";
public static final String TYPE_PUBLIC = "public";
public static final String TYPE_USER = "user";
public static final String TYPE_CONNECTION = "connection";
public static final String TYPE_ROOM = "room";
public static final String TYPE_CONFIG = "config";
public static final String TYPE_LANG = "lang";
public static final String TYPE_LDAP = "ldap";
public static final String TYPE_BACKUP = "backup";
public static final String TYPE_OAUTH2 = "oauth2";
public static final String TYPE_EMAIL = "email";
public static final String TYPE_EXTRA = "extra";
public static final String TYPE_SEARCH = "search";
public static final String TYPE_INVITATION = "invitation";
public static final String TYPE_WIDGET = "widget";
public static final OmUrlFragment DASHBOARD = new OmUrlFragment(AreaKeys.USER, TYPE_DASHBOARD);
public static final OmUrlFragment PROFILE_EDIT = new OmUrlFragment(AreaKeys.PROFILE, TYPE_EDIT);
public static final OmUrlFragment PROFILE_MESSAGES = new OmUrlFragment(AreaKeys.PROFILE, TYPE_MESSAGES);
public static final OmUrlFragment CALENDAR = new OmUrlFragment(AreaKeys.USER, TYPE_CALENDAR);
public static final OmUrlFragment ROOMS_PUBLIC = new OmUrlFragment(AreaKeys.ROOMS, TYPE_PUBLIC);
public static final OmUrlFragment ROOMS_GROUP = new OmUrlFragment(AreaKeys.ROOMS, TYPE_GROUP);
public static final OmUrlFragment ROOMS_MY = new OmUrlFragment(AreaKeys.ROOMS, TYPE_MY);
public enum AreaKeys {
USER
, ADMIN
, PROFILE
, ROOM
, ROOMS;
public String area() {
return name().toLowerCase(Locale.ROOT);
}
public static AreaKeys of(String val) {
return val == null ? null : AreaKeys.valueOf(val.toUpperCase(Locale.ROOT));
}
}
public enum MenuActions {
DASHBOARD_START
, DASHBOARD_CALENDAR
, RECORD
, ROOMS_PUBLIC
, ROOMS_GROUP
, ROOMS_MY
, ADMIN_USER
, ADMIN_CONNECTION
, ADMIN_GROUP
, ADMIN_ROOM
, ADMIN_CONFIG
, ADMIN_LABEL
, ADMIN_LDAP
, ADMIN_BACKUP
, ADMIN_OAUTH
, ADMIN_EMAIL
, ADMIN_EXTRA
, PROFILE_MESSAGE
, PROFILE_EDIT
, PROFILE_SEARCH
, PROFILE_INVITATION
, PROFILE_WIDGET
}
public OmUrlFragment(AreaKeys area, String type) {
this.setArea(area);
this.setType(type);
}
public OmUrlFragment(MenuActions action) {
switch(action) {
case DASHBOARD_START:
setArea(AreaKeys.USER);
setType(TYPE_DASHBOARD);
break;
case DASHBOARD_CALENDAR:
setArea(AreaKeys.USER);
setType(TYPE_CALENDAR);
break;
case RECORD:
setArea(AreaKeys.USER);
setType(TYPE_RECORDINGS);
break;
case ROOMS_PUBLIC:
setArea(AreaKeys.ROOMS);
setType(TYPE_PUBLIC);
break;
case ROOMS_GROUP:
setArea(AreaKeys.ROOMS);
setType(TYPE_GROUP);
break;
case ROOMS_MY:
setArea(AreaKeys.ROOMS);
setType(TYPE_MY);
break;
case ADMIN_USER:
setArea(AreaKeys.ADMIN);
setType(TYPE_USER);
break;
case ADMIN_CONNECTION:
setArea(AreaKeys.ADMIN);
setType(TYPE_CONNECTION);
break;
case ADMIN_GROUP:
setArea(AreaKeys.ADMIN);
setType(TYPE_GROUP);
break;
case ADMIN_ROOM:
setArea(AreaKeys.ADMIN);
setType(TYPE_ROOM);
break;
case ADMIN_CONFIG:
setArea(AreaKeys.ADMIN);
setType(TYPE_CONFIG);
break;
case ADMIN_LABEL:
setArea(AreaKeys.ADMIN);
setType(TYPE_LANG);
break;
case ADMIN_LDAP:
setArea(AreaKeys.ADMIN);
setType(TYPE_LDAP);
break;
case ADMIN_BACKUP:
setArea(AreaKeys.ADMIN);
setType(TYPE_BACKUP);
break;
case ADMIN_OAUTH:
setArea(AreaKeys.ADMIN);
setType(TYPE_OAUTH2);
break;
case ADMIN_EMAIL:
setArea(AreaKeys.ADMIN);
setType(TYPE_EMAIL);
break;
case ADMIN_EXTRA:
setArea(AreaKeys.ADMIN);
setType(TYPE_EXTRA);
break;
case PROFILE_MESSAGE:
setArea(AreaKeys.PROFILE);
setType(TYPE_MESSAGES);
break;
case PROFILE_EDIT:
setArea(AreaKeys.PROFILE);
setType(TYPE_EDIT);
break;
case PROFILE_SEARCH:
setArea(AreaKeys.PROFILE);
setType(TYPE_SEARCH);
break;
case PROFILE_INVITATION:
setArea(AreaKeys.PROFILE);
setType(TYPE_INVITATION);
break;
case PROFILE_WIDGET:
setArea(AreaKeys.PROFILE);
setType(TYPE_WIDGET);
break;
}
}
public static OmUrlFragment get() {
String[] arr = Application.get().getBean(ConfigurationDao.class).getString(CONFIG_DEFAULT_LANDING_ZONE, "").split("/");
if (arr != null && arr.length == 2) {
try {
return new OmUrlFragment(AreaKeys.valueOf(arr[0]), arr[1]);
} catch (Exception e) {
// no-op
}
}
return DASHBOARD;
}
public AreaKeys getArea() {
return area;
}
public void setArea(AreaKeys area) {
this.area = area;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public static BasePanel getPanel(AreaKeys area, String type) {
BasePanel basePanel = null;
switch(area) {
case ADMIN:
if (TYPE_USER.equals(type)) {
basePanel = new UsersPanel(CHILD_ID);
} else if (TYPE_CONNECTION.equals(type)) {
basePanel = new ConnectionsPanel(CHILD_ID);
} else if (TYPE_GROUP.equals(type)) {
basePanel = new GroupsPanel(CHILD_ID);
} else if (TYPE_ROOM.equals(type)) {
basePanel = new RoomsPanel(CHILD_ID);
} else if (TYPE_CONFIG.equals(type)) {
basePanel = new ConfigsPanel(CHILD_ID);
} else if (TYPE_LANG.equals(type)) {
basePanel = new LangPanel(CHILD_ID);
} else if (TYPE_LDAP.equals(type)) {
basePanel = new LdapsPanel(CHILD_ID);
} else if (TYPE_BACKUP.equals(type)) {
basePanel = new BackupPanel(CHILD_ID);
} else if (TYPE_OAUTH2.equals(type)) {
basePanel = new OAuthPanel(CHILD_ID);
} else if (TYPE_EMAIL.equals(type)) {
basePanel = new EmailPanel(CHILD_ID);
} else if (TYPE_EXTRA.equals(type)) {
basePanel = new ExtraPanel(CHILD_ID);
}
break;
case PROFILE:
if (TYPE_MESSAGES.equals(type)) {
basePanel = new MessagesContactsPanel(CHILD_ID);
} else if (TYPE_EDIT.equals(type)) {
basePanel = new EditProfilePanel(CHILD_ID);
} else if (TYPE_SEARCH.equals(type)) {
basePanel = new UserSearchPanel(CHILD_ID);
} else if (TYPE_INVITATION.equals(type)) {
basePanel = new InvitationsPanel(CHILD_ID);
} else if (TYPE_WIDGET.equals(type)) {
basePanel = new WidgetsPanel(CHILD_ID);
}
break;
case ROOM:
basePanel = getRoomPanel(type);
break;
case ROOMS:
basePanel = new RoomsSelectorPanel(CHILD_ID, type);
break;
case USER:
if (TYPE_CALENDAR.equals(type)) {
basePanel = new CalendarPanel(CHILD_ID);
} else if (TYPE_RECORDINGS.equals(type)) {
basePanel = new RecordingsPanel(CHILD_ID);
} else {
basePanel = new OmDashboardPanel(CHILD_ID);
}
break;
default:
break;
}
return basePanel;
}
private static BasePanel getRoomPanel(String type) {
Room r = null;
try {
Long roomId = Long.valueOf(type);
r = Application.get().getBean(RoomDao.class).get(roomId);
} catch(NumberFormatException ne) {
r = Application.get().getBean(RoomDao.class).get(type);
}
if (r != null) {
moveToServer(r);
return new RoomPanel(CHILD_ID, r);
} else {
return new OmDashboardPanel(CHILD_ID);
}
}
public String getLink() {
return getBaseUrl() + "#" + getArea().area() + "/" + getType();
}
private static void moveToServer(Room r) {
String url = Application.get().getBean(ClientManager.class).getServerUrl(r, null);
if (url != null) {
throw new RedirectToUrlException(url);
}
}
}