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-94f89814c4dfmaster
parent
a3b8d38c41
commit
c289ddee10
|
|
@ -53,8 +53,7 @@ public class PublicPersonalProfile
|
|||
implements CustomizedPreviewLink {
|
||||
|
||||
private static final PublicPersonalProfileConfig config =
|
||||
PublicPersonalProfiles.
|
||||
getConfig();
|
||||
PublicPersonalProfiles.getConfig();
|
||||
public static final String PROFILE_URL = "profileUrl";
|
||||
public static final String LINK_LIST_NAME = "publicPersonalProfileNavItems";
|
||||
public static final String POSITION = "position";
|
||||
|
|
@ -197,4 +196,5 @@ public class PublicPersonalProfile
|
|||
return String.format("/profiles/preview/%s/", getProfileUrl());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ package com.arsdigita.cms.publicpersonalprofile;
|
|||
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
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;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
return new PublicPersonalProfilesAdminPanel();
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
container.add(new PublicPersonalProfilesAdminPanel());
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ public class PublicPersonalProfileNavItemsAddForm
|
|||
panel.add(generatorField);
|
||||
|
||||
saveCancelSection = new SaveCancelSection();
|
||||
super.add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
|
||||
add(saveCancelSection, ColumnPanel.FULL_WIDTH | ColumnPanel.LEFT);
|
||||
|
||||
addInitListener(this);
|
||||
addProcessListener(this);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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.
|
||||
*/
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,9 @@ package com.arsdigita.cms;
|
|||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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.
|
||||
*/
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import com.arsdigita.bebop.Label;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.cms.ContentSection;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationInstanceAwareContainer;
|
||||
import com.arsdigita.ui.admin.applications.ApplicationManager;
|
||||
|
||||
/**
|
||||
|
|
@ -37,12 +38,15 @@ public class ContentSectionAppManager implements ApplicationManager<ContentSecti
|
|||
return ContentSection.class;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
public Form getApplicationCreateForm() {
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import com.arsdigita.bebop.BoxPanel;
|
|||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
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
|
||||
*/
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@ public class ApplicationsAdministrationTab extends BoxPanel implements AdminCons
|
|||
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 SimpleContainer visiblePane;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,7 +21,6 @@ package com.arsdigita.ui.admin.applications;
|
|||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.PropertySheet;
|
||||
import com.arsdigita.bebop.SegmentedPanel;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
|
||||
import com.arsdigita.web.Application;
|
||||
|
|
@ -35,7 +34,7 @@ import com.arsdigita.web.Application;
|
|||
*/
|
||||
public class ApplicationInstancePane extends SegmentedPanel {
|
||||
|
||||
public ApplicationInstancePane(final Application appInstance, final SimpleContainer appAdminPane) {
|
||||
public ApplicationInstancePane(final Application appInstance, final ApplicationInstanceAwareContainer appAdminPane) {
|
||||
|
||||
super();
|
||||
|
||||
|
|
@ -53,6 +52,7 @@ public class ApplicationInstancePane extends SegmentedPanel {
|
|||
"ui.admin.MultiInstancePane.manage.no_instance_admin_pane_found",
|
||||
new String[]{appInstance.getApplicationType().getApplicationObjectType()})));
|
||||
} else {
|
||||
appAdminPane.setAppInstance(appInstance);
|
||||
addSegment(new Label(GlobalizationUtil.globalize(
|
||||
"ui.admin.applications.ApplicationInstancePane.manage.heading")),
|
||||
appAdminPane);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
package com.arsdigita.ui.admin.applications;
|
||||
|
||||
import com.arsdigita.bebop.Form;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.ApplicationsAdministrationTab;
|
||||
import com.arsdigita.web.Application;
|
||||
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
|
||||
* of an application.
|
||||
*/
|
||||
SimpleContainer getApplicationAdminForm();
|
||||
ApplicationInstanceAwareContainer getApplicationAdminForm();
|
||||
|
||||
/**
|
||||
* Provides a form for creating new instances of applications. For
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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
|
||||
*/
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import com.arsdigita.bebop.Label;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
com.arsdigita.navigation.NavigationAppManager
|
||||
|
|
@ -15,9 +15,13 @@
|
|||
* 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.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.OID;
|
||||
|
||||
|
|
@ -29,36 +33,31 @@ import com.arsdigita.web.Web;
|
|||
import com.arsdigita.xml.Element;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
||||
public class Navigation extends Application {
|
||||
|
||||
private static final Logger logger = Logger.getLogger(Navigation.class);
|
||||
|
||||
public static final String NAV_NS =
|
||||
"http://ccm.redhat.com/navigation";
|
||||
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_PREFIX = "nav";
|
||||
public static final String OID = "oid";
|
||||
|
||||
public static final String CAT_ID_REDIRECT = "categoryID";
|
||||
|
||||
private static NavigationConfig s_config = new NavigationConfig();
|
||||
private static NavigationContext s_context = new NavigationContext();
|
||||
private static final NavigationConfig CONFIG = new NavigationConfig();
|
||||
private static final NavigationContext CONTEXT = new NavigationContext();
|
||||
|
||||
static {
|
||||
logger.debug("Static initalizer starting...");
|
||||
s_config.load();
|
||||
logger.debug("Static initalizer finished.");
|
||||
LOGGER.debug("Static initalizer starting...");
|
||||
CONFIG.load();
|
||||
LOGGER.debug("Static initalizer finished.");
|
||||
}
|
||||
|
||||
public static NavigationConfig getConfig() {
|
||||
return s_config;
|
||||
return CONFIG;
|
||||
}
|
||||
|
||||
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,
|
||||
NavigationConstants.NAV_NS);
|
||||
}
|
||||
|
|
@ -68,43 +67,80 @@ public class Navigation extends Application {
|
|||
NavigationConstants.NAV_NS);
|
||||
}
|
||||
|
||||
public static String redirectURL(OID oid) {
|
||||
ParameterMap map = new ParameterMap();
|
||||
map.setParameter( NavigationConstants.OID, oid.toString() );
|
||||
public static String redirectURL(final OID oid) {
|
||||
final ParameterMap map = new ParameterMap();
|
||||
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.getServerPort(),
|
||||
"",
|
||||
"",
|
||||
"/redirect/", map )).toString();
|
||||
"/redirect/", map).toString();
|
||||
}
|
||||
|
||||
public static String redirectURL(OID oid,
|
||||
ParameterMap inMap) {
|
||||
public static String redirectURL(final OID oid, final ParameterMap inMap) {
|
||||
|
||||
ParameterMap map = null;
|
||||
ParameterMap map;
|
||||
try {
|
||||
map = (ParameterMap) inMap.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
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
|
||||
= "com.arsdigita.navigation.Navigation";
|
||||
if (Application.isInstalled(Navigation.BASE_DATA_OBJECT_TYPE, "/" + navUrl + "/")) {
|
||||
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);
|
||||
}
|
||||
|
||||
public Navigation(OID oid) {
|
||||
public Navigation(final OID oid) {
|
||||
super(oid);
|
||||
}
|
||||
|
||||
|
|
@ -113,7 +149,6 @@ public class Navigation extends Application {
|
|||
return "ccm-navigation";
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Returns the path to the location of the applications servlet/JSP.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
|
@ -15,20 +15,13 @@
|
|||
* 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.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.KernelExcursion;
|
||||
import com.arsdigita.london.terms.Domain;
|
||||
import com.arsdigita.util.cmd.Program;
|
||||
import com.arsdigita.london.util.Transaction;
|
||||
import com.arsdigita.navigation.Navigation;
|
||||
import com.arsdigita.persistence.DataObject;
|
||||
import com.arsdigita.web.Application;
|
||||
|
||||
import org.apache.commons.cli.CommandLine;
|
||||
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");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @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
|
||||
|
|
@ -105,7 +62,7 @@ public class NavigationCreator extends Program {
|
|||
if (navURL != null && navURL.length() != 0
|
||||
&& navTitle != null && navTitle.length() != 0
|
||||
&& domainKey != null && domainKey.length() != 0) {
|
||||
createNavigation(navURL, navTitle, domainKey);
|
||||
Navigation.createNavigation(navURL, navTitle, domainKey, "");
|
||||
} else {
|
||||
help(System.err);
|
||||
System.exit(1);
|
||||
|
|
@ -115,8 +72,10 @@ public class NavigationCreator extends Program {
|
|||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
}.run();
|
||||
}
|
||||
|
||||
}.run();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@
|
|||
* 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.Tree;
|
||||
|
|
@ -30,7 +29,6 @@ import com.arsdigita.util.LockableImpl;
|
|||
|
||||
import com.arsdigita.navigation.Navigation;
|
||||
|
||||
|
||||
/**
|
||||
* Lists category tree.
|
||||
*
|
||||
|
|
@ -58,11 +56,12 @@ public class CategoryTree extends Tree {
|
|||
}
|
||||
|
||||
public TreeModel makeModel(Tree t, PageState s) {
|
||||
Navigation app = (Navigation)Web.getContext().getApplication();
|
||||
Navigation app = (Navigation) Web.getContext().getApplication();
|
||||
TemplateContext ctx = Navigation.getContext().getTemplateContext();
|
||||
String dispatcherContext = ctx == null ? null : ctx.getContext();
|
||||
Category root = Category.getRootForObject(app, dispatcherContext);
|
||||
return new CategoryTreeModelLite(root);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, "");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -20,9 +20,9 @@ package com.arsdigita.cms.scipublications;
|
|||
|
||||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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.
|
||||
*/
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.no_settings")));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ package com.arsdigita.shortcuts;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.shortcuts.ui.AdminPanel;
|
||||
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;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
return new AdminPanel();
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
container.add(new AdminPanel());
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ package com.arsdigita.subsite;
|
|||
import com.arsdigita.bebop.BoxPanel;
|
||||
import com.arsdigita.bebop.Label;
|
||||
import com.arsdigita.bebop.Link;
|
||||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.ui.admin.GlobalizationUtil;
|
||||
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;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
final Label warnLabel = new Label(GlobalizationUtil.globalize("ui.admin.applications.form_not_compatible_now"));
|
||||
warnLabel.setClassAttr("warning");
|
||||
panel.add(warnLabel);
|
||||
panel.add(new Link("Subsite Admin", "/admin/subsite"));
|
||||
|
||||
return panel;
|
||||
container.add(panel);
|
||||
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import com.arsdigita.bebop.BoxPanel;
|
|||
import com.arsdigita.bebop.SimpleContainer;
|
||||
import com.arsdigita.themedirector.ui.ThemeControlPanel;
|
||||
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;
|
||||
}
|
||||
|
||||
public SimpleContainer getApplicationAdminForm() {
|
||||
final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL);
|
||||
panel.add(new ThemeControlPanel());
|
||||
return panel;
|
||||
public ApplicationInstanceAwareContainer getApplicationAdminForm() {
|
||||
final ApplicationInstanceAwareContainer container = new ApplicationInstanceAwareContainer();
|
||||
|
||||
container.add(new ThemeControlPanel());
|
||||
return container;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue