CCM NG:
- Finished support for multi instance applications in the Applications tab of /ccm/admin/ - Integration of ContentSection application into /ccm/admin/ git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4205 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
fb35554553
commit
e4640cd6d7
|
|
@ -48,6 +48,12 @@
|
||||||
<artifactId>ccm-shortcuts</artifactId>
|
<artifactId>ccm-shortcuts</artifactId>
|
||||||
<version>${project.parent.version}</version>
|
<version>${project.parent.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.librecms</groupId>
|
||||||
|
<artifactId>ccm-cms</artifactId>
|
||||||
|
<version>${project.parent.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- CCM Modules end -->
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,10 @@
|
||||||
<jta-data-source>java:/comp/env/jdbc/libreccm/db</jta-data-source>
|
<jta-data-source>java:/comp/env/jdbc/libreccm/db</jta-data-source>
|
||||||
|
|
||||||
<jar-file>lib/ccm-core-7.0.0-SNAPSHOT.jar</jar-file>
|
<jar-file>lib/ccm-core-7.0.0-SNAPSHOT.jar</jar-file>
|
||||||
|
<jar-file>lib/ccm-cms-7.0.0-SNAPSHOT.jar</jar-file>
|
||||||
<jar-file>lib/ccm-shortcuts-7.0.0-SNAPSHOT.jar</jar-file>
|
<jar-file>lib/ccm-shortcuts-7.0.0-SNAPSHOT.jar</jar-file>
|
||||||
|
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<!-- Properties for Hibernate -->
|
<!-- Properties for Hibernate -->
|
||||||
<property name="hibernate.hbm2ddl.auto" value="validate"/>
|
<property name="hibernate.hbm2ddl.auto" value="validate"/>
|
||||||
|
|
|
||||||
|
|
@ -180,9 +180,9 @@
|
||||||
<id>generic</id>
|
<id>generic</id>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.wildfly.plugins</groupId>
|
<groupId>org.wildfly.plugins</groupId>
|
||||||
<artifactId>wildfly-maven-plugin</artifactId>
|
<artifactId>wildfly-maven-plugin</artifactId>
|
||||||
|
|
||||||
<configuration>
|
<configuration>
|
||||||
|
|
@ -194,8 +194,8 @@
|
||||||
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
|
<java-opt>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8787</java-opt>
|
||||||
</java-opts>
|
</java-opts>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</profile>
|
</profile>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ package org.librecms;
|
||||||
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.libreccm.categorization.Category;
|
|
||||||
import org.libreccm.core.CoreConstants;
|
import org.libreccm.core.CoreConstants;
|
||||||
import org.libreccm.modules.CcmModule;
|
import org.libreccm.modules.CcmModule;
|
||||||
import org.libreccm.modules.InitEvent;
|
import org.libreccm.modules.InitEvent;
|
||||||
|
|
@ -14,24 +13,36 @@ import org.libreccm.modules.Module;
|
||||||
import org.libreccm.modules.RequiredModule;
|
import org.libreccm.modules.RequiredModule;
|
||||||
import org.libreccm.modules.ShutdownEvent;
|
import org.libreccm.modules.ShutdownEvent;
|
||||||
import org.libreccm.modules.UnInstallEvent;
|
import org.libreccm.modules.UnInstallEvent;
|
||||||
|
import org.libreccm.web.ApplicationType;
|
||||||
import org.librecms.contentsection.ContentSection;
|
import org.librecms.contentsection.ContentSection;
|
||||||
|
import org.librecms.contentsection.ContentSectionCreator;
|
||||||
import org.librecms.contentsection.ContentSectionSetup;
|
import org.librecms.contentsection.ContentSectionSetup;
|
||||||
|
import org.librecms.contentsection.ui.admin.ApplicationInstanceForm;
|
||||||
|
import org.librecms.contentsection.ui.admin.SettingsPane;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
@Module(packageName = "org.libreccm.cms",
|
@Module(//packageName = "org.librecms.cms",
|
||||||
requiredModules = {
|
requiredModules = {
|
||||||
@RequiredModule(module = org.libreccm.core.CcmCore.class)
|
@RequiredModule(module = org.libreccm.core.CcmCore.class)
|
||||||
}
|
},
|
||||||
|
applicationTypes = {
|
||||||
|
@ApplicationType(
|
||||||
|
name = CmsConstants.CONTENT_SECTION_APP_TYPE,
|
||||||
|
applicationClass = ContentSection.class,
|
||||||
|
instanceForm = ApplicationInstanceForm.class,
|
||||||
|
settingsPane = SettingsPane.class,
|
||||||
|
descBundle = CmsConstants.CONTENT_SECTION_DESC_BUNDLE,
|
||||||
|
creator = ContentSectionCreator.class
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
public class Cms implements CcmModule {
|
public class Cms implements CcmModule {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(Cms.class);
|
private static final Logger LOGGER = LogManager.getLogger(Cms.class);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void install(final InstallEvent event) {
|
public void install(final InstallEvent event) {
|
||||||
//ToDo Create initial data for the module if neccessary
|
//ToDo Create initial data for the module if neccessary
|
||||||
|
|
@ -43,7 +54,12 @@ public class Cms implements CcmModule {
|
||||||
final Properties integrationProps = new Properties();
|
final Properties integrationProps = new Properties();
|
||||||
try (final InputStream inputStream = getClass().getResourceAsStream(
|
try (final InputStream inputStream = getClass().getResourceAsStream(
|
||||||
CoreConstants.INTEGRATION_PROPS)) {
|
CoreConstants.INTEGRATION_PROPS)) {
|
||||||
integrationProps.load(inputStream);
|
|
||||||
|
if (inputStream == null) {
|
||||||
|
LOGGER.warn("No integration.properties available.");
|
||||||
|
} else {
|
||||||
|
integrationProps.load(inputStream);
|
||||||
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
LOGGER.warn(
|
LOGGER.warn(
|
||||||
"Failed to load integration properties. Using default values.",
|
"Failed to load integration properties. Using default values.",
|
||||||
|
|
@ -67,15 +83,14 @@ public class Cms implements CcmModule {
|
||||||
// * Content Reader: View Published Items
|
// * Content Reader: View Published Items
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createContentSection(final String contentSectionName) {
|
// private void createContentSection(final String contentSectionName) {
|
||||||
final ContentSection section = new ContentSection();
|
// final ContentSection section = new ContentSection();
|
||||||
section.setLabel(contentSectionName);
|
// section.setLabel(contentSectionName);
|
||||||
|
//
|
||||||
final Category rootFolder = new Category();
|
// final Category rootFolder = new Category();
|
||||||
rootFolder.setName(String.format("%s_root", contentSectionName));
|
// rootFolder.setName(String.format("%s_root", contentSectionName));
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(final InitEvent event) {
|
public void init(final InitEvent event) {
|
||||||
//ToDo Add initialisation logic necessary for your module
|
//ToDo Add initialisation logic necessary for your module
|
||||||
|
|
|
||||||
|
|
@ -28,8 +28,11 @@ public class CmsConstants {
|
||||||
|
|
||||||
public static final String DB_SCHEMA = "CCM_CMS";
|
public static final String DB_SCHEMA = "CCM_CMS";
|
||||||
|
|
||||||
|
public static final String CMS_BUNDLE = "org.librecms.CmsResources";
|
||||||
|
|
||||||
public static final String CONTENT_SECTION_APP_TYPE = "org.librecms.contentsection.ContentSection";
|
public static final String CONTENT_SECTION_APP_TYPE = "org.librecms.contentsection.ContentSection";
|
||||||
public static final String CONTENT_SECTION_SERVLET_PATH = "/templates/servlet/content-section/*";
|
public static final String CONTENT_SECTION_SERVLET_PATH = "/templates/servlet/content-section/*";
|
||||||
|
public static final String CONTENT_SECTION_DESC_BUNDLE = "org.librecms.contentsection.ContentSectionResources";
|
||||||
|
|
||||||
public static final String PRIVILEGE_ADMINISTER_CATEGORIES = "administer_categories";
|
public static final String PRIVILEGE_ADMINISTER_CATEGORIES = "administer_categories";
|
||||||
public static final String PRIVILEGE_ADMINISTER_CONTENT_TYPES = "administer_content_types";
|
public static final String PRIVILEGE_ADMINISTER_CONTENT_TYPES = "administer_content_types";
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ package org.librecms.assets;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import javax.activation.MimeType;
|
import javax.activation.MimeType;
|
||||||
import javax.persistence.AssociationOverride;
|
import javax.persistence.AssociationOverride;
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
|
|
@ -30,10 +31,14 @@ import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.JoinTable;
|
import javax.persistence.JoinTable;
|
||||||
import javax.persistence.Lob;
|
import javax.persistence.Lob;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
import org.hibernate.validator.constraints.NotEmpty;
|
import org.hibernate.validator.constraints.NotEmpty;
|
||||||
|
import org.libreccm.jpa.utils.MimeTypeConverter;
|
||||||
import org.libreccm.l10n.LocalizedString;
|
import org.libreccm.l10n.LocalizedString;
|
||||||
|
|
||||||
|
import javax.persistence.Convert;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -64,6 +69,7 @@ public class BinaryAsset extends Asset implements Serializable {
|
||||||
private String fileName;
|
private String fileName;
|
||||||
|
|
||||||
@Column(name = "MIME_TYPE", length = 512, nullable = false)
|
@Column(name = "MIME_TYPE", length = 512, nullable = false)
|
||||||
|
@Convert(converter = MimeTypeConverter.class)
|
||||||
@NotEmpty
|
@NotEmpty
|
||||||
private MimeType mimeType;
|
private MimeType mimeType;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.librecms.contentsection;
|
package org.librecms.contentsection;
|
||||||
|
|
||||||
import com.arsdigita.ui.admin.applications.DefaultApplicationInstanceForm;
|
|
||||||
import com.arsdigita.ui.admin.applications.DefaultApplicationSettingsPane;
|
|
||||||
|
|
||||||
import org.libreccm.categorization.Category;
|
import org.libreccm.categorization.Category;
|
||||||
import org.libreccm.security.Role;
|
import org.libreccm.security.Role;
|
||||||
|
|
@ -40,6 +38,7 @@ import javax.persistence.OneToOne;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
import org.libreccm.web.ApplicationType;
|
import org.libreccm.web.ApplicationType;
|
||||||
|
import org.librecms.contentsection.ui.admin.ApplicationInstanceForm;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
|
@ -65,12 +64,13 @@ import static org.librecms.CmsConstants.*;
|
||||||
+ " OR p.object = :rootDocumentsFolder) "
|
+ " OR p.object = :rootDocumentsFolder) "
|
||||||
+ "AND p.grantee = :role")
|
+ "AND p.grantee = :role")
|
||||||
})
|
})
|
||||||
@ApplicationType(
|
//@ApplicationType(
|
||||||
name = CONTENT_SECTION_APP_TYPE,
|
// name = CONTENT_SECTION_APP_TYPE,
|
||||||
descBundle = "org.librecms.contentsection.ContentSectionResources",
|
// descBundle = "org.librecms.contentsection.ContentSectionResources",
|
||||||
singleton = false,
|
// singleton = false,
|
||||||
creator = ContentSectionCreator.class,
|
// creator = ContentSectionCreator.class,
|
||||||
servlet = ContentSectionServlet.class)
|
// servlet = ContentSectionServlet.class,
|
||||||
|
// instanceForm = ApplicationInstanceForm.class)
|
||||||
public class ContentSection extends CcmApplication implements Serializable {
|
public class ContentSection extends CcmApplication implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -671718122153931727L;
|
private static final long serialVersionUID = -671718122153931727L;
|
||||||
|
|
|
||||||
|
|
@ -120,9 +120,9 @@ public class ContentSectionManager {
|
||||||
section.setRootDocumentFolder(rootFolder);
|
section.setRootDocumentFolder(rootFolder);
|
||||||
section.setRootAssetsFolder(rootAssetFolder);
|
section.setRootAssetsFolder(rootAssetFolder);
|
||||||
|
|
||||||
sectionRepo.save(section);
|
|
||||||
categoryRepo.save(rootFolder);
|
categoryRepo.save(rootFolder);
|
||||||
categoryRepo.save(rootAssetFolder);
|
categoryRepo.save(rootAssetFolder);
|
||||||
|
sectionRepo.save(section);
|
||||||
|
|
||||||
addRoleToContentSection(section,
|
addRoleToContentSection(section,
|
||||||
ALERT_RECIPIENT);
|
ALERT_RECIPIENT);
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,10 @@ import org.libreccm.categorization.Category;
|
||||||
import org.libreccm.modules.InstallEvent;
|
import org.libreccm.modules.InstallEvent;
|
||||||
import org.libreccm.security.Role;
|
import org.libreccm.security.Role;
|
||||||
import org.libreccm.web.AbstractCcmApplicationSetup;
|
import org.libreccm.web.AbstractCcmApplicationSetup;
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
import static org.librecms.CmsConstants.*;
|
import static org.librecms.CmsConstants.*;
|
||||||
import static org.librecms.contentsection.ContentSection.*;
|
import static org.librecms.contentsection.ContentSection.*;
|
||||||
|
|
@ -61,13 +65,21 @@ public class ContentSectionSetup extends AbstractCcmApplicationSetup {
|
||||||
|
|
||||||
private void createContentSection(final String sectionName) {
|
private void createContentSection(final String sectionName) {
|
||||||
final ContentSection section = new ContentSection();
|
final ContentSection section = new ContentSection();
|
||||||
|
section.setUuid(UUID.randomUUID().toString());
|
||||||
|
section.setApplicationType(CmsConstants.CONTENT_SECTION_APP_TYPE);
|
||||||
|
section.setPrimaryUrl(sectionName);
|
||||||
|
section.setDisplayName(sectionName);
|
||||||
section.setLabel(sectionName);
|
section.setLabel(sectionName);
|
||||||
|
|
||||||
final Category rootFolder = new Category();
|
final Category rootFolder = new Category();
|
||||||
|
rootFolder.setUuid(UUID.randomUUID().toString());
|
||||||
|
rootFolder.setUniqueId(rootFolder.getUuid());
|
||||||
rootFolder.setName(String.format("%s_" + ROOT, sectionName));
|
rootFolder.setName(String.format("%s_" + ROOT, sectionName));
|
||||||
|
|
||||||
final Category rootAssetFolder = new Category();
|
final Category rootAssetFolder = new Category();
|
||||||
rootFolder.setName(String.format("%s_" + ASSETS, sectionName));
|
rootAssetFolder.setName(String.format("%s_" + ASSETS, sectionName));
|
||||||
|
rootAssetFolder.setUuid(UUID.randomUUID().toString());
|
||||||
|
rootAssetFolder.setUniqueId(rootAssetFolder.getUuid());
|
||||||
|
|
||||||
section.setRootDocumentFolder(rootFolder);
|
section.setRootDocumentFolder(rootFolder);
|
||||||
section.setRootAssetsFolder(rootAssetFolder);
|
section.setRootAssetsFolder(rootAssetFolder);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* 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 org.librecms.contentsection.ui.admin;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.ui.admin.applications.DefaultApplicationInstanceForm;
|
||||||
|
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.librecms.contentsection.ContentSectionManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class ApplicationInstanceForm extends DefaultApplicationInstanceForm {
|
||||||
|
|
||||||
|
public ApplicationInstanceForm(
|
||||||
|
final String name,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedAppType,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedAppInstance) {
|
||||||
|
|
||||||
|
super(name, selectedAppType, selectedAppInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected FormProcessListener createProcessListener() {
|
||||||
|
return (FormSectionEvent e) -> {
|
||||||
|
final PageState state = e.getPageState();
|
||||||
|
if (getSaveCancelSection().getSaveButton().isSelected(state)) {
|
||||||
|
final FormData data = e.getFormData();
|
||||||
|
|
||||||
|
final String primaryUrlData = data.getString(
|
||||||
|
"new_instance_primary_url");
|
||||||
|
|
||||||
|
final ContentSectionManager manager = CdiUtil.createCdiUtil()
|
||||||
|
.findBean(ContentSectionManager.class);
|
||||||
|
|
||||||
|
manager.createContentSection(primaryUrlData);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* 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 org.librecms.contentsection.ui.admin;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.ActionLink;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.Link;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.ui.admin.applications.AbstractAppSettingsPane;
|
||||||
|
import com.arsdigita.web.RedirectSignal;
|
||||||
|
import com.arsdigita.web.URL;
|
||||||
|
|
||||||
|
import org.librecms.CmsConstants;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
|
*/
|
||||||
|
public class SettingsPane extends AbstractAppSettingsPane {
|
||||||
|
|
||||||
|
public SettingsPane(
|
||||||
|
final ParameterSingleSelectionModel<String> selectedAppType,
|
||||||
|
final ParameterSingleSelectionModel<String> selectedAppInstance) {
|
||||||
|
super(selectedAppType, selectedAppInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createWidgets() {
|
||||||
|
final Label label = new Label(new GlobalizedMessage(
|
||||||
|
"contentsection.ui.admin.app_note", CmsConstants.CMS_BUNDLE));
|
||||||
|
add(label);
|
||||||
|
|
||||||
|
final ActionLink link = new ActionLink(new GlobalizedMessage(
|
||||||
|
"contentsection.ui.admin.link_app", CmsConstants.CMS_BUNDLE));
|
||||||
|
link.addActionListener(e -> {
|
||||||
|
final PageState state = e.getPageState();
|
||||||
|
final String primaryUrl;
|
||||||
|
if (getSelectedAppInstance(state).get().getPrimaryUrl().startsWith(
|
||||||
|
"/")) {
|
||||||
|
primaryUrl = getSelectedAppInstance(state).get().getPrimaryUrl();
|
||||||
|
} else {
|
||||||
|
primaryUrl = String.format(
|
||||||
|
"/%s",
|
||||||
|
getSelectedAppInstance(state).get().getPrimaryUrl());
|
||||||
|
}
|
||||||
|
throw new RedirectSignal(
|
||||||
|
URL.there(state.getRequest(), primaryUrl, null),
|
||||||
|
false);
|
||||||
|
});
|
||||||
|
add(link);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -162,7 +162,7 @@
|
||||||
create table CCM_CMS.BINARY_ASSETS (
|
create table CCM_CMS.BINARY_ASSETS (
|
||||||
ASSET_DATA blob,
|
ASSET_DATA blob,
|
||||||
FILENAME varchar(512) not null,
|
FILENAME varchar(512) not null,
|
||||||
MIME_TYPE binary(512) not null,
|
MIME_TYPE varchar(512) not null,
|
||||||
DATA_SIZE bigint,
|
DATA_SIZE bigint,
|
||||||
ASSET_ID bigint not null,
|
ASSET_ID bigint not null,
|
||||||
primary key (ASSET_ID)
|
primary key (ASSET_ID)
|
||||||
|
|
@ -173,7 +173,7 @@
|
||||||
REV integer not null,
|
REV integer not null,
|
||||||
ASSET_DATA blob,
|
ASSET_DATA blob,
|
||||||
FILENAME varchar(512),
|
FILENAME varchar(512),
|
||||||
MIME_TYPE binary(512),
|
MIME_TYPE varchar(512),
|
||||||
DATA_SIZE bigint,
|
DATA_SIZE bigint,
|
||||||
primary key (ASSET_ID, REV)
|
primary key (ASSET_ID, REV)
|
||||||
);
|
);
|
||||||
|
|
@ -278,6 +278,11 @@
|
||||||
primary key (OBJECT_ID, REV)
|
primary key (OBJECT_ID, REV)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
create table CCM_CMS.CONTENT_SECTION_ROLES (
|
||||||
|
SECTION_ID bigint not null,
|
||||||
|
ROLE_ID bigint not null
|
||||||
|
);
|
||||||
|
|
||||||
create table CCM_CMS.CONTENT_SECTIONS (
|
create table CCM_CMS.CONTENT_SECTIONS (
|
||||||
DEFAULT_LOCALE varchar(255),
|
DEFAULT_LOCALE varchar(255),
|
||||||
ITEM_RESOLVER_CLASS varchar(1024),
|
ITEM_RESOLVER_CLASS varchar(1024),
|
||||||
|
|
@ -288,8 +293,6 @@
|
||||||
OBJECT_ID bigint not null,
|
OBJECT_ID bigint not null,
|
||||||
ROOT_ASSETS_FOLDER_ID bigint,
|
ROOT_ASSETS_FOLDER_ID bigint,
|
||||||
ROOT_DOCUMENTS_FOLDER_ID bigint,
|
ROOT_DOCUMENTS_FOLDER_ID bigint,
|
||||||
STAFF_ROLE_ID bigint,
|
|
||||||
VIEWERS_ROLE_ID bigint,
|
|
||||||
primary key (OBJECT_ID)
|
primary key (OBJECT_ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1071,6 +1074,16 @@
|
||||||
foreign key (OBJECT_ID, REV)
|
foreign key (OBJECT_ID, REV)
|
||||||
references CCM_CORE.CCM_OBJECTS_AUD;
|
references CCM_CORE.CCM_OBJECTS_AUD;
|
||||||
|
|
||||||
|
alter table CCM_CMS.CONTENT_SECTION_ROLES
|
||||||
|
add constraint FKkn5nygbmub9wd5lxw3402t82d
|
||||||
|
foreign key (ROLE_ID)
|
||||||
|
references CCM_CORE.CCM_ROLES;
|
||||||
|
|
||||||
|
alter table CCM_CMS.CONTENT_SECTION_ROLES
|
||||||
|
add constraint FKgcn76piocmkmvl3b0omv9vkv9
|
||||||
|
foreign key (SECTION_ID)
|
||||||
|
references CCM_CMS.CONTENT_SECTIONS;
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
alter table CCM_CMS.CONTENT_SECTIONS
|
||||||
add constraint FKajweudfxaf7g2ydr2hcgqwcib
|
add constraint FKajweudfxaf7g2ydr2hcgqwcib
|
||||||
foreign key (ROOT_ASSETS_FOLDER_ID)
|
foreign key (ROOT_ASSETS_FOLDER_ID)
|
||||||
|
|
@ -1081,16 +1094,6 @@
|
||||||
foreign key (ROOT_DOCUMENTS_FOLDER_ID)
|
foreign key (ROOT_DOCUMENTS_FOLDER_ID)
|
||||||
references CCM_CORE.CATEGORIES;
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
|
||||||
add constraint FKqb579yjmmqbergn0qv68a4rqb
|
|
||||||
foreign key (STAFF_ROLE_ID)
|
|
||||||
references CCM_CORE.CCM_ROLES;
|
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
|
||||||
add constraint FKjntqpyi3g4bx97ive5x8aipyi
|
|
||||||
foreign key (VIEWERS_ROLE_ID)
|
|
||||||
references CCM_CORE.CCM_ROLES;
|
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
alter table CCM_CMS.CONTENT_SECTIONS
|
||||||
add constraint FK72jh0axiiru87i61mppvaiv96
|
add constraint FK72jh0axiiru87i61mppvaiv96
|
||||||
foreign key (OBJECT_ID)
|
foreign key (OBJECT_ID)
|
||||||
|
|
@ -1556,3 +1559,492 @@
|
||||||
foreign key (TASK_ID)
|
foreign key (TASK_ID)
|
||||||
references CCM_CORE.WORKFLOW_USER_TASKS;
|
references CCM_CORE.WORKFLOW_USER_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.APPLICATIONS
|
||||||
|
add constraint FKatcp9ij6mbkx0nfeig1o6n3lm
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.ATTACHMENTS
|
||||||
|
add constraint FK8ju9hm9baceridp803nislkwb
|
||||||
|
foreign key (MESSAGE_ID)
|
||||||
|
references CCM_CORE.MESSAGES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORIES
|
||||||
|
add constraint FKrj3marx99nheur4fqanm0ylur
|
||||||
|
foreign key (PARENT_CATEGORY_ID)
|
||||||
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORIES
|
||||||
|
add constraint FKpm291swli2musd0204phta652
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORIZATIONS
|
||||||
|
add constraint FKejp0ubk034nfq60v1po6srkke
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORIZATIONS
|
||||||
|
add constraint FKoyeipswl876wa6mqwbx0uy83h
|
||||||
|
foreign key (CATEGORY_ID)
|
||||||
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORY_DESCRIPTIONS
|
||||||
|
add constraint FKhiwjlmh5vkbu3v3vng1la1qum
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORY_DOMAINS
|
||||||
|
add constraint FKf25vi73cji01w8fgo6ow1dgg
|
||||||
|
foreign key (ROOT_CATEGORY_ID)
|
||||||
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORY_DOMAINS
|
||||||
|
add constraint FK58xpmnvciohkom1c16oua4xha
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CATEGORY_TITLES
|
||||||
|
add constraint FKka9bt9f5br0kji5bcjxcmf6ch
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CCM_OBJECTS_AUD
|
||||||
|
add constraint FKr00eauutiyvocno8ckx6h9nw6
|
||||||
|
foreign key (REV)
|
||||||
|
references CCM_CORE.CCM_REVISIONS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.CCM_OBJECTS_AUD
|
||||||
|
add constraint FKo5s37ctcdny7tmewjwv7705h5
|
||||||
|
foreign key (REVEND)
|
||||||
|
references CCM_CORE.CCM_REVISIONS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DIGESTS
|
||||||
|
add constraint FKc53g09agnye3w1v4euy3e0gsi
|
||||||
|
foreign key (FROM_PARTY_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DIGESTS
|
||||||
|
add constraint FK845r9ep6xu6nbt1mvxulwybym
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DOMAIN_DESCRIPTIONS
|
||||||
|
add constraint FKn4i2dxgn8cqysa62dds6eih6a
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CATEGORY_DOMAINS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DOMAIN_OWNERSHIPS
|
||||||
|
add constraint FK47nsasr7jrdwlky5gx0u6e9py
|
||||||
|
foreign key (domain_OBJECT_ID)
|
||||||
|
references CCM_CORE.CATEGORY_DOMAINS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DOMAIN_OWNERSHIPS
|
||||||
|
add constraint FK3u4hq6yqau4m419b1xva3xpwq
|
||||||
|
foreign key (owner_OBJECT_ID)
|
||||||
|
references CCM_CORE.APPLICATIONS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.DOMAIN_TITLES
|
||||||
|
add constraint FK5p526dsdwn94els6lp5w0hdn4
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CATEGORY_DOMAINS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_COMPONENT_DESCRIPTIONS
|
||||||
|
add constraint FKfh0k9lj3pf4amfc9bbbss0tr1
|
||||||
|
foreign key (COMPONENT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_COMPONENTS
|
||||||
|
add constraint FKpcpmvyiix023b4g5n4q8nkfca
|
||||||
|
foreign key (parentComponent_OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_COMPONENTS
|
||||||
|
add constraint FKt0e0uv00pp1rwhyaltrytghnm
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_CONFIRM_EMAIL_LISTENER
|
||||||
|
add constraint FK48khrbud3xhi2gvsvnlttd8tg
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_CONFIRM_REDIRECT_LISTENERS
|
||||||
|
add constraint FKbyjjt2ufendvje2obtge2l7et
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_DATA_DRIVEN_SELECTS
|
||||||
|
add constraint FK8oriyta1957u7dvbrqk717944
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_WIDGETS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_DATA_QUERIES
|
||||||
|
add constraint FKhhaxpeddbtmrnjr5o0fopju3a
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_DATA_QUERY_DESCRIPTIONS
|
||||||
|
add constraint FKsmduu1opoiulkeo2gc8v7lsbn
|
||||||
|
foreign key (DATA_QUERY_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_DATA_QUERIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_DATA_QUERY_NAMES
|
||||||
|
add constraint FKju1x82inrw3kguyjuxoetn6gn
|
||||||
|
foreign key (DATA_QUERY_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_DATA_QUERIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_FORMSECTIONS
|
||||||
|
add constraint FKnfhsgxp4lvigq2pm33pn4afac
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_LISTENERS
|
||||||
|
add constraint FK33ilyirwoux28yowafgd5xx0o
|
||||||
|
foreign key (widget_OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_WIDGETS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_LISTENERS
|
||||||
|
add constraint FKlqm76746nq5yrt8ganm474uu0
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_METAOBJECTS
|
||||||
|
add constraint FKf963v6u9mw8pwjmasrw51w8dx
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_OBJECT_TYPES
|
||||||
|
add constraint FKkv337e83rsecf0h3qy8bu7l9w
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_OPTION_LABELS
|
||||||
|
add constraint FKatlsylsvln6yse55eof6wwkj6
|
||||||
|
foreign key (OPTION_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_OPTIONS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_OPTIONS
|
||||||
|
add constraint FKhe5q71wby9g4i56sotc501h11
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENER_DESCRIPTIONS
|
||||||
|
add constraint FKcv3iu04gxjk9c0pn6tl8rqqv3
|
||||||
|
foreign key (PROCESS_LISTENER_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENER_NAMES
|
||||||
|
add constraint FK8rnyb1m6ij3b9hhmhr7klgd4p
|
||||||
|
foreign key (PROCESS_LISTENER_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENERS
|
||||||
|
add constraint FK7uiaeax8qafm82e5k729ms5ku
|
||||||
|
foreign key (formSection_OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_FORMSECTIONS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENERS
|
||||||
|
add constraint FKbdnloo884qk6gn36jwiqv5rlp
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_REMOTE_SERVER_POST_LISTENER
|
||||||
|
add constraint FKpajvu9m6fj1enm67a9gcb5ii9
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_SIMPLE_EMAIL_LISTENERS
|
||||||
|
add constraint FKsn82ktlq0c9ikijyv8k2bfv4f
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_TEMPLATE_EMAIL_LISTENERS
|
||||||
|
add constraint FK8kjyu72btjsuaaqh4bvd8npns
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_WIDGET_LABELS
|
||||||
|
add constraint FKb1q9bfshcrkwlj7r8w5jb4y8l
|
||||||
|
foreign key (widget_OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_WIDGETS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_WIDGET_LABELS
|
||||||
|
add constraint FKm1huo6ghk9l5o8buku9v8y6q7
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_WIDGETS
|
||||||
|
add constraint FKs7qq6vxblhmq0rlf87re65jdp
|
||||||
|
foreign key (label_OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_WIDGET_LABELS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_WIDGETS
|
||||||
|
add constraint FK1wosr4ujbfckdc50u5fgmrhrk
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_COMPONENTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.FORMBUILDER_XML_EMAIL_LISTENERS
|
||||||
|
add constraint FKjie9co03m7ow4ihig5rk7l8oj
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.FORMBUILDER_PROCESS_LISTENERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.GROUP_MEMBERSHIPS
|
||||||
|
add constraint FKq4qnny8ri3eo7eqh4olxco8nk
|
||||||
|
foreign key (GROUP_ID)
|
||||||
|
references CCM_CORE.GROUPS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.GROUP_MEMBERSHIPS
|
||||||
|
add constraint FKc8u86ivkhvoiw6ju8b2p365he
|
||||||
|
foreign key (MEMBER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.GROUPS
|
||||||
|
add constraint FK4f61mlqxw0ct6s7wwpi9m0735
|
||||||
|
foreign key (PARTY_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.INITS
|
||||||
|
add constraint FK3nvvxk10nmq9nfuko8yklqdgc
|
||||||
|
foreign key (REQUIRED_BY_ID)
|
||||||
|
references CCM_CORE.INITS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.LUCENE_DOCUMENTS
|
||||||
|
add constraint FK942kl4yff8rdiwr0pjk2a9g8
|
||||||
|
foreign key (CREATED_BY_PARTY_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.LUCENE_DOCUMENTS
|
||||||
|
add constraint FKc5rs6afx4p9fidabfqsxr5ble
|
||||||
|
foreign key (LAST_MODIFIED_BY)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.LUCENE_INDEXES
|
||||||
|
add constraint FK6gu0yrlviqk07dtb3r02iw43f
|
||||||
|
foreign key (HOST_ID)
|
||||||
|
references CCM_CORE.HOSTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.MESSAGES
|
||||||
|
add constraint FKph10aehmg9f20pn2w4buki97q
|
||||||
|
foreign key (IN_REPLY_TO_ID)
|
||||||
|
references CCM_CORE.MESSAGES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.MESSAGES
|
||||||
|
add constraint FKjufsx3c3h538fj35h8hgfnb1p
|
||||||
|
foreign key (SENDER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.MESSAGES
|
||||||
|
add constraint FK6w20ao7scwecd9mfwpun2ddqx
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.NOTIFICATIONS
|
||||||
|
add constraint FKqk70c1x1dklhty9ju5t4wukd9
|
||||||
|
foreign key (DIGEST_ID)
|
||||||
|
references CCM_CORE.DIGESTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.NOTIFICATIONS
|
||||||
|
add constraint FKtt4fjr2p75og79jxxgd8q8mr
|
||||||
|
foreign key (MESSAGE_ID)
|
||||||
|
references CCM_CORE.MESSAGES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.NOTIFICATIONS
|
||||||
|
add constraint FK2vlnma0ox43j0clx8ead08n5s
|
||||||
|
foreign key (RECEIVER_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.NOTIFICATIONS
|
||||||
|
add constraint FKf423hhiaw1bexpxeh1pnas7qt
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.ONE_TIME_AUTH_TOKENS
|
||||||
|
add constraint FKtplfuphkiorfkttaewb4wmfjc
|
||||||
|
foreign key (USER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PERMISSIONS
|
||||||
|
add constraint FKj9di7pawxgtouxmu2k44bj5c4
|
||||||
|
foreign key (CREATION_USER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PERMISSIONS
|
||||||
|
add constraint FKikx3x0kn9fito23g50v6xbr9f
|
||||||
|
foreign key (GRANTEE_ID)
|
||||||
|
references CCM_CORE.CCM_ROLES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PERMISSIONS
|
||||||
|
add constraint FKkamckexjnffnt8lay9nqeawhm
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PORTALS
|
||||||
|
add constraint FK5a2hdrbw03mmgr74vj5nxlpvk
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PORTLETS
|
||||||
|
add constraint FK9gr5xjt3rx4uhtw7vl6adruol
|
||||||
|
foreign key (PORTAL_ID)
|
||||||
|
references CCM_CORE.PORTALS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.PORTLETS
|
||||||
|
add constraint FKjmx9uebt0gwxkw3xv34niy35f
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.QUEUE_ITEMS
|
||||||
|
add constraint FKtgkwfruv9kjdybf46l02da088
|
||||||
|
foreign key (MESSAGE_ID)
|
||||||
|
references CCM_CORE.MESSAGES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.QUEUE_ITEMS
|
||||||
|
add constraint FKs9aq1hyxstwmvx7fmfifp4x7r
|
||||||
|
foreign key (RECEIVER_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCE_DESCRIPTIONS
|
||||||
|
add constraint FKk9arvj5u21rv23ce3cav4opqx
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCE_TITLES
|
||||||
|
add constraint FKto4p6n2wklljyf7tmuxtmyfe0
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCE_TYPE_DESCRIPTIONS
|
||||||
|
add constraint FKckpihjtv23iahbg3imnpbsr2
|
||||||
|
foreign key (RESOURCE_TYPE_ID)
|
||||||
|
references CCM_CORE.RESOURCE_TYPES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCES
|
||||||
|
add constraint FKbo7ibfgodicn9flv2gfo11g5a
|
||||||
|
foreign key (parent_OBJECT_ID)
|
||||||
|
references CCM_CORE.RESOURCES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCES
|
||||||
|
add constraint FK262fbwetpjx3k4uuvw24wsiv
|
||||||
|
foreign key (resourceType_RESOURCE_TYPE_ID)
|
||||||
|
references CCM_CORE.RESOURCE_TYPES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.RESOURCES
|
||||||
|
add constraint FKbjdf8pm4frth8r06ev2qjm88f
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.ROLE_MEMBERSHIPS
|
||||||
|
add constraint FK9m88ywi7rcin7b7jrgh53emrq
|
||||||
|
foreign key (MEMBER_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.ROLE_MEMBERSHIPS
|
||||||
|
add constraint FKcsyogv5m2rgsrmtgnhgkjhfw7
|
||||||
|
foreign key (ROLE_ID)
|
||||||
|
references CCM_CORE.CCM_ROLES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.SETTINGS_ENUM_VALUES
|
||||||
|
add constraint FK8mw4p92s0h3h8bmo8saowu32i
|
||||||
|
foreign key (ENUM_ID)
|
||||||
|
references CCM_CORE.SETTINGS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.SETTINGS_L10N_STR_VALUES
|
||||||
|
add constraint FK5knjq7cisej0qfx5dw1y93rou
|
||||||
|
foreign key (ENTRY_ID)
|
||||||
|
references CCM_CORE.SETTINGS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.SETTINGS_STRING_LIST
|
||||||
|
add constraint FKqeclqa5sf1g53vxs857tpwrus
|
||||||
|
foreign key (LIST_ID)
|
||||||
|
references CCM_CORE.SETTINGS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.TASK_ASSIGNMENTS
|
||||||
|
add constraint FKe29uwmvxdmol1fjob3auej4qv
|
||||||
|
foreign key (ROLE_ID)
|
||||||
|
references CCM_CORE.CCM_ROLES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.TASK_ASSIGNMENTS
|
||||||
|
add constraint FKc1vovbjg9mp5yegx2fdoutx7u
|
||||||
|
foreign key (TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_USER_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.THREADS
|
||||||
|
add constraint FKsx08mpwvwnw97uwdgjs76q39g
|
||||||
|
foreign key (ROOT_ID)
|
||||||
|
references CCM_CORE.MESSAGES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.THREADS
|
||||||
|
add constraint FKp97b1sy1kop07rtapeh5l9fb2
|
||||||
|
foreign key (OBJECT_ID)
|
||||||
|
references CCM_CORE.CCM_OBJECTS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.USER_EMAIL_ADDRESSES
|
||||||
|
add constraint FKr900l79erul95seyyccf04ufc
|
||||||
|
foreign key (USER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.USERS
|
||||||
|
add constraint FKosh928q71aonu6l1kurb417r
|
||||||
|
foreign key (PARTY_ID)
|
||||||
|
references CCM_CORE.PARTIES;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_DESCRIPTIONS
|
||||||
|
add constraint FKgx7upkqky82dpxvbs95imfl9l
|
||||||
|
foreign key (WORKFLOW_ID)
|
||||||
|
references CCM_CORE.WORKFLOWS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_NAMES
|
||||||
|
add constraint FKkxedy9p48avfk45r0bn4uc09i
|
||||||
|
foreign key (WORKFLOW_ID)
|
||||||
|
references CCM_CORE.WORKFLOWS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASK_COMMENTS
|
||||||
|
add constraint FKkfqrf9jdvm7livu5if06w0r5t
|
||||||
|
foreign key (TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASK_DEPENDENCIES
|
||||||
|
add constraint FK1htp420ki24jaswtcum56iawe
|
||||||
|
foreign key (DEPENDENT_TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASK_DEPENDENCIES
|
||||||
|
add constraint FK8rbggnp4yjpab8quvvx800ymy
|
||||||
|
foreign key (DEPENDS_ON_TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASK_LABELS
|
||||||
|
add constraint FKf715qud6g9xv2xeb8rrpnv4xs
|
||||||
|
foreign key (TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASKS
|
||||||
|
add constraint FK1693cbc36e4d8gucg8q7sc57e
|
||||||
|
foreign key (WORKFLOW_ID)
|
||||||
|
references CCM_CORE.WORKFLOWS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TASKS_DESCRIPTIONS
|
||||||
|
add constraint FK2s2498d2tpojjrtghq7iyaosv
|
||||||
|
foreign key (TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_TEMPLATES
|
||||||
|
add constraint FK8692vdme4yxnkj1m0k1dw74pk
|
||||||
|
foreign key (WORKFLOW_ID)
|
||||||
|
references CCM_CORE.WORKFLOWS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_USER_TASKS
|
||||||
|
add constraint FKf09depwj5rgso2dair07vnu33
|
||||||
|
foreign key (LOCKING_USER_ID)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_USER_TASKS
|
||||||
|
add constraint FK6evo9y34awhdfcyl8gv78qb7f
|
||||||
|
foreign key (NOTIFICATION_SENDER)
|
||||||
|
references CCM_CORE.USERS;
|
||||||
|
|
||||||
|
alter table CCM_CORE.WORKFLOW_USER_TASKS
|
||||||
|
add constraint FKefpdf9ojplu7loo31hfm0wl2h
|
||||||
|
foreign key (TASK_ID)
|
||||||
|
references CCM_CORE.WORKFLOW_TASKS;
|
||||||
|
|
@ -163,7 +163,7 @@
|
||||||
create table CCM_CMS.BINARY_ASSETS (
|
create table CCM_CMS.BINARY_ASSETS (
|
||||||
ASSET_DATA oid,
|
ASSET_DATA oid,
|
||||||
FILENAME varchar(512) not null,
|
FILENAME varchar(512) not null,
|
||||||
MIME_TYPE bytea not null,
|
MIME_TYPE varchar(512) not null,
|
||||||
DATA_SIZE int8,
|
DATA_SIZE int8,
|
||||||
ASSET_ID int8 not null,
|
ASSET_ID int8 not null,
|
||||||
primary key (ASSET_ID)
|
primary key (ASSET_ID)
|
||||||
|
|
@ -174,7 +174,7 @@
|
||||||
REV int4 not null,
|
REV int4 not null,
|
||||||
ASSET_DATA oid,
|
ASSET_DATA oid,
|
||||||
FILENAME varchar(512),
|
FILENAME varchar(512),
|
||||||
MIME_TYPE bytea,
|
MIME_TYPE varchar(512),
|
||||||
DATA_SIZE int8,
|
DATA_SIZE int8,
|
||||||
primary key (ASSET_ID, REV)
|
primary key (ASSET_ID, REV)
|
||||||
);
|
);
|
||||||
|
|
@ -279,6 +279,11 @@
|
||||||
primary key (OBJECT_ID, REV)
|
primary key (OBJECT_ID, REV)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
create table CCM_CMS.CONTENT_SECTION_ROLES (
|
||||||
|
SECTION_ID int8 not null,
|
||||||
|
ROLE_ID int8 not null
|
||||||
|
);
|
||||||
|
|
||||||
create table CCM_CMS.CONTENT_SECTIONS (
|
create table CCM_CMS.CONTENT_SECTIONS (
|
||||||
DEFAULT_LOCALE varchar(255),
|
DEFAULT_LOCALE varchar(255),
|
||||||
ITEM_RESOLVER_CLASS varchar(1024),
|
ITEM_RESOLVER_CLASS varchar(1024),
|
||||||
|
|
@ -289,8 +294,6 @@
|
||||||
OBJECT_ID int8 not null,
|
OBJECT_ID int8 not null,
|
||||||
ROOT_ASSETS_FOLDER_ID int8,
|
ROOT_ASSETS_FOLDER_ID int8,
|
||||||
ROOT_DOCUMENTS_FOLDER_ID int8,
|
ROOT_DOCUMENTS_FOLDER_ID int8,
|
||||||
STAFF_ROLE_ID int8,
|
|
||||||
VIEWERS_ROLE_ID int8,
|
|
||||||
primary key (OBJECT_ID)
|
primary key (OBJECT_ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -1072,6 +1075,16 @@
|
||||||
foreign key (OBJECT_ID, REV)
|
foreign key (OBJECT_ID, REV)
|
||||||
references CCM_CORE.CCM_OBJECTS_AUD;
|
references CCM_CORE.CCM_OBJECTS_AUD;
|
||||||
|
|
||||||
|
alter table CCM_CMS.CONTENT_SECTION_ROLES
|
||||||
|
add constraint FKkn5nygbmub9wd5lxw3402t82d
|
||||||
|
foreign key (ROLE_ID)
|
||||||
|
references CCM_CORE.CCM_ROLES;
|
||||||
|
|
||||||
|
alter table CCM_CMS.CONTENT_SECTION_ROLES
|
||||||
|
add constraint FKgcn76piocmkmvl3b0omv9vkv9
|
||||||
|
foreign key (SECTION_ID)
|
||||||
|
references CCM_CMS.CONTENT_SECTIONS;
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
alter table CCM_CMS.CONTENT_SECTIONS
|
||||||
add constraint FKajweudfxaf7g2ydr2hcgqwcib
|
add constraint FKajweudfxaf7g2ydr2hcgqwcib
|
||||||
foreign key (ROOT_ASSETS_FOLDER_ID)
|
foreign key (ROOT_ASSETS_FOLDER_ID)
|
||||||
|
|
@ -1082,16 +1095,6 @@
|
||||||
foreign key (ROOT_DOCUMENTS_FOLDER_ID)
|
foreign key (ROOT_DOCUMENTS_FOLDER_ID)
|
||||||
references CCM_CORE.CATEGORIES;
|
references CCM_CORE.CATEGORIES;
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
|
||||||
add constraint FKqb579yjmmqbergn0qv68a4rqb
|
|
||||||
foreign key (STAFF_ROLE_ID)
|
|
||||||
references CCM_CORE.CCM_ROLES;
|
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
|
||||||
add constraint FKjntqpyi3g4bx97ive5x8aipyi
|
|
||||||
foreign key (VIEWERS_ROLE_ID)
|
|
||||||
references CCM_CORE.CCM_ROLES;
|
|
||||||
|
|
||||||
alter table CCM_CMS.CONTENT_SECTIONS
|
alter table CCM_CMS.CONTENT_SECTIONS
|
||||||
add constraint FK72jh0axiiru87i61mppvaiv96
|
add constraint FK72jh0axiiru87i61mppvaiv96
|
||||||
foreign key (OBJECT_ID)
|
foreign key (OBJECT_ID)
|
||||||
|
|
@ -1555,4 +1558,4 @@
|
||||||
alter table CCM_CMS.WORKFLOW_TASKS
|
alter table CCM_CMS.WORKFLOW_TASKS
|
||||||
add constraint FKge2x94m1y9tr7mk26ensyn674
|
add constraint FKge2x94m1y9tr7mk26ensyn674
|
||||||
foreign key (TASK_ID)
|
foreign key (TASK_ID)
|
||||||
references CCM_CORE.WORKFLOW_USER_TASKS;
|
references CCM_CORE.WORKFLOW_USER_TASKS;
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
contentsection.ui.admin.app_note=The properties for a Content Section are managed a special application:
|
||||||
|
contentsection.ui.admin.link_app=Go to Content Section application
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
contentsection.ui.admin.app_note=Die Verwaltung von Content Sections erfolgt \u00fcber eine eigene Application:
|
||||||
|
contentsection.ui.admin.link_app=Zur Content Section Applikation
|
||||||
|
|
@ -15,5 +15,5 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
# MA 02110-1301 USA
|
# MA 02110-1301 USA
|
||||||
|
|
||||||
application_title=Inhaltssektion
|
application_title=Content Section
|
||||||
application_desc=A content section is used to group similar content.
|
application_desc=A content section is used to group similar content.
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -32,6 +32,7 @@ public interface TreeNode {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain a unique ID representing the node
|
* Obtain a unique ID representing the node
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
Object getKey();
|
Object getKey();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,10 @@
|
||||||
package com.arsdigita.ui.admin.applications;
|
package com.arsdigita.ui.admin.applications;
|
||||||
|
|
||||||
import com.arsdigita.bebop.Form;
|
import com.arsdigita.bebop.Form;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
import com.arsdigita.bebop.PageState;
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.web.ApplicationRepository;
|
import org.libreccm.web.ApplicationRepository;
|
||||||
|
|
@ -49,10 +51,14 @@ public abstract class AbstractAppInstanceForm extends Form {
|
||||||
this.selectedAppInstance = selectedAppInstance;
|
this.selectedAppInstance = selectedAppInstance;
|
||||||
|
|
||||||
createWidgets();
|
createWidgets();
|
||||||
|
|
||||||
|
addProcessListener(createProcessListener());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void createWidgets();
|
protected abstract void createWidgets();
|
||||||
|
|
||||||
|
protected abstract FormProcessListener createProcessListener();
|
||||||
|
|
||||||
protected ApplicationType getSelectedAppType(final PageState state) {
|
protected ApplicationType getSelectedAppType(final PageState state) {
|
||||||
final org.libreccm.web.ApplicationManager appManager = CdiUtil
|
final org.libreccm.web.ApplicationManager appManager = CdiUtil
|
||||||
.createCdiUtil().findBean(org.libreccm.web.ApplicationManager.class);
|
.createCdiUtil().findBean(org.libreccm.web.ApplicationManager.class);
|
||||||
|
|
|
||||||
|
|
@ -19,17 +19,23 @@
|
||||||
package com.arsdigita.ui.admin.applications;
|
package com.arsdigita.ui.admin.applications;
|
||||||
|
|
||||||
import com.arsdigita.bebop.tree.TreeNode;
|
import com.arsdigita.bebop.tree.TreeNode;
|
||||||
|
import com.arsdigita.kernel.KernelConfig;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.configuration.ConfigurationManager;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.libreccm.web.CcmApplication;
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
public class ApplicationInstanceTreeNode implements TreeNode {
|
public class ApplicationInstanceTreeNode implements TreeNode {
|
||||||
|
|
||||||
|
protected static final String INSTANCE_NODE_KEY_PREFIX = "appinstance_";
|
||||||
|
|
||||||
private final CcmApplication application;
|
private final CcmApplication application;
|
||||||
|
|
||||||
public ApplicationInstanceTreeNode(final CcmApplication application) {
|
public ApplicationInstanceTreeNode(final CcmApplication application) {
|
||||||
|
|
@ -38,17 +44,38 @@ public class ApplicationInstanceTreeNode implements TreeNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getKey() {
|
public Object getKey() {
|
||||||
return application.getObjectId();
|
return String.format("%s%d",
|
||||||
|
INSTANCE_NODE_KEY_PREFIX,
|
||||||
|
application.getObjectId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getElement() {
|
public Object getElement() {
|
||||||
final GlobalizationHelper globalizationHelper = CdiUtil.createCdiUtil()
|
final GlobalizationHelper globalizationHelper = CdiUtil.createCdiUtil()
|
||||||
.findBean(GlobalizationHelper.class);
|
.findBean(GlobalizationHelper.class);
|
||||||
return application.getTitle().getValue(globalizationHelper
|
final ConfigurationManager confManager = CdiUtil.createCdiUtil()
|
||||||
.getNegotiatedLocale());
|
.findBean(ConfigurationManager.class);
|
||||||
|
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||||
|
KernelConfig.class);
|
||||||
|
final Locale defaultLocale = new Locale(kernelConfig
|
||||||
|
.getDefaultLanguage());
|
||||||
|
|
||||||
|
final String title;
|
||||||
|
if (application.getTitle().hasValue(globalizationHelper
|
||||||
|
.getNegotiatedLocale())) {
|
||||||
|
title = application.getTitle().getValue(globalizationHelper
|
||||||
|
.getNegotiatedLocale());
|
||||||
|
} else if (application.getTitle().hasValue(defaultLocale)) {
|
||||||
|
title = application.getTitle().getValue(defaultLocale);
|
||||||
|
} else if (application.getTitle().hasValue(Locale.getDefault())) {
|
||||||
|
title = application.getTitle().getValue(Locale.getDefault());
|
||||||
|
} else {
|
||||||
|
title = application.getPrimaryUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CcmApplication getApplication() {
|
public CcmApplication getApplication() {
|
||||||
return application;
|
return application;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@ import org.libreccm.web.ApplicationType;
|
||||||
*/
|
*/
|
||||||
public class ApplicationTypeTreeNode implements TreeNode {
|
public class ApplicationTypeTreeNode implements TreeNode {
|
||||||
|
|
||||||
|
protected final static String TYPE_NODE_KEY_PREFIX = "apptype_";
|
||||||
|
|
||||||
private final ApplicationType applicationType;
|
private final ApplicationType applicationType;
|
||||||
|
|
||||||
public ApplicationTypeTreeNode(final ApplicationType applicationType) {
|
public ApplicationTypeTreeNode(final ApplicationType applicationType) {
|
||||||
|
|
@ -37,7 +39,7 @@ public class ApplicationTypeTreeNode implements TreeNode {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object getKey() {
|
public Object getKey() {
|
||||||
return applicationType.name();
|
return String.join("", TYPE_NODE_KEY_PREFIX, applicationType.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ import com.arsdigita.toolbox.ui.LayoutPanel;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
import org.libreccm.cdi.utils.CdiUtil;
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.web.ApplicationRepository;
|
||||||
import org.libreccm.web.ApplicationType;
|
import org.libreccm.web.ApplicationType;
|
||||||
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
@ -81,15 +83,37 @@ public class ApplicationsTab extends LayoutPanel {
|
||||||
|
|
||||||
applicationTree = new Tree(new ApplicationTreeModelBuilder());
|
applicationTree = new Tree(new ApplicationTreeModelBuilder());
|
||||||
applicationTree.addChangeListener(e -> {
|
applicationTree.addChangeListener(e -> {
|
||||||
|
|
||||||
final PageState state = e.getPageState();
|
final PageState state = e.getPageState();
|
||||||
|
final String key = (String) applicationTree.getSelectedKey(state);
|
||||||
|
|
||||||
final Object key = applicationTree.getSelectedKey(state);
|
if (key.startsWith(
|
||||||
if (key instanceof Long) {
|
ApplicationInstanceTreeNode.INSTANCE_NODE_KEY_PREFIX)) {
|
||||||
|
|
||||||
|
//Instance is selected
|
||||||
|
final String instanceId = key.substring(
|
||||||
|
ApplicationInstanceTreeNode.INSTANCE_NODE_KEY_PREFIX
|
||||||
|
.length());
|
||||||
|
selectedAppInstance.setSelectedKey(state, instanceId);
|
||||||
|
|
||||||
|
final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
|
||||||
|
.findBean(ApplicationRepository.class);
|
||||||
|
final CcmApplication application = appRepo.findById(
|
||||||
|
Long.parseLong(instanceId));
|
||||||
|
if (application != null) {
|
||||||
|
selectedAppType.setSelectedKey(
|
||||||
|
state, application.getApplicationType());
|
||||||
|
}
|
||||||
|
|
||||||
|
showAppSettings(state);
|
||||||
|
|
||||||
|
} else if (key.startsWith(
|
||||||
|
ApplicationTypeTreeNode.TYPE_NODE_KEY_PREFIX)) {
|
||||||
|
|
||||||
} else if (key instanceof String) {
|
|
||||||
//ApplicationType node is selected
|
//ApplicationType node is selected
|
||||||
showManagementLinks(state);
|
showManagementLinks(state);
|
||||||
final String appTypeKey = (String) key;
|
final String appTypeKey = key.substring(
|
||||||
|
ApplicationTypeTreeNode.TYPE_NODE_KEY_PREFIX.length());
|
||||||
|
|
||||||
selectedAppType.setSelectedKey(state, appTypeKey);
|
selectedAppType.setSelectedKey(state, appTypeKey);
|
||||||
|
|
||||||
|
|
@ -196,6 +220,7 @@ public class ApplicationsTab extends LayoutPanel {
|
||||||
settingsPanes.put(appTypeName, settingsPane);
|
settingsPanes.put(appTypeName, settingsPane);
|
||||||
} else {
|
} else {
|
||||||
final AbstractAppInstanceForm instanceForm = createInstanceForm(
|
final AbstractAppInstanceForm instanceForm = createInstanceForm(
|
||||||
|
String.format("%s_instance_form", appTypeName),
|
||||||
instanceFormClass);
|
instanceFormClass);
|
||||||
managementPanel.add(instanceForm);
|
managementPanel.add(instanceForm);
|
||||||
instanceForms.put(appTypeName, instanceForm);
|
instanceForms.put(appTypeName, instanceForm);
|
||||||
|
|
@ -246,11 +271,17 @@ public class ApplicationsTab extends LayoutPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void showInstances(final PageState state) {
|
protected void showInstances(final PageState state) {
|
||||||
placeholderInstances.setVisible(state, true);
|
|
||||||
placeholderSingletonSettings.setVisible(state, false);
|
|
||||||
appInfo.setVisible(state, false);
|
|
||||||
hideAllInstanceForms(state);
|
hideAllInstanceForms(state);
|
||||||
hideAllSettingsPanes(state);
|
hideAllSettingsPanes(state);
|
||||||
|
|
||||||
|
//placeholderInstances.setVisible(state, true);
|
||||||
|
final String appType = selectedAppType.getSelectedKey(state);
|
||||||
|
if (instanceForms.containsKey(appType)) {
|
||||||
|
instanceForms.get(appType).setVisible(state, true);
|
||||||
|
}
|
||||||
|
placeholderSingletonSettings.setVisible(state, false);
|
||||||
|
appInfo.setVisible(state, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void hideInstances(final PageState state) {
|
protected void hideInstances(final PageState state) {
|
||||||
|
|
@ -273,6 +304,31 @@ public class ApplicationsTab extends LayoutPanel {
|
||||||
appInfo.setVisible(state, false);
|
appInfo.setVisible(state, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void showAppSettings(final PageState state) {
|
||||||
|
hideAllInstanceForms(state);
|
||||||
|
hideAllSettingsPanes(state);
|
||||||
|
hideManagementLinks(state);
|
||||||
|
placeholderInstances.setVisible(state, false);
|
||||||
|
placeholderSingletonSettings.setVisible(state, false);
|
||||||
|
|
||||||
|
if (settingsPanes.containsKey(selectedAppType.getSelectedKey(state))) {
|
||||||
|
settingsPanes.get(selectedAppType.getSelectedKey(state)).setVisible(
|
||||||
|
state, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// final String appId = selectedAppInstance.getSelectedKey(state);
|
||||||
|
// final ApplicationRepository appRepo = CdiUtil.createCdiUtil().findBean(
|
||||||
|
// ApplicationRepository.class);
|
||||||
|
// final CcmApplication application = appRepo.findById(Long
|
||||||
|
// .parseLong(appId));
|
||||||
|
// if (application != null) {
|
||||||
|
// final String appType = application.getApplicationType();
|
||||||
|
// if (settingsPanes.containsKey(appType)) {
|
||||||
|
// settingsPanes.get(appType).setVisible(state, true);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
protected void hideSingletonAppSettings(final PageState state) {
|
protected void hideSingletonAppSettings(final PageState state) {
|
||||||
placeholderSingletonSettings.setVisible(state, false);
|
placeholderSingletonSettings.setVisible(state, false);
|
||||||
hideAllInstanceForms(state);
|
hideAllInstanceForms(state);
|
||||||
|
|
@ -306,15 +362,18 @@ public class ApplicationsTab extends LayoutPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private AbstractAppInstanceForm createInstanceForm(
|
private AbstractAppInstanceForm createInstanceForm(
|
||||||
Class<? extends AbstractAppInstanceForm> instanceFormClass) {
|
final String name,
|
||||||
|
final Class<? extends AbstractAppInstanceForm> instanceFormClass) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final Constructor<? extends AbstractAppInstanceForm> constructor
|
final Constructor<? extends AbstractAppInstanceForm> constructor
|
||||||
= instanceFormClass
|
= instanceFormClass
|
||||||
.getConstructor(ParameterSingleSelectionModel.class,
|
.getConstructor(String.class,
|
||||||
|
ParameterSingleSelectionModel.class,
|
||||||
ParameterSingleSelectionModel.class);
|
ParameterSingleSelectionModel.class);
|
||||||
|
|
||||||
return constructor.newInstance(selectedAppType,
|
return constructor.newInstance(name,
|
||||||
|
selectedAppType,
|
||||||
selectedAppInstance);
|
selectedAppInstance);
|
||||||
} catch (NoSuchMethodException |
|
} catch (NoSuchMethodException |
|
||||||
SecurityException |
|
SecurityException |
|
||||||
|
|
|
||||||
|
|
@ -18,30 +18,211 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.ui.admin.applications;
|
package com.arsdigita.ui.admin.applications;
|
||||||
|
|
||||||
|
import com.arsdigita.bebop.Form;
|
||||||
|
import com.arsdigita.bebop.FormData;
|
||||||
|
import com.arsdigita.bebop.FormProcessException;
|
||||||
|
import com.arsdigita.bebop.Label;
|
||||||
|
import com.arsdigita.bebop.PageState;
|
||||||
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
import com.arsdigita.bebop.ParameterSingleSelectionModel;
|
||||||
|
import com.arsdigita.bebop.SaveCancelSection;
|
||||||
|
import com.arsdigita.bebop.Table;
|
||||||
import com.arsdigita.bebop.Text;
|
import com.arsdigita.bebop.Text;
|
||||||
|
import com.arsdigita.bebop.event.FormProcessListener;
|
||||||
|
import com.arsdigita.bebop.event.FormSectionEvent;
|
||||||
|
import com.arsdigita.bebop.form.TextField;
|
||||||
|
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
|
||||||
|
import com.arsdigita.bebop.table.TableColumn;
|
||||||
|
import com.arsdigita.bebop.table.TableColumnModel;
|
||||||
|
import com.arsdigita.bebop.table.TableModel;
|
||||||
|
import com.arsdigita.bebop.table.TableModelBuilder;
|
||||||
|
import com.arsdigita.globalization.GlobalizedMessage;
|
||||||
|
import com.arsdigita.util.LockableImpl;
|
||||||
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
|
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
|
import org.libreccm.web.ApplicationCreateException;
|
||||||
|
import org.libreccm.web.ApplicationRepository;
|
||||||
|
import org.libreccm.web.ApplicationType;
|
||||||
|
import org.libreccm.web.CcmApplication;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import static com.arsdigita.ui.admin.AdminUiConstants.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||||
*/
|
*/
|
||||||
public class DefaultApplicationInstanceForm
|
public class DefaultApplicationInstanceForm extends AbstractAppInstanceForm {
|
||||||
extends AbstractAppInstanceForm {
|
|
||||||
|
private static final int COL_PRIMARY_URL = 0;
|
||||||
|
|
||||||
|
private SaveCancelSection saveCancelSection;
|
||||||
|
|
||||||
public DefaultApplicationInstanceForm(
|
public DefaultApplicationInstanceForm(
|
||||||
final String name,
|
final String name,
|
||||||
final ParameterSingleSelectionModel<String> selectedAppType,
|
final ParameterSingleSelectionModel<String> selectedAppType,
|
||||||
final ParameterSingleSelectionModel<String> selectedAppInstance) {
|
final ParameterSingleSelectionModel<String> selectedAppInstance) {
|
||||||
|
|
||||||
super(name, selectedAppType, selectedAppInstance);
|
super(name, selectedAppType, selectedAppInstance);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createWidgets() {
|
protected void createWidgets() {
|
||||||
add(new Text("placeholder"));
|
|
||||||
|
addInstanceTable();
|
||||||
|
|
||||||
|
final Label newInstanceFormHeading = new Label(new GlobalizedMessage(
|
||||||
|
"ui.admin.applications.new_instance_form.title", ADMIN_BUNDLE));
|
||||||
|
newInstanceFormHeading.setClassAttr("heading");
|
||||||
|
add(newInstanceFormHeading);
|
||||||
|
|
||||||
|
final TextField primaryUrl = new TextField("new_instance_primary_url");
|
||||||
|
primaryUrl.setLabel(new GlobalizedMessage(
|
||||||
|
"ui.admin.applications.new_instance.primary_url", ADMIN_BUNDLE));
|
||||||
|
primaryUrl.addValidationListener(new NotEmptyValidationListener(
|
||||||
|
new GlobalizedMessage(
|
||||||
|
"ui.admin.applications.new_instance.primary_url.error.not_empty",
|
||||||
|
ADMIN_BUNDLE)));
|
||||||
|
add(primaryUrl);
|
||||||
|
|
||||||
|
saveCancelSection = new SaveCancelSection();
|
||||||
|
add(saveCancelSection);
|
||||||
|
|
||||||
|
//add(new Text("placeholder"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected SaveCancelSection getSaveCancelSection() {
|
||||||
|
return saveCancelSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void addInstanceTable() {
|
||||||
|
final Label tableHeading = new Label(new GlobalizedMessage(
|
||||||
|
"ui.admin.applications.instance_table.heading", ADMIN_BUNDLE));
|
||||||
|
tableHeading.setClassAttr("heading");
|
||||||
|
add(tableHeading);
|
||||||
|
|
||||||
|
final Table instanceTable = new Table();
|
||||||
|
final TableColumnModel colModel = instanceTable.getColumnModel();
|
||||||
|
colModel.add(new TableColumn(
|
||||||
|
COL_PRIMARY_URL,
|
||||||
|
new Label(new GlobalizedMessage(
|
||||||
|
"ui.admin.applications.instances_table.col_primary_url",
|
||||||
|
ADMIN_BUNDLE))));
|
||||||
|
instanceTable.setModelBuilder(new InstanceTableModelBuilder(this));
|
||||||
|
add(instanceTable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
protected FormProcessListener createProcessListener() {
|
||||||
|
return (FormSectionEvent e) -> {
|
||||||
|
final PageState state = e.getPageState();
|
||||||
|
if (saveCancelSection.getSaveButton().isSelected(state)) {
|
||||||
|
final FormData data = e.getFormData();
|
||||||
|
|
||||||
|
final String primaryUrlData = data.getString(
|
||||||
|
"new_instance_primary_url");
|
||||||
|
|
||||||
|
final org.libreccm.web.ApplicationManager appManager = CdiUtil
|
||||||
|
.createCdiUtil().findBean(
|
||||||
|
org.libreccm.web.ApplicationManager.class);
|
||||||
|
try {
|
||||||
|
appManager.createInstance(
|
||||||
|
getSelectedAppType(state),
|
||||||
|
primaryUrlData,
|
||||||
|
(Class<CcmApplication>) getSelectedAppType(state)
|
||||||
|
.applicationClass());
|
||||||
|
} catch (ApplicationCreateException ex) {
|
||||||
|
throw new UncheckedWrapperException(
|
||||||
|
"Failed to create new application instance.", ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
final Class<?> clazz = getSelectedAppType(state)
|
||||||
|
.applicationClass();
|
||||||
|
if (!clazz.isAssignableFrom(CcmApplication.class)) {
|
||||||
|
throw new UncheckedWrapperException(String.format(
|
||||||
|
"Application class \"%s\" is not a sub class of "
|
||||||
|
+ "class \"%s\". Something is wrong...",
|
||||||
|
clazz.getName(), CcmApplication.class.getName()));
|
||||||
|
}
|
||||||
|
final CcmApplication application;
|
||||||
|
try {
|
||||||
|
application = (CcmApplication) clazz.newInstance();
|
||||||
|
} catch (InstantiationException | IllegalAccessException ex) {
|
||||||
|
throw new UncheckedWrapperException(
|
||||||
|
String.format("Failed to create object of "
|
||||||
|
+ "class \"%s\".",
|
||||||
|
clazz.getName()),
|
||||||
|
ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
application.setPrimaryUrl(primaryUrlData);
|
||||||
|
|
||||||
|
final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
|
||||||
|
.findBean(ApplicationRepository.class);
|
||||||
|
appRepo.save(application);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private class InstanceTableModelBuilder extends LockableImpl
|
||||||
|
implements TableModelBuilder {
|
||||||
|
|
||||||
|
private final AbstractAppInstanceForm instanceForm;
|
||||||
|
|
||||||
|
public InstanceTableModelBuilder(
|
||||||
|
final AbstractAppInstanceForm instanceForm) {
|
||||||
|
this.instanceForm = instanceForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TableModel makeModel(final Table table, final PageState state) {
|
||||||
|
return new InstanceTableModel(instanceForm.getSelectedAppType(state));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private class InstanceTableModel implements TableModel {
|
||||||
|
|
||||||
|
private final List<CcmApplication> instances;
|
||||||
|
private int index = -1;
|
||||||
|
|
||||||
|
public InstanceTableModel(final ApplicationType appType) {
|
||||||
|
final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
|
||||||
|
.findBean(ApplicationRepository.class);
|
||||||
|
instances = appRepo.findByType(appType.name());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean nextRow() {
|
||||||
|
index++;
|
||||||
|
return index < instances.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getElementAt(final int columnIndex) {
|
||||||
|
switch (columnIndex) {
|
||||||
|
case COL_PRIMARY_URL:
|
||||||
|
return instances.get(index).getPrimaryUrl();
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Illegal columnIndex");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getKeyAt(final int columnIndex) {
|
||||||
|
return Long.toString(instances.get(index).getObjectId());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,14 +54,14 @@ import javax.sql.DataSource;
|
||||||
public class CcmIntegrator implements Integrator {
|
public class CcmIntegrator implements Integrator {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger(
|
private static final Logger LOGGER = LogManager.getLogger(
|
||||||
CcmIntegrator.class);
|
CcmIntegrator.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Name of the property which is used to retrieve the data source in use
|
* Name of the property which is used to retrieve the data source in use
|
||||||
* from Hibernate.
|
* from Hibernate.
|
||||||
*/
|
*/
|
||||||
private static final String DATASOURCE_PROPERTY
|
private static final String DATASOURCE_PROPERTY
|
||||||
= "hibernate.connection.datasource";
|
= "hibernate.connection.datasource";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service loader containing all modules. Initialised by the
|
* Service loader containing all modules. Initialised by the
|
||||||
|
|
@ -94,7 +94,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
try {
|
try {
|
||||||
//Create dependency tree for the modules
|
//Create dependency tree for the modules
|
||||||
final DependencyTreeManager treeManager
|
final DependencyTreeManager treeManager
|
||||||
= new DependencyTreeManager();
|
= new DependencyTreeManager();
|
||||||
final List<TreeNode> tree = treeManager.generateTree(modules);
|
final List<TreeNode> tree = treeManager.generateTree(modules);
|
||||||
final List<TreeNode> orderedNodes = treeManager.orderModules(tree);
|
final List<TreeNode> orderedNodes = treeManager.orderModules(tree);
|
||||||
|
|
||||||
|
|
@ -110,7 +110,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
// //Get DataSource and Connection from the sessionFactory of
|
// //Get DataSource and Connection from the sessionFactory of
|
||||||
// //Hibernate.
|
// //Hibernate.
|
||||||
final DataSource dataSource = (DataSource) sessionFactory.
|
final DataSource dataSource = (DataSource) sessionFactory.
|
||||||
getProperties().get(DATASOURCE_PROPERTY);
|
getProperties().get(DATASOURCE_PROPERTY);
|
||||||
if (dataSource == null) {
|
if (dataSource == null) {
|
||||||
throw new IllegalStateException("No data source available.");
|
throw new IllegalStateException("No data source available.");
|
||||||
}
|
}
|
||||||
|
|
@ -121,7 +121,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
final Flyway flyway = new Flyway();
|
final Flyway flyway = new Flyway();
|
||||||
flyway.setDataSource(dataSource);
|
flyway.setDataSource(dataSource);
|
||||||
final StringBuffer buffer = new StringBuffer(
|
final StringBuffer buffer = new StringBuffer(
|
||||||
"db/migrations/org/libreccm/base");
|
"db/migrations/org/libreccm/base");
|
||||||
appendDbLocation(buffer, connection);
|
appendDbLocation(buffer, connection);
|
||||||
flyway.setLocations(buffer.toString());
|
flyway.setLocations(buffer.toString());
|
||||||
flyway.migrate();
|
flyway.migrate();
|
||||||
|
|
@ -199,15 +199,16 @@ public class CcmIntegrator implements Integrator {
|
||||||
* If the database is not supported an {@link IntegrationException} will be
|
* If the database is not supported an {@link IntegrationException} will be
|
||||||
* thrown.
|
* thrown.
|
||||||
*
|
*
|
||||||
* @param buffer Buffer for the location string.
|
* @param buffer Buffer for the location string.
|
||||||
* @param connection The JDBC connection object.
|
* @param connection The JDBC connection object.
|
||||||
*
|
*
|
||||||
* @throws SQLException If an error occurs while accessing the database.
|
* @throws SQLException If an error occurs while accessing the
|
||||||
|
* database.
|
||||||
* @throws IntegrationException If the database is not supported yet.
|
* @throws IntegrationException If the database is not supported yet.
|
||||||
*/
|
*/
|
||||||
private void appendDbLocation(final StringBuffer buffer,
|
private void appendDbLocation(final StringBuffer buffer,
|
||||||
final Connection connection)
|
final Connection connection)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
|
||||||
switch (connection.getMetaData().getDatabaseProductName()) {
|
switch (connection.getMetaData().getDatabaseProductName()) {
|
||||||
case "H2":
|
case "H2":
|
||||||
|
|
@ -218,9 +219,9 @@ public class CcmIntegrator implements Integrator {
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IntegrationException(String.format(
|
throw new IntegrationException(String.format(
|
||||||
"Integration failed. Database \"%s\" is not supported yet.",
|
"Integration failed. Database \"%s\" is not supported yet.",
|
||||||
connection.getMetaData().
|
connection.getMetaData().
|
||||||
getDatabaseProductName()));
|
getDatabaseProductName()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -236,10 +237,10 @@ public class CcmIntegrator implements Integrator {
|
||||||
*/
|
*/
|
||||||
private String getLocation(final ModuleInfo moduleInfo,
|
private String getLocation(final ModuleInfo moduleInfo,
|
||||||
final Connection connection)
|
final Connection connection)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
|
|
||||||
final StringBuffer buffer = new StringBuffer(
|
final StringBuffer buffer = new StringBuffer(
|
||||||
"classpath:/db/migrations/");
|
"classpath:/db/migrations/");
|
||||||
buffer.append(moduleInfo.getModuleDataPackage());
|
buffer.append(moduleInfo.getModuleDataPackage());
|
||||||
appendDbLocation(buffer, connection);
|
appendDbLocation(buffer, connection);
|
||||||
|
|
||||||
|
|
@ -249,7 +250,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
/**
|
/**
|
||||||
* Helper method for executing the migrations for a module.
|
* Helper method for executing the migrations for a module.
|
||||||
*
|
*
|
||||||
* @param module The module for which the migrations are executed.
|
* @param module The module for which the migrations are executed.
|
||||||
* @param dataSource The JDBC data source for connecting to the database.
|
* @param dataSource The JDBC data source for connecting to the database.
|
||||||
*
|
*
|
||||||
* @throws SQLException If an error occurs while applying the migrations.
|
* @throws SQLException If an error occurs while applying the migrations.
|
||||||
|
|
@ -269,9 +270,8 @@ public class CcmIntegrator implements Integrator {
|
||||||
//Set schema correctly for the different databases. Necessary because
|
//Set schema correctly for the different databases. Necessary because
|
||||||
//different RDBMS handle case different.
|
//different RDBMS handle case different.
|
||||||
if ("H2".equals(connection.getMetaData().getDatabaseProductName())) {
|
if ("H2".equals(connection.getMetaData().getDatabaseProductName())) {
|
||||||
flyway
|
flyway.setSchemas(getSchemaName(moduleInfo).toUpperCase(
|
||||||
.setSchemas(getSchemaName(moduleInfo).toUpperCase(
|
Locale.ROOT));
|
||||||
Locale.ROOT));
|
|
||||||
} else {
|
} else {
|
||||||
flyway.setSchemas(getSchemaName(moduleInfo));
|
flyway.setSchemas(getSchemaName(moduleInfo));
|
||||||
}
|
}
|
||||||
|
|
@ -303,11 +303,11 @@ public class CcmIntegrator implements Integrator {
|
||||||
if (newModule) {
|
if (newModule) {
|
||||||
try (Statement statement = connection.createStatement()) {
|
try (Statement statement = connection.createStatement()) {
|
||||||
statement.execute(String.format(
|
statement.execute(String.format(
|
||||||
"INSERT INTO ccm_core.installed_modules "
|
"INSERT INTO ccm_core.installed_modules "
|
||||||
+ "(module_id, module_class_name, status) "
|
+ "(module_id, module_class_name, status) "
|
||||||
+ "VALUES (%d, '%s', 'NEW')",
|
+ "VALUES (%d, '%s', 'NEW')",
|
||||||
module.getName().hashCode(),
|
module.getName().hashCode(),
|
||||||
module.getName()));
|
module.getName()));
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new IntegrationException("Failed to integrate.", ex);
|
throw new IntegrationException("Failed to integrate.", ex);
|
||||||
}
|
}
|
||||||
|
|
@ -333,7 +333,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
|
|
||||||
//Get JDBC connection
|
//Get JDBC connection
|
||||||
final DataSource dataSource = (DataSource) sessionFactory
|
final DataSource dataSource = (DataSource) sessionFactory
|
||||||
.getProperties().get(DATASOURCE_PROPERTY);
|
.getProperties().get(DATASOURCE_PROPERTY);
|
||||||
connection = dataSource.getConnection();
|
connection = dataSource.getConnection();
|
||||||
System.out.println("checking modules...");
|
System.out.println("checking modules...");
|
||||||
LOGGER.info("Checking modules...");
|
LOGGER.info("Checking modules...");
|
||||||
|
|
@ -344,10 +344,10 @@ public class CcmIntegrator implements Integrator {
|
||||||
try (Statement query = connection.createStatement();
|
try (Statement query = connection.createStatement();
|
||||||
//Check status of each module
|
//Check status of each module
|
||||||
ResultSet result = query.executeQuery(
|
ResultSet result = query.executeQuery(
|
||||||
String.format("SELECT module_class_name, status "
|
String.format("SELECT module_class_name, status "
|
||||||
+ "FROM ccm_core.installed_modules "
|
+ "FROM ccm_core.installed_modules "
|
||||||
+ "WHERE module_class_name = '%s'",
|
+ "WHERE module_class_name = '%s'",
|
||||||
module.getClass().getName()))) {
|
module.getClass().getName()))) {
|
||||||
|
|
||||||
System.out.printf("Checking status of module %s...%n",
|
System.out.printf("Checking status of module %s...%n",
|
||||||
module.getClass().getName());
|
module.getClass().getName());
|
||||||
|
|
@ -355,7 +355,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
//If there modules marked for uninstall remove the schema
|
//If there modules marked for uninstall remove the schema
|
||||||
//of the module from the database.
|
//of the module from the database.
|
||||||
if (result.next() && ModuleStatus.UNINSTALL.toString()
|
if (result.next() && ModuleStatus.UNINSTALL.toString()
|
||||||
.equals(result.getString("status"))) {
|
.equals(result.getString("status"))) {
|
||||||
uninstallModule(connection,
|
uninstallModule(connection,
|
||||||
dataSource,
|
dataSource,
|
||||||
module,
|
module,
|
||||||
|
|
@ -389,7 +389,7 @@ public class CcmIntegrator implements Integrator {
|
||||||
final DataSource dataSource,
|
final DataSource dataSource,
|
||||||
final CcmModule module,
|
final CcmModule module,
|
||||||
final ModuleInfo moduleInfo)
|
final ModuleInfo moduleInfo)
|
||||||
throws SQLException {
|
throws SQLException {
|
||||||
LOGGER.info("Removing schema for module %s...",
|
LOGGER.info("Removing schema for module %s...",
|
||||||
module.getClass().getName());
|
module.getClass().getName());
|
||||||
final Flyway flyway = new Flyway();
|
final Flyway flyway = new Flyway();
|
||||||
|
|
@ -402,16 +402,16 @@ public class CcmIntegrator implements Integrator {
|
||||||
|
|
||||||
//Delete the module from the installed modules table.
|
//Delete the module from the installed modules table.
|
||||||
try (final Statement statement = connection
|
try (final Statement statement = connection
|
||||||
.createStatement()) {
|
.createStatement()) {
|
||||||
statement.addBatch(String.format(
|
statement.addBatch(String.format(
|
||||||
"DELETE FROM ccm_core.installed_modules "
|
"DELETE FROM ccm_core.installed_modules "
|
||||||
+ "WHERE module_class_name = '%s'",
|
+ "WHERE module_class_name = '%s'",
|
||||||
module.getClass().getName()));
|
module.getClass().getName()));
|
||||||
statement.executeBatch();
|
statement.executeBatch();
|
||||||
LOGGER.info("Done.");
|
LOGGER.info("Done.");
|
||||||
} catch (SQLException ex) {
|
} catch (SQLException ex) {
|
||||||
throw new IntegrationException(
|
throw new IntegrationException(
|
||||||
"Failed to desintegrate", ex);
|
"Failed to desintegrate", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ public class ApplicationRoleSetup {
|
||||||
final Permission permission = createPermission(role, privilege);
|
final Permission permission = createPermission(role, privilege);
|
||||||
permission.setObject(ccmObject);
|
permission.setObject(ccmObject);
|
||||||
|
|
||||||
entityManager.persist(privilege);
|
entityManager.persist(permission);
|
||||||
entityManager.merge(role);
|
entityManager.merge(role);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -126,6 +126,10 @@ public class SystemUsersSetup {
|
||||||
final Properties properties = new Properties();
|
final Properties properties = new Properties();
|
||||||
if (inputStream == null) {
|
if (inputStream == null) {
|
||||||
LOGGER.warn("No integration properties available.");
|
LOGGER.warn("No integration properties available.");
|
||||||
|
LOGGER.warn("Using empty integration properties");
|
||||||
|
return new Properties();
|
||||||
|
} else {
|
||||||
|
LOGGER.info("Loading integration.properties...");
|
||||||
properties.load(inputStream);
|
properties.load(inputStream);
|
||||||
}
|
}
|
||||||
return properties;
|
return properties;
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,9 @@ public abstract class AbstractCcmApplicationSetup {
|
||||||
try (InputStream inputStream = getClass().getResourceAsStream(
|
try (InputStream inputStream = getClass().getResourceAsStream(
|
||||||
CoreConstants.INTEGRATION_PROPS)) {
|
CoreConstants.INTEGRATION_PROPS)) {
|
||||||
final Properties properties = new Properties();
|
final Properties properties = new Properties();
|
||||||
properties.load(inputStream);
|
if (inputStream != null) {
|
||||||
|
properties.load(inputStream);
|
||||||
|
}
|
||||||
return properties;
|
return properties;
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
LOGGER.warn(
|
LOGGER.warn(
|
||||||
|
|
@ -75,26 +77,26 @@ public abstract class AbstractCcmApplicationSetup {
|
||||||
appRoleSetup.grantPermission(role, privilege);
|
appRoleSetup.grantPermission(role, privilege);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void grantPermission(final Role role,
|
public void grantPermission(final Role role,
|
||||||
final String privilege,
|
final String privilege,
|
||||||
final CcmObject ccmObject) {
|
final CcmObject ccmObject) {
|
||||||
appRoleSetup.grantPermission(role, privilege, ccmObject);
|
appRoleSetup.grantPermission(role, privilege, ccmObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void grantPermissions(final Role role, final String... privileges) {
|
public void grantPermissions(final Role role, final String... privileges) {
|
||||||
for(final String privilege : privileges) {
|
for (final String privilege : privileges) {
|
||||||
grantPermission(role, privilege);
|
grantPermission(role, privilege);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void grantPermissions(final Role role,
|
public void grantPermissions(final Role role,
|
||||||
final CcmObject ccmObject,
|
final CcmObject ccmObject,
|
||||||
final String... privileges) {
|
final String... privileges) {
|
||||||
for(final String privilege : privileges) {
|
for (final String privilege : privileges) {
|
||||||
grantPermission(role, privilege, ccmObject);
|
grantPermission(role, privilege, ccmObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void setup();
|
public abstract void setup();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ package org.libreccm.web;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.apache.logging.log4j.util.Strings;
|
import org.apache.logging.log4j.util.Strings;
|
||||||
|
import org.libreccm.cdi.utils.CdiUtil;
|
||||||
import org.libreccm.core.CoreConstants;
|
import org.libreccm.core.CoreConstants;
|
||||||
import org.libreccm.l10n.GlobalizationHelper;
|
import org.libreccm.l10n.GlobalizationHelper;
|
||||||
import org.libreccm.modules.CcmModule;
|
import org.libreccm.modules.CcmModule;
|
||||||
|
|
@ -37,7 +38,6 @@ import java.util.ResourceBundle;
|
||||||
import java.util.ServiceLoader;
|
import java.util.ServiceLoader;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import javax.ejb.TransactionAttribute;
|
|
||||||
import javax.enterprise.context.ApplicationScoped;
|
import javax.enterprise.context.ApplicationScoped;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
|
|
@ -92,19 +92,14 @@ public class ApplicationManager {
|
||||||
final ApplicationType type,
|
final ApplicationType type,
|
||||||
final String path,
|
final String path,
|
||||||
final Class<T> applicationClass) throws ApplicationCreateException {
|
final Class<T> applicationClass) throws ApplicationCreateException {
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
final ApplicationCreator<T> creator = CdiUtil.createCdiUtil().findBean(
|
||||||
|
type.creator());
|
||||||
|
final T application = creator.createInstance(path, type);
|
||||||
|
|
||||||
try {
|
entityManager.persist(application);
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
final ApplicationCreator<T> creator = type.creator().newInstance();
|
|
||||||
final T application = creator.createInstance(path, type);
|
|
||||||
|
|
||||||
entityManager.persist(application);
|
return application;
|
||||||
|
|
||||||
return application;
|
|
||||||
} catch (InstantiationException | IllegalAccessException ex) {
|
|
||||||
throw new ApplicationCreateException("Failed to create application.",
|
|
||||||
ex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@AuthorizationRequired
|
@AuthorizationRequired
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@
|
||||||
*/
|
*/
|
||||||
package org.libreccm.web;
|
package org.libreccm.web;
|
||||||
|
|
||||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
|
||||||
import org.libreccm.core.AbstractEntityRepository;
|
import org.libreccm.core.AbstractEntityRepository;
|
||||||
import org.libreccm.core.CoreConstants;
|
import org.libreccm.core.CoreConstants;
|
||||||
import org.libreccm.security.AuthorizationRequired;
|
import org.libreccm.security.AuthorizationRequired;
|
||||||
|
|
@ -57,6 +56,7 @@ public class ApplicationRepository
|
||||||
* @return The application mounted at {@code path} or {@code null} if there
|
* @return The application mounted at {@code path} or {@code null} if there
|
||||||
* is no application mounted at that {@code path}.
|
* is no application mounted at that {@code path}.
|
||||||
*/
|
*/
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public CcmApplication retrieveApplicationForPath(final String path) {
|
public CcmApplication retrieveApplicationForPath(final String path) {
|
||||||
final TypedQuery<CcmApplication> query = getEntityManager()
|
final TypedQuery<CcmApplication> query = getEntityManager()
|
||||||
.createNamedQuery("CcmApplication.retrieveApplicationForPath",
|
.createNamedQuery("CcmApplication.retrieveApplicationForPath",
|
||||||
|
|
@ -77,6 +77,7 @@ public class ApplicationRepository
|
||||||
* @return A list of the installed applications of the provided
|
* @return A list of the installed applications of the provided
|
||||||
* {@code type}.
|
* {@code type}.
|
||||||
*/
|
*/
|
||||||
|
@Transactional(Transactional.TxType.REQUIRED)
|
||||||
public List<CcmApplication> findByType(final String type) {
|
public List<CcmApplication> findByType(final String type) {
|
||||||
final TypedQuery<CcmApplication> query = getEntityManager()
|
final TypedQuery<CcmApplication> query = getEntityManager()
|
||||||
.createNamedQuery("CcmApplication.Application.findByType",
|
.createNamedQuery("CcmApplication.Application.findByType",
|
||||||
|
|
|
||||||
|
|
@ -540,3 +540,9 @@ ui.admin.applications.type.property_sheet.servlet_path=Servlet path
|
||||||
ui.admin.applications.info.heading=About the application type
|
ui.admin.applications.info.heading=About the application type
|
||||||
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
||||||
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
||||||
|
ui.admin.applications.instances.link=Instances
|
||||||
|
ui.admin.applications.instances_table.col_primary_url=Primary URL
|
||||||
|
ui.admin.applications.new_instance_form.title=Create new instance
|
||||||
|
ui.admin.applications.instance_table.heading=Instances
|
||||||
|
ui.admin.applications.new_instance.primary_url=Primary URL
|
||||||
|
ui.admin.applications.new_instance.primary_url.error.not_empty=The primary URL of an application instance can't be empty.
|
||||||
|
|
|
||||||
|
|
@ -543,3 +543,10 @@ ui.admin.applications.type.property_sheet.servlet_path=Servlet-Pfad
|
||||||
ui.admin.applications.info.heading=\u00dcber den Applikationstyp
|
ui.admin.applications.info.heading=\u00dcber den Applikationstyp
|
||||||
ui.admin.applications.settings.singleton.no_setting_for=Keine Einstellungen f\u00fcr Applikation {0} verf\u00fcbar.
|
ui.admin.applications.settings.singleton.no_setting_for=Keine Einstellungen f\u00fcr Applikation {0} verf\u00fcbar.
|
||||||
ui.admin.applications.settings.instance.no_setting_for=Keine Einstellungen f\u00fcr Instanzen des Typs {0} verf\u00fcgbar.
|
ui.admin.applications.settings.instance.no_setting_for=Keine Einstellungen f\u00fcr Instanzen des Typs {0} verf\u00fcgbar.
|
||||||
|
ui.admin.applications.instances.link=Instanzen
|
||||||
|
ui.admin.applications.instances_table.col_primary_url=Prim\u00e4re URL
|
||||||
|
#Create new instance
|
||||||
|
ui.admin.applications.new_instance_form.title=Neue Instanz anlegen
|
||||||
|
ui.admin.applications.instance_table.heading=Instanzen
|
||||||
|
ui.admin.applications.new_instance.primary_url=Prim\u00e4re URL
|
||||||
|
ui.admin.applications.new_instance.primary_url.error.not_empty=Die prim\u00e4re URL einer Applikations-Instanz kann nicht leer sein.
|
||||||
|
|
|
||||||
|
|
@ -536,3 +536,10 @@ ui.admin.applications.type.property_sheet.servlet_path=Servlet path
|
||||||
ui.admin.applications.info.heading=About the application type
|
ui.admin.applications.info.heading=About the application type
|
||||||
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
||||||
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
||||||
|
ui.admin.applications.instances.link=Instances
|
||||||
|
ui.admin.applications.instances_table.col_primary_url=Primary URL
|
||||||
|
#Create new instance
|
||||||
|
ui.admin.applications.new_instance_form.title=Create new instance
|
||||||
|
ui.admin.applications.instance_table.heading=Instances
|
||||||
|
ui.admin.applications.new_instance.primary_url=Primary URL
|
||||||
|
ui.admin.applications.new_instance.primary_url.error.not_empty=The primary URL of an application instance can't be empty.
|
||||||
|
|
|
||||||
|
|
@ -527,3 +527,10 @@ ui.admin.applications.type.property_sheet.servlet_path=Servlet path
|
||||||
ui.admin.applications.info.heading=About the application type
|
ui.admin.applications.info.heading=About the application type
|
||||||
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
ui.admin.applications.settings.singleton.no_setting_for=No settings for application {0} available.
|
||||||
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
ui.admin.applications.settings.instance.no_setting_for=No settings for instance of application type {0} available.
|
||||||
|
ui.admin.applications.instances.link=Instances
|
||||||
|
ui.admin.applications.instances_table.col_primary_url=Primary URL
|
||||||
|
#Create new instance
|
||||||
|
ui.admin.applications.new_instance_form.title=Create new instance
|
||||||
|
ui.admin.applications.instance_table.heading=Instances
|
||||||
|
ui.admin.applications.new_instance.primary_url=Primary URL
|
||||||
|
ui.admin.applications.new_instance.primary_url.error.not_empty=The primary URL of an application instance can't be empty.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue