/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* 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.
*
* The Original Code is part of dcm4che, an implementation of DICOM(TM) in
* Java(TM), hosted at https://github.com/gunterze/dcm4che.
*
* The Initial Developer of the Original Code is
* Agfa Healthcare.
* Portions created by the Initial Developer are Copyright (C) 2013
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* See @authors listed below
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
package org.dcm4chee.archive.qc.rest;
import java.io.IOException;
import java.io.StringReader;
import javax.json.Json;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.ObjectCodec;
import org.codehaus.jackson.map.DeserializationContext;
import org.codehaus.jackson.map.JsonDeserializer;
import org.codehaus.jackson.map.annotate.JsonDeserialize;
import org.dcm4che3.data.Attributes;
import org.dcm4che3.json.JSONReader;
import org.dcm4chee.archive.entity.history.UpdateHistory.UpdateScope;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Hesham Elbadawi <bsdreko@gmail.com>
*
*/
public class QCObject {
private String operation;
private UpdateScope updateScope;
private String[] moveSOPUIDs;
private String[] cloneSOPUIDs;
private String[] restoreOrRejectUIDs;
private String targetStudyUID;
private @JsonDeserialize(using = AttributesDeserializer.class)
Attributes targetStudyData;
private IDWithIssuerObject pid;
private @JsonDeserialize(using = AttributesDeserializer.class)
Attributes targetSeriesData;
private @JsonDeserialize(using = AttributesDeserializer.class)
Attributes updateData;
private boolean samePatient;
private CodeObject qcRejectionCode;
public QCObject() {
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String[] getMoveSOPUIDs() {
return moveSOPUIDs;
}
public void setMoveSOPUIDs(String[] moveSOPUIDS) {
this.moveSOPUIDs = moveSOPUIDS;
}
public String[] getCloneSOPUIDs() {
return cloneSOPUIDs;
}
public void setCloneSOPUIDs(String[] cloneSOPUIDs) {
this.cloneSOPUIDs = cloneSOPUIDs;
}
public String[] getRestoreOrRejectUIDs() {
return restoreOrRejectUIDs;
}
public void setRestoreOrRejectUIDs(String[] deleteUIDs) {
this.restoreOrRejectUIDs = deleteUIDs;
}
public boolean isSamePatient() {
return samePatient;
}
public void setSamePatient(boolean samePatient) {
this.samePatient = samePatient;
}
public String getTargetStudyUID() {
return targetStudyUID;
}
public void setTargetStudyUID(String targetStudyUID) {
this.targetStudyUID = targetStudyUID;
}
public Attributes getTargetSeriesData() {
return targetSeriesData;
}
public void setTargetSeriesData(Attributes orderData) {
this.targetSeriesData = orderData;
}
public IDWithIssuerObject getPid() {
return pid;
}
public void setPid(IDWithIssuerObject pid) {
this.pid = pid;
}
public UpdateScope getUpdateScope() {
return updateScope;
}
public void setUpdateScope(UpdateScope updateScope) {
this.updateScope = updateScope;
}
public Attributes getTargetStudyData() {
return targetStudyData;
}
public void setTargetStudyData(Attributes targetStudyData) {
this.targetStudyData = targetStudyData;
}
public Attributes getUpdateData() {
return updateData;
}
public void setUpdateData(Attributes updateData) {
this.updateData = updateData;
}
public CodeObject getQcRejectionCode() {
return qcRejectionCode;
}
public void setQcRejectionCode(CodeObject qcRejectionCode) {
this.qcRejectionCode = qcRejectionCode;
}
}
/**
* A custom deserializer used to deserialize DICOM Attributes
* Replaces the JSON reader with a custom implementation.
*
*/
class AttributesDeserializer extends JsonDeserializer<Attributes> {
private static final Logger LOG = LoggerFactory.getLogger(AttributesDeserializer.class);
@Override
public Attributes deserialize(org.codehaus.jackson.JsonParser parser,
DeserializationContext ctx) throws IOException,
JsonProcessingException {
Attributes ds = new Attributes();
try {
ObjectCodec oc = parser.getCodec();
JsonNode node = oc.readTree(parser);
JSONReader reader = new JSONReader(
Json.createParser(new StringReader(node.toString())));
ds = reader.readDataset(ds);
} catch (Exception e) {
LOG.error("{} : Error deserializing DICOM attributes for targetAttributes or orderData", e);
}
return ds;
}
}