Compare commits

...

19 Commits

Author SHA1 Message Date
Jens Pelzetter 2f31c5b3a8 Several bugfixes
Former-commit-id: 341404fca4
2020-05-24 16:33:45 +02:00
Jens Pelzetter 179ca1fc5e Updated user entity, don't use JSONB for primary email address
Former-commit-id: facba35003
2020-05-24 14:36:20 +02:00
Jens Pelzetter 1fc48eb39c Don't use embedded entity for email address in User class
Former-commit-id: 87dea3cebd
2020-05-24 14:00:23 +02:00
Jens Pelzetter 8956a5d9f5 Fixed typos in test datasets
Former-commit-id: 26c8ce9491
2020-05-24 10:42:35 +02:00
Jens Pelzetter ede3d639f5 Fixed typo in dataset for ShiroTest (and others)
Former-commit-id: 3b7c7909e0
2020-05-24 10:18:56 +02:00
Jens Pelzetter 132df428ed fixed typos in test datasets for GroupManagerTest
Former-commit-id: 8085699290
2020-05-24 10:04:07 +02:00
Jens Pelzetter c49dc8e31a fixed dbunit jsonb type
Former-commit-id: 8842aa66dc
2020-05-23 20:43:45 +02:00
Jens Pelzetter 12cc5f5ea7 Fixed test failures
Former-commit-id: 02fa324249
2020-05-23 20:01:30 +02:00
Jens Pelzetter 87172c1f27 Use JSONB column to store email addresses
Former-commit-id: 98d01b978f
2020-05-23 19:22:34 +02:00
Jens Pelzetter 047aaf0645 Missing dependency in deployment for ShiroTest fixed
Former-commit-id: ab7cea8227
2020-05-23 17:08:02 +02:00
Jens Pelzetter 85fabbf29e Missing classes for integration tests added to deployment
Former-commit-id: 0b50f2508e
2020-05-23 16:43:27 +02:00
Jens Pelzetter bbe69cbd2f Reducing boilerplate code for JSON mapping UserTypes
Former-commit-id: 1f970809b3
2020-05-23 16:30:01 +02:00
Jens Pelzetter 05b722e61c Use try with resources for readers
Former-commit-id: e5d0e5f329
2020-05-23 16:01:39 +02:00
Jens Pelzetter f03e63a443 Updated JavaDoc of LocalizedString
Former-commit-id: 69de594da6
2020-05-22 19:26:22 +02:00
Jens Pelzetter 0eea72225e Fixed bug in LocalizedStringType for null values
Former-commit-id: f62ece6de1
2020-05-21 21:09:43 +02:00
Jens Pelzetter 7d3475a480 JSON-DB cols work now for tests with PostgreSQL
Former-commit-id: 7a843e81b6
2020-05-21 19:50:27 +02:00
Jens Pelzetter 04789fd327 Trying to make DBUnit to work with JSON columns
Former-commit-id: 7d93f4dde4
2020-05-20 06:46:40 +02:00
Jens Pelzetter a50e1fb99b More edits for refactoring embedded entities into JSON cols
Former-commit-id: a82f46c846
2020-05-17 18:56:57 +02:00
Jens Pelzetter a369979f79 Refactor embedded localized string to JSON columns
Former-commit-id: 5abbc454a2
2020-05-17 17:07:43 +02:00
123 changed files with 3052 additions and 2144 deletions

View File

