Avoiding NPE if there is no pane for managing instances of an application type yet (Ticket #2031)

git-svn-id: https://svn.libreccm.org/ccm/trunk@2528 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2014-02-19 12:25:23 +00:00
parent d3aa1fdb1a
commit 8aa2a7ea21
6 changed files with 42 additions and 22 deletions

View File

@ -135,3 +135,4 @@ ui.admin.user.userinfo.name=Name:
ui.admin.user.userinfo.screenname=Username:
ui.admin.user.userinfo.primaryemail=Email:
ui.admin.groups.name=Name:
ui.admin.applications.placeholder=There is no administration panel for instances of this application type yet.

View File

@ -135,3 +135,4 @@ ui.admin.user.userinfo.name=Name:
ui.admin.user.userinfo.screenname=Benutzername:
ui.admin.user.userinfo.primaryemail=E-Mail:
ui.admin.groups.name=Name:
ui.admin.applications.placeholder=F\u00fcr Applikationen dieses Typs gibt es noch keine Verwaltungsoberfl\u00e4che.

View File

@ -135,3 +135,4 @@ ui.admin.user.userinfo.name=
ui.admin.user.userinfo.screenname=
ui.admin.user.userinfo.primaryemail=
ui.admin.groups.name=
ui.admin.applications.placeholder=

View File

@ -121,3 +121,4 @@ ui.admin.user.userinfo.name=
ui.admin.user.userinfo.screenname=
ui.admin.user.userinfo.primaryemail=
ui.admin.groups.name=
ui.admin.applications.placeholder=

View File

@ -20,6 +20,7 @@ package com.arsdigita.ui.admin;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleContainer;
@ -27,6 +28,7 @@ import com.arsdigita.bebop.Tree;
import com.arsdigita.bebop.event.ChangeEvent;
import com.arsdigita.bebop.event.ChangeListener;
import com.arsdigita.toolbox.ui.LayoutPanel;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
import com.arsdigita.ui.admin.applications.ApplicationInstancePane;
import com.arsdigita.ui.admin.applications.ApplicationManager;
import com.arsdigita.ui.admin.applications.BaseApplicationPane;
@ -49,10 +51,10 @@ import java.util.Map;
public class ApplicationsAdministrationTab extends LayoutPanel implements AdminConstants {
private final Tree applicationTree;
private final Map<String, BaseApplicationPane> appPanes =
new HashMap<String, BaseApplicationPane>();
private final Map<String, ApplicationInstancePane> instancePanes =
new HashMap<String, ApplicationInstancePane>();
private final Map<String, BaseApplicationPane> appPanes
= new HashMap<String, BaseApplicationPane>();
private final Map<String, ApplicationInstancePane> instancePanes
= new HashMap<String, ApplicationInstancePane>();
private final BoxPanel appPanel;
/**
@ -72,12 +74,11 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
setLeft(applicationTree);
final ApplicationTypeCollection applicationTypes = ApplicationType.
retrieveAllApplicationTypes();
retrieveAllApplicationTypes();
final Map<String, ApplicationManager<?>> appManagers = ApplicationManagers.getInstance().
getApplicationManagers();
getApplicationManagers();
while (applicationTypes.next()) {
if (applicationTypes.getApplicationType().isSingleton()) {
@ -111,7 +112,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
pane = new SingletonApplicationPane(applicationType, null);
} else {
pane = new SingletonApplicationPane(
applicationType, appManagers.get(appObjectType).getApplicationAdminForm());
applicationType, appManagers.get(appObjectType).getApplicationAdminForm());
}
appPanes.put(appObjectType, pane);
}
@ -120,7 +121,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
private void createAppPane(final ApplicationType applicationType,
final Map<String, ApplicationManager<?>> appManagers) {
final ApplicationManager<?> appManager = appManagers.get(applicationType.
getApplicationObjectType());
getApplicationObjectType());
final Form createForm;
if (appManager == null) {
createForm = null;
@ -129,7 +130,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
}
final MultiInstanceApplicationPane<?> appPane = new MultiInstanceApplicationPane(
applicationType, createForm);
applicationType, createForm);
appPanes.put(applicationType.getApplicationObjectType(), appPane);
createInstancePane(applicationType, appManagers);
}
@ -137,14 +138,14 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
private void createInstancePane(final ApplicationType applicationType,
final Map<String, ApplicationManager<?>> managementForms) {
final ApplicationManager<?> manager = managementForms.get(applicationType.
getApplicationObjectType());
getApplicationObjectType());
final ApplicationInstancePane instPane;
if (manager == null) {
instPane = new ApplicationInstancePane(null);
instPane = new ApplicationInstancePane(new Placeholder());
} else {
instPane = new ApplicationInstancePane(managementForms.get(applicationType.
getApplicationObjectType()).
getApplicationAdminForm());
getApplicationObjectType()).
getApplicationAdminForm());
}
instancePanes.put(applicationType.getApplicationObjectType(), instPane);
@ -192,7 +193,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
setPaneVisible(pane, state);
}
} else {
// Selected key is the name of a instance pane
// Selected key is the name of a instance pane
final ApplicationCollection applications = Application.retrieveAllApplications();
applications.addEqualsFilter(Application.PRIMARY_URL, selectedKey + "/");
final ApplicationInstancePane pane;
@ -212,5 +213,17 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements AdminC
}
}
}
}
private class Placeholder extends ApplicationInstanceAwareContainer {
public Placeholder() {
super();
final Label label = new Label(GlobalizationUtil.globalize(
"ui.admin.applications.placeholder"));
add(label);
}
}
}

View File

@ -28,8 +28,9 @@ import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.web.Application;
/**
* This pane shows informations about a specific instance of a multi instance application, like title, parent
* application (if any) and the path. Also it contains a form for editing settings specific to the instance.
* This pane shows informations about a specific instance of a multi instance application, like
* title, parent application (if any) and the path. Also it contains a form for editing settings
* specific to the instance.
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
@ -49,7 +50,7 @@ public class ApplicationInstancePane extends SegmentedPanel {
final PropertySheet appInstInfoPanel = new PropertySheet(modelBuilder);
addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.applications.ApplicationInstancePane.info.heading")),
"ui.admin.applications.ApplicationInstancePane.info.heading")),
appInstInfoPanel);
if (appAdminPane == null) {
@ -61,18 +62,19 @@ public class ApplicationInstancePane extends SegmentedPanel {
final Label target = (Label) event.getTarget();
target.setLabel(GlobalizationUtil.globalize(
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
new String[]{application.getApplicationType().getApplicationObjectType()}));
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
new String[]{application.getApplicationType().getApplicationObjectType()}));
}
});
addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.MultiInstanceApplicationPane.manage.heading")),
"ui.admin.MultiInstanceApplicationPane.manage.heading")),
noAdminPaneLabel);
} else {
//appAdminPane.setAppInstance(appInstance);
addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.applications.ApplicationInstancePane.manage.heading")),
"ui.admin.applications.ApplicationInstancePane.manage.heading")),
appAdminPane);
}
}
@ -82,4 +84,5 @@ public class ApplicationInstancePane extends SegmentedPanel {
appAdminPane.setAppInstance(application);
modelBuilder.setApplication(application);
}
}