/**
* 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.ingest;
import org.openmrs.module.sync.SyncItemKey;
import org.openmrs.module.sync.SyncItemState;
import org.openmrs.module.sync.serialization.Item;
import org.openmrs.module.sync.serialization.Record;
/**
*
*/
public class SyncImportItem {
//private Log log = LogFactory.getLog(this.getClass());
// Fields
private SyncItemKey<?> key = null;
private SyncItemState state = SyncItemState.UNKNOWN;
private String errorMessage = "";
private String errorMessageArgs = "";
private String errorMessageDetail = ""; //usually stack trace
public String getErrorMessageDetail() {
return errorMessageDetail;
}
public void setErrorMessageDetail(String detail) {
this.errorMessageDetail = detail;
}
public String getErrorMessage() {
return errorMessage;
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
public SyncItemKey<?> getKey() {
return key;
}
public void setKey(SyncItemKey<?> key) {
this.key = key;
}
public String getErrorMessageArgs() {
return errorMessageArgs;
}
public void setErrorMessageArgs(String errorMessageArgs) {
this.errorMessageArgs = errorMessageArgs;
}
public SyncItemState getState() {
return state;
}
public void setState(SyncItemState state) {
this.state = state;
}
// Methods
@Override
public boolean equals(Object o) {
if (!(o instanceof SyncImportItem) || o == null)
return false;
SyncImportItem oSync = (SyncImportItem) o;
boolean same = ((oSync.getKey() == null) ? (this.getKey() == null) : oSync.getKey().equals(this.getKey()))
&& ((oSync.getErrorMessage() == null) ? (this.getErrorMessage() == null) : oSync.getErrorMessage().equals(this.getErrorMessage()))
&& ((oSync.getErrorMessageArgs() == null) ? (this.getErrorMessageArgs() == null) : oSync.getErrorMessageArgs().equals(this.getErrorMessageArgs()))
&& ((oSync.getErrorMessageDetail() == null) ? (this.getErrorMessageDetail() == null) : oSync.getErrorMessageDetail().equals(this.getErrorMessageDetail()))
&& ((oSync.getState() == null) ? (this.getState() == null) : oSync.getState().equals(this.getState()));
return same;
}
@Override
public int hashCode() {
//FIXME: Key might be null, though it shouldn't..
// Should these key-objects implement some interface - causes problems with serialization.
if (getKey() != null) {
return getKey().hashCode();
} else {
return super.hashCode();
}
}
public Item save(Record xml, Item parent) throws Exception {
Item me = xml.createItem(parent, this.getClass().getSimpleName());
//serialize primitives
xml.setAttribute(me, "state", state.toString());
if(errorMessage != null) xml.setAttribute(me, "errorMessage", errorMessage);
if(errorMessageArgs != null) xml.setAttribute(me, "errorMessageArgs", errorMessageArgs.toString());
if (key != null) {
xml.setAttribute(me,"key",key.getKeyValue().toString());
}
Item itemErrorMessageDetail = xml.createItem(me, "errorMessageDetail");
if (errorMessageDetail != null) {
xml.createTextAsCDATA(itemErrorMessageDetail, errorMessageDetail);
}
return me;
}
public void load(Record xml, Item me) throws Exception {
state = SyncItemState.valueOf(me.getAttribute("state"));
errorMessage = me.getAttribute("errorMessage");
errorMessageArgs = me.getAttribute("errorMessageArgs");
if ( me.getAttribute("key") != null) {
key = new SyncItemKey<String>(me.getAttribute("key"), String.class);
}
Item itemErrorMessageDetail = xml.getItem(me, "errorMessageDetail");
if (itemErrorMessageDetail.isEmpty()) {
errorMessageDetail = null;
} else {
errorMessageDetail = itemErrorMessageDetail.getText();
}
}
}