Unterstützung für Navigation im Applications Tab, einige Ergänzungen am Applications Tab selbst

git-svn-id: https://svn.libreccm.org/ccm/trunk@2234 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-06-29 12:41:57 +00:00
parent a3b8d38c41
commit c289ddee10
26 changed files with 506 additions and 146 deletions

View File

@ -53,8 +53,7 @@ public class PublicPersonalProfile
implements CustomizedPreviewLink { implements CustomizedPreviewLink {
private static final PublicPersonalProfileConfig config = private static final PublicPersonalProfileConfig config =
PublicPersonalProfiles. PublicPersonalProfiles.getConfig();
getConfig();
public static final String PROFILE_URL = "profileUrl"; public static final String PROFILE_URL = "profileUrl";
public static final String LINK_LIST_NAME = "publicPersonalProfileNavItems"; public static final String LINK_LIST_NAME = "publicPersonalProfileNavItems";
public static final String POSITION = "position"; public static final String POSITION = "position";
@ -197,4 +196,5 @@ public class PublicPersonalProfile
return String.format("/profiles/preview/%s/", getProfileUrl()); return String.format("/profiles/preview/%s/", getProfileUrl());
} }
} }
} }

View File

@ -20,6 +20,7 @@ package com.arsdigita.cms.publicpersonalprofile;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -32,8 +33,11 @@ public class PublicPersonalProfileAppManager extends AbstractSingletonApplicatio
return PublicPersonalProfiles.class; return PublicPersonalProfiles.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
return new PublicPersonalProfilesAdminPanel(); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
container.add(new PublicPersonalProfilesAdminPanel());
return container;
} }

View File

@ -134,7 +134,7 @@ public class PublicPersonalProfileNavItemsAddForm
panel.add(generatorField); panel.add(generatorField);
saveCancelSection = new SaveCancelSection(); saveCancelSection = new SaveCancelSection();
super.add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT); add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
addInitListener(this); addInitListener(this);
addProcessListener(this); addProcessListener(this);

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -40,12 +41,15 @@ public class ContentCenterAppManager extends AbstractSingletonApplicationManager
* *
* @return A panel with a message that there no settings yet. * @return A panel with a message that there no settings yet.
*/ */
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -20,9 +20,9 @@ package com.arsdigita.cms;
import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -39,12 +39,15 @@ public class ServiceAppManager extends AbstractSingletonApplicationManager<Serv
* *
* @return Just a panel with a label because this app has no settings yet. * @return Just a panel with a label because this app has no settings yet.
*/ */
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -24,6 +24,7 @@ import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.cms.ContentSection; import com.arsdigita.cms.ContentSection;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
import com.arsdigita.ui.admin.applications.ApplicationManager; import com.arsdigita.ui.admin.applications.ApplicationManager;
/** /**
@ -37,12 +38,15 @@ public class ContentSectionAppManager implements ApplicationManager<ContentSecti
return ContentSection.class; return ContentSection.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
public Form getApplicationCreateForm() { public Form getApplicationCreateForm() {

View File

@ -22,6 +22,7 @@ import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -39,12 +40,15 @@ public class AdminAppManager extends AbstractSingletonApplicationManager<Admin>
* *
* @return * @return
*/ */
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -53,7 +53,6 @@ public class ApplicationsAdministrationTab extends BoxPanel implements AdminCons
private final Tree applicationTree; private final Tree applicationTree;
private final Map<String, BaseApplicationPane> appPanes = new HashMap<String, BaseApplicationPane>(); private final Map<String, BaseApplicationPane> appPanes = new HashMap<String, BaseApplicationPane>();
private final Map<String, ApplicationInstancePane> instancePanes = new HashMap<String, ApplicationInstancePane>(); private final Map<String, ApplicationInstancePane> instancePanes = new HashMap<String, ApplicationInstancePane>();
private SimpleContainer visiblePane;
/** /**
* Constructor * Constructor

View File

@ -0,0 +1,41 @@
/*
* Copyright (c) 2013 Jens Pelzetter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.ui.admin.applications;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.web.Application;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class ApplicationInstanceAwareContainer extends SimpleContainer {
private Application appInstance;
public Application getAppInstance() {
return appInstance;
}
public void setAppInstance(final Application appInstance) {
this.appInstance = appInstance;
}
}

View File

@ -21,7 +21,6 @@ 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.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.web.Application; import com.arsdigita.web.Application;
@ -35,7 +34,7 @@ import com.arsdigita.web.Application;
*/ */
public class ApplicationInstancePane extends SegmentedPanel { public class ApplicationInstancePane extends SegmentedPanel {
public ApplicationInstancePane(final Application appInstance, final SimpleContainer appAdminPane) { public ApplicationInstancePane(final Application appInstance, final ApplicationInstanceAwareContainer appAdminPane) {
super(); super();
@ -53,6 +52,7 @@ public class ApplicationInstancePane extends SegmentedPanel {
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found", "ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
new String[]{appInstance.getApplicationType().getApplicationObjectType()}))); new String[]{appInstance.getApplicationType().getApplicationObjectType()})));
} else { } else {
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);

