/*******************************************************************************
* Copyright (c) 2007 - 2012 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.model.filesystems.impl;
import java.util.ArrayList;
import java.util.List;
import org.jboss.tools.common.model.XModelObjectConstants;
public class TestJarAccess {
int threadCount = 10;
JarAccess acc = new JarAccess();
List<String> errors = new ArrayList<String>();
public TestJarAccess(String location) {
acc.setLocation(location);
}
public void runAll() {
Thread[] ts = new Thread[threadCount];
for (int i = 0; i < threadCount; i++) {
Runner r = new Runner(i);
Thread t = new Thread(r);
t.start();
ts[i] = t;
}
boolean b = true;
while(b) {
b = false;
for (int i = 0; i < threadCount; i++) {
if(ts[i].isAlive()) b = true;
}
if(b) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public List<String> getErrors() {
errors.addAll(acc.getErrors());
return errors;
}
class Runner implements Runnable {
int id;
public Runner(int id) {
this.id = id;
}
public void run() {
try {
for (int i = 0; i < 100; i++) {
readAllFiles("");
}
} catch (Exception e) {
errors.add(e.getClass().getName() + ": " + e.getMessage());
}
}
}
void readAllFiles(String path) {
String[] ps = acc.getChildren(path);
String parentPath = (path.length() == 0) ? "" : path + XModelObjectConstants.SEPARATOR;
if(ps != null) for (int i = 0; i < ps.length; i++) {
boolean d = ps[i].endsWith(XModelObjectConstants.SEPARATOR);
if(d) ps[i] = ps[i].substring(0, ps[i].length() - 1);
if(d) {
readAllFiles(parentPath + ps[i]);
} else {
acc.getContent(parentPath + ps[i]);
}
}
}
}