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 {
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";
@ -108,14 +107,14 @@ public class PublicPersonalProfile
*
*
* return (GenericPerson) DomainObjectFactory.newInstance(dobj);
}
}
*/
final GenericPersonBundle bundle = getPublicPersonalProfileBundle().getOwner();
if (bundle == null) {
return null;
} else {
return (GenericPerson) bundle.getPrimaryInstance();
}
}
}
/**
@ -132,7 +131,7 @@ public class PublicPersonalProfile
*
* if (null != owner) { Assert.exists(owner, GenericPerson.class);
* bundle.add(OWNER, owner.getContentBundle());
}
}
*/
getPublicPersonalProfileBundle().setOwner(owner);
}
@ -197,4 +196,5 @@ public class PublicPersonalProfile
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.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;
}

View File

@ -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);

View File

@ -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() {
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")));
container.add(panel);
return panel;
return container;
}
}

View File

@ -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;
}
}

View File

@ -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() {

View File

@ -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() {
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;
}
}

View File

@ -52,8 +52,7 @@ 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;
private final Map<String, ApplicationInstancePane> instancePanes = new HashMap<String, ApplicationInstancePane>();
/**
* 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.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);

View File

@ -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

View File

@ -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() {
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;
}
}

View File

@ -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() {
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")));
container.add(panel);
return 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
* 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,91 +33,122 @@ 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);
}
public static Element newElement(final Element parent, final String name) {
return parent.newChildElement(String.format("%s:%s", NavigationConstants.NAV_PREFIX, name),
return parent.newChildElement(String.format("%s:%s", NavigationConstants.NAV_PREFIX, name),
NavigationConstants.NAV_NS);
}
public static String redirectURL(OID oid) {
ParameterMap map = new ParameterMap();
map.setParameter( NavigationConstants.OID, oid.toString() );
URL here = Web.getContext().getRequestURL();
public static String redirectURL(final OID oid) {
final ParameterMap map = new ParameterMap();
map.setParameter(NavigationConstants.OID, oid.toString());
return (new URL(here.getScheme(),
here.getServerName(),
here.getServerPort(),
"",
"",
"/redirect/", map )).toString();
final URL here = Web.getContext().getRequestURL();
return new URL(here.getScheme(),
here.getServerName(),
here.getServerPort(),
"",
"",
"/redirect/", map).toString();
}
public static String redirectURL(OID oid,
ParameterMap inMap) {
ParameterMap map = null;
public static String redirectURL(final OID oid, final ParameterMap inMap) {
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);
}
/*
public String getContextPath() {
return "ccm-navigation";
}
*/
public String getContextPath() {
return "ccm-navigation";
}
*/
/**
* 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
* 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
@ -103,9 +60,9 @@ public class NavigationCreator extends Program {
String navTitle = args[1];
String domainKey = args[2];
if (navURL != null && navURL.length() != 0
&& navTitle != null && navTitle.length() != 0
&& domainKey != null && domainKey.length() != 0) {
createNavigation(navURL, navTitle, domainKey);
&& navTitle != null && navTitle.length() != 0
&& domainKey != null && domainKey.length() != 0) {
Navigation.createNavigation(navURL, navTitle, domainKey, "");
} else {
help(System.err);
System.exit(1);
@ -115,11 +72,13 @@ public class NavigationCreator extends Program {
System.exit(1);
}
}
}.run();
}
}.run();
}
/**
* @param args
*/

View File

@ -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.
*
@ -51,18 +49,19 @@ public class CategoryTree extends Tree {
* A TreeModelBuilder that loads the tree from the current category
*/
private static class SectionTreeModelBuilder extends LockableImpl
implements TreeModelBuilder {
implements TreeModelBuilder {
public SectionTreeModelBuilder() {
super();
}
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);
}
}
}

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.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;
/**
*
@ -30,21 +30,24 @@ import com.arsdigita.ui.admin.applications.AbstractSingletonApplicationManager;
* @version $Id$
*/
public class SciPublicationsAppManager extends AbstractSingletonApplicationManager<SciPublications> {
public Class<SciPublications> getApplication() {
return SciPublications.class;
}
/**
*
* @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;
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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;
}
}