package codeine.db.mysql;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Map;
import java.util.jar.JarInputStream;
import com.mysql.management.MysqldResource;
import com.mysql.management.util.Utils;
public class SpecificMysqldResource extends MysqldResource
{
private boolean bNewMySqldWasCopiedToWorkArea = false;
public SpecificMysqldResource(File baseDir, File dataDir, String mysqlVersionString, boolean guessArch, PrintStream out, String binDir)
{
super(baseDir, dataDir, null, false, out, out, new Utils(), binDir);
}
@Override
protected synchronized void setVersion(boolean checkRunning, String mysqlVersionString)
{
versionString = "5.0.21";
}
@Override
protected File makeMysqld()
{
return getMysqldFilePointer();
}
@Override
protected String[] constructArgs(@SuppressWarnings("rawtypes") Map mysqldArgs)
{
String[] args = super.constructArgs(mysqldArgs);
String[] launcherArgs = new String[args.length + 1];
launcherArgs[0] = args[0].replaceAll("mysqld", "launcher");
System.arraycopy(args, 0, launcherArgs, 1, args.length);
return launcherArgs;
}
public void copyFile(File in, File out)
{
try {
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
byte[] buf = new byte[1024];
int i = 0;
while((i=fis.read(buf))!=-1)
{
fos.write(buf, 0, i);
}
fis.close();
fos.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
@Override
public void ensureEssentialFilesExist()
{
try
{
if(bNewMySqldWasCopiedToWorkArea)
{
utils.files().deleteTree(new File(baseDir + File.separator + "share"));
}
String sSourceDir = binDir();
JarInputStream dataIn = new JarInputStream(new FileInputStream(sSourceDir + File.separator + "data_dir.jar"));
utils.streams().expandEachEntry(dataDir, dataIn);
JarInputStream shareIn = new JarInputStream(new FileInputStream(sSourceDir + File.separator + "share_dir.jar"));
utils.streams().expandEachEntry(baseDir, shareIn);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}