@ -11,6 +11,7 @@ import com.arsdigita.cms.contenttypes.ui.ProfileSiteItemMiscStep;
import com.arsdigita.cms.contenttypes.ui.ProfileSiteItemPositionStep;
import com.arsdigita.cms.contenttypes.ui.ProfileSiteItemPropertiesStep;
import org.hibernate.annotations.Type;
import org.libreccm.l10n.LocalizedString;
import org.librecms.assets.Person;
import org.librecms.contentsection.ContentItem;
@ -21,6 +22,7 @@ import org.librecms.contenttypes.ContentTypeDescription;
import java.util.Objects;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
@ -85,43 +87,49 @@ public class ProfileSiteItem extends ContentItem {
@JoinColumn(name = "OWNER_ID")
private Person owner;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "PROFILE_SITE_ITEMS_POSITION",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PROFILE_SITE_ITEM_ID")
}
)
)
// @Embedded
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "PROFILE_SITE_ITEMS_POSITION",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "PROFILE_SITE_ITEM_ID")
// }
// )
// )
@Column(name = "POSITION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString position;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "PROFILE_SITE_ITEMS_INTERESTS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PROFILE_SITE_ITEM_ID")
}
)
)
// @Embedded
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "PROFILE_SITE_ITEMS_INTERESTS",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "PROFILE_SITE_ITEM_ID")
// }
// )
// )
@Column(name = "INTERESTS")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString interests;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "PROFILE_SITE_ITEMS_MISC",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PROFILE_SITE_ITEM_ID")
}
)
)
// @Embedded
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "PROFILE_SITE_ITEMS_MISC",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "PROFILE_SITE_ITEM_ID")
// }
// )
// )
@Column(name = "MISC")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString misc;
public ProfileSiteItem() {

View File

@ -0,0 +1,104 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.librecms.contentsection.rs;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionRepository;
import org.librecms.contentsection.Folder;
import org.librecms.contentsection.FolderRepository;
import java.util.Optional;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Response;
import static javax.ws.rs.core.MediaType.*;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Path("/{content-section}/items/{path: .*}")
public class ContentItemController {
@Inject
private FolderRepository folderRepo;
@Inject
private ContentItemRepository itemRepo;
@Inject
private ContentSectionRepository sectionRepo;
@GET
@Path("/")
@Produces(APPLICATION_JSON)
@Transactional(Transactional.TxType.REQUIRED)
public ContentItem getContentItem(
@PathParam("content-section") final String sectionName,
@PathParam("path") final String path
) {
final String[] pathTokens = path.split("/");
final ContentSection section = sectionRepo
.findByLabel(sectionName)
.orElseThrow(
() -> new WebApplicationException(
String.format(
"ContentSection \"%s\" does not exist.",
sectionName),
Response.Status.NOT_FOUND
)
);
final Folder rootFolder = section.getRootDocumentsFolder();
final StringBuilder folderPathBuilder = new StringBuilder("/");
Folder folder = rootFolder;
for (int i = 0; i < pathTokens.length - 1; i++) {
final String pathToken = pathTokens[i];
folderPathBuilder.append(pathToken);
final Optional<Folder> result = folder
.getSubFolders()
.stream()
.filter(subFolder -> subFolder.getName().equals(pathToken))
.findAny();
if (result.isPresent()) {
folder = result.get();
} else {
throw new WebApplicationException(
String.format(
"Folder %s not found in ContentSection %s.",
folderPathBuilder.toString(),
sectionName
)
);
}
}
final String itemName = pathTokens[pathTokens.length - 1];
final ContentItem item = itemRepo
.findByNameInFolder(folder, itemName)
.orElseThrow(
() -> new WebApplicationException(
String.format(
"No ContentItem %s in folder %s of ContentSection %s.",
itemName,
folderPathBuilder.toString()
),
Response.Status.NOT_FOUND
)
);
return item;
}
}

View File

@ -38,6 +38,7 @@ public class ContentSectionsApplication extends Application{
classes.add(Assets.class);
classes.add(ContentItems.class);
classes.add(ContentItemController.class);
classes.add(ContentSections.class);
classes.add(Images.class);

View File

@ -333,11 +333,15 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>oracle12c</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm.categorization</param>
<param>org.libreccm.core</param>
@ -656,11 +660,15 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
<param>oracle12c</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>
@ -738,10 +746,14 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>
@ -820,10 +832,14 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>
@ -897,10 +913,14 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>
@ -978,10 +998,14 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>
@ -1055,10 +1079,14 @@
<groupId>de.jpdigital</groupId>
<artifactId>hibernate53-ddl-maven-plugin</artifactId>
<configuration>
<dialects>
<!-- <dialects>
<param>h2</param>
<param>postgresql9</param>
</dialects>
</dialects>-->
<customDialects>
<param>org.libreccm.hibernate.dialects.LibreCcmH2Dialect</param>
<param>org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect</param>
</customDialects>
<packages>
<param>org.libreccm</param>
</packages>

View File

@ -80,8 +80,7 @@ public class UserBanner extends SimpleComponent {
contentElem.addAttribute("screenName",
user.get().getName());
contentElem.addAttribute("primaryEmail",
user.get().getPrimaryEmailAddress()
.getAddress());
user.get().getPrimaryEmailAddress());
contentElem.addAttribute("userID",
Long.toString(user.get().getPartyId()));
}

View File

@ -267,7 +267,7 @@ class GroupAddMemberForm extends Form {
case COL_MEMBER_GIVEN_NAME:
return user.getGivenName();
case COL_MEMBER_EMAIL:
return user.getPrimaryEmailAddress().getAddress();
return user.getPrimaryEmailAddress();
case COL_MEMBER_ADD:
return new Label(new GlobalizedMessage(
"ui.admin.group_details.add_member.table.add",

View File

@ -221,7 +221,7 @@ class GroupMembersTable extends Table {
case COL_MEMBER_GIVEN_NAME:
return member.getGivenName();
case COL_MEMBER_EMAIL:
return member.getPrimaryEmailAddress().getAddress();
return member.getPrimaryEmailAddress();
case COL_MEMBER_REMOVE:
return new Label(new GlobalizedMessage(
"ui.admin.group_details.members_table.remove",

View File

@ -95,8 +95,11 @@ class EmailForm extends Form {
final User user = userRepository.findById(Long.parseLong(
userIdStr)).get();
EmailAddress email = null;
if (user.getPrimaryEmailAddress().getAddress().equals(selected)) {
email = user.getPrimaryEmailAddress();
if (user.getPrimaryEmailAddress().equals(selected)) {
email = new EmailAddress();
email.setAddress(user.getPrimaryEmailAddress());
email.setBouncing(user.isPrimaryEmailAddressBouncing());
email.setVerified(user.isPrimaryEmailAddressVerified());
} else {
for (EmailAddress current : user.getEmailAddresses()) {
if (current.getAddress().equals(selected)) {
@ -152,9 +155,12 @@ class EmailForm extends Form {
if (selected == null) {
email = new EmailAddress();
user.addEmailAddress(email);
} else if (user.getPrimaryEmailAddress().getAddress().equals(
} else if (user.getPrimaryEmailAddress().equals(
selected)) {
email = user.getPrimaryEmailAddress();
email = new EmailAddress();
email.setAddress(user.getPrimaryEmailAddress());
email.setBouncing(user.isPrimaryEmailAddressBouncing());
email.setVerified(user.isPrimaryEmailAddressVerified());
} else {
for (EmailAddress current : user.getEmailAddresses()) {
if (current.getAddress().equals(selected)) {

View File

@ -64,11 +64,11 @@ class PrimaryEmailTableModel implements TableModel {
public Object getElementAt(final int columnIndex) {
switch(columnIndex) {
case COL_ADDRESS:
return user.getPrimaryEmailAddress().getAddress();
return user.getPrimaryEmailAddress();
case COL_VERIFIED:
return Boolean.toString(user.getPrimaryEmailAddress().isVerified());
return Boolean.toString(user.isPrimaryEmailAddressVerified());
case COL_BOUNCING:
return Boolean.toString(user.getPrimaryEmailAddress().isBouncing());
return Boolean.toString(user.isPrimaryEmailAddressBouncing());
case COL_ACTION:
return new Label(new GlobalizedMessage(
"ui.admin.user.primary_email_address.edit", ADMIN_BUNDLE));
@ -79,7 +79,7 @@ class PrimaryEmailTableModel implements TableModel {
@Override
public Object getKeyAt(final int columnIndex) {
return user.getPrimaryEmailAddress().getAddress();
return user.getPrimaryEmailAddress();
}
}

View File

@ -201,7 +201,7 @@ class UsersTable extends Table {
case COL_GIVEN_NAME:
return user.getGivenName();
case COL_PRIMARY_EMAIL:
return user.getPrimaryEmailAddress().getAddress();
return user.getPrimaryEmailAddress();
case COL_SCREEN_NAME:
return user.getName();
default:

View File

@ -77,7 +77,7 @@ public class EmailInitListener implements FormInitListener {
data.put(m_param.getName(), user.getPrimaryEmailAddress().getAddress());
data.put(m_param.getName(), user.getPrimaryEmailAddress());
LOGGER.debug("SUCCESS");
}

View File

@ -116,11 +116,9 @@ public class UserEditForm extends UserForm
user.setFamilyName((String) m_lastName.getValue(state));
user.setName((String) m_screenName.getValue(state));
final String emailValue = (String) data.get(FORM_EMAIL);
if (!emailValue.equals(user.getPrimaryEmailAddress().getAddress())) {
final EmailAddress newAddress = new EmailAddress();
newAddress.setAddress(data.get(FORM_EMAIL).toString());
newAddress.setVerified(false);
user.setPrimaryEmailAddress(newAddress);
if (!emailValue.equals(user.getPrimaryEmailAddress())) {
user.setPrimaryEmailAddress(data.get(FORM_EMAIL).toString());
user.setPrimaryEmailAddressVerified(false);
final ChallengeManager challengeManager = CdiUtil.createCdiUtil()
.findBean(ChallengeManager.class);

View File

@ -223,7 +223,7 @@ public abstract class UserForm extends Form
}
m_firstName.setValue(state, user.getGivenName());
m_lastName.setValue(state, user.getFamilyName());
m_email.setValue(state, user.getPrimaryEmailAddress().getAddress());
m_email.setValue(state, user.getPrimaryEmailAddress());
m_screenName.setValue(state, user.getName());
}
@ -283,7 +283,7 @@ public abstract class UserForm extends Form
}
}
final String oldEmail = user.getPrimaryEmailAddress().getAddress();
final String oldEmail = user.getPrimaryEmailAddress();
final String email = (String) m_email.getValue(state);
if (KernelConfig.getConfig().emailIsPrimaryIdentifier()
&& email != null && !email.equals(oldEmail)) {

View File

@ -0,0 +1,354 @@
/*
* Copyright (C) 2020 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 db.migrations.org.libreccm.ccm_core.pgsql;
import org.flywaydb.core.api.migration.BaseJavaMigration;
import org.flywaydb.core.api.migration.Context;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.json.Json;
import javax.json.JsonObjectBuilder;
import javax.json.JsonWriter;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class V7_0_0_37__localized_string_embedded_to_json extends BaseJavaMigration {
private static final String[] ADD_COLUMN_STATEMENTS = new String[]{
"alter table CCM_CORE.CATEGORIES add column TITLE jsonb",
"alter table CCM_CORE.CATEGORIES add column DESCRIPTION jsonb",
"alter table CCM_CORE.CATEGORY_DOMAINS add column DESCRIPTION jsonb",
"alter table CCM_CORE.CATEGORY_DOMAINS add column TITLE jsonb",
"alter table CCM_ROLES add column DESCRIPTION jsonb",
"alter table CCM_CORE.FORMBUILDER_COMPONENTS add column DESCRIPTION jsonb",
"alter table CCM_CORE.FORMBUILDER_DATA_QUERIES add column DESCRIPTION jsonb",
"alter table CCM_CORE.FORMBUILDER_DATA_QUERIES add column QUERY_NAME jsonb",
"alter table CCM_CORE.FORMBUILDER_OPTIONS add column LABEL jsonb",
"alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENERS add column DESCRIPTION jsonb",
"alter table CCM_CORE.FORMBUILDER_PROCESS_LISTENERS add column LISTENER_NAME jsonb",
"alter table CCM_CORE.PAGE_MODELS add column DESCRIPTION jsonb",
"alter table CCM_CORE.PAGE_MODELS add column TITLE jsonb",
"alter table CCM_CORE.RESOURCE_TYPES add column DESCRIPTION jsonb",
"alter table CCM_CORE.RESOURCES add column DESCRIPTION jsonb",
"alter table CCM_CORE.RESOURCES add column TITLE jsonb",
"alter table CCM_CORE.SETTINGS add column SETTING_VALUE_LOCALIZED_STRING jsonb",
"alter table CCM_CORE.WORKFLOW_TASKS add column DESCRIPTION jsonb",
"alter table CCM_CORE.WORKFLOW_TASKS add column LABEL jsonb",
"alter table CCM_CORE.WORKFLOWS add column DESCRIPTION jsonb",
"alter table CCM_CORE.WORKFLOWS add column NAME jsonb"
};
private static final int OBJECT_TABLE = 0;
private static final int LOCALIZED_STR_TABLE = 1;
private static final int OBJECT_ID_COL = 2;
private static final int VALUE_ID_COL = 3;
private static final int TARGET_COL = 4;
private static final String[][] MIGRATE = new String[][]{
new String[]{
"CCM_CORE.CATEGORIES",
"CCM_CORE.CATEGORY_TITLES",
"OBJECT_ID",
"OBJECT_ID",
"TITLE"
},
new String[]{
"CCM_CORE.CATEGORIES",
"CCM_CORE.CATEGORY_DESCRIPTIONS",
"OBJECT_ID",
"OBJECT_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.CATEGORY_DOMAINS",
"CCM_CORE.DOMAIN_TITLES",
"OBJECT_ID",
"OBJECT_ID",
"TITLE"
},
new String[]{
"CCM_CORE.CATEGORY_DOMAINS",
"CCM_CORE.DOMAIN_DESCRIPTIONS",
"OBJECT_ID",
"OBJECT_ID",
"DESCRIPTIONS"
},
new String[]{
"CCM_CORE.CCM_ROLES",
"CCM_CORE.ROLE_DESCRIPTIONS",
"ROLE_ID",
"ROLE_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.FORMBUILDER_COMPONENTS",
"CCM_CORE.FORMBUILDER_COMPONENT_DESCRIPTIONS",
"OBJECT_ID",
"OBJECT_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.FORMBUILDER_DATA_QUERIES",
"FORMBUILDER_DATA_QUERY_DESCRIPTIONS",
"OBJECT_ID",
"OBJECT_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.FORMBUILDER_DATA_QUERIES",
"FORMBUILDER_DATA_QUERY_NAMES",
"OBJECT_ID",
"OBJECT_ID",
"QUERY_NAME"
},
new String[]{
"CCM_CORE.FORMBUILDER_OPTIONS",
"FORMBUILDER_OPTION_LABELS",
"OBJECT_ID",
"OBJECT_ID",
"LABEL"
},
new String[]{
"CCM_CORE.FORMBUILDER_PROCESS_LISTENERS",
"FORMBUILDER_LISTENER_DESCRIPTIONS",
"OBJECT_ID",
"OBJECT_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.FORMBUILDER_PROCESS_LISTENERS",
"FORMBUILDER_LISTENER_NAMES",
"OBJECT_ID",
"OBJECT_ID",
"LISTENER_NAME"
},
new String[]{
"CCM_CORE.PAGE_MODELS",
"CCM_CORE.PAGE_MODEL_DESCRIPTIONS",
"PAGE_MODEL_ID",
"PAGE_MODEL_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.PAGE_MODELS",
"CCM_CORE.PAGE_MODEL_TITLES",
"PAGE_MODEL_ID",
"PAGE_MODEL_ID",
"TITLE"
},
new String[]{
"CCM_CORE.RESOURCE_TYPES",
"CCM_CORE.RESOURCE_TYPE_DESCRIPTIONS",
"RESOURCE_TYPE_ID",
"RESOURCE_TYPE_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.RESOURCES",
"CCM_CORE.RESOURCE_DESCRIPTIONS",
"OBJECT_ID", "OBJECT_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.RESOURCES",
"CCM_CORE.RESOURCE_TITLES",
"OBJECT_ID",
"OBJECT_ID",
"TITLE"
},
new String[]{
"CCM_CORE.SETTINGS",
"CCM_CORE.SETTINGS_L10N_STR_VALUES",
"SETTING_ID",
"ENTRY_ID",
"SETTING_VALUE_LOCALIZED_STRING"
},
new String[]{
"CCM_CORE.WORKFLOW_TASKS",
"CCM_CORE.WORKFLOW_TASK_DESCRIPTIONS",
"TASK_ID",
"TASK_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.WORKFLOW_TASKS",
"CCM_CORE.WORKFLOW_TASK_LABELS",
"TASK_ID",
"TASK_ID",
"LABEL"
},
new String[]{
"CCM_CORE.WORKFLOWS",
"CCM_CORE.WORKFLOW_DESCRIPTIONS",
"WORKFLOW_ID",
"WORKFLOW_ID",
"DESCRIPTION"
},
new String[]{
"CCM_CORE.WORKFLOWS",
"CCM_CORE.WORKFLOW_NAMES",
"WORKFLOW_ID",
"WORKFLOW_ID",
"NAME"
}
};
private static final String SELECT_IDS_QUERY_TEMPLATE = "select %s from %s";
private static final String SELECT_VALUES_QUERY_TEMPLATE
= "select locale, localized_value from %s where %s = ?";
private static final String SET_VALUES_QUERY_TEMPLATE
= "update %s set %s = ? where %s = ?";
private static final String[] DROP_TABLES = new String[]{
"CCM_CORE.CATEGORY_TITLES",
"CCM_CORE.CATEGORY_DESCRIPTIONS",
"CCM_CORE.DOMAIN_TITLES",
"CCM_CORE.DOMAIN_DESCRIPTIONS",
"CCM_CORE.ROLE_DESCRIPTIONS",
"CCM_CORE.FORMBUILDER_COMPONENT_DESCRIPTIONS",
"FORMBUILDER_DATA_QUERY_DESCRIPTIONS",
"FORMBUILDER_DATA_QUERY_NAMES",
"FORMBUILDER_OPTION_LABELS",
"FORMBUILDER_LISTENER_DESCRIPTIONS",
"FORMBUILDER_LISTENER_NAMES",
"CCM_CORE.PAGE_MODEL_DESCRIPTIONS",
"CCM_CORE.PAGE_MODEL_TITLES",
"CCM_CORE.RESOURCE_TYPE_DESCRIPTIONS",
"CCM_CORE.RESOURCE_DESCRIPTIONS",
"CCM_CORE.RESOURCE_TITLES",
"CCM_CORE.SETTINGS_L10N_STR_VALUES",
"CCM_CORE.WORKFLOW_TASK_DESCRIPTIONS",
"CCM_CORE.WORKFLOW_TASK_LABELS",
"CCM_CORE.WORKFLOW_DESCRIPTIONS",
"CCM_CORE.WORKFLOW_NAMES",};
private static final String DROP_TABLES_QUERY_TEMPLATE = "drop table %s";
@Override
public void migrate(final Context context) throws Exception {
final Connection connection = context.getConnection();
// Add columns for localized strings
for (final String addColStatement : ADD_COLUMN_STATEMENTS) {
try (PreparedStatement statement = connection.prepareStatement(
addColStatement
)) {
statement.execute();
}
}
for (final String[] migrate : MIGRATE) {
final String objectTable = migrate[OBJECT_TABLE];
final String localizedStringTable = migrate[LOCALIZED_STR_TABLE];
final String objectIdCol = migrate[OBJECT_ID_COL];
final String valueIdCol = migrate[VALUE_ID_COL];
final String targetCol = migrate[TARGET_COL];
final List<Long> objectIds = new ArrayList<>();
final String selectIdsQuerySql = String.format(
SELECT_IDS_QUERY_TEMPLATE,
objectIdCol,
objectTable
);
try (PreparedStatement stmt = connection.prepareStatement(
selectIdsQuerySql
);
ResultSet resultSet = stmt.executeQuery()) {
while (resultSet.next()) {
objectIds.add(resultSet.getLong(objectIdCol));
}
}
final String valuesQuerySql = String.format(
SELECT_VALUES_QUERY_TEMPLATE,
localizedStringTable,
valueIdCol
);
final String setValuesQuerySql = String.format(
SET_VALUES_QUERY_TEMPLATE,
objectTable,
targetCol,
objectIdCol
);
try (PreparedStatement selectValuesStmt = connection
.prepareStatement(valuesQuerySql);
PreparedStatement setValuesStmt = connection.prepareStatement(
setValuesQuerySql
)) {
for (final Long objectId : objectIds) {
selectValuesStmt.setLong(1, objectId);
final JsonObjectBuilder jsonObjBuilder = Json
.createObjectBuilder();
try (ResultSet resultSet = selectValuesStmt.executeQuery()) {
while (resultSet.next()) {
final String locale = resultSet.getString(
"locale"
);
final String localizedValue = resultSet.getString(
"localizedValue"
);
jsonObjBuilder.add(locale, localizedValue);
}
}
try (StringWriter strWriter = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(strWriter)) {
jsonWriter.writeObject(jsonObjBuilder.build());
setValuesStmt.setString(1, strWriter.toString());
}
setValuesStmt.setLong(2, objectId);
setValuesStmt.execute();
setValuesStmt.clearParameters();
selectValuesStmt.clearParameters();
}
}
for (final String dropTable : DROP_TABLES) {
try(PreparedStatement stmt = connection.prepareStatement(
String.format(DROP_TABLES_QUERY_TEMPLATE, dropTable)
)) {
stmt.execute();
}
}
// SELECT object_id FROM ... order by object_id;
// for all object_id SELECT locale, localized_value FROM ... WHERE object_id = :object_id
// build json
// INSERT INTO ... WHERE object_id = :object_id
// Drop tables
}
}
}

View File

@ -40,15 +40,13 @@ import java.util.Objects;
import static org.libreccm.categorization.CategorizationConstants.CAT_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
@ -77,59 +75,48 @@ import javax.persistence.Table;
@NamedQueries({
@NamedQuery(
name = "Category.topLevelCategories",
query = "SELECT c FROM Category c WHERE c.parentCategory IS NULL")
,
query = "SELECT c FROM Category c WHERE c.parentCategory IS NULL"),
@NamedQuery(
name = "Category.findByName",
query = "SELECT c FROM Category c WHERE c.name = :name")
,
query = "SELECT c FROM Category c WHERE c.name = :name"),
@NamedQuery(
name = "Category.findByUuid",
query = "SELECT c FROM Category c WHERE c.uuid = :uuid")
,
query = "SELECT c FROM Category c WHERE c.uuid = :uuid"),
@NamedQuery(
name = "Category.findParentCategory",
query = "SELECT c.parentCategory FROM Category c WHERE c = :category")
,
query = "SELECT c.parentCategory FROM Category c WHERE c = :category"),
@NamedQuery(
name = "Category.countAssignedCategories",
query = "SELECT COUNT(c) FROM Categorization c "
+ "WHERE c.categorizedObject = :object"
)
,
),
@NamedQuery(
name = "Category.isCategorized",
query = "SELECT (CASE WHEN COUNT(c) > 0 THEN true ELSE false END) "
+ "FROM Categorization c "
+ "WHERE c.categorizedObject = :object")
,
+ "WHERE c.categorizedObject = :object"),
@NamedQuery(
name = "Category.countObjects",
query = "SELECT COUNT(c) FROM Categorization c "
+ "WHERE c.category = :category")
,
+ "WHERE c.category = :category"),
@NamedQuery(
name = "Category.hasObjects",
query = "SELECT (CASE WHEN COUNT(c) > 0 THEN true ELSE false END) "
+ "FROM Categorization c "
+ "WHERE c.category = :category")
,
+ "WHERE c.category = :category"),
@NamedQuery(
name = "Category.countSubCategories",
query = "SELECT COUNT(c) FROM Category c "
+ "WHERE c.parentCategory =:category")
,
+ "WHERE c.parentCategory =:category"),
@NamedQuery(
name = "Category.hasSubCategories",
query = "SELECT (CASE WHEN COUNT(c) > 0 THEN true ELSE false END) "
+ "FROM Category c "
+ "WHERE c.parentCategory = :category")
,
+ "WHERE c.parentCategory = :category"),
@NamedQuery(
name = "Category.findByNameAndParent",
query = "SELECT c FROM Category c "
+ "WHERE c.name = :name AND c.parentCategory = :parent")
,
+ "WHERE c.name = :name AND c.parentCategory = :parent"),
@NamedQuery(
name = "Category.hasSubCategoryWithName",
query = "SELECT (CASE WHEN COUNT(c) > 0 THEN true ELSE False END) "
@ -174,28 +161,16 @@ public class Category extends CcmObject implements Serializable, Exportable {
/**
* The human readable and localisable title of the category.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "CATEGORY_TITLES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}
))
@Column(name = "TITLE")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "title", namespace = CAT_XML_NS)
private LocalizedString title;
/**
* A localisable description of the category.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "CATEGORY_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}
))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "description", namespace = CAT_XML_NS)
private LocalizedString description;
@ -469,14 +444,14 @@ public class Category extends CcmObject implements Serializable, Exportable {
public String toString(final String data) {
return super.toString(String.format(", uniqueId = %s, "
+ "name = \"%s\", "
// + "title = %s, "
// + "title = %s, "
+ "enabled = %b, "
+ "visible = %b, "
+ "abstractCategory = %s, "
+ "categoryOrder = %d%s",
uniqueId,
name,
// Objects.toString(title),
// Objects.toString(title),
enabled,
visible,
abstractCategory,

View File

@ -142,9 +142,10 @@ public class CategoryTreeModelLite implements TreeModel {
return category.getName();
} else {
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final CategoryTreeModelLiteController controller = cdiUtil
.findBean(CategoryTreeModelLiteController.class);
return controller.getTitle(category);
final GlobalizationHelper globalizationHelper = cdiUtil
.findBean(GlobalizationHelper.class);
return globalizationHelper
.getValueFromLocalizedString(category.getTitle());
}
}

View File

@ -40,6 +40,7 @@ import java.io.Serializable;
import static org.libreccm.categorization.CategorizationConstants.CAT_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
import java.util.ArrayList;
@ -48,12 +49,9 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
@ -160,26 +158,16 @@ public class Domain extends CcmObject implements Serializable, Exportable {
* A human readable title for the {@code Domain}. The title can be
* localised.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "DOMAIN_TITLES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}))
@Column(name = "TITLE")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "title", namespace = CAT_XML_NS)
private LocalizedString title;
/**
* A description of the domain. The description can be localised.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "DOMAIN_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "description", namespace = CAT_XML_NS)
private LocalizedString description;

View File

@ -23,13 +23,10 @@ import org.libreccm.l10n.LocalizedString;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import javax.persistence.AssociationOverride;
import javax.persistence.Embedded;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
/**
* A setting which stores a {@link LocalizedString} . This can be used for
@ -44,13 +41,8 @@ public class LocalizedStringSetting
private static final long serialVersionUID = 667750736151545279L;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "SETTINGS_L10N_STR_VALUES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "ENTRY_ID")}))
@Column(name = "SETTING_VALUE_LOCALIZED_STRING")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString value;
public LocalizedStringSetting() {

View File

@ -18,11 +18,6 @@
*/
package org.libreccm.core;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@ -32,38 +27,39 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
/**
* An embeddable entity for storing email addresses.
*
* In contrast to its predecessor {@code com.arsdigita.kernel.EmailAddress}
* this class does not provide verification methods. Verification is done using
* the <em>Bean Validiation API</em> (Hibernate Validator is used as
* implementation).
*
* Because this class is an embeddable JPA entity it can be used in other
* entities to store eMail addresses.
*
* In contrast to its predecessor {@code com.arsdigita.kernel.EmailAddress} this
* class does not provide verification methods. Verification is done using the
* <em>Bean Validiation API</em> (Hibernate Validator is used as
* implementation).
*
* This class is inteded to maps a JSONB column using the
* {@link EmailAddressType}, or if a list of email addresses should be stored,
* the {@link EmailAddressListType}.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Embeddable
@Deprecated
@XmlRootElement(name = "email-address", namespace = CORE_XML_NS)
public class EmailAddress implements Serializable {
private static final long serialVersionUID = -4076089589412432766L;
@Column(name = "EMAIL_ADDRESS", length = 512, nullable = false)
@XmlElement(name = "address", namespace = CORE_XML_NS, required = true)
@NotBlank
@Email
private String address;
@Column(name = "BOUNCING")
@XmlElement(name = "bouncing", namespace = CORE_XML_NS)
private boolean bouncing;
@Column(name = "VERIFIED")
@XmlElement(name = "verified", namespace = CORE_XML_NS)
private boolean verified;
@ -112,7 +108,7 @@ public class EmailAddress implements Serializable {
if (!other.canEqual(this)) {
return false;
}
if (!Objects.equals(address, other.getAddress())) {
return false;
}
@ -121,11 +117,19 @@ public class EmailAddress implements Serializable {
}
return verified == other.isVerified();
}
public boolean canEqual(final Object obj) {
return obj instanceof EmailAddress;
}
public static EmailAddress fromJson(final JsonObject jsonObject) {
final EmailAddress address = new EmailAddress();
address.setAddress(jsonObject.getString("address"));
address.setBouncing(jsonObject.getBoolean("bouncing"));
address.setVerified(jsonObject.getBoolean("verified"));
return address;
}
public JsonObjectBuilder buildJson() {
return Json
.createObjectBuilder()
@ -133,7 +137,11 @@ public class EmailAddress implements Serializable {
.add("bouncing", bouncing)
.add("verified", verified);
}
public JsonObject toJson() {
return buildJson().build();
}
@Override
public String toString() {
return String.format("%s{ "

View File

@ -0,0 +1,62 @@
/*
* Copyright (C) 2020 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.libreccm.core;
import org.libreccm.hibernate.AbstractCcmJsonUserType;
import java.util.List;
import java.util.stream.Collectors;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonReader;
import javax.json.JsonValue;
import javax.json.JsonWriter;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class EmailAddressListType extends AbstractCcmJsonUserType {
@Override
protected Object nullSafeGet(final JsonReader jsonReader) {
return jsonReader
.readArray()
.stream()
.map(JsonValue::asJsonObject)
.map(EmailAddress::fromJson)
.collect(Collectors.toList());
}
@Override
protected void nullSafeSet(
final Object value, final JsonWriter jsonWriter
) {
@SuppressWarnings("unchecked")
final List<EmailAddress> addresses = (List<EmailAddress>) value;
final JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder();
addresses
.stream()
.map(EmailAddress::buildJson)
.forEach(jsonArrayBuilder::add);
jsonWriter.writeArray(jsonArrayBuilder.build());
}
}

View File

@ -0,0 +1,45 @@
/*
* Copyright (C) 2020 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.libreccm.core;
import org.libreccm.hibernate.AbstractCcmJsonUserType;
import javax.json.JsonReader;
import javax.json.JsonWriter;
/**
* Hibernate User type mapping instances of {@link EmailAddress} to a JSON.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class EmailAddressType extends AbstractCcmJsonUserType {
@Override
protected Object nullSafeGet(final JsonReader jsonReader) {
return EmailAddress.fromJson(jsonReader.readObject());
}
@Override
protected void nullSafeSet(
final Object value, final JsonWriter jsonWriter
) {
jsonWriter.writeObject(((EmailAddress) value).toJson());
}
}

View File

@ -29,6 +29,7 @@ import java.io.Serializable;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
import java.util.ArrayList;
@ -37,13 +38,9 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@ -82,25 +79,15 @@ public class Resource extends CcmObject implements Serializable, Exportable {
/**
* A localisable title for the {@code Resource}.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "RESOURCE_TITLES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}))
@Column(name = "TITLE")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString title;
/**
* A localisable description for the {@code Resource}.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "RESOURCE_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OBJECT_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
@ManyToOne

View File

@ -27,17 +27,14 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
@ -87,13 +84,8 @@ public class ResourceType implements Serializable, Exportable {
@Column(name = "TITLE", length = 254, nullable = false)
private String title;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "RESOURCE_TYPE_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "RESOURCE_TYPE_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
@Column(name = "WORKSPACE_APP")

View File

@ -21,7 +21,6 @@ package org.libreccm.formbuilder;
import org.libreccm.core.CcmObject;
import org.libreccm.l10n.LocalizedString;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
@ -29,6 +28,14 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -46,13 +53,8 @@ public class Component extends CcmObject implements Serializable {
@Column(name = "ADMIN_NAME")
private String adminName;
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "FORMBUILDER_COMPONENT_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "COMPONENT_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
@Column(name = "ATTRIBUTE_STRING")

View File

@ -20,12 +20,17 @@ package org.libreccm.formbuilder;
import org.libreccm.l10n.LocalizedString;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -39,12 +44,14 @@ public class Option extends Component implements Serializable {
@Column(name = "PARAMETER_VALUE")
private String parameterValue;
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "FORMBUILDER_OPTION_LABELS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "OPTION_ID")}))
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(name = "FORMBUILDER_OPTION_LABELS",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "OPTION_ID")}))
@Column(name = "LABEL")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString label;
public String getParameterValue() {

View File

@ -21,12 +21,20 @@ package org.libreccm.formbuilder;
import org.libreccm.core.CcmObject;
import org.libreccm.l10n.LocalizedString;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Table;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -40,22 +48,26 @@ public class PersistentDataQuery extends CcmObject implements Serializable {
@Column(name = "QUERY_ID")
private String queryId;
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "FORMBUILDER_DATA_QUERY_NAMES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "DATA_QUERY_ID")}))
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "FORMBUILDER_DATA_QUERY_NAMES",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "DATA_QUERY_ID")}))
@Column(name = "QUERY_NAME")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString name;
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "FORMBUILDER_DATA_QUERY_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "DATA_QUERY_ID")}))
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "FORMBUILDER_DATA_QUERY_DESCRIPTIONS",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "DATA_QUERY_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
public PersistentDataQuery() {

View File

@ -26,11 +26,10 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import javax.persistence.AssociationOverride;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@ -44,23 +43,26 @@ public class ProcessListener extends CcmObject implements Serializable {
private static final long serialVersionUID = -3029184333026605708L;
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "FORMBUILDER_PROCESS_LISTENER_NAMES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PROCESS_LISTENER_ID")}))
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "FORMBUILDER_PROCESS_LISTENER_NAMES",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "PROCESS_LISTENER_ID")}))
@Column(name = "LISTENER_NAME")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString name;
@AssociationOverride(
name = "values",
joinTable = @JoinTable(
name = "FORMBUILDER_PROCESS_LISTENER_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PROCESS_LISTENER_ID")}))
// @AssociationOverride(
// name = "values",
// joinTable = @JoinTable(
// name = "FORMBUILDER_PROCESS_LISTENER_DESCRIPTIONS",
// schema = DB_SCHEMA,
// joinColumns = {
// @JoinColumn(name = "PROCESS_LISTENER_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
@Column(name = "LISTENER_CLASS")
@ -77,7 +79,7 @@ public class ProcessListener extends CcmObject implements Serializable {
name = new LocalizedString();
description = new LocalizedString();
}
public LocalizedString getName() {
return name;
}

View File

@ -0,0 +1,163 @@
/*
* Copyright (C) 2020 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.libreccm.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType;
import org.libreccm.l10n.LocalizedString;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.io.StringReader;
import java.io.StringWriter;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Objects;
import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonWriter;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public abstract class AbstractCcmJsonUserType implements UserType {
@Override
public int[] sqlTypes() {
return new int[]{Types.JAVA_OBJECT};
}
@Override
public Class<LocalizedString> returnedClass() {
return LocalizedString.class;
}
@Override
public boolean equals(final Object obj1, final Object obj2)
throws HibernateException {
return Objects.equals(obj1, obj2);
}
@Override
public int hashCode(final Object obj) throws HibernateException {
return Objects.hashCode(obj);
}
@Override
public Object nullSafeGet(
final ResultSet resultSet,
final String[] names,
final SharedSessionContractImplementor session,
final Object owner
) throws HibernateException, SQLException {
final String cellContent = resultSet.getString(names[0]);
if (cellContent == null) {
return null;
} else {
try (StringReader strReader = new StringReader(cellContent);
JsonReader jsonReader = Json.createReader(strReader)) {
return nullSafeGet(jsonReader);
}
}
}
protected abstract Object nullSafeGet(final JsonReader jsonReader);
@Override
public void nullSafeSet(
final PreparedStatement statement,
final Object value,
final int index,
final SharedSessionContractImplementor session
) throws HibernateException, SQLException {
if (value == null) {
statement.setObject(index, null, Types.OTHER);
} else {
try (StringWriter strWriter = new StringWriter();
JsonWriter jsonWriter = Json.createWriter(strWriter)) {
nullSafeSet(value, jsonWriter);
statement.setObject(index, strWriter.toString(), Types.OTHER);
}catch (IOException ex) {
throw new HibernateException(ex);
}
}
}
protected abstract void nullSafeSet(
final Object value, final JsonWriter jsonWriter
);
@Override
public Object deepCopy(final Object value) throws HibernateException {
final byte[] serialized;
try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos)) {
oos.writeObject(value);
oos.flush();
serialized = bos.toByteArray();
} catch (IOException ex) {
throw new HibernateException(ex);
}
final Object obj;
try (ByteArrayInputStream bais = new ByteArrayInputStream(serialized);
ObjectInputStream ois = new ObjectInputStream(bais)) {
obj = ois.readObject();
} catch (IOException | ClassNotFoundException ex) {
throw new HibernateException(ex);
}
return obj;
}
@Override
public boolean isMutable() {
return true;
}
@Override
public Serializable disassemble(final Object value)
throws HibernateException {
return (Serializable) deepCopy(value);
}
@Override
public Object assemble(final Serializable cached, final Object owner) throws
HibernateException {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Object replace(
final Object original,
final Object target,
final Object owner
) throws HibernateException {
return deepCopy(original);
}
}

View File

@ -0,0 +1,36 @@
/*
* Copyright (C) 2020 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.libreccm.hibernate.dialects;
import org.hibernate.dialect.H2Dialect;
import java.sql.Types;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class LibreCcmH2Dialect extends H2Dialect {
public LibreCcmH2Dialect() {
super();
super.registerColumnType(Types.JAVA_OBJECT, "json");
}
}

View File

@ -0,0 +1,36 @@
/*
* Copyright (C) 2020 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.libreccm.hibernate.dialects;
import org.hibernate.dialect.PostgreSQL9Dialect;
import java.sql.Types;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class LibreCcmPgSql9Dialect extends PostgreSQL9Dialect {
public LibreCcmPgSql9Dialect() {
super();
super.registerColumnType(Types.JAVA_OBJECT, "jsonb");
}
}

View File

@ -19,22 +19,14 @@
package org.libreccm.l10n;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Field;
import org.libreccm.l10n.jaxb.LocalizedStringValuesAdapter;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Embeddable;
import javax.persistence.FetchType;
import javax.persistence.Lob;
import javax.persistence.MapKeyColumn;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
@ -45,31 +37,38 @@ import java.util.Set;
import static org.libreccm.l10n.L10NConstants.L10N_XML_NS;
import org.hibernate.annotations.Type;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonObjectBuilder;
import javax.persistence.Column;
/**
* A helper class for localisable string properties. This class is declared as
* embeddable, so that it can be used in every other entity. The localised
* A helper class for localisable string properties. For using this class a
* Hibernate User type is provided ({@link LocalizedStringType} which maps
* instances of this class to a JSONB column in the database. The localised
* values are stored in a {@link Map}. This class is <em>not</em> designed to be
* overwritten. But because it is an entity class we can't make the class final.
*
* To use this class you must annoate this property with the {@link Type}
* annotation provided by hibernate. The {@link Column} annotation can used
* a usual to set the name of the database column. Example
*
* <pre>
* @Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
* </pre>
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Embeddable
@XmlRootElement(name = "localized-string", namespace = L10N_XML_NS)
@XmlAccessorType(XmlAccessType.FIELD)
public class LocalizedString implements Serializable {
private static final long serialVersionUID = 7378282657084330425L;
/**
* The localised values of the string.
*/
@ElementCollection(fetch = FetchType.LAZY)
@MapKeyColumn(name = "LOCALE")
@Column(name = "LOCALIZED_VALUE")
@Basic
@Lob
@Type(type = "org.hibernate.type.TextType")
@Field
@XmlElement(name = "values", namespace = L10N_XML_NS)
@XmlJavaTypeAdapter(LocalizedStringValuesAdapter.class)
private Map<Locale, String> values;
@ -202,6 +201,41 @@ public class LocalizedString implements Serializable {
return obj instanceof LocalizedString;
}
public static LocalizedString fromJson(final JsonObject jsonObject) {
final LocalizedString localizedString = new LocalizedString();
jsonObject
.entrySet()
.stream()
.forEach(
entry -> localizedString.addValue(
new Locale(entry.getKey()),
jsonObject.getString(entry.getKey())
)
);
return localizedString;
}
public JsonObjectBuilder buildJson() {
final JsonObjectBuilder builder = Json.createObjectBuilder();
values
.entrySet()
.stream()
.forEach(
entry -> builder.add(
entry.getKey().toString(), entry.getValue()
)
);
return builder;
}
public JsonObject toJson() {
return buildJson().build();
}
@Override
public String toString() {
return String.format(

View File

@ -0,0 +1,45 @@
/*
* Copyright (C) 2020 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.libreccm.l10n;
import org.libreccm.hibernate.AbstractCcmJsonUserType;
import javax.json.JsonReader;
import javax.json.JsonWriter;
/**
* Hibernate User type mapping instances of {@link LocalizedString} to a JSON.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class LocalizedStringType extends AbstractCcmJsonUserType {
@Override
protected Object nullSafeGet(final JsonReader jsonReader) {
return LocalizedString.fromJson(jsonReader.readObject());
}
@Override
protected void nullSafeSet(
final Object value, final JsonWriter jsonWriter
) {
jsonWriter.writeObject(((LocalizedString) value).toJson());
}
}

View File

@ -18,6 +18,7 @@
*/
package org.libreccm.pagemodel;
import org.hibernate.annotations.Type;
import org.libreccm.core.CoreConstants;
import org.libreccm.l10n.LocalizedString;
import org.libreccm.web.CcmApplication;
@ -33,9 +34,7 @@ import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@ -45,7 +44,6 @@ import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@ -225,27 +223,15 @@ public class PageModel implements Serializable {
* The localised title of this {@code PageModel} (shown in the
* administration UI),
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "PAGE_MODEL_TITLES",
schema = CoreConstants.DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PAGE_MODEL_ID")
}))
@Column(name = "TITLE")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString title;
/**
* A description of this {@code PageModel} describing its purpose.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "PAGE_MODEL_DESCRIPTIONS",
schema = CoreConstants.DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "PAGE_MODEL_ID")
}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
/**

View File

@ -154,7 +154,7 @@ public class ChallengeManager {
submittedToken,
OneTimeAuthTokenPurpose.EMAIL_VERIFICATION)) {
user.getPrimaryEmailAddress().setVerified(true);
user.setPrimaryEmailAddressVerified(true);
userRepository.save(user);
} else {
@ -344,7 +344,7 @@ public class ChallengeManager {
.getURL());
final ParameterMap params = new ParameterMap();
params.setParameter("email", user.getPrimaryEmailAddress().getAddress());
params.setParameter("email", user.getPrimaryEmailAddress());
params.setParameter("token", token.getToken());
values.put("full_link",
URL.there(request,
@ -505,7 +505,7 @@ public class ChallengeManager {
final KernelConfig kernelConfig = configurationManager
.findConfiguration(KernelConfig.class);
final Mail mail = new Mail(user.getPrimaryEmailAddress().getAddress(),
final Mail mail = new Mail(user.getPrimaryEmailAddress(),
kernelConfig.getSystemEmailAddress(),
subject);
mail.setBody(text);

View File

@ -29,6 +29,7 @@ import org.libreccm.workflow.TaskAssignment;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
import java.io.Serializable;
@ -39,16 +40,12 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs;
@ -182,16 +179,10 @@ public class Role implements Serializable, Exportable {
/**
* An optional description for a role.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "ROLE_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "ROLE_ID")
}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
@XmlElement(name = "description", namespace = CORE_XML_NS)
private LocalizedString description = new LocalizedString();
private LocalizedString description;
/**
* All memberships of the roles.
@ -200,7 +191,7 @@ public class Role implements Serializable, Exportable {
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS)
@JsonIgnore
private Set<RoleMembership> memberships = new HashSet<>();
private Set<RoleMembership> memberships;
/**
* Permissions granted to the role.
@ -210,14 +201,18 @@ public class Role implements Serializable, Exportable {
@XmlElementWrapper(name = "permissions", namespace = CORE_XML_NS)
@XmlElement(name = "permission", namespace = CORE_XML_NS)
@JsonIgnore
private List<Permission> permissions = new ArrayList<>();
private List<Permission> permissions;
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY)
@JsonIgnore
private List<TaskAssignment> assignedTasks = new ArrayList<>();
private List<TaskAssignment> assignedTasks;
public Role() {
super();
description = new LocalizedString();
memberships = new HashSet<>();
permissions = new ArrayList<>();
assignedTasks = new ArrayList<>();
}
public long getRoleId() {
@ -254,7 +249,7 @@ public class Role implements Serializable, Exportable {
}
protected void setMemberships(final Set<RoleMembership> memberships) {
this.memberships = memberships;
this.memberships = new HashSet<>(memberships);
}
protected void addMembership(final RoleMembership membership) {
@ -274,7 +269,7 @@ public class Role implements Serializable, Exportable {
}
protected void setPermissions(final List<Permission> permissions) {
this.permissions = permissions;
this.permissions = new ArrayList<>(permissions);
}
protected void addPermission(final Permission permission) {
@ -294,7 +289,7 @@ public class Role implements Serializable, Exportable {
}
protected void setAssignedTasks(final List<TaskAssignment> assignedTasks) {
this.assignedTasks = assignedTasks;
this.assignedTasks = new ArrayList<>(assignedTasks);
}
public void addAssignedTask(final TaskAssignment taskAssignment) {
@ -306,7 +301,7 @@ public class Role implements Serializable, Exportable {
}
public LocalizedString getDescription() {
return this.description;
return description;
}
public void setDescription(final LocalizedString description) {

View File

@ -85,9 +85,9 @@ public class SystemUsersSetup {
admin.setName(adminName);
admin.setFamilyName(adminFamilyName);
admin.setGivenName(adminGivenName);
final EmailAddress adminEmail = new EmailAddress();
adminEmail.setAddress(adminEmailAddress);
admin.setPrimaryEmailAddress(adminEmail);
admin.setPrimaryEmailAddress(adminEmailAddress);
admin.setPrimaryEmailAddressBouncing(false);
admin.setPrimaryEmailAddressVerified(true);
admin.setPassword(adminPassword);
final Role adminRole = new Role();
@ -119,9 +119,9 @@ public class SystemUsersSetup {
user.setName("public-user");
user.setFamilyName("LibreCCM");
user.setGivenName("Public User");
final EmailAddress email = new EmailAddress();
email.setAddress("public-user@localhost");
user.setPrimaryEmailAddress(email);
user.setPrimaryEmailAddress("public-user@localhost");
user.setPrimaryEmailAddressBouncing(false);
user.setPrimaryEmailAddressVerified(true);
entityManager.persist(user);
}

View File

@ -30,6 +30,7 @@ import java.io.Serializable;
import static org.libreccm.core.CoreConstants.CORE_XML_NS;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.core.api.JsonArrayCollector;
import org.libreccm.imexport.Exportable;
@ -43,22 +44,23 @@ import java.util.Set;
import javax.json.Json;
import javax.json.JsonArrayBuilder;
import javax.json.JsonObjectBuilder;
import javax.persistence.AssociationOverride;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Embedded;
import javax.persistence.ColumnResult;
import javax.persistence.Entity;
import javax.persistence.EntityResult;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.FieldResult;
import javax.persistence.NamedAttributeNode;
import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.NamedSubgraph;
import javax.persistence.OneToMany;
import javax.persistence.SqlResultSetMapping;
import javax.persistence.SqlResultSetMappings;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@ -76,43 +78,45 @@ import javax.xml.bind.annotation.XmlTransient;
@Entity
@Table(name = "USERS", schema = DB_SCHEMA)
@NamedQueries({
@NamedQuery(name = "User.findByUuid",
query = "SELECT u FROM User u WHERE u.uuid = :uuid"),
@NamedQuery(name = "User.findByName",
query = "SELECT u FROM User u WHERE u.name = :name "
+ "ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address"),
@NamedQuery(
name = "User.findByUuid",
query = "SELECT u FROM User u WHERE u.uuid = :uuid"
),
@NamedQuery(
name = "User.findByName",
query = "SELECT u FROM User u WHERE u.name = :name "
+ "ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName"
),
@NamedQuery(name = "User.countByName",
query = "SELECT COUNT(u) FROM User u WHERE u.name = :name"),
@NamedQuery(name = "User.findByEmailAddress",
query = "SELECT u FROM User u WHERE "
+ "u.primaryEmailAddress.address = :emailAddress "
+ "u.primaryEmailAddress = :emailAddress "
+ "ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address"),
+ " u.primaryEmailAddress"),
@NamedQuery(name = "User.countByPrimaryEmailAddress",
query = "SELECT COUNT(u) FROM User u "
+ "WHERE u.primaryEmailAddress.address = :emailAddress"),
+ "WHERE u.primaryEmailAddress = :emailAddress"),
@NamedQuery(
name = "User.filterByNameAndEmail",
query = "SELECT u FROM User u WHERE "
+ "LOWER(u.name) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.givenName) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.familyName) LIKE CONCAT(LOWER(:term), '%') "
+ "OR LOWER(u.primaryEmailAddress.address) LIKE CONCAT('%', LOWER(:term), '%') "
+ "ORDER BY u.name,"
+ "OR LOWER(u.familyName) LIKE CONCAT(LOWER(:term), '%')"
+ "ORDER BY u.name,"
+ "u.familyName, "
+ "u.givenName, "
+ "u.primaryEmailAddress.address"),
+ "u.givenName"
),
@NamedQuery(
name = "User.findAllOrderedByUsername",
query = "SELECT u FROM User u ORDER BY u.name, "
+ " u.familyName, "
+ " u.givenName, "
+ " u.primaryEmailAddress.address"),
+ " u.primaryEmailAddress"),
@NamedQuery(name = "User.findByGroup",
query = "SELECT u FROM User u "
+ "JOIN u.groupMemberships m "
@ -170,26 +174,23 @@ public class User extends Party implements Serializable, Exportable {
/**
* The primary email address of the user.
*/
@Embedded
@AssociationOverride(
name = "USER_PRIMARY_EMAIL_ADDRESSES",
joinTable = @JoinTable(name = "USER_PRIMARY_EMAIL_ADDRESSES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_ID")
}))
@Column(name = "PRIMARY_EMAIL_ADDRESS")
@NotNull
@XmlElement(name = "primary-email-address", namespace = CORE_XML_NS)
private EmailAddress primaryEmailAddress;
private String primaryEmailAddress;
@Column(name = "PRIMARY_EMAIL_ADDRESS_BOUNCING")
private boolean primaryEmailAddressBouncing;
@Column(name = "PRIMARY_EMAIL_ADDRESS_VERIFIED")
private boolean primaryEmailAddressVerified;
/**
* Additional email addresses of the user.
*/
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name = "USER_EMAIL_ADDRESSES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "USER_ID")})
@Column(name = "EMAIL_ADDRESSES")
@Type(type = "org.libreccm.core.EmailAddressListType")
@Deprecated
@XmlElementWrapper(name = "email-addresses", namespace = CORE_XML_NS)
@XmlElement(name = "email-address", namespace = CORE_XML_NS)
private List<EmailAddress> emailAddresses;
@ -250,14 +251,31 @@ public class User extends Party implements Serializable, Exportable {
this.familyName = familyName;
}
public EmailAddress getPrimaryEmailAddress() {
public String getPrimaryEmailAddress() {
return primaryEmailAddress;
}
public void setPrimaryEmailAddress(final EmailAddress primaryEmailAddress) {
public void setPrimaryEmailAddress(final String primaryEmailAddress) {
this.primaryEmailAddress = primaryEmailAddress;
}
public boolean isPrimaryEmailAddressBouncing() {
return primaryEmailAddressBouncing;
}
public void setPrimaryEmailAddressBouncing(final boolean bouncing) {
primaryEmailAddressBouncing = bouncing;
}
public boolean isPrimaryEmailAddressVerified() {
return primaryEmailAddressVerified;
}
public void setPrimaryEmailAddressVerified(final boolean verified) {
primaryEmailAddressVerified = verified;
}
@Deprecated
public List<EmailAddress> getEmailAddresses() {
if (emailAddresses == null) {
return null;
@ -266,6 +284,7 @@ public class User extends Party implements Serializable, Exportable {
}
}
@Deprecated
protected void setEmailAddresses(final List<EmailAddress> emailAddresses) {
this.emailAddresses = new ArrayList<>(emailAddresses);
}
@ -363,36 +382,39 @@ public class User extends Party implements Serializable, Exportable {
@Override
public JsonObjectBuilder buildJson() {
final JsonArrayBuilder emailAddressesArrayBuilder = Json.createArrayBuilder();
final JsonArrayBuilder emailAddressesArrayBuilder = Json
.createArrayBuilder();
emailAddresses
.stream()
.map(EmailAddress::buildJson)
.forEach(emailAddressesArrayBuilder::add);
return super
.buildJson()
.add("givenName", givenName)
.add("familyName", familyName)
.add("primaryEmailAddress", primaryEmailAddress.buildJson())
.add(
"emailAddresses",
emailAddresses
.stream()
.map(EmailAddress::buildJson)
.map(JsonObjectBuilder::build)
.collect(new JsonArrayCollector())
)
.add("banned", banned)
.add("passwordResetRequired", passwordResetRequired)
.add(
"groupMemberships",
groupMemberships
.stream()
.map(GroupMembership::buildJson)
.map(JsonObjectBuilder::build)
.collect(new JsonArrayCollector())
);
.add("primaryEmailAddress", primaryEmailAddress)
.add("primaryEmailAddressBouncing", primaryEmailAddressBouncing)
.add("primaryEmailAddressVerified", primaryEmailAddressVerified)
.add(
"emailAddresses",
emailAddresses
.stream()
.map(EmailAddress::buildJson)
.map(JsonObjectBuilder::build)
.collect(new JsonArrayCollector())
)
.add("banned", banned)
.add("passwordResetRequired", passwordResetRequired)
.add(
"groupMemberships",
groupMemberships
.stream()
.map(GroupMembership::buildJson)
.map(JsonObjectBuilder::build)
.collect(new JsonArrayCollector())
);
}
@Override

View File

@ -94,10 +94,9 @@ public class UserManager implements Serializable {
user.setGivenName(givenName);
user.setFamilyName(familyName);
user.setName(name);
final EmailAddress email = new EmailAddress();
email.setAddress(emailAddress);
user.setPrimaryEmailAddress(email);
email.setVerified(true);
user.setPrimaryEmailAddress(emailAddress);
user.setPrimaryEmailAddressBouncing(false);
user.setPrimaryEmailAddressVerified(true);
if (password == null) {
user.setPassword(null);
} else {
@ -131,7 +130,7 @@ public class UserManager implements Serializable {
final KernelConfig kernelConfig = confManager.findConfiguration(
KernelConfig.class);
if (kernelConfig.emailIsPrimaryIdentifier()) {
userIdentifier = user.getPrimaryEmailAddress().getAddress();
userIdentifier = user.getPrimaryEmailAddress();
} else {
userIdentifier = user.getName();
}

View File

@ -18,8 +18,11 @@
*/
package org.libreccm.security;
import org.hibernate.Session;
import org.libreccm.core.AbstractEntityRepository;
import org.libreccm.core.CoreConstants;
import org.libreccm.core.EmailAddressListType;
import org.libreccm.core.EmailAddressType;
import javax.enterprise.context.RequestScoped;
import javax.persistence.EntityGraph;
@ -30,6 +33,9 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
import javax.persistence.NoResultException;
import javax.persistence.Query;
/**
* Repository for user objects.
*
@ -49,7 +55,7 @@ public class UserRepository extends AbstractEntityRepository<Long, User> {
public String getIdAttributeName() {
return "partyId";
}
@Override
public Long getIdOfEntity(final User entity) {
return entity.getPartyId();
@ -70,7 +76,7 @@ public class UserRepository extends AbstractEntityRepository<Long, User> {
return getSingleResult(query);
}
/**
* Finds a user by its user name.
*
@ -138,11 +144,15 @@ public class UserRepository extends AbstractEntityRepository<Long, User> {
* is no matching user {@code null} is returned.
*/
public Optional<User> findByEmailAddress(final String emailAddress) {
final TypedQuery<User> query = getEntityManager().createNamedQuery(
"User.findByEmailAddress", User.class);
query.setParameter("emailAddress", emailAddress);
return getSingleResult(query);
try {
return getSingleResult(
getEntityManager()
.createNamedQuery("User.findByEmailAddress", User.class)
.setParameter("emailAddress", emailAddress)
);
} catch (NoResultException ex) {
return Optional.empty();
}
}
public Optional<User> findByEmailAddress(final String emailAddress,
@ -206,12 +216,10 @@ public class UserRepository extends AbstractEntityRepository<Long, User> {
@Override
protected void initNewEntity(final User entity) {
entity.setUuid(UUID.randomUUID().toString());
}
@AuthorizationRequired
@RequiresPrivilege(CoreConstants.PRIVILEGE_ADMIN)
@Transactional(Transactional.TxType.REQUIRED)

View File

@ -36,9 +36,9 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import javax.persistence.AssociationOverride;
import org.hibernate.annotations.Type;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@ -49,7 +49,6 @@ import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@ -147,25 +146,15 @@ public class Task implements Identifiable, Serializable {
/**
* A human readable, localisable label for the task.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "WORKFLOW_TASK_LABELS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "TASK_ID")}))
@Column(name = "LABEL")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString label;
/**
* A description of the task.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "WORKFLOW_TASK_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "TASK_ID")}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description;
/**

View File

@ -26,9 +26,7 @@ import org.libreccm.core.CcmObject;
import org.libreccm.core.Identifiable;
import org.libreccm.l10n.LocalizedString;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
@ -39,7 +37,6 @@ import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
@ -56,6 +53,7 @@ import java.util.Objects;
import static org.libreccm.core.CoreConstants.DB_SCHEMA;
import org.hibernate.annotations.Type;
import org.libreccm.imexport.Exportable;
/**
@ -116,26 +114,15 @@ public class Workflow implements Identifiable, Serializable, Exportable {
/**
* Human readable name of the workflow.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "WORKFLOW_NAMES",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "WORKFLOW_ID")}))
@Column(name = "NAME")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString name = new LocalizedString();
/**
* Description of the workflow.
*/
@Embedded
@AssociationOverride(
name = "values",
joinTable = @JoinTable(name = "WORKFLOW_DESCRIPTIONS",
schema = DB_SCHEMA,
joinColumns = {
@JoinColumn(name = "WORKFLOW_ID")
}))
@Column(name = "DESCRIPTION")
@Type(type = "org.libreccm.l10n.LocalizedStringType")
private LocalizedString description = new LocalizedString();
/**

View File

@ -0,0 +1,13 @@
ALTER TABLE ccm_core.users ADD COLUMN primary_email_address varchar(255);
ALTER TABLE ccm_core.users ADD COLUMN primary_email_address_bouncing boolean;
ALTER TABLE ccm_core.users ADD COLUMN primary_email_address_verified boolean;
ALTER TABLE ccm_core.users ADD COLUMN email_addresses JSONB;
UPDATE ccm_core.users
SET primary_email_address = email_address,
primary_email_address_bouncing = bouncing,
primary_email_address_verified = verified
);
DROP TABLE ccm_core.user_email_addresses;
ALTER TABLE ccm_core.users DROP COLUMN email_address;
ALTER TABLE ccm_core.users DROP COLUMN bouncing;
ALTER TABLE ccm_core.users DROP COLUMN verified;

View File

@ -70,8 +70,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -147,6 +147,16 @@ public class CategoryManagerTest {
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",
@ -397,8 +407,7 @@ public class CategoryManagerTest {
@UsingDataSet("datasets/org/libreccm/categorization/CategoryManagerTest"
+ "/data.yml")
@ShouldMatchDataSet(
excludeColumns = {
},
excludeColumns = {},
value = "datasets/org/libreccm/categorization/CategoryManagerTest"
+ "/after-remove-obj-from-category.yml"
)
@ -751,7 +760,7 @@ public class CategoryManagerTest {
/**
* Tries to retrieve the index object from several categories and verifies
* that the expected object is returned by null null null null null null
* null null {@link CategoryManager#getIndexObject(org.libreccm.categorization.Category).
* null null null {@link CategoryManager#getIndexObject(org.libreccm.categorization.Category).
*/
@Test
@UsingDataSet(

View File

@ -65,8 +65,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -133,6 +133,16 @@ public class CategoryRepositoryTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",
@ -250,7 +260,7 @@ public class CategoryRepositoryTest {
final Domain domain = domainRepo.findByDomainKey("test").get();
final Optional<Category> doesNotExist = categoryRepo.findByPath(domain,
"/does/not/exist");
"/does/not/exist");
assertThat(doesNotExist.isPresent(), is(false));
}

View File

@ -62,8 +62,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -124,6 +124,16 @@ public class ConfigurationManagerTest {
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",

View File

@ -67,8 +67,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -105,15 +105,21 @@ public class CcmObjectRepositoryTest {
.create(WebArchive.class,
"LibreCCM-org.libreccm.core.CcmObjectRepositoryTest.war")
.addPackage(org.libreccm.auditing.CcmRevision.class.getPackage())
.addPackage(org.libreccm.categorization.Categorization.class
.getPackage())
.addPackage(org.libreccm.configuration.Configuration.class.
getPackage())
.addPackage(org.libreccm.core.CcmObject.class.getPackage())
.addPackage(org.libreccm.jpa.EntityManagerProducer.class
.getPackage())
.addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
.getPackage())
.addPackage(
org.libreccm.categorization.Categorization.class.getPackage()
)
.addPackage(
org.libreccm.configuration.Configuration.class.getPackage()
)
.addPackage(
org.libreccm.core.CcmObject.class.getPackage()
)
.addPackage(
org.libreccm.jpa.EntityManagerProducer.class.getPackage()
)
.addPackage(
org.libreccm.jpa.utils.MimeTypeConverter.class.getPackage()
)
.addPackage(org.libreccm.l10n.LocalizedString.class.getPackage())
.addClass(org.libreccm.modules.CcmModule.class)
.addClass(org.libreccm.modules.ModuleEvent.class)
@ -122,17 +128,30 @@ public class CcmObjectRepositoryTest {
.addClass(org.libreccm.modules.UnInstallEvent.class)
.addClass(org.libreccm.modules.ShutdownEvent.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addPackage(org.libreccm.security.PermissionChecker.class
.getPackage())
.addPackage(
org.libreccm.security.PermissionChecker.class.getPackage()
)
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addPackage(org.libreccm.testutils.EqualsVerifier.class.
getPackage())
.addPackage(org.libreccm.tests.categories.IntegrationTest.class
.getPackage())
.addPackage(
org.libreccm.testutils.EqualsVerifier.class.getPackage()
)
.addPackage(
org.libreccm.tests.categories.IntegrationTest.class.getPackage()
)
.addPackage(org.libreccm.web.CcmApplication.class.getPackage())
.addPackage(org.libreccm.workflow.Workflow.class.getPackage())
.addPackage(com.arsdigita.kernel.security.SecurityConfig.class
.getPackage())
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")
@ -358,7 +377,8 @@ public class CcmObjectRepositoryTest {
@Test(expected = NullPointerException.class)
@ShouldThrowException(NullPointerException.class)
@UsingDataSet("datasets/org/libreccm/core/CcmObjectRepositoryTest/data.yml")
@ShouldMatchDataSet("datasets/org/libreccm/core/CcmObjectRepositoryTest/data.yml")
@ShouldMatchDataSet(
"datasets/org/libreccm/core/CcmObjectRepositoryTest/data.yml")
@InSequence(700)
public void deleteNullValue() {
ccmObjectRepository.delete(null);

View File

@ -72,8 +72,8 @@ import static org.junit.Assert.*;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -82,20 +82,26 @@ public class GroupImportTest {
private static final String IMPORT_MANIFEST_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupImportTest"
+ "/ccm-export.json";
private static final String IMPORT_GROUPS_TOC_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupImportTest"
+ "/org.libreccm.security.Group"
+ "/org.libreccm.security.Group.json";
private static final String IMPORT_DATA_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupImportTest"
+ "/org.libreccm.security.Group"
+ "/696592cd-db19-4aca-bb14-06490cfde243.json";
private static final String TMP_DIR = System.getProperty("java.io.tmpdir");
private static final String CCM_TESTS_DIR = TMP_DIR + "/ccm-tests";
private static final String IMPORTS_DIR = CCM_TESTS_DIR + "/imports";
private static final String GROUP_IMPORT_TEST_DIR = IMPORTS_DIR
+ "/org.libreccm.imexport.GroupImportTest";
private static final String IMPORT_DATA_DIR = GROUP_IMPORT_TEST_DIR
+ "/org.libreccm.security.Group";
@ -233,6 +239,16 @@ public class GroupImportTest {
.getPackage())
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("imports", "imports")

View File

@ -72,8 +72,8 @@ import static org.junit.Assert.*;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -82,23 +82,29 @@ public class GroupMembershipImportTest {
private static final String IMPORT_MANIFEST_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupMembershipImportTest"
+ "/ccm-export.json";
private static final String IMPORT_GROUPMEMBERSHIP_TOC_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupMembershipImportTest"
+ "/org.libreccm.security.GroupMembership"
+ "/org.libreccm.security.GroupMembership.json";
private static final String IMPORT_GROUPMEMBERSHIP_DATA_SOURCE = "/imports"
+ "/org.libreccm.imexport.GroupMembershipImportTest"
+ "/org.libreccm.security.GroupMembership"
+ "/f8ac4073-447e-4bd6-ac96-3bf92bdc8ce7.json";
private static final String TMP_DIR = System.getProperty("java.io.tmpdir");
private static final String CCM_TESTS_DIR = TMP_DIR + "/ccm-tests";
private static final String IMPORTS_DIR = CCM_TESTS_DIR + "/imports";
private static final String GROUPMEMBERSHIP_IMPORT_TEST_DIR = IMPORTS_DIR
+ "/org.libreccm.imexport.GroupMembershipImportTest";
private static final String IMPORT_GROUPMEMBERSHIP_DATA_DIR
= GROUPMEMBERSHIP_IMPORT_TEST_DIR
+ "/org.libreccm.security.GroupMembership";
= GROUPMEMBERSHIP_IMPORT_TEST_DIR
+ "/org.libreccm.security.GroupMembership";
@Inject
private ConfigurationManager confManager;
@ -157,7 +163,7 @@ public class GroupMembershipImportTest {
final Path groupMembershipsTocTargetPath = importGroupMembershipDataPath
.resolve("org.libreccm.security.GroupMembership.json");
final Path groupMembership1DataTargetPath
= importGroupMembershipDataPath
= importGroupMembershipDataPath
.resolve("f8ac4073-447e-4bd6-ac96-3bf92bdc8ce7.json");
copy(manifestInputStream, manifestTargetPath);
@ -237,6 +243,16 @@ public class GroupMembershipImportTest {
.getPackage())
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("imports", "imports")

View File

@ -72,8 +72,8 @@ import static org.junit.Assert.*;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -82,20 +82,26 @@ public class UserImportTest {
private static final String IMPORT_MANIFEST_SOURCE = "/imports"
+ "/org.libreccm.imexport.UserImportTest"
+ "/ccm-export.json";
private static final String IMPORT_USERS_TOC_SOURCE = "/imports"
+ "/org.libreccm.imexport.UserImportTest"
+ "/org.libreccm.security.User"
+ "/org.libreccm.security.User.json";
private static final String IMPORT_DATA_SOURCE = "/imports"
+ "/org.libreccm.imexport.UserImportTest"
+ "/org.libreccm.security.User"
+ "/7cb9aba4-8071-4f27-af19-096e1473d050.json";
private static final String TMP_DIR = System.getProperty("java.io.tmpdir");
private static final String CCM_TESTS_DIR = TMP_DIR + "/ccm-tests";
private static final String IMPORTS_DIR = CCM_TESTS_DIR + "/imports";
private static final String USER_IMPORT_TEST_DIR = IMPORTS_DIR
+ "/org.libreccm.imexport.UserImportTest";
private static final String IMPORT_DATA_DIR = USER_IMPORT_TEST_DIR
+ "/org.libreccm.security.User";
@ -232,6 +238,16 @@ public class UserImportTest {
.getPackage())
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("imports", "imports")

View File

@ -46,7 +46,6 @@ import static org.libreccm.testutils.DependenciesHelpers.*;
import org.jboss.arquillian.persistence.CleanupUsingScript;
import org.jboss.arquillian.persistence.TestExecutionPhase;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -55,8 +54,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -102,6 +101,16 @@ public class ConfigurationLoaderTest {
.addPackage(org.libreccm.testutils.EqualsVerifier.class.
getPackage())
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")
@ -118,7 +127,7 @@ public class ConfigurationLoaderTest {
@Test
@ShouldMatchDataSet(
value = "datasets/org/libreccm/modules/ConfigurationLoaderTest/"
+ "after-load.yml",
+ "after-load.xml",
excludeColumns = {"setting_id", "entry_id"})
public void loadConfiguration() {
final ConfigurationLoader confLoader = new ConfigurationLoader(

View File

@ -46,7 +46,7 @@ public class DatasetsTest extends DatasetsVerifier {
@Parameterized.Parameters(name = "Dataset {0}")
public static Collection<String> data() {
return Arrays.asList(new String[]{
"/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml",});
"/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.xml",});
}
public DatasetsTest(final String datasetPath) {
@ -60,7 +60,7 @@ public class DatasetsTest extends DatasetsVerifier {
@Override
public DatasetType getDatasetType() {
return YAML;
return FLAT_XML;
}
@BeforeClass

View File

@ -113,6 +113,12 @@ public class DependencyTreeManagerCycleTest {
org.libreccm.modules.dependencytree.test.cycle.TestModuleC.class)
.addPackage(org.libreccm.pagemodel.PageModel.class.getPackage())
.addClass(org.libreccm.web.ApplicationType.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addAsLibraries(getModuleDependencies())
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsResource(

View File

@ -127,6 +127,12 @@ public class DependencyTreeManagerTest {
// .addClass(org.libreccm.portation.Portable.class)
.addPackage(org.libreccm.pagemodel.PageModel.class.getPackage())
.addClass(org.libreccm.web.ApplicationType.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addAsLibraries(getModuleDependencies())
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
.addAsResource(

View File

@ -133,6 +133,16 @@ public class AuthorizationInterceptorTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.util.UncheckedWrapperException.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -136,6 +136,16 @@ public class ChallengeManagerTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",

View File

@ -126,6 +126,16 @@ public class GroupManagerTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -126,6 +126,16 @@ public class GroupRepositoryTest {
.addPackage(org.libreccm.tests.categories.IntegrationTest.class
.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",

View File

@ -65,25 +65,19 @@ public class ListContainsTest {
user1.setName("user1");
user1.setGivenName("User");
user1.setFamilyName("One");
final EmailAddress user1mail = new EmailAddress();
user1mail.setAddress("user.one@example.org");
user1.setPrimaryEmailAddress(user1mail);
user1.setPrimaryEmailAddress("user.one@example.org");
final User user2 = new User();
user2.setName("user2");
user2.setGivenName("User");
user2.setFamilyName("Two");
final EmailAddress user2mail = new EmailAddress();
user2mail.setAddress("user.two@example.org");
user2.setPrimaryEmailAddress(user1mail);
user2.setPrimaryEmailAddress("user.two@example.org");
final User user3 = new User();
user3.setName("user3");
user3.setGivenName("User");
user3.setFamilyName("Three");
final EmailAddress user3mail = new EmailAddress();
user3mail.setAddress("user.three@example.org");
user3.setPrimaryEmailAddress(user1mail);
user3.setPrimaryEmailAddress("user.three@example.org");
final List<User> users = new ArrayList<>();
users.add(user1);

View File

@ -130,6 +130,16 @@ public class OneTimeAuthManagerTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addClass(com.arsdigita.kernel.security.SecurityConfig.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",

View File

@ -63,8 +63,8 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
@ -131,6 +131,16 @@ public class PartyRepositoryTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",
@ -211,15 +221,12 @@ public class PartyRepositoryTest {
public void saveNewParty() {
final User mmuster = new User();
final EmailAddress emailAddress = new EmailAddress();
emailAddress.setAddress("max.mustermann@example.org");
emailAddress.setBouncing(false);
emailAddress.setVerified(true);
mmuster.setName("mmuster");
mmuster.setGivenName("Max");
mmuster.setFamilyName("Mustermann");
mmuster.setPrimaryEmailAddress(emailAddress);
mmuster.setPrimaryEmailAddress("max.mustermann@example.org");
mmuster.setPrimaryEmailAddressBouncing(false);
mmuster.setPrimaryEmailAddressVerified(true);
mmuster.setPassword(
"$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==");
mmuster.setPasswordResetRequired(false);

View File

@ -134,6 +134,16 @@ public class PermissionCheckerTest {
.addPackage(com.arsdigita.kernel.security.SecurityConfig.class
.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -135,6 +135,16 @@ public class PermissionManagerTest {
.getPackage())
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -123,6 +123,16 @@ public class RoleManagerTest {
.getPackage())
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -69,15 +69,17 @@ import org.jboss.arquillian.persistence.TestExecutionPhase;
@RunWith(Arquillian.class)
@PersistenceTest
@Transactional(TransactionMode.COMMIT)
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
@CreateSchema({"001_create_schema.sql",
"002_create_ccm_core_tables.sql",
"003_init_hibernate_sequence.sql"})
@CleanupUsingScript(value = {"999_cleanup.sql"},
phase = TestExecutionPhase.BEFORE)
public class RoleRepositoryTest {
private static final String ADMINISTRATOR = "administrator";
private static final String USER = "user";
private static final String READER = "reader";
@Inject
@ -119,7 +121,7 @@ public class RoleRepositoryTest {
.getPackage())
.addPackage(
org.libreccm.configuration.ConfigurationManager.class
.getPackage())
.getPackage())
.addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
addPackage(org.libreccm.web.CcmApplication.class.getPackage())
.addPackage(org.libreccm.workflow.Workflow.class.getPackage())
@ -132,6 +134,16 @@ public class RoleRepositoryTest {
.addPackage(org.libreccm.tests.categories.IntegrationTest.class
.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",
@ -204,7 +216,8 @@ public class RoleRepositoryTest {
@UsingDataSet("datasets/org/libreccm/security/RoleRepositoryTest/data.yml")
@InSequence(200)
public void findRoleByName() {
final Optional<Role> administrator = roleRepository.findByName(ADMINISTRATOR);
final Optional<Role> administrator = roleRepository.findByName(
ADMINISTRATOR);
final Optional<Role> user = roleRepository.findByName(USER);
final Optional<Role> reader = roleRepository.findByName(READER);

View File

@ -149,7 +149,17 @@ public class SecuredCollectionTest {
.addPackage(com.arsdigita.kernel.KernelConfig.class.getPackage())
.addPackage(com.arsdigita.kernel.security.SecurityConfig.class
.getPackage())
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -152,6 +152,16 @@ public class SecuredIteratorTest {
.getPackage())
.addPackage(com.arsdigita.kernel.KernelConfig.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -125,6 +125,16 @@ public class ShiroTest {
.getPackage())
.addClass(org.libreccm.security.authorization.LabBean.class)
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -126,6 +126,16 @@ public class UserManagerTest {
.getPackage())
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("test-persistence.xml",
"META-INF/persistence.xml")

View File

@ -131,6 +131,16 @@ public class UserRepositoryTest {
.addClass(com.arsdigita.kernel.KernelConfig.class)
.addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage())
.addClass(org.libreccm.imexport.Exportable.class)
.addClass(
org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory.class
)
.addClass(
org.libreccm.testutils.dbunit.PgSqlJsonbType.class
)
.addClass(org.libreccm.hibernate.AbstractCcmJsonUserType.class)
.addClass(
org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect.class
)
.addAsLibraries(getModuleDependencies())
.addAsResource("configs/shiro.ini", "shiro.ini")
.addAsResource("test-persistence.xml",
@ -253,15 +263,12 @@ public class UserRepositoryTest {
public void saveNewUser() {
final User user = new User();
final EmailAddress emailAddress = new EmailAddress();
emailAddress.setAddress("jane.doe@example.org");
emailAddress.setBouncing(false);
emailAddress.setVerified(false);
user.setName("jane");
user.setGivenName("Jane");
user.setFamilyName("Doe");
user.setPrimaryEmailAddress(emailAddress);
user.setPrimaryEmailAddress("jane.doe@example.org");
user.setPrimaryEmailAddressBouncing(false);
user.setPrimaryEmailAddressVerified(false);
user.setPassword(
"$shiro1$SHA-512$500000$24lA090z7GKYr4VFlZ6t4A==$/heoTHPA5huT1UfJ8Q+waXEG6AjUKhFYLFrj7KW/l0/z9O+QkiZTtfPfbcPblgjcEvrROMEIoQY4Z65S7rFLQg==");
user.setPasswordResetRequired(false);
@ -282,11 +289,9 @@ public class UserRepositoryTest {
user.setPassword(
"$shiro1$SHA-512$500000$AH1llRaMHE8W31Q7VG6jsA==$XXgKeyDCsrN23NvszQ5wt+uViQUlVqTAM+05LrE7Bd9sc0eaJT8HlAGvSdY+rqTLbiGm9YS4pohzoUt1x3kmKg==");
final EmailAddress emailAddress = new EmailAddress();
emailAddress.setAddress("jd@example.com");
emailAddress.setBouncing(false);
emailAddress.setVerified(true);
user.setPrimaryEmailAddress(emailAddress);
user.setPrimaryEmailAddress("jd@example.com");
user.setPrimaryEmailAddressBouncing(false);
user.setPrimaryEmailAddressVerified(true);
shiro.getSystemUser().execute(() -> userRepository.save(user));
}

View File

@ -27,7 +27,7 @@
<extension qualifier="persistence-dbunit">
<property name="defaultDataSetFormat">json</property>
<property name="datatypeFactory">org.dbunit.ext.h2.H2DataTypeFactory</property>
<property name="datatypeFactory">org.libreccm.testutils.dbunit.CcmH2DataTypeFactory</property>
<property name="excludePoi">true</property>
<property name="qualifiedTableNames">true</property>
</extension>

View File

@ -26,7 +26,7 @@
<extension qualifier="persistence-dbunit">
<property name="defaultDataSetFormat">json</property>
<property name="datatypeFactory">org.dbunit.ext.postgresql.PostgresqlDataTypeFactory</property>
<property name="datatypeFactory">org.libreccm.testutils.dbunit.CcmPgSqlDataTypeFactory</property>
<property name="excludePoi">true</property>
<property name="qualifiedTableNames">true</property>
</extension>

View File

@ -1,7 +1,5 @@
DELETE FROM ccm_core.settings_string_list;
DELETE FROM ccm_core.settings_l10n_str_values;
DELETE FROM ccm_core.settings_enum_values;
DELETE FROM ccm_core.settings_enum_values;
@ -28,8 +26,6 @@ DELETE FROM ccm_core.one_time_auth_tokens;
DELETE FROM ccm_core.users;
DELETE FROM ccm_core.user_email_addresses;
DELETE FROM ccm_core.parties;
DELETE FROM ccm_core.ccm_roles;

View File

@ -26,6 +26,11 @@
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.id.new_generator_mappings" value="true"/>
<property name="hibernate.connection.autocommit" value="false" />
<property
name="hibernate.dialect"
value="org.libreccm.hibernate.dialects.LibreCcmPgSql9Dialect"
/>
<!--
Properties for Hibernate Envers
@ -33,7 +38,7 @@
when querying data than the DefaultStrategy
-->
<!--<property name="org.hibernate.envers.audit_strategy"
value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>-->
value="org.hibernate.envers.strategy.ValidityAuditStrategy"/>-->
</properties>
</persistence-unit>

View File

@ -84,30 +84,30 @@ ccm_core.users:
- party_id: 3000
given_name: public
family_name: user
email_address: public-user@localhost
primary_email_address: public-user@localhost
primary_email_address_bouncing: false
primary_email_address_verified: true
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 3100
given_name: Jane
family_name: Doe
email_address: jane.doe@example.org
primary_email_address: jane.doe@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 3200
given_name: Maria
family_name: Muster
email_address: mmuster@example.com
primary_email_address: mmuster@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
ccm_core.ccm_roles:

View File

@ -69,28 +69,28 @@ ccm_core.users:
- party_id: 100
given_name: public
family_name: user
email_address: public-user@localhost
primary_email_address: public-user@localhost
primary_email_address_bouncing: false
primary_email_address_verified: true
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 200
given_name: John
family_name: Doe
email_address: john.doe@example.org
primary_email_address: john.doe@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 300
given_name: Max
family_name: Mustermann
email_address: max.mustermann@example.org
primary_email_address: mmuster@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
ccm_core.ccm_roles:

View File

@ -59,28 +59,28 @@ ccm_core.users:
- party_id: 100
given_name: public
family_name: user
email_address: public-user@localhost
primary_email_address: public-user@localhost
primary_email_address_bouncing: false
primary_email_address_verified: true
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 200
given_name: John
family_name: Doe
email_address: john.doe@example.org
primary_email_address: john.doe@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
- party_id: 300
given_name: Max
family_name: Mustermann
email_address: max.mustermann@example.org
primary_email_address: mmuster@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
banned: false
bouncing: false
verified: true
password_reset_required: false
ccm_core.ccm_roles:

View File

@ -22,36 +22,36 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address: john.doe@example.com
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address: max.mustermann@example.org
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address: joe.public@example.com
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
primary_email_address_verified: true
ccm_core.groups:
# Group 1
- party_id: 100

View File

@ -22,36 +22,36 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address: john.doe@example.com
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address: max.mustermann@example.org
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address: joe.public@example.com
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
primary_email_address_verified: true
ccm_core.groups:
# Group 1
- party_id: 100

View File

@ -18,43 +18,43 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address: john.doe@example.com
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address: max.mustermann@example.org
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address: joe.public@example.com
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Jane Doe
- banned: false
bouncing: false
email_address: jane.doe@libreccm.example
primary_email_address_bouncing: false
primary_email_address: jane.doe@libreccm.example
family_name: Doe
given_name: Jane
party_id: 40
password: ofafodafa
password_reset_required: false
verified: true
primary_email_address_verified: true

View File

@ -14,33 +14,33 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address: john.doe@example.com
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address: max.mustermann@example.org
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
primary_email_address_verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address: joe.public@example.com
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
primary_email_address_verified: true

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<dataset>
<ccm_core.settings
dtype="LocalizedStringSetting"
setting_id="120"
configuration_class="org.libreccm.configuration.ExampleConfiguration"
name="title"
setting_value_localized_string='{"de": "Versuch", "en": "Test"}'
/>
<ccm_core.settings
dtype="BooleanSetting"
setting_id="100"
configuration_class="org.libreccm.configuration.ExampleConfiguration"
name="enabled"
setting_value_boolean="true"
/>
<ccm_core.settings
dtype="LongSetting"
setting_id="110"
configuration_class="org.libreccm.configuration.ExampleConfiguration"
name="itemsPerPage"
setting_value_long="100"
/>
</dataset>

View File

@ -1,23 +0,0 @@
ccm_core.settings:
- setting_id: 100
configuration_class: org.libreccm.configuration.ExampleConfiguration
name: enabled
setting_value_boolean: true
dtype: BooleanSetting
- setting_id: 110
configuration_class: org.libreccm.configuration.ExampleConfiguration
name: itemsPerPage
setting_value_long: 100
dtype: LongSetting
- setting_id: 120
configuration_class: org.libreccm.configuration.ExampleConfiguration
name: title
dtype: LocalizedStringSetting
ccm_core.settings_l10n_str_values:
- entry_id: 120
locale: de
localized_value: Versuch
- entry_id: 120
locale: en
localized_value: Test

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
</dataset>

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
</dataset>

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="true"
password_reset_required="false"
verified="false"/>
banned="false"
password_reset_required="false" />
</dataset>

View File

@ -31,20 +31,20 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
password_reset_required="false" />
</dataset>

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="true"
password_reset_required="false"
verified="false"/>
banned="false"
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -31,21 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="false"/>
password_reset_required="false" />
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="true"
password_reset_required="false"
verified="false"/>
banned="false"
password_reset_required="false" />
<ccm_core.one_time_auth_tokens
token_id="-100"

View File

@ -26,36 +26,36 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
ccm_core.groups:
# admins
- party_id: 40

View File

@ -26,36 +26,37 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
ccm_core.groups:
# admins
- party_id: 40

View File

@ -26,36 +26,36 @@ ccm_core.parties:
ccm_core.users:
# John Doe
- banned: false
bouncing: false
email_address: john.doe@example.com
primary_email_address: john.doe@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Doe
given_name: John
party_id: 10
# foo123
password: $shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA==
password_reset_required: false
verified: true
# Max Mustermann
- banned: false
bouncing: false
email_address: max.mustermann@example.org
primary_email_address: max.mustermann@example.org
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Mustermann
given_name: Max
party_id: 20
# foo123
password: $shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q==
password_reset_required: false
verified: true
# Joe Public
- banned: false
bouncing: false
email_address: joe.public@example.com
primary_email_address: joe.public@example.com
primary_email_address_bouncing: false
primary_email_address_verified: true
family_name: Public
given_name: Joe
party_id: 30
password: $shiro1$SHA-512$500000$RUCYXAQt+XzUmj3x8oG5gw==$qU+lX160Jc6sNUOI9X85wlf2lzn4/hLJNURtjmw9LOYJ7vAqUFFmhyNCMxpzuHIpzeMELr+A0XReoSmtcZnOOw==
password_reset_required: false
verified: true
ccm_core.groups:
# admins
- party_id: 40

View File

@ -31,21 +31,23 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
<ccm_core.one_time_auth_tokens token_id="-100"
user_id="-10"

View File

@ -31,19 +31,21 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
</dataset>

View File

@ -31,21 +31,23 @@
<ccm_core.users party_id="-10"
family_name="Doe"
given_name="John"
email_address="john.doe@example.com"
primary_email_address="john.doe@example.com"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$7xkDcZUN0/whJInHIvGsDw==$WhelBVmJU/cLV7lAkMOrE5B/mqCW0bUuid1WX+xBwzzAaekC5bYn9eeOFGJWhiDgmaC50ZCUmM96/iGsRoc4uA=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
<ccm_core.users party_id="-20"
family_name="Mustermann"
given_name="Max"
email_address="max.muster@example.org"
primary_email_address="max.muster@example.org"
primary_email_address_bouncing="false"
primary_email_address_verified="true"
password="$shiro1$SHA-512$500000$Y7CnccN1h25sR7KCElMOXg==$CVLWBhetodaEzzhDfGjRcCFZtSW02xOnjH7xhBx0lbxO66grKIt6LWmXoUhLEydce1JZ7cbzNLYOxIwwTeqi5Q=="
bouncing="false"
banned="false"
password_reset_required="false"
verified="true"/>
/>
<ccm_core.one_time_auth_tokens
token_id="-100"

Some files were not shown because too many files have changed in this diff Show More