Bug im ApplicationTree behoben: Wenn eine neue Instanz einer Application angelegt wurde, tauchte diese zwar im Baum auf. Das Auswählen des entsprechenden Knotens hatte aber keine Auswirkung.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2293 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-08-05 11:00:18 +00:00
parent 856eaf827e
commit 5b765e977b
3 changed files with 82 additions and 37 deletions

View File

@ -153,31 +153,46 @@ public class ApplicationsAdministrationTab extends BoxPanel implements AdminCons
final MultiInstanceApplicationPane<?> appPane = new MultiInstanceApplicationPane(applicationType, createForm); final MultiInstanceApplicationPane<?> appPane = new MultiInstanceApplicationPane(applicationType, createForm);
appPanes.put(applicationType.getApplicationObjectType(), appPane); appPanes.put(applicationType.getApplicationObjectType(), appPane);
createInstancePane(applicationType, appManagers);
final ApplicationCollection instances = Application.retrieveAllApplications( // final ApplicationCollection instances = Application.retrieveAllApplications(
applicationType.getApplicationObjectType()); // applicationType.getApplicationObjectType());
//
while (instances.next()) { // while (instances.next()) {
createInstancePane(instances.getApplication(), appManagers); // createInstancePane(instances.getApplication(), appManagers);
} // }
} }
private void createInstancePane(final Application application, private void createInstancePane(final ApplicationType applicationType,
final Map<String, ApplicationManager<?>> managementForms) { final Map<String, ApplicationManager<?>> managementForms) {
final ApplicationManager<?> manager = managementForms.get(application.getClass().getName()); final ApplicationManager<?> manager = managementForms.get(applicationType.getApplicationObjectType());
final ApplicationInstancePane instPane; final ApplicationInstancePane instPane;
if (manager == null) { if (manager == null) {
instPane = new ApplicationInstancePane(application, null); instPane = new ApplicationInstancePane(null);
} else { } else {
instPane = new ApplicationInstancePane( instPane = new ApplicationInstancePane(managementForms.get(applicationType.getApplicationObjectType()).
application, getApplicationAdminForm());
managementForms.get(application.getClass().getName()).getApplicationAdminForm());
} }
//instancePanes.put(application.getClass().getName(), instPane);
instancePanes.put(application.getPath(), instPane); instancePanes.put(applicationType.getApplicationObjectType(), instPane);
} }
// private void createInstancePane(final Application application,
// final Map<String, ApplicationManager<?>> managementForms) {
// final ApplicationManager<?> manager = managementForms.get(application.getClass().getName());
//
// final ApplicationInstancePane instPane;
// if (manager == null) {
// instPane = new ApplicationInstancePane(application, null);
// } else {
// instPane = new ApplicationInstancePane(
// application,
// managementForms.get(application.getClass().getName()).getApplicationAdminForm());
// }
// //instancePanes.put(application.getClass().getName(), instPane);
// instancePanes.put(application.getPath(), instPane);
// }
@Override @Override
public void register(final Page page) { public void register(final Page page) {
super.register(page); super.register(page);
@ -224,10 +239,22 @@ public class ApplicationsAdministrationTab extends BoxPanel implements AdminCons
setPaneVisible(pane, state); setPaneVisible(pane, state);
} }
} else { } else {
// Selected key is the name of a instance pane // Selected key is the name of a instance pane
final ApplicationInstancePane pane = instancePanes.get(selectedKey); // final ApplicationInstancePane pane = instancePanes.get(selectedKey);
final ApplicationCollection applications = Application.retrieveAllApplications();
applications.addEqualsFilter(Application.PRIMARY_URL, selectedKey + "/");
final ApplicationInstancePane pane;
if (applications.next()) {
final Application application = applications.getApplication();
pane = instancePanes.get(application.getClass().getName());
pane.setApplication(application);
} else {
pane = null;
}
if (pane != null) { if (pane != null) {
setPaneVisible(pane, state); setPaneVisible(pane, state);
} }
} }
} }

