Removed several depcrecated classes from ccm-cms

pull/28/head
Jens Pelzetter 2022-03-21 19:59:58 +01:00
parent 7cd39aa321
commit d11c4922ea
9 changed files with 2 additions and 693 deletions

View File

@ -21,7 +21,6 @@ package com.arsdigita.bebop;
import com.arsdigita.bebop.page.PageTransformer; import com.arsdigita.bebop.page.PageTransformer;
import com.arsdigita.bebop.util.BebopConstants; import com.arsdigita.bebop.util.BebopConstants;
import com.arsdigita.templating.PresentationManager; import com.arsdigita.templating.PresentationManager;
import com.arsdigita.ui.SimplePage;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import java.util.Arrays; import java.util.Arrays;
@ -57,7 +56,7 @@ public final class BebopConfig {
descKey = "basePageClassName.desc", descKey = "basePageClassName.desc",
labelKey = "basePageClassName.label" labelKey = "basePageClassName.label"
) )
private String basePageClassName = SimplePage.class.getName(); private String basePageClassName = "";
@Setting( @Setting(
descKey = "tidyConfigFile.desc", descKey = "tidyConfigFile.desc",

View File

@ -1,157 +0,0 @@
/*
* Copyright (C) 2016 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.ParameterSingleSelectionModel;
import com.arsdigita.bebop.SingleSelectionModel;
import com.arsdigita.bebop.event.ChangeListener;
import com.arsdigita.bebop.parameters.LongParameter;
import com.arsdigita.bebop.parameters.ParameterModel;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.core.CcmObject;
import org.libreccm.core.CcmObjectRepository;
/**
* @param <T>
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*
*/
public class CcmObjectSelectionModel<T extends CcmObject>
implements SingleSelectionModel<Long> {
private final Class<T> clazz;
private final SingleSelectionModel<Long> model;
public CcmObjectSelectionModel(final LongParameter parameter) {
this(CcmObject.class.getName(), parameter);
}
public CcmObjectSelectionModel(final String parameterName) {
this(CcmObject.class.getName(), new LongParameter(parameterName));
}
// public CcmObjectSelectionModel(final SingleSelectionModel<T> model ) {
// this(null, model);
// }
//
public CcmObjectSelectionModel(final Class<T> clazz,
final String parameterName) {
this(clazz, new LongParameter(parameterName));
}
public CcmObjectSelectionModel(final String className,
final String parameterName) {
try {
clazz = (Class<T>) Class.forName(className);
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex);
}
model = new ParameterSingleSelectionModel<Long>(new LongParameter(
parameterName));
}
public CcmObjectSelectionModel(final Class<T> clazz,
final LongParameter parameter) {
this(clazz, new ParameterSingleSelectionModel<>(parameter));
}
public CcmObjectSelectionModel(final String className,
final LongParameter parameter) {
try {
clazz = (Class<T>) Class.forName(className);
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex);
}
model = new ParameterSingleSelectionModel<>(parameter);
}
public CcmObjectSelectionModel(final Class<T> clazz,
final SingleSelectionModel<Long> model) {
this.clazz = clazz;
this.model = model;
}
public CcmObjectSelectionModel(final String className,
final SingleSelectionModel<Long> model) {
try {
clazz = (Class<T>) Class.forName(className);
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex);
}
this.model = model;
}
@Override
public boolean isSelected(final PageState state) {
return model.isSelected(state);
}
@Override
public Long getSelectedKey(final PageState state) {
final Object key = model.getSelectedKey(state);
if (key == null) {
return null;
} else if (key instanceof Long) {
return (Long) key;
} else if (key instanceof String) {
return Long.parseLong((String) key);
} else {
return Long.parseLong(key.toString());
}
}
@Override
public void setSelectedKey(final PageState state, final Long key) {
model.setSelectedKey(state, key);
}
public T getSelectedObject(final PageState state) {
final Long key = getSelectedKey(state);
final CcmObjectRepository repository = CdiUtil.createCdiUtil().findBean(
CcmObjectRepository.class);
@SuppressWarnings("unchecked")
final T object = (T) repository.findObjectById(key).get();
return object;
}
@Override
public void clearSelection(final PageState state) {
model.clearSelection(state);
}
@Override
public void addChangeListener(final ChangeListener changeListener) {
model.addChangeListener(changeListener);
}
@Override
public void removeChangeListener(final ChangeListener changeListener) {
model.removeChangeListener(changeListener);;
}
@Override
public ParameterModel getStateParameter() {
return model.getStateParameter();
}
}

