Several bugfixes for export

git-svn-id: https://svn.libreccm.org/ccm/trunk@5714 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2018-10-25 09:50:46 +00:00
parent 66906c722b
commit 8769dc6b68
12 changed files with 85 additions and 40 deletions

View File

@ -23,6 +23,7 @@ import com.arsdigita.db.DbHelper;
import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectInstantiator; import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.kernel.ACSObjectInstantiator; import com.arsdigita.kernel.ACSObjectInstantiator;
import com.arsdigita.kernel.ResourceType;
import com.arsdigita.mimetypes.MimeType; import com.arsdigita.mimetypes.MimeType;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
import com.arsdigita.persistence.Session; import com.arsdigita.persistence.Session;

View File

@ -20,6 +20,8 @@ package com.arsdigita.kernel;
import com.arsdigita.developersupport.DeveloperSupport; import com.arsdigita.developersupport.DeveloperSupport;
import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectInstantiator;
import com.arsdigita.kernel.permissions.Permission;
import com.arsdigita.kernel.permissions.PermissionManager; import com.arsdigita.kernel.permissions.PermissionManager;
import com.arsdigita.kernel.permissions.PrivilegeDescriptor; import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
import com.arsdigita.persistence.DataObject; import com.arsdigita.persistence.DataObject;
@ -120,6 +122,26 @@ public class Initializer extends GenericInitializer {
return new Role(dobj); return new Role(dobj);
} }
} ); } );
evt.getFactory().registerInstantiator(
ResourceType.BASE_DATA_OBJECT_TYPE,
new DomainObjectInstantiator() {
@Override
protected DomainObject doNewInstance(final DataObject dataObject) {
return new ResourceType(dataObject);
}
});
evt.getFactory().registerInstantiator(
Permission.BASE_DATA_OBJECT_TYPE,
new DomainObjectInstantiator() {
@Override
protected DomainObject doNewInstance(final DataObject dataObject) {
return new Permission(dataObject);
}
});
/* Register URLFinders with the URLService */ /* Register URLFinders with the URLService */
// PackageInstance is the only kernel object type for which kernel // PackageInstance is the only kernel object type for which kernel

View File

