package com.socrata.datasync.config.controlfile;
import com.socrata.datasync.Utils;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import com.socrata.datasync.PortMethod;
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonPropertyOrder(alphabetic=true)
public class PortControlFile {
public String destinationDomain;
public String destinationName;
public CopyType copyType;
public Boolean publish;
public String opaque;
public static interface CopyType {}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonPropertyOrder(alphabetic=true)
public static class CopyData implements CopyType {
public final String type;
public String destinationDataset;
public CopyData(String destinationDataset) {
this.type = "data";
this.destinationDataset = destinationDataset;
}
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonPropertyOrder(alphabetic=true)
public static class CopySchema implements CopyType {
public final String type;
public boolean toNbe;
public CopySchema(boolean toNbe) {
this.type = "schema";
this.toNbe = toNbe;
}
}
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown=true)
@JsonPropertyOrder(alphabetic=true)
public static class CopyAll implements CopyType {
public final String type;
public boolean toNbe;
public CopyAll(boolean toNbe) {
this.type = "schema_and_data";
this.toNbe = toNbe;
}
}
public PortControlFile() {}
public PortControlFile(String destinationDomain,
String destinationName,
String destinationDataset,
boolean toNbe,
PortMethod copyType,
Boolean publish)
{
this.destinationDomain = destinationDomain;
this.destinationName = destinationName;
this.publish = publish;
switch(copyType) {
case copy_data:
this.copyType = new CopyData(destinationDataset);
break;
case copy_schema:
this.copyType = new CopySchema(toNbe);
break;
case copy_all:
this.copyType = new CopyAll(toNbe);
break;
}
}
public String generateAndAddOpaqueUUID() {
String uuid = Utils.generateRequestId();
this.opaque = uuid;
return uuid;
}
}