/** * The contents of this file are subject to the OpenMRS Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.module.sync.web.controller; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.api.context.Context; import org.openmrs.module.sync.SyncItem; import org.openmrs.module.sync.SyncRecord; import org.openmrs.module.sync.SyncRecordState; import org.openmrs.module.sync.SyncUtil; import org.openmrs.module.sync.api.SyncService; import org.openmrs.module.sync.serialization.Item; import org.openmrs.module.sync.serialization.Record; import org.openmrs.module.sync.serialization.TimestampNormalizer; import org.openmrs.module.sync.server.SyncServerRecord; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * */ @Controller public class ViewRecordController { /** Logger for this class and subclasses */ protected final Log log = LogFactory.getLog(getClass()); @SuppressWarnings("unchecked") @RequestMapping(value = "/module/sync/viewrecord", method = RequestMethod.GET) public void showThePage(ModelMap modelMap, HttpServletRequest request, @RequestParam String uuid, @RequestParam(value="action", required=false) String action) throws Exception { // default empty Object SyncRecord record =null; SyncRecord previousRecord = null; SyncRecord nextRecord = null; // only fill the Object if the user has authenticated properly if (Context.isAuthenticated()) { SyncService syncService=Context.getService(SyncService.class); record = syncService.getSyncRecord(uuid); if (record != null) { previousRecord = syncService.getPreviousRecord(record); nextRecord = syncService.getNextRecord(record); if("reset".equals(action)){ record.setRetryCount(0); record.setState(SyncRecordState.NEW); for(SyncServerRecord serverRecord : record.getServerRecords()){ serverRecord.setState(SyncRecordState.NEW); } syncService.updateSyncRecord(record); } else if("remove".equals(action)){ record.setRetryCount(0); record.setState(SyncRecordState.NOT_SUPPOSED_TO_SYNC); for(SyncServerRecord serverRecord : record.getServerRecords()){ serverRecord.setState(SyncRecordState.NOT_SUPPOSED_TO_SYNC); } syncService.updateSyncRecord(record); } List<SyncItem> syncItems=new ArrayList<SyncItem>(); Map<Object, String> itemTypes = new HashMap<Object, String>(); Map<Object, String> itemUuids = new HashMap<Object, String>(); if (record != null) { String mainClassName = null; String mainuuid = null; String mainState = null; for (SyncItem item : record.getItems()) { String syncItem = item.getContent(); syncItems.add(item); if (mainState == null)mainState = item.getState().toString(); Record xml = Record.create(syncItem); Item root = xml.getRootItem(); String className = root.getNode() .getNodeName() .substring("org.openmrs.".length()); itemTypes.put(item.getKey().getKeyValue(), className); if (mainClassName == null) mainClassName = className; // String itemInfoKey = itemInfoKeys.get(className); // now we have to go through the item child nodes to find the // real uuid that we want NodeList nodes = root.getNode().getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { Node n = nodes.item(i); String propName = n.getNodeName(); if (propName.equalsIgnoreCase("uuid")) { String tmpuuid = n.getTextContent(); itemUuids.put(item.getKey().getKeyValue(), tmpuuid); if (mainuuid == null) mainuuid = tmpuuid; } } } String displayName = ""; try { displayName = SyncUtil.displayName(mainClassName, mainuuid); } catch (Exception e) { // some methods like Concept.getName() throw Exception s all the // time... displayName = ""; } modelMap.put("displayName", displayName); modelMap.put("mainClassName", mainClassName); modelMap.put("mainState", mainState); } modelMap.put("nextRecord", nextRecord); modelMap.put("previousRecord", previousRecord); modelMap.put("record", record); modelMap.put("syncItems", syncItems); modelMap.put("itemsNumber", syncItems.size()); modelMap.put("itemTypes", itemTypes); modelMap.put("itemuuids", itemUuids); modelMap.put("syncDateDisplayFormat", TimestampNormalizer.DATETIME_DISPLAY_FORMAT); } } } }