View File

@ -1,92 +0,0 @@
/*
* Copyright (C) 2018 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.web.Web;
import com.arsdigita.xml.Element;
import javax.servlet.ServletContext;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class ReactApp extends SimpleComponent {
private final String appId;
private final String scriptPath;
public ReactApp(final String appId, final String scriptPath) {
super();
this.appId = appId;
this.scriptPath = scriptPath;
}
public String getAppId() {
return appId;
}
public String getScriptPath() {
return scriptPath;
}
@Override
public void generateXML(final PageState state, final Element parent) {
final Element reactAppElem = parent.newChildElement("bebop:reactApp",
BEBOP_XML_NS);
reactAppElem.addAttribute("appId", appId);
reactAppElem.addAttribute("scriptPath",
String.format("%s/%s",
Web
.getServletContext()
.getContextPath(),
scriptPath));
final String primaryUrl = getPrimaryUrl();
reactAppElem
.addAttribute("ccmApplication", primaryUrl);
reactAppElem
.addAttribute("dispatcherPrefix", Web.getWebappContextPath());
}
private String getPrimaryUrl() {
final String primaryUrl = Web
.getWebContext()
.getApplication()
.getPrimaryUrl();
if (primaryUrl.matches("^/(.*)/$")) {
return primaryUrl.substring(1, primaryUrl.length() - 1);
} else if (primaryUrl.matches("^/(.*)$")) {
return primaryUrl.substring(1);
} else if (primaryUrl.matches("^(.*)/$")) {
return primaryUrl.substring(0, primaryUrl.length() - 1);
} else {
return primaryUrl;
}
}
}

View File

@ -1,193 +0,0 @@
/*
* Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved.
*
* 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;
import com.arsdigita.bebop.BasePage;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.Label;
import com.arsdigita.util.Classes;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.HashMap;
import java.util.Iterator;
/**
* SimplePage is a subclass of ApplicationPage providing a
* simple page which can have custom, application independant
* widgets added to it. The default styling for this
* component provides a border layout with panels for the
* top, bottom, left & right margins of the page.
*
* <h3>Configuration</h3>
* The components to be added to a page are configured in the
* enterprise.init file using two parameters. The first,
* <code>defaultLayout</code>, specifies the site wide components,
* the second, <code>applicationLayouts</code> allows individual
* applications to be given a custom set of components.
* <p>
* The <code>defaultLayout</code> parameter is a list of components
* & their associated layout tags. The values specified for the
* layout tags are handled opaquely by the Java code, passing them
* straight through to the output XML. Thus the exact values you
* can specify are determined by the XSLT used for styling. For
* the default styling rules, the allowable tags are 'top', 'bottom',
* 'left' & 'right'.
* <h3>Generated XML</h3>
* To allow XSLT to easily distinguish the generic components for the
* page borders from the application specific content, all components
* added to the page are placed within one of two trivial containers.
* <p>
* All the application specific components (as added by the <code>add</code>
* method) are placed within a single <code>ui:simplePageContent</code>
* tag. The components for each position tag are placed within a
* <code>ui:simplePagePanel</code> tag, with the <code>position</code>
* attribute set accordingly.
*
*/
public class SimplePage extends BasePage {
private static SimplePageLayout s_default = new SimplePageLayout();
private static HashMap s_layouts = new HashMap();
private static Logger LOGGER = LogManager.getLogger(SimplePage.class);
/**
* Set the default layout for all applications, which haven't
* got a specific layout configuration.
*
* @param layout the default layout policy
*/
static void setDefaultLayout(SimplePageLayout layout) {
s_default = layout;
}
/**
* Set the application specific layout, overriding the default
* layout.
*
* @param application the application name
* @param layout the layout policy
*/
static void setLayout(String application,
SimplePageLayout layout) {
s_layouts.put(application, layout);
}
/**
* Retrieve the layout policy for a particular application.
* Looks for an application specific layout first, and if
* that fails, opts for the default layout.
*
* @param application the application name
* @return the applications layout
*/
static SimplePageLayout getLayout(String application) {
SimplePageLayout layout = (SimplePageLayout)s_layouts.get(application);
if (layout == null) {
layout = s_default;
}
return layout;
}
/**
* Creates a new SimplePage object. This constructor
* is only intended for subclasses & PageFactory. Applications should
* call <code>PageFactory.buildPage</code> to obtain a suitable
* instance of the com.arsdigita.bebop.Page class.
*
* @param application the application name
* @param title label for the page title
* @param id (optionally null) unique id for the page
*/
public SimplePage(String application,
Label title,
String id) {
super(application, title, id);
setClassAttr("simplePage");
addLayoutComponents(application);
}
/**
* Adds a component to the body of the page. To add a component
* to header / footer / etc, set its classname in one of the
* page layouts.
* @param child the component to add to the body
*/
public void add(Component child) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding component to body " + child.getClass());
}
super.add(child);
}
/**
* Adds a component to the body of the page. To add a component
* to header / footer / etc, set its classname in one of the
* page layouts.
* @param child the component to add to the body
*/
public void add(Component child,
int constraints) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding component to body " + child.getClass());
}
super.add(child, constraints);
}
/**
* Configure this page object, adding the pre-configured
* components to its body
*/
private void addLayoutComponents(String application) {
SimplePageLayout layout = getLayout(application);
Iterator tags = layout.getPositionTags();
while (tags.hasNext()) {
String tag = (String)tags.next();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding component with tag " + tag);
}
Iterator i = layout.getComponents(tag);
while (i.hasNext()) {
Class klass = (Class)i.next();
SimpleComponent child = (SimpleComponent)Classes.newInstance(klass);
child.setMetaDataAttribute("tag", tag);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Adding component " + child.getClass());
}
super.add(child);
}
}
}
}

