package net.rrm.ehour.backup.config; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import net.rrm.ehour.backup.common.BackupConfig; import net.rrm.ehour.backup.common.BackupEntityType; import net.rrm.ehour.backup.common.BackupJoinTable; import net.rrm.ehour.domain.*; import java.util.*; public class EhourBackupConfig implements BackupConfig { private static final BackupEntityType userDepartment = new BackupEntityType(UserDepartment.class, "USER_DEPARTMENT", 0); private static final BackupEntityType userRole = new BackupEntityType(UserRole.class, "USER_ROLE", 1); private static final BackupEntityType users = new BackupEntityType(User.class, "USERS", "USERLIST", 2); private static final BackupEntityType customer = new BackupEntityType(Customer.class, "CUSTOMER", 3); private static final BackupEntityType project = new BackupEntityType(Project.class, "PROJECT", 4); private static final BackupEntityType projectAssignmentType = new BackupEntityType(ProjectAssignmentType.class, "PROJECT_ASSIGNMENT_TYPE", 5); private static final BackupEntityType projectAssignment = new BackupEntityType(ProjectAssignment.class, "PROJECT_ASSIGNMENT", 6); private static final BackupEntityType timesheetEntry = new BackupEntityType(TimesheetEntry.class, "TIMESHEET_ENTRY", "TIMESHEET_ENTRIES", new TimesheetEntryRowProcessor(), 7); private static final BackupEntityType timesheetComment = new BackupEntityType(TimesheetComment.class, "TIMESHEET_COMMENT", 8); private static final BackupEntityType timesheetLock = new BackupEntityType(TimesheetLock.class, "TIMESHEET_LOCK", 11); private static final BackupJoinTable USER_TO_USERROLE = new BackupJoinTable("USER_TO_USERROLE", "USER_ID", "ROLE"); private static final BackupJoinTable USER_TO_DEPARTMENT = new BackupJoinTable("USER_TO_DEPARTMENT", "USER_ID", "DEPARTMENT_ID"); private static final List<BackupEntityType> ENTITIES = Lists.newArrayList(userDepartment, userRole, users, customer, project, projectAssignmentType, projectAssignment, timesheetEntry, timesheetComment, timesheetLock); private static final List<BackupEntityType> REVERSE_ORDER; private static final Map<Class<?>, BackupEntityType> ENTITY_CLASS_MAP; static { ENTITY_CLASS_MAP = new HashMap<>(); for (BackupEntityType entity : ENTITIES) { if (entity.getDomainObjectClass() != null) { ENTITY_CLASS_MAP.put(entity.getDomainObjectClass(), entity); } } REVERSE_ORDER = new ArrayList<>(ENTITIES); Collections.sort(REVERSE_ORDER, new Comparator<BackupEntityType>() { @Override public int compare(BackupEntityType o1, BackupEntityType o2) { return o2.getOrder() - o1.getOrder(); } }); } private static final List<BackupJoinTable> JOIN_TABLES = Lists.newArrayList(USER_TO_USERROLE, USER_TO_DEPARTMENT); private static final Map<String, BackupJoinTable> JOIN_TABLE_NAME_MAP; static { JOIN_TABLE_NAME_MAP = Maps.newHashMap(); for (BackupJoinTable joinTable : JOIN_TABLES) { JOIN_TABLE_NAME_MAP.put(joinTable.getTableName(), joinTable); } } @Override public List<BackupEntityType> backupEntities() { return ENTITIES; } @Override public BackupEntityType entityForClass(Class clazz) { return ENTITY_CLASS_MAP.get(clazz); } @Override public List<BackupEntityType> reverseOrderedValues() { return REVERSE_ORDER; } @Override public List<BackupJoinTable> joinTables() { return JOIN_TABLES; } @Override public BackupJoinTable joinTableForName(String name) { return JOIN_TABLE_NAME_MAP.get(name); } }