/**
* CopyRight by Chinamobile
*/
package com.chinamobile.bcbsp.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import com.chinamobile.bcbsp.BSPConfiguration;
import com.chinamobile.bcbsp.Constants;
public class BSPConfigurationSetter {
private ClassLoader classloader = null;
private File conffile = null;
private BSPConfiguration conf = null;
private File bcbsptestDir = null;
private static Integer currentPort = 0;
public File getBcbsptestDir() {
return bcbsptestDir;
}
public void setConf(BSPConfiguration conf) {
this.conf = conf;
}
public void setBSPControllerAddress(String address) {
if (conf == null) {
conf = new BSPConfiguration();
}
conf.set(Constants.BC_BSP_CONTROLLER_ADDRESS, address);
}
public void mkTestDir(String dir) {
int index = 0;
bcbsptestDir = new File(dir + index);
while (bcbsptestDir.exists()) {
index++;
bcbsptestDir = new File(dir + index);
}
bcbsptestDir.mkdirs();
}
public File getClasspathDir() {
if (classloader == null) {
classloader = Thread.currentThread().getContextClassLoader();
}
String[] classpathes = System.getProperty("java.class.path").split(":");
File classpath = null;
for (int i = 0; i < classpathes.length; i++) {
classpath = new File(classpathes[i]);
if (classpath.exists() && classpath.isDirectory()
&& classpath.canExecute()) {
break;
}
classpath = null;
}
return classpath;
}
public void setUp() throws FileNotFoundException {
if (classloader == null) {
classloader = Thread.currentThread().getContextClassLoader();
}
if (classloader.getResource("bcbsp-site.xml") == null) {
File classpath = getClasspathDir();
if (classpath == null) {
System.out.println("Please check your classpath");
throw new FileNotFoundException("No class path");
}
System.out.println(classpath);
conffile = new File(classpath, "bcbsp-site.xml");
FileOutputStream fos = new FileOutputStream(conffile);
try {
conf.writeXml(fos);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void cleanUp() {
if (conffile != null) {
deleteRecursiveOnExist(conffile);
}
if (bcbsptestDir != null) {
deleteRecursiveOnExist(bcbsptestDir);
}
}
public static boolean deleteRecursive(File file) {
File[] files = file.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++)
deleteRecursive(files[i]);
}
return file.delete();
}
public static boolean deleteRecursiveOnExist(File file) {
if (file.exists())
return deleteRecursive(file);
return false;
}
public static int getFreePort(int start) {
ServerSocket ss;
int port = start > 20000 ? start : 20000;
synchronized (currentPort) {
currentPort++;
port = port > currentPort ? port : currentPort;
for (; port < 65535; port++) {
try {
ss = new ServerSocket(port);
ss.close();
currentPort = port;
return port;
} catch (IOException e) {
}
}
}
return 60000;
}
}