View File

@ -1,53 +0,0 @@
/*
* Copyright (C) 2016 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.kernel.security.SecurityConfig;
import com.arsdigita.web.Web;
import com.arsdigita.xml.Element;
import static com.arsdigita.ui.UI.*;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class SiteBanner extends SimpleComponent {
@Override
public void generateXML(final PageState state, final Element parentElem) {
final Element contentElem = parentElem.newChildElement("ui:siteBanner",
UI_XML_NS);
exportAttributes(contentElem);
contentElem.addAttribute("hostname", getHostname());
contentElem.addAttribute("sitename", getSiteName());
}
protected String getHostname() {
return Web.getConfig().getServer();
}
protected String getSiteName() {
return Web.getConfig().getSiteName();
}
}

View File

@ -75,28 +75,7 @@ public final class UIConfig {
} }
public SimplePageLayout buildDefaultLayout() { public SimplePageLayout buildDefaultLayout() {
final SimplePageLayout layout = new SimplePageLayout(); throw new UnsupportedOperationException();
defaultLayout.forEach(c -> {
final String[] tokens = c.split(":");
if (tokens.length != 2) {
throw new ConfigurationException(
"Default layout not provided in the correct format.");
}
Class<?> clazz;
try {
clazz = Class.forName(tokens[1]);
} catch (ClassNotFoundException ex) {
throw new ConfigurationException(String.format(
"Component \"%s\" not found.", tokens[1]),
ex);
}
layout.addComponent(clazz, tokens[0]);
});
return layout;
} }
public String getRootPageUrl() { public String getRootPageUrl() {

View File

@ -1,37 +0,0 @@
/*
* Copyright (C) 2016 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class UiInitializer {
public UiInitializer() {
}
public void init() {
final UIConfig uiConfig = UIConfig.getConfig();
SimplePage.setDefaultLayout(uiConfig.buildDefaultLayout());
}
}

View File

@ -1,136 +0,0 @@
/*
* Copyright (C) 2016 LibreCCM Foundation.
*
* 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., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package com.arsdigita.ui;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.web.URL;
import com.arsdigita.xml.Element;
import org.apache.shiro.subject.Subject;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.security.User;
import org.libreccm.security.UserRepository;
import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import static com.arsdigita.ui.UI.*;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class UserBanner extends SimpleComponent {
@Override
public void generateXML(final PageState state,
final Element parentElem) {
super.generateXML(state, parentElem);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Subject subject = cdiUtil.findBean(Subject.class);
final Element contentElem = parentElem.newChildElement("ui:userBanner",
UI_XML_NS);
exportAttributes(contentElem);
if (subject.isAuthenticated()) {
final KernelConfig config = KernelConfig.getConfig();
final UserRepository userRepository = cdiUtil.findBean(
UserRepository.class);
final Optional<User> user;
if ("email".equals(config.getPrimaryUserIdentifier())) {
user = userRepository.findByEmailAddress(
(String) subject.getPrincipal());
} else {
user = userRepository
.findByName((String) subject.getPrincipal());
}
if (user.isPresent()) {
contentElem.addAttribute("givenName",
user.get().getGivenName());
contentElem.addAttribute("familyName",
user.get().getFamilyName());
contentElem.addAttribute("screenName",
user.get().getName());
contentElem.addAttribute("primaryEmail",
user.get().getPrimaryEmailAddress()
.getAddress());
contentElem.addAttribute("userID",
Long.toString(user.get().getPartyId()));
}
}
final HttpServletRequest request = state.getRequest();
contentElem.addAttribute("changePasswordLabel",
(String) new GlobalizedMessage(
"ui.admin.change_password",
UI_BUNDLE_NAME).localize(request));
contentElem.addAttribute("helpLabel",
(String) new GlobalizedMessage(
"ui.admin.help",
UI_BUNDLE_NAME).localize(request));
contentElem.addAttribute("portalLabel",
(String) new GlobalizedMessage(
"ui.admin.portal",
UI_BUNDLE_NAME).localize(request));
contentElem.addAttribute("signoutLabel",
(String) new GlobalizedMessage(
"ui.admin.signout",
UI_BUNDLE_NAME).localize(request));
contentElem.addAttribute("greeting",
(String) new GlobalizedMessage(
"ui.admin.greeting",
UI_BUNDLE_NAME).localize(request));
contentElem.addAttribute("workspaceURL",
URL.there(state.getRequest(),
UI.getWorkspaceURL()).toString());
contentElem.addAttribute("loginURL",
URL.there(state.getRequest(),
"register/")
.toString());
contentElem.addAttribute("logoutURL",
URL.there(state.getRequest(),
"register/logout")
.toString());
contentElem.addAttribute("changePasswordURL",
URL.there(state.getRequest(),
"register/change-password")
.toString());
}
}

View File

@ -51,7 +51,6 @@ import java.util.Properties;
com.arsdigita.mail.MailConfig.class, com.arsdigita.mail.MailConfig.class,
com.arsdigita.notification.NotificationConfig.class, com.arsdigita.notification.NotificationConfig.class,
com.arsdigita.templating.TemplatingConfig.class, com.arsdigita.templating.TemplatingConfig.class,
com.arsdigita.ui.UIConfig.class,
com.arsdigita.web.WebConfig.class, com.arsdigita.web.WebConfig.class,
com.arsdigita.workflow.simple.WorkflowConfig.class, com.arsdigita.workflow.simple.WorkflowConfig.class,
com.arsdigita.xml.XmlConfig.class, com.arsdigita.xml.XmlConfig.class,