View File

@ -21,47 +21,64 @@ package com.arsdigita.ui.admin.applications;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PropertySheet; import com.arsdigita.bebop.PropertySheet;
import com.arsdigita.bebop.SegmentedPanel; import com.arsdigita.bebop.SegmentedPanel;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.web.Application; import com.arsdigita.web.Application;
/** /**
* This pane shows informations about a specific instance of a multi instance application, like title, parent * 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. * 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> * @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$ * @version $Id$
*/ */
public class ApplicationInstancePane extends SegmentedPanel { public class ApplicationInstancePane extends SegmentedPanel {
public ApplicationInstancePane(final Application appInstance, final ApplicationInstanceAwareContainer appAdminPane) { private Application application;
private final ApplicationInstanceAwareContainer appAdminPane;
private final ApplicationInstancePropertySheetModelBuilder modelBuilder;
public ApplicationInstancePane(final ApplicationInstanceAwareContainer appAdminPane) {
super(); super();
this.appAdminPane = appAdminPane;
final PropertySheet appInstInfoPanel = new PropertySheet(new ApplicationInstancePropertySheetModelBuilder( modelBuilder = new ApplicationInstancePropertySheetModelBuilder();
appInstance)); final PropertySheet appInstInfoPanel = new PropertySheet(modelBuilder);
addSegment(new Label(GlobalizationUtil.globalize( addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.applications.ApplicationInstancePane.info.heading")), "ui.admin.applications.ApplicationInstancePane.info.heading")),
appInstInfoPanel); appInstInfoPanel);
if (appAdminPane == null) { if (appAdminPane == null) {
final Label noAdminPaneLabel = new Label();
noAdminPaneLabel.addPrintListener(new PrintListener() {
public void prepare(final PrintEvent event) {
final Label target = (Label) event.getTarget();
target.setLabel(GlobalizationUtil.globalize(
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
new String[]{application.getApplicationType().getApplicationObjectType()}));
}
});
addSegment(new Label(GlobalizationUtil.globalize( addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.MultiInstanceApplicationPane.manage.heading")), "ui.admin.MultiInstanceApplicationPane.manage.heading")),
new Label(GlobalizationUtil.globalize( noAdminPaneLabel);
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
new String[]{appInstance.getApplicationType().getApplicationObjectType()})));
} else { } else {
appAdminPane.setAppInstance(appInstance); //appAdminPane.setAppInstance(appInstance);
addSegment(new Label(GlobalizationUtil.globalize( addSegment(new Label(GlobalizationUtil.globalize(
"ui.admin.applications.ApplicationInstancePane.manage.heading")), "ui.admin.applications.ApplicationInstancePane.manage.heading")),
appAdminPane); appAdminPane);
} }
if (SessionManager.getSession().getTransactionContext().inTxn()) {
SessionManager.getSession().getTransactionContext().commitTxn();
}
} }
public void setApplication(final Application application) {
this.application = application;
appAdminPane.setAppInstance(application);
modelBuilder.setApplication(application);
}
} }

View File

@ -33,17 +33,18 @@ import com.arsdigita.web.Application;
*/ */
public class ApplicationInstancePropertySheetModelBuilder extends LockableImpl implements PropertySheetModelBuilder { public class ApplicationInstancePropertySheetModelBuilder extends LockableImpl implements PropertySheetModelBuilder {
private final Application application; private Application application;
public ApplicationInstancePropertySheetModelBuilder(final Application application) { public ApplicationInstancePropertySheetModelBuilder() {
super(); super();
this.application = application;
} }
public PropertySheetModel makeModel(final PropertySheet sheet, final PageState state) { public PropertySheetModel makeModel(final PropertySheet sheet, final PageState state) {
return new ApplicationInstancePropertySheetModel(application); return new ApplicationInstancePropertySheetModel(application);
} }
public void setApplication(final Application application) {
this.application = application;
}
} }