@ -99,7 +99,7 @@ public class Permission extends DomainObject {
* *
* @see com.arsdigita.domain.DomainObject#DomainObject(DataObject) * @see com.arsdigita.domain.DomainObject#DomainObject(DataObject)
*/ */
protected Permission(DataObject data) { public Permission(DataObject data) {
super(data); super(data);
} }

View File

@ -3,6 +3,8 @@ package org.libreccm.categorization;
import com.arsdigita.categorization.Category; import com.arsdigita.categorization.Category;
import com.arsdigita.categorization.CategoryLocalization; import com.arsdigita.categorization.CategoryLocalization;
import com.arsdigita.categorization.CategoryLocalizationCollection; import com.arsdigita.categorization.CategoryLocalizationCollection;
import com.arsdigita.persistence.DataAssociation;
import com.arsdigita.persistence.DataAssociationCursor;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.fasterxml.jackson.core.JsonEncoding; import com.fasterxml.jackson.core.JsonEncoding;
@ -20,6 +22,8 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import static com.arsdigita.categorization.Category.*;
/** /**
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -42,14 +46,12 @@ public class CategoriesExporter extends AbstractDomainObjectsExporter<Category>
} }
@Override @Override
protected List<String> exportDomainObject(final Category domainObject, protected List<String> exportDomainObject(final Category category,
final Path targetDir) { final Path targetDir) {
final String uuid = generateUuid(domainObject); final String uuid = generateUuid(category);
final Path targetFilePath = targetDir final Path targetFilePath = generateTargetFilePath(targetDir, uuid);
.resolve("org.libreccm.categorization.Categorization")
.resolve(String.format("%s.json", uuid));
final File targetFile = targetFilePath.toFile(); final File targetFile = targetFilePath.toFile();
final JsonFactory jsonFactory = new JsonFactory(); final JsonFactory jsonFactory = new JsonFactory();
@ -63,9 +65,9 @@ public class CategoriesExporter extends AbstractDomainObjectsExporter<Category>
jsonGenerator.writeStringField("uuid", uuid); jsonGenerator.writeStringField("uuid", uuid);
jsonGenerator.writeStringField("uniqueId", uuid); jsonGenerator.writeStringField("uniqueId", uuid);
jsonGenerator.writeStringField("name", domainObject.getName()); jsonGenerator.writeStringField("name", category.getName());
final CategoryLocalizationCollection localizations = domainObject final CategoryLocalizationCollection localizations = category
.getCategoryLocalizationCollection(); .getCategoryLocalizationCollection();
final Map<Locale, String> titles = new HashMap<>(); final Map<Locale, String> titles = new HashMap<>();
final Map<Locale, String> descriptions = new HashMap<>(); final Map<Locale, String> descriptions = new HashMap<>();
@ -96,21 +98,22 @@ public class CategoriesExporter extends AbstractDomainObjectsExporter<Category>
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
jsonGenerator.writeBooleanField("enabled", jsonGenerator.writeBooleanField("enabled",
domainObject.isEnabled()); category.isEnabled());
jsonGenerator.writeBooleanField("visible", jsonGenerator.writeBooleanField("visible",
domainObject.isVisible()); category.isVisible());
jsonGenerator.writeBooleanField("abstractCategory", jsonGenerator.writeBooleanField("abstractCategory",
domainObject.isAbstract()); category.isAbstract());
jsonGenerator.writeStringField( if (hasParentCategory(category)) {
"parentCategory", jsonGenerator.writeStringField(
generateUuid(domainObject.getDefaultParentCategory())); "parentCategory",
jsonGenerator.writeNumberField( generateUuid(category.getDefaultParentCategory()));
"categoryOrder", jsonGenerator.writeNumberField(
domainObject "categoryOrder",
.getDefaultParentCategory() category
.getSortKey(domainObject) .getDefaultParentCategory()
.longValue()); .getSortKey(category));
}
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
@ -121,6 +124,18 @@ public class CategoriesExporter extends AbstractDomainObjectsExporter<Category>
throw new UncheckedWrapperException(ex); throw new UncheckedWrapperException(ex);
} }
} }
private boolean hasParentCategory(final Category category) {
final DataAssociationCursor cursor = ((DataAssociation) category
.get(PARENTS)).cursor();
cursor.addEqualsFilter("link.isDefault", Boolean.TRUE);
final boolean result = cursor.next();
cursor.close();
return result;
}
} }

View File

@ -37,8 +37,7 @@ public abstract class AbstractResourceTypesExporter<T extends ResourceType>
final Path targetDir) { final Path targetDir) {
final String uuid = generateUuid(domainObject); final String uuid = generateUuid(domainObject);
final Path targetFilePath = generateTargetFilePath( final Path targetFilePath = generateTargetFilePath(targetDir, uuid);
targetDir, exportsType().getName(), uuid);
final JsonFactory jsonFactory = new JsonFactory(); final JsonFactory jsonFactory = new JsonFactory();
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory

View File

@ -4,8 +4,6 @@ import com.arsdigita.kernel.ResourceType;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
import java.util.Arrays;
import java.util.List;
/** /**
* *
@ -29,6 +27,7 @@ public class ResourceTypesExporter
return "org.libreccm.core.ResourceType"; return "org.libreccm.core.ResourceType";
} }
@Override
protected void exportResourceTypeProperties( protected void exportResourceTypeProperties(
final ResourceType resourceType, final JsonGenerator jsonGenerator) { final ResourceType resourceType, final JsonGenerator jsonGenerator) {

View File

@ -143,7 +143,7 @@ public abstract class AbstractDomainObjectsExporter<T extends DomainObject> {
final DomainObject domainObject = DomainObjectFactory final DomainObject domainObject = DomainObjectFactory
.newInstance(dataObject); .newInstance(dataObject);
if (!(domainObject.getClass().isAssignableFrom(exportsType()))) { if (!(exportsType().isAssignableFrom(domainObject.getClass()))) {
throw new ExportException(String.format( throw new ExportException(String.format(
"DomainObject is not of type \"%s\" but of type \"%s\".", "DomainObject is not of type \"%s\" but of type \"%s\".",
exportsType().getName(), exportsType().getName(),

View File

@ -17,6 +17,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -31,7 +32,7 @@ public final class ExportManager {
private List<AbstractDomainObjectsExporter<?>> exporters; private List<AbstractDomainObjectsExporter<?>> exporters;
private ExportManager() { private ExportManager() {
// Nothing exporters = new ArrayList<>();
} }
public static ExportManager getInstance() { public static ExportManager getInstance() {
@ -44,7 +45,7 @@ public final class ExportManager {
.stream() .stream()
.map(exporter -> exporter.convertsToType()) .map(exporter -> exporter.convertsToType())
.collect(Collectors.toSet()); .collect(Collectors.toSet());
for(final String type : types) { for (final String type : types) {
try { try {
final Path typeDirPath = targetDirPath.resolve(type); final Path typeDirPath = targetDirPath.resolve(type);
Files.createDirectories(typeDirPath); Files.createDirectories(typeDirPath);
@ -68,9 +69,16 @@ public final class ExportManager {
final Map<String, List<String>> exportedEntities = new HashMap<>(); final Map<String, List<String>> exportedEntities = new HashMap<>();
for (final AbstractDomainObjectsExporter< ?> exporter : exporters) { for (final AbstractDomainObjectsExporter< ?> exporter : exporters) {
System.out.printf("Exporting entities of type \"%s\" and "
+ "converting them to \"%s\"...%n",
exporter.exportsBaseDataObjectType(),
exporter.convertsToType());
final List<String> uuids = exporter final List<String> uuids = exporter
.exportDomainObjects(targetDirPath); .exportDomainObjects(targetDirPath);
exportedEntities.put(exporter.convertsToType(), uuids); exportedEntities.put(exporter.convertsToType(), uuids);
System.out.printf("Exported %d entities of type \"%s\".%n",
uuids.size(),
exporter.convertsToType());
} }
final Path manifestFilePath = targetDirPath.resolve("ccm-export.json"); final Path manifestFilePath = targetDirPath.resolve("ccm-export.json");

View File

@ -19,7 +19,6 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
@ -108,7 +107,8 @@ public class PermissionsExporter extends AbstractDomainObjectsExporter<Permissio
final long partyId = ((Number) domainObject final long partyId = ((Number) domainObject
.getPartyOID() .getPartyOID()
.get("id")).longValue(); .get("id"))
.longValue();
if (-204 == partyId || -300 == partyId || -200 == partyId) { if (-204 == partyId || -300 == partyId || -200 == partyId) {
// Skip internal permissions // Skip internal permissions
return Collections.emptyList(); return Collections.emptyList();

View File

@ -75,7 +75,6 @@ public class RoleMembershipsExporter
jsonGenerator.writeStringField("role", roleUuid); jsonGenerator.writeStringField("role", roleUuid);
jsonGenerator.writeStringField("member", memberUuid); jsonGenerator.writeStringField("member", memberUuid);
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
jsonGenerator.writeEndObject();
} catch(IOException ex) { } catch(IOException ex) {
throw new UncheckedWrapperException(ex); throw new UncheckedWrapperException(ex);

View File

@ -23,8 +23,6 @@ import java.util.List;
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
* @param <T> * @param <T>
*/ */
public abstract class AbstractTasksExporter<T extends Task> public abstract class AbstractTasksExporter<T extends Task>
extends AbstractDomainObjectsExporter<T> { extends AbstractDomainObjectsExporter<T> {
@ -37,8 +35,7 @@ public abstract class AbstractTasksExporter<T extends Task>
final Path targetDir) { final Path targetDir) {
final String uuid = generateUuid(domainObject); final String uuid = generateUuid(domainObject);
final Path targetFilePath = generateTargetFilePath( final Path targetFilePath = generateTargetFilePath(targetDir, uuid);
targetDir, exportsType().getName(), uuid);
final JsonFactory jsonFactory = new JsonFactory(); final JsonFactory jsonFactory = new JsonFactory();
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory

View File

@ -43,8 +43,10 @@ public class AssignableTasksExporter extends AbstractTasksExporter<UserTask> {
jsonGenerator.writeBooleanField("locked", task.isLocked()); jsonGenerator.writeBooleanField("locked", task.isLocked());
final User lockingUser = task.getLockedUser(); final User lockingUser = task.getLockedUser();
final String lockingUserUuid = generateUuid(lockingUser); if (lockingUser != null) {
jsonGenerator.writeStringField("lockingUser", lockingUserUuid); final String lockingUserUuid = generateUuid(lockingUser);
jsonGenerator.writeStringField("lockingUser", lockingUserUuid);
}
final SimpleDateFormat dateFormat = new SimpleDateFormat( final SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ssZ", Locale.ROOT); "yyyy-MM-dd'T'HH:mm:ssZ", Locale.ROOT);
@ -56,9 +58,12 @@ public class AssignableTasksExporter extends AbstractTasksExporter<UserTask> {
task.getDuration().getDuration()); task.getDuration().getDuration());
final Party notificationSender = task.getNotificationSender(); final Party notificationSender = task.getNotificationSender();
final String notificationSenderUuid = generateUuid(notificationSender); if (notificationSender != null) {
jsonGenerator.writeStringField("notificationSender", final String notificationSenderUuid = generateUuid(
notificationSenderUuid); notificationSender);
jsonGenerator.writeStringField("notificationSender",
notificationSenderUuid);
}
} }
} }