package org.witness.informacam.models.transport;
import java.io.IOException;
import java.io.Serializable;
import java.security.NoSuchAlgorithmException;
import org.witness.informacam.InformaCam;
import org.witness.informacam.json.JSONObject;
import org.witness.informacam.models.Model;
import org.witness.informacam.models.media.IAsset;
import org.witness.informacam.models.notifications.INotification;
import org.witness.informacam.models.organizations.IOrganization;
import org.witness.informacam.models.organizations.IRepository;
import org.witness.informacam.utils.Constants.Logger;
import org.witness.informacam.utils.Constants.Models;
import org.witness.informacam.utils.MediaHasher;
@SuppressWarnings("serial")
public class ITransportStub extends Model implements Serializable {
public String id = null;
public int numTries = 0;
public boolean isHeld = false;
public int method = Models.ITransportStub.Methods.POST;
public String lastResult = null;
public INotification associatedNotification = null;
public IOrganization organization = null;
public ITransportData asset = null;
public int callbackCode = 0;
public int resultCode = Models.ITransportStub.ResultCodes.FAIL;
public ITransportStub() {
this(null, null);
}
public ITransportStub(IOrganization organization) {
this(organization, null);
}
public ITransportStub(IOrganization organization, INotification associatedNotification) {
super();
this.organization = organization;
this.associatedNotification = associatedNotification;
try {
this.id = MediaHasher.hash(new String(System.currentTimeMillis() + Models.ITransportStub.ID_HASH).getBytes(), "MD5");
} catch (NoSuchAlgorithmException e) {
Logger.e(LOG, e);
} catch (IOException e) {
Logger.e(LOG, e);
}
}
public ITransportStub(JSONObject transportStub) throws InstantiationException, IllegalAccessException {
super();
inflate(transportStub);
}
public ITransportStub(ITransportStub transportStub) throws InstantiationException, IllegalAccessException {
super();
inflate(transportStub.asJson());
}
public void reset() {
reset(null);
}
public void reset(INotification associatedNotification) {
numTries = 0;
isHeld = false;
lastResult = null;
if(associatedNotification != null) {
this.associatedNotification = associatedNotification;
}
}
public void setAsset(String assetName, String assetPath, String mimeType, int storageType) {
if(asset == null) {
asset = new ITransportData();
}
asset.assetName = assetName;
asset.assetPath = assetPath;
asset.mimeType = mimeType;
asset.storageType = storageType;
}
public void setAsset(IAsset asset, String mimeType, int storageType) {
setAsset(asset.name, asset.path, mimeType, storageType);
}
public String getAssetRootOfRepository(String source) {
for(IRepository repository : organization.repositories) {
if(repository.source.equals(source)) {
return repository.asset_root;
}
}
return null;
}
public IRepository getRepository(String source) {
for(IRepository repository : organization.repositories) {
if(repository.source.equals(source)) {
return repository;
}
}
return null;
}
public void save() throws InstantiationException, IllegalAccessException {
InformaCam informaCam = InformaCam.getInstance();
ITransportStub transport = informaCam.transportManifest.getById(id);
if(transport == null) {
InformaCam.getInstance().transportManifest.add(this);
} else {
transport.inflate(this);
informaCam.transportManifest.save();
}
}
}