PortalWorkspaces können jetzt über /ccm/admin angelegt werden.
git-svn-id: https://svn.libreccm.org/ccm/trunk@2286 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
6bf4288e69
commit
bd835ca5fc
|
|
@ -130,3 +130,4 @@ ui.admin.applications.ApplicationInfoSection.desc.label=Description
|
||||||
ui.admin.applications.no_settings=This application has no settings (yet).
|
ui.admin.applications.no_settings=This application has no settings (yet).
|
||||||
ui.admin.applications.form_not_compatible_now=This application administration form is not yet compatible with this application pane. Please use the applications own administration form.
|
ui.admin.applications.form_not_compatible_now=This application administration form is not yet compatible with this application pane. Please use the applications own administration form.
|
||||||
ui.admin.applications.ApplicationInstancePane.manage.heading=Instance specific settings
|
ui.admin.applications.ApplicationInstancePane.manage.heading=Instance specific settings
|
||||||
|
ui.admin.applications.parent.label=Select parent application
|
||||||
|
|
|
||||||
|
|
@ -130,3 +130,4 @@ ui.admin.applications.ApplicationInfoSection.desc.label=Beschreibung
|
||||||
ui.admin.applications.no_settings=Diese Applikation hat (noch) keine Einstellungen.
|
ui.admin.applications.no_settings=Diese Applikation hat (noch) keine Einstellungen.
|
||||||
ui.admin.applications.form_not_compatible_now=Das Formular zur Verwaltung dieser Application ist derzeit noch nicht kompatibel mit dieser Administrationsoberfl\u00e4che. Bitte nutzen Sie den Administrationsoberfl\u00e4che der Application.
|
ui.admin.applications.form_not_compatible_now=Das Formular zur Verwaltung dieser Application ist derzeit noch nicht kompatibel mit dieser Administrationsoberfl\u00e4che. Bitte nutzen Sie den Administrationsoberfl\u00e4che der Application.
|
||||||
ui.admin.applications.ApplicationInstancePane.manage.heading=Einstellungen der Instanz
|
ui.admin.applications.ApplicationInstancePane.manage.heading=Einstellungen der Instanz
|
||||||
|
ui.admin.applications.parent.label=W\u00e4hlen Sie die \u00fcbergeordnete Applikation
|
||||||
|
|
|
||||||
|
|
@ -130,3 +130,4 @@ ui.admin.applications.ApplicationInfoSection.desc.label=
|
||||||
ui.admin.applications.no_settings=
|
ui.admin.applications.no_settings=
|
||||||
ui.admin.applications.form_not_compatible_now=
|
ui.admin.applications.form_not_compatible_now=
|
||||||
ui.admin.applications.ApplicationInstancePane.manage.heading=
|
ui.admin.applications.ApplicationInstancePane.manage.heading=
|
||||||
|
ui.admin.applications.parent.label=
|
||||||
|
|
|
||||||
|
|
@ -116,3 +116,4 @@ ui.admin.applications.ApplicationInfoSection.desc.label=
|
||||||
ui.admin.applications.no_settings=
|
ui.admin.applications.no_settings=
|
||||||
ui.admin.applications.form_not_compatible_now=
|
ui.admin.applications.form_not_compatible_now=
|
||||||
ui.admin.applications.ApplicationInstancePane.manage.heading=
|
ui.admin.applications.ApplicationInstancePane.manage.heading=
|
||||||
|
ui.admin.applications.parent.label=
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.ui.admin.applications;
|
package com.arsdigita.ui.admin.applications;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.BoxPanel;
|
||||||
|
import com.arsdigita.bebop.Component;
|
||||||
|
import com.arsdigita.bebop.Container;
|
||||||
import com.arsdigita.bebop.Form;
|
import com.arsdigita.bebop.Form;
|
||||||
import com.arsdigita.bebop.FormProcessException;
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.Label;
|
import com.arsdigita.bebop.Label;
|
||||||
|
|
@ -46,22 +49,25 @@ import com.arsdigita.util.UncheckedWrapperException;
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.web.ApplicationCollection;
|
import com.arsdigita.web.ApplicationCollection;
|
||||||
import com.arsdigita.web.ApplicationType;
|
import com.arsdigita.web.ApplicationType;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.TooManyListenersException;
|
import java.util.TooManyListenersException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Basic form for creating new Application instances. Should be suitable for
|
* Basic form for creating new Application instances. Should be suitable for most applications types. If you have
|
||||||
* most applications types. If you have special needs... $todo
|
* special needs... $todo
|
||||||
*
|
*
|
||||||
* This form does not support parent/child application structures. If
|
* This form does not support parent/child application structures. If your app needs this, add a widget for selecting
|
||||||
* your app needs this, add a widget for selecting the parent application
|
* the parent application and extend the process method.
|
||||||
* and extend the process method.
|
|
||||||
*
|
*
|
||||||
* @param <T> Type of application
|
* @param <T> Type of application
|
||||||
*
|
*
|
||||||
* @author Jens Pelzetter <jens@jp-digital.de>
|
* @author Jens Pelzetter <jens@jp-digital.de>
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public class ApplicationCreateForm<T extends Application> extends Form {
|
public class ApplicationCreateForm<T extends Application> extends Form implements FormSubmissionListener,
|
||||||
|
FormValidationListener,
|
||||||
|
FormProcessListener {
|
||||||
|
|
||||||
public static final String FORM_NAME = "ApplicationCreateForm";
|
public static final String FORM_NAME = "ApplicationCreateForm";
|
||||||
private static final String PARENT_APP = "parentAll";
|
private static final String PARENT_APP = "parentAll";
|
||||||
|
|
@ -74,6 +80,7 @@ public class ApplicationCreateForm<T extends Application> extends Form {
|
||||||
private final TextField applicationUrl;
|
private final TextField applicationUrl;
|
||||||
private final TextField applicationTitle;
|
private final TextField applicationTitle;
|
||||||
private final TextArea applicationDesc;
|
private final TextArea applicationDesc;
|
||||||
|
private final Container widgetSection;
|
||||||
private final SaveCancelSection saveCancelSection;
|
private final SaveCancelSection saveCancelSection;
|
||||||
|
|
||||||
public ApplicationCreateForm(final Class<T> appClass, final boolean allowRoot) {
|
public ApplicationCreateForm(final Class<T> appClass, final boolean allowRoot) {
|
||||||
|
|
@ -95,6 +102,9 @@ public class ApplicationCreateForm<T extends Application> extends Form {
|
||||||
applicationType = (ApplicationType) DomainObjectFactory.newInstance(appTypes.getDataObject());
|
applicationType = (ApplicationType) DomainObjectFactory.newInstance(appTypes.getDataObject());
|
||||||
appTypes.close();
|
appTypes.close();
|
||||||
|
|
||||||
|
widgetSection = new BoxPanel(BoxPanel.VERTICAL);
|
||||||
|
add(widgetSection);
|
||||||
|
|
||||||
parentApp = new SingleSelect(PARENT_APP);
|
parentApp = new SingleSelect(PARENT_APP);
|
||||||
try {
|
try {
|
||||||
parentApp.addPrintListener(new PrintListener() {
|
parentApp.addPrintListener(new PrintListener() {
|
||||||
|
|
@ -103,12 +113,12 @@ public class ApplicationCreateForm<T extends Application> extends Form {
|
||||||
target.addOption(new Option("", ""));
|
target.addOption(new Option("", ""));
|
||||||
|
|
||||||
final ApplicationCollection applications = Application.retrieveAllApplications();
|
final ApplicationCollection applications = Application.retrieveAllApplications();
|
||||||
|
applications.addOrder(Application.PRIMARY_URL);
|
||||||
while (applications.next()) {
|
while (applications.next()) {
|
||||||
target.addOption(new Option(applications.getApplication().getPath(),
|
target.addOption(new Option(applications.getApplication().getPath(),
|
||||||
applications.getApplication().getPath()));
|
applications.getApplication().getPath()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!allowRoot) {
|
if (!allowRoot) {
|
||||||
|
|
@ -140,105 +150,111 @@ public class ApplicationCreateForm<T extends Application> extends Form {
|
||||||
applicationDesc.addValidationListener(new StringInRangeValidationListener(0, 4000, GlobalizationUtil.globalize(
|
applicationDesc.addValidationListener(new StringInRangeValidationListener(0, 4000, GlobalizationUtil.globalize(
|
||||||
"ui.admin.applications.desc.valiation.minmaxlength")));
|
"ui.admin.applications.desc.valiation.minmaxlength")));
|
||||||
|
|
||||||
add(new Label(GlobalizationUtil.globalize("ui.admin.applications.parent.label")));
|
widgetSection.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.parent.label")));
|
||||||
add(parentApp);
|
widgetSection.add(parentApp);
|
||||||
add(new Label(GlobalizationUtil.globalize("ui.admin.applications.url.label")));
|
widgetSection.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.url.label")));
|
||||||
add(applicationUrl);
|
widgetSection.add(applicationUrl);
|
||||||
add(new Label(GlobalizationUtil.globalize("ui.admin.applications.title.label")));
|
widgetSection.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.title.label")));
|
||||||
add(applicationTitle);
|
widgetSection.add(applicationTitle);
|
||||||
add(new Label(GlobalizationUtil.globalize("ui.admin.applications.desc.label")));
|
widgetSection.add(new Label(GlobalizationUtil.globalize("ui.admin.applications.desc.label")));
|
||||||
add(applicationDesc);
|
widgetSection.add(applicationDesc);
|
||||||
|
|
||||||
saveCancelSection = new SaveCancelSection();
|
saveCancelSection = new SaveCancelSection();
|
||||||
add(saveCancelSection);
|
add(saveCancelSection);
|
||||||
|
|
||||||
addValidationListener(new ValidationListener());
|
addValidationListener(this);
|
||||||
addSubmissionListener(new SubmissionListener());
|
addSubmissionListener(this);
|
||||||
addProcessListener(new ProcessListener());
|
addProcessListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Container getWidgetSection() {
|
||||||
|
return widgetSection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAppClassName() {
|
public String getAppClassName() {
|
||||||
return appClassName;
|
return appClassName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SubmissionListener implements FormSubmissionListener {
|
protected SingleSelect getParentApp() {
|
||||||
|
return parentApp;
|
||||||
public void submitted(final FormSectionEvent event) throws FormProcessException {
|
|
||||||
final PageState state = event.getPageState();
|
|
||||||
|
|
||||||
if (saveCancelSection.getCancelButton().isSelected(state)) {
|
|
||||||
parentApp.setValue(state, "");
|
|
||||||
applicationTitle.setValue(state, "");
|
|
||||||
applicationUrl.setValue(state, "");
|
|
||||||
applicationDesc.setValue(state, "");
|
|
||||||
|
|
||||||
throw new FormProcessException("Canceled");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ProcessListener implements FormProcessListener {
|
protected TextField getApplicationUrl() {
|
||||||
|
return applicationUrl;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
protected TextField getApplicationTitle() {
|
||||||
* Creates a new application instance using the provided data.
|
return applicationTitle;
|
||||||
*
|
}
|
||||||
* @param event
|
|
||||||
* @throws FormProcessException
|
|
||||||
*/
|
|
||||||
public void process(final FormSectionEvent event) throws FormProcessException {
|
|
||||||
final PageState state = event.getPageState();
|
|
||||||
|
|
||||||
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
protected TextArea getApplicationDesc() {
|
||||||
Application parent;
|
return applicationDesc;
|
||||||
boolean createContainerGroup;
|
}
|
||||||
|
|
||||||
final String parentPath = (String) parentApp.getValue(state);
|
protected SaveCancelSection getSaveCancelSection() {
|
||||||
if ((parentPath == null) && parentPath.isEmpty()) {
|
return saveCancelSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void process(final FormSectionEvent event) throws FormProcessException {
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
|
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
||||||
|
Application parent;
|
||||||
|
boolean createContainerGroup;
|
||||||
|
|
||||||
|
final String parentPath = (String) parentApp.getValue(state);
|
||||||
|
if ((parentPath == null) || parentPath.isEmpty()) {
|
||||||
|
parent = null;
|
||||||
|
createContainerGroup = false;
|
||||||
|
} else {
|
||||||
|
final ApplicationCollection applications = Application.retrieveAllApplications();
|
||||||
|
applications.addEqualsFilter(Application.PRIMARY_URL, parentPath + "/");
|
||||||
|
if (applications.next()) {
|
||||||
|
parent = applications.getApplication();
|
||||||
|
createContainerGroup = true;
|
||||||
|
} else {
|
||||||
parent = null;
|
parent = null;
|
||||||
createContainerGroup = false;
|
createContainerGroup = false;
|
||||||
} else {
|
|
||||||
final ApplicationCollection applications = Application.retrieveAllApplications();
|
|
||||||
applications.addEqualsFilter(Application.PRIMARY_URL, parentPath + "/");
|
|
||||||
if (applications.next()) {
|
|
||||||
parent = applications.getApplication();
|
|
||||||
createContainerGroup = true;
|
|
||||||
} else {
|
|
||||||
parent = null;
|
|
||||||
createContainerGroup = false;
|
|
||||||
}
|
|
||||||
applications.close();
|
|
||||||
}
|
}
|
||||||
|
applications.close();
|
||||||
final Application application = Application.createApplication(applicationType,
|
|
||||||
(String) applicationUrl.getValue(state),
|
|
||||||
(String) applicationTitle.getValue(state),
|
|
||||||
parent,
|
|
||||||
createContainerGroup);
|
|
||||||
application.setDescription((String) applicationDesc.getValue(state));
|
|
||||||
application.save();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
final Application application = Application.createApplication(applicationType,
|
||||||
|
(String) applicationUrl.getValue(state),
|
||||||
|
(String) applicationTitle.getValue(state),
|
||||||
|
parent,
|
||||||
|
createContainerGroup);
|
||||||
|
application.setDescription((String) applicationDesc.getValue(state));
|
||||||
|
application.save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ValidationListener implements FormValidationListener {
|
public void submitted(final FormSectionEvent event) throws FormProcessException {
|
||||||
|
final PageState state = event.getPageState();
|
||||||
|
|
||||||
public void validate(final FormSectionEvent event) throws FormProcessException {
|
if (saveCancelSection.getCancelButton().isSelected(state)) {
|
||||||
final PageState state = event.getPageState();
|
parentApp.setValue(state, "");
|
||||||
|
applicationTitle.setValue(state, "");
|
||||||
|
applicationUrl.setValue(state, "");
|
||||||
|
applicationDesc.setValue(state, "");
|
||||||
|
|
||||||
final String url = (String) applicationUrl.getValue(state);
|
throw new FormProcessException("Canceled");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (url.contains("/")) {
|
public void validate(final FormSectionEvent event) throws FormProcessException {
|
||||||
throw new FormProcessException((String) GlobalizationUtil.globalize(
|
final PageState state = event.getPageState();
|
||||||
"ui.admin.applications.url.validation.no_slash_allowed").localize());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Application.isInstalled(Application.BASE_DATA_OBJECT_TYPE, url)) {
|
final String url = (String) applicationUrl.getValue(state);
|
||||||
throw new FormProcessException((String) GlobalizationUtil.globalize(
|
|
||||||
"ui.admin.applications.url.validation.url_already_in_use").localize());
|
if (url.contains("/")) {
|
||||||
}
|
throw new FormProcessException((String) GlobalizationUtil.globalize(
|
||||||
|
"ui.admin.applications.url.validation.no_slash_allowed").localize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Application.isInstalled(Application.BASE_DATA_OBJECT_TYPE, url)) {
|
||||||
|
throw new FormProcessException((String) GlobalizationUtil.globalize(
|
||||||
|
"ui.admin.applications.url.validation.url_already_in_use").localize());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,8 @@ public class ForumApplicationManager extends AbstractApplicationManager<Forum> {
|
||||||
|
|
||||||
final BoxPanel panel = new BoxPanel();
|
final BoxPanel panel = new BoxPanel();
|
||||||
panel.add(
|
panel.add(
|
||||||
new Label(new GlobalizedMessage("forum.ui.admin.no_settings", "com.arsdigita.forum.ui.ForumResources")));
|
new Label(new GlobalizedMessage("forum.ui.admin.no_settings",
|
||||||
|
"com.arsdigita.forum.ui.ForumResources")));
|
||||||
|
|
||||||
container.add(panel);
|
container.add(panel);
|
||||||
|
|
||||||
|
|
@ -50,5 +51,4 @@ public class ForumApplicationManager extends AbstractApplicationManager<Forum> {
|
||||||
public boolean allowRoot() {
|
public boolean allowRoot() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ import com.arsdigita.runtime.CompoundInitializer;
|
||||||
import com.arsdigita.runtime.DomainInitEvent;
|
import com.arsdigita.runtime.DomainInitEvent;
|
||||||
import com.arsdigita.runtime.PDLInitializer;
|
import com.arsdigita.runtime.PDLInitializer;
|
||||||
import com.arsdigita.runtime.RuntimeConfig;
|
import com.arsdigita.runtime.RuntimeConfig;
|
||||||
|
import com.arsdigita.ui.admin.ApplicationManagers;
|
||||||
import com.arsdigita.xml.XML;
|
import com.arsdigita.xml.XML;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -270,5 +271,8 @@ public class Initializer extends CompoundInitializer {
|
||||||
// now moved to navigation ??
|
// now moved to navigation ??
|
||||||
// ApplicationNavigationModel.register(Workspace.class.getName(),
|
// ApplicationNavigationModel.register(Workspace.class.getName(),
|
||||||
// new DefaultNavigationModel());
|
// new DefaultNavigationModel());
|
||||||
|
|
||||||
|
//Register application manager used for creating the admin form in /ccm/admin
|
||||||
|
ApplicationManagers.register(new WorkspaceApplicationManager());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
* License along with this library; if not, write to the Free Software
|
* License along with this library; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package com.arsdigita.portalworkspace;
|
package com.arsdigita.portalworkspace;
|
||||||
|
|
||||||
import com.arsdigita.domain.DataObjectNotFoundException;
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
|
|
@ -56,44 +55,47 @@ import java.util.LinkedList;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class <b>Workspace</b> is the main domain class (extending Application)
|
* Class <b>Workspace</b> is the main domain class (extending Application) for the portalworkspace module.
|
||||||
* for the portalworkspace module.
|
|
||||||
*
|
*
|
||||||
* A (portal)workspace represents an area containing 0...n portals each arranged
|
* A (portal)workspace represents an area containing 0...n portals each arranged as a pane of page. Each portal (or
|
||||||
* as a pane of page. Each portal (or pane) manages a number of portlets. So a
|
* pane) manages a number of portlets. So a workspace is a container for a set of portal panes.
|
||||||
* workspace is a container for a set of portal panes.
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class Workspace extends Application {
|
public class Workspace extends Application {
|
||||||
|
|
||||||
/** Private logger instance for debugging purpose */
|
/**
|
||||||
|
* Private logger instance for debugging purpose
|
||||||
|
*/
|
||||||
private static final Logger s_log = Logger.getLogger(Workspace.class);
|
private static final Logger s_log = Logger.getLogger(Workspace.class);
|
||||||
|
/**
|
||||||
/** Config object containing various parameter */
|
* Config object containing various parameter
|
||||||
|
*/
|
||||||
private static final WorkspaceConfig s_config = WorkspaceConfig.getConfig();
|
private static final WorkspaceConfig s_config = WorkspaceConfig.getConfig();
|
||||||
|
|
||||||
/** Service method to provide client classes access to configuration. */
|
/**
|
||||||
|
* Service method to provide client classes access to configuration.
|
||||||
|
*/
|
||||||
public static WorkspaceConfig getConfig() {
|
public static WorkspaceConfig getConfig() {
|
||||||
return s_config;
|
return s_config;
|
||||||
}
|
}
|
||||||
/** PDL stuff */
|
/**
|
||||||
|
* PDL stuff
|
||||||
|
*/
|
||||||
public static final String BASE_DATA_OBJECT_TYPE =
|
public static final String BASE_DATA_OBJECT_TYPE =
|
||||||
"com.arsdigita.portalworkspace.Workspace";
|
"com.arsdigita.portalworkspace.Workspace";
|
||||||
public static final String PARTY = "party";
|
public static final String PARTY = "party";
|
||||||
public static final String PARTY_ID = PARTY + "." + ACSObject.ID;
|
public static final String PARTY_ID = PARTY + "." + ACSObject.ID;
|
||||||
public static final String DEFAULT_LAYOUT = "defaultLayout";
|
public static final String DEFAULT_LAYOUT = "defaultLayout";
|
||||||
public static final String PAGES = "pages";
|
public static final String PAGES = "pages";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* store this as a static variable as it cannot change during the lifetime
|
* store this as a static variable as it cannot change during the lifetime of the ccm service
|
||||||
* of the ccm service
|
|
||||||
*/
|
*/
|
||||||
private static Workspace defaultHomepageWorkspace = null;
|
private static Workspace defaultHomepageWorkspace = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor retrieves the domain object using its DataObject representation
|
* Constructor retrieves the domain object using its DataObject representation
|
||||||
|
*
|
||||||
* @param obj
|
* @param obj
|
||||||
*/
|
*/
|
||||||
public Workspace(DataObject obj) {
|
public Workspace(DataObject obj) {
|
||||||
|
|
@ -102,6 +104,7 @@ public class Workspace extends Application {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor, retrieves the workspace from database using its OID
|
* Constructor, retrieves the workspace from database using its OID
|
||||||
|
*
|
||||||
* @param oid
|
* @param oid
|
||||||
* @throws com.arsdigita.domain.DataObjectNotFoundException
|
* @throws com.arsdigita.domain.DataObjectNotFoundException
|
||||||
*/
|
*/
|
||||||
|
|
@ -112,35 +115,32 @@ public class Workspace extends Application {
|
||||||
/*
|
/*
|
||||||
* public String getContextPath() { return "ccm-portalworkspace"; }
|
* public String getContextPath() { return "ccm-portalworkspace"; }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the path name of the location of the applications servlet/JSP.
|
* Returns the path name of the location of the applications servlet/JSP.
|
||||||
*
|
*
|
||||||
* The method overwrites the super class to provide an application specific
|
* The method overwrites the super class to provide an application specific location for servlets/JSP. This is
|
||||||
* location for servlets/JSP. This is necessary if you whish to install the
|
* necessary if you whish to install the module (application) along with others in one context. If you install the
|
||||||
* module (application) along with others in one context. If you install the
|
* module into its own context (no longer recommended for versions newer than 1.0.4) you may use a standard
|
||||||
* module into its own context (no longer recommended for versions newer
|
* location.
|
||||||
* than 1.0.4) you may use a standard location.
|
|
||||||
*
|
*
|
||||||
* Usually it is a symbolic name/path, which will be mapped in the web.xml
|
* Usually it is a symbolic name/path, which will be mapped in the web.xml to the real location in the file system.
|
||||||
* to the real location in the file system. Example:
|
* Example:
|
||||||
* <servlet>
|
* <servlet>
|
||||||
* <servlet-name>portalworkspace-files</servlet-name>
|
* <servlet-name>portalworkspace-files</servlet-name>
|
||||||
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
* <servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
|
||||||
* <init-param>
|
* <init-param>
|
||||||
* <param-name>template-path</param-name>
|
* <param-name>template-path</param-name>
|
||||||
* <param-value>/templates/ccm-portalworkspace</param-value>
|
* <param-value>/templates/ccm-portalworkspace</param-value>
|
||||||
* </init-param>
|
* </init-param>
|
||||||
* </servlet>
|
* </servlet>
|
||||||
*
|
*
|
||||||
* <servlet-mapping>
|
* <servlet-mapping>
|
||||||
* <servlet-name>portalworkspace-files</servlet-name>
|
* <servlet-name>portalworkspace-files</servlet-name>
|
||||||
* <url-pattern>/ccm-portalworkspace/files/*</url-pattern>
|
* <url-pattern>/ccm-portalworkspace/files/*</url-pattern>
|
||||||
* </servlet-mapping>
|
* </servlet-mapping>
|
||||||
*
|
*
|
||||||
* @return path name to the applications servlet/JSP
|
* @return path name to the applications servlet/JSP
|
||||||
* @return ServletPath (constant) probably should be synchron with web.xml
|
* @return ServletPath (constant) probably should be synchron with web.xml entry
|
||||||
* entry
|
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String getServletPath() {
|
public String getServletPath() {
|
||||||
|
|
@ -149,15 +149,15 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper class to create a new workspace using a limited set of parameters,
|
* Wrapper class to create a new workspace using a limited set of parameters, here: page layout is set to default
|
||||||
* here: page layout is set to default layout.
|
* layout.
|
||||||
*
|
*
|
||||||
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the
|
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the process of application creation uses it
|
||||||
* process of application creation uses it as createGroupContainer
|
* as createGroupContainer
|
||||||
*
|
*
|
||||||
* @param url
|
* @param url
|
||||||
* @param title
|
* @param title
|
||||||
* @param parent parent application
|
* @param parent parent application
|
||||||
* @param isPublic
|
* @param isPublic
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -168,12 +168,12 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper class to create a new workspace using a limited set of parameters,
|
* Wrapper class to create a new workspace using a limited set of parameters, here: page layout is set to default
|
||||||
* here: page layout is set to default layout.
|
* layout.
|
||||||
*
|
*
|
||||||
* @param url
|
* @param url
|
||||||
* @param title
|
* @param title
|
||||||
* @param parent parent application
|
* @param parent parent application
|
||||||
* @param owner
|
* @param owner
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
|
|
@ -184,11 +184,10 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the real work to create a workspace as a legacy compatible
|
* Does the real work to create a workspace as a legacy compatible applicationin the storage (db)
|
||||||
* applicationin the storage (db)
|
|
||||||
*
|
*
|
||||||
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the
|
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the process of application creation uses it
|
||||||
* process of application creation uses it as createGroupContainer
|
* as createGroupContainer
|
||||||
*
|
*
|
||||||
* @param url
|
* @param url
|
||||||
* @param title
|
* @param title
|
||||||
|
|
@ -208,23 +207,22 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
Workspace workspace = (Workspace) Application.createApplication(
|
Workspace workspace = (Workspace) Application.createApplication(
|
||||||
BASE_DATA_OBJECT_TYPE, url, title, parent);
|
BASE_DATA_OBJECT_TYPE, url, title, parent, true);
|
||||||
workspace.setupGroups(title, isPublic);
|
workspace.setupGroups(title, isPublic);
|
||||||
workspace.setDefaultLayout(layout);
|
workspace.setDefaultLayout(layout);
|
||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the real work to create a workspace instance as a
|
* Does the real work to create a workspace instance as a legacy free application in the storage (db)
|
||||||
* legacy free application in the storage (db)
|
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @param url of the application (last part, its "name")
|
* @param url of the application (last part, its "name")
|
||||||
* @param title the application to be created
|
* @param title the application to be created
|
||||||
* @param layout layout to use for this instance
|
* @param layout layout to use for this instance
|
||||||
* @param parent, url of the parent part if any, null otherwise
|
* @param parent, url of the parent part if any, null otherwise
|
||||||
* @param isPublic whether the group that will be created for this instance
|
* @param isPublic whether the group that will be created for this instance should be created with the public user
|
||||||
* should be created with the public user as a member
|
* as a member
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static Workspace createWorkspace(ApplicationType type,
|
public static Workspace createWorkspace(ApplicationType type,
|
||||||
|
|
@ -240,13 +238,15 @@ public class Workspace extends Application {
|
||||||
+ "and public access is: " + isPublic);
|
+ "and public access is: " + isPublic);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layout==null) layout = PageLayout.getDefaultLayout();
|
if (layout == null) {
|
||||||
|
layout = PageLayout.getDefaultLayout();
|
||||||
|
}
|
||||||
|
|
||||||
/* A container group is always created fo a portal workspace instance. */
|
/* A container group is always created fo a portal workspace instance. */
|
||||||
// MODIFIED
|
// MODIFIED
|
||||||
/* A container group is NOT created fo a portal workspace instance here. */
|
/* A container group is NOT created fo a portal workspace instance here. */
|
||||||
Workspace workspace = (Workspace) Application.createApplication(
|
Workspace workspace = (Workspace) Application.createApplication(
|
||||||
type, url, title, parent, true );
|
type, url, title, parent, true);
|
||||||
workspace.setupGroups(title, isPublic);
|
workspace.setupGroups(title, isPublic);
|
||||||
workspace.setDefaultLayout(layout);
|
workspace.setDefaultLayout(layout);
|
||||||
return workspace;
|
return workspace;
|
||||||
|
|
@ -279,13 +279,11 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the workspace that is created during loading of the
|
* Retrieve the workspace that is created during loading of the ccm-portalworkspace application and is set as the
|
||||||
* ccm-portalworkspace application and is set as the defaultworkspace
|
* defaultworkspace for the site.
|
||||||
* for the site.
|
|
||||||
*
|
*
|
||||||
* Returns null if there are no workspaces (though presumably if that is the
|
* Returns null if there are no workspaces (though presumably if that is the case, ccm-portalworkspace hasn't been
|
||||||
* case, ccm-portalworkspace hasn't been loaded and so I don't know how you
|
* loaded and so I don't know how you are invoking this method!)
|
||||||
* are invoking this method!)
|
|
||||||
*
|
*
|
||||||
* @return default workspace instance (created during load)
|
* @return default workspace instance (created during load)
|
||||||
*/
|
*/
|
||||||
|
|
@ -404,7 +402,7 @@ public class Workspace extends Application {
|
||||||
// own groups so doesn't need a hierarchy and (b) hierarchy would
|
// own groups so doesn't need a hierarchy and (b) hierarchy would
|
||||||
// mean for a given workspace, role would be on the same level
|
// mean for a given workspace, role would be on the same level
|
||||||
// as member groups of sub workspaces - messy & confusing
|
// as member groups of sub workspaces - messy & confusing
|
||||||
// getApplicationType().getGroup().addSubgroup(members);
|
// getApplicationType().getGroup().addSubgroup(members);
|
||||||
|
|
||||||
Role admins = members.createRole("Administrators");
|
Role admins = members.createRole("Administrators");
|
||||||
admins.save();
|
admins.save();
|
||||||
|
|
@ -424,9 +422,9 @@ public class Workspace extends Application {
|
||||||
members.save();
|
members.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
// getApplicationType().getGroup().addSubgroup(members);
|
// getApplicationType().getGroup().addSubgroup(members);
|
||||||
Group container = getGroup(); // Application.getGroup(): get group
|
Group container = getGroup(); // Application.getGroup(): get group
|
||||||
// associated with this application
|
// associated with this application
|
||||||
container.addSubgroup(members);
|
container.addSubgroup(members);
|
||||||
container.save();
|
container.save();
|
||||||
|
|
||||||
|
|
@ -463,7 +461,7 @@ public class Workspace extends Application {
|
||||||
throws DataObjectNotFoundException {
|
throws DataObjectNotFoundException {
|
||||||
|
|
||||||
DataCollection wks = SessionManager.getSession()
|
DataCollection wks = SessionManager.getSession()
|
||||||
.retrieve(BASE_DATA_OBJECT_TYPE);
|
.retrieve(BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
||||||
wks.addEqualsFilter("parentResource.id", getID());
|
wks.addEqualsFilter("parentResource.id", getID());
|
||||||
wks.addEqualsFilter(PARTY_ID, owner.getID());
|
wks.addEqualsFilter(PARTY_ID, owner.getID());
|
||||||
|
|
@ -556,7 +554,9 @@ public class Workspace extends Application {
|
||||||
group.save();
|
group.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Participants are the members of the Party group. */
|
/**
|
||||||
|
* Participants are the members of the Party group.
|
||||||
|
*/
|
||||||
public PartyCollection getParticipants() {
|
public PartyCollection getParticipants() {
|
||||||
Party party = getParty();
|
Party party = getParty();
|
||||||
|
|
||||||
|
|
@ -573,24 +573,21 @@ public class Workspace extends Application {
|
||||||
"com.arsdigita.kernel.User");
|
"com.arsdigita.kernel.User");
|
||||||
// .retrieve("com.arsdigita.kernel.Party");
|
// .retrieve("com.arsdigita.kernel.Party");
|
||||||
Filter f = dc.addNotInSubqueryFilter(
|
Filter f = dc.addNotInSubqueryFilter(
|
||||||
"id",
|
"id",
|
||||||
"com.arsdigita.portalworkspace.WorkspaceParticipantIDs");
|
"com.arsdigita.portalworkspace.WorkspaceParticipantIDs");
|
||||||
f.set("workspaceID", getID());
|
f.set("workspaceID", getID());
|
||||||
return new PartyCollection(dc);
|
return new PartyCollection(dc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Get a list of all the distinct "initials" of participants in
|
* <p>Get a list of all the distinct "initials" of participants in a Portal Site.</p>
|
||||||
* a Portal Site.</p>
|
|
||||||
*
|
*
|
||||||
* <p>A participant's initial is defined as the first letter of
|
* <p>A participant's initial is defined as the first letter of their family name when the participant is a user
|
||||||
* their family name when the participant is a user (i.e. a
|
* (i.e. a person), and the first letter of the group name if the participant is a group.</p>
|
||||||
* person), and the first letter of the group name if the
|
|
||||||
* participant is a group.</p>
|
|
||||||
*
|
*
|
||||||
* <p>The returned Iterator contains the initials in increasing
|
* <p>The returned Iterator contains the initials in increasing alphabetical order.</p>
|
||||||
* alphabetical order.</p>
|
*
|
||||||
**/
|
*/
|
||||||
public Iterator getParticipantInitials() {
|
public Iterator getParticipantInitials() {
|
||||||
DataQuery query = SessionManager.getSession().retrieveQuery(
|
DataQuery query = SessionManager.getSession().retrieveQuery(
|
||||||
"com.arsdigita.portalworkspace.WorkspaceParticipantInitials");
|
"com.arsdigita.portalworkspace.WorkspaceParticipantInitials");
|
||||||
|
|
@ -605,13 +602,12 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Get a collection of all participants in the Workspace whose
|
* <p>Get a collection of all participants in the Workspace whose initial (see {@link getParticipantInitials
|
||||||
* initial (see {@link getParticipantInitials
|
* getParticipantInitials} for a definition of a participant's initial) is the specified value.</p>
|
||||||
* getParticipantInitials} for a definition of a participant's
|
|
||||||
* initial) is the specified value.</p>
|
|
||||||
*
|
*
|
||||||
* @param initial Single-character string, must be uppercase
|
* @param initial Single-character string, must be uppercase
|
||||||
**/
|
*
|
||||||
|
*/
|
||||||
public PartyCollection getParticipantsWithInitial(String initial) {
|
public PartyCollection getParticipantsWithInitial(String initial) {
|
||||||
Assert.exists(initial);
|
Assert.exists(initial);
|
||||||
Assert.isTrue(initial.length() == 1, "Initial needs length 1");
|
Assert.isTrue(initial.length() == 1, "Initial needs length 1");
|
||||||
|
|
@ -628,8 +624,8 @@ public class Workspace extends Application {
|
||||||
"com.arsdigita.kernel.User");
|
"com.arsdigita.kernel.User");
|
||||||
Filter f =
|
Filter f =
|
||||||
dc.addInSubqueryFilter(
|
dc.addInSubqueryFilter(
|
||||||
"id",
|
"id",
|
||||||
"com.arsdigita.portalworkspace.WorkspaceParticipantsWithInitial");
|
"com.arsdigita.portalworkspace.WorkspaceParticipantsWithInitial");
|
||||||
f.set("workspaceID", getID());
|
f.set("workspaceID", getID());
|
||||||
f.set("nameInitial", initial);
|
f.set("nameInitial", initial);
|
||||||
|
|
||||||
|
|
@ -811,7 +807,6 @@ public class Workspace extends Application {
|
||||||
group.addMember(owner);
|
group.addMember(owner);
|
||||||
workspace.setOwner(owner);
|
workspace.setOwner(owner);
|
||||||
new KernelExcursion() {
|
new KernelExcursion() {
|
||||||
|
|
||||||
public void excurse() {
|
public void excurse() {
|
||||||
setEffectiveParty(Kernel.getSystemParty());
|
setEffectiveParty(Kernel.getSystemParty());
|
||||||
PermissionDescriptor pd = new PermissionDescriptor(
|
PermissionDescriptor pd = new PermissionDescriptor(
|
||||||
|
|
@ -851,7 +846,7 @@ public class Workspace extends Application {
|
||||||
|
|
||||||
if (personalWorkspaces.next()) {
|
if (personalWorkspaces.next()) {
|
||||||
Workspace workspace = (Workspace) Application
|
Workspace workspace = (Workspace) Application
|
||||||
.retrieveApplication(personalWorkspaces.
|
.retrieveApplication(personalWorkspaces.
|
||||||
getDataObject());
|
getDataObject());
|
||||||
if (personalWorkspaces.next()) {
|
if (personalWorkspaces.next()) {
|
||||||
s_log.error("more than one personal workspaces for this user!!");
|
s_log.error("more than one personal workspaces for this user!!");
|
||||||
|
|
|
||||||
|
|
@ -28,3 +28,5 @@ cw.workspace.ui.select_user_or_group_to_add=Select user or group to add:
|
||||||
cw.permissions.add_a_privilege=Add a privilege
|
cw.permissions.add_a_privilege=Add a privilege
|
||||||
cw.workspace.ui.participant_info=Participant Info
|
cw.workspace.ui.participant_info=Participant Info
|
||||||
cw.workspace.ui.participant_roles=Participant Roles
|
cw.workspace.ui.participant_roles=Participant Roles
|
||||||
|
cw.workspace.ui.admin.no_settings=No settings yet
|
||||||
|
cw.workspace.default_layout=Layout
|
||||||
|
|
|
||||||
|
|
@ -28,3 +28,5 @@ cw.workspace.ui.select_user_or_group_to_add=Select user or group to add:
|
||||||
cw.permissions.add_a_privilege=Add a privilege
|
cw.permissions.add_a_privilege=Add a privilege
|
||||||
cw.workspace.ui.participant_info=Participant Info
|
cw.workspace.ui.participant_info=Participant Info
|
||||||
cw.workspace.ui.participant_roles=Participant Roles
|
cw.workspace.ui.participant_roles=Participant Roles
|
||||||
|
cw.workspace.ui.admin.no_settings=Noch keine Einstellungen
|
||||||
|
cw.workspace.default_layout=Layout
|
||||||
|
|
|
||||||
|
|
@ -28,3 +28,5 @@ cw.workspace.ui.select_user_or_group_to_add=Select user or group to add:
|
||||||
cw.permissions.add_a_privilege=Add a privilege
|
cw.permissions.add_a_privilege=Add a privilege
|
||||||
cw.workspace.ui.participant_info=Participant Info
|
cw.workspace.ui.participant_info=Participant Info
|
||||||
cw.workspace.ui.participant_roles=Participant Roles
|
cw.workspace.ui.participant_roles=Participant Roles
|
||||||
|
cw.workspace.ui.admin.no_settings=
|
||||||
|
cw.workspace.default_layout=
|
||||||
|
|
|
||||||
|
|
@ -28,3 +28,5 @@ cw.workspace.ui.select_user_or_group_to_add=Select user or group to add:
|
||||||
cw.permissions.add_a_privilege=Add a privilege
|
cw.permissions.add_a_privilege=Add a privilege
|
||||||
cw.workspace.ui.participant_info=Participant Info
|
cw.workspace.ui.participant_info=Participant Info
|
||||||
cw.workspace.ui.participant_roles=Participant Roles
|
cw.workspace.ui.participant_roles=Participant Roles
|
||||||
|
cw.workspace.ui.admin.no_settings=
|
||||||
|
cw.workspace.default_layout=
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue