package org.commcare.android.resource.installers;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import org.commcare.android.util.AndroidCommCarePlatform;
import org.commcare.android.util.FileUtil;
import org.commcare.resources.model.Resource;
import org.commcare.resources.model.ResourceInitializationException;
import org.commcare.resources.model.ResourceLocation;
import org.commcare.resources.model.UnresolvedResourceException;
import org.javarosa.core.reference.Reference;
import org.javarosa.core.util.externalizable.DeserializationException;
import org.javarosa.core.util.externalizable.ExtUtil;
import org.javarosa.core.util.externalizable.PrototypeFactory;
import android.util.Pair;
/**
* @author ctsims
*
*/
public class MediaFileAndroidInstaller extends FileSystemInstaller {
String path;
public MediaFileAndroidInstaller() {
}
public MediaFileAndroidInstaller(String destination, String upgradeDestination, String path) {
super(destination + (path == null ? "" : "/" + path), upgradeDestination + (path == null ? "" : "/" + path));
//establish whether dir structure needs to be extended?
this.path = path;
}
/* (non-Javadoc)
* @see org.commcare.resources.model.ResourceInstaller#uninstall(org.commcare.resources.model.Resource, org.commcare.resources.model.ResourceTable, org.commcare.resources.model.ResourceTable)
*/
public boolean uninstall(Resource r) throws UnresolvedResourceException {
boolean success = super.uninstall(r);
if( success == false ) { return false; }
//cleanup dirs
return FileUtil.cleanFilePath(this.localDestination, path);
}
/* (non-Javadoc)
* @see org.commcare.resources.model.ResourceInstaller#upgrade(org.commcare.resources.model.Resource, org.commcare.resources.model.ResourceTable)
*/
public boolean upgrade(Resource r) {
return super.upgrade(r);
}
protected int customInstall(Resource r, Reference local, boolean upgrade) throws IOException, UnresolvedResourceException {
return upgrade ? Resource.RESOURCE_STATUS_UPGRADE : Resource.RESOURCE_STATUS_INSTALLED;
}
/* (non-Javadoc)
* @see org.commcare.resources.model.ResourceInstaller#requiresRuntimeInitialization()
*/
public boolean requiresRuntimeInitialization() {
return false;
}
/*
* (non-Javadoc)
* @see org.commcare.android.resource.installers.FileSystemInstaller#initialize(org.commcare.android.util.AndroidCommCarePlatform)
*/
@Override
public boolean initialize(AndroidCommCarePlatform instance) throws ResourceInitializationException {
return false;
}
/* (non-Javadoc)
* @see org.javarosa.core.util.externalizable.Externalizable#readExternal(java.io.DataInputStream, org.javarosa.core.util.externalizable.PrototypeFactory)
*/
public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException {
super.readExternal(in, pf);
path = ExtUtil.nullIfEmpty(ExtUtil.readString(in));
}
/* (non-Javadoc)
* @see org.javarosa.core.util.externalizable.Externalizable#writeExternal(java.io.DataOutputStream)
*/
public void writeExternal(DataOutputStream out) throws IOException {
super.writeExternal(out);
ExtUtil.writeString(out, ExtUtil.emptyIfNull(path));
}
/*
* (non-Javadoc)
* @see org.commcare.android.resource.installers.FileSystemInstaller#getResourceName(org.commcare.resources.model.Resource, org.commcare.resources.model.ResourceLocation)
*/
@Override
public Pair<String, String> getResourceName(Resource r, ResourceLocation loc) {
int index = loc.getLocation().lastIndexOf("/");
if(index == -1 ) { return new Pair<String,String>(loc.getLocation(), ".dat"); }
String fileName = loc.getLocation().substring(index);
String extension = ".dat";
int lastDot = fileName.lastIndexOf(".");
if(lastDot != -1) {
extension =fileName.substring(lastDot);
fileName = fileName.substring(0, lastDot);
}
return new Pair<String, String>(fileName, extension);
}
}