Some improvements for the exporSome improvements for the exportt

git-svn-id: https://svn.libreccm.org/ccm/trunk@5715 8810af33-2d31-482b-a856-94f89814c4df
master
jensp 2018-10-26 15:32:11 +00:00
parent 8769dc6b68
commit 7bb93b2a46
14 changed files with 105 additions and 34 deletions

View File

@ -58,6 +58,8 @@ public class CategoriesExporter extends AbstractDomainObjectsExporter<Category>
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("objectId", jsonGenerator.writeNumberField("objectId",

View File

@ -90,6 +90,8 @@ public class CategorizationsExporter
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("categorizationId", jsonGenerator.writeNumberField("categorizationId",

View File

@ -43,6 +43,8 @@ public abstract class AbstractResourceTypesExporter<T extends ResourceType>
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("resourceTypeId", jsonGenerator.writeNumberField("resourceTypeId",

View File

@ -8,6 +8,9 @@ import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
import com.arsdigita.web.WebConfig; import com.arsdigita.web.WebConfig;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
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;
@ -120,6 +123,15 @@ public abstract class AbstractDomainObjectsExporter<T extends DomainObject> {
.resolve(String.format("%s.json", uuid)); .resolve(String.format("%s.json", uuid));
} }
protected void setPrettyPrinter(final JsonGenerator jsonGenerator) {
final DefaultPrettyPrinter prettyPrinter
= new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(
DefaultPrettyPrinter.Lf2SpacesIndenter.instance);
jsonGenerator.setPrettyPrinter(prettyPrinter);
}
/** /**
* Retrieves all {@link DomainObject}s of the type returned by * Retrieves all {@link DomainObject}s of the type returned by
* {@link #exportsBaseDataObjectType()} and calls * {@link #exportsBaseDataObjectType()} and calls
@ -127,6 +139,7 @@ public abstract class AbstractDomainObjectsExporter<T extends DomainObject> {
* for each of them. * for each of them.
* *
* @param targetDir target directory for the export. * @param targetDir target directory for the export.
*
* @return The list of uuids of the the exported entites. * @return The list of uuids of the the exported entites.
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@ -143,11 +156,15 @@ public abstract class AbstractDomainObjectsExporter<T extends DomainObject> {
final DomainObject domainObject = DomainObjectFactory final DomainObject domainObject = DomainObjectFactory
.newInstance(dataObject); .newInstance(dataObject);
if (!(exportsType().isAssignableFrom(domainObject.getClass()))) { // 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(),
domainObject.getClass().getName())); // domainObject.getClass().getName()));
// }
if (!exportsType().equals(domainObject.getClass())) {
// Is not exact type (sub class?). Skip.
continue;
} }
domainObjects.add((T) domainObject); domainObjects.add((T) domainObject);
@ -155,6 +172,8 @@ public abstract class AbstractDomainObjectsExporter<T extends DomainObject> {
final List<String> uuids = new ArrayList<>(); final List<String> uuids = new ArrayList<>();
for (final T domainObject : domainObjects) { for (final T domainObject : domainObjects) {
System.out.printf("Exporting domain object %s...%n",
domainObject.getOID().toString());
final List<String> createdUuids = exportDomainObject(domainObject, final List<String> createdUuids = exportDomainObject(domainObject,
targetDir); targetDir);
uuids.addAll(createdUuids); uuids.addAll(createdUuids);

View File

@ -11,8 +11,13 @@ import java.util.Map;
import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
import com.fasterxml.jackson.core.util.MinimalPrettyPrinter;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ -86,9 +91,14 @@ public final class ExportManager {
try (final JsonGenerator manifestGenerator = jsonFactory try (final JsonGenerator manifestGenerator = jsonFactory
.createGenerator(manifestFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(manifestFilePath.toFile(), JsonEncoding.UTF8)) {
manifestGenerator.writeStartObject(); final DefaultPrettyPrinter prettyPrinter
= new DefaultPrettyPrinter();
prettyPrinter.indentArraysWith(
DefaultPrettyPrinter.Lf2SpacesIndenter.instance);
manifestGenerator.setPrettyPrinter(prettyPrinter);
manifestGenerator.writeStartObject(); manifestGenerator.writeStartObject();
manifestGenerator.writeStringField( manifestGenerator.writeStringField(
"created", "created",
LocalDateTime.now(ZoneId.of("UTC")).toString()); LocalDateTime.now(ZoneId.of("UTC")).toString());
@ -102,7 +112,7 @@ public final class ExportManager {
manifestGenerator.writeString(type); manifestGenerator.writeString(type);
} }
manifestGenerator.writeEndObject(); manifestGenerator.writeEndArray();
manifestGenerator.writeObjectFieldStart("entities"); manifestGenerator.writeObjectFieldStart("entities");
@ -121,7 +131,6 @@ public final class ExportManager {
manifestGenerator.writeEndObject(); manifestGenerator.writeEndObject();
manifestGenerator.writeEndObject();
} catch (IOException ex) { } catch (IOException ex) {
throw new UncheckedWrapperException(ex); throw new UncheckedWrapperException(ex);
} }

View File

@ -69,6 +69,8 @@ public class GroupMembershipsExporter
try (final JsonGenerator jsonGenerator = jsonFactory try (final JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("membershipId", jsonGenerator.writeNumberField("membershipId",
IdSequence.getInstance().nextId()); IdSequence.getInstance().nextId());

View File

@ -49,6 +49,8 @@ public class GroupsExporter extends AbstractDomainObjectsExporter<Group> {
try (final JsonGenerator jsonGenerator = jsonFactory try (final JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("partyId", jsonGenerator.writeNumberField("partyId",
IdSequence.getInstance().nextId()); IdSequence.getInstance().nextId());

View File

@ -3,9 +3,14 @@ package org.libreccm.security;
import com.arsdigita.domain.DomainObject; import com.arsdigita.domain.DomainObject;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.kernel.Group; import com.arsdigita.kernel.Group;
import com.arsdigita.kernel.Role;
import com.arsdigita.kernel.RoleCollection; import com.arsdigita.kernel.RoleCollection;
import com.arsdigita.kernel.permissions.Permission; import com.arsdigita.kernel.permissions.Permission;
import com.arsdigita.persistence.DataCollection;
import com.arsdigita.persistence.Filter;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.Session;
import com.arsdigita.persistence.SessionManager;
import com.arsdigita.util.UncheckedWrapperException; import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.web.WebConfig; import com.arsdigita.web.WebConfig;
@ -82,6 +87,8 @@ public class PermissionsExporter extends AbstractDomainObjectsExporter<Permissio
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumber(IdSequence.getInstance().nextId()); jsonGenerator.writeNumber(IdSequence.getInstance().nextId());
@ -124,13 +131,13 @@ public class PermissionsExporter extends AbstractDomainObjectsExporter<Permissio
if (granteeDomainObj instanceof Group) { if (granteeDomainObj instanceof Group) {
final Group group = (Group) granteeDomainObj; final Group group = (Group) granteeDomainObj;
final RoleCollection roles = group.getRoles(); final RoleCollection rolesOfGroup = group.getRoles();
final String privilege = domainObject.getPrivilege().getName(); final String privilege = domainObject.getPrivilege().getName();
while (roles.next()) { while (rolesOfGroup.next()) {
final OID roleOid = roles.getRole().getOID(); final OID roleOid = rolesOfGroup.getRole().getOID();
final String permissionUuid = exportPermission(privilege, final String permissionUuid = exportPermission(privilege,
objectOid, objectOid,
@ -138,6 +145,19 @@ public class PermissionsExporter extends AbstractDomainObjectsExporter<Permissio
targetDir); targetDir);
permissionUuids.add(permissionUuid); permissionUuids.add(permissionUuid);
} }
final Session session = SessionManager.getSession();
final DataCollection roles = session
.retrieve(Role.BASE_DATA_OBJECT_TYPE);
roles.addEqualsFilter("implicitGroup.id", group.getID());
if (roles.next()) {
final Role role = new Role(roles.getDataObject());
final String permissionUuid = exportPermission(privilege,
granteeOid,
role.getOID(),
targetDir);
permissionUuids.add(permissionUuid);
}
} }
return permissionUuids; return permissionUuids;

View File

@ -48,6 +48,8 @@ public class RolesExporter extends AbstractDomainObjectsExporter<Role> {
try (final JsonGenerator jsonGenerator = jsonFactory try (final JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("roleId", jsonGenerator.writeNumberField("roleId",

View File

@ -51,6 +51,8 @@ public class UsersExporter extends AbstractDomainObjectsExporter<com.arsdigita.k
.createGenerator(targetFilePath.toFile(), .createGenerator(targetFilePath.toFile(),
JsonEncoding.UTF8)) { JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("partyId", jsonGenerator.writeNumberField("partyId",

View File

@ -31,16 +31,18 @@ public abstract class AbstractTasksExporter<T extends Task>
throws IOException; throws IOException;
@Override @Override
public final List<String> exportDomainObject(final T domainObject, public final List<String> exportDomainObject(final T task,
final Path targetDir) { final Path targetDir) {
final String uuid = generateUuid(domainObject); final String uuid = generateUuid(task);
final Path targetFilePath = generateTargetFilePath(targetDir, uuid); final Path targetFilePath = generateTargetFilePath(targetDir, uuid);
final JsonFactory jsonFactory = new JsonFactory(); final JsonFactory jsonFactory = new JsonFactory();
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) { .createGenerator(targetFilePath.toFile(), JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("taskId", jsonGenerator.writeNumberField("taskId",
@ -50,26 +52,26 @@ public abstract class AbstractTasksExporter<T extends Task>
jsonGenerator.writeObjectFieldStart("label"); jsonGenerator.writeObjectFieldStart("label");
jsonGenerator.writeStringField( jsonGenerator.writeStringField(
KernelConfig.getConfig().getDefaultLanguage(), KernelConfig.getConfig().getDefaultLanguage(),
domainObject.getLabel()); task.getLabel());
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
jsonGenerator.writeObjectFieldStart("description"); jsonGenerator.writeObjectFieldStart("description");
jsonGenerator.writeStringField( jsonGenerator.writeStringField(
KernelConfig.getConfig().getDefaultLanguage(), KernelConfig.getConfig().getDefaultLanguage(),
domainObject.getDescription()); task.getDescription());
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
jsonGenerator.writeBooleanField("active", domainObject.isActive()); jsonGenerator.writeBooleanField("active", task.isActive());
jsonGenerator.writeStringField("taskState", jsonGenerator.writeStringField("taskState",
domainObject.getStateString()); task.getStateString());
final Workflow workflow = domainObject.getWorkflow(); final Workflow workflow = task.getWorkflow();
final String workflowUuid = generateUuid(workflow); final String workflowUuid = generateUuid(workflow);
jsonGenerator.writeStringField("workflow", workflowUuid); jsonGenerator.writeStringField("workflow", workflowUuid);
jsonGenerator.writeArrayFieldStart("comments"); jsonGenerator.writeArrayFieldStart("comments");
final Iterator<?> comments = domainObject.getComments(); final Iterator<?> comments = task.getComments();
while (comments.hasNext()) { while (comments.hasNext()) {
final TaskComment comment = (TaskComment) comments.next(); final TaskComment comment = (TaskComment) comments.next();
@ -78,7 +80,7 @@ public abstract class AbstractTasksExporter<T extends Task>
} }
jsonGenerator.writeEndArray(); jsonGenerator.writeEndArray();
exportTaskProperties(domainObject, jsonGenerator); exportTaskProperties(task, jsonGenerator);
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();

View File

@ -51,6 +51,8 @@ public class TaskCommentsExporter
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField( jsonGenerator.writeNumberField(

View File

@ -83,6 +83,8 @@ public class TaskDependenciesExporter
try (final JsonGenerator jsonGenerator = jsonFactory try (final JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("taskDependencyId", jsonGenerator.writeNumberField("taskDependencyId",

View File

@ -2,6 +2,7 @@ package org.libreccm.workflow;
import com.arsdigita.kernel.ACSObject; import com.arsdigita.kernel.ACSObject;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.util.UncheckedWrapperException;
import com.arsdigita.workflow.simple.Workflow; import com.arsdigita.workflow.simple.Workflow;
import com.arsdigita.workflow.simple.WorkflowTemplate; import com.arsdigita.workflow.simple.WorkflowTemplate;
@ -55,6 +56,8 @@ public class WorkflowsExporter extends AbstractDomainObjectsExporter<Workflow> {
try (JsonGenerator jsonGenerator = jsonFactory try (JsonGenerator jsonGenerator = jsonFactory
.createGenerator(targetFile, JsonEncoding.UTF8)) { .createGenerator(targetFile, JsonEncoding.UTF8)) {
setPrettyPrinter(jsonGenerator);
jsonGenerator.writeStartObject(); jsonGenerator.writeStartObject();
jsonGenerator.writeNumberField("workflowId", jsonGenerator.writeNumberField("workflowId",
@ -88,10 +91,10 @@ public class WorkflowsExporter extends AbstractDomainObjectsExporter<Workflow> {
jsonGenerator.writeEndObject(); jsonGenerator.writeEndObject();
} catch (IOException ex) { } catch (IOException ex) {
throw new UncheckedWrapperException(ex);
} }
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. return Arrays.asList(new String[]{uuid});
} }
} }