View File

@ -19,7 +19,7 @@
package com.arsdigita.ui.admin.applications; package com.arsdigita.ui.admin.applications;
import com.arsdigita.bebop.Form; import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
import com.arsdigita.web.Application; import com.arsdigita.web.Application;
import java.util.ServiceLoader; import java.util.ServiceLoader;
@ -66,7 +66,7 @@ public interface ApplicationManager<T extends Application> {
* @return A container containing one or more forms for managing instances * @return A container containing one or more forms for managing instances
* of an application. * of an application.
*/ */
SimpleContainer getApplicationAdminForm(); ApplicationInstanceAwareContainer getApplicationAdminForm();
/** /**
* Provides a form for creating new instances of applications. For * Provides a form for creating new instances of applications. For

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -40,12 +41,15 @@ public class LoginAppManager extends AbstractSingletonApplicationManager<Login>
* *
* @return * @return
*/ */
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -35,12 +36,15 @@ public class SearchAppManager extends AbstractSingletonApplicationManager<Search
return Search.class; return Search.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -0,0 +1 @@
com.arsdigita.navigation.NavigationAppManager

View File

@ -15,9 +15,13 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
package com.arsdigita.navigation; package com.arsdigita.navigation;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.london.terms.Domain;
import com.arsdigita.navigation.tools.NavigationCreator;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
@ -29,36 +33,31 @@ import com.arsdigita.web.Web;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
public class Navigation extends Application { public class Navigation extends Application {
private static final Logger logger = Logger.getLogger(Navigation.class); private static final Logger LOGGER = Logger.getLogger(Navigation.class);
public static final String NAV_NS = "http://ccm.redhat.com/navigation";
public static final String NAV_NS =
"http://ccm.redhat.com/navigation";
public static final String NAV_PREFIX = "nav"; public static final String NAV_PREFIX = "nav";
public static final String OID = "oid"; public static final String OID = "oid";
public static final String CAT_ID_REDIRECT = "categoryID"; public static final String CAT_ID_REDIRECT = "categoryID";
private static final NavigationConfig CONFIG = new NavigationConfig();
private static NavigationConfig s_config = new NavigationConfig(); private static final NavigationContext CONTEXT = new NavigationContext();
private static NavigationContext s_context = new NavigationContext();
static { static {
logger.debug("Static initalizer starting..."); LOGGER.debug("Static initalizer starting...");
s_config.load(); CONFIG.load();
logger.debug("Static initalizer finished."); LOGGER.debug("Static initalizer finished.");
} }
public static NavigationConfig getConfig() { public static NavigationConfig getConfig() {
return s_config; return CONFIG;
} }
public static NavigationContext getContext() { public static NavigationContext getContext() {
return s_context; return CONTEXT;
} }
public static Element newElement(String name) { public static Element newElement(final String name) {
return new Element(NavigationConstants.NAV_PREFIX + ":" + name, return new Element(NavigationConstants.NAV_PREFIX + ":" + name,
NavigationConstants.NAV_NS); NavigationConstants.NAV_NS);
} }
@ -68,43 +67,80 @@ public class Navigation extends Application {
NavigationConstants.NAV_NS); NavigationConstants.NAV_NS);
} }
public static String redirectURL(OID oid) { public static String redirectURL(final OID oid) {
ParameterMap map = new ParameterMap(); final ParameterMap map = new ParameterMap();
map.setParameter( NavigationConstants.OID, oid.toString() ); map.setParameter(NavigationConstants.OID, oid.toString());
URL here = Web.getContext().getRequestURL(); final URL here = Web.getContext().getRequestURL();
return (new URL(here.getScheme(), return new URL(here.getScheme(),
here.getServerName(), here.getServerName(),
here.getServerPort(), here.getServerPort(),
"", "",
"", "",
"/redirect/", map )).toString(); "/redirect/", map).toString();
} }
public static String redirectURL(OID oid, public static String redirectURL(final OID oid, final ParameterMap inMap) {
ParameterMap inMap) {
ParameterMap map = null; ParameterMap map;
try { try {
map = (ParameterMap) inMap.clone(); map = (ParameterMap) inMap.clone();
} catch (CloneNotSupportedException e) { } catch (CloneNotSupportedException e) {
map = inMap; map = inMap;
} }
map.setParameter( NavigationConstants.OID, oid.toString() ); map.setParameter(NavigationConstants.OID, oid.toString());
return URL.there( Web.getRequest(), "/redirect/", map ).toString(); return URL.there(Web.getRequest(), "/redirect/", map).toString();
} }
/**
* Creates a new navigation instance. This method was originally part of the {@link NavigationCreator} CLI tool,
* but was moved here because the logic of this method is needed by at least two other classes.
*
* @param navUrl The URL of the new navigation instance.
* @param navTitle The title of the new navigation instance.
* @param defaultDomain The default domain of the new navigation instance.
*/
public static void createNavigation(final String navUrl,
final String navTitle,
final String defaultDomain,
final String description) {
public static final String BASE_DATA_OBJECT_TYPE if (Application.isInstalled(Navigation.BASE_DATA_OBJECT_TYPE, "/" + navUrl + "/")) {
= "com.arsdigita.navigation.Navigation"; throw new IllegalArgumentException(String.format("%s already installed at %s",
Navigation.BASE_DATA_OBJECT_TYPE,
navUrl));
} else {
DomainObjectFactory.registerInstantiator(Navigation.BASE_DATA_OBJECT_TYPE,
new DomainObjectInstantiator() {
@Override
protected DomainObject doNewInstance(final DataObject dataObject) {
return new Navigation(dataObject);
}
public Navigation(DataObject obj) { });
/* Create Instance beyond root (4. parameter null) */
final Application application = Application.createApplication(Navigation.BASE_DATA_OBJECT_TYPE,
navUrl,
navTitle,
null);
application.setDescription(description);
application.save();
final Domain termDomain = Domain.retrieve(defaultDomain);
termDomain.setAsRootForObject(application, null);
}
}
public static final String BASE_DATA_OBJECT_TYPE = "com.arsdigita.navigation.Navigation";
public Navigation(final DataObject obj) {
super(obj); super(obj);
} }
public Navigation(OID oid) { public Navigation(final OID oid) {
super(oid); super(oid);
} }
@ -113,7 +149,6 @@ public class Navigation extends Application {
return "ccm-navigation"; return "ccm-navigation";
} }
*/ */
/** /**
* Returns the path to the location of the applications servlet/JSP. * Returns the path to the location of the applications servlet/JSP.
* *

View File

@ -0,0 +1,79 @@
/*
* Copyright (c) 2013 Jens Pelzetter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.navigation;
import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.navigation.ui.admin.NavigationCreateForm;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
import com.arsdigita.ui.admin.applications.ApplicationManager;
/**
* {@link ApplicationManager} implementation for the Navigation application type. Provides a form for creating
* new navigation instances and a form for managing the instance specific settings.
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class NavigationAppManager implements ApplicationManager<Navigation> {
public Class<Navigation> getApplication() {
return Navigation.class;
}
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
// final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
// final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
// container.add(panel);
//
// panel.add(new Label(NavigationGlobalizationUtil.globalize("ui.admin.instance_not_compatible_yet")));
//
// return container;
return new ApplicationAdminForm();
}
public Form getApplicationCreateForm() {
return new NavigationCreateForm();
}
private class ApplicationAdminForm extends ApplicationInstanceAwareContainer {
public ApplicationAdminForm() {
super();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
add(panel);
panel.add(new Label(NavigationGlobalizationUtil.globalize("ui.admin.instance_not_compatible_yet")));
panel.add(new Link(new PrintListener() {
public void prepare(final PrintEvent event) {
final Link link = (Link) event.getTarget();
link.setTarget(String.format("%s/admin", getAppInstance().getPath()));
link.setChild(new Label(getAppInstance().getTitle()));
}
}));
}
}
}

View File

@ -0,0 +1,40 @@
/*
* Copyright (c) 2013 Jens Pelzetter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.navigation;
import com.arsdigita.globalization.GlobalizedMessage;
/**
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class NavigationGlobalizationUtil {
private static final String BUNDLE_NAME = "com.arsdigita.navigation.NavigationResources";
public static GlobalizedMessage globalize(final String key) {
return new GlobalizedMessage(key, BUNDLE_NAME);
}
public static GlobalizedMessage globalize(final String key, final Object[] args) {
return new GlobalizedMessage(key, BUNDLE_NAME, args);
}
}

View File

@ -0,0 +1,8 @@
# To change this template, choose Tools | Templates
# and open the template in the editor.
ui.create.nav_url=Navigation URL
ui.create.nav_title=Navigation Title
ui.create.nav_default_domain=Default Terms Domain
ui.create.nave_desc=Description
ui.admin.instance_not_compatible_yet=The administration for instances of navigation is not yet compatible with the applications tab. Please use the link below.

View File

@ -0,0 +1,8 @@
# To change this template, choose Tools | Templates
# and open the template in the editor.
ui.create.nav_url=Navigation URL
ui.create.nav_title=Navigation Titel
ui.create.nav_default_domain=Standard Terms Domain
ui.create.nave_desc=Beschreibung
ui.admin.instance_not_compatible_yet=Das Formular zum bearbeiten der instanzspezifischen Einstellungen von Navigation ist noch nicht mit dem Applications Tab kompatible. Bitte nutzen Sie den untenstehenden Link.

View File

@ -15,20 +15,13 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
package com.arsdigita.navigation.tools; package com.arsdigita.navigation.tools;
import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.kernel.Kernel; import com.arsdigita.kernel.Kernel;
import com.arsdigita.kernel.KernelExcursion; import com.arsdigita.kernel.KernelExcursion;
import com.arsdigita.london.terms.Domain;
import com.arsdigita.util.cmd.Program; import com.arsdigita.util.cmd.Program;
import com.arsdigita.london.util.Transaction; import com.arsdigita.london.util.Transaction;
import com.arsdigita.navigation.Navigation; import com.arsdigita.navigation.Navigation;
import com.arsdigita.persistence.DataObject;
import com.arsdigita.web.Application;
import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLine;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -51,42 +44,6 @@ public class NavigationCreator extends Program {
super("Add Navigation instance", "1.0.0", "URL-FRAGMENT TITLE DOMAIN-KEY"); super("Add Navigation instance", "1.0.0", "URL-FRAGMENT TITLE DOMAIN-KEY");
} }
/**
*
* @param navURL
* @param navTitle
* @param defaultDomain
*/
private void createNavigation(String navURL,
String navTitle,
String defaultDomain) {
if (!Application.isInstalled(Navigation.BASE_DATA_OBJECT_TYPE,
"/"+navURL+"/")) {
DomainObjectFactory.registerInstantiator(
Navigation.BASE_DATA_OBJECT_TYPE, new DomainObjectInstantiator() {
public DomainObject doNewInstance(DataObject dataObject) {
return new Navigation(dataObject);
}
});
/* Create Instance beyond root (4. parameter null) */
Application app = Application.createApplication(
Navigation.BASE_DATA_OBJECT_TYPE, navURL, navTitle, null);
app.save();
Domain domain = Domain.retrieve(defaultDomain);
domain.setAsRootForObject(app, null);
} else {
System.err.println(Navigation.BASE_DATA_OBJECT_TYPE
+ " already installed at " + navURL);
System.exit(1);
}
}
/** /**
* *
* @param cmdLine * @param cmdLine
@ -105,7 +62,7 @@ public class NavigationCreator extends Program {
if (navURL != null && navURL.length() != 0 if (navURL != null && navURL.length() != 0
&& navTitle != null && navTitle.length() != 0 && navTitle != null && navTitle.length() != 0
&& domainKey != null && domainKey.length() != 0) { && domainKey != null && domainKey.length() != 0) {
createNavigation(navURL, navTitle, domainKey); Navigation.createNavigation(navURL, navTitle, domainKey, "");
} else { } else {
help(System.err); help(System.err);
System.exit(1); System.exit(1);
@ -115,8 +72,10 @@ public class NavigationCreator extends Program {
System.exit(1); System.exit(1);
} }
} }
}.run(); }.run();
} }
}.run(); }.run();
} }

View File

@ -15,7 +15,6 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
package com.arsdigita.navigation.ui.admin; package com.arsdigita.navigation.ui.admin;
import com.arsdigita.bebop.Tree; import com.arsdigita.bebop.Tree;
@ -30,7 +29,6 @@ import com.arsdigita.util.LockableImpl;
import com.arsdigita.navigation.Navigation; import com.arsdigita.navigation.Navigation;
/** /**
* Lists category tree. * Lists category tree.
* *
@ -58,11 +56,12 @@ public class CategoryTree extends Tree {
} }
public TreeModel makeModel(Tree t, PageState s) { public TreeModel makeModel(Tree t, PageState s) {
Navigation app = (Navigation)Web.getContext().getApplication(); Navigation app = (Navigation) Web.getContext().getApplication();
TemplateContext ctx = Navigation.getContext().getTemplateContext(); TemplateContext ctx = Navigation.getContext().getTemplateContext();
String dispatcherContext = ctx == null ? null : ctx.getContext(); String dispatcherContext = ctx == null ? null : ctx.getContext();
Category root = Category.getRootForObject(app, dispatcherContext); Category root = Category.getRootForObject(app, dispatcherContext);
return new CategoryTreeModelLite(root); return new CategoryTreeModelLite(root);
} }
} }
} }

View File

@ -0,0 +1,151 @@
/*
* Copyright (c) 2013 Jens Pelzetter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package com.arsdigita.navigation.ui.admin;
import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.Form;
import com.arsdigita.bebop.FormData;
import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SaveCancelSection;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.event.PrintEvent;
import com.arsdigita.bebop.event.PrintListener;
import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.TextArea;
import com.arsdigita.bebop.form.TextField;
import com.arsdigita.london.terms.Domain;
import com.arsdigita.navigation.Navigation;
import com.arsdigita.navigation.NavigationAppManager;
import com.arsdigita.navigation.NavigationGlobalizationUtil;
import com.arsdigita.navigation.tools.NavigationCreator;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.UncheckedWrapperException;
import java.util.TooManyListenersException;
/**
* This form is used by the {@link NavigationAppManager} for creating a new navigation instance. The part which is
* creating the instance ({@link ProcessListener#process(com.arsdigita.bebop.event.FormSectionEvent)} is taken from
* the {@link NavigationCreator} CLI application.
*
* @author Jens Pelzetter <jens@jp-digital.de>
* @version $Id$
*/
public class NavigationCreateForm extends Form {
public static final String FORM_NAME = "NavigationCreateForm";
private static final String NAV_URL = "navUrl";
private static final String NAV_TITLE = "navTitle";
private static final String NAV_DOMAIN = "navDomain";
private static final String NAV_DESC = "navDesc";
private final SaveCancelSection saveCancelSection;
public NavigationCreateForm() {
super(FORM_NAME, new ColumnPanel(2));
add(new Label(NavigationGlobalizationUtil.globalize("ui.create.nav_url")));
add(new TextField(NAV_URL));
add(new Label(NavigationGlobalizationUtil.globalize("ui.create.nav_title")));
add(new TextField(NAV_TITLE));
add(new Label(NavigationGlobalizationUtil.globalize("ui.create.nav_default_domain")));
final SingleSelect termDomainSelect = new SingleSelect(NAV_DOMAIN);
try {
termDomainSelect.addPrintListener(new PrintListener() {
public void prepare(final PrintEvent event) {
final SingleSelect target = (SingleSelect) event.getTarget();
final DataCollection termDomains = SessionManager.getSession().
retrieve(Domain.BASE_DATA_OBJECT_TYPE);
while (termDomains.next()) {
target.addOption(new Option((String) termDomains.getDataObject().get(Domain.KEY),
(String) termDomains.getDataObject().get(Domain.TITLE)));
}
}
});
} catch (TooManyListenersException ex) {
throw new UncheckedWrapperException(ex);
}
add(termDomainSelect);
add(new Label(NavigationGlobalizationUtil.globalize("ui.create.nave_desc")));
add(new TextArea(NAV_DESC, 10, 60, TextArea.OFF));
saveCancelSection = new SaveCancelSection();
add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
addSubmissionListener(new SubmissionListener());
addProcessListener(new ProcessListener());
}
private class SubmissionListener implements FormSubmissionListener {
public SubmissionListener() {
//Nothing
}
public void submitted(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState();
final FormData data = event.getFormData();
if (saveCancelSection.getCancelButton().isSelected(state)) {
data.put(NAV_URL, "");
data.put(NAV_TITLE, "");
data.put(NAV_DOMAIN, "");
data.put(NAV_DESC, "");
throw new FormProcessException("Canceled");
}
}
}
private class ProcessListener implements FormProcessListener {
public ProcessListener() {
//Nothing
}
public void process(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState();
final FormData data = event.getFormData();
if (saveCancelSection.getSaveButton().isSelected(state)) {
Navigation.createNavigation(data.getString(NAV_URL),
data.getString(NAV_TITLE),
data.getString(NAV_DOMAIN),
data.getString(NAV_DESC));
data.put(NAV_URL, "");
data.put(NAV_TITLE, "");
data.put(NAV_DOMAIN, "");
data.put(NAV_DESC, "");
}
}
}
}

