PortalWorkspaces können jetzt über /ccm/admin angelegt werden.

git-svn-id: https://svn.libreccm.org/ccm/trunk@2286 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2013-08-02 13:01:03 +00:00
parent 6bf4288e69
commit bd835ca5fc
12 changed files with 218 additions and 191 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -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,52 +150,51 @@ 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");
}
} }
protected TextField getApplicationUrl() {
return applicationUrl;
} }
private class ProcessListener implements FormProcessListener { protected TextField getApplicationTitle() {
return applicationTitle;
}
protected TextArea getApplicationDesc() {
return applicationDesc;
}
protected SaveCancelSection getSaveCancelSection() {
return saveCancelSection;
}
/**
* Creates a new application instance using the provided data.
*
* @param event
* @throws FormProcessException
*/
public void process(final FormSectionEvent event) throws FormProcessException { public void process(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -194,7 +203,7 @@ public class ApplicationCreateForm<T extends Application> extends Form {
boolean createContainerGroup; boolean createContainerGroup;
final String parentPath = (String) parentApp.getValue(state); final String parentPath = (String) parentApp.getValue(state);
if ((parentPath == null) && parentPath.isEmpty()) { if ((parentPath == null) || parentPath.isEmpty()) {
parent = null; parent = null;
createContainerGroup = false; createContainerGroup = false;
} else { } else {
@ -220,9 +229,18 @@ public class ApplicationCreateForm<T extends Application> extends Form {
} }
} }
} public void submitted(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState();
private class ValidationListener implements FormValidationListener { if (saveCancelSection.getCancelButton().isSelected(state)) {
parentApp.setValue(state, "");
applicationTitle.setValue(state, "");
applicationUrl.setValue(state, "");
applicationDesc.setValue(state, "");
throw new FormProcessException("Canceled");
}
}
public void validate(final FormSectionEvent event) throws FormProcessException { public void validate(final FormSectionEvent event) throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
@ -239,6 +257,4 @@ public class ApplicationCreateForm<T extends Application> extends Form {
"ui.admin.applications.url.validation.url_already_in_use").localize()); "ui.admin.applications.url.validation.url_already_in_use").localize());
} }
} }
}
} }

View File

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

View File

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

View File

@ -15,7 +15,6 @@
* License along with this library; if not, write to the Free Software * License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
package com.arsdigita.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,18 +115,16 @@ 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>
@ -139,8 +140,7 @@ public class Workspace extends Application {
* </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,11 +149,11 @@ 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
@ -168,8 +168,8 @@ 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
@ -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)
*/ */
@ -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();
@ -580,17 +580,14 @@ public class Workspace extends Application {
} }
/** /**
* <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");
@ -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(

View File

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

View File

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

View File

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

View File

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