/*
* Copyright Siemens AG, 2013-2016. Part of the SW360 Portal Project.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.sw360.moderation.db;
import org.eclipse.sw360.datahandler.thrift.moderation.ModerationRequest;
import org.eclipse.sw360.datahandler.thrift.projects.Project;
import org.eclipse.sw360.datahandler.thrift.projects.ProjectRelationship;
/**
* Class for comparing a document with its counterpart in the database
* Writes the difference (= additions and deletions) to the moderation request
*
* @author birgit.heydenreicht@tngtech.com
*/
public class ProjectModerationRequestGenerator extends ModerationRequestGenerator<Project._Fields, Project> {
@Override
public ModerationRequest setAdditionsAndDeletions(ModerationRequest request, Project updateProject, Project actualProject){
updateDocument = updateProject;
actualDocument = actualProject;
documentAdditions = new Project();
documentDeletions = new Project();
//required fields:
documentAdditions.setName(updateProject.getName());
documentAdditions.setId(actualProject.getId());
documentDeletions.setName(actualProject.getName());
documentDeletions.setId(actualProject.getId());
for (Project._Fields field : Project._Fields.values()) {
if(actualProject.getFieldValue(field) == null){
documentAdditions.setFieldValue(field, updateProject.getFieldValue(field));
} else if (updateProject.getFieldValue(field) == null){
documentDeletions.setFieldValue(field,actualProject.getFieldValue(field));
} else if(!actualProject.getFieldValue(field).equals(updateProject.getFieldValue(field))) {
switch (field) {
//ignored fields and concluded fields
case PERMISSIONS:
case DOCUMENT_STATE:
case RELEASE_IDS:
case RELEASE_CLEARING_STATE_SUMMARY:
break;
case ATTACHMENTS:
dealWithAttachments(Project._Fields.ATTACHMENTS);
break;
case LINKED_PROJECTS:
dealWithEnumMap(Project._Fields.LINKED_PROJECTS, ProjectRelationship.class);
break;
case RELEASE_ID_TO_USAGE:
dealWithStringMap(Project._Fields.RELEASE_ID_TO_USAGE);
break;
case ROLES:
dealWithCustomMap(Project._Fields.ROLES);
break;
default:
dealWithBaseTypes(field, Project.metaDataMap.get(field));
}
}
}
request.setProjectAdditions(documentAdditions);
request.setProjectDeletions(documentDeletions);
return request;
}
}