View File

@ -20,9 +20,9 @@ package com.arsdigita.cms.scipublications;
import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -39,12 +39,15 @@ public class SciPublicationsAppManager extends AbstractSingletonApplicationManag
* *
* @return Just a simple Message for now because this applications has no settings yet. * @return Just a simple Message for now because this applications has no settings yet.
*/ */
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings"))); panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -21,6 +21,7 @@ package com.arsdigita.shortcuts;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.shortcuts.ui.AdminPanel; import com.arsdigita.shortcuts.ui.AdminPanel;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -33,8 +34,11 @@ public class ShortcutsAppManager extends AbstractSingletonApplicationManager<Sho
return Shortcuts.class; return Shortcuts.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
return new AdminPanel(); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
container.add(new AdminPanel());
return container;
} }

View File

@ -21,9 +21,9 @@ package com.arsdigita.subsite;
import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.Label; import com.arsdigita.bebop.Label;
import com.arsdigita.bebop.Link; import com.arsdigita.bebop.Link;
import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.ui.admin.GlobalizationUtil; import com.arsdigita.ui.admin.GlobalizationUtil;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -36,14 +36,18 @@ public class SubsiteAppManager extends AbstractSingletonApplicationManager<Subsi
return Subsite.class; return Subsite.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
final Label warnLabel = new Label(GlobalizationUtil.globalize("ui.admin.applications.form_not_compatible_now")); final Label warnLabel = new Label(GlobalizationUtil.globalize("ui.admin.applications.form_not_compatible_now"));
warnLabel.setClassAttr("warning"); warnLabel.setClassAttr("warning");
panel.add(warnLabel); panel.add(warnLabel);
panel.add(new Link("Subsite Admin", "/admin/subsite")); panel.add(new Link("Subsite Admin", "/admin/subsite"));
return panel; container.add(panel);
return container;
} }
} }

View File

@ -22,6 +22,7 @@ import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.SimpleContainer; import com.arsdigita.bebop.SimpleContainer;
import com.arsdigita.themedirector.ui.ThemeControlPanel; import com.arsdigita.themedirector.ui.ThemeControlPanel;
import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager; import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
/** /**
* *
@ -34,10 +35,11 @@ public class ThemeDirectorAppManager extends AbstractSingletonApplicationManager
return ThemeDirector.class; return ThemeDirector.class;
} }
public SimpleContainer getApplicationAdminForm() { public ApplicationInstanceAwareContainer getApplicationAdminForm() {
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
panel.add(new ThemeControlPanel());
return panel; container.add(new ThemeControlPanel());
return container